From e3c00addd85c5db7331983474f82d64dee808959 Mon Sep 17 00:00:00 2001 From: HeuJung Date: Thu, 9 Jul 2026 16:41:42 +0900 Subject: [PATCH] =?UTF-8?q?fix(sirsoft-basic):=20=EB=AA=A8=EB=B0=94?= =?UTF-8?q?=EC=9D=BC=20=EB=B7=B0=ED=8F=AC=ED=8A=B8=20=EA=B0=80=EB=A1=9C=20?= =?UTF-8?q?=EC=98=A4=EB=B2=84=ED=94=8C=EB=A1=9C=C2=B7=EC=95=95=EC=B0=A9=20?= =?UTF-8?q?=ED=95=B4=EC=86=8C=20=EB=B0=8F=20=ED=99=95=EC=9E=A5=20=EC=A1=B0?= =?UTF-8?q?=EA=B0=81=20audit=20=EC=82=AC=EA=B0=81=EC=A7=80=EB=8C=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 390px 실측 결과 26개 라우트 중 24개에서 문서가 뷰포트를 11px 넘겼고, 320px 에서는 햄버거 버튼이 화면 밖으로 밀려 내비게이션 자체가 불가능했다. 원인은 예외 없이 헤더 우측의 언어(71px)+통화(91px) 선택기였다. 이를 모바일 드로어로 옮기고, 좁은 화면에서는 세로 목록 대신 가로 칩으로 나열하도록 했다. 통화·배송국가는 이커머스 모듈이 슬롯에 주입하는 조각이므로 모듈 쪽에도 responsive.portable 오버라이드를 넣었다. 템플릿의 드로어 자리는 overflow-y-auto 라 옛 absolute 드롭다운이 잘리므로, 템플릿의 이커머스 모듈 의존 하한을 >=1.0.2 로 올렸다. 게시글 상단 네비는 성격이 다른 회귀였다. 게시판 이름이 길수록 flex 형제인 목록·이전글·다음글 버튼이 좁아지는데(87→73→62px), document.scrollWidth 는 내내 뷰포트와 같아 오버플로 검사로는 잡히지 않았다. 넘치는 게 아니라 줄어드는 회귀다. shrink-0 으로 버튼 폭을 고정하고, 모바일에서만 게시판 이름을 자기 줄로 올렸다. 버튼 3개 고정폭 261px + 21자 제목 323px = 584px < 태블릿 콘텐츠 735px 이므로 portable 이 아니라 mobile 스코프로 한정했다. 커밋 전 점검에서 audit 결함 두 건이 드러나 함께 고쳤다. 첫째, layout-* 룰 28개 중 27개가 appliesTo 에 확장 주입 조각 경로를 빠뜨려 조각 32개가 정적 검사에서 통째로 빠져 있었다. 실제 위반 60건이 은닉돼 있었고 그중 45건은 error 다. 다만 glob 만 넓히면 layout-grammar 의 root 화이트리스트가 조각의 정당한 키(target_layout/injections/extension_point/mode/priority)를 전부 오탐해 90건의 error 를 새로 만든다. 조각은 레이아웃이 아니라 별도 스키마이므로 extension-fragment 스키마를 신설해 오탐을 없애는 동시에 조각 고유의 결함(대상 키 누락으로 인한 silent drop, target_layout ↔ extension_point 동시 정의, 무동작 조각)을 새로 검출하게 했다. 둘째, Icon 의 w-N h-N 을 size prop 으로 바꾸라는 규정이 틀렸다. Icon 은 글리프라 박스 크기가 곧 font-size 인데, size prop 은 Font Awesome fa-* 로 매핑되어 상대값 0.875em + line-height 붕괴를 동반한다. 실측하면 w-4 h-4(16×16)가 fa-sm 에서 12.25×0.88 이 된다. 등가는 text-base 하나뿐이다. 앞선 작업에서 size:"sm" 으로 치환했던 2건을 되돌리고, 규정과 룰 메시지를 실측 등가표로 교체했다. --- AGENTS.md | 13 +- .../_bundled/sirsoft-ecommerce/CHANGELOG.md | 6 + .../_bundled/sirsoft-ecommerce/composer.json | 2 +- .../_bundled/sirsoft-ecommerce/module.json | 2 +- .../sirsoft-ecommerce/package-lock.json | 4 +- .../_bundled/sirsoft-ecommerce/package.json | 2 +- .../header-currency-selector-admin.json | 8 +- .../header-currency-selector-user.json | 88 ++++- .../layouts/shippingCountryLayouts.test.tsx | 106 ++++++ .../troubleshooting-components.test.ts | 45 +++ templates/_bundled/sirsoft-basic/CHANGELOG.md | 27 ++ .../layouts/currencySelector.test.tsx | 184 +++++++++- .../layouts/mobile-viewport-overflow.test.tsx | 325 ++++++++++++++++++ .../sirsoft-basic/dist/css/components.css | 2 +- .../sirsoft-basic/dist/js/components.iife.js | 4 +- .../dist/js/components.iife.js.map | 2 +- .../sirsoft-basic/layouts/_user_base.json | 221 ++++-------- .../partials/board/form/_post_form.json | 2 +- .../partials/board/show/_comment_input.json | 2 +- .../partials/board/show/_navigation.json | 19 +- .../mypage/addresses/_modal_address.json | 2 +- .../partials/mypage/orders/_modal_cancel.json | 45 ++- .../orders/_modal_confirm_purchase.json | 5 +- .../mypage/orders/_modal_write_review.json | 1 - .../partials/shop/_modal_address_manage.json | 2 +- .../partials/shop/detail/_info_summary.json | 5 +- .../_bundled/sirsoft-basic/package-lock.json | 4 +- templates/_bundled/sirsoft-basic/package.json | 2 +- .../src/components/composite/Modal.tsx | 2 +- .../_bundled/sirsoft-basic/template.json | 4 +- .../tests/Playwright/playwright.config.ts | 84 +++++ .../specs/board-navigation-long-name.spec.ts | 245 +++++++++++++ .../specs/mobile-viewport-overflow.spec.ts | 214 ++++++++++++ 33 files changed, 1442 insertions(+), 237 deletions(-) create mode 100644 templates/_bundled/sirsoft-basic/__tests__/layouts/mobile-viewport-overflow.test.tsx create mode 100644 templates/_bundled/sirsoft-basic/tests/Playwright/playwright.config.ts create mode 100644 templates/_bundled/sirsoft-basic/tests/Playwright/specs/board-navigation-long-name.spec.ts create mode 100644 templates/_bundled/sirsoft-basic/tests/Playwright/specs/mobile-viewport-overflow.spec.ts diff --git a/AGENTS.md b/AGENTS.md index 60af0255..b70277e3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -248,11 +248,22 @@ | 금지 | 올바른 사용 | |------|------------| -| `Icon className="w-4 h-4"` | `Icon size="sm"` 또는 `className="text-sm"` | +| `Icon className="w-4 h-4"` | `className="text-base"` (아래 등가표) 또는 `size` prop | | `Select valueKey/labelKey` | computed로 `{ value, label }` 변환 | | Form 내 `Button` type 없음 | `type="button"` 명시 (submit 방지) | | `options={{options}}` | `options={{options ?? []}}` (fallback) | +Icon 은 `` 글리프라 박스 크기가 곧 `font-size` 다. `w-N h-N` 은 박스만 정하고 글리프는 부모 `font-size` 를 상속하므로 어긋난다. 기존 `w-N h-N` 을 옮길 때는 아래 등가표를 쓴다 (Chrome 실측). + +| `w-N h-N` | px | 등가 `className` | +|---|---|---| +| `w-3 h-3` | 12 | `text-xs` | +| `w-3.5 h-3.5` | 14 | `text-sm` | +| `w-4 h-4` | 16 | `text-base` | +| `w-5 h-5` | 20 | `text-xl` | + +`size` prop 은 Font Awesome `fa-*` 클래스로 매핑되며 등가가 아니다 — `size="sm"` → `fa-sm` → `font-size: 0.875em`(상대값) + `line-height` 붕괴로 16px 이 12.25×0.88px 이 된다. 새 아이콘에는 써도 되지만, 기존 `w-N h-N` 의 치환용으로는 쓰지 않는다. + ### 상태 관리 | 금지 | 올바른 사용 | diff --git a/modules/_bundled/sirsoft-ecommerce/CHANGELOG.md b/modules/_bundled/sirsoft-ecommerce/CHANGELOG.md index 9e4a26a6..080efa7d 100644 --- a/modules/_bundled/sirsoft-ecommerce/CHANGELOG.md +++ b/modules/_bundled/sirsoft-ecommerce/CHANGELOG.md @@ -4,6 +4,12 @@ 형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며, [Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다. +## [1.0.2] - 2026-07-09 + +### Changed + +- 휴대폰·태블릿 화면에서 통화·배송국가 선택이 드롭다운 대신 항상 펼쳐진 가로 버튼으로 표시됩니다. 좁은 화면의 메뉴 안에서 드롭다운이 잘려 보이던 문제가 함께 해소됩니다. 데스크톱 화면의 드롭다운은 그대로입니다. + ## [1.0.1] - 2026-07-08 ### Added diff --git a/modules/_bundled/sirsoft-ecommerce/composer.json b/modules/_bundled/sirsoft-ecommerce/composer.json index 3ccab90e..d7af07c0 100644 --- a/modules/_bundled/sirsoft-ecommerce/composer.json +++ b/modules/_bundled/sirsoft-ecommerce/composer.json @@ -2,7 +2,7 @@ "name": "modules/sirsoft-ecommerce", "description": "Ecommerce module for Gnuboard7", "type": "library", - "version": "1.0.1", + "version": "1.0.2", "license": "MIT", "autoload": { "psr-4": { diff --git a/modules/_bundled/sirsoft-ecommerce/module.json b/modules/_bundled/sirsoft-ecommerce/module.json index 323944a8..8463b86d 100644 --- a/modules/_bundled/sirsoft-ecommerce/module.json +++ b/modules/_bundled/sirsoft-ecommerce/module.json @@ -5,7 +5,7 @@ "ko": "이커머스", "en": "Ecommerce" }, - "version": "1.0.1", + "version": "1.0.2", "license": "MIT", "description": { "ko": "그누보드7 이커머스 모듈 - 상품, 주문, 결제 관리", diff --git a/modules/_bundled/sirsoft-ecommerce/package-lock.json b/modules/_bundled/sirsoft-ecommerce/package-lock.json index 608be326..dc9901a7 100644 --- a/modules/_bundled/sirsoft-ecommerce/package-lock.json +++ b/modules/_bundled/sirsoft-ecommerce/package-lock.json @@ -1,12 +1,12 @@ { "name": "@g7/sirsoft-ecommerce", - "version": "1.0.1", + "version": "1.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@g7/sirsoft-ecommerce", - "version": "1.0.1", + "version": "1.0.2", "devDependencies": { "jsdom": "^27.4.0", "typescript": "^5.3.3", diff --git a/modules/_bundled/sirsoft-ecommerce/package.json b/modules/_bundled/sirsoft-ecommerce/package.json index 3066e2a1..08a25b1e 100644 --- a/modules/_bundled/sirsoft-ecommerce/package.json +++ b/modules/_bundled/sirsoft-ecommerce/package.json @@ -1,6 +1,6 @@ { "name": "@g7/sirsoft-ecommerce", - "version": "1.0.1", + "version": "1.0.2", "description": "그누보드7 이커머스 모듈 프론트엔드 에셋", "private": true, "type": "module", diff --git a/modules/_bundled/sirsoft-ecommerce/resources/extensions/header-currency-selector-admin.json b/modules/_bundled/sirsoft-ecommerce/resources/extensions/header-currency-selector-admin.json index 626c594b..69277391 100644 --- a/modules/_bundled/sirsoft-ecommerce/resources/extensions/header-currency-selector-admin.json +++ b/modules/_bundled/sirsoft-ecommerce/resources/extensions/header-currency-selector-admin.json @@ -63,9 +63,9 @@ "props": { "className": "text-xs text-gray-500 dark:text-gray-400" }, "text": "{{_global.preferredShippingCountry ?? _global.modules?.['sirsoft-ecommerce']?.shipping?.default_country ?? 'KR'}}" }, - { "type": "basic", "name": "Icon", "props": { "name": "coins", "className": "w-4 h-4" } }, + { "type": "basic", "name": "Icon", "props": { "name": "coins", "className": "text-base" } }, { "type": "basic", "name": "Span", "props": { "className": "font-medium" }, "text": "{{_global.preferredCurrency ?? _global.modules?.['sirsoft-ecommerce']?.language_currency?.default_currency ?? 'KRW'}}" }, - { "type": "basic", "name": "Icon", "props": { "name": "chevron-down", "className": "w-3 h-3" } } + { "type": "basic", "name": "Icon", "props": { "name": "chevron-down", "className": "text-xs" } } ], "actions": [ { @@ -119,7 +119,7 @@ "type": "basic", "name": "Icon", "if": "{{_global.preferredCurrency === currency.code}}", - "props": { "name": "check", "className": "w-4 h-4" } + "props": { "name": "check", "className": "text-base" } } ], "actions": [ @@ -174,7 +174,7 @@ "type": "basic", "name": "Icon", "if": "{{(_global.preferredShippingCountry ?? 'KR') === shipCountry.code}}", - "props": { "name": "check", "className": "w-4 h-4" } + "props": { "name": "check", "className": "text-base" } } ], "actions": [ diff --git a/modules/_bundled/sirsoft-ecommerce/resources/extensions/header-currency-selector-user.json b/modules/_bundled/sirsoft-ecommerce/resources/extensions/header-currency-selector-user.json index 9f908f94..95967281 100644 --- a/modules/_bundled/sirsoft-ecommerce/resources/extensions/header-currency-selector-user.json +++ b/modules/_bundled/sirsoft-ecommerce/resources/extensions/header-currency-selector-user.json @@ -12,8 +12,15 @@ "name": "Div", "slot": "header_currency", "props": { "className": "relative {{(_global.availableCurrencies ?? []).length > 0 || ((_global.availableShippingCountries ?? []).length > 1 && _global.modules?.['sirsoft-ecommerce']?.shipping?.international_shipping_enabled === true) ? '' : 'hidden'}}" }, + "responsive": { + "portable": { + "comment": "portable 에서는 이 조각이 사용자 템플릿 모바일 드로어(세로 블록) 안에 렌더된다. 펼친 목록이 컨테이너 폭을 채우도록 w-full. hidden 게이트 표현식은 그대로 유지(props 얕은 머지가 아니라 className 통째 교체이므로 표현식을 복제해야 함).", + "props": { "className": "relative w-full {{(_global.availableCurrencies ?? []).length > 0 || ((_global.availableShippingCountries ?? []).length > 1 && _global.modules?.['sirsoft-ecommerce']?.shipping?.international_shipping_enabled === true) ? '' : 'hidden'}}" } + } + }, "children": [ { + "comment": "트리거 버튼 — 데스크톱 전용. 모바일/태블릿(portable)에서는 이 조각이 드로어(overflow-y-auto) 안에 렌더되어 absolute 드롭다운이 잘리므로, 트리거를 숨기고 패널을 항상 펼친다.", "type": "basic", "name": "Button", "props": { @@ -22,6 +29,11 @@ "aria-expanded": "{{_local.showCurrencyDropdown ?? false}}", "aria-label": "$t:sirsoft-ecommerce.common.currency_label" }, + "responsive": { + "portable": { + "props": { "className": "hidden" } + } + }, "children": [ { "comment": "트리거 라벨: 해외배송 활성이면 선택 배송국가 코드 병기 (관리자 헤더와 동일하게 코드 텍스트로 표기 — flag-icons 의존 제거).", @@ -31,9 +43,9 @@ "props": { "className": "text-xs text-gray-500 dark:text-gray-400" }, "text": "{{_global.preferredShippingCountry ?? _global.modules?.['sirsoft-ecommerce']?.shipping?.default_country ?? 'KR'}}" }, - { "type": "basic", "name": "Icon", "props": { "name": "coins", "className": "w-4 h-4" } }, + { "type": "basic", "name": "Icon", "props": { "name": "coins", "className": "text-base" } }, { "type": "basic", "name": "Span", "props": { "className": "font-medium" }, "text": "{{_global.preferredCurrency ?? _global.defaultCurrency ?? 'KRW'}}" }, - { "type": "basic", "name": "Icon", "props": { "name": "chevron-down", "className": "w-3 h-3" } } + { "type": "basic", "name": "Icon", "props": { "name": "chevron-down", "className": "text-xs" } } ], "actions": [ { @@ -44,7 +56,7 @@ ] }, { - "comment": "드롭다운 메뉴 (통화 + 배송국가 2섹션)", + "comment": "드롭다운 메뉴 (통화 + 배송국가 2섹션). portable(0~1023px) 에서는 트리거 없이 항상 펼쳐진 정적 목록 — 드로어 스크롤 경계에서 absolute 패널이 잘리는 문제 회피.", "type": "basic", "name": "Div", "if": "{{_local.showCurrencyDropdown}}", @@ -52,6 +64,15 @@ "className": "absolute right-0 top-full mt-2 w-52 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-50 py-1 overflow-hidden", "role": "listbox" }, + "responsive": { + "portable": { + "if": "{{true}}", + "props": { + "className": "static w-full mt-2 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg py-1", + "role": "listbox" + } + } + }, "children": [ { "comment": "── 통화 섹션 ──", @@ -63,8 +84,19 @@ "type": "basic", "name": "Div", "props": { "className": "px-4 py-1.5 text-xs font-semibold text-gray-400 dark:text-gray-500 uppercase tracking-wide" }, + "responsive": { "portable": { "props": { "className": "px-3 py-1 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase" } } }, "text": "$t:sirsoft-ecommerce.common.currency_label" }, + { + "comment": "옵션 래퍼. portable 에서만 가로 칩 나열(flex-wrap). 데스크톱은 무클래스 블록이라 기존 세로 목록 그대로. iteration 은 아래 Div 자신에 걸려 있어 항목 수만큼 복제되므로, 복제본들이 이 래퍼의 flex item 이 된다.", + "type": "basic", + "name": "Div", + "responsive": { + "portable": { + "props": { "className": "flex flex-wrap gap-2 px-3 pb-2" } + } + }, + "children": [ { "type": "basic", "name": "Div", @@ -78,22 +110,34 @@ "role": "option", "aria-selected": "{{_global.preferredCurrency === currency.code}}" }, + "responsive": { + "portable": { + "props": { + "className": "inline-flex items-center gap-1.5 px-3 py-1.5 text-sm border rounded-full cursor-pointer whitespace-nowrap transition-colors {{_global.preferredCurrency === currency.code ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-800' : 'text-gray-700 dark:text-gray-300 border-gray-200 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700'}}", + "role": "option", + "aria-selected": "{{_global.preferredCurrency === currency.code}}" + } + } + }, "children": [ { "type": "basic", "name": "Span", "props": { "className": "text-base" }, "text": "{{currency.flag}}" }, { "type": "basic", "name": "Span", "props": { "className": "flex-1" }, + "responsive": { "portable": { "props": { "className": "" } } }, "children": [ { "type": "basic", "name": "Span", "props": { "className": "font-medium" }, "text": "{{currency.code}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-gray-500 dark:text-gray-400 ml-1" }, "text": "({{currency.symbol}})" } ] }, { + "comment": "portable(칩 나열)에서는 선택 상태가 배경/테두리 색으로 이미 표현되고 aria-selected 로도 전달되므로, 칩 폭을 아끼려 체크 아이콘을 숨긴다.", "type": "basic", "name": "Icon", "if": "{{_global.preferredCurrency === currency.code}}", - "props": { "name": "check", "className": "w-4 h-4" } + "responsive": { "portable": { "if": "{{false}}" } }, + "props": { "name": "check", "className": "text-base" } } ], "actions": [ @@ -128,6 +172,8 @@ } ] } + ] + } ] }, { @@ -147,8 +193,19 @@ "type": "basic", "name": "Div", "props": { "className": "px-4 py-1.5 text-xs font-semibold text-gray-400 dark:text-gray-500 uppercase tracking-wide" }, + "responsive": { "portable": { "props": { "className": "px-3 py-1 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase" } } }, "text": "$t:sirsoft-ecommerce.common.shipping_country_label" }, + { + "comment": "옵션 래퍼. portable 에서만 가로 칩 나열(flex-wrap). 데스크톱은 무클래스 블록.", + "type": "basic", + "name": "Div", + "responsive": { + "portable": { + "props": { "className": "flex flex-wrap gap-2 px-3 pb-2" } + } + }, + "children": [ { "type": "basic", "name": "Div", @@ -162,13 +219,30 @@ "role": "option", "aria-selected": "{{(_global.preferredShippingCountry ?? 'KR') === shipCountry.code}}" }, + "responsive": { + "portable": { + "props": { + "className": "inline-flex items-center gap-1.5 px-3 py-1.5 text-sm border rounded-full cursor-pointer whitespace-nowrap transition-colors {{(_global.preferredShippingCountry ?? 'KR') === shipCountry.code ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-800' : 'text-gray-700 dark:text-gray-300 border-gray-200 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700'}}", + "role": "option", + "aria-selected": "{{(_global.preferredShippingCountry ?? 'KR') === shipCountry.code}}" + } + } + }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "flex-1 font-medium" }, "text": "{{shipCountry.name}}" }, { + "type": "basic", + "name": "Span", + "props": { "className": "flex-1 font-medium" }, + "responsive": { "portable": { "props": { "className": "font-medium" } } }, + "text": "{{shipCountry.name}}" + }, + { + "comment": "portable(칩 나열)에서는 선택 상태를 배경/테두리 색 + aria-selected 로 전달하므로 체크 아이콘을 숨긴다.", "type": "basic", "name": "Icon", "if": "{{(_global.preferredShippingCountry ?? 'KR') === shipCountry.code}}", - "props": { "name": "check", "className": "w-4 h-4" } + "responsive": { "portable": { "if": "{{false}}" } }, + "props": { "name": "check", "className": "text-base" } } ], "actions": [ @@ -217,6 +291,8 @@ } ] } + ] + } ] } ] diff --git a/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/shippingCountryLayouts.test.tsx b/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/shippingCountryLayouts.test.tsx index c66cc957..b354a3f9 100644 --- a/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/shippingCountryLayouts.test.tsx +++ b/modules/_bundled/sirsoft-ecommerce/resources/js/__tests__/layouts/shippingCountryLayouts.test.tsx @@ -116,6 +116,112 @@ describe('header-currency-selector-user.json — 헤더 공용 셀렉터 2섹션 expect(raw).toContain('g7_preferred_shipping_country'); }); + /** + * 사용자 템플릿(sirsoft-basic)은 390px 뷰포트 오버플로(+11px) 해소를 위해 이 슬롯을 + * 헤더 우측 그룹에서 모바일 드로어(overflow-y-auto + w-80)로 옮겼다. 드로어에서는 + * absolute 드롭다운 패널이 스크롤 경계에서 잘리므로, 주입 노드 자체가 responsive.portable + * (0~1023px) 오버라이드로 "트리거 숨김 + 패널 항상 펼침(static)" 을 선언한다. + * + * SlotContainer 는 주입 자식에게 variant/context prop 을 전달하지 않으므로 컨테이너별로 + * 다르게 그릴 방법이 이것뿐이다. 데스크톱(≥1024px)은 기존 드롭다운을 그대로 유지한다. + */ + it('트리거 버튼은 portable(0~1023px)에서 숨겨진다 (모바일 드로어 = 펼친 목록)', () => { + const trigger = walk(root, (n) => n.name === 'Button' && Array.isArray(n.actions) && + n.actions.some((a: any) => a.handler === 'setState' && a.params?.showCurrencyDropdown !== undefined)); + expect(trigger).toBeTruthy(); + expect(trigger.responsive?.portable?.props?.className).toBe('hidden'); + }); + + it('패널은 portable 에서 if 해제 + static 흐름 (데스크톱 absolute/z-50 은 보존)', () => { + const panel = (root.children ?? []).find( + (n: any) => n.name === 'Div' && n.props?.role === 'listbox' + ); + expect(panel).toBeTruthy(); + + // 데스크톱 기본 경로 — 회귀 방지 + expect(panel.if).toBe('{{_local.showCurrencyDropdown}}'); + expect(panel.props.className).toContain('absolute'); + expect(panel.props.className).toContain('z-50'); + + // portable 오버라이드 — 엔진은 override.if 로 base if 를 완전 교체한다 + const portable = panel.responsive?.portable; + expect(portable).toBeTruthy(); + expect(portable.if).toBe('{{true}}'); + expect(portable.props.className).toContain('static'); + expect(portable.props.className).not.toContain('absolute'); + expect(portable.props.className).not.toContain('z-50'); + // 접근성 role 은 props 얕은 머지에서 유실되지 않도록 오버라이드에도 명시 + expect(portable.props.role).toBe('listbox'); + }); + + /** + * 모바일(portable)에서는 통화·배송국가를 세로 목록이 아니라 가로 나열 칩으로 그린다. + * 세로 목록은 좁은 드로어에서 세로 공간을 과하게 먹는다. + * + * 엔진의 `iteration` 은 그 속성을 가진 노드 자신을 항목 수만큼 복제한다. 따라서 옵션들을 + * 한 줄에 흘리려면 iteration 노드의 **부모**가 flex 컨테이너여야 한다 → 래퍼 Div 를 두고 + * 그 래퍼에만 responsive.portable 로 `flex flex-wrap` 을 준다(데스크톱은 무클래스 블록). + */ + const findSection = (labelKey: string) => { + const panel = (root.children ?? []).find((c: any) => c.props?.role === 'listbox'); + return (panel.children ?? []).find( + (c: any) => JSON.stringify(c).includes(labelKey) && Array.isArray(c.children) + ); + }; + + for (const [name, labelKey] of [ + ['통화', 'common.currency_label'], + ['배송국가', 'common.shipping_country_label'], + ] as const) { + it(`${name} 섹션: iteration 노드의 부모 래퍼가 portable 에서 flex-wrap 이다 (가로 칩 나열)`, () => { + const section = findSection(labelKey); + expect(section).toBeTruthy(); + + // [0] = 라벨, [1] = 옵션 래퍼 + const wrapper = section.children[1]; + expect(wrapper.name).toBe('Div'); + // 데스크톱은 무클래스(블록 흐름) — 기존 세로 목록 유지 + expect(wrapper.props?.className).toBeUndefined(); + + const portableCls = wrapper.responsive?.portable?.props?.className ?? ''; + expect(portableCls).toContain('flex'); + expect(portableCls).toContain('flex-wrap'); + + // iteration 은 래퍼가 아니라 그 자식에 있어야 한다 (래퍼가 복제되면 칩이 세로로 쌓임) + expect(wrapper.iteration).toBeUndefined(); + expect(wrapper.children[0].iteration).toBeTruthy(); + }); + + it(`${name} 섹션: 옵션 버튼이 portable 에서 칩(rounded-full) 이고 데스크톱은 w-full 행이다`, () => { + const section = findSection(labelKey); + const iterNode = section.children[1].children[0]; + const button = iterNode.children[0]; + expect(button.name).toBe('Button'); + + // 데스크톱 기본 — 전체폭 행 + expect(button.props.className).toContain('w-full'); + expect(button.props.className).not.toContain('rounded-full'); + + // portable — 가로 칩 + const chip = button.responsive?.portable?.props?.className ?? ''; + expect(chip).toContain('inline-flex'); + expect(chip).toContain('rounded-full'); + expect(chip).toContain('whitespace-nowrap'); + expect(chip).not.toContain('w-full'); + // 접근성 속성은 props 얕은 머지에서 유실되지 않도록 오버라이드에도 유지 + expect(button.responsive.portable.props.role).toBe('option'); + expect(button.responsive.portable.props['aria-selected']).toBeTruthy(); + }); + + it(`${name} 섹션: 선택 체크 아이콘은 portable 에서 숨긴다 (칩 폭 절약, 선택은 색+aria-selected 로 전달)`, () => { + const section = findSection(labelKey); + const button = section.children[1].children[0].children[0]; + const check = (button.children ?? []).find((c: any) => c.props?.name === 'check'); + expect(check).toBeTruthy(); + expect(check.responsive?.portable?.if).toBe('{{false}}'); + }); + } + it('트리거 라벨 = 배송국가 코드 텍스트 (관리자 헤더와 동일, flag-icons 비의존)', () => { // 트리거(통화 버튼) 안의 첫 Span 이 배송국가 코드를 텍스트로 표시해야 한다. const trigger = walk(root, (n) => n.name === 'Button' && Array.isArray(n.actions) && diff --git a/resources/js/core/template-engine/__tests__/troubleshooting-components.test.ts b/resources/js/core/template-engine/__tests__/troubleshooting-components.test.ts index 22758d63..7ef6baf1 100644 --- a/resources/js/core/template-engine/__tests__/troubleshooting-components.test.ts +++ b/resources/js/core/template-engine/__tests__/troubleshooting-components.test.ts @@ -12,6 +12,51 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { Logger } from '../../utils/Logger'; import { hasExplicitSetStateForField } from '../FormContext'; +import { responsiveManager } from '../ResponsiveManager'; + +describe('트러블슈팅 회귀 테스트 - flex 압착(shrink)', () => { + /** + * 사례: 텍스트가 길어질수록 형제 버튼이 좁아지는데 오버플로 검사로는 안 잡힘 + * + * 해결책이 `responsive.mobile`(0~767) 로 좁힌 2행 레이아웃에 의존한다. + * `portable`(0~1023) 이면 태블릿에서 불필요하게 줄바꿈된다. + * 여기서는 그 전제인 스코프 경계와 우선순위를 고정한다. + * + * @see docs/frontend/troubleshooting-components-misc.md "flex 압착(shrink) 관련 이슈" + */ + describe('[사례 1] responsive 스코프 경계 — mobile(0~767) vs portable(0~1023)', () => { + it('mobile 은 767px 까지만 매칭되고 768px 부터는 미적용', () => { + const responsive = { mobile: { props: { className: 'flex-wrap' } } }; + + expect(responsiveManager.getMatchingKey(responsive, 320)).toBe('mobile'); + expect(responsiveManager.getMatchingKey(responsive, 390)).toBe('mobile'); + expect(responsiveManager.getMatchingKey(responsive, 767)).toBe('mobile'); + // 768px 부터 태블릿 — 한 줄 유지 (버튼 261px + 21자 제목 323px = 584px < 735px) + expect(responsiveManager.getMatchingKey(responsive, 768)).toBeNull(); + expect(responsiveManager.getMatchingKey(responsive, 1280)).toBeNull(); + }); + + it('portable 은 1023px 까지 매칭되어 태블릿도 포함한다', () => { + const responsive = { portable: { props: { className: 'flex-wrap' } } }; + + expect(responsiveManager.getMatchingKey(responsive, 767)).toBe('portable'); + expect(responsiveManager.getMatchingKey(responsive, 768)).toBe('portable'); + expect(responsiveManager.getMatchingKey(responsive, 1023)).toBe('portable'); + expect(responsiveManager.getMatchingKey(responsive, 1024)).toBeNull(); + }); + + it('mobile 과 portable 이 함께 정의되면 좁은 범위(mobile)가 우선한다', () => { + const responsive = { + portable: { props: { className: 'portable-wins' } }, + mobile: { props: { className: 'mobile-wins' } }, + }; + + expect(responsiveManager.getMatchingKey(responsive, 390)).toBe('mobile'); + // 태블릿 구간에서는 mobile 이 매칭되지 않으므로 portable 로 폴백 + expect(responsiveManager.getMatchingKey(responsive, 900)).toBe('portable'); + }); + }); +}); describe('트러블슈팅 회귀 테스트 - DataGrid 컴포넌트', () => { beforeEach(() => { diff --git a/templates/_bundled/sirsoft-basic/CHANGELOG.md b/templates/_bundled/sirsoft-basic/CHANGELOG.md index f0e85ca8..07274934 100644 --- a/templates/_bundled/sirsoft-basic/CHANGELOG.md +++ b/templates/_bundled/sirsoft-basic/CHANGELOG.md @@ -4,6 +4,33 @@ 형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며, [Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다. +## [1.0.2] - 2026-07-09 + +### Changed + +- 이커머스 모듈 최소 요구 버전을 1.0.2 로 상향했습니다. 휴대폰 메뉴 안의 통화·배송국가 선택이 이 템플릿의 새 배치에서 잘리지 않고 표시되려면 해당 버전 이상이 필요합니다. + +### Fixed + +#### 모바일 화면 + +- 휴대폰 화면에서 헤더가 가로로 넘쳐 사이트명이 잘리고 메뉴 버튼이 화면 밖으로 밀려나던 문제를 수정했습니다. 언어·통화 선택은 메뉴(햄버거) 안으로 옮겼습니다. +- 좁은 화면(320px)에서 메뉴 버튼을 누를 수 없어 사이트 이동 자체가 불가능하던 문제를 수정했습니다. +- 메뉴 안의 언어·통화·배송국가 선택이 세로로 길게 늘어지지 않고 가로로 나란히 배치됩니다. +- 언어 선택이 로그인하지 않은 방문자에게도 보입니다. 이전에는 메뉴 안에서 로그인한 사용자만 언어를 바꿀 수 있었습니다. +- 게시판 이름이 길면 게시글 위쪽의 목록·이전글·다음글 버튼이 찌그러지거나 보이지 않던 문제를 수정했습니다. 이제 게시판 이름이 윗줄에 표시되고 버튼은 아랫줄에 원래 크기로 놓입니다. + +#### 입력 화면 + +- 비회원이 글을 쓰거나 댓글을 달 때 이름·비밀번호 입력칸이 화면을 벗어나거나 지나치게 좁아지던 문제를 수정했습니다. +- 해외 배송지를 등록할 때 도시·주(州) 입력칸이 좁아 내용을 확인하기 어렵던 문제를 수정했습니다. + +#### 표시 + +- 상품 상세의 쿠폰 할인 금액이 두 줄로 잘려 보이던 문제를 수정했습니다. 쿠폰이 많으면 여러 줄로 나눠 표시합니다. +- 주문 취소 화면에서 쿠폰 이름과 항목 이름이 단어 중간에서 잘려 읽기 어렵던 문제를 수정했습니다. +- 좁은 화면에서 팝업 창이 화면 가장자리에 붙어 보이던 문제를 수정했습니다. 이제 양옆에 여백이 생깁니다. + ## [1.0.1] - 2026-07-08 ### Added diff --git a/templates/_bundled/sirsoft-basic/__tests__/layouts/currencySelector.test.tsx b/templates/_bundled/sirsoft-basic/__tests__/layouts/currencySelector.test.tsx index 631e5148..68d0d2fc 100644 --- a/templates/_bundled/sirsoft-basic/__tests__/layouts/currencySelector.test.tsx +++ b/templates/_bundled/sirsoft-basic/__tests__/layouts/currencySelector.test.tsx @@ -9,10 +9,17 @@ * - 표시 통화 초기화 핸들러(initPreferredCurrency)는 sirsoft-ecommerce 모듈 소유 * (`sirsoft-ecommerce.initPreferredCurrency`). _user_base.json init_actions 가 모듈 네임스페이스로 호출. * + * 모바일 배치 (390px 오버플로 해소 후): + * - 언어·통화는 헤더 우측 그룹이 아니라 모바일 드로어 최상단(mobile_drawer_prefs)에 있다. + * 데스크톱(Header.tsx)은 기존 헤더 배치를 유지한다. 사유는 아래 해당 it 블록 주석 참조. + * - 드로어는 overflow-y-auto 라 absolute 드롭다운이 잘린다 → 주입 조각이 responsive.portable + * 오버라이드로 모바일에서만 펼친 목록이 된다(트리거 숨김 + 패널 static). + * * 회귀 차단: * - _user_base.json: defaultCurrency/preferredCurrency(_global)/availableCurrencies 주입 + X-Currency 헤더. * - init 핸들러 호출이 모듈 네임스페이스(sirsoft-ecommerce.initPreferredCurrency)로 되어 있다. * - 헤더에 통화 슬롯(SlotContainer header_currency)과 언어 버튼이 있고, Header.tsx 는 통화 코드/모듈을 모른다. + * - 데스크톱 드롭다운(absolute/z-50)은 responsive 오버라이드로 무력화되지 않는다. * * @vitest-environment jsdom */ @@ -34,6 +41,32 @@ function loadRepo(relPath: string): string { return fs.readFileSync(path.resolve(repoRoot, relPath), 'utf8'); } +/** + * 레이아웃 트리에서 id 로 노드를 찾습니다. + * + * @param node 탐색 시작 노드/배열 + * @param id 찾을 노드 id + * @return 찾은 노드 (없으면 null) + */ +function findNode(node: any, id: string): any { + if (!node || typeof node !== 'object') return null; + if (Array.isArray(node)) { + for (const n of node) { + const r = findNode(n, id); + if (r) return r; + } + return null; + } + if (node.id === id) return node; + for (const k of ['children', 'components']) { + if (node[k]) { + const r = findNode(node[k], id); + if (r) return r; + } + } + return null; +} + describe('A1 — _user_base.json 통화 주입', () => { const userBase = loadJson('layouts/_user_base.json'); const initActions = userBase.init_actions ?? []; @@ -119,31 +152,110 @@ describe('헤더 통화 슬롯(이커머스 주입) + 언어 버튼(코어 내 expect(headerTsx).toContain('currentLocale'); }); - it('모바일 헤더(_user_base.json)도 header_currency 슬롯(SlotContainer)을 마운트한다', () => { - expect(userBaseText).toContain('mobile_currency_selector_wrap'); + it('모바일 표면(_user_base.json)도 header_currency 슬롯(SlotContainer)을 마운트한다', () => { + // 마운트 위치는 헤더 우측 그룹 → 모바일 드로어로 이동했으나, 슬롯 소비 자체는 유지된다. + expect(userBaseText).toContain('mobile_drawer_currency_wrap'); expect(userBaseText).toContain('"slotId": "header_currency"'); }); - it('모바일 헤더에 언어 선택기가 통화와 같은 줄에 노출된다 (데스크톱 패리티, 4표면 일관)', () => { + /** + * 배치 반전 사유 (과거 결정의 의도적 해제): + * + * 이 자리에는 원래 `it('모바일 헤더에 언어 선택기가 통화와 같은 줄에 노출된다 + * (데스크톱 패리티, 4표면 일관)')` 이 있었고, 헤더 우측 그룹(#mobile_header_right)의 + * 직계 자식에 mobile_lang_selector_wrap / mobile_currency_selector_wrap 이 있음을 단언했다. + * + * 390px(iPhone) 실측 결과 그 배치가 사이트 전역 가로 오버플로의 단일 원인이었다: + * 우측 그룹 = theme(36)+notification(36)+cart(34)+lang(71)+currency(91)+user(30)+hamburger(30) + * = 351px, 로고 뒤 x=50 에서 시작 → 우측 끝 401px → 뷰포트 390px 를 11px 초과. + * 언어+통화만 제거하면 document.scrollWidth 가 401 → 390 으로 떨어진다. + * 320px(iPhone SE)에서는 햄버거 버튼이 화면 밖으로 밀려 내비게이션 자체가 불가능했다. + * + * 따라서 "데스크톱 패리티"는 **모바일에 한해** 의도적으로 해제하고, 언어·통화를 + * 드로어(mobile_nav_drawer > mobile_drawer_prefs) 최상단으로 옮겼다. + * 데스크톱(Header.tsx)의 배치는 그대로다 — 위 'Header.tsx' 단언들이 그것을 지킨다. + * + * 되돌리려면 먼저 390px 오버플로를 다른 방법으로 해소해야 한다. + */ + it('모바일 헤더 우측 그룹에 언어/통화가 없다 (390px 오버플로 해소 — 데스크톱 패리티 모바일 한정 해제)', () => { const userBase = loadJson('layouts/_user_base.json'); - // 모바일 헤더 우측 영역에서 언어 셀렉터와 통화 슬롯을 찾는다 - function find(node: any, id: string): any { - if (!node || typeof node !== 'object') return null; - if (Array.isArray(node)) { for (const n of node) { const r = find(n, id); if (r) return r; } return null; } - if (node.id === id) return node; - for (const k of ['children', 'components']) { if (node[k]) { const r = find(node[k], id); if (r) return r; } } - return null; - } - const mobileRight = find(userBase.components, 'mobile_header_right'); + const mobileRight = findNode(userBase.components, 'mobile_header_right'); expect(mobileRight).toBeTruthy(); const ids = (mobileRight.children ?? []).map((c: any) => c.id); - expect(ids).toContain('mobile_lang_selector_wrap'); - expect(ids).toContain('mobile_currency_selector_wrap'); - // 언어 버튼은 setLocale + 현재 로케일 코드($locale) 표기 - const langWrap = find(mobileRight, 'mobile_lang_selector_wrap'); - const raw = JSON.stringify(langWrap); - expect(raw).toContain('setLocale'); - expect(raw).toContain('{{$locale}}'); + expect(ids).not.toContain('mobile_lang_selector_wrap'); + expect(ids).not.toContain('mobile_currency_selector_wrap'); + }); + + it('언어/통화는 모바일 드로어 최상단(mobile_drawer_prefs)에 있다', () => { + const userBase = loadJson('layouts/_user_base.json'); + const drawer = findNode(userBase.components, 'mobile_nav_drawer'); + expect(drawer).toBeTruthy(); + + const prefs = findNode(drawer, 'mobile_drawer_prefs'); + expect(prefs).toBeTruthy(); + + // 언어: setLocale 액션 + $locales iteration + const prefsRaw = JSON.stringify(prefs); + expect(prefsRaw).toContain('setLocale'); + expect(prefsRaw).toContain('{{$locales}}'); + + // 통화: 슬롯 컨테이너. id 는 필수 — SlotContainer 가 같은 슬롯을 여러 컨테이너에서 + // 렌더할 때 주입 컴포넌트 root id 를 `{id}__{containerId}` 로 스코프하기 때문 + // (데스크톱 Header.tsx 와 동시 소비 → id 없으면 HTML id 중복). + const currencyWrap = findNode(prefs, 'mobile_drawer_currency_wrap'); + expect(currencyWrap).toBeTruthy(); + expect(currencyWrap.name).toBe('SlotContainer'); + expect(currencyWrap.props?.slotId).toBe('header_currency'); + }); + + /** + * 엔진의 `iteration` 은 그 속성을 가진 노드 **자신**을 항목 수만큼 복제한다. + * flex 컨테이너에 iteration 을 걸면 컨테이너가 복제되어 각 칩이 자기 컨테이너를 갖고 + * 세로로 쌓인다. 가로 나열을 유지하려면 iteration 은 반드시 Button 자신에 있어야 한다. + */ + it('드로어 언어 칩은 flex-wrap 컨테이너 + Button 에 iteration (가로 나열)', () => { + const userBase = loadJson('layouts/_user_base.json'); + const prefs = findNode(userBase.components, 'mobile_drawer_prefs'); + const langSection = (prefs.children ?? []).find( + (c: any) => typeof c.if === 'string' && c.if.includes('$locales.length') + ); + expect(langSection).toBeTruthy(); + + // [0] = 라벨, [1] = 칩 컨테이너 + const chipRow = langSection.children[1]; + expect(chipRow.props.className).toContain('flex'); + expect(chipRow.props.className).toContain('flex-wrap'); + expect(chipRow.iteration).toBeUndefined(); + + const button = chipRow.children[0]; + expect(button.name).toBe('Button'); + expect(button.iteration?.source).toBe('{{$locales}}'); + expect(button.iteration?.item_var).toBe('loc'); + expect(button.props.className).toContain('rounded-full'); + expect(button.props.className).toContain('whitespace-nowrap'); + }); + + it('드로어 언어/통화 섹션은 비회원에게도 노출된다 (아코디언 currentUser 게이트 바깥)', () => { + const userBase = loadJson('layouts/_user_base.json'); + const drawer = findNode(userBase.components, 'mobile_nav_drawer'); + const prefs = (drawer.children ?? []).find((c: any) => c.id === 'mobile_drawer_prefs'); + // 드로어의 직계 자식이어야 한다 (로그인 아코디언 `if: currentUser?.uuid` 안이면 비회원 미노출) + expect(prefs).toBeTruthy(); + expect(prefs.if).toBeUndefined(); + }); + + it('로그인 아코디언 안에 중복 언어 블록이 남아있지 않다 (드로어 단일 소스)', () => { + const userBase = loadJson('layouts/_user_base.json'); + const drawer = findNode(userBase.components, 'mobile_nav_drawer'); + const accordion = (drawer.children ?? []).find( + (c: any) => typeof c.if === 'string' && c.if.includes('currentUser?.uuid') + ); + expect(accordion).toBeTruthy(); + expect(JSON.stringify(accordion)).not.toContain('setLocale'); + }); + + it('헤더 드롭다운 잔여 상태(mobileLangMenuOpen)가 제거되었다', () => { + expect(userBaseText).not.toContain('mobileLangMenuOpen'); }); it('통화 슬롯 주입 앵커(header_currency_inject_anchor)가 _user_base 에 있다', () => { @@ -197,6 +309,40 @@ describe('이커머스 헤더 통화 주입 확장 (slot=header_currency)', () = expect(raw).not.toContain('/api/modules/sirsoft-ecommerce/user/currency'); }); + /** + * 모바일 드로어는 overflow-y-auto + w-80 이라 absolute 드롭다운 패널이 스크롤 경계에서 잘린다. + * SlotContainer 는 주입 자식에게 variant/context prop 을 전달하지 않으므로 컨테이너별로 + * 다르게 그릴 수 없다 → 주입 노드 자체에 responsive.portable(0~1023px) 오버라이드를 둔다. + */ + it('유저 확장 트리거 버튼은 portable(모바일/태블릿)에서 숨겨진다', () => { + const node = userExt.injections[0].components[0]; + const trigger = (node.children ?? []).find((c: any) => c.name === 'Button'); + expect(trigger).toBeTruthy(); + expect(trigger.responsive?.portable?.props?.className).toBe('hidden'); + }); + + it('유저 확장 패널은 portable 에서 항상 펼쳐진 정적 목록이다 (absolute/z-50 해제)', () => { + const node = userExt.injections[0].components[0]; + const panel = (node.children ?? []).find( + (c: any) => c.name === 'Div' && c.props?.role === 'listbox' + ); + expect(panel).toBeTruthy(); + + // 데스크톱 기본 경로는 그대로 (회귀 방지) + expect(panel.if).toBe('{{_local.showCurrencyDropdown}}'); + expect(panel.props.className).toContain('absolute'); + expect(panel.props.className).toContain('z-50'); + + // portable 오버라이드: if 해제 + 정적 흐름 + const portable = panel.responsive?.portable; + expect(portable).toBeTruthy(); + expect(portable.if).toBe('{{true}}'); + expect(portable.props.className).toContain('static'); + expect(portable.props.className).not.toContain('absolute'); + expect(portable.props.className).not.toContain('z-50'); + expect(portable.props.role).toBe('listbox'); + }); + it('관리자 확장이 _admin_base 에 header_currency 슬롯 + init_actions(통화 복원)를 기여한다', () => { expect(adminExt.target_layout).toBe('_admin_base'); const node = adminExt.injections[0].components[0]; diff --git a/templates/_bundled/sirsoft-basic/__tests__/layouts/mobile-viewport-overflow.test.tsx b/templates/_bundled/sirsoft-basic/__tests__/layouts/mobile-viewport-overflow.test.tsx new file mode 100644 index 00000000..4a71ebac --- /dev/null +++ b/templates/_bundled/sirsoft-basic/__tests__/layouts/mobile-viewport-overflow.test.tsx @@ -0,0 +1,325 @@ +/** + * @file mobile-viewport-overflow.test.tsx + * @description 390px(iPhone) 모바일 뷰포트 가로 오버플로/압착 회귀 차단 + * + * 배경 (Chrome DevTools 390x844x3, mobile UA 실측): + * - 헤더 우측 그룹에 언어(71px)+통화(91px)가 있어 26개 라우트 중 24개에서 + * document.scrollWidth = 401px (뷰포트 390px 대비 +11px). 320px(iPhone SE)에서는 + * 햄버거 버튼이 화면 밖으로 밀려 내비게이션 자체가 불가능했다. + * → 언어/통화를 드로어로 이동 (currencySelector.test.tsx 가 배치를 단언) + * - 비회원 댓글폼: 아바타 76px 들여쓰기 + flex-1 입력 2개 → 문서 +81px 초과 + * - 비회원 글쓰기폼: grid-cols-2 → 각 입력 147px 로 압착, placeholder 잘림 + * - 상품상세 쿠폰 칩: 라벨 Span 에 className 이 없어 39px 폭에서 2줄로 줄바꿈 + * - 부분환불 모달: 91px 3열에서 한글 쿠폰명이 단어 중간에서 잘림 + * - 해외주소 도시/주: 무접두 grid-cols-2 → 390px 에서 각 입력 155px + * - 게시글 상단 네비: 게시판명이 길수록 좌우 버튼을 압착 (390px 실측 — 5자 '이전글' 87px, + * 11자 73px, 21자 62px 로 chevron 과 텍스트가 겹침). docOverflow 는 0 이라 오버플로 + * 검사로는 잡히지 않는다. + * + * 이 파일은 위 좌표들이 되돌아가지 않도록 레이아웃 JSON 구조를 직접 단언한다. + * 2열 행의 좁은 화면 대비는 두 방식 모두 허용한다: Tailwind 접두(`grid-cols-1 sm:grid-cols-2`) + * 또는 엔진 노드 레벨 `responsive.portable`(0~1023px) 오버라이드. + * + * @vitest-environment jsdom + */ + +import { describe, it, expect } from 'vitest'; +import fs from 'node:fs'; +import path from 'node:path'; + +const layoutsDir = path.resolve(__dirname, '../../layouts'); + +/** + * 레이아웃 JSON 을 로드합니다. + * + * @param relativePath layouts/ 기준 상대 경로 + * @return 파싱된 레이아웃 객체 + */ +function loadLayout(relativePath: string): any { + return JSON.parse(fs.readFileSync(path.join(layoutsDir, relativePath), 'utf-8')); +} + +/** + * 술어를 만족하는 첫 노드를 찾습니다. + * + * @param node 탐색 시작 노드/배열 + * @param predicate 판정 함수 + * @return 찾은 노드 (없으면 null) + */ +function findNode(node: any, predicate: (n: any) => boolean): any { + if (!node || typeof node !== 'object') return null; + if (Array.isArray(node)) { + for (const n of node) { + const r = findNode(n, predicate); + if (r) return r; + } + return null; + } + if (predicate(node)) return node; + for (const k of ['children', 'components']) { + if (node[k]) { + const r = findNode(node[k], predicate); + if (r) return r; + } + } + return null; +} + +/** + * 술어를 만족하는 모든 노드를 찾습니다. + * + * @param node 탐색 시작 노드/배열 + * @param predicate 판정 함수 + * @param acc 누적 배열 (재귀 내부용) + * @return 찾은 노드 배열 + */ +function findAllNodes(node: any, predicate: (n: any) => boolean, acc: any[] = []): any[] { + if (!node || typeof node !== 'object') return acc; + if (Array.isArray(node)) { + for (const n of node) findAllNodes(n, predicate, acc); + return acc; + } + if (predicate(node)) acc.push(node); + for (const k of ['children', 'components']) { + if (node[k]) findAllNodes(node[k], predicate, acc); + } + return acc; +} + +describe('게시판 비회원 입력 행 — 좁은 화면에서 세로 스택', () => { + it('댓글 입력폼의 이름/비밀번호 행이 flex-col sm:flex-row 다 (+81px 오버플로 회귀)', () => { + const layout = loadLayout('partials/board/show/_comment_input.json'); + const guestRow = findNode( + layout, + (n) => typeof n.if === 'string' && n.if.includes('!_global.currentUser?.uuid') + ); + expect(guestRow).toBeTruthy(); + + const cls: string = guestRow.props?.className ?? ''; + expect(cls).toContain('flex-col'); + expect(cls).toContain('sm:flex-row'); + }); + + it('글쓰기폼의 이름/비밀번호 행이 grid-cols-1 sm:grid-cols-2 다 (147px 압착 회귀)', () => { + const layout = loadLayout('partials/board/form/_post_form.json'); + const guestRow = findNode( + layout, + (n) => + typeof n.if === 'string' && + n.if.includes('!_global.currentUser?.uuid') && + n.if.includes('!route.id') + ); + expect(guestRow).toBeTruthy(); + + const cls: string = guestRow.props?.className ?? ''; + expect(cls).toContain('grid-cols-1'); + expect(cls).toContain('sm:grid-cols-2'); + // 무접두 grid-cols-2 는 모바일에서 그대로 2열이 된다 + expect(cls).not.toMatch(/(^|\s)grid-cols-2(\s|$)/); + }); +}); + +describe('상품상세 쿠폰 칩 — 라벨 한 줄, 목록은 여러 줄', () => { + const layout = loadLayout('partials/shop/detail/_info_summary.json'); + + it('칩 컨테이너가 가로 스크롤 대신 줄바꿈한다', () => { + const container = findNode( + layout, + (n) => typeof n.comment === 'string' && n.comment.includes('쿠폰 배지 목록') + ); + expect(container).toBeTruthy(); + + const cls: string = container.props?.className ?? ''; + expect(cls).toContain('flex-wrap'); + // 실측상 스크롤되지 않았고(scrollWidth == clientWidth), 칩이 숨겨질 뿐이었다 + expect(cls).not.toContain('overflow-x-auto'); + }); + + it('칩 라벨(할인 금액)이 whitespace-nowrap 으로 한 줄을 유지한다', () => { + const label = findNode( + layout, + (n) => n.name === 'Span' && typeof n.text === 'string' && n.text.includes('benefit_formatted') + ); + expect(label).toBeTruthy(); + expect(label.props?.className ?? '').toContain('whitespace-nowrap'); + }); +}); + +describe('Modal 좌우 여백 — max-w-full 이 clamp 를 이기지 못하게', () => { + /** + * Modal.tsx 는 `max-w-[calc(100vw-2rem)]` 로 화면 좌우 16px 여백을 보장한다. + * 그런데 그 뒤에 `${className}` 이 붙으므로, 레이아웃이 `max-w-full`(=100%)을 주면 + * CSS 우선순위상 100% 가 이겨 모달이 화면에 딱 붙는다(390px 실측: left=0, right=390). + * + * Modal 이 스스로 clamp 하므로 `max-w-full` 은 불필요하며 해롭다. + */ + const modalFiles = [ + 'partials/mypage/orders/_modal_cancel.json', + 'partials/mypage/orders/_modal_confirm_purchase.json', + 'partials/mypage/orders/_modal_write_review.json', + ]; + + for (const file of modalFiles) { + it(`${file} 의 Modal props.className 에 max-w-full 이 없다`, () => { + const layout = loadLayout(file); + expect(layout.name).toBe('Modal'); + const cls: string = layout.props?.className ?? ''; + expect(cls.split(/\s+/)).not.toContain('max-w-full'); + }); + } + + it('Modal.tsx 패널이 max-w-[calc(100vw-2rem)] 로 화면 폭을 clamp 한다', () => { + const tsx = fs.readFileSync( + path.resolve(__dirname, '../../src/components/composite/Modal.tsx'), + 'utf-8' + ); + expect(tsx).toContain('max-w-[calc(100vw-2rem)]'); + }); +}); + +describe('부분환불 계산 모달 — 좁은 열에서 단어 중간 줄바꿈 금지', () => { + const layout = loadLayout('partials/mypage/orders/_modal_cancel.json'); + + it('행 라벨(상품쿠폰 할인 등)이 모두 break-keep 이다', () => { + // 390px 에서 3열 grid 의 첫 열은 71px — keep-all 이 없으면 "상품쿠폰 할" / "인" 으로 잘린다 + const labels = findAllNodes( + layout, + (n) => + n.name === 'Span' && + typeof n.text === 'string' && + n.text.startsWith('$t:mypage.order_detail.cancel_modal.') + ).filter((n) => (n.props?.className ?? '').includes('text-gray-600')); + + expect(labels.length).toBeGreaterThan(0); + for (const node of labels) { + expect(node.props.className).toContain('break-keep'); + } + }); + + it('쿠폰 상세 행(쿠폰명 + 할인액)이 모두 break-keep 이다', () => { + // `{{pc.name}} -{{amount}}원` 형태의 P 노드 — 91px 3열에서 한글 단어가 중간에서 잘렸다 + const couponLines = findAllNodes( + layout, + (n) => + n.name === 'P' && + typeof n.text === 'string' && + n.text.includes('.name}}') && + n.text.includes('discount_amount') + ); + expect(couponLines.length).toBeGreaterThan(0); + + for (const node of couponLines) { + expect(node.props?.className ?? '').toContain('break-keep'); + } + }); + + it('복원 쿠폰 행은 쿠폰명 break-keep + 금액 whitespace-nowrap 이다', () => { + const name = findNode( + layout, + (n) => n.name === 'Span' && typeof n.text === 'string' && n.text.includes('coupon.coupon_name') + ); + expect(name).toBeTruthy(); + expect(name.props?.className ?? '').toContain('break-keep'); + + const amount = findNode( + layout, + (n) => + n.name === 'Span' && + typeof n.text === 'string' && + n.text.includes('coupon.discount_amount') + ); + expect(amount).toBeTruthy(); + expect(amount.props?.className ?? '').toContain('whitespace-nowrap'); + }); +}); + +describe('게시글 상단 네비 — 긴 게시판명이 좌우 버튼을 압착하지 않는다', () => { + const layout = loadLayout('partials/board/show/_navigation.json'); + + it('컨테이너가 모바일에서 줄바꿈한다 (flex-wrap)', () => { + // 셋을 한 줄에 두면 게시판명이 남은 폭을 먹고 형제를 눌러버린다. + // 390px 실측: '이전글' 버튼 폭이 5자 87px → 11자 73px → 21자 62px 로 줄었다. + expect(layout.props.className).toContain('justify-between'); + + // portable(0~1023) 이 아니라 mobile(0~767). 버튼 3개 고정폭 261px + 21자 제목 자연폭 + // 323px = 584px 이므로 태블릿(콘텐츠 735px)은 한 줄로 충분하다. + expect(layout.responsive?.portable).toBeUndefined(); + const mobile: string = layout.responsive?.mobile?.props?.className ?? ''; + expect(mobile).toContain('flex-wrap'); + expect(mobile).toContain('justify-between'); + // 줄바꿈 시 두 행이 붙지 않도록 세로 gap 이 필요하다 + expect(mobile).toMatch(/\bgap-y-\d/); + }); + + it('게시판명이 모바일에서 자기 줄을 차지한다 (order-first w-full)', () => { + const title = findNode( + layout, + (n) => n.name === 'Span' && typeof n.text === 'string' && n.text.includes('board?.name') + ); + expect(title).toBeTruthy(); + + const mobile: string = title.responsive?.mobile?.props?.className ?? ''; + const tokens = mobile.split(/\s+/); + expect(tokens).toContain('order-first'); + expect(tokens).toContain('w-full'); + }); + + it('목록 버튼과 이전/다음 그룹은 shrink-0 이라 눌리지 않는다', () => { + const backBtn = findNode( + layout, + (n) => n.name === 'Button' && findNode(n, (c) => c.text === '$t:board.back_to_list') !== null + ); + expect(backBtn).toBeTruthy(); + expect(backBtn.props.className.split(/\s+/)).toContain('shrink-0'); + + // 루트 컨테이너도 이전글/다음글 을 자손으로 갖는다. 직계 자식이 두 Button 인 노드만 고른다. + const prevNextGroup = findNode( + layout, + (n) => + n.name === 'Div' && + Array.isArray(n.children) && + n.children.length === 2 && + n.children.every((c: any) => c.name === 'Button') && + findNode(n, (c: any) => c.text === '$t:board.prev') !== null && + findNode(n, (c: any) => c.text === '$t:board.next') !== null + ); + expect(prevNextGroup).toBeTruthy(); + expect(prevNextGroup.props.className.split(/\s+/)).toContain('shrink-0'); + }); +}); + +describe('해외주소 도시/주 입력 — 무접두 grid-cols-2 금지', () => { + const files = [ + 'partials/shop/_modal_address_manage.json', + 'partials/mypage/addresses/_modal_address.json', + ]; + + for (const file of files) { + it(`${file} 의 2열 행은 모두 좁은 화면 대비가 있다 (sm: 접두 또는 responsive.portable)`, () => { + const layout = loadLayout(file); + // 390px 에서 2열을 그대로 유지하는 노드를 찾는다. + // 허용되는 두 가지 대비책: + // (a) Tailwind breakpoint 접두 — "grid-cols-1 sm:grid-cols-2" + // (b) 엔진 노드 레벨 responsive.portable(0~1023px) 오버라이드 — 받는분/연락처 행 패턴 + const offenders = findAllNodes(layout, (n) => { + const cls = n.props?.className; + if (typeof cls !== 'string' || !cls.split(/\s+/).includes('grid-cols-2')) return false; + const portableCls = n.responsive?.portable?.props?.className; + const portableIsSingleColumn = + typeof portableCls === 'string' && portableCls.split(/\s+/).includes('grid-cols-1'); + return !portableIsSingleColumn; + }); + expect(offenders.map((n) => n.props.className)).toEqual([]); + }); + + it(`${file} 의 도시/주 행은 grid-cols-1 sm:grid-cols-2 다`, () => { + const layout = loadLayout(file); + const row = findNode(layout, (n) => { + const cls = n.props?.className; + return typeof cls === 'string' && cls.includes('sm:grid-cols-2') && cls.includes('gap-2'); + }); + expect(row).toBeTruthy(); + expect(row.props.className.split(/\s+/)).toContain('grid-cols-1'); + }); + } +}); diff --git a/templates/_bundled/sirsoft-basic/dist/css/components.css b/templates/_bundled/sirsoft-basic/dist/css/components.css index 63e26ca5..7deaa6ab 100644 --- a/templates/_bundled/sirsoft-basic/dist/css/components.css +++ b/templates/_bundled/sirsoft-basic/dist/css/components.css @@ -1 +1 @@ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-scroll-snap-strictness:proximity;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-yellow-950:oklch(28.6% .066 53.813);--color-lime-50:oklch(98.6% .031 120.757);--color-lime-100:oklch(96.7% .067 122.328);--color-lime-200:oklch(93.8% .127 124.321);--color-lime-300:oklch(89.7% .196 126.665);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-500:oklch(76.8% .233 130.85);--color-lime-600:oklch(64.8% .2 131.684);--color-lime-700:oklch(53.2% .157 131.589);--color-lime-800:oklch(45.3% .124 130.933);--color-lime-900:oklch(40.5% .101 131.063);--color-lime-950:oklch(27.4% .072 132.109);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-200:oklch(91% .096 180.426);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-900:oklch(38.6% .063 188.416);--color-teal-950:oklch(27.7% .046 192.524);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-800:oklch(45% .085 224.283);--color-cyan-900:oklch(39.8% .07 227.392);--color-cyan-950:oklch(30.2% .056 229.695);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-800:oklch(39.8% .195 277.366);--color-indigo-900:oklch(35.9% .144 278.697);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-900:oklch(38% .189 293.745);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-100:oklch(95.2% .037 318.852);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-fuchsia-800:oklch(45.2% .211 324.591);--color-fuchsia-900:oklch(40.1% .17 325.612);--color-fuchsia-950:oklch(29.3% .136 325.661);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-200:oklch(89.9% .061 343.231);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-500:oklch(65.6% .241 354.308);--color-pink-600:oklch(59.2% .249 .584);--color-pink-700:oklch(52.5% .223 3.958);--color-pink-800:oklch(45.9% .187 3.815);--color-pink-900:oklch(40.8% .153 2.432);--color-pink-950:oklch(28.4% .109 3.907);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-100:oklch(97% .001 106.424);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-stone-950:oklch(14.7% .004 49.25);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-2xs:18rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-sm:0 1px 2px #00000026;--drop-shadow-md:0 3px 3px #0000001f;--drop-shadow-lg:0 4px 4px #00000026;--drop-shadow-xl:0 9px 7px #0000001a;--drop-shadow-2xl:0 25px 25px #00000026;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--blur-2xl:40px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-50:#eff6ff;--color-primary-100:#dbeafe;--color-primary-400:#60a5fa;--color-primary-500:#3b82f6;--color-primary-600:#2563eb;--color-primary-700:#1d4ed8;--color-primary-900:#1e3a8a}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--background:255 255 255;--foreground:17 24 39}.dark{--background:17 24 39;--foreground:255 255 255}html{scroll-behavior:smooth}body{background-color:var(--color-white);color:var(--color-gray-900)}.dark :is(body){background-color:var(--color-gray-900);color:var(--color-white)}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}a{color:var(--color-blue-600)}@media(hover:hover){a:hover{color:var(--color-blue-700)}}.dark :is(a){color:var(--color-blue-400)}@media(hover:hover){.dark :is(a):hover{color:var(--color-blue-300)}}a{text-decoration:none}:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--color-blue-500)}}@layer components{.flex-between{justify-content:space-between;align-items:center;display:flex}.btn{border-radius:var(--radius-lg);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));justify-content:center;align-items:center;display:inline-flex}.btn:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-primary{background-color:var(--color-blue-600);color:var(--color-white)}@media(hover:hover){.btn-primary:hover{background-color:var(--color-blue-700)}}.btn-primary:focus{--tw-ring-color:var(--color-blue-500)}.dark .btn-primary{background-color:var(--color-blue-500)}@media(hover:hover){.dark .btn-primary:hover{background-color:var(--color-blue-600)}}.dark .btn-primary:focus{--tw-ring-color:var(--color-blue-400)}.btn-secondary{background-color:var(--color-gray-100);color:var(--color-gray-900)}@media(hover:hover){.btn-secondary:hover{background-color:var(--color-gray-200)}}.btn-secondary:focus{--tw-ring-color:var(--color-gray-500)}.dark .btn-secondary{background-color:var(--color-gray-700);color:var(--color-white)}@media(hover:hover){.dark .btn-secondary:hover{background-color:var(--color-gray-600)}}.dark .btn-secondary:focus{--tw-ring-color:var(--color-gray-400)}.btn-ghost{color:var(--color-gray-700);background-color:#0000}@media(hover:hover){.btn-ghost:hover{background-color:var(--color-gray-100)}}.btn-ghost:focus{--tw-ring-color:var(--color-gray-500)}.dark .btn-ghost{color:var(--color-gray-300)}@media(hover:hover){.dark .btn-ghost:hover{background-color:var(--color-gray-800)}}.dark .btn-ghost:focus{--tw-ring-color:var(--color-gray-400)}.btn-danger{background-color:var(--color-red-600);color:var(--color-white)}@media(hover:hover){.btn-danger:hover{background-color:var(--color-red-700)}}.btn-danger:focus{--tw-ring-color:var(--color-red-500)}.dark .btn-danger{background-color:var(--color-red-500)}@media(hover:hover){.dark .btn-danger:hover{background-color:var(--color-red-600)}}.dark .btn-danger:focus{--tw-ring-color:var(--color-red-400)}.input{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-300);width:100%;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);background-color:var(--color-white);color:var(--color-gray-900)}.input:focus{border-color:var(--color-blue-500);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-blue-500)}.dark .input{border-color:var(--color-gray-600);background-color:var(--color-gray-800);color:var(--color-white)}.input::placeholder{color:var(--color-gray-400)}.dark .input::placeholder{color:var(--color-gray-500)}.input-error{border-color:var(--color-red-500)}.input-error:focus{border-color:var(--color-red-500);--tw-ring-color:var(--color-red-500)}.card{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-200);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .card{border-color:var(--color-gray-700);background-color:var(--color-gray-800)}.badge{padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-primary{background-color:var(--color-blue-100);color:var(--color-blue-800)}.dark .badge-primary{background-color:var(--color-blue-900);color:var(--color-blue-200)}.badge-success{background-color:var(--color-green-100);color:var(--color-green-800)}.dark .badge-success{background-color:var(--color-green-900);color:var(--color-green-200)}.badge-warning{background-color:var(--color-yellow-100);color:var(--color-yellow-800)}.dark .badge-warning{background-color:var(--color-yellow-900);color:var(--color-yellow-200)}.badge-danger{background-color:var(--color-red-100);color:var(--color-red-800)}.dark .badge-danger{background-color:var(--color-red-900);color:var(--color-red-200)}}@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-1{inset:calc(var(--spacing)*1)}.inset-2{inset:calc(var(--spacing)*2)}.inset-3{inset:calc(var(--spacing)*3)}.inset-4{inset:calc(var(--spacing)*4)}.inset-5{inset:calc(var(--spacing)*5)}.inset-6{inset:calc(var(--spacing)*6)}.inset-8{inset:calc(var(--spacing)*8)}.inset-auto{inset:auto}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-1{inset-inline:calc(var(--spacing)*1)}.inset-x-2{inset-inline:calc(var(--spacing)*2)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-x-auto{inset-inline:auto}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-1{inset-block:calc(var(--spacing)*1)}.inset-y-2{inset-block:calc(var(--spacing)*2)}.inset-y-3{inset-block:calc(var(--spacing)*3)}.inset-y-4{inset-block:calc(var(--spacing)*4)}.inset-y-auto{inset-block:auto}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-3{top:calc(var(--spacing)*-3)}.-top-4{top:calc(var(--spacing)*-4)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-1\/3{top:33.3333%}.top-1\/4{top:25%}.top-2{top:calc(var(--spacing)*2)}.top-2\/3{top:66.6667%}.top-3{top:calc(var(--spacing)*3)}.top-3\/4{top:75%}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-12{top:calc(var(--spacing)*12)}.top-16{top:calc(var(--spacing)*16)}.top-24{top:calc(var(--spacing)*24)}.top-auto{top:auto}.top-full{top:100%}.-right-1{right:calc(var(--spacing)*-1)}.-right-2{right:calc(var(--spacing)*-2)}.-right-3{right:calc(var(--spacing)*-3)}.-right-4{right:calc(var(--spacing)*-4)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/2{right:50%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-10{right:calc(var(--spacing)*10)}.right-12{right:calc(var(--spacing)*12)}.right-16{right:calc(var(--spacing)*16)}.right-auto{right:auto}.right-full{right:100%}.-bottom-1{bottom:calc(var(--spacing)*-1)}.-bottom-2{bottom:calc(var(--spacing)*-2)}.-bottom-3{bottom:calc(var(--spacing)*-3)}.-bottom-4{bottom:calc(var(--spacing)*-4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-1\/2{bottom:50%}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-10{bottom:calc(var(--spacing)*10)}.bottom-12{bottom:calc(var(--spacing)*12)}.bottom-16{bottom:calc(var(--spacing)*16)}.bottom-auto{bottom:auto}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-2{left:calc(var(--spacing)*-2)}.-left-3{left:calc(var(--spacing)*-3)}.-left-4{left:calc(var(--spacing)*-4)}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\.5{left:calc(var(--spacing)*1.5)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-8{left:calc(var(--spacing)*8)}.left-10{left:calc(var(--spacing)*10)}.left-12{left:calc(var(--spacing)*12)}.left-16{left:calc(var(--spacing)*16)}.left-auto{left:auto}.left-full{left:100%}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.z-auto{z-index:auto}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-first{order:-9999}.order-last{order:9999}.order-none{order:0}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-4{grid-column-start:4}.col-start-5{grid-column-start:5}.col-start-6{grid-column-start:6}.col-start-7{grid-column-start:7}.col-start-8{grid-column-start:8}.col-start-9{grid-column-start:9}.col-start-10{grid-column-start:10}.col-start-11{grid-column-start:11}.col-start-12{grid-column-start:12}.col-start-13{grid-column-start:13}.col-end-1{grid-column-end:1}.col-end-2{grid-column-end:2}.col-end-3{grid-column-end:3}.col-end-4{grid-column-end:4}.col-end-5{grid-column-end:5}.col-end-6{grid-column-end:6}.col-end-7{grid-column-end:7}.col-end-8{grid-column-end:8}.col-end-9{grid-column-end:9}.col-end-10{grid-column-end:10}.col-end-11{grid-column-end:11}.col-end-12{grid-column-end:12}.col-end-13{grid-column-end:13}.row-span-1{grid-row:span 1/span 1}.row-span-2{grid-row:span 2/span 2}.row-span-3{grid-row:span 3/span 3}.row-span-4{grid-row:span 4/span 4}.row-span-5{grid-row:span 5/span 5}.row-span-6{grid-row:span 6/span 6}.row-span-full{grid-row:1/-1}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.row-start-4{grid-row-start:4}.row-start-5{grid-row-start:5}.row-start-6{grid-row-start:6}.row-start-7{grid-row-start:7}.row-end-1{grid-row-end:1}.row-end-2{grid-row-end:2}.row-end-3{grid-row-end:3}.row-end-4{grid-row-end:4}.row-end-5{grid-row-end:5}.row-end-6{grid-row-end:6}.row-end-7{grid-row-end:7}.float-end{float:inline-end}.float-left{float:left}.float-none{float:none}.float-right{float:right}.float-start{float:inline-start}.clear-both{clear:both}.clear-end{clear:inline-end}.clear-left{clear:left}.clear-none{clear:none}.clear-right{clear:right}.clear-start{clear:inline-start}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-m-1{margin:calc(var(--spacing)*-1)}.-m-2{margin:calc(var(--spacing)*-2)}.-m-3{margin:calc(var(--spacing)*-3)}.-m-4{margin:calc(var(--spacing)*-4)}.-m-5{margin:calc(var(--spacing)*-5)}.-m-6{margin:calc(var(--spacing)*-6)}.-m-8{margin:calc(var(--spacing)*-8)}.m-0{margin:calc(var(--spacing)*0)}.m-1{margin:calc(var(--spacing)*1)}.m-2{margin:calc(var(--spacing)*2)}.m-3{margin:calc(var(--spacing)*3)}.m-4{margin:calc(var(--spacing)*4)}.m-5{margin:calc(var(--spacing)*5)}.m-6{margin:calc(var(--spacing)*6)}.m-8{margin:calc(var(--spacing)*8)}.m-10{margin:calc(var(--spacing)*10)}.m-12{margin:calc(var(--spacing)*12)}.m-16{margin:calc(var(--spacing)*16)}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.-mx-4{margin-inline:calc(var(--spacing)*-4)}.-mx-5{margin-inline:calc(var(--spacing)*-5)}.-mx-6{margin-inline:calc(var(--spacing)*-6)}.-mx-8{margin-inline:calc(var(--spacing)*-8)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-6{margin-inline:calc(var(--spacing)*6)}.mx-8{margin-inline:calc(var(--spacing)*8)}.mx-10{margin-inline:calc(var(--spacing)*10)}.mx-12{margin-inline:calc(var(--spacing)*12)}.mx-16{margin-inline:calc(var(--spacing)*16)}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.-my-2{margin-block:calc(var(--spacing)*-2)}.-my-3{margin-block:calc(var(--spacing)*-3)}.-my-4{margin-block:calc(var(--spacing)*-4)}.-my-5{margin-block:calc(var(--spacing)*-5)}.-my-6{margin-block:calc(var(--spacing)*-6)}.-my-8{margin-block:calc(var(--spacing)*-8)}.my-0{margin-block:calc(var(--spacing)*0)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.my-5{margin-block:calc(var(--spacing)*5)}.my-6{margin-block:calc(var(--spacing)*6)}.my-8{margin-block:calc(var(--spacing)*8)}.my-10{margin-block:calc(var(--spacing)*10)}.my-12{margin-block:calc(var(--spacing)*12)}.my-16{margin-block:calc(var(--spacing)*16)}.my-auto{margin-block:auto}.-mt-1{margin-top:calc(var(--spacing)*-1)}.-mt-2{margin-top:calc(var(--spacing)*-2)}.-mt-3{margin-top:calc(var(--spacing)*-3)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.-mt-5{margin-top:calc(var(--spacing)*-5)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-8{margin-top:calc(var(--spacing)*-8)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-auto{margin-top:auto}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-2{margin-right:calc(var(--spacing)*-2)}.-mr-3{margin-right:calc(var(--spacing)*-3)}.-mr-4{margin-right:calc(var(--spacing)*-4)}.-mr-5{margin-right:calc(var(--spacing)*-5)}.-mr-6{margin-right:calc(var(--spacing)*-6)}.-mr-8{margin-right:calc(var(--spacing)*-8)}.mr-0{margin-right:calc(var(--spacing)*0)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-5{margin-right:calc(var(--spacing)*5)}.mr-6{margin-right:calc(var(--spacing)*6)}.mr-8{margin-right:calc(var(--spacing)*8)}.mr-10{margin-right:calc(var(--spacing)*10)}.mr-12{margin-right:calc(var(--spacing)*12)}.mr-16{margin-right:calc(var(--spacing)*16)}.mr-auto{margin-right:auto}.-mb-1{margin-bottom:calc(var(--spacing)*-1)}.-mb-2{margin-bottom:calc(var(--spacing)*-2)}.-mb-3{margin-bottom:calc(var(--spacing)*-3)}.-mb-4{margin-bottom:calc(var(--spacing)*-4)}.-mb-5{margin-bottom:calc(var(--spacing)*-5)}.-mb-6{margin-bottom:calc(var(--spacing)*-6)}.-mb-8{margin-bottom:calc(var(--spacing)*-8)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-auto{margin-bottom:auto}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-3{margin-left:calc(var(--spacing)*-3)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-5{margin-left:calc(var(--spacing)*-5)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-8{margin-left:calc(var(--spacing)*-8)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-14{margin-left:calc(var(--spacing)*14)}.ml-16{margin-left:calc(var(--spacing)*16)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-auto{aspect-ratio:auto}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.h-0{height:calc(var(--spacing)*0)}.h-1{height:calc(var(--spacing)*1)}.h-1\/2{height:50%}.h-1\/3{height:33.3333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.6667%}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-2\/3{height:66.6667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-4{height:calc(var(--spacing)*4)}.h-4\/5{height:80%}.h-5{height:calc(var(--spacing)*5)}.h-5\/6{height:83.3333%}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-72{height:calc(var(--spacing)*72)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[42px\]{height:42px}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.h-max{height:max-content}.h-min{height:min-content}.h-px{height:1px}.h-screen{height:100vh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[55vh\]{max-height:55vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[75vh\]{max-height:75vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(90vh-140px\)\]{max-height:calc(90vh - 140px)}.max-h-\[calc\(100vh-200px\)\]{max-height:calc(100vh - 200px)}.max-h-fit{max-height:fit-content}.max-h-full{max-height:100%}.max-h-max{max-height:max-content}.max-h-min{max-height:min-content}.max-h-none{max-height:none}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-20{min-height:calc(var(--spacing)*20)}.min-h-\[40px\]{min-height:40px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80px\]{min-height:80px}.min-h-\[200px\]{min-height:200px}.min-h-\[400px\]{min-height:400px}.min-h-fit{min-height:fit-content}.min-h-full{min-height:100%}.min-h-max{min-height:max-content}.min-h-min{min-height:min-content}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\/2{width:50%}.w-1\/3{width:33.3333%}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-1\/6{width:16.6667%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-2\/3{width:66.6667%}.w-2\/4{width:50%}.w-2\/5{width:40%}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-4{width:calc(var(--spacing)*4)}.w-4\/5{width:80%}.w-5{width:calc(var(--spacing)*5)}.w-5\/6{width:83.3333%}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-52{width:calc(var(--spacing)*52)}.w-56{width:calc(var(--spacing)*56)}.w-60{width:calc(var(--spacing)*60)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-96{width:calc(var(--spacing)*96)}.w-\[220px\]{width:220px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-min{width:min-content}.w-px{width:1px}.w-screen{width:100vw}.max-w-0{max-width:calc(var(--spacing)*0)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[60\%\]{max-width:60%}.max-w-\[85vw\]{max-width:85vw}.max-w-\[calc\(100vw-1rem\)\]{max-width:calc(100vw - 1rem)}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.max-w-min{max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:var(--breakpoint-2xl)}.max-w-screen-lg{max-width:var(--breakpoint-lg)}.max-w-screen-md{max-width:var(--breakpoint-md)}.max-w-screen-sm{max-width:var(--breakpoint-sm)}.max-w-screen-xl{max-width:var(--breakpoint-xl)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-24{min-width:calc(var(--spacing)*24)}.min-w-\[100px\]{min-width:100px}.min-w-\[120px\]{min-width:120px}.min-w-\[300px\]{min-width:300px}.min-w-fit{min-width:fit-content}.min-w-full{min-width:100%}.min-w-max{min-width:max-content}.min-w-min{min-width:min-content}.flex-1{flex:1}.flex-auto{flex:auto}.flex-initial{flex:0 auto}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-0{flex-basis:calc(var(--spacing)*0)}.basis-1{flex-basis:calc(var(--spacing)*1)}.basis-1\/2{flex-basis:50%}.basis-1\/3{flex-basis:33.3333%}.basis-1\/4{flex-basis:25%}.basis-2{flex-basis:calc(var(--spacing)*2)}.basis-2\/3{flex-basis:66.6667%}.basis-3\/4{flex-basis:75%}.basis-auto{flex-basis:auto}.basis-full{flex-basis:100%}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.caption-top{caption-side:top}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-1{--tw-border-spacing-x:calc(var(--spacing)*1);--tw-border-spacing-y:calc(var(--spacing)*1);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-2{--tw-border-spacing-x:calc(var(--spacing)*2);--tw-border-spacing-y:calc(var(--spacing)*2);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-3{--tw-border-spacing-x:calc(var(--spacing)*3);--tw-border-spacing-y:calc(var(--spacing)*3);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-4{--tw-border-spacing-x:calc(var(--spacing)*4);--tw-border-spacing-y:calc(var(--spacing)*4);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-5{--tw-border-spacing-x:calc(var(--spacing)*5);--tw-border-spacing-y:calc(var(--spacing)*5);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-6{--tw-border-spacing-x:calc(var(--spacing)*6);--tw-border-spacing-y:calc(var(--spacing)*6);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-8{--tw-border-spacing-x:calc(var(--spacing)*8);--tw-border-spacing-y:calc(var(--spacing)*8);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.origin-bottom{transform-origin:bottom}.origin-bottom-left{transform-origin:0 100%}.origin-bottom-right{transform-origin:100% 100%}.origin-center{transform-origin:50%}.origin-left{transform-origin:0}.origin-right{transform-origin:100%}.origin-top{transform-origin:top}.origin-top-left{transform-origin:0 0}.origin-top-right{transform-origin:100% 0}.-translate-x-1{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-2{--tw-translate-x:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-3{--tw-translate-x:calc(var(--spacing)*-3);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-4{--tw-translate-x:calc(var(--spacing)*-4);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1\/2{--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1\/3{--tw-translate-x:calc(1/3*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1\/4{--tw-translate-x: 25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-2{--tw-translate-x:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-2\/3{--tw-translate-x:calc(2/3*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-3{--tw-translate-x:calc(var(--spacing)*3);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-3\/4{--tw-translate-x: 75% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-6{--tw-translate-x:calc(var(--spacing)*6);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-8{--tw-translate-x:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-10{--tw-translate-x:calc(var(--spacing)*10);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-3{--tw-translate-y:calc(var(--spacing)*-3);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-4{--tw-translate-y:calc(var(--spacing)*-4);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-1{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-1\/2{--tw-translate-y: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-1\/3{--tw-translate-y:calc(1/3*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-1\/4{--tw-translate-y: 25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2\/3{--tw-translate-y:calc(2/3*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-3{--tw-translate-y:calc(var(--spacing)*3);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-3\/4{--tw-translate-y: 75% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-5{--tw-translate-y:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-6{--tw-translate-y:calc(var(--spacing)*6);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-10{--tw-translate-y:calc(var(--spacing)*10);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-12{--tw-translate-y:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-full{--tw-translate-y:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-50{--tw-scale-x:50%;--tw-scale-y:50%;--tw-scale-z:50%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-90{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-105{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-150{--tw-scale-x:150%;--tw-scale-y:150%;--tw-scale-z:150%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-50{--tw-scale-x:50%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-75{--tw-scale-x:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-90{--tw-scale-x:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-95{--tw-scale-x:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-100{--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-105{--tw-scale-x:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-110{--tw-scale-x:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-125{--tw-scale-x:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-150{--tw-scale-x:150%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-0{--tw-scale-y:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-50{--tw-scale-y:50%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-75{--tw-scale-y:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-90{--tw-scale-y:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-95{--tw-scale-y:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-100{--tw-scale-y:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-105{--tw-scale-y:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-110{--tw-scale-y:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-125{--tw-scale-y:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-150{--tw-scale-y:150%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-1{rotate:-1deg}.-rotate-2{rotate:-2deg}.-rotate-3{rotate:-3deg}.-rotate-6{rotate:-6deg}.-rotate-12{rotate:-12deg}.-rotate-45{rotate:-45deg}.-rotate-90{rotate:-90deg}.-rotate-180{rotate:-180deg}.rotate-0{rotate:none}.rotate-1{rotate:1deg}.rotate-2{rotate:2deg}.rotate-3{rotate:3deg}.rotate-6{rotate:6deg}.rotate-12{rotate:12deg}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.-skew-x-1{--tw-skew-x:skewX( -1deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-x-2{--tw-skew-x:skewX( -2deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-x-3{--tw-skew-x:skewX( -3deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-x-6{--tw-skew-x:skewX( -6deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-x-12{--tw-skew-x:skewX( -12deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-0{--tw-skew-x:skewX(0deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-1{--tw-skew-x:skewX(1deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-2{--tw-skew-x:skewX(2deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-3{--tw-skew-x:skewX(3deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-6{--tw-skew-x:skewX(6deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-12{--tw-skew-x:skewX(12deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-1{--tw-skew-y:skewY( -1deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-2{--tw-skew-y:skewY( -2deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-3{--tw-skew-y:skewY( -3deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-6{--tw-skew-y:skewY( -6deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-12{--tw-skew-y:skewY( -12deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-0{--tw-skew-y:skewY(0deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-1{--tw-skew-y:skewY(1deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-2{--tw-skew-y:skewY(2deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-3{--tw-skew-y:skewY(3deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-6{--tw-skew-y:skewY(6deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-12{--tw-skew-y:skewY(12deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform,.transform-cpu{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform-gpu{transform:translateZ(0)var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform-none{transform:none}.animate-\[loading_1\.5s_ease-in-out_infinite\]{animation:1.5s ease-in-out infinite loading}.animate-bounce{animation:var(--animate-bounce)}.animate-none{animation:none}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-alias{cursor:alias}.cursor-all-scroll{cursor:all-scroll}.cursor-auto{cursor:auto}.cursor-cell{cursor:cell}.cursor-col-resize{cursor:col-resize}.cursor-context-menu{cursor:context-menu}.cursor-copy{cursor:copy}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-e-resize{cursor:e-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-help{cursor:help}.cursor-move{cursor:move}.cursor-n-resize{cursor:n-resize}.cursor-ne-resize{cursor:ne-resize}.cursor-nesw-resize{cursor:nesw-resize}.cursor-no-drop{cursor:no-drop}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-ns-resize{cursor:ns-resize}.cursor-nw-resize{cursor:nw-resize}.cursor-nwse-resize{cursor:nwse-resize}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-row-resize{cursor:row-resize}.cursor-s-resize{cursor:s-resize}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.cursor-text{cursor:text}.cursor-vertical-text{cursor:vertical-text}.cursor-w-resize{cursor:w-resize}.cursor-wait{cursor:wait}.cursor-zoom-in{cursor:zoom-in}.cursor-zoom-out{cursor:zoom-out}.touch-pan-left{--tw-pan-x:pan-left;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-right{--tw-pan-x:pan-right;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-x{--tw-pan-x:pan-x;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-down{--tw-pan-y:pan-down;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-up{--tw-pan-y:pan-up;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-auto{touch-action:auto}.touch-manipulation{touch-action:manipulation}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-x{resize:horizontal}.resize-y{resize:vertical}.snap-both{scroll-snap-type:both var(--tw-scroll-snap-strictness)}.snap-none{scroll-snap-type:none}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-y{scroll-snap-type:y var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-proximity{--tw-scroll-snap-strictness:proximity}.snap-align-none{scroll-snap-align:none}.snap-center{scroll-snap-align:center}.snap-end{scroll-snap-align:end}.snap-start{scroll-snap-align:start}.snap-always{scroll-snap-stop:always}.snap-normal{scroll-snap-stop:normal}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.\[appearance\:textfield\]{appearance:textfield}.appearance-auto{appearance:auto}.appearance-none{appearance:none}.columns-1{columns:1}.columns-2{columns:2}.columns-2xl{columns:var(--container-2xl)}.columns-2xs{columns:var(--container-2xs)}.columns-3{columns:3}.columns-3xl{columns:var(--container-3xl)}.columns-3xs{columns:var(--container-3xs)}.columns-4{columns:4}.columns-4xl{columns:var(--container-4xl)}.columns-5{columns:5}.columns-5xl{columns:var(--container-5xl)}.columns-6{columns:6}.columns-6xl{columns:var(--container-6xl)}.columns-7{columns:7}.columns-7xl{columns:var(--container-7xl)}.columns-8{columns:8}.columns-9{columns:9}.columns-10{columns:10}.columns-11{columns:11}.columns-12{columns:12}.columns-auto{columns:auto}.columns-lg{columns:var(--container-lg)}.columns-md{columns:var(--container-md)}.columns-sm{columns:var(--container-sm)}.columns-xl{columns:var(--container-xl)}.columns-xs{columns:var(--container-xs)}.break-before-all{break-before:all}.break-before-auto{break-before:auto}.break-before-avoid{break-before:avoid}.break-before-avoid-page{break-before:avoid-page}.break-before-column{break-before:column}.break-before-left{break-before:left}.break-before-page{break-before:page}.break-before-right{break-before:right}.break-inside-auto{break-inside:auto}.break-inside-avoid{break-inside:avoid}.break-inside-avoid-column{break-inside:avoid-column}.break-inside-avoid-page{break-inside:avoid-page}.break-after-all{break-after:all}.break-after-auto{break-after:auto}.break-after-avoid{break-after:avoid}.break-after-avoid-page{break-after:avoid-page}.break-after-column{break-after:column}.break-after-left{break-after:left}.break-after-page{break-after:page}.break-after-right{break-after:right}.auto-cols-\[calc\(25\%_-_12px\)\]{grid-auto-columns:calc(25% - 12px)}.auto-cols-\[calc\(33\.333\%_-_11px\)\]{grid-auto-columns:calc(33.333% - 11px)}.auto-cols-\[calc\(50\%_-_8px\)\]{grid-auto-columns:calc(50% - 8px)}.auto-cols-auto{grid-auto-columns:auto}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.auto-cols-max{grid-auto-columns:max-content}.auto-cols-min{grid-auto-columns:min-content}.grid-flow-col{grid-auto-flow:column}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-flow-dense{grid-auto-flow:dense}.grid-flow-row{grid-auto-flow:row}.grid-flow-row-dense{grid-auto-flow:dense}.auto-rows-auto{grid-auto-rows:auto}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.auto-rows-max{grid-auto-rows:max-content}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-\[\.\.\.\]{grid-template-columns:...}.grid-cols-\[60px_1fr\]{grid-template-columns:60px 1fr}.grid-cols-\[60px_1fr_160px\]{grid-template-columns:60px 1fr 160px}.grid-cols-\[60px_minmax\(300px\,1fr\)_160px\]{grid-template-columns:60px minmax(300px,1fr) 160px}.grid-cols-\[60px_minmax\(300px\,1fr\)_160px_100px\]{grid-template-columns:60px minmax(300px,1fr) 160px 100px}.grid-cols-\[60px_minmax\(300px\,1fr\)_160px_100px_70px\]{grid-template-columns:60px minmax(300px,1fr) 160px 100px 70px}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.place-content-around{place-content:space-around}.place-content-baseline{place-content:baseline start}.place-content-between{place-content:space-between}.place-content-center{place-content:center}.place-content-end{place-content:end}.place-content-evenly{place-content:space-evenly}.place-content-start{place-content:start}.place-content-stretch{place-content:stretch}.place-items-baseline{place-items:baseline}.place-items-center{place-items:center}.place-items-end{place-items:end}.place-items-start{place-items:start}.place-items-stretch{place-items:stretch stretch}.content-around{align-content:space-around}.content-between{align-content:space-between}.content-center{align-content:center}.content-end{align-content:flex-end}.content-evenly{align-content:space-evenly}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}:where(.-space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*-1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-y-reverse)))}:where(.-space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*-2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-0{column-gap:calc(var(--spacing)*0)}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-5{column-gap:calc(var(--spacing)*5)}.gap-x-6{column-gap:calc(var(--spacing)*6)}.gap-x-8{column-gap:calc(var(--spacing)*8)}.gap-x-10{column-gap:calc(var(--spacing)*10)}.gap-x-12{column-gap:calc(var(--spacing)*12)}:where(.-space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0{row-gap:calc(var(--spacing)*0)}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-3{row-gap:calc(var(--spacing)*3)}.gap-y-4{row-gap:calc(var(--spacing)*4)}.gap-y-5{row-gap:calc(var(--spacing)*5)}.gap-y-6{row-gap:calc(var(--spacing)*6)}.gap-y-8{row-gap:calc(var(--spacing)*8)}.gap-y-10{row-gap:calc(var(--spacing)*10)}.gap-y-12{row-gap:calc(var(--spacing)*12)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-x-0>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(0px*var(--tw-divide-x-reverse));border-inline-end-width:calc(0px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-x-2>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(2px*var(--tw-divide-x-reverse));border-inline-end-width:calc(2px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-x-4>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(4px*var(--tw-divide-x-reverse));border-inline-end-width:calc(4px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-x-8>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(8px*var(--tw-divide-x-reverse));border-inline-end-width:calc(8px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-0>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-2>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(2px*var(--tw-divide-y-reverse));border-bottom-width:calc(2px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-4>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(4px*var(--tw-divide-y-reverse));border-bottom-width:calc(4px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-8>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(8px*var(--tw-divide-y-reverse));border-bottom-width:calc(8px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}:where(.divide-dashed>:not(:last-child)){--tw-border-style:dashed;border-style:dashed}:where(.divide-dotted>:not(:last-child)){--tw-border-style:dotted;border-style:dotted}:where(.divide-double>:not(:last-child)){--tw-border-style:double;border-style:double}:where(.divide-none>:not(:last-child)){--tw-border-style:none;border-style:none}:where(.divide-solid>:not(:last-child)){--tw-border-style:solid;border-style:solid}:where(.divide-black>:not(:last-child)){border-color:var(--color-black)}:where(.divide-current>:not(:last-child)){border-color:currentColor}:where(.divide-gray-50>:not(:last-child)){border-color:var(--color-gray-50)}:where(.divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-gray-300>:not(:last-child)){border-color:var(--color-gray-300)}:where(.divide-gray-400>:not(:last-child)){border-color:var(--color-gray-400)}:where(.divide-gray-500>:not(:last-child)){border-color:var(--color-gray-500)}:where(.divide-gray-600>:not(:last-child)){border-color:var(--color-gray-600)}:where(.divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}:where(.divide-gray-800>:not(:last-child)){border-color:var(--color-gray-800)}:where(.divide-gray-900>:not(:last-child)){border-color:var(--color-gray-900)}:where(.divide-inherit>:not(:last-child)){border-color:inherit}:where(.divide-slate-50>:not(:last-child)){border-color:var(--color-slate-50)}:where(.divide-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}:where(.divide-slate-200>:not(:last-child)){border-color:var(--color-slate-200)}:where(.divide-slate-300>:not(:last-child)){border-color:var(--color-slate-300)}:where(.divide-slate-400>:not(:last-child)){border-color:var(--color-slate-400)}:where(.divide-slate-500>:not(:last-child)){border-color:var(--color-slate-500)}:where(.divide-slate-600>:not(:last-child)){border-color:var(--color-slate-600)}:where(.divide-slate-700>:not(:last-child)){border-color:var(--color-slate-700)}:where(.divide-slate-800>:not(:last-child)){border-color:var(--color-slate-800)}:where(.divide-slate-900>:not(:last-child)){border-color:var(--color-slate-900)}:where(.divide-transparent>:not(:last-child)){border-color:#0000}:where(.divide-white>:not(:last-child)){border-color:var(--color-white)}.place-self-auto{place-self:auto}.place-self-center{place-self:center}.place-self-end{place-self:end}.place-self-start{place-self:start}.place-self-stretch{place-self:stretch stretch}.self-auto{align-self:auto}.self-baseline{align-self:baseline}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-x-visible{overflow-x:visible}.overflow-y-auto{overflow-y:auto}.overflow-y-clip{overflow-y:clip}.overflow-y-hidden{overflow-y:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-y-visible{overflow-y:visible}.overscroll-auto{overscroll-behavior:auto}.overscroll-contain{overscroll-behavior:contain}.overscroll-none{overscroll-behavior:none}.overscroll-x-auto{overscroll-behavior-x:auto}.overscroll-x-contain{overscroll-behavior-x:contain}.overscroll-x-none{overscroll-behavior-x:none}.overscroll-y-auto{overscroll-behavior-y:auto}.overscroll-y-contain{overscroll-behavior-y:contain}.overscroll-y-none{overscroll-behavior-y:none}.scroll-auto{scroll-behavior:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.rounded-t-full{border-top-left-radius:3.40282e38px;border-top-right-radius:3.40282e38px}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-t-sm{border-top-left-radius:var(--radius-sm);border-top-right-radius:var(--radius-sm)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-2xl{border-top-left-radius:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl)}.rounded-l-3xl{border-top-left-radius:var(--radius-3xl);border-bottom-left-radius:var(--radius-3xl)}.rounded-l-full{border-top-left-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.rounded-l-lg{border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-l-sm{border-top-left-radius:var(--radius-sm);border-bottom-left-radius:var(--radius-sm)}.rounded-l-xl{border-top-left-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.rounded-tl{border-top-left-radius:.25rem}.rounded-tl-2xl{border-top-left-radius:var(--radius-2xl)}.rounded-tl-3xl{border-top-left-radius:var(--radius-3xl)}.rounded-tl-full{border-top-left-radius:3.40282e38px}.rounded-tl-lg{border-top-left-radius:var(--radius-lg)}.rounded-tl-md{border-top-left-radius:var(--radius-md)}.rounded-tl-none{border-top-left-radius:0}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-tl-xl{border-top-left-radius:var(--radius-xl)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-2xl{border-top-right-radius:var(--radius-2xl);border-bottom-right-radius:var(--radius-2xl)}.rounded-r-3xl{border-top-right-radius:var(--radius-3xl);border-bottom-right-radius:var(--radius-3xl)}.rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-r-sm{border-top-right-radius:var(--radius-sm);border-bottom-right-radius:var(--radius-sm)}.rounded-r-xl{border-top-right-radius:var(--radius-xl);border-bottom-right-radius:var(--radius-xl)}.rounded-tr{border-top-right-radius:.25rem}.rounded-tr-2xl{border-top-right-radius:var(--radius-2xl)}.rounded-tr-3xl{border-top-right-radius:var(--radius-3xl)}.rounded-tr-full{border-top-right-radius:3.40282e38px}.rounded-tr-lg{border-top-right-radius:var(--radius-lg)}.rounded-tr-md{border-top-right-radius:var(--radius-md)}.rounded-tr-none{border-top-right-radius:0}.rounded-tr-sm{border-top-right-radius:var(--radius-sm)}.rounded-tr-xl{border-top-right-radius:var(--radius-xl)}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-2xl{border-bottom-right-radius:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl)}.rounded-b-3xl{border-bottom-right-radius:var(--radius-3xl);border-bottom-left-radius:var(--radius-3xl)}.rounded-b-full{border-bottom-right-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-b-sm{border-bottom-right-radius:var(--radius-sm);border-bottom-left-radius:var(--radius-sm)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.rounded-br{border-bottom-right-radius:.25rem}.rounded-br-2xl{border-bottom-right-radius:var(--radius-2xl)}.rounded-br-3xl{border-bottom-right-radius:var(--radius-3xl)}.rounded-br-full{border-bottom-right-radius:3.40282e38px}.rounded-br-lg{border-bottom-right-radius:var(--radius-lg)}.rounded-br-md{border-bottom-right-radius:var(--radius-md)}.rounded-br-none{border-bottom-right-radius:0}.rounded-br-sm{border-bottom-right-radius:var(--radius-sm)}.rounded-br-xl{border-bottom-right-radius:var(--radius-xl)}.rounded-bl{border-bottom-left-radius:.25rem}.rounded-bl-2xl{border-bottom-left-radius:var(--radius-2xl)}.rounded-bl-3xl{border-bottom-left-radius:var(--radius-3xl)}.rounded-bl-full{border-bottom-left-radius:3.40282e38px}.rounded-bl-lg{border-bottom-left-radius:var(--radius-lg)}.rounded-bl-md{border-bottom-left-radius:var(--radius-md)}.rounded-bl-none{border-bottom-left-radius:0}.rounded-bl-sm{border-bottom-left-radius:var(--radius-sm)}.rounded-bl-xl{border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-8{border-style:var(--tw-border-style);border-width:8px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.border-x-2{border-inline-style:var(--tw-border-style);border-inline-width:2px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-y-0{border-block-style:var(--tw-border-style);border-block-width:0}.border-y-2{border-block-style:var(--tw-border-style);border-block-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-r-4{border-right-style:var(--tw-border-style);border-right-width:4px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-b-4{border-bottom-style:var(--tw-border-style);border-bottom-width:4px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-double{--tw-border-style:double;border-style:double}.border-hidden{--tw-border-style:hidden;border-style:hidden}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-amber-50{border-color:var(--color-amber-50)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-400{border-color:var(--color-amber-400)}.border-amber-500{border-color:var(--color-amber-500)}.border-amber-600{border-color:var(--color-amber-600)}.border-amber-700{border-color:var(--color-amber-700)}.border-amber-800{border-color:var(--color-amber-800)}.border-amber-900{border-color:var(--color-amber-900)}.border-amber-950{border-color:var(--color-amber-950)}.border-black{border-color:var(--color-black)}.border-blue-50{border-color:var(--color-blue-50)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-blue-700{border-color:var(--color-blue-700)}.border-blue-800{border-color:var(--color-blue-800)}.border-blue-900{border-color:var(--color-blue-900)}.border-blue-950{border-color:var(--color-blue-950)}.border-current{border-color:currentColor}.border-cyan-50{border-color:var(--color-cyan-50)}.border-cyan-100{border-color:var(--color-cyan-100)}.border-cyan-200{border-color:var(--color-cyan-200)}.border-cyan-300{border-color:var(--color-cyan-300)}.border-cyan-400{border-color:var(--color-cyan-400)}.border-cyan-500{border-color:var(--color-cyan-500)}.border-cyan-600{border-color:var(--color-cyan-600)}.border-cyan-700{border-color:var(--color-cyan-700)}.border-cyan-800{border-color:var(--color-cyan-800)}.border-cyan-900{border-color:var(--color-cyan-900)}.border-cyan-950{border-color:var(--color-cyan-950)}.border-emerald-50{border-color:var(--color-emerald-50)}.border-emerald-100{border-color:var(--color-emerald-100)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-emerald-300{border-color:var(--color-emerald-300)}.border-emerald-400{border-color:var(--color-emerald-400)}.border-emerald-500{border-color:var(--color-emerald-500)}.border-emerald-600{border-color:var(--color-emerald-600)}.border-emerald-700{border-color:var(--color-emerald-700)}.border-emerald-800{border-color:var(--color-emerald-800)}.border-emerald-900{border-color:var(--color-emerald-900)}.border-emerald-950{border-color:var(--color-emerald-950)}.border-fuchsia-50{border-color:var(--color-fuchsia-50)}.border-fuchsia-100{border-color:var(--color-fuchsia-100)}.border-fuchsia-200{border-color:var(--color-fuchsia-200)}.border-fuchsia-300{border-color:var(--color-fuchsia-300)}.border-fuchsia-400{border-color:var(--color-fuchsia-400)}.border-fuchsia-500{border-color:var(--color-fuchsia-500)}.border-fuchsia-600{border-color:var(--color-fuchsia-600)}.border-fuchsia-700{border-color:var(--color-fuchsia-700)}.border-fuchsia-800{border-color:var(--color-fuchsia-800)}.border-fuchsia-900{border-color:var(--color-fuchsia-900)}.border-fuchsia-950{border-color:var(--color-fuchsia-950)}.border-gray-50{border-color:var(--color-gray-50)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-500{border-color:var(--color-gray-500)}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-800{border-color:var(--color-gray-800)}.border-gray-900{border-color:var(--color-gray-900)}.border-gray-950{border-color:var(--color-gray-950)}.border-green-50{border-color:var(--color-green-50)}.border-green-100{border-color:var(--color-green-100)}.border-green-200{border-color:var(--color-green-200)}.border-green-300{border-color:var(--color-green-300)}.border-green-400{border-color:var(--color-green-400)}.border-green-500{border-color:var(--color-green-500)}.border-green-600{border-color:var(--color-green-600)}.border-green-700{border-color:var(--color-green-700)}.border-green-800{border-color:var(--color-green-800)}.border-green-900{border-color:var(--color-green-900)}.border-green-950{border-color:var(--color-green-950)}.border-indigo-50{border-color:var(--color-indigo-50)}.border-indigo-100{border-color:var(--color-indigo-100)}.border-indigo-200{border-color:var(--color-indigo-200)}.border-indigo-300{border-color:var(--color-indigo-300)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-indigo-500{border-color:var(--color-indigo-500)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-indigo-700{border-color:var(--color-indigo-700)}.border-indigo-800{border-color:var(--color-indigo-800)}.border-indigo-900{border-color:var(--color-indigo-900)}.border-indigo-950{border-color:var(--color-indigo-950)}.border-inherit{border-color:inherit}.border-lime-50{border-color:var(--color-lime-50)}.border-lime-100{border-color:var(--color-lime-100)}.border-lime-200{border-color:var(--color-lime-200)}.border-lime-300{border-color:var(--color-lime-300)}.border-lime-400{border-color:var(--color-lime-400)}.border-lime-500{border-color:var(--color-lime-500)}.border-lime-600{border-color:var(--color-lime-600)}.border-lime-700{border-color:var(--color-lime-700)}.border-lime-800{border-color:var(--color-lime-800)}.border-lime-900{border-color:var(--color-lime-900)}.border-lime-950{border-color:var(--color-lime-950)}.border-neutral-50{border-color:var(--color-neutral-50)}.border-neutral-100{border-color:var(--color-neutral-100)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-neutral-300{border-color:var(--color-neutral-300)}.border-neutral-400{border-color:var(--color-neutral-400)}.border-neutral-500{border-color:var(--color-neutral-500)}.border-neutral-600{border-color:var(--color-neutral-600)}.border-neutral-700{border-color:var(--color-neutral-700)}.border-neutral-800{border-color:var(--color-neutral-800)}.border-neutral-900{border-color:var(--color-neutral-900)}.border-neutral-950{border-color:var(--color-neutral-950)}.border-orange-50{border-color:var(--color-orange-50)}.border-orange-100{border-color:var(--color-orange-100)}.border-orange-200{border-color:var(--color-orange-200)}.border-orange-300{border-color:var(--color-orange-300)}.border-orange-400{border-color:var(--color-orange-400)}.border-orange-500{border-color:var(--color-orange-500)}.border-orange-600{border-color:var(--color-orange-600)}.border-orange-700{border-color:var(--color-orange-700)}.border-orange-800{border-color:var(--color-orange-800)}.border-orange-900{border-color:var(--color-orange-900)}.border-orange-950{border-color:var(--color-orange-950)}.border-pink-50{border-color:var(--color-pink-50)}.border-pink-100{border-color:var(--color-pink-100)}.border-pink-200{border-color:var(--color-pink-200)}.border-pink-300{border-color:var(--color-pink-300)}.border-pink-400{border-color:var(--color-pink-400)}.border-pink-500{border-color:var(--color-pink-500)}.border-pink-600{border-color:var(--color-pink-600)}.border-pink-700{border-color:var(--color-pink-700)}.border-pink-800{border-color:var(--color-pink-800)}.border-pink-900{border-color:var(--color-pink-900)}.border-pink-950{border-color:var(--color-pink-950)}.border-primary-500{border-color:var(--color-primary-500)}.border-purple-50{border-color:var(--color-purple-50)}.border-purple-100{border-color:var(--color-purple-100)}.border-purple-200{border-color:var(--color-purple-200)}.border-purple-300{border-color:var(--color-purple-300)}.border-purple-400{border-color:var(--color-purple-400)}.border-purple-500{border-color:var(--color-purple-500)}.border-purple-600{border-color:var(--color-purple-600)}.border-purple-700{border-color:var(--color-purple-700)}.border-purple-800{border-color:var(--color-purple-800)}.border-purple-900{border-color:var(--color-purple-900)}.border-purple-950{border-color:var(--color-purple-950)}.border-red-50{border-color:var(--color-red-50)}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-400{border-color:var(--color-red-400)}.border-red-500{border-color:var(--color-red-500)}.border-red-600{border-color:var(--color-red-600)}.border-red-700{border-color:var(--color-red-700)}.border-red-800{border-color:var(--color-red-800)}.border-red-900{border-color:var(--color-red-900)}.border-red-950{border-color:var(--color-red-950)}.border-rose-50{border-color:var(--color-rose-50)}.border-rose-100{border-color:var(--color-rose-100)}.border-rose-200{border-color:var(--color-rose-200)}.border-rose-300{border-color:var(--color-rose-300)}.border-rose-400{border-color:var(--color-rose-400)}.border-rose-500{border-color:var(--color-rose-500)}.border-rose-600{border-color:var(--color-rose-600)}.border-rose-700{border-color:var(--color-rose-700)}.border-rose-800{border-color:var(--color-rose-800)}.border-rose-900{border-color:var(--color-rose-900)}.border-rose-950{border-color:var(--color-rose-950)}.border-sky-50{border-color:var(--color-sky-50)}.border-sky-100{border-color:var(--color-sky-100)}.border-sky-200{border-color:var(--color-sky-200)}.border-sky-300{border-color:var(--color-sky-300)}.border-sky-400{border-color:var(--color-sky-400)}.border-sky-500{border-color:var(--color-sky-500)}.border-sky-600{border-color:var(--color-sky-600)}.border-sky-700{border-color:var(--color-sky-700)}.border-sky-800{border-color:var(--color-sky-800)}.border-sky-900{border-color:var(--color-sky-900)}.border-sky-950{border-color:var(--color-sky-950)}.border-slate-50{border-color:var(--color-slate-50)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-400{border-color:var(--color-slate-400)}.border-slate-500{border-color:var(--color-slate-500)}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-800{border-color:var(--color-slate-800)}.border-slate-900{border-color:var(--color-slate-900)}.border-slate-950{border-color:var(--color-slate-950)}.border-stone-50{border-color:var(--color-stone-50)}.border-stone-100{border-color:var(--color-stone-100)}.border-stone-200{border-color:var(--color-stone-200)}.border-stone-300{border-color:var(--color-stone-300)}.border-stone-400{border-color:var(--color-stone-400)}.border-stone-500{border-color:var(--color-stone-500)}.border-stone-600{border-color:var(--color-stone-600)}.border-stone-700{border-color:var(--color-stone-700)}.border-stone-800{border-color:var(--color-stone-800)}.border-stone-900{border-color:var(--color-stone-900)}.border-stone-950{border-color:var(--color-stone-950)}.border-teal-50{border-color:var(--color-teal-50)}.border-teal-100{border-color:var(--color-teal-100)}.border-teal-200{border-color:var(--color-teal-200)}.border-teal-300{border-color:var(--color-teal-300)}.border-teal-400{border-color:var(--color-teal-400)}.border-teal-500{border-color:var(--color-teal-500)}.border-teal-600{border-color:var(--color-teal-600)}.border-teal-700{border-color:var(--color-teal-700)}.border-teal-800{border-color:var(--color-teal-800)}.border-teal-900{border-color:var(--color-teal-900)}.border-teal-950{border-color:var(--color-teal-950)}.border-transparent{border-color:#0000}.border-violet-50{border-color:var(--color-violet-50)}.border-violet-100{border-color:var(--color-violet-100)}.border-violet-200{border-color:var(--color-violet-200)}.border-violet-300{border-color:var(--color-violet-300)}.border-violet-400{border-color:var(--color-violet-400)}.border-violet-500{border-color:var(--color-violet-500)}.border-violet-600{border-color:var(--color-violet-600)}.border-violet-700{border-color:var(--color-violet-700)}.border-violet-800{border-color:var(--color-violet-800)}.border-violet-900{border-color:var(--color-violet-900)}.border-violet-950{border-color:var(--color-violet-950)}.border-white{border-color:var(--color-white)}.border-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.border-yellow-50{border-color:var(--color-yellow-50)}.border-yellow-100{border-color:var(--color-yellow-100)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-yellow-400{border-color:var(--color-yellow-400)}.border-yellow-500{border-color:var(--color-yellow-500)}.border-yellow-600{border-color:var(--color-yellow-600)}.border-yellow-700{border-color:var(--color-yellow-700)}.border-yellow-800{border-color:var(--color-yellow-800)}.border-yellow-900{border-color:var(--color-yellow-900)}.border-yellow-950{border-color:var(--color-yellow-950)}.border-zinc-50{border-color:var(--color-zinc-50)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-zinc-400{border-color:var(--color-zinc-400)}.border-zinc-500{border-color:var(--color-zinc-500)}.border-zinc-600{border-color:var(--color-zinc-600)}.border-zinc-700{border-color:var(--color-zinc-700)}.border-zinc-800{border-color:var(--color-zinc-800)}.border-zinc-900{border-color:var(--color-zinc-900)}.border-zinc-950{border-color:var(--color-zinc-950)}.border-t-blue-500{border-top-color:var(--color-blue-500)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-t-white{border-top-color:var(--color-white)}.bg-\[\#03C75A\]{background-color:#03c75a}.bg-\[\#1877F2\]{background-color:#1877f2}.bg-\[\#FEE500\]{background-color:#fee500}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-200{background-color:var(--color-amber-200)}.bg-amber-300{background-color:var(--color-amber-300)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-600{background-color:var(--color-amber-600)}.bg-amber-700{background-color:var(--color-amber-700)}.bg-amber-800{background-color:var(--color-amber-800)}.bg-amber-900{background-color:var(--color-amber-900)}.bg-amber-950{background-color:var(--color-amber-950)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:#0000}@supports (color:color-mix(in lab,red,red)){.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/70{background-color:#eff6ffb3}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700{background-color:var(--color-blue-700)}.bg-blue-800{background-color:var(--color-blue-800)}.bg-blue-900{background-color:var(--color-blue-900)}.bg-blue-950{background-color:var(--color-blue-950)}.bg-current{background-color:currentColor}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-cyan-200{background-color:var(--color-cyan-200)}.bg-cyan-300{background-color:var(--color-cyan-300)}.bg-cyan-400{background-color:var(--color-cyan-400)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-600{background-color:var(--color-cyan-600)}.bg-cyan-700{background-color:var(--color-cyan-700)}.bg-cyan-800{background-color:var(--color-cyan-800)}.bg-cyan-900{background-color:var(--color-cyan-900)}.bg-cyan-950{background-color:var(--color-cyan-950)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-200{background-color:var(--color-emerald-200)}.bg-emerald-300{background-color:var(--color-emerald-300)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-emerald-700{background-color:var(--color-emerald-700)}.bg-emerald-800{background-color:var(--color-emerald-800)}.bg-emerald-900{background-color:var(--color-emerald-900)}.bg-emerald-950{background-color:var(--color-emerald-950)}.bg-fuchsia-50{background-color:var(--color-fuchsia-50)}.bg-fuchsia-100{background-color:var(--color-fuchsia-100)}.bg-fuchsia-200{background-color:var(--color-fuchsia-200)}.bg-fuchsia-300{background-color:var(--color-fuchsia-300)}.bg-fuchsia-400{background-color:var(--color-fuchsia-400)}.bg-fuchsia-500{background-color:var(--color-fuchsia-500)}.bg-fuchsia-600{background-color:var(--color-fuchsia-600)}.bg-fuchsia-700{background-color:var(--color-fuchsia-700)}.bg-fuchsia-800{background-color:var(--color-fuchsia-800)}.bg-fuchsia-900{background-color:var(--color-fuchsia-900)}.bg-fuchsia-950{background-color:var(--color-fuchsia-950)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-100\/70{background-color:#f3f4f6b3}@supports (color:color-mix(in lab,red,red)){.bg-gray-100\/70{background-color:color-mix(in oklab,var(--color-gray-100)70%,transparent)}}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-900\/40{background-color:#10182866}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/40{background-color:color-mix(in oklab,var(--color-gray-900)40%,transparent)}}.bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.bg-gray-950{background-color:var(--color-gray-950)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-green-700{background-color:var(--color-green-700)}.bg-green-800{background-color:var(--color-green-800)}.bg-green-900{background-color:var(--color-green-900)}.bg-green-950{background-color:var(--color-green-950)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-200{background-color:var(--color-indigo-200)}.bg-indigo-300{background-color:var(--color-indigo-300)}.bg-indigo-400{background-color:var(--color-indigo-400)}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-indigo-700{background-color:var(--color-indigo-700)}.bg-indigo-800{background-color:var(--color-indigo-800)}.bg-indigo-900{background-color:var(--color-indigo-900)}.bg-indigo-950{background-color:var(--color-indigo-950)}.bg-inherit{background-color:inherit}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-lime-300{background-color:var(--color-lime-300)}.bg-lime-400{background-color:var(--color-lime-400)}.bg-lime-500{background-color:var(--color-lime-500)}.bg-lime-600{background-color:var(--color-lime-600)}.bg-lime-700{background-color:var(--color-lime-700)}.bg-lime-800{background-color:var(--color-lime-800)}.bg-lime-900{background-color:var(--color-lime-900)}.bg-lime-950{background-color:var(--color-lime-950)}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-neutral-400{background-color:var(--color-neutral-400)}.bg-neutral-500{background-color:var(--color-neutral-500)}.bg-neutral-600{background-color:var(--color-neutral-600)}.bg-neutral-700{background-color:var(--color-neutral-700)}.bg-neutral-800{background-color:var(--color-neutral-800)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-neutral-950{background-color:var(--color-neutral-950)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-200{background-color:var(--color-orange-200)}.bg-orange-300{background-color:var(--color-orange-300)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-600{background-color:var(--color-orange-600)}.bg-orange-700{background-color:var(--color-orange-700)}.bg-orange-800{background-color:var(--color-orange-800)}.bg-orange-900{background-color:var(--color-orange-900)}.bg-orange-950{background-color:var(--color-orange-950)}.bg-pink-50{background-color:var(--color-pink-50)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-pink-200{background-color:var(--color-pink-200)}.bg-pink-300{background-color:var(--color-pink-300)}.bg-pink-400{background-color:var(--color-pink-400)}.bg-pink-500{background-color:var(--color-pink-500)}.bg-pink-600{background-color:var(--color-pink-600)}.bg-pink-700{background-color:var(--color-pink-700)}.bg-pink-800{background-color:var(--color-pink-800)}.bg-pink-900{background-color:var(--color-pink-900)}.bg-pink-950{background-color:var(--color-pink-950)}.bg-primary-50{background-color:var(--color-primary-50)}.bg-primary-100{background-color:var(--color-primary-100)}.bg-primary-600{background-color:var(--color-primary-600)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-200{background-color:var(--color-purple-200)}.bg-purple-300{background-color:var(--color-purple-300)}.bg-purple-400{background-color:var(--color-purple-400)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-purple-500\/80{background-color:#ac4bffcc}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/80{background-color:color-mix(in oklab,var(--color-purple-500)80%,transparent)}}.bg-purple-600{background-color:var(--color-purple-600)}.bg-purple-700{background-color:var(--color-purple-700)}.bg-purple-800{background-color:var(--color-purple-800)}.bg-purple-900{background-color:var(--color-purple-900)}.bg-purple-950{background-color:var(--color-purple-950)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-50\/30{background-color:#fef2f24d}@supports (color:color-mix(in lab,red,red)){.bg-red-50\/30{background-color:color-mix(in oklab,var(--color-red-50)30%,transparent)}}.bg-red-100{background-color:var(--color-red-100)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-300{background-color:var(--color-red-300)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/50{background-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/50{background-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-red-700{background-color:var(--color-red-700)}.bg-red-800{background-color:var(--color-red-800)}.bg-red-900{background-color:var(--color-red-900)}.bg-red-950{background-color:var(--color-red-950)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-rose-200{background-color:var(--color-rose-200)}.bg-rose-300{background-color:var(--color-rose-300)}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-600{background-color:var(--color-rose-600)}.bg-rose-700{background-color:var(--color-rose-700)}.bg-rose-800{background-color:var(--color-rose-800)}.bg-rose-900{background-color:var(--color-rose-900)}.bg-rose-950{background-color:var(--color-rose-950)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-sky-200{background-color:var(--color-sky-200)}.bg-sky-300{background-color:var(--color-sky-300)}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-sky-600{background-color:var(--color-sky-600)}.bg-sky-700{background-color:var(--color-sky-700)}.bg-sky-800{background-color:var(--color-sky-800)}.bg-sky-900{background-color:var(--color-sky-900)}.bg-sky-950{background-color:var(--color-sky-950)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-500{background-color:var(--color-slate-500)}.bg-slate-600{background-color:var(--color-slate-600)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-950{background-color:var(--color-slate-950)}.bg-stone-50{background-color:var(--color-stone-50)}.bg-stone-100{background-color:var(--color-stone-100)}.bg-stone-200{background-color:var(--color-stone-200)}.bg-stone-300{background-color:var(--color-stone-300)}.bg-stone-400{background-color:var(--color-stone-400)}.bg-stone-500{background-color:var(--color-stone-500)}.bg-stone-600{background-color:var(--color-stone-600)}.bg-stone-700{background-color:var(--color-stone-700)}.bg-stone-800{background-color:var(--color-stone-800)}.bg-stone-900{background-color:var(--color-stone-900)}.bg-stone-950{background-color:var(--color-stone-950)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-200{background-color:var(--color-teal-200)}.bg-teal-300{background-color:var(--color-teal-300)}.bg-teal-400{background-color:var(--color-teal-400)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-teal-600{background-color:var(--color-teal-600)}.bg-teal-700{background-color:var(--color-teal-700)}.bg-teal-800{background-color:var(--color-teal-800)}.bg-teal-900{background-color:var(--color-teal-900)}.bg-teal-950{background-color:var(--color-teal-950)}.bg-transparent{background-color:#0000}.bg-violet-50{background-color:var(--color-violet-50)}.bg-violet-100{background-color:var(--color-violet-100)}.bg-violet-200{background-color:var(--color-violet-200)}.bg-violet-300{background-color:var(--color-violet-300)}.bg-violet-400{background-color:var(--color-violet-400)}.bg-violet-500{background-color:var(--color-violet-500)}.bg-violet-600{background-color:var(--color-violet-600)}.bg-violet-700{background-color:var(--color-violet-700)}.bg-violet-800{background-color:var(--color-violet-800)}.bg-violet-900{background-color:var(--color-violet-900)}.bg-violet-950{background-color:var(--color-violet-950)}.bg-white{background-color:var(--color-white)}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-white\/30{background-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-200{background-color:var(--color-yellow-200)}.bg-yellow-300{background-color:var(--color-yellow-300)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-600{background-color:var(--color-yellow-600)}.bg-yellow-700{background-color:var(--color-yellow-700)}.bg-yellow-800{background-color:var(--color-yellow-800)}.bg-yellow-900{background-color:var(--color-yellow-900)}.bg-yellow-950{background-color:var(--color-yellow-950)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-400{background-color:var(--color-zinc-400)}.bg-zinc-500{background-color:var(--color-zinc-500)}.bg-zinc-600{background-color:var(--color-zinc-600)}.bg-zinc-700{background-color:var(--color-zinc-700)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-bl{--tw-gradient-position:to bottom left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-l{--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-tl{--tw-gradient-position:to top left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-tr{--tw-gradient-position:to top right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-none{background-image:none}.from-black{--tw-gradient-from:var(--color-black);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-black\/90{--tw-gradient-from:#000000e6}@supports (color:color-mix(in lab,red,red)){.from-black\/90{--tw-gradient-from:color-mix(in oklab,var(--color-black)90%,transparent)}}.from-black\/90{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-100{--tw-gradient-from:var(--color-blue-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-200{--tw-gradient-from:var(--color-blue-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-300{--tw-gradient-from:var(--color-blue-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-400{--tw-gradient-from:var(--color-blue-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-500{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-600{--tw-gradient-from:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-700{--tw-gradient-from:var(--color-blue-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-800{--tw-gradient-from:var(--color-blue-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-900{--tw-gradient-from:var(--color-blue-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-current{--tw-gradient-from:currentcolor;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-emerald-500{--tw-gradient-from:var(--color-emerald-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-100{--tw-gradient-from:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-200{--tw-gradient-from:var(--color-gray-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-300{--tw-gradient-from:var(--color-gray-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-400{--tw-gradient-from:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-500{--tw-gradient-from:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-600{--tw-gradient-from:var(--color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-700{--tw-gradient-from:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-900{--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-50{--tw-gradient-from:var(--color-green-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-100{--tw-gradient-from:var(--color-green-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-200{--tw-gradient-from:var(--color-green-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-300{--tw-gradient-from:var(--color-green-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-400{--tw-gradient-from:var(--color-green-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-500{--tw-gradient-from:var(--color-green-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-600{--tw-gradient-from:var(--color-green-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-700{--tw-gradient-from:var(--color-green-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-800{--tw-gradient-from:var(--color-green-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-900{--tw-gradient-from:var(--color-green-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-50{--tw-gradient-from:var(--color-indigo-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-100{--tw-gradient-from:var(--color-indigo-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-200{--tw-gradient-from:var(--color-indigo-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-300{--tw-gradient-from:var(--color-indigo-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-400{--tw-gradient-from:var(--color-indigo-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-500{--tw-gradient-from:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-600{--tw-gradient-from:var(--color-indigo-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-700{--tw-gradient-from:var(--color-indigo-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-800{--tw-gradient-from:var(--color-indigo-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-900{--tw-gradient-from:var(--color-indigo-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-inherit{--tw-gradient-from:inherit;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-50{--tw-gradient-from:var(--color-orange-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-100{--tw-gradient-from:var(--color-orange-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-200{--tw-gradient-from:var(--color-orange-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-300{--tw-gradient-from:var(--color-orange-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-400{--tw-gradient-from:var(--color-orange-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-500{--tw-gradient-from:var(--color-orange-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-600{--tw-gradient-from:var(--color-orange-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-700{--tw-gradient-from:var(--color-orange-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-800{--tw-gradient-from:var(--color-orange-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-900{--tw-gradient-from:var(--color-orange-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-50{--tw-gradient-from:var(--color-pink-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-100{--tw-gradient-from:var(--color-pink-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-200{--tw-gradient-from:var(--color-pink-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-300{--tw-gradient-from:var(--color-pink-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-400{--tw-gradient-from:var(--color-pink-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-500{--tw-gradient-from:var(--color-pink-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-600{--tw-gradient-from:var(--color-pink-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-700{--tw-gradient-from:var(--color-pink-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-800{--tw-gradient-from:var(--color-pink-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-900{--tw-gradient-from:var(--color-pink-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-50{--tw-gradient-from:var(--color-purple-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-100{--tw-gradient-from:var(--color-purple-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-200{--tw-gradient-from:var(--color-purple-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-300{--tw-gradient-from:var(--color-purple-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-400{--tw-gradient-from:var(--color-purple-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-500{--tw-gradient-from:var(--color-purple-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-600{--tw-gradient-from:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-700{--tw-gradient-from:var(--color-purple-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-800{--tw-gradient-from:var(--color-purple-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-900{--tw-gradient-from:var(--color-purple-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-50{--tw-gradient-from:var(--color-red-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-100{--tw-gradient-from:var(--color-red-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-200{--tw-gradient-from:var(--color-red-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-300{--tw-gradient-from:var(--color-red-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-400{--tw-gradient-from:var(--color-red-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-600{--tw-gradient-from:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-700{--tw-gradient-from:var(--color-red-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-800{--tw-gradient-from:var(--color-red-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-900{--tw-gradient-from:var(--color-red-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-50{--tw-gradient-from:var(--color-slate-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-100{--tw-gradient-from:var(--color-slate-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-200{--tw-gradient-from:var(--color-slate-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-300{--tw-gradient-from:var(--color-slate-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-400{--tw-gradient-from:var(--color-slate-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-500{--tw-gradient-from:var(--color-slate-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-600{--tw-gradient-from:var(--color-slate-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-700{--tw-gradient-from:var(--color-slate-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-800{--tw-gradient-from:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-900{--tw-gradient-from:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-white{--tw-gradient-from:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-50{--tw-gradient-from:var(--color-yellow-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-100{--tw-gradient-from:var(--color-yellow-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-200{--tw-gradient-from:var(--color-yellow-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-300{--tw-gradient-from:var(--color-yellow-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-400{--tw-gradient-from:var(--color-yellow-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-500{--tw-gradient-from:var(--color-yellow-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-600{--tw-gradient-from:var(--color-yellow-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-700{--tw-gradient-from:var(--color-yellow-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-800{--tw-gradient-from:var(--color-yellow-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-900{--tw-gradient-from:var(--color-yellow-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-black{--tw-gradient-via:var(--color-black);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-black\/60{--tw-gradient-via:#0009}@supports (color:color-mix(in lab,red,red)){.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent)}}.via-black\/60{--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-50{--tw-gradient-via:var(--color-blue-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-100{--tw-gradient-via:var(--color-blue-100);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-200{--tw-gradient-via:var(--color-blue-200);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-300{--tw-gradient-via:var(--color-blue-300);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-400{--tw-gradient-via:var(--color-blue-400);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-500{--tw-gradient-via:var(--color-blue-500);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-600{--tw-gradient-via:var(--color-blue-600);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-700{--tw-gradient-via:var(--color-blue-700);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-800{--tw-gradient-via:var(--color-blue-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-900{--tw-gradient-via:var(--color-blue-900);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-current{--tw-gradient-via:currentcolor;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-50{--tw-gradient-via:var(--color-gray-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-100{--tw-gradient-via:var(--color-gray-100);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-200{--tw-gradient-via:var(--color-gray-200);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-300{--tw-gradient-via:var(--color-gray-300);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-400{--tw-gradient-via:var(--color-gray-400);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-500{--tw-gradient-via:var(--color-gray-500);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-600{--tw-gradient-via:var(--color-gray-600);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-700{--tw-gradient-via:var(--color-gray-700);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-800{--tw-gradient-via:var(--color-gray-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-900{--tw-gradient-via:var(--color-gray-900);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-inherit{--tw-gradient-via:inherit;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-50{--tw-gradient-via:var(--color-slate-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-100{--tw-gradient-via:var(--color-slate-100);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-200{--tw-gradient-via:var(--color-slate-200);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-300{--tw-gradient-via:var(--color-slate-300);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-400{--tw-gradient-via:var(--color-slate-400);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-500{--tw-gradient-via:var(--color-slate-500);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-600{--tw-gradient-via:var(--color-slate-600);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-700{--tw-gradient-via:var(--color-slate-700);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-800{--tw-gradient-via:var(--color-slate-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-900{--tw-gradient-via:var(--color-slate-900);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-white{--tw-gradient-via:var(--color-white);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-black{--tw-gradient-to:var(--color-black);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-50{--tw-gradient-to:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-100{--tw-gradient-to:var(--color-blue-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-200{--tw-gradient-to:var(--color-blue-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-300{--tw-gradient-to:var(--color-blue-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-400{--tw-gradient-to:var(--color-blue-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-500{--tw-gradient-to:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-600{--tw-gradient-to:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-700{--tw-gradient-to:var(--color-blue-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-800{--tw-gradient-to:var(--color-blue-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-900{--tw-gradient-to:var(--color-blue-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-current{--tw-gradient-to:currentcolor;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-50{--tw-gradient-to:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-100{--tw-gradient-to:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-200{--tw-gradient-to:var(--color-gray-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-300{--tw-gradient-to:var(--color-gray-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-400{--tw-gradient-to:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-500{--tw-gradient-to:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-600{--tw-gradient-to:var(--color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-800{--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-900{--tw-gradient-to:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-inherit{--tw-gradient-to:inherit;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-50{--tw-gradient-to:var(--color-purple-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-100{--tw-gradient-to:var(--color-purple-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-200{--tw-gradient-to:var(--color-purple-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-300{--tw-gradient-to:var(--color-purple-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-400{--tw-gradient-to:var(--color-purple-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-500{--tw-gradient-to:var(--color-purple-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-700{--tw-gradient-to:var(--color-purple-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-800{--tw-gradient-to:var(--color-purple-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-900{--tw-gradient-to:var(--color-purple-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-50{--tw-gradient-to:var(--color-red-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-100{--tw-gradient-to:var(--color-red-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-200{--tw-gradient-to:var(--color-red-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-300{--tw-gradient-to:var(--color-red-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-400{--tw-gradient-to:var(--color-red-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-500{--tw-gradient-to:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-600{--tw-gradient-to:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-700{--tw-gradient-to:var(--color-red-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-800{--tw-gradient-to:var(--color-red-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-900{--tw-gradient-to:var(--color-red-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-50{--tw-gradient-to:var(--color-slate-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-100{--tw-gradient-to:var(--color-slate-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-200{--tw-gradient-to:var(--color-slate-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-300{--tw-gradient-to:var(--color-slate-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-400{--tw-gradient-to:var(--color-slate-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-500{--tw-gradient-to:var(--color-slate-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-600{--tw-gradient-to:var(--color-slate-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-700{--tw-gradient-to:var(--color-slate-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-800{--tw-gradient-to:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-900{--tw-gradient-to:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-teal-600{--tw-gradient-to:var(--color-teal-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-fill{object-fit:fill}.object-none{object-fit:none}.object-scale-down{object-fit:scale-down}.object-bottom{object-position:bottom}.object-center{object-position:center}.object-left{object-position:left}.object-left-bottom{object-position:left bottom}.object-left-top{object-position:left top}.object-right{object-position:right}.object-right-bottom{object-position:right bottom}.object-right-top{object-position:right top}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-16{padding:calc(var(--spacing)*16)}.p-20{padding:calc(var(--spacing)*20)}.p-24{padding:calc(var(--spacing)*24)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.px-16{padding-inline:calc(var(--spacing)*16)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pr-0{padding-right:calc(var(--spacing)*0)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-5{padding-right:calc(var(--spacing)*5)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-12{padding-right:calc(var(--spacing)*12)}.pr-16{padding-right:calc(var(--spacing)*16)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-10{padding-bottom:calc(var(--spacing)*10)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-10{padding-left:calc(var(--spacing)*10)}.pl-12{padding-left:calc(var(--spacing)*12)}.pl-16{padding-left:calc(var(--spacing)*16)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.indent-0{text-indent:calc(var(--spacing)*0)}.indent-1{text-indent:calc(var(--spacing)*1)}.indent-2{text-indent:calc(var(--spacing)*2)}.indent-4{text-indent:calc(var(--spacing)*4)}.indent-8{text-indent:calc(var(--spacing)*8)}.align-baseline{vertical-align:baseline}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-sub{vertical-align:sub}.align-super{vertical-align:super}.align-text-bottom{vertical-align:text-bottom}.align-text-top{vertical-align:text-top}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-3{--tw-leading:calc(var(--spacing)*3);line-height:calc(var(--spacing)*3)}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-8{--tw-leading:calc(var(--spacing)*8);line-height:calc(var(--spacing)*8)}.leading-9{--tw-leading:calc(var(--spacing)*9);line-height:calc(var(--spacing)*9)}.leading-10{--tw-leading:calc(var(--spacing)*10);line-height:calc(var(--spacing)*10)}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.\!whitespace-normal{white-space:normal!important}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#000000\]\/85{color:oklab(0% none none/.85)}.text-amber-50{color:var(--color-amber-50)}.text-amber-100{color:var(--color-amber-100)}.text-amber-200{color:var(--color-amber-200)}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-amber-950{color:var(--color-amber-950)}.text-black{color:var(--color-black)}.text-blue-50{color:var(--color-blue-50)}.text-blue-100{color:var(--color-blue-100)}.text-blue-200{color:var(--color-blue-200)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-blue-950{color:var(--color-blue-950)}.text-current{color:currentColor}.text-cyan-50{color:var(--color-cyan-50)}.text-cyan-100{color:var(--color-cyan-100)}.text-cyan-200{color:var(--color-cyan-200)}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-400{color:var(--color-cyan-400)}.text-cyan-500{color:var(--color-cyan-500)}.text-cyan-600{color:var(--color-cyan-600)}.text-cyan-700{color:var(--color-cyan-700)}.text-cyan-800{color:var(--color-cyan-800)}.text-cyan-900{color:var(--color-cyan-900)}.text-cyan-950{color:var(--color-cyan-950)}.text-emerald-50{color:var(--color-emerald-50)}.text-emerald-100{color:var(--color-emerald-100)}.text-emerald-200{color:var(--color-emerald-200)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-emerald-900{color:var(--color-emerald-900)}.text-emerald-950{color:var(--color-emerald-950)}.text-fuchsia-50{color:var(--color-fuchsia-50)}.text-fuchsia-100{color:var(--color-fuchsia-100)}.text-fuchsia-200{color:var(--color-fuchsia-200)}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-fuchsia-400{color:var(--color-fuchsia-400)}.text-fuchsia-500{color:var(--color-fuchsia-500)}.text-fuchsia-600{color:var(--color-fuchsia-600)}.text-fuchsia-700{color:var(--color-fuchsia-700)}.text-fuchsia-800{color:var(--color-fuchsia-800)}.text-fuchsia-900{color:var(--color-fuchsia-900)}.text-fuchsia-950{color:var(--color-fuchsia-950)}.text-gray-50{color:var(--color-gray-50)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-gray-950{color:var(--color-gray-950)}.text-green-50{color:var(--color-green-50)}.text-green-100{color:var(--color-green-100)}.text-green-200{color:var(--color-green-200)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-green-950{color:var(--color-green-950)}.text-indigo-50{color:var(--color-indigo-50)}.text-indigo-100{color:var(--color-indigo-100)}.text-indigo-200{color:var(--color-indigo-200)}.text-indigo-300{color:var(--color-indigo-300)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-500{color:var(--color-indigo-500)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-indigo-900{color:var(--color-indigo-900)}.text-indigo-950{color:var(--color-indigo-950)}.text-inherit{color:inherit}.text-lime-50{color:var(--color-lime-50)}.text-lime-100{color:var(--color-lime-100)}.text-lime-200{color:var(--color-lime-200)}.text-lime-300{color:var(--color-lime-300)}.text-lime-400{color:var(--color-lime-400)}.text-lime-500{color:var(--color-lime-500)}.text-lime-600{color:var(--color-lime-600)}.text-lime-700{color:var(--color-lime-700)}.text-lime-800{color:var(--color-lime-800)}.text-lime-900{color:var(--color-lime-900)}.text-lime-950{color:var(--color-lime-950)}.text-neutral-50{color:var(--color-neutral-50)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-700{color:var(--color-neutral-700)}.text-neutral-800{color:var(--color-neutral-800)}.text-neutral-900{color:var(--color-neutral-900)}.text-neutral-950{color:var(--color-neutral-950)}.text-orange-50{color:var(--color-orange-50)}.text-orange-100{color:var(--color-orange-100)}.text-orange-200{color:var(--color-orange-200)}.text-orange-300{color:var(--color-orange-300)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-800{color:var(--color-orange-800)}.text-orange-900{color:var(--color-orange-900)}.text-orange-950{color:var(--color-orange-950)}.text-pink-50{color:var(--color-pink-50)}.text-pink-100{color:var(--color-pink-100)}.text-pink-200{color:var(--color-pink-200)}.text-pink-300{color:var(--color-pink-300)}.text-pink-400{color:var(--color-pink-400)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-pink-700{color:var(--color-pink-700)}.text-pink-800{color:var(--color-pink-800)}.text-pink-900{color:var(--color-pink-900)}.text-pink-950{color:var(--color-pink-950)}.text-primary-400{color:var(--color-primary-400)}.text-primary-600{color:var(--color-primary-600)}.text-purple-50{color:var(--color-purple-50)}.text-purple-100{color:var(--color-purple-100)}.text-purple-200{color:var(--color-purple-200)}.text-purple-300{color:var(--color-purple-300)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.text-purple-950{color:var(--color-purple-950)}.text-red-50{color:var(--color-red-50)}.text-red-100{color:var(--color-red-100)}.text-red-200{color:var(--color-red-200)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-red-950{color:var(--color-red-950)}.text-rose-50{color:var(--color-rose-50)}.text-rose-100{color:var(--color-rose-100)}.text-rose-200{color:var(--color-rose-200)}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-rose-500{color:var(--color-rose-500)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-900{color:var(--color-rose-900)}.text-rose-950{color:var(--color-rose-950)}.text-sky-50{color:var(--color-sky-50)}.text-sky-100{color:var(--color-sky-100)}.text-sky-200{color:var(--color-sky-200)}.text-sky-300{color:var(--color-sky-300)}.text-sky-400{color:var(--color-sky-400)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-sky-800{color:var(--color-sky-800)}.text-sky-900{color:var(--color-sky-900)}.text-sky-950{color:var(--color-sky-950)}.text-slate-50{color:var(--color-slate-50)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-slate-950{color:var(--color-slate-950)}.text-stone-50{color:var(--color-stone-50)}.text-stone-100{color:var(--color-stone-100)}.text-stone-200{color:var(--color-stone-200)}.text-stone-300{color:var(--color-stone-300)}.text-stone-400{color:var(--color-stone-400)}.text-stone-500{color:var(--color-stone-500)}.text-stone-600{color:var(--color-stone-600)}.text-stone-700{color:var(--color-stone-700)}.text-stone-800{color:var(--color-stone-800)}.text-stone-900{color:var(--color-stone-900)}.text-stone-950{color:var(--color-stone-950)}.text-teal-50{color:var(--color-teal-50)}.text-teal-100{color:var(--color-teal-100)}.text-teal-200{color:var(--color-teal-200)}.text-teal-300{color:var(--color-teal-300)}.text-teal-400{color:var(--color-teal-400)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-teal-800{color:var(--color-teal-800)}.text-teal-900{color:var(--color-teal-900)}.text-teal-950{color:var(--color-teal-950)}.text-transparent{color:#0000}.text-violet-50{color:var(--color-violet-50)}.text-violet-100{color:var(--color-violet-100)}.text-violet-200{color:var(--color-violet-200)}.text-violet-300{color:var(--color-violet-300)}.text-violet-400{color:var(--color-violet-400)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-violet-800{color:var(--color-violet-800)}.text-violet-900{color:var(--color-violet-900)}.text-violet-950{color:var(--color-violet-950)}.text-white{color:var(--color-white)}.text-yellow-50{color:var(--color-yellow-50)}.text-yellow-100{color:var(--color-yellow-100)}.text-yellow-200{color:var(--color-yellow-200)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-yellow-950{color:var(--color-yellow-950)}.text-zinc-50{color:var(--color-zinc-50)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.accent-black{accent-color:var(--color-black)}.accent-blue-600{accent-color:var(--color-blue-600)}.accent-gray-900{accent-color:var(--color-gray-900)}.opacity-0{opacity:0}.opacity-5{opacity:.05}.opacity-10{opacity:.1}.opacity-15{opacity:.15}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.opacity-95{opacity:.95}.opacity-100{opacity:1}.bg-blend-color{background-blend-mode:color}.bg-blend-color-burn{background-blend-mode:color-burn}.bg-blend-color-dodge{background-blend-mode:color-dodge}.bg-blend-darken{background-blend-mode:darken}.bg-blend-difference{background-blend-mode:difference}.bg-blend-exclusion{background-blend-mode:exclusion}.bg-blend-hard-light{background-blend-mode:hard-light}.bg-blend-hue{background-blend-mode:hue}.bg-blend-lighten{background-blend-mode:lighten}.bg-blend-luminosity{background-blend-mode:luminosity}.bg-blend-multiply{background-blend-mode:multiply}.bg-blend-normal{background-blend-mode:normal}.bg-blend-overlay{background-blend-mode:overlay}.bg-blend-saturation{background-blend-mode:saturation}.bg-blend-screen{background-blend-mode:screen}.bg-blend-soft-light{background-blend-mode:soft-light}.mix-blend-color{mix-blend-mode:color}.mix-blend-color-burn{mix-blend-mode:color-burn}.mix-blend-color-dodge{mix-blend-mode:color-dodge}.mix-blend-darken{mix-blend-mode:darken}.mix-blend-difference{mix-blend-mode:difference}.mix-blend-exclusion{mix-blend-mode:exclusion}.mix-blend-hard-light{mix-blend-mode:hard-light}.mix-blend-hue{mix-blend-mode:hue}.mix-blend-lighten{mix-blend-mode:lighten}.mix-blend-luminosity{mix-blend-mode:luminosity}.mix-blend-multiply{mix-blend-mode:multiply}.mix-blend-normal{mix-blend-mode:normal}.mix-blend-overlay{mix-blend-mode:overlay}.mix-blend-plus-darker{mix-blend-mode:plus-darker}.mix-blend-plus-lighter{mix-blend-mode:plus-lighter}.mix-blend-saturation{mix-blend-mode:saturation}.mix-blend-screen{mix-blend-mode:screen}.mix-blend-soft-light{mix-blend-mode:soft-light}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-8{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(8px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-50{--tw-ring-color:var(--color-blue-50)}.ring-blue-100{--tw-ring-color:var(--color-blue-100)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-blue-600{--tw-ring-color:var(--color-blue-600)}.ring-blue-700{--tw-ring-color:var(--color-blue-700)}.ring-blue-800{--tw-ring-color:var(--color-blue-800)}.ring-blue-900{--tw-ring-color:var(--color-blue-900)}.ring-current{--tw-ring-color:currentcolor}.ring-gray-50{--tw-ring-color:var(--color-gray-50)}.ring-gray-100{--tw-ring-color:var(--color-gray-100)}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-400{--tw-ring-color:var(--color-gray-400)}.ring-gray-500{--tw-ring-color:var(--color-gray-500)}.ring-gray-600{--tw-ring-color:var(--color-gray-600)}.ring-gray-700{--tw-ring-color:var(--color-gray-700)}.ring-gray-800{--tw-ring-color:var(--color-gray-800)}.ring-gray-900{--tw-ring-color:var(--color-gray-900)}.ring-inherit{--tw-ring-color:inherit}.ring-red-500{--tw-ring-color:var(--color-red-500)}.ring-slate-50{--tw-ring-color:var(--color-slate-50)}.ring-slate-100{--tw-ring-color:var(--color-slate-100)}.ring-slate-200{--tw-ring-color:var(--color-slate-200)}.ring-slate-300{--tw-ring-color:var(--color-slate-300)}.ring-slate-400{--tw-ring-color:var(--color-slate-400)}.ring-slate-500{--tw-ring-color:var(--color-slate-500)}.ring-slate-600{--tw-ring-color:var(--color-slate-600)}.ring-slate-700{--tw-ring-color:var(--color-slate-700)}.ring-slate-800{--tw-ring-color:var(--color-slate-800)}.ring-slate-900{--tw-ring-color:var(--color-slate-900)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-offset-0{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-4{--tw-ring-offset-width:4px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-8{--tw-ring-offset-width:8px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-black{--tw-ring-offset-color:var(--color-black)}.ring-offset-current{--tw-ring-offset-color:currentcolor}.ring-offset-inherit{--tw-ring-offset-color:inherit}.ring-offset-transparent{--tw-ring-offset-color:transparent}.ring-offset-white{--tw-ring-offset-color:var(--color-white)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-0{outline-style:var(--tw-outline-style);outline-width:0}.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-2{outline-style:var(--tw-outline-style);outline-width:2px}.outline-4{outline-style:var(--tw-outline-style);outline-width:4px}.outline-8{outline-style:var(--tw-outline-style);outline-width:8px}.outline-offset-0{outline-offset:0px}.outline-offset-1{outline-offset:1px}.outline-offset-2{outline-offset:2px}.outline-offset-4{outline-offset:4px}.outline-offset-8{outline-offset:8px}.outline-black{outline-color:var(--color-black)}.outline-current{outline-color:currentColor}.outline-inherit{outline-color:inherit}.outline-transparent{outline-color:#0000}.outline-white{outline-color:var(--color-white)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-2xl{--tw-blur:blur(var(--blur-2xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-lg{--tw-blur:blur(var(--blur-lg));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-md{--tw-blur:blur(var(--blur-md));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-none{--tw-blur: ;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-sm{--tw-blur:blur(var(--blur-sm));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-xl{--tw-blur:blur(var(--blur-xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-0{--tw-brightness:brightness(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-50{--tw-brightness:brightness(50%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-75{--tw-brightness:brightness(75%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-90{--tw-brightness:brightness(90%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-95{--tw-brightness:brightness(95%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-100{--tw-brightness:brightness(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-105{--tw-brightness:brightness(105%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-110{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-125{--tw-brightness:brightness(125%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-150{--tw-brightness:brightness(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-200{--tw-brightness:brightness(200%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-0{--tw-contrast:contrast(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-50{--tw-contrast:contrast(50%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-75{--tw-contrast:contrast(75%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-100{--tw-contrast:contrast(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-125{--tw-contrast:contrast(125%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-150{--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-200{--tw-contrast:contrast(200%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-2xl{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-lg{--tw-drop-shadow-size:drop-shadow(0 4px 4px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-lg));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-md{--tw-drop-shadow-size:drop-shadow(0 3px 3px var(--tw-drop-shadow-color,#0000001f));--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-sm));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-xl{--tw-drop-shadow-size:drop-shadow(0 9px 7px var(--tw-drop-shadow-color,#0000001a));--tw-drop-shadow:drop-shadow(var(--drop-shadow-xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-none{--tw-drop-shadow: ;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale-0{--tw-grayscale:grayscale(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-15{--tw-hue-rotate:hue-rotate( -15deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-30{--tw-hue-rotate:hue-rotate( -30deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-60{--tw-hue-rotate:hue-rotate( -60deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-90{--tw-hue-rotate:hue-rotate( -90deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-180{--tw-hue-rotate:hue-rotate( -180deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-0{--tw-hue-rotate:hue-rotate(0deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-15{--tw-hue-rotate:hue-rotate(15deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-30{--tw-hue-rotate:hue-rotate(30deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-60{--tw-hue-rotate:hue-rotate(60deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-90{--tw-hue-rotate:hue-rotate(90deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-180{--tw-hue-rotate:hue-rotate(180deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert-0{--tw-invert:invert(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-0{--tw-saturate:saturate(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-50{--tw-saturate:saturate(50%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-100{--tw-saturate:saturate(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-150{--tw-saturate:saturate(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-200{--tw-saturate:saturate(200%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia-0{--tw-sepia:sepia(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-2xl{--tw-backdrop-blur:blur(var(--blur-2xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-3xl{--tw-backdrop-blur:blur(var(--blur-3xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-none{--tw-backdrop-blur: ;-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-0{--tw-backdrop-brightness:brightness(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-50{--tw-backdrop-brightness:brightness(50%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-75{--tw-backdrop-brightness:brightness(75%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-90{--tw-backdrop-brightness:brightness(90%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-95{--tw-backdrop-brightness:brightness(95%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-100{--tw-backdrop-brightness:brightness(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-105{--tw-backdrop-brightness:brightness(105%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-110{--tw-backdrop-brightness:brightness(110%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-125{--tw-backdrop-brightness:brightness(125%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-150{--tw-backdrop-brightness:brightness(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-200{--tw-backdrop-brightness:brightness(200%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-0{--tw-backdrop-contrast:contrast(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-50{--tw-backdrop-contrast:contrast(50%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-75{--tw-backdrop-contrast:contrast(75%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-100{--tw-backdrop-contrast:contrast(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-125{--tw-backdrop-contrast:contrast(125%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-150{--tw-backdrop-contrast:contrast(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-200{--tw-backdrop-contrast:contrast(200%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-grayscale-0{--tw-backdrop-grayscale:grayscale(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-0{--tw-backdrop-hue-rotate:hue-rotate(0deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-15{--tw-backdrop-hue-rotate:hue-rotate(15deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-30{--tw-backdrop-hue-rotate:hue-rotate(30deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-60{--tw-backdrop-hue-rotate:hue-rotate(60deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-90{--tw-backdrop-hue-rotate:hue-rotate(90deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-180{--tw-backdrop-hue-rotate:hue-rotate(180deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-invert-0{--tw-backdrop-invert:invert(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-0{--tw-backdrop-opacity:opacity(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-5{--tw-backdrop-opacity:opacity(5%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-10{--tw-backdrop-opacity:opacity(10%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-20{--tw-backdrop-opacity:opacity(20%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-25{--tw-backdrop-opacity:opacity(25%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-30{--tw-backdrop-opacity:opacity(30%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-40{--tw-backdrop-opacity:opacity(40%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-50{--tw-backdrop-opacity:opacity(50%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-60{--tw-backdrop-opacity:opacity(60%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-70{--tw-backdrop-opacity:opacity(70%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-75{--tw-backdrop-opacity:opacity(75%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-80{--tw-backdrop-opacity:opacity(80%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-90{--tw-backdrop-opacity:opacity(90%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-95{--tw-backdrop-opacity:opacity(95%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-100{--tw-backdrop-opacity:opacity(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-0{--tw-backdrop-saturate:saturate(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-50{--tw-backdrop-saturate:saturate(50%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-100{--tw-backdrop-saturate:saturate(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-150{--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-200{--tw-backdrop-saturate:saturate(200%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-sepia-0{--tw-backdrop-sepia:sepia(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[max-height\]{transition-property:max-height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.delay-75{transition-delay:75ms}.delay-100{transition-delay:.1s}.delay-150{transition-delay:.15s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-500{transition-delay:.5s}.delay-700{transition-delay:.7s}.delay-1000{transition-delay:1s}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-dashed{--tw-outline-style:dashed;outline-style:dashed}.outline-dotted{--tw-outline-style:dotted;outline-style:dotted}.outline-double{--tw-outline-style:double;outline-style:double}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;user-select:auto}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.ring-inset{--tw-ring-inset:inset}@media(hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:translate-y-1:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:scale-100:is(:where(.group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/40:is(:where(.group):hover *){background-color:#0006}@supports (color:color-mix(in lab,red,red)){.group-hover\:bg-black\/40:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.group-hover\:bg-blue-100:is(:where(.group):hover *){background-color:var(--color-blue-100)}.group-hover\:bg-blue-500:is(:where(.group):hover *){background-color:var(--color-blue-500)}.group-hover\:bg-blue-600:is(:where(.group):hover *){background-color:var(--color-blue-600)}.group-hover\:bg-gray-100:is(:where(.group):hover *){background-color:var(--color-gray-100)}.group-hover\:bg-gray-200:is(:where(.group):hover *){background-color:var(--color-gray-200)}.group-hover\:bg-gray-700:is(:where(.group):hover *){background-color:var(--color-gray-700)}.group-hover\:bg-gray-800:is(:where(.group):hover *){background-color:var(--color-gray-800)}.group-hover\:text-black:is(:where(.group):hover *){color:var(--color-black)}.group-hover\:text-blue-500:is(:where(.group):hover *){color:var(--color-blue-500)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-blue-700:is(:where(.group):hover *){color:var(--color-blue-700)}.group-hover\:text-gray-700:is(:where(.group):hover *){color:var(--color-gray-700)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:text-gray-900:is(:where(.group):hover *){color:var(--color-gray-900)}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-focus\:border-blue-500:is(:where(.group):focus *){border-color:var(--color-blue-500)}.group-focus\:ring-2:is(:where(.group):focus *){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.peer-checked\:border-blue-500:is(:where(.peer):checked~*){border-color:var(--color-blue-500)}.peer-checked\:bg-blue-500:is(:where(.peer):checked~*){background-color:var(--color-blue-500)}.peer-invalid\:border-red-500:is(:where(.peer):invalid~*){border-color:var(--color-red-500)}.peer-invalid\:text-red-500:is(:where(.peer):invalid~*){color:var(--color-red-500)}.peer-focus\:border-blue-500:is(:where(.peer):focus~*){border-color:var(--color-blue-500)}.peer-focus\:ring-2:is(:where(.peer):focus~*){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.first-letter\:text-2xl:first-letter{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.first-letter\:font-bold:first-letter{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.first-letter\:text-blue-600:first-letter{color:var(--color-blue-600)}.first-line\:font-semibold:first-line{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.first-line\:text-gray-700:first-line{color:var(--color-gray-700)}.marker\:text-blue-500 ::marker{color:var(--color-blue-500)}.marker\:text-blue-500::marker{color:var(--color-blue-500)}.marker\:text-blue-500 ::-webkit-details-marker{color:var(--color-blue-500)}.marker\:text-blue-500::-webkit-details-marker{color:var(--color-blue-500)}.marker\:text-gray-500 ::marker{color:var(--color-gray-500)}.marker\:text-gray-500::marker{color:var(--color-gray-500)}.marker\:text-gray-500 ::-webkit-details-marker{color:var(--color-gray-500)}.marker\:text-gray-500::-webkit-details-marker{color:var(--color-gray-500)}.selection\:bg-blue-200 ::selection{background-color:var(--color-blue-200)}.selection\:bg-blue-200::selection{background-color:var(--color-blue-200)}.selection\:text-blue-900 ::selection{color:var(--color-blue-900)}.selection\:text-blue-900::selection{color:var(--color-blue-900)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:cursor-pointer::file-selector-button{cursor:pointer}.file\:rounded-full::file-selector-button{border-radius:3.40282e38px}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-blue-50::file-selector-button{background-color:var(--color-blue-50)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.file\:text-blue-700::file-selector-button{color:var(--color-blue-700)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-0:before{content:var(--tw-content);inset:calc(var(--spacing)*0)}.before\:block:before{content:var(--tw-content);display:block}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing)*0)}.after\:clear-both:after{content:var(--tw-content);clear:both}.after\:block:after{content:var(--tw-content);display:block}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-t-lg:first-child{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.first\:rounded-l-lg:first-child{border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first\:pt-0:first-child{padding-top:calc(var(--spacing)*0)}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\:rounded-r-lg:last-child{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.last\:rounded-b-lg:last-child{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing)*0)}.odd\:bg-gray-50:nth-child(odd){background-color:var(--color-gray-50)}.odd\:bg-gray-100:nth-child(odd){background-color:var(--color-gray-100)}.odd\:bg-white:nth-child(odd){background-color:var(--color-white)}.even\:bg-gray-50:nth-child(2n){background-color:var(--color-gray-50)}.even\:bg-gray-100:nth-child(2n){background-color:var(--color-gray-100)}.even\:bg-white:nth-child(2n){background-color:var(--color-white)}.checked\:border-blue-500:checked{border-color:var(--color-blue-500)}.checked\:border-blue-600:checked{border-color:var(--color-blue-600)}.checked\:bg-blue-500:checked{background-color:var(--color-blue-500)}.checked\:bg-blue-600:checked{background-color:var(--color-blue-600)}.checked\:bg-green-500:checked{background-color:var(--color-green-500)}.checked\:text-white:checked{color:var(--color-white)}.indeterminate\:border-gray-400:indeterminate{border-color:var(--color-gray-400)}.indeterminate\:bg-gray-300:indeterminate{background-color:var(--color-gray-300)}.placeholder-shown\:border-gray-300:placeholder-shown{border-color:var(--color-gray-300)}.autofill\:bg-yellow-100:autofill{background-color:var(--color-yellow-100)}.autofill\:text-black:autofill{color:var(--color-black)}.valid\:border-green-500:valid{border-color:var(--color-green-500)}.valid\:text-green-600:valid{color:var(--color-green-600)}.valid\:ring-green-500:valid{--tw-ring-color:var(--color-green-500)}.invalid\:border-red-500:invalid{border-color:var(--color-red-500)}.invalid\:text-red-600:invalid{color:var(--color-red-600)}.invalid\:ring-red-500:invalid{--tw-ring-color:var(--color-red-500)}.read-only\:cursor-not-allowed:read-only{cursor:not-allowed}.read-only\:bg-gray-50:read-only{background-color:var(--color-gray-50)}.read-only\:bg-gray-100:read-only{background-color:var(--color-gray-100)}.empty\:hidden:empty{display:none}.focus-within\:border-blue-500:focus-within{border-color:var(--color-blue-500)}.focus-within\:border-gray-500:focus-within{border-color:var(--color-gray-500)}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-blue-500:focus-within{--tw-ring-color:var(--color-blue-500)}.focus-within\:ring-gray-500:focus-within{--tw-ring-color:var(--color-gray-500)}@media(hover:hover){.hover\:scale-95:hover{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-50:hover{border-color:var(--color-blue-50)}.hover\:border-blue-100:hover{border-color:var(--color-blue-100)}.hover\:border-blue-200:hover{border-color:var(--color-blue-200)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-600:hover{border-color:var(--color-blue-600)}.hover\:border-blue-700:hover{border-color:var(--color-blue-700)}.hover\:border-blue-800:hover{border-color:var(--color-blue-800)}.hover\:border-blue-900:hover{border-color:var(--color-blue-900)}.hover\:border-gray-50:hover{border-color:var(--color-gray-50)}.hover\:border-gray-100:hover{border-color:var(--color-gray-100)}.hover\:border-gray-200:hover{border-color:var(--color-gray-200)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.hover\:border-gray-800:hover{border-color:var(--color-gray-800)}.hover\:border-gray-900:hover{border-color:var(--color-gray-900)}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-black\/10:hover{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/10:hover{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-100:hover{background-color:var(--color-blue-100)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-300:hover{background-color:var(--color-blue-300)}.hover\:bg-blue-400:hover{background-color:var(--color-blue-400)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.hover\:bg-blue-900:hover{background-color:var(--color-blue-900)}.hover\:bg-emerald-600:hover{background-color:var(--color-emerald-600)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}.hover\:bg-gray-400:hover{background-color:var(--color-gray-400)}.hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.hover\:bg-green-50:hover{background-color:var(--color-green-50)}.hover\:bg-green-100:hover{background-color:var(--color-green-100)}.hover\:bg-green-200:hover{background-color:var(--color-green-200)}.hover\:bg-green-300:hover{background-color:var(--color-green-300)}.hover\:bg-green-400:hover{background-color:var(--color-green-400)}.hover\:bg-green-500:hover{background-color:var(--color-green-500)}.hover\:bg-green-600:hover{background-color:var(--color-green-600)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-green-800:hover{background-color:var(--color-green-800)}.hover\:bg-green-900:hover{background-color:var(--color-green-900)}.hover\:bg-indigo-50:hover{background-color:var(--color-indigo-50)}.hover\:bg-indigo-100:hover{background-color:var(--color-indigo-100)}.hover\:bg-indigo-200:hover{background-color:var(--color-indigo-200)}.hover\:bg-indigo-300:hover{background-color:var(--color-indigo-300)}.hover\:bg-indigo-400:hover{background-color:var(--color-indigo-400)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-indigo-600:hover{background-color:var(--color-indigo-600)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-indigo-800:hover{background-color:var(--color-indigo-800)}.hover\:bg-indigo-900:hover{background-color:var(--color-indigo-900)}.hover\:bg-orange-50:hover{background-color:var(--color-orange-50)}.hover\:bg-orange-100:hover{background-color:var(--color-orange-100)}.hover\:bg-orange-200:hover{background-color:var(--color-orange-200)}.hover\:bg-orange-300:hover{background-color:var(--color-orange-300)}.hover\:bg-orange-400:hover{background-color:var(--color-orange-400)}.hover\:bg-orange-500:hover{background-color:var(--color-orange-500)}.hover\:bg-orange-600:hover{background-color:var(--color-orange-600)}.hover\:bg-orange-700:hover{background-color:var(--color-orange-700)}.hover\:bg-orange-800:hover{background-color:var(--color-orange-800)}.hover\:bg-orange-900:hover{background-color:var(--color-orange-900)}.hover\:bg-pink-50:hover{background-color:var(--color-pink-50)}.hover\:bg-pink-100:hover{background-color:var(--color-pink-100)}.hover\:bg-pink-200:hover{background-color:var(--color-pink-200)}.hover\:bg-pink-300:hover{background-color:var(--color-pink-300)}.hover\:bg-pink-400:hover{background-color:var(--color-pink-400)}.hover\:bg-pink-500:hover{background-color:var(--color-pink-500)}.hover\:bg-pink-600:hover{background-color:var(--color-pink-600)}.hover\:bg-pink-700:hover{background-color:var(--color-pink-700)}.hover\:bg-pink-800:hover{background-color:var(--color-pink-800)}.hover\:bg-pink-900:hover{background-color:var(--color-pink-900)}.hover\:bg-primary-700:hover{background-color:var(--color-primary-700)}.hover\:bg-purple-50:hover{background-color:var(--color-purple-50)}.hover\:bg-purple-100:hover{background-color:var(--color-purple-100)}.hover\:bg-purple-200:hover{background-color:var(--color-purple-200)}.hover\:bg-purple-300:hover{background-color:var(--color-purple-300)}.hover\:bg-purple-400:hover{background-color:var(--color-purple-400)}.hover\:bg-purple-500:hover{background-color:var(--color-purple-500)}.hover\:bg-purple-600:hover{background-color:var(--color-purple-600)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-purple-800:hover{background-color:var(--color-purple-800)}.hover\:bg-purple-900:hover{background-color:var(--color-purple-900)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-300:hover{background-color:var(--color-red-300)}.hover\:bg-red-400:hover{background-color:var(--color-red-400)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-red-800:hover{background-color:var(--color-red-800)}.hover\:bg-red-900:hover{background-color:var(--color-red-900)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.hover\:bg-slate-300:hover{background-color:var(--color-slate-300)}.hover\:bg-slate-400:hover{background-color:var(--color-slate-400)}.hover\:bg-slate-500:hover{background-color:var(--color-slate-500)}.hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}.hover\:bg-slate-900:hover{background-color:var(--color-slate-900)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/30:hover{background-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/30:hover{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\:bg-yellow-50:hover{background-color:var(--color-yellow-50)}.hover\:bg-yellow-100:hover{background-color:var(--color-yellow-100)}.hover\:bg-yellow-200:hover{background-color:var(--color-yellow-200)}.hover\:bg-yellow-300:hover{background-color:var(--color-yellow-300)}.hover\:bg-yellow-400:hover{background-color:var(--color-yellow-400)}.hover\:bg-yellow-500:hover{background-color:var(--color-yellow-500)}.hover\:bg-yellow-600:hover{background-color:var(--color-yellow-600)}.hover\:bg-yellow-700:hover{background-color:var(--color-yellow-700)}.hover\:bg-yellow-800:hover{background-color:var(--color-yellow-800)}.hover\:bg-yellow-900:hover{background-color:var(--color-yellow-900)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-blue-50:hover{color:var(--color-blue-50)}.hover\:text-blue-100:hover{color:var(--color-blue-100)}.hover\:text-blue-200:hover{color:var(--color-blue-200)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-blue-400:hover{color:var(--color-blue-400)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-50:hover{color:var(--color-gray-50)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-200:hover{color:var(--color-gray-200)}.hover\:text-gray-300:hover{color:var(--color-gray-300)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-50:hover{color:var(--color-green-50)}.hover\:text-green-100:hover{color:var(--color-green-100)}.hover\:text-green-200:hover{color:var(--color-green-200)}.hover\:text-green-300:hover{color:var(--color-green-300)}.hover\:text-green-400:hover{color:var(--color-green-400)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-700:hover{color:var(--color-green-700)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-purple-50:hover{color:var(--color-purple-50)}.hover\:text-purple-100:hover{color:var(--color-purple-100)}.hover\:text-purple-200:hover{color:var(--color-purple-200)}.hover\:text-purple-300:hover{color:var(--color-purple-300)}.hover\:text-purple-400:hover{color:var(--color-purple-400)}.hover\:text-purple-500:hover{color:var(--color-purple-500)}.hover\:text-purple-600:hover{color:var(--color-purple-600)}.hover\:text-purple-700:hover{color:var(--color-purple-700)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-purple-900:hover{color:var(--color-purple-900)}.hover\:text-red-50:hover{color:var(--color-red-50)}.hover\:text-red-100:hover{color:var(--color-red-100)}.hover\:text-red-200:hover{color:var(--color-red-200)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-red-800:hover{color:var(--color-red-800)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-slate-50:hover{color:var(--color-slate-50)}.hover\:text-slate-100:hover{color:var(--color-slate-100)}.hover\:text-slate-200:hover{color:var(--color-slate-200)}.hover\:text-slate-300:hover{color:var(--color-slate-300)}.hover\:text-slate-400:hover{color:var(--color-slate-400)}.hover\:text-slate-500:hover{color:var(--color-slate-500)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-700:hover{color:var(--color-slate-700)}.hover\:text-slate-800:hover{color:var(--color-slate-800)}.hover\:text-slate-900:hover{color:var(--color-slate-900)}.hover\:text-white:hover{color:var(--color-white)}.hover\:line-through:hover{text-decoration-line:line-through}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-0:hover{opacity:0}.hover\:opacity-25:hover{opacity:.25}.hover\:opacity-50:hover{opacity:.5}.hover\:opacity-75:hover{opacity:.75}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-none:hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-0:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-1:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-8:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(8px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-blue-500:hover{--tw-ring-color:var(--color-blue-500)}.hover\:ring-gray-500:hover{--tw-ring-color:var(--color-gray-500)}.hover\:ring-green-500:hover{--tw-ring-color:var(--color-green-500)}.hover\:ring-red-500:hover{--tw-ring-color:var(--color-red-500)}.file\:hover\:bg-blue-100::file-selector-button:hover{background-color:var(--color-blue-100)}}.focus\:border-blue-50:focus{border-color:var(--color-blue-50)}.focus\:border-blue-100:focus{border-color:var(--color-blue-100)}.focus\:border-blue-200:focus{border-color:var(--color-blue-200)}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-400:focus{border-color:var(--color-blue-400)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-blue-600:focus{border-color:var(--color-blue-600)}.focus\:border-blue-700:focus{border-color:var(--color-blue-700)}.focus\:border-blue-800:focus{border-color:var(--color-blue-800)}.focus\:border-blue-900:focus{border-color:var(--color-blue-900)}.focus\:border-gray-50:focus{border-color:var(--color-gray-50)}.focus\:border-gray-100:focus{border-color:var(--color-gray-100)}.focus\:border-gray-200:focus{border-color:var(--color-gray-200)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-gray-400:focus{border-color:var(--color-gray-400)}.focus\:border-gray-500:focus{border-color:var(--color-gray-500)}.focus\:border-gray-600:focus{border-color:var(--color-gray-600)}.focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.focus\:border-gray-800:focus{border-color:var(--color-gray-800)}.focus\:border-gray-900:focus{border-color:var(--color-gray-900)}.focus\:border-green-500:focus{border-color:var(--color-green-500)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-purple-500:focus{border-color:var(--color-purple-500)}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:border-transparent:focus{border-color:#0000}.focus\:border-yellow-500:focus{border-color:var(--color-yellow-500)}.focus\:bg-black:focus{background-color:var(--color-black)}.focus\:bg-blue-50:focus{background-color:var(--color-blue-50)}.focus\:bg-blue-100:focus{background-color:var(--color-blue-100)}.focus\:bg-blue-200:focus{background-color:var(--color-blue-200)}.focus\:bg-blue-300:focus{background-color:var(--color-blue-300)}.focus\:bg-blue-400:focus{background-color:var(--color-blue-400)}.focus\:bg-blue-500:focus{background-color:var(--color-blue-500)}.focus\:bg-blue-600:focus{background-color:var(--color-blue-600)}.focus\:bg-blue-700:focus{background-color:var(--color-blue-700)}.focus\:bg-blue-800:focus{background-color:var(--color-blue-800)}.focus\:bg-blue-900:focus{background-color:var(--color-blue-900)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-200:focus{background-color:var(--color-gray-200)}.focus\:bg-gray-300:focus{background-color:var(--color-gray-300)}.focus\:bg-gray-400:focus{background-color:var(--color-gray-400)}.focus\:bg-gray-500:focus{background-color:var(--color-gray-500)}.focus\:bg-gray-600:focus{background-color:var(--color-gray-600)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.focus\:bg-transparent:focus{background-color:#0000}.focus\:bg-white:focus{background-color:var(--color-white)}.focus\:text-black:focus{color:var(--color-black)}.focus\:text-blue-50:focus{color:var(--color-blue-50)}.focus\:text-blue-100:focus{color:var(--color-blue-100)}.focus\:text-blue-200:focus{color:var(--color-blue-200)}.focus\:text-blue-300:focus{color:var(--color-blue-300)}.focus\:text-blue-400:focus{color:var(--color-blue-400)}.focus\:text-blue-500:focus{color:var(--color-blue-500)}.focus\:text-blue-600:focus{color:var(--color-blue-600)}.focus\:text-blue-700:focus{color:var(--color-blue-700)}.focus\:text-blue-800:focus{color:var(--color-blue-800)}.focus\:text-blue-900:focus{color:var(--color-blue-900)}.focus\:text-gray-50:focus{color:var(--color-gray-50)}.focus\:text-gray-100:focus{color:var(--color-gray-100)}.focus\:text-gray-200:focus{color:var(--color-gray-200)}.focus\:text-gray-300:focus{color:var(--color-gray-300)}.focus\:text-gray-400:focus{color:var(--color-gray-400)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-600:focus{color:var(--color-gray-600)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-gray-900:focus{color:var(--color-gray-900)}.focus\:text-white:focus{color:var(--color-white)}.focus\:shadow:focus{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-lg:focus{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-md:focus{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-none:focus{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-sm:focus{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-xl:focus{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-4:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-8:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(8px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-amber-500:focus{--tw-ring-color:var(--color-amber-500)}.focus\:ring-blue-50:focus{--tw-ring-color:var(--color-blue-50)}.focus\:ring-blue-100:focus{--tw-ring-color:var(--color-blue-100)}.focus\:ring-blue-200:focus{--tw-ring-color:var(--color-blue-200)}.focus\:ring-blue-300:focus{--tw-ring-color:var(--color-blue-300)}.focus\:ring-blue-400:focus{--tw-ring-color:var(--color-blue-400)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-blue-600:focus{--tw-ring-color:var(--color-blue-600)}.focus\:ring-blue-700:focus{--tw-ring-color:var(--color-blue-700)}.focus\:ring-blue-800:focus{--tw-ring-color:var(--color-blue-800)}.focus\:ring-blue-900:focus{--tw-ring-color:var(--color-blue-900)}.focus\:ring-current:focus{--tw-ring-color:currentcolor}.focus\:ring-gray-50:focus{--tw-ring-color:var(--color-gray-50)}.focus\:ring-gray-100:focus{--tw-ring-color:var(--color-gray-100)}.focus\:ring-gray-200:focus{--tw-ring-color:var(--color-gray-200)}.focus\:ring-gray-300:focus{--tw-ring-color:var(--color-gray-300)}.focus\:ring-gray-400:focus{--tw-ring-color:var(--color-gray-400)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-gray-600:focus{--tw-ring-color:var(--color-gray-600)}.focus\:ring-gray-700:focus{--tw-ring-color:var(--color-gray-700)}.focus\:ring-gray-800:focus{--tw-ring-color:var(--color-gray-800)}.focus\:ring-gray-900:focus{--tw-ring-color:var(--color-gray-900)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-primary-500:focus{--tw-ring-color:var(--color-primary-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-transparent:focus{--tw-ring-color:transparent}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-1:focus{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-4:focus{--tw-ring-offset-width:4px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-gray-100:focus{--tw-ring-offset-color:var(--color-gray-100)}.focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}.focus\:ring-offset-white:focus{--tw-ring-offset-color:var(--color-white)}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-0:focus{outline-style:var(--tw-outline-style);outline-width:0}.focus\:outline-1:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:outline-4:focus{outline-style:var(--tw-outline-style);outline-width:4px}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-blue-500:focus-visible{--tw-ring-color:var(--color-blue-500)}.focus-visible\:ring-gray-500:focus-visible{--tw-ring-color:var(--color-gray-500)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.active\:scale-100:active{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-600:active{background-color:var(--color-blue-600)}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-blue-800:active{background-color:var(--color-blue-800)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-200:active{background-color:var(--color-gray-200)}.active\:bg-gray-300:active{background-color:var(--color-gray-300)}.active\:bg-gray-700:active{background-color:var(--color-gray-700)}.active\:bg-gray-800:active{background-color:var(--color-gray-800)}.active\:bg-green-600:active{background-color:var(--color-green-600)}.active\:bg-green-700:active{background-color:var(--color-green-700)}.active\:bg-red-600:active{background-color:var(--color-red-600)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:opacity-75:active{opacity:.75}.active\:opacity-100:active{opacity:1}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-200:disabled{border-color:var(--color-gray-200)}.disabled\:border-gray-300:disabled{border-color:var(--color-gray-300)}.disabled\:bg-gray-100:disabled{background-color:var(--color-gray-100)}.disabled\:bg-gray-200:disabled{background-color:var(--color-gray-200)}.disabled\:bg-gray-300:disabled{background-color:var(--color-gray-300)}.disabled\:text-gray-300:disabled{color:var(--color-gray-300)}.disabled\:text-gray-400:disabled{color:var(--color-gray-400)}.disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\:no-underline:disabled{text-decoration-line:none}.disabled\:opacity-20:disabled{opacity:.2}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-75:disabled{opacity:.75}@media(min-width:40rem){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-12{grid-column:span 12/span 12}.sm\:col-span-full{grid-column:1/-1}.sm\:m-0{margin:calc(var(--spacing)*0)}.sm\:m-1{margin:calc(var(--spacing)*1)}.sm\:m-2{margin:calc(var(--spacing)*2)}.sm\:m-3{margin:calc(var(--spacing)*3)}.sm\:m-4{margin:calc(var(--spacing)*4)}.sm\:m-auto{margin:auto}.sm\:mx-auto{margin-inline:auto}.sm\:my-auto{margin-block:auto}.sm\:ml-auto{margin-left:auto}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-block{display:inline-block}.sm\:inline-flex{display:inline-flex}.sm\:w-1\/2{width:50%}.sm\:w-1\/3{width:33.3333%}.sm\:w-1\/4{width:25%}.sm\:w-2\/3{width:66.6667%}.sm\:w-3\/4{width:75%}.sm\:w-64{width:calc(var(--spacing)*64)}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:min-w-48{min-width:calc(var(--spacing)*48)}.sm\:auto-cols-\[calc\(33\.333\%_-_11px\)\]{grid-auto-columns:calc(33.333% - 11px)}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-0{gap:calc(var(--spacing)*0)}.sm\:gap-1{gap:calc(var(--spacing)*1)}.sm\:gap-2{gap:calc(var(--spacing)*2)}.sm\:gap-3{gap:calc(var(--spacing)*3)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-5{gap:calc(var(--spacing)*5)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.sm\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.sm\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.sm\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.sm\:p-0{padding:calc(var(--spacing)*0)}.sm\:p-1{padding:calc(var(--spacing)*1)}.sm\:p-2{padding:calc(var(--spacing)*2)}.sm\:p-3{padding:calc(var(--spacing)*3)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-5{padding:calc(var(--spacing)*5)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-1{padding-inline:calc(var(--spacing)*1)}.sm\:px-2{padding-inline:calc(var(--spacing)*2)}.sm\:px-3{padding-inline:calc(var(--spacing)*3)}.sm\:px-4{padding-inline:calc(var(--spacing)*4)}.sm\:px-5{padding-inline:calc(var(--spacing)*5)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-8{padding-inline:calc(var(--spacing)*8)}.sm\:py-0{padding-block:calc(var(--spacing)*0)}.sm\:py-1{padding-block:calc(var(--spacing)*1)}.sm\:py-2{padding-block:calc(var(--spacing)*2)}.sm\:py-3{padding-block:calc(var(--spacing)*3)}.sm\:py-4{padding-block:calc(var(--spacing)*4)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-6{padding-block:calc(var(--spacing)*6)}.sm\:py-8{padding-block:calc(var(--spacing)*8)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:48rem){.md\:absolute{position:absolute}.md\:fixed{position:fixed}.md\:relative{position:relative}.md\:static{position:static}.md\:sticky{position:sticky}.md\:inset-0{inset:calc(var(--spacing)*0)}.md\:top-0{top:calc(var(--spacing)*0)}.md\:right-0{right:calc(var(--spacing)*0)}.md\:bottom-0{bottom:calc(var(--spacing)*0)}.md\:left-0{left:calc(var(--spacing)*0)}.md\:order-1{order:1}.md\:order-2{order:2}.md\:order-3{order:3}.md\:order-first{order:-9999}.md\:order-last{order:9999}.md\:order-none{order:0}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-12{grid-column:span 12/span 12}.md\:col-span-full{grid-column:1/-1}.md\:row-span-1{grid-row:span 1/span 1}.md\:row-span-2{grid-row:span 2/span 2}.md\:row-span-3{grid-row:span 3/span 3}.md\:row-span-4{grid-row:span 4/span 4}.md\:row-span-full{grid-row:1/-1}.md\:m-0{margin:calc(var(--spacing)*0)}.md\:m-1{margin:calc(var(--spacing)*1)}.md\:m-2{margin:calc(var(--spacing)*2)}.md\:m-3{margin:calc(var(--spacing)*3)}.md\:m-4{margin:calc(var(--spacing)*4)}.md\:m-auto{margin:auto}.md\:mx-auto{margin-inline:auto}.md\:my-auto{margin-block:auto}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:mt-1{margin-top:calc(var(--spacing)*1)}.md\:mt-2{margin-top:calc(var(--spacing)*2)}.md\:mt-3{margin-top:calc(var(--spacing)*3)}.md\:mt-4{margin-top:calc(var(--spacing)*4)}.md\:mt-6{margin-top:calc(var(--spacing)*6)}.md\:mt-8{margin-top:calc(var(--spacing)*8)}.md\:mr-0{margin-right:calc(var(--spacing)*0)}.md\:mr-1{margin-right:calc(var(--spacing)*1)}.md\:mr-2{margin-right:calc(var(--spacing)*2)}.md\:mr-3{margin-right:calc(var(--spacing)*3)}.md\:mr-4{margin-right:calc(var(--spacing)*4)}.md\:mr-6{margin-right:calc(var(--spacing)*6)}.md\:mr-8{margin-right:calc(var(--spacing)*8)}.md\:mr-auto{margin-right:auto}.md\:mb-0{margin-bottom:calc(var(--spacing)*0)}.md\:mb-1{margin-bottom:calc(var(--spacing)*1)}.md\:mb-2{margin-bottom:calc(var(--spacing)*2)}.md\:mb-3{margin-bottom:calc(var(--spacing)*3)}.md\:mb-4{margin-bottom:calc(var(--spacing)*4)}.md\:mb-6{margin-bottom:calc(var(--spacing)*6)}.md\:mb-8{margin-bottom:calc(var(--spacing)*8)}.md\:ml-0{margin-left:calc(var(--spacing)*0)}.md\:ml-1{margin-left:calc(var(--spacing)*1)}.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:ml-3{margin-left:calc(var(--spacing)*3)}.md\:ml-4{margin-left:calc(var(--spacing)*4)}.md\:ml-6{margin-left:calc(var(--spacing)*6)}.md\:ml-8{margin-left:calc(var(--spacing)*8)}.md\:ml-auto{margin-left:auto}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:inline-block{display:inline-block}.md\:inline-flex{display:inline-flex}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.3333%}.md\:w-1\/4{width:25%}.md\:w-1\/5{width:20%}.md\:w-2\/3{width:66.6667%}.md\:w-2\/5{width:40%}.md\:w-3\/4{width:75%}.md\:w-3\/5{width:60%}.md\:w-4\/5{width:80%}.md\:w-auto{width:auto}.md\:w-full{width:100%}.md\:max-w-2xl{max-width:var(--container-2xl)}.md\:max-w-3xl{max-width:var(--container-3xl)}.md\:max-w-4xl{max-width:var(--container-4xl)}.md\:max-w-5xl{max-width:var(--container-5xl)}.md\:max-w-6xl{max-width:var(--container-6xl)}.md\:max-w-7xl{max-width:var(--container-7xl)}.md\:max-w-full{max-width:100%}.md\:max-w-lg{max-width:var(--container-lg)}.md\:max-w-md{max-width:var(--container-md)}.md\:max-w-none{max-width:none}.md\:max-w-sm{max-width:var(--container-sm)}.md\:max-w-xl{max-width:var(--container-xl)}.md\:max-w-xs{max-width:var(--container-xs)}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.md\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.md\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.md\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.md\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.md\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.md\:flex-col{flex-direction:column}.md\:flex-row{flex-direction:row}.md\:items-baseline{align-items:baseline}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:items-stretch{align-items:stretch}.md\:justify-around{justify-content:space-around}.md\:justify-between{justify-content:space-between}.md\:justify-center{justify-content:center}.md\:justify-end{justify-content:flex-end}.md\:justify-start{justify-content:flex-start}.md\:gap-0{gap:calc(var(--spacing)*0)}.md\:gap-1{gap:calc(var(--spacing)*1)}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-3{gap:calc(var(--spacing)*3)}.md\:gap-4{gap:calc(var(--spacing)*4)}.md\:gap-5{gap:calc(var(--spacing)*5)}.md\:gap-6{gap:calc(var(--spacing)*6)}.md\:gap-8{gap:calc(var(--spacing)*8)}.md\:gap-10{gap:calc(var(--spacing)*10)}.md\:gap-12{gap:calc(var(--spacing)*12)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}.md\:p-0{padding:calc(var(--spacing)*0)}.md\:p-1{padding:calc(var(--spacing)*1)}.md\:p-2{padding:calc(var(--spacing)*2)}.md\:p-3{padding:calc(var(--spacing)*3)}.md\:p-4{padding:calc(var(--spacing)*4)}.md\:p-5{padding:calc(var(--spacing)*5)}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:p-12{padding:calc(var(--spacing)*12)}.md\:px-0{padding-inline:calc(var(--spacing)*0)}.md\:px-1{padding-inline:calc(var(--spacing)*1)}.md\:px-2{padding-inline:calc(var(--spacing)*2)}.md\:px-3{padding-inline:calc(var(--spacing)*3)}.md\:px-4{padding-inline:calc(var(--spacing)*4)}.md\:px-5{padding-inline:calc(var(--spacing)*5)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:px-8{padding-inline:calc(var(--spacing)*8)}.md\:px-10{padding-inline:calc(var(--spacing)*10)}.md\:px-12{padding-inline:calc(var(--spacing)*12)}.md\:py-0{padding-block:calc(var(--spacing)*0)}.md\:py-1{padding-block:calc(var(--spacing)*1)}.md\:py-2{padding-block:calc(var(--spacing)*2)}.md\:py-3{padding-block:calc(var(--spacing)*3)}.md\:py-4{padding-block:calc(var(--spacing)*4)}.md\:py-5{padding-block:calc(var(--spacing)*5)}.md\:py-6{padding-block:calc(var(--spacing)*6)}.md\:py-8{padding-block:calc(var(--spacing)*8)}.md\:py-10{padding-block:calc(var(--spacing)*10)}.md\:py-12{padding-block:calc(var(--spacing)*12)}.md\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.md\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:64rem){.lg\:absolute{position:absolute}.lg\:fixed{position:fixed}.lg\:relative{position:relative}.lg\:static{position:static}.lg\:sticky{position:sticky}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:top-0{top:calc(var(--spacing)*0)}.lg\:right-0{right:calc(var(--spacing)*0)}.lg\:bottom-0{bottom:calc(var(--spacing)*0)}.lg\:left-0{left:calc(var(--spacing)*0)}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-3{order:3}.lg\:order-4{order:4}.lg\:order-first{order:-9999}.lg\:order-last{order:9999}.lg\:order-none{order:0}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:col-span-full{grid-column:1/-1}.lg\:row-span-1{grid-row:span 1/span 1}.lg\:row-span-2{grid-row:span 2/span 2}.lg\:row-span-3{grid-row:span 3/span 3}.lg\:row-span-4{grid-row:span 4/span 4}.lg\:row-span-full{grid-row:1/-1}.lg\:m-0{margin:calc(var(--spacing)*0)}.lg\:m-1{margin:calc(var(--spacing)*1)}.lg\:m-2{margin:calc(var(--spacing)*2)}.lg\:m-3{margin:calc(var(--spacing)*3)}.lg\:m-4{margin:calc(var(--spacing)*4)}.lg\:m-auto{margin:auto}.lg\:mx-auto{margin-inline:auto}.lg\:my-auto{margin-block:auto}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-1{margin-top:calc(var(--spacing)*1)}.lg\:mt-2{margin-top:calc(var(--spacing)*2)}.lg\:mt-3{margin-top:calc(var(--spacing)*3)}.lg\:mt-4{margin-top:calc(var(--spacing)*4)}.lg\:mt-6{margin-top:calc(var(--spacing)*6)}.lg\:mt-8{margin-top:calc(var(--spacing)*8)}.lg\:mt-10{margin-top:calc(var(--spacing)*10)}.lg\:mt-12{margin-top:calc(var(--spacing)*12)}.lg\:mr-0{margin-right:calc(var(--spacing)*0)}.lg\:mr-1{margin-right:calc(var(--spacing)*1)}.lg\:mr-2{margin-right:calc(var(--spacing)*2)}.lg\:mr-3{margin-right:calc(var(--spacing)*3)}.lg\:mr-4{margin-right:calc(var(--spacing)*4)}.lg\:mr-6{margin-right:calc(var(--spacing)*6)}.lg\:mr-8{margin-right:calc(var(--spacing)*8)}.lg\:mr-auto{margin-right:auto}.lg\:mb-0{margin-bottom:calc(var(--spacing)*0)}.lg\:mb-1{margin-bottom:calc(var(--spacing)*1)}.lg\:mb-2{margin-bottom:calc(var(--spacing)*2)}.lg\:mb-3{margin-bottom:calc(var(--spacing)*3)}.lg\:mb-4{margin-bottom:calc(var(--spacing)*4)}.lg\:mb-6{margin-bottom:calc(var(--spacing)*6)}.lg\:mb-8{margin-bottom:calc(var(--spacing)*8)}.lg\:mb-10{margin-bottom:calc(var(--spacing)*10)}.lg\:mb-12{margin-bottom:calc(var(--spacing)*12)}.lg\:ml-0{margin-left:calc(var(--spacing)*0)}.lg\:ml-1{margin-left:calc(var(--spacing)*1)}.lg\:ml-2{margin-left:calc(var(--spacing)*2)}.lg\:ml-3{margin-left:calc(var(--spacing)*3)}.lg\:ml-4{margin-left:calc(var(--spacing)*4)}.lg\:ml-6{margin-left:calc(var(--spacing)*6)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:ml-auto{margin-left:auto}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline{display:inline}.lg\:inline-block{display:inline-block}.lg\:inline-flex{display:inline-flex}.lg\:w-1\/2{width:50%}.lg\:w-1\/3{width:33.3333%}.lg\:w-1\/4{width:25%}.lg\:w-1\/5{width:20%}.lg\:w-1\/6{width:16.6667%}.lg\:w-2\/3{width:66.6667%}.lg\:w-2\/5{width:40%}.lg\:w-3\/4{width:75%}.lg\:w-3\/5{width:60%}.lg\:w-4\/5{width:80%}.lg\:w-5\/6{width:83.3333%}.lg\:w-auto{width:auto}.lg\:w-full{width:100%}.lg\:max-w-2xl{max-width:var(--container-2xl)}.lg\:max-w-3xl{max-width:var(--container-3xl)}.lg\:max-w-4xl{max-width:var(--container-4xl)}.lg\:max-w-5xl{max-width:var(--container-5xl)}.lg\:max-w-6xl{max-width:var(--container-6xl)}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-full{max-width:100%}.lg\:max-w-lg{max-width:var(--container-lg)}.lg\:max-w-md{max-width:var(--container-md)}.lg\:max-w-none{max-width:none}.lg\:max-w-sm{max-width:var(--container-sm)}.lg\:max-w-xl{max-width:var(--container-xl)}.lg\:max-w-xs{max-width:var(--container-xs)}.lg\:auto-cols-\[calc\(25\%_-_12px\)\]{grid-auto-columns:calc(25% - 12px)}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.lg\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.lg\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.lg\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.lg\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.lg\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:flex-row{flex-direction:row}.lg\:items-baseline{align-items:baseline}.lg\:items-center{align-items:center}.lg\:items-end{align-items:flex-end}.lg\:items-start{align-items:flex-start}.lg\:items-stretch{align-items:stretch}.lg\:justify-around{justify-content:space-around}.lg\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:justify-evenly{justify-content:space-evenly}.lg\:justify-start{justify-content:flex-start}.lg\:gap-0{gap:calc(var(--spacing)*0)}.lg\:gap-1{gap:calc(var(--spacing)*1)}.lg\:gap-2{gap:calc(var(--spacing)*2)}.lg\:gap-3{gap:calc(var(--spacing)*3)}.lg\:gap-4{gap:calc(var(--spacing)*4)}.lg\:gap-5{gap:calc(var(--spacing)*5)}.lg\:gap-6{gap:calc(var(--spacing)*6)}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-10>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*10)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-x-reverse)))}.lg\:p-0{padding:calc(var(--spacing)*0)}.lg\:p-1{padding:calc(var(--spacing)*1)}.lg\:p-2{padding:calc(var(--spacing)*2)}.lg\:p-3{padding:calc(var(--spacing)*3)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-5{padding:calc(var(--spacing)*5)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-16{padding:calc(var(--spacing)*16)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-1{padding-inline:calc(var(--spacing)*1)}.lg\:px-2{padding-inline:calc(var(--spacing)*2)}.lg\:px-3{padding-inline:calc(var(--spacing)*3)}.lg\:px-4{padding-inline:calc(var(--spacing)*4)}.lg\:px-5{padding-inline:calc(var(--spacing)*5)}.lg\:px-6{padding-inline:calc(var(--spacing)*6)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:px-10{padding-inline:calc(var(--spacing)*10)}.lg\:px-12{padding-inline:calc(var(--spacing)*12)}.lg\:px-16{padding-inline:calc(var(--spacing)*16)}.lg\:py-0{padding-block:calc(var(--spacing)*0)}.lg\:py-1{padding-block:calc(var(--spacing)*1)}.lg\:py-2{padding-block:calc(var(--spacing)*2)}.lg\:py-3{padding-block:calc(var(--spacing)*3)}.lg\:py-4{padding-block:calc(var(--spacing)*4)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-6{padding-block:calc(var(--spacing)*6)}.lg\:py-8{padding-block:calc(var(--spacing)*8)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-16{padding-block:calc(var(--spacing)*16)}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:80rem){.xl\:col-span-1{grid-column:span 1/span 1}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-6{grid-column:span 6/span 6}.xl\:col-span-12{grid-column:span 12/span 12}.xl\:col-span-full{grid-column:1/-1}.xl\:row-span-1{grid-row:span 1/span 1}.xl\:row-span-2{grid-row:span 2/span 2}.xl\:row-span-3{grid-row:span 3/span 3}.xl\:row-span-full{grid-row:1/-1}.xl\:m-0{margin:calc(var(--spacing)*0)}.xl\:m-auto{margin:auto}.xl\:mx-auto{margin-inline:auto}.xl\:my-auto{margin-block:auto}.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:inline{display:inline}.xl\:inline-block{display:inline-block}.xl\:inline-flex{display:inline-flex}.xl\:w-1\/2{width:50%}.xl\:w-1\/3{width:33.3333%}.xl\:w-1\/4{width:25%}.xl\:w-1\/5{width:20%}.xl\:w-2\/3{width:66.6667%}.xl\:w-2\/5{width:40%}.xl\:w-3\/4{width:75%}.xl\:w-3\/5{width:60%}.xl\:w-4\/5{width:80%}.xl\:w-auto{width:auto}.xl\:w-full{width:100%}.xl\:max-w-2xl{max-width:var(--container-2xl)}.xl\:max-w-3xl{max-width:var(--container-3xl)}.xl\:max-w-4xl{max-width:var(--container-4xl)}.xl\:max-w-5xl{max-width:var(--container-5xl)}.xl\:max-w-6xl{max-width:var(--container-6xl)}.xl\:max-w-7xl{max-width:var(--container-7xl)}.xl\:max-w-full{max-width:100%}.xl\:max-w-lg{max-width:var(--container-lg)}.xl\:max-w-md{max-width:var(--container-md)}.xl\:max-w-none{max-width:none}.xl\:max-w-sm{max-width:var(--container-sm)}.xl\:max-w-xl{max-width:var(--container-xl)}.xl\:max-w-xs{max-width:var(--container-xs)}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.xl\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.xl\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.xl\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.xl\:flex-col{flex-direction:column}.xl\:flex-row{flex-direction:row}.xl\:items-center{align-items:center}.xl\:items-end{align-items:flex-end}.xl\:items-start{align-items:flex-start}.xl\:justify-between{justify-content:space-between}.xl\:justify-center{justify-content:center}.xl\:justify-end{justify-content:flex-end}.xl\:justify-start{justify-content:flex-start}.xl\:gap-0{gap:calc(var(--spacing)*0)}.xl\:gap-1{gap:calc(var(--spacing)*1)}.xl\:gap-2{gap:calc(var(--spacing)*2)}.xl\:gap-3{gap:calc(var(--spacing)*3)}.xl\:gap-4{gap:calc(var(--spacing)*4)}.xl\:gap-5{gap:calc(var(--spacing)*5)}.xl\:gap-6{gap:calc(var(--spacing)*6)}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:gap-10{gap:calc(var(--spacing)*10)}.xl\:gap-12{gap:calc(var(--spacing)*12)}.xl\:gap-16{gap:calc(var(--spacing)*16)}:where(.xl\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}.xl\:p-0{padding:calc(var(--spacing)*0)}.xl\:p-1{padding:calc(var(--spacing)*1)}.xl\:p-2{padding:calc(var(--spacing)*2)}.xl\:p-3{padding:calc(var(--spacing)*3)}.xl\:p-4{padding:calc(var(--spacing)*4)}.xl\:p-5{padding:calc(var(--spacing)*5)}.xl\:p-6{padding:calc(var(--spacing)*6)}.xl\:p-8{padding:calc(var(--spacing)*8)}.xl\:p-10{padding:calc(var(--spacing)*10)}.xl\:p-12{padding:calc(var(--spacing)*12)}.xl\:p-16{padding:calc(var(--spacing)*16)}.xl\:px-0{padding-inline:calc(var(--spacing)*0)}.xl\:px-1{padding-inline:calc(var(--spacing)*1)}.xl\:px-2{padding-inline:calc(var(--spacing)*2)}.xl\:px-3{padding-inline:calc(var(--spacing)*3)}.xl\:px-4{padding-inline:calc(var(--spacing)*4)}.xl\:px-5{padding-inline:calc(var(--spacing)*5)}.xl\:px-6{padding-inline:calc(var(--spacing)*6)}.xl\:px-8{padding-inline:calc(var(--spacing)*8)}.xl\:px-10{padding-inline:calc(var(--spacing)*10)}.xl\:px-12{padding-inline:calc(var(--spacing)*12)}.xl\:px-16{padding-inline:calc(var(--spacing)*16)}.xl\:py-0{padding-block:calc(var(--spacing)*0)}.xl\:py-1{padding-block:calc(var(--spacing)*1)}.xl\:py-2{padding-block:calc(var(--spacing)*2)}.xl\:py-3{padding-block:calc(var(--spacing)*3)}.xl\:py-4{padding-block:calc(var(--spacing)*4)}.xl\:py-5{padding-block:calc(var(--spacing)*5)}.xl\:py-6{padding-block:calc(var(--spacing)*6)}.xl\:py-8{padding-block:calc(var(--spacing)*8)}.xl\:py-10{padding-block:calc(var(--spacing)*10)}.xl\:py-12{padding-block:calc(var(--spacing)*12)}.xl\:py-16{padding-block:calc(var(--spacing)*16)}.xl\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.xl\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.xl\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.xl\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.xl\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.xl\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.xl\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.xl\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.xl\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:96rem){.\32xl\:col-span-1{grid-column:span 1/span 1}.\32xl\:col-span-2{grid-column:span 2/span 2}.\32xl\:col-span-3{grid-column:span 3/span 3}.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:col-span-12{grid-column:span 12/span 12}.\32xl\:block{display:block}.\32xl\:flex{display:flex}.\32xl\:hidden{display:none}.\32xl\:w-1\/2{width:50%}.\32xl\:w-1\/3{width:33.3333%}.\32xl\:w-1\/4{width:25%}.\32xl\:w-2\/3{width:66.6667%}.\32xl\:w-3\/4{width:75%}.\32xl\:w-auto{width:auto}.\32xl\:w-full{width:100%}.\32xl\:max-w-2xl{max-width:var(--container-2xl)}.\32xl\:max-w-3xl{max-width:var(--container-3xl)}.\32xl\:max-w-4xl{max-width:var(--container-4xl)}.\32xl\:max-w-5xl{max-width:var(--container-5xl)}.\32xl\:max-w-6xl{max-width:var(--container-6xl)}.\32xl\:max-w-7xl{max-width:var(--container-7xl)}.\32xl\:max-w-full{max-width:100%}.\32xl\:max-w-lg{max-width:var(--container-lg)}.\32xl\:max-w-md{max-width:var(--container-md)}.\32xl\:max-w-sm{max-width:var(--container-sm)}.\32xl\:max-w-xl{max-width:var(--container-xl)}.\32xl\:max-w-xs{max-width:var(--container-xs)}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:gap-0{gap:calc(var(--spacing)*0)}.\32xl\:gap-4{gap:calc(var(--spacing)*4)}.\32xl\:gap-6{gap:calc(var(--spacing)*6)}.\32xl\:gap-8{gap:calc(var(--spacing)*8)}.\32xl\:gap-12{gap:calc(var(--spacing)*12)}.\32xl\:gap-16{gap:calc(var(--spacing)*16)}.\32xl\:p-0{padding:calc(var(--spacing)*0)}.\32xl\:p-4{padding:calc(var(--spacing)*4)}.\32xl\:p-6{padding:calc(var(--spacing)*6)}.\32xl\:p-8{padding:calc(var(--spacing)*8)}.\32xl\:p-12{padding:calc(var(--spacing)*12)}.\32xl\:p-16{padding:calc(var(--spacing)*16)}.\32xl\:px-0{padding-inline:calc(var(--spacing)*0)}.\32xl\:px-4{padding-inline:calc(var(--spacing)*4)}.\32xl\:px-6{padding-inline:calc(var(--spacing)*6)}.\32xl\:px-8{padding-inline:calc(var(--spacing)*8)}.\32xl\:px-12{padding-inline:calc(var(--spacing)*12)}.\32xl\:px-16{padding-inline:calc(var(--spacing)*16)}.\32xl\:py-0{padding-block:calc(var(--spacing)*0)}.\32xl\:py-4{padding-block:calc(var(--spacing)*4)}.\32xl\:py-6{padding-block:calc(var(--spacing)*6)}.\32xl\:py-8{padding-block:calc(var(--spacing)*8)}.\32xl\:py-12{padding-block:calc(var(--spacing)*12)}.\32xl\:py-16{padding-block:calc(var(--spacing)*16)}.\32xl\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.\32xl\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.\32xl\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.\32xl\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.\32xl\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\32xl\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.\32xl\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\32xl\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.\32xl\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}.dark .dark\:block{display:block}.dark .dark\:flex{display:flex}.dark .dark\:flex-1{flex:1}.dark .dark\:flex-auto{flex:auto}.dark .dark\:flex-none{flex:none}.dark .dark\:flex-col{flex-direction:column}.dark .dark\:flex-row{flex-direction:row}.dark .dark\:flex-wrap{flex-wrap:wrap}.dark .dark\:items-center{align-items:center}.dark .dark\:items-end{align-items:flex-end}.dark .dark\:items-start{align-items:flex-start}.dark .dark\:items-stretch{align-items:stretch}.dark .dark\:justify-around{justify-content:space-around}.dark .dark\:justify-between{justify-content:space-between}.dark .dark\:justify-center{justify-content:center}.dark .dark\:justify-end{justify-content:flex-end}.dark .dark\:justify-start{justify-content:flex-start}:where(.dark .dark\:divide-gray-50>:not(:last-child)){border-color:var(--color-gray-50)}:where(.dark .dark\:divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.dark .dark\:divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.dark .dark\:divide-gray-300>:not(:last-child)){border-color:var(--color-gray-300)}:where(.dark .dark\:divide-gray-400>:not(:last-child)){border-color:var(--color-gray-400)}:where(.dark .dark\:divide-gray-500>:not(:last-child)){border-color:var(--color-gray-500)}:where(.dark .dark\:divide-gray-600>:not(:last-child)){border-color:var(--color-gray-600)}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}:where(.dark .dark\:divide-gray-800>:not(:last-child)){border-color:var(--color-gray-800)}:where(.dark .dark\:divide-gray-900>:not(:last-child)){border-color:var(--color-gray-900)}.dark .dark\:self-center{align-self:center}.dark .dark\:self-end{align-self:flex-end}.dark .dark\:self-start{align-self:flex-start}.dark .dark\:self-stretch{align-self:stretch}.dark .dark\:overflow-auto{overflow:auto}.dark .dark\:overflow-hidden{overflow:hidden}.dark .dark\:overflow-visible{overflow:visible}.dark .dark\:overflow-x-auto{overflow-x:auto}.dark .dark\:overflow-y-auto{overflow-y:auto}.dark .dark\:rounded{border-radius:.25rem}.dark .dark\:rounded-full{border-radius:3.40282e38px}.dark .dark\:rounded-lg{border-radius:var(--radius-lg)}.dark .dark\:rounded-none{border-radius:0}.dark .dark\:rounded-sm{border-radius:var(--radius-sm)}.dark .dark\:rounded-xl{border-radius:var(--radius-xl)}.dark .dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark .dark\:border-0{border-style:var(--tw-border-style);border-width:0}.dark .dark\:border-dashed{--tw-border-style:dashed;border-style:dashed}.dark .dark\:border-dotted{--tw-border-style:dotted;border-style:dotted}.dark .dark\:border-solid{--tw-border-style:solid;border-style:solid}.dark .dark\:border-black{border-color:var(--color-black)}.dark .dark\:border-blue-50{border-color:var(--color-blue-50)}.dark .dark\:border-blue-100{border-color:var(--color-blue-100)}.dark .dark\:border-blue-200{border-color:var(--color-blue-200)}.dark .dark\:border-blue-300{border-color:var(--color-blue-300)}.dark .dark\:border-blue-400{border-color:var(--color-blue-400)}.dark .dark\:border-blue-500{border-color:var(--color-blue-500)}.dark .dark\:border-blue-600{border-color:var(--color-blue-600)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-blue-900{border-color:var(--color-blue-900)}.dark .dark\:border-gray-50{border-color:var(--color-gray-50)}.dark .dark\:border-gray-100{border-color:var(--color-gray-100)}.dark .dark\:border-gray-200{border-color:var(--color-gray-200)}.dark .dark\:border-gray-300{border-color:var(--color-gray-300)}.dark .dark\:border-gray-400{border-color:var(--color-gray-400)}.dark .dark\:border-gray-500{border-color:var(--color-gray-500)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-gray-700\/50{border-color:#36415380}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-gray-700\/50{border-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.dark .dark\:border-gray-800{border-color:var(--color-gray-800)}.dark .dark\:border-gray-900{border-color:var(--color-gray-900)}.dark .dark\:border-gray-900\/30{border-color:#1018284d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-gray-900\/30{border-color:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.dark .dark\:border-gray-950{border-color:var(--color-gray-950)}.dark .dark\:border-green-600{border-color:var(--color-green-600)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-green-800{border-color:var(--color-green-800)}.dark .dark\:border-orange-600{border-color:var(--color-orange-600)}.dark .dark\:border-orange-800{border-color:var(--color-orange-800)}.dark .dark\:border-red-50{border-color:var(--color-red-50)}.dark .dark\:border-red-100{border-color:var(--color-red-100)}.dark .dark\:border-red-200{border-color:var(--color-red-200)}.dark .dark\:border-red-300{border-color:var(--color-red-300)}.dark .dark\:border-red-400{border-color:var(--color-red-400)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-red-900{border-color:var(--color-red-900)}.dark .dark\:border-red-900\/50{border-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-red-900\/50{border-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:border-slate-50{border-color:var(--color-slate-50)}.dark .dark\:border-slate-100{border-color:var(--color-slate-100)}.dark .dark\:border-slate-200{border-color:var(--color-slate-200)}.dark .dark\:border-slate-300{border-color:var(--color-slate-300)}.dark .dark\:border-slate-400{border-color:var(--color-slate-400)}.dark .dark\:border-slate-500{border-color:var(--color-slate-500)}.dark .dark\:border-slate-600{border-color:var(--color-slate-600)}.dark .dark\:border-slate-700{border-color:var(--color-slate-700)}.dark .dark\:border-slate-800{border-color:var(--color-slate-800)}.dark .dark\:border-slate-900{border-color:var(--color-slate-900)}.dark .dark\:border-slate-950{border-color:var(--color-slate-950)}.dark .dark\:border-transparent{border-color:#0000}.dark .dark\:border-white{border-color:var(--color-white)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:border-t-gray-900{border-top-color:var(--color-gray-900)}.dark .dark\:border-t-white{border-top-color:var(--color-white)}.dark .dark\:bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-amber-900\/30{background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark .dark\:bg-black{background-color:var(--color-black)}.dark .dark\:bg-blue-50{background-color:var(--color-blue-50)}.dark .dark\:bg-blue-100{background-color:var(--color-blue-100)}.dark .dark\:bg-blue-200{background-color:var(--color-blue-200)}.dark .dark\:bg-blue-300{background-color:var(--color-blue-300)}.dark .dark\:bg-blue-400{background-color:var(--color-blue-400)}.dark .dark\:bg-blue-500{background-color:var(--color-blue-500)}.dark .dark\:bg-blue-600{background-color:var(--color-blue-600)}.dark .dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/10{background-color:#1c398e1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}}.dark .dark\:bg-blue-900\/40{background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/40{background-color:color-mix(in oklab,var(--color-blue-900)40%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark .dark\:bg-blue-950\/50{background-color:#16245680}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-950\/50{background-color:color-mix(in oklab,var(--color-blue-950)50%,transparent)}}.dark .dark\:bg-emerald-900{background-color:var(--color-emerald-900)}.dark .dark\:bg-gray-50{background-color:var(--color-gray-50)}.dark .dark\:bg-gray-100{background-color:var(--color-gray-100)}.dark .dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark .dark\:bg-gray-300{background-color:var(--color-gray-300)}.dark .dark\:bg-gray-400{background-color:var(--color-gray-400)}.dark .dark\:bg-gray-500{background-color:var(--color-gray-500)}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-700\/50{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-700\/50{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-800\/80{background-color:#1e2939cc}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/80{background-color:color-mix(in oklab,var(--color-gray-800)80%,transparent)}}.dark .dark\:bg-gray-800\/90{background-color:#1e2939e6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/90{background-color:color-mix(in oklab,var(--color-gray-800)90%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/30{background-color:#1018284d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/30{background-color:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-gray-950{background-color:var(--color-gray-950)}.dark .dark\:bg-green-50{background-color:var(--color-green-50)}.dark .dark\:bg-green-100{background-color:var(--color-green-100)}.dark .dark\:bg-green-200{background-color:var(--color-green-200)}.dark .dark\:bg-green-300{background-color:var(--color-green-300)}.dark .dark\:bg-green-400{background-color:var(--color-green-400)}.dark .dark\:bg-green-500{background-color:var(--color-green-500)}.dark .dark\:bg-green-600{background-color:var(--color-green-600)}.dark .dark\:bg-green-700{background-color:var(--color-green-700)}.dark .dark\:bg-green-800{background-color:var(--color-green-800)}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/20{background-color:#0d542b33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}}.dark .dark\:bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900)30%,transparent)}}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-green-950{background-color:var(--color-green-950)}.dark .dark\:bg-indigo-50{background-color:var(--color-indigo-50)}.dark .dark\:bg-indigo-100{background-color:var(--color-indigo-100)}.dark .dark\:bg-indigo-200{background-color:var(--color-indigo-200)}.dark .dark\:bg-indigo-300{background-color:var(--color-indigo-300)}.dark .dark\:bg-indigo-400{background-color:var(--color-indigo-400)}.dark .dark\:bg-indigo-500{background-color:var(--color-indigo-500)}.dark .dark\:bg-indigo-600{background-color:var(--color-indigo-600)}.dark .dark\:bg-indigo-700{background-color:var(--color-indigo-700)}.dark .dark\:bg-indigo-800{background-color:var(--color-indigo-800)}.dark .dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark .dark\:bg-indigo-900\/30{background-color:#312c854d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-indigo-900\/30{background-color:color-mix(in oklab,var(--color-indigo-900)30%,transparent)}}.dark .dark\:bg-indigo-950{background-color:var(--color-indigo-950)}.dark .dark\:bg-orange-50{background-color:var(--color-orange-50)}.dark .dark\:bg-orange-100{background-color:var(--color-orange-100)}.dark .dark\:bg-orange-200{background-color:var(--color-orange-200)}.dark .dark\:bg-orange-300{background-color:var(--color-orange-300)}.dark .dark\:bg-orange-400{background-color:var(--color-orange-400)}.dark .dark\:bg-orange-500{background-color:var(--color-orange-500)}.dark .dark\:bg-orange-600{background-color:var(--color-orange-600)}.dark .dark\:bg-orange-700{background-color:var(--color-orange-700)}.dark .dark\:bg-orange-800{background-color:var(--color-orange-800)}.dark .dark\:bg-orange-900{background-color:var(--color-orange-900)}.dark .dark\:bg-orange-900\/20{background-color:#7e2a0c33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}}.dark .dark\:bg-orange-900\/30{background-color:#7e2a0c4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}}.dark .dark\:bg-orange-900\/50{background-color:#7e2a0c80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-900\/50{background-color:color-mix(in oklab,var(--color-orange-900)50%,transparent)}}.dark .dark\:bg-orange-950{background-color:var(--color-orange-950)}.dark .dark\:bg-pink-50{background-color:var(--color-pink-50)}.dark .dark\:bg-pink-100{background-color:var(--color-pink-100)}.dark .dark\:bg-pink-200{background-color:var(--color-pink-200)}.dark .dark\:bg-pink-300{background-color:var(--color-pink-300)}.dark .dark\:bg-pink-400{background-color:var(--color-pink-400)}.dark .dark\:bg-pink-500{background-color:var(--color-pink-500)}.dark .dark\:bg-pink-600{background-color:var(--color-pink-600)}.dark .dark\:bg-pink-700{background-color:var(--color-pink-700)}.dark .dark\:bg-pink-800{background-color:var(--color-pink-800)}.dark .dark\:bg-pink-900{background-color:var(--color-pink-900)}.dark .dark\:bg-pink-950{background-color:var(--color-pink-950)}.dark .dark\:bg-primary-900\/30{background-color:#1e3a8a4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-primary-900\/30{background-color:color-mix(in oklab,var(--color-primary-900)30%,transparent)}}.dark .dark\:bg-purple-50{background-color:var(--color-purple-50)}.dark .dark\:bg-purple-100{background-color:var(--color-purple-100)}.dark .dark\:bg-purple-200{background-color:var(--color-purple-200)}.dark .dark\:bg-purple-300{background-color:var(--color-purple-300)}.dark .dark\:bg-purple-400{background-color:var(--color-purple-400)}.dark .dark\:bg-purple-500{background-color:var(--color-purple-500)}.dark .dark\:bg-purple-600{background-color:var(--color-purple-600)}.dark .dark\:bg-purple-700{background-color:var(--color-purple-700)}.dark .dark\:bg-purple-800{background-color:var(--color-purple-800)}.dark .dark\:bg-purple-900{background-color:var(--color-purple-900)}.dark .dark\:bg-purple-900\/30{background-color:#59168b4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}}.dark .dark\:bg-purple-900\/50{background-color:#59168b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-900\/50{background-color:color-mix(in oklab,var(--color-purple-900)50%,transparent)}}.dark .dark\:bg-purple-950{background-color:var(--color-purple-950)}.dark .dark\:bg-red-50{background-color:var(--color-red-50)}.dark .dark\:bg-red-100{background-color:var(--color-red-100)}.dark .dark\:bg-red-200{background-color:var(--color-red-200)}.dark .dark\:bg-red-300{background-color:var(--color-red-300)}.dark .dark\:bg-red-400{background-color:var(--color-red-400)}.dark .dark\:bg-red-500{background-color:var(--color-red-500)}.dark .dark\:bg-red-600{background-color:var(--color-red-600)}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/10{background-color:#82181a1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/30{background-color:color-mix(in oklab,var(--color-red-900)30%,transparent)}}.dark .dark\:bg-red-950{background-color:var(--color-red-950)}.dark .dark\:bg-red-950\/50{background-color:#46080980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-950\/50{background-color:color-mix(in oklab,var(--color-red-950)50%,transparent)}}.dark .dark\:bg-red-950\/80{background-color:#460809cc}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-950\/80{background-color:color-mix(in oklab,var(--color-red-950)80%,transparent)}}.dark .dark\:bg-slate-50{background-color:var(--color-slate-50)}.dark .dark\:bg-slate-100{background-color:var(--color-slate-100)}.dark .dark\:bg-slate-200{background-color:var(--color-slate-200)}.dark .dark\:bg-slate-300{background-color:var(--color-slate-300)}.dark .dark\:bg-slate-400{background-color:var(--color-slate-400)}.dark .dark\:bg-slate-500{background-color:var(--color-slate-500)}.dark .dark\:bg-slate-600{background-color:var(--color-slate-600)}.dark .dark\:bg-slate-700{background-color:var(--color-slate-700)}.dark .dark\:bg-slate-800{background-color:var(--color-slate-800)}.dark .dark\:bg-slate-900{background-color:var(--color-slate-900)}.dark .dark\:bg-slate-950{background-color:var(--color-slate-950)}.dark .dark\:bg-white{background-color:var(--color-white)}.dark .dark\:bg-yellow-50{background-color:var(--color-yellow-50)}.dark .dark\:bg-yellow-100{background-color:var(--color-yellow-100)}.dark .dark\:bg-yellow-200{background-color:var(--color-yellow-200)}.dark .dark\:bg-yellow-300{background-color:var(--color-yellow-300)}.dark .dark\:bg-yellow-400{background-color:var(--color-yellow-400)}.dark .dark\:bg-yellow-500{background-color:var(--color-yellow-500)}.dark .dark\:bg-yellow-600{background-color:var(--color-yellow-600)}.dark .dark\:bg-yellow-700{background-color:var(--color-yellow-700)}.dark .dark\:bg-yellow-800{background-color:var(--color-yellow-800)}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:bg-yellow-900\/30{background-color:#733e0a4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/30{background-color:color-mix(in oklab,var(--color-yellow-900)30%,transparent)}}.dark .dark\:bg-yellow-950{background-color:var(--color-yellow-950)}.dark .dark\:from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-100{--tw-gradient-from:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-200{--tw-gradient-from:var(--color-gray-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-300{--tw-gradient-from:var(--color-gray-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-400{--tw-gradient-from:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-500{--tw-gradient-from:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-600{--tw-gradient-from:var(--color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-700{--tw-gradient-from:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-900{--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-50{--tw-gradient-to:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-100{--tw-gradient-to:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-200{--tw-gradient-to:var(--color-gray-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-300{--tw-gradient-to:var(--color-gray-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-400{--tw-gradient-to:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-500{--tw-gradient-to:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-600{--tw-gradient-to:var(--color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-800{--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-900{--tw-gradient-to:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-center{text-align:center}.dark .dark\:text-justify{text-align:justify}.dark .dark\:text-left{text-align:left}.dark .dark\:text-right{text-align:right}.dark .dark\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.dark .dark\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.dark .dark\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.dark .dark\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.dark .dark\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.dark .dark\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.dark .dark\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.dark .dark\:leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.dark .dark\:leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.dark .dark\:leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.dark .dark\:font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.dark .dark\:font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.dark .dark\:font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.dark .dark\:tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.dark .dark\:tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.dark .dark\:tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.dark .dark\:whitespace-normal{white-space:normal}.dark .dark\:whitespace-nowrap{white-space:nowrap}.dark .dark\:whitespace-pre-wrap{white-space:pre-wrap}.dark .dark\:text-amber-400{color:var(--color-amber-400)}.dark .dark\:text-black{color:var(--color-black)}.dark .dark\:text-blue-50{color:var(--color-blue-50)}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-blue-500{color:var(--color-blue-500)}.dark .dark\:text-blue-600{color:var(--color-blue-600)}.dark .dark\:text-blue-700{color:var(--color-blue-700)}.dark .dark\:text-blue-800{color:var(--color-blue-800)}.dark .dark\:text-blue-900{color:var(--color-blue-900)}.dark .dark\:text-emerald-400{color:var(--color-emerald-400)}.dark .dark\:text-gray-50{color:var(--color-gray-50)}.dark .dark\:text-gray-100{color:var(--color-gray-100)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-gray-500\/80{color:#6a7282cc}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-gray-500\/80{color:color-mix(in oklab,var(--color-gray-500)80%,transparent)}}.dark .dark\:text-gray-600{color:var(--color-gray-600)}.dark .dark\:text-gray-700{color:var(--color-gray-700)}.dark .dark\:text-gray-800{color:var(--color-gray-800)}.dark .dark\:text-gray-900{color:var(--color-gray-900)}.dark .dark\:text-green-50{color:var(--color-green-50)}.dark .dark\:text-green-100{color:var(--color-green-100)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-green-500{color:var(--color-green-500)}.dark .dark\:text-green-600{color:var(--color-green-600)}.dark .dark\:text-green-700{color:var(--color-green-700)}.dark .dark\:text-green-800{color:var(--color-green-800)}.dark .dark\:text-green-900{color:var(--color-green-900)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-50{color:var(--color-orange-50)}.dark .dark\:text-orange-100{color:var(--color-orange-100)}.dark .dark\:text-orange-200{color:var(--color-orange-200)}.dark .dark\:text-orange-300{color:var(--color-orange-300)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-orange-500{color:var(--color-orange-500)}.dark .dark\:text-orange-600{color:var(--color-orange-600)}.dark .dark\:text-orange-700{color:var(--color-orange-700)}.dark .dark\:text-orange-800{color:var(--color-orange-800)}.dark .dark\:text-orange-900{color:var(--color-orange-900)}.dark .dark\:text-pink-50{color:var(--color-pink-50)}.dark .dark\:text-pink-100{color:var(--color-pink-100)}.dark .dark\:text-pink-200{color:var(--color-pink-200)}.dark .dark\:text-pink-300{color:var(--color-pink-300)}.dark .dark\:text-pink-400{color:var(--color-pink-400)}.dark .dark\:text-pink-500{color:var(--color-pink-500)}.dark .dark\:text-pink-600{color:var(--color-pink-600)}.dark .dark\:text-pink-700{color:var(--color-pink-700)}.dark .dark\:text-pink-800{color:var(--color-pink-800)}.dark .dark\:text-pink-900{color:var(--color-pink-900)}.dark .dark\:text-primary-400{color:var(--color-primary-400)}.dark .dark\:text-primary-500{color:var(--color-primary-500)}.dark .dark\:text-purple-50{color:var(--color-purple-50)}.dark .dark\:text-purple-100{color:var(--color-purple-100)}.dark .dark\:text-purple-200{color:var(--color-purple-200)}.dark .dark\:text-purple-300{color:var(--color-purple-300)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-purple-500{color:var(--color-purple-500)}.dark .dark\:text-purple-600{color:var(--color-purple-600)}.dark .dark\:text-purple-700{color:var(--color-purple-700)}.dark .dark\:text-purple-800{color:var(--color-purple-800)}.dark .dark\:text-purple-900{color:var(--color-purple-900)}.dark .dark\:text-red-50{color:var(--color-red-50)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-red-500{color:var(--color-red-500)}.dark .dark\:text-red-600{color:var(--color-red-600)}.dark .dark\:text-red-700{color:var(--color-red-700)}.dark .dark\:text-red-800{color:var(--color-red-800)}.dark .dark\:text-red-900{color:var(--color-red-900)}.dark .dark\:text-slate-50{color:var(--color-slate-50)}.dark .dark\:text-slate-100{color:var(--color-slate-100)}.dark .dark\:text-slate-200{color:var(--color-slate-200)}.dark .dark\:text-slate-300{color:var(--color-slate-300)}.dark .dark\:text-slate-400{color:var(--color-slate-400)}.dark .dark\:text-slate-500{color:var(--color-slate-500)}.dark .dark\:text-slate-600{color:var(--color-slate-600)}.dark .dark\:text-slate-700{color:var(--color-slate-700)}.dark .dark\:text-slate-800{color:var(--color-slate-800)}.dark .dark\:text-slate-900{color:var(--color-slate-900)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-50{color:var(--color-yellow-50)}.dark .dark\:text-yellow-100{color:var(--color-yellow-100)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:text-yellow-500{color:var(--color-yellow-500)}.dark .dark\:text-yellow-600{color:var(--color-yellow-600)}.dark .dark\:text-yellow-700{color:var(--color-yellow-700)}.dark .dark\:text-yellow-800{color:var(--color-yellow-800)}.dark .dark\:text-yellow-900{color:var(--color-yellow-900)}.dark .dark\:italic{font-style:italic}.dark .dark\:underline{text-decoration-line:underline}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:opacity-0{opacity:0}.dark .dark\:opacity-25{opacity:.25}.dark .dark\:opacity-50{opacity:.5}.dark .dark\:opacity-75{opacity:.75}.dark .dark\:opacity-100{opacity:1}.dark .dark\:shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:ring-blue-50{--tw-ring-color:var(--color-blue-50)}.dark .dark\:ring-blue-100{--tw-ring-color:var(--color-blue-100)}.dark .dark\:ring-blue-200{--tw-ring-color:var(--color-blue-200)}.dark .dark\:ring-blue-300{--tw-ring-color:var(--color-blue-300)}.dark .dark\:ring-blue-400{--tw-ring-color:var(--color-blue-400)}.dark .dark\:ring-blue-500{--tw-ring-color:var(--color-blue-500)}.dark .dark\:ring-blue-600{--tw-ring-color:var(--color-blue-600)}.dark .dark\:ring-blue-700{--tw-ring-color:var(--color-blue-700)}.dark .dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark .dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark .dark\:ring-gray-50{--tw-ring-color:var(--color-gray-50)}.dark .dark\:ring-gray-100{--tw-ring-color:var(--color-gray-100)}.dark .dark\:ring-gray-200{--tw-ring-color:var(--color-gray-200)}.dark .dark\:ring-gray-300{--tw-ring-color:var(--color-gray-300)}.dark .dark\:ring-gray-400{--tw-ring-color:var(--color-gray-400)}.dark .dark\:ring-gray-500{--tw-ring-color:var(--color-gray-500)}.dark .dark\:ring-gray-600{--tw-ring-color:var(--color-gray-600)}.dark .dark\:ring-gray-700{--tw-ring-color:var(--color-gray-700)}.dark .dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark .dark\:ring-gray-900{--tw-ring-color:var(--color-gray-900)}.dark .dark\:ring-white{--tw-ring-color:var(--color-white)}.dark .dark\:ring-offset-gray-800{--tw-ring-offset-color:var(--color-gray-800)}@media(hover:hover){.dark .dark\:group-hover\:bg-gray-700:is(:where(.group):hover *){background-color:var(--color-gray-700)}.dark .dark\:group-hover\:bg-gray-800:is(:where(.group):hover *){background-color:var(--color-gray-800)}.dark .dark\:group-hover\:text-blue-400:is(:where(.group):hover *){color:var(--color-blue-400)}.dark .dark\:group-hover\:text-gray-100:is(:where(.group):hover *){color:var(--color-gray-100)}.dark .dark\:group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}}.dark .dark\:selection\:bg-blue-800 ::selection{background-color:var(--color-blue-800)}.dark .dark\:selection\:bg-blue-800::selection{background-color:var(--color-blue-800)}.dark .dark\:selection\:text-blue-100 ::selection{color:var(--color-blue-100)}.dark .dark\:selection\:text-blue-100::selection{color:var(--color-blue-100)}.dark .dark\:odd\:bg-gray-800:nth-child(odd){background-color:var(--color-gray-800)}.dark .dark\:odd\:bg-gray-900:nth-child(odd){background-color:var(--color-gray-900)}.dark .dark\:even\:bg-gray-800:nth-child(2n){background-color:var(--color-gray-800)}.dark .dark\:even\:bg-gray-900:nth-child(2n){background-color:var(--color-gray-900)}@media(hover:hover){.dark .dark\:hover\:border-blue-600:hover{border-color:var(--color-blue-600)}.dark .dark\:hover\:border-blue-700:hover{border-color:var(--color-blue-700)}.dark .dark\:hover\:border-blue-800:hover{border-color:var(--color-blue-800)}.dark .dark\:hover\:border-gray-50:hover{border-color:var(--color-gray-50)}.dark .dark\:hover\:border-gray-100:hover{border-color:var(--color-gray-100)}.dark .dark\:hover\:border-gray-200:hover{border-color:var(--color-gray-200)}.dark .dark\:hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.dark .dark\:hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark .dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark .dark\:hover\:border-gray-800:hover{border-color:var(--color-gray-800)}.dark .dark\:hover\:border-gray-900:hover{border-color:var(--color-gray-900)}.dark .dark\:hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.dark .dark\:hover\:bg-blue-100:hover{background-color:var(--color-blue-100)}.dark .dark\:hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.dark .dark\:hover\:bg-blue-300:hover{background-color:var(--color-blue-300)}.dark .dark\:hover\:bg-blue-400:hover{background-color:var(--color-blue-400)}.dark .dark\:hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.dark .dark\:hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.dark .dark\:hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-blue-900:hover{background-color:var(--color-blue-900)}.dark .dark\:hover\:bg-blue-900\/20:hover{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-blue-900\/20:hover{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:hover\:bg-blue-900\/30:hover{background-color:#1c398e4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-blue-900\/30:hover{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}}.dark .dark\:hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.dark .dark\:hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.dark .dark\:hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.dark .dark\:hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}.dark .dark\:hover\:bg-gray-400:hover{background-color:var(--color-gray-400)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-700\/50:hover{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-gray-700\/50:hover{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-gray-800\/50:hover{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-gray-800\/50:hover{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark .dark\:hover\:bg-indigo-600:hover{background-color:var(--color-indigo-600)}.dark .dark\:hover\:bg-orange-900\/20:hover{background-color:#7e2a0c33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-orange-900\/20:hover{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}}.dark .dark\:hover\:bg-orange-900\/30:hover{background-color:#7e2a0c4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-orange-900\/30:hover{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}}.dark .dark\:hover\:bg-red-600:hover{background-color:var(--color-red-600)}.dark .dark\:hover\:bg-red-900\/20:hover{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-red-900\/20:hover{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.dark .dark\:hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.dark .dark\:hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.dark .dark\:hover\:bg-slate-300:hover{background-color:var(--color-slate-300)}.dark .dark\:hover\:bg-slate-400:hover{background-color:var(--color-slate-400)}.dark .dark\:hover\:bg-slate-500:hover{background-color:var(--color-slate-500)}.dark .dark\:hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.dark .dark\:hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.dark .dark\:hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}.dark .dark\:hover\:bg-slate-900:hover{background-color:var(--color-slate-900)}.dark .dark\:hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark .dark\:hover\:text-black:hover{color:var(--color-black)}.dark .dark\:hover\:text-blue-50:hover{color:var(--color-blue-50)}.dark .dark\:hover\:text-blue-100:hover{color:var(--color-blue-100)}.dark .dark\:hover\:text-blue-200:hover{color:var(--color-blue-200)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-blue-400:hover{color:var(--color-blue-400)}.dark .dark\:hover\:text-blue-500:hover{color:var(--color-blue-500)}.dark .dark\:hover\:text-blue-600:hover{color:var(--color-blue-600)}.dark .dark\:hover\:text-blue-700:hover{color:var(--color-blue-700)}.dark .dark\:hover\:text-blue-800:hover{color:var(--color-blue-800)}.dark .dark\:hover\:text-blue-900:hover{color:var(--color-blue-900)}.dark .dark\:hover\:text-gray-50:hover{color:var(--color-gray-50)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-200:hover{color:var(--color-gray-200)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-gray-400:hover{color:var(--color-gray-400)}.dark .dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark .dark\:hover\:text-gray-600:hover{color:var(--color-gray-600)}.dark .dark\:hover\:text-gray-700:hover{color:var(--color-gray-700)}.dark .dark\:hover\:text-gray-800:hover{color:var(--color-gray-800)}.dark .dark\:hover\:text-gray-900:hover{color:var(--color-gray-900)}.dark .dark\:hover\:text-green-50:hover{color:var(--color-green-50)}.dark .dark\:hover\:text-green-100:hover{color:var(--color-green-100)}.dark .dark\:hover\:text-green-200:hover{color:var(--color-green-200)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-green-400:hover{color:var(--color-green-400)}.dark .dark\:hover\:text-green-500:hover{color:var(--color-green-500)}.dark .dark\:hover\:text-green-600:hover{color:var(--color-green-600)}.dark .dark\:hover\:text-green-700:hover{color:var(--color-green-700)}.dark .dark\:hover\:text-green-800:hover{color:var(--color-green-800)}.dark .dark\:hover\:text-green-900:hover{color:var(--color-green-900)}.dark .dark\:hover\:text-red-50:hover{color:var(--color-red-50)}.dark .dark\:hover\:text-red-100:hover{color:var(--color-red-100)}.dark .dark\:hover\:text-red-200:hover{color:var(--color-red-200)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-red-400:hover{color:var(--color-red-400)}.dark .dark\:hover\:text-red-500:hover{color:var(--color-red-500)}.dark .dark\:hover\:text-red-600:hover{color:var(--color-red-600)}.dark .dark\:hover\:text-red-700:hover{color:var(--color-red-700)}.dark .dark\:hover\:text-red-800:hover{color:var(--color-red-800)}.dark .dark\:hover\:text-red-900:hover{color:var(--color-red-900)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}}.dark .dark\:focus\:border-gray-500:focus{border-color:var(--color-gray-500)}.dark .dark\:focus\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark .dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark .dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark .dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark .dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark .dark\:focus\:text-gray-100:focus{color:var(--color-gray-100)}.dark .dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark .dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark .dark\:focus\:text-white:focus{color:var(--color-white)}.dark .dark\:focus\:ring-amber-600:focus{--tw-ring-color:var(--color-amber-600)}.dark .dark\:focus\:ring-blue-400:focus{--tw-ring-color:var(--color-blue-400)}.dark .dark\:focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.dark .dark\:focus\:ring-blue-600:focus{--tw-ring-color:var(--color-blue-600)}.dark .dark\:focus\:ring-blue-700:focus{--tw-ring-color:var(--color-blue-700)}.dark .dark\:focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.dark .dark\:focus\:ring-gray-600:focus{--tw-ring-color:var(--color-gray-600)}.dark .dark\:focus\:ring-gray-700:focus{--tw-ring-color:var(--color-gray-700)}.dark .dark\:focus\:ring-indigo-400:focus{--tw-ring-color:var(--color-indigo-400)}.dark .dark\:focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.dark .dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}.dark .dark\:active\:bg-gray-200:active{background-color:var(--color-gray-200)}.dark .dark\:active\:bg-gray-600:active{background-color:var(--color-gray-600)}.dark .dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark .dark\:active\:bg-gray-800:active{background-color:var(--color-gray-800)}.dark .dark\:disabled\:bg-gray-700:disabled{background-color:var(--color-gray-700)}.dark .dark\:disabled\:bg-gray-800:disabled{background-color:var(--color-gray-800)}.dark .dark\:disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.dark .dark\:disabled\:text-gray-600:disabled{color:var(--color-gray-600)}.dark .dark\:disabled\:opacity-50:disabled{opacity:.5}.\[\&_img\]\:hidden img{display:none}.\[\&_mark\]\:rounded mark{border-radius:.25rem}.\[\&_mark\]\:bg-yellow-200 mark{background-color:var(--color-yellow-200)}.\[\&_mark\]\:px-0\.5 mark{padding-inline:calc(var(--spacing)*.5)}.dark :is(.\[\&_mark\]\:dark\:bg-yellow-500\/40 mark){background-color:#edb20066}@supports (color:color-mix(in lab,red,red)){.dark :is(.\[\&_mark\]\:dark\:bg-yellow-500\/40 mark){background-color:color-mix(in oklab,var(--color-yellow-500)40%,transparent)}}.\[\&_table\]\:hidden table{display:none}.\[\&_table\]\:w-full table{width:100%}.\[\&_table\]\:border-collapse table{border-collapse:collapse}.\[\&_table\]\:border table{border-style:var(--tw-border-style);border-width:1px}.\[\&_table\]\:border-gray-300 table{border-color:var(--color-gray-300)}.dark .dark\:\[\&_table\]\:border-gray-600 table{border-color:var(--color-gray-600)}.\[\&_td\]\:border td{border-style:var(--tw-border-style);border-width:1px}.\[\&_td\]\:border-gray-300 td{border-color:var(--color-gray-300)}.\[\&_td\]\:px-4 td{padding-inline:calc(var(--spacing)*4)}.\[\&_td\]\:py-2 td{padding-block:calc(var(--spacing)*2)}.dark .dark\:\[\&_td\]\:border-gray-600 td{border-color:var(--color-gray-600)}.\[\&_textarea\]\:\!border-red-500 textarea{border-color:var(--color-red-500)!important}.\[\&_textarea\]\:focus\:\!ring-red-500 textarea:focus{--tw-ring-color:var(--color-red-500)!important}.dark :is(.\[\&_textarea\]\:dark\:\!border-red-500 textarea){border-color:var(--color-red-500)!important}.\[\&_th\]\:border th{border-style:var(--tw-border-style);border-width:1px}.\[\&_th\]\:border-gray-300 th{border-color:var(--color-gray-300)}.\[\&_th\]\:bg-gray-100 th{background-color:var(--color-gray-100)}.\[\&_th\]\:px-4 th{padding-inline:calc(var(--spacing)*4)}.\[\&_th\]\:py-2 th{padding-block:calc(var(--spacing)*2)}.\[\&_th\]\:text-left th{text-align:left}.dark .dark\:\[\&_th\]\:border-gray-600 th{border-color:var(--color-gray-600)}.dark .dark\:\[\&_th\]\:bg-gray-800 th{background-color:var(--color-gray-800)}.\[\&_tr\:hover\]\:bg-gray-50 tr:hover{background-color:var(--color-gray-50)}.dark .dark\:\[\&_tr\:hover\]\:bg-gray-700\/50 tr:hover{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.dark .dark\:\[\&_tr\:hover\]\:bg-gray-700\/50 tr:hover{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button{appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{appearance:none}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.yarl__fullsize{height:100%;width:100%}.yarl__relative{position:relative}.yarl__portal{inset:0;opacity:0;overflow:hidden;position:fixed;transition:opacity var(--yarl__fade_animation_duration,.25s) var(--yarl__fade_animation_timing_function,ease);z-index:var(--yarl__portal_zindex,9999)}.yarl__portal_open{opacity:1}.yarl__container{background-color:var(--yarl__container_background_color,var(--yarl__color_backdrop,#000));inset:0;outline:none;overflow:hidden;overscroll-behavior:var(--yarl__controller_overscroll_behavior,contain);position:absolute;touch-action:var(--yarl__controller_touch_action,none);-webkit-user-select:none;-moz-user-select:none;user-select:none}.yarl__carousel{align-content:center;align-items:stretch;display:flex;flex:0 0 auto;height:100%;justify-content:center;opacity:var(--yarl__pull_opacity,1);transform:translate(var(--yarl__swipe_offset,0),var(--yarl__pull_offset,0));width:calc(100% + (var(--yarl__carousel_slides_count) - 1)*(100% + var(--yarl__carousel_spacing_px, 0)*1px + var(--yarl__carousel_spacing_percent, 0)*1%))}.yarl__carousel_with_slides{-moz-column-gap:calc(var(--yarl__carousel_spacing_px, 0)*1px + 100/(var(--yarl__carousel_slides_count)*100 + (var(--yarl__carousel_slides_count) - 1)*var(--yarl__carousel_spacing_percent, 0))*var(--yarl__carousel_spacing_percent, 0)*1%);column-gap:calc(var(--yarl__carousel_spacing_px, 0)*1px + 100/(var(--yarl__carousel_slides_count)*100 + (var(--yarl__carousel_slides_count) - 1)*var(--yarl__carousel_spacing_percent, 0))*var(--yarl__carousel_spacing_percent, 0)*1%)}.yarl__flex_center{align-content:center;align-items:center;display:flex;justify-content:center}.yarl__slide{flex:1;overflow:hidden;padding:calc(var(--yarl__carousel_padding_px, 0)*1px + 100/(var(--yarl__carousel_slides_count)*100 + (var(--yarl__carousel_slides_count) - 1)*var(--yarl__carousel_spacing_percent, 0))*var(--yarl__carousel_padding_percent, 0)*1%);position:relative}[dir=rtl] .yarl__slide{--yarl__direction:-1}.yarl__slide_image{max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain;touch-action:var(--yarl__controller_touch_action,none);-moz-user-select:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.yarl__slide_image_cover{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.yarl__slide_image_loading{opacity:0}@media screen and (min-width:800px){.yarl__slide_wrapper:not(.yarl__slide_wrapper_interactive) .yarl__slide_image{-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);-webkit-transform-style:preserve-3d}}.yarl__slide_placeholder{left:50%;line-height:0;position:absolute;top:50%;transform:translate(-50%) translateY(-50%)}.yarl__slide_loading{animation:yarl__delayed_fadein 1s linear;color:var(--yarl__slide_icon_loading_color,var(--yarl__color_button,hsla(0,0%,100%,.8)))}.yarl__slide_loading line{animation:yarl__stroke_opacity 1s linear infinite}.yarl__slide_loading line:first-of-type{animation-delay:-1.875s}.yarl__slide_loading line:nth-of-type(2){animation-delay:-1.75s}.yarl__slide_loading line:nth-of-type(3){animation-delay:-1.625s}.yarl__slide_loading line:nth-of-type(4){animation-delay:-1.5s}.yarl__slide_loading line:nth-of-type(5){animation-delay:-1.375s}.yarl__slide_loading line:nth-of-type(6){animation-delay:-1.25s}.yarl__slide_loading line:nth-of-type(7){animation-delay:-1.125s}.yarl__slide_loading line:nth-of-type(8){animation-delay:-1s}.yarl__slide_error{color:var(--yarl__slide_icon_error_color,red);height:var(--yarl__slide_icon_error_size,48px);width:var(--yarl__slide_icon_error_size,48px)}@media(prefers-reduced-motion){.yarl__portal,.yarl__slide{transition:unset}.yarl__slide_loading,.yarl__slide_loading line{animation:unset}}.yarl__toolbar{display:flex;justify-content:flex-end;inset:0 0 auto auto;padding:var(--yarl__toolbar_padding,8px);position:absolute}[dir=rtl] .yarl__toolbar{inset:0 auto auto 0}.yarl__icon{height:var(--yarl__icon_size,32px);width:var(--yarl__icon_size,32px)}.yarl__button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--yarl__button_background_color,transparent);border:var(--yarl__button_border,0);color:var(--yarl__color_button,hsla(0,0%,100%,.8));cursor:pointer;filter:var(--yarl__button_filter,drop-shadow(2px 2px 2px rgba(0,0,0,.8)));line-height:0;margin:var(--yarl__button_margin,0);outline:none;padding:var(--yarl__button_padding,8px);-webkit-tap-highlight-color:transparent}.yarl__button:focus{color:var(--yarl__color_button_active,#fff)}.yarl__button:focus:not(:focus-visible){color:var(--yarl__color_button,hsla(0,0%,100%,.8))}.yarl__button:focus-visible{color:var(--yarl__color_button_active,#fff)}@media(hover:hover){.yarl__button:focus-visible:hover,.yarl__button:focus:hover,.yarl__button:hover{color:var(--yarl__color_button_active,#fff)}}.yarl__button:disabled{color:var(--yarl__color_button_disabled,hsla(0,0%,100%,.4));cursor:default}.yarl__navigation_next,.yarl__navigation_prev{padding:var(--yarl__navigation_button_padding,24px 16px);position:absolute;top:50%;transform:translateY(-50%)}.yarl__navigation_prev{left:0}[dir=rtl] .yarl__navigation_prev{left:unset;right:0;transform:translateY(-50%) rotate(180deg)}.yarl__navigation_next{right:0}[dir=rtl] .yarl__navigation_next{left:0;right:unset;transform:translateY(-50%) rotate(180deg)}.yarl__no_scroll{height:100%;overflow:hidden;overscroll-behavior:none}@keyframes yarl__delayed_fadein{0%{opacity:0}80%{opacity:0}to{opacity:1}}@keyframes yarl__stroke_opacity{0%{stroke-opacity:1}to{stroke-opacity:.125}}.yarl__counter{bottom:var(--yarl__counter_bottom,unset);color:var(--yarl__counter_color,var(--yarl__color_button,hsla(0,0%,100%,.8)));filter:var(--yarl__counter_filter,drop-shadow(2px 2px 2px rgba(0,0,0,.8)));left:var(--yarl__counter_left,0);line-height:var(--yarl__counter_line_height,var(--yarl__icon_size,32px));margin:var(--yarl__counter_margin,var(--yarl__toolbar_padding,8px));padding:var(--yarl__counter_padding,var(--yarl__button_padding,8px));position:var(--yarl__counter_position,absolute);right:var(--yarl__counter_right,unset);top:var(--yarl__counter_top,0);-webkit-user-select:var(--yarl__counter_user_select,none);-moz-user-select:var(--yarl__counter_user_select,none);user-select:var(--yarl__counter_user_select,none)}.yarl__thumbnails{display:flex;height:100%}.yarl__thumbnails_bottom,.yarl__thumbnails_end .yarl__thumbnails_track,.yarl__thumbnails_start .yarl__thumbnails_track,.yarl__thumbnails_top{flex-direction:column}.yarl__thumbnails_wrapper{flex:1;position:relative}.yarl__thumbnails_container{background-color:var(--yarl__thumbnails_container_background_color,var(--yarl__color_backdrop,#000));flex:0 0 auto;overflow:hidden;padding:var(--yarl__thumbnails_container_padding,16px);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-touch-callout:none}.yarl__thumbnails_vignette{pointer-events:none;position:absolute;--yarl__thumbnails_vignette_size:12%}@media(min-width:1200px){.yarl__thumbnails_vignette{--yarl__thumbnails_vignette_size:8%}}@media(min-width:2000px){.yarl__thumbnails_vignette{--yarl__thumbnails_vignette_size:5%}}.yarl__thumbnails_bottom .yarl__thumbnails_vignette,.yarl__thumbnails_top .yarl__thumbnails_vignette{background:linear-gradient(to right,var(--yarl__color_backdrop,#000) 0,transparent var(--yarl__thumbnails_vignette_size,12%) calc(100% - var(--yarl__thumbnails_vignette_size, 12%)),var(--yarl__color_backdrop,#000) 100%);height:100%;left:0;right:0}.yarl__thumbnails_end .yarl__thumbnails_vignette,.yarl__thumbnails_start .yarl__thumbnails_vignette{background:linear-gradient(to bottom,var(--yarl__color_backdrop,#000) 0,transparent var(--yarl__thumbnails_vignette_size,12%) calc(100% - var(--yarl__thumbnails_vignette_size, 12%)),var(--yarl__color_backdrop,#000) 100%);bottom:0;top:0;width:100%}.yarl__thumbnails_track{gap:var(--yarl__thumbnails_thumbnail_gap,16px);outline:none}.yarl__thumbnails_thumbnail{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--yarl__thumbnails_thumbnail_background,#000);border-color:var(--yarl__thumbnails_thumbnail_border_color,var(--yarl__color_button,hsla(0,0%,100%,.8)));border-radius:var(--yarl__thumbnails_thumbnail_border_radius,4px);border-style:var(--yarl__thumbnails_thumbnail_border_style,solid);border-width:var(--yarl__thumbnails_thumbnail_border,1px);cursor:pointer;flex:0 0 auto;-webkit-tap-highlight-color:transparent;box-sizing:content-box;height:var(--yarl__thumbnails_thumbnail_height,80px);outline:none;overflow:hidden;padding:var(--yarl__thumbnails_thumbnail_padding,4px);position:relative;width:var(--yarl__thumbnails_thumbnail_width,120px)}.yarl__thumbnails_thumbnail_active{border-color:var(--yarl__thumbnails_thumbnail_active_border_color,var(--yarl__color_button_active,#fff))}.yarl__thumbnails_thumbnail_fadein{animation:yarl__thumbnails_thumbnail_fadein var(--yarl__thumbnails_thumbnail_fadein_duration,.5s) ease-in-out var(--yarl__thumbnails_thumbnail_fadein_delay,0s) forwards;opacity:0}.yarl__thumbnails_thumbnail_fadeout{animation:yarl__thumbnails_thumbnail_fadeout var(--yarl__thumbnails_thumbnail_fadeout_duration,.5s) ease-in-out var(--yarl__thumbnails_thumbnail_fadeout_delay,0s) forwards;cursor:unset}.yarl__thumbnails_thumbnail_placeholder{cursor:unset;visibility:hidden}.yarl__thumbnails_thumbnail:focus{box-shadow:var(--yarl__thumbnails_thumbnail_focus_box_shadow,#000 0 0 0 2px,var(--yarl__color_button,hsla(0,0%,100%,.8)) 0 0 0 4px)}.yarl__thumbnails_thumbnail:focus:not(:focus-visible){box-shadow:unset}.yarl__thumbnails_thumbnail:focus-visible{box-shadow:var(--yarl__thumbnails_thumbnail_focus_box_shadow,#000 0 0 0 2px,var(--yarl__color_button,hsla(0,0%,100%,.8)) 0 0 0 4px)}.yarl__thumbnails_thumbnail_icon{color:var(--yarl__thumbnails_thumbnail_icon_color,var(--yarl__color_button,hsla(0,0%,100%,.8)));filter:var(--yarl__thumbnails_thumbnail_icon_filter,drop-shadow(2px 2px 2px rgba(0,0,0,.8)));height:var(--yarl__thumbnails_thumbnail_icon_size,32px);left:50%;position:absolute;top:50%;transform:translate(-50%) translateY(-50%);width:var(--yarl__thumbnails_thumbnail_icon_size,32px)}@keyframes yarl__thumbnails_thumbnail_fadein{0%{opacity:0}to{opacity:1}}@keyframes yarl__thumbnails_thumbnail_fadeout{0%{opacity:1}to{opacity:0}} +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-scroll-snap-strictness:proximity;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-yellow-950:oklch(28.6% .066 53.813);--color-lime-50:oklch(98.6% .031 120.757);--color-lime-100:oklch(96.7% .067 122.328);--color-lime-200:oklch(93.8% .127 124.321);--color-lime-300:oklch(89.7% .196 126.665);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-500:oklch(76.8% .233 130.85);--color-lime-600:oklch(64.8% .2 131.684);--color-lime-700:oklch(53.2% .157 131.589);--color-lime-800:oklch(45.3% .124 130.933);--color-lime-900:oklch(40.5% .101 131.063);--color-lime-950:oklch(27.4% .072 132.109);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-200:oklch(91% .096 180.426);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-900:oklch(38.6% .063 188.416);--color-teal-950:oklch(27.7% .046 192.524);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-800:oklch(45% .085 224.283);--color-cyan-900:oklch(39.8% .07 227.392);--color-cyan-950:oklch(30.2% .056 229.695);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-800:oklch(39.8% .195 277.366);--color-indigo-900:oklch(35.9% .144 278.697);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-900:oklch(38% .189 293.745);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-100:oklch(95.2% .037 318.852);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-fuchsia-800:oklch(45.2% .211 324.591);--color-fuchsia-900:oklch(40.1% .17 325.612);--color-fuchsia-950:oklch(29.3% .136 325.661);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-200:oklch(89.9% .061 343.231);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-500:oklch(65.6% .241 354.308);--color-pink-600:oklch(59.2% .249 .584);--color-pink-700:oklch(52.5% .223 3.958);--color-pink-800:oklch(45.9% .187 3.815);--color-pink-900:oklch(40.8% .153 2.432);--color-pink-950:oklch(28.4% .109 3.907);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-100:oklch(97% .001 106.424);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-stone-950:oklch(14.7% .004 49.25);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-2xs:18rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-sm:0 1px 2px #00000026;--drop-shadow-md:0 3px 3px #0000001f;--drop-shadow-lg:0 4px 4px #00000026;--drop-shadow-xl:0 9px 7px #0000001a;--drop-shadow-2xl:0 25px 25px #00000026;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--blur-2xl:40px;--blur-3xl:64px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-50:#eff6ff;--color-primary-100:#dbeafe;--color-primary-400:#60a5fa;--color-primary-500:#3b82f6;--color-primary-600:#2563eb;--color-primary-700:#1d4ed8;--color-primary-900:#1e3a8a}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--background:255 255 255;--foreground:17 24 39}.dark{--background:17 24 39;--foreground:255 255 255}html{scroll-behavior:smooth}body{background-color:var(--color-white);color:var(--color-gray-900)}.dark :is(body){background-color:var(--color-gray-900);color:var(--color-white)}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}a{color:var(--color-blue-600)}@media(hover:hover){a:hover{color:var(--color-blue-700)}}.dark :is(a){color:var(--color-blue-400)}@media(hover:hover){.dark :is(a):hover{color:var(--color-blue-300)}}a{text-decoration:none}:focus-visible{outline-style:var(--tw-outline-style);outline-offset:2px;outline-width:2px;outline-color:var(--color-blue-500)}}@layer components{.flex-between{justify-content:space-between;align-items:center;display:flex}.btn{border-radius:var(--radius-lg);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));justify-content:center;align-items:center;display:inline-flex}.btn:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-primary{background-color:var(--color-blue-600);color:var(--color-white)}@media(hover:hover){.btn-primary:hover{background-color:var(--color-blue-700)}}.btn-primary:focus{--tw-ring-color:var(--color-blue-500)}.dark .btn-primary{background-color:var(--color-blue-500)}@media(hover:hover){.dark .btn-primary:hover{background-color:var(--color-blue-600)}}.dark .btn-primary:focus{--tw-ring-color:var(--color-blue-400)}.btn-secondary{background-color:var(--color-gray-100);color:var(--color-gray-900)}@media(hover:hover){.btn-secondary:hover{background-color:var(--color-gray-200)}}.btn-secondary:focus{--tw-ring-color:var(--color-gray-500)}.dark .btn-secondary{background-color:var(--color-gray-700);color:var(--color-white)}@media(hover:hover){.dark .btn-secondary:hover{background-color:var(--color-gray-600)}}.dark .btn-secondary:focus{--tw-ring-color:var(--color-gray-400)}.btn-ghost{color:var(--color-gray-700);background-color:#0000}@media(hover:hover){.btn-ghost:hover{background-color:var(--color-gray-100)}}.btn-ghost:focus{--tw-ring-color:var(--color-gray-500)}.dark .btn-ghost{color:var(--color-gray-300)}@media(hover:hover){.dark .btn-ghost:hover{background-color:var(--color-gray-800)}}.dark .btn-ghost:focus{--tw-ring-color:var(--color-gray-400)}.btn-danger{background-color:var(--color-red-600);color:var(--color-white)}@media(hover:hover){.btn-danger:hover{background-color:var(--color-red-700)}}.btn-danger:focus{--tw-ring-color:var(--color-red-500)}.dark .btn-danger{background-color:var(--color-red-500)}@media(hover:hover){.dark .btn-danger:hover{background-color:var(--color-red-600)}}.dark .btn-danger:focus{--tw-ring-color:var(--color-red-400)}.input{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-300);width:100%;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);background-color:var(--color-white);color:var(--color-gray-900)}.input:focus{border-color:var(--color-blue-500);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-blue-500)}.dark .input{border-color:var(--color-gray-600);background-color:var(--color-gray-800);color:var(--color-white)}.input::placeholder{color:var(--color-gray-400)}.dark .input::placeholder{color:var(--color-gray-500)}.input-error{border-color:var(--color-red-500)}.input-error:focus{border-color:var(--color-red-500);--tw-ring-color:var(--color-red-500)}.card{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-200);background-color:var(--color-white);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .card{border-color:var(--color-gray-700);background-color:var(--color-gray-800)}.badge{padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);border-radius:3.40282e38px;align-items:center;display:inline-flex}.badge-primary{background-color:var(--color-blue-100);color:var(--color-blue-800)}.dark .badge-primary{background-color:var(--color-blue-900);color:var(--color-blue-200)}.badge-success{background-color:var(--color-green-100);color:var(--color-green-800)}.dark .badge-success{background-color:var(--color-green-900);color:var(--color-green-200)}.badge-warning{background-color:var(--color-yellow-100);color:var(--color-yellow-800)}.dark .badge-warning{background-color:var(--color-yellow-900);color:var(--color-yellow-200)}.badge-danger{background-color:var(--color-red-100);color:var(--color-red-800)}.dark .badge-danger{background-color:var(--color-red-900);color:var(--color-red-200)}}@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-1{inset:calc(var(--spacing)*1)}.inset-2{inset:calc(var(--spacing)*2)}.inset-3{inset:calc(var(--spacing)*3)}.inset-4{inset:calc(var(--spacing)*4)}.inset-5{inset:calc(var(--spacing)*5)}.inset-6{inset:calc(var(--spacing)*6)}.inset-8{inset:calc(var(--spacing)*8)}.inset-auto{inset:auto}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-1{inset-inline:calc(var(--spacing)*1)}.inset-x-2{inset-inline:calc(var(--spacing)*2)}.inset-x-3{inset-inline:calc(var(--spacing)*3)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.inset-x-auto{inset-inline:auto}.inset-y-0{inset-block:calc(var(--spacing)*0)}.inset-y-1{inset-block:calc(var(--spacing)*1)}.inset-y-2{inset-block:calc(var(--spacing)*2)}.inset-y-3{inset-block:calc(var(--spacing)*3)}.inset-y-4{inset-block:calc(var(--spacing)*4)}.inset-y-auto{inset-block:auto}.-top-1{top:calc(var(--spacing)*-1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-3{top:calc(var(--spacing)*-3)}.-top-4{top:calc(var(--spacing)*-4)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-1\/3{top:33.3333%}.top-1\/4{top:25%}.top-2{top:calc(var(--spacing)*2)}.top-2\/3{top:66.6667%}.top-3{top:calc(var(--spacing)*3)}.top-3\/4{top:75%}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-6{top:calc(var(--spacing)*6)}.top-8{top:calc(var(--spacing)*8)}.top-10{top:calc(var(--spacing)*10)}.top-12{top:calc(var(--spacing)*12)}.top-16{top:calc(var(--spacing)*16)}.top-24{top:calc(var(--spacing)*24)}.top-auto{top:auto}.top-full{top:100%}.-right-1{right:calc(var(--spacing)*-1)}.-right-2{right:calc(var(--spacing)*-2)}.-right-3{right:calc(var(--spacing)*-3)}.-right-4{right:calc(var(--spacing)*-4)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/2{right:50%}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-5{right:calc(var(--spacing)*5)}.right-6{right:calc(var(--spacing)*6)}.right-8{right:calc(var(--spacing)*8)}.right-10{right:calc(var(--spacing)*10)}.right-12{right:calc(var(--spacing)*12)}.right-16{right:calc(var(--spacing)*16)}.right-auto{right:auto}.right-full{right:100%}.-bottom-1{bottom:calc(var(--spacing)*-1)}.-bottom-2{bottom:calc(var(--spacing)*-2)}.-bottom-3{bottom:calc(var(--spacing)*-3)}.-bottom-4{bottom:calc(var(--spacing)*-4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-1\/2{bottom:50%}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-5{bottom:calc(var(--spacing)*5)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.bottom-10{bottom:calc(var(--spacing)*10)}.bottom-12{bottom:calc(var(--spacing)*12)}.bottom-16{bottom:calc(var(--spacing)*16)}.bottom-auto{bottom:auto}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing)*-1)}.-left-2{left:calc(var(--spacing)*-2)}.-left-3{left:calc(var(--spacing)*-3)}.-left-4{left:calc(var(--spacing)*-4)}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\.5{left:calc(var(--spacing)*1.5)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-8{left:calc(var(--spacing)*8)}.left-10{left:calc(var(--spacing)*10)}.left-12{left:calc(var(--spacing)*12)}.left-16{left:calc(var(--spacing)*16)}.left-auto{left:auto}.left-full{left:100%}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.z-auto{z-index:auto}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-first{order:-9999}.order-last{order:9999}.order-none{order:0}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-4{grid-column-start:4}.col-start-5{grid-column-start:5}.col-start-6{grid-column-start:6}.col-start-7{grid-column-start:7}.col-start-8{grid-column-start:8}.col-start-9{grid-column-start:9}.col-start-10{grid-column-start:10}.col-start-11{grid-column-start:11}.col-start-12{grid-column-start:12}.col-start-13{grid-column-start:13}.col-end-1{grid-column-end:1}.col-end-2{grid-column-end:2}.col-end-3{grid-column-end:3}.col-end-4{grid-column-end:4}.col-end-5{grid-column-end:5}.col-end-6{grid-column-end:6}.col-end-7{grid-column-end:7}.col-end-8{grid-column-end:8}.col-end-9{grid-column-end:9}.col-end-10{grid-column-end:10}.col-end-11{grid-column-end:11}.col-end-12{grid-column-end:12}.col-end-13{grid-column-end:13}.row-span-1{grid-row:span 1/span 1}.row-span-2{grid-row:span 2/span 2}.row-span-3{grid-row:span 3/span 3}.row-span-4{grid-row:span 4/span 4}.row-span-5{grid-row:span 5/span 5}.row-span-6{grid-row:span 6/span 6}.row-span-full{grid-row:1/-1}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.row-start-4{grid-row-start:4}.row-start-5{grid-row-start:5}.row-start-6{grid-row-start:6}.row-start-7{grid-row-start:7}.row-end-1{grid-row-end:1}.row-end-2{grid-row-end:2}.row-end-3{grid-row-end:3}.row-end-4{grid-row-end:4}.row-end-5{grid-row-end:5}.row-end-6{grid-row-end:6}.row-end-7{grid-row-end:7}.float-end{float:inline-end}.float-left{float:left}.float-none{float:none}.float-right{float:right}.float-start{float:inline-start}.clear-both{clear:both}.clear-end{clear:inline-end}.clear-left{clear:left}.clear-none{clear:none}.clear-right{clear:right}.clear-start{clear:inline-start}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-m-1{margin:calc(var(--spacing)*-1)}.-m-2{margin:calc(var(--spacing)*-2)}.-m-3{margin:calc(var(--spacing)*-3)}.-m-4{margin:calc(var(--spacing)*-4)}.-m-5{margin:calc(var(--spacing)*-5)}.-m-6{margin:calc(var(--spacing)*-6)}.-m-8{margin:calc(var(--spacing)*-8)}.m-0{margin:calc(var(--spacing)*0)}.m-1{margin:calc(var(--spacing)*1)}.m-2{margin:calc(var(--spacing)*2)}.m-3{margin:calc(var(--spacing)*3)}.m-4{margin:calc(var(--spacing)*4)}.m-5{margin:calc(var(--spacing)*5)}.m-6{margin:calc(var(--spacing)*6)}.m-8{margin:calc(var(--spacing)*8)}.m-10{margin:calc(var(--spacing)*10)}.m-12{margin:calc(var(--spacing)*12)}.m-16{margin:calc(var(--spacing)*16)}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.-mx-3{margin-inline:calc(var(--spacing)*-3)}.-mx-4{margin-inline:calc(var(--spacing)*-4)}.-mx-5{margin-inline:calc(var(--spacing)*-5)}.-mx-6{margin-inline:calc(var(--spacing)*-6)}.-mx-8{margin-inline:calc(var(--spacing)*-8)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-5{margin-inline:calc(var(--spacing)*5)}.mx-6{margin-inline:calc(var(--spacing)*6)}.mx-8{margin-inline:calc(var(--spacing)*8)}.mx-10{margin-inline:calc(var(--spacing)*10)}.mx-12{margin-inline:calc(var(--spacing)*12)}.mx-16{margin-inline:calc(var(--spacing)*16)}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.-my-2{margin-block:calc(var(--spacing)*-2)}.-my-3{margin-block:calc(var(--spacing)*-3)}.-my-4{margin-block:calc(var(--spacing)*-4)}.-my-5{margin-block:calc(var(--spacing)*-5)}.-my-6{margin-block:calc(var(--spacing)*-6)}.-my-8{margin-block:calc(var(--spacing)*-8)}.my-0{margin-block:calc(var(--spacing)*0)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.my-5{margin-block:calc(var(--spacing)*5)}.my-6{margin-block:calc(var(--spacing)*6)}.my-8{margin-block:calc(var(--spacing)*8)}.my-10{margin-block:calc(var(--spacing)*10)}.my-12{margin-block:calc(var(--spacing)*12)}.my-16{margin-block:calc(var(--spacing)*16)}.my-auto{margin-block:auto}.-mt-1{margin-top:calc(var(--spacing)*-1)}.-mt-2{margin-top:calc(var(--spacing)*-2)}.-mt-3{margin-top:calc(var(--spacing)*-3)}.-mt-4{margin-top:calc(var(--spacing)*-4)}.-mt-5{margin-top:calc(var(--spacing)*-5)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-8{margin-top:calc(var(--spacing)*-8)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-10{margin-top:calc(var(--spacing)*10)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-auto{margin-top:auto}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-2{margin-right:calc(var(--spacing)*-2)}.-mr-3{margin-right:calc(var(--spacing)*-3)}.-mr-4{margin-right:calc(var(--spacing)*-4)}.-mr-5{margin-right:calc(var(--spacing)*-5)}.-mr-6{margin-right:calc(var(--spacing)*-6)}.-mr-8{margin-right:calc(var(--spacing)*-8)}.mr-0{margin-right:calc(var(--spacing)*0)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-5{margin-right:calc(var(--spacing)*5)}.mr-6{margin-right:calc(var(--spacing)*6)}.mr-8{margin-right:calc(var(--spacing)*8)}.mr-10{margin-right:calc(var(--spacing)*10)}.mr-12{margin-right:calc(var(--spacing)*12)}.mr-16{margin-right:calc(var(--spacing)*16)}.mr-auto{margin-right:auto}.-mb-1{margin-bottom:calc(var(--spacing)*-1)}.-mb-2{margin-bottom:calc(var(--spacing)*-2)}.-mb-3{margin-bottom:calc(var(--spacing)*-3)}.-mb-4{margin-bottom:calc(var(--spacing)*-4)}.-mb-5{margin-bottom:calc(var(--spacing)*-5)}.-mb-6{margin-bottom:calc(var(--spacing)*-6)}.-mb-8{margin-bottom:calc(var(--spacing)*-8)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.mb-auto{margin-bottom:auto}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-3{margin-left:calc(var(--spacing)*-3)}.-ml-4{margin-left:calc(var(--spacing)*-4)}.-ml-5{margin-left:calc(var(--spacing)*-5)}.-ml-6{margin-left:calc(var(--spacing)*-6)}.-ml-8{margin-left:calc(var(--spacing)*-8)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-10{margin-left:calc(var(--spacing)*10)}.ml-12{margin-left:calc(var(--spacing)*12)}.ml-14{margin-left:calc(var(--spacing)*14)}.ml-16{margin-left:calc(var(--spacing)*16)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-auto{aspect-ratio:auto}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.h-0{height:calc(var(--spacing)*0)}.h-1{height:calc(var(--spacing)*1)}.h-1\/2{height:50%}.h-1\/3{height:33.3333%}.h-1\/4{height:25%}.h-1\/5{height:20%}.h-1\/6{height:16.6667%}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-2\/3{height:66.6667%}.h-2\/4{height:50%}.h-2\/5{height:40%}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-3\/4{height:75%}.h-3\/5{height:60%}.h-4{height:calc(var(--spacing)*4)}.h-4\/5{height:80%}.h-5{height:calc(var(--spacing)*5)}.h-5\/6{height:83.3333%}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-56{height:calc(var(--spacing)*56)}.h-64{height:calc(var(--spacing)*64)}.h-72{height:calc(var(--spacing)*72)}.h-80{height:calc(var(--spacing)*80)}.h-96{height:calc(var(--spacing)*96)}.h-\[42px\]{height:42px}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.h-max{height:max-content}.h-min{height:min-content}.h-px{height:1px}.h-screen{height:100vh}.max-h-0{max-height:calc(var(--spacing)*0)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[55vh\]{max-height:55vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[75vh\]{max-height:75vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(90vh-140px\)\]{max-height:calc(90vh - 140px)}.max-h-\[calc\(100vh-200px\)\]{max-height:calc(100vh - 200px)}.max-h-fit{max-height:fit-content}.max-h-full{max-height:100%}.max-h-max{max-height:max-content}.max-h-min{max-height:min-content}.max-h-none{max-height:none}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-20{min-height:calc(var(--spacing)*20)}.min-h-\[40px\]{min-height:40px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80px\]{min-height:80px}.min-h-\[200px\]{min-height:200px}.min-h-\[400px\]{min-height:400px}.min-h-fit{min-height:fit-content}.min-h-full{min-height:100%}.min-h-max{min-height:max-content}.min-h-min{min-height:min-content}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\/2{width:50%}.w-1\/3{width:33.3333%}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-1\/6{width:16.6667%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-2\/3{width:66.6667%}.w-2\/4{width:50%}.w-2\/5{width:40%}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-4{width:calc(var(--spacing)*4)}.w-4\/5{width:80%}.w-5{width:calc(var(--spacing)*5)}.w-5\/6{width:83.3333%}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-52{width:calc(var(--spacing)*52)}.w-56{width:calc(var(--spacing)*56)}.w-60{width:calc(var(--spacing)*60)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-96{width:calc(var(--spacing)*96)}.w-\[220px\]{width:220px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-min{width:min-content}.w-px{width:1px}.w-screen{width:100vw}.max-w-0{max-width:calc(var(--spacing)*0)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[60\%\]{max-width:60%}.max-w-\[85vw\]{max-width:85vw}.max-w-\[calc\(100vw-1rem\)\]{max-width:calc(100vw - 1rem)}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-fit{max-width:fit-content}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-max{max-width:max-content}.max-w-md{max-width:var(--container-md)}.max-w-min{max-width:min-content}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-screen-2xl{max-width:var(--breakpoint-2xl)}.max-w-screen-lg{max-width:var(--breakpoint-lg)}.max-w-screen-md{max-width:var(--breakpoint-md)}.max-w-screen-sm{max-width:var(--breakpoint-sm)}.max-w-screen-xl{max-width:var(--breakpoint-xl)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-24{min-width:calc(var(--spacing)*24)}.min-w-\[100px\]{min-width:100px}.min-w-\[120px\]{min-width:120px}.min-w-\[300px\]{min-width:300px}.min-w-fit{min-width:fit-content}.min-w-full{min-width:100%}.min-w-max{min-width:max-content}.min-w-min{min-width:min-content}.flex-1{flex:1}.flex-auto{flex:auto}.flex-initial{flex:0 auto}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-0{flex-basis:calc(var(--spacing)*0)}.basis-1{flex-basis:calc(var(--spacing)*1)}.basis-1\/2{flex-basis:50%}.basis-1\/3{flex-basis:33.3333%}.basis-1\/4{flex-basis:25%}.basis-2{flex-basis:calc(var(--spacing)*2)}.basis-2\/3{flex-basis:66.6667%}.basis-3\/4{flex-basis:75%}.basis-auto{flex-basis:auto}.basis-full{flex-basis:100%}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.caption-top{caption-side:top}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-1{--tw-border-spacing-x:calc(var(--spacing)*1);--tw-border-spacing-y:calc(var(--spacing)*1);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-2{--tw-border-spacing-x:calc(var(--spacing)*2);--tw-border-spacing-y:calc(var(--spacing)*2);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-3{--tw-border-spacing-x:calc(var(--spacing)*3);--tw-border-spacing-y:calc(var(--spacing)*3);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-4{--tw-border-spacing-x:calc(var(--spacing)*4);--tw-border-spacing-y:calc(var(--spacing)*4);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-5{--tw-border-spacing-x:calc(var(--spacing)*5);--tw-border-spacing-y:calc(var(--spacing)*5);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-6{--tw-border-spacing-x:calc(var(--spacing)*6);--tw-border-spacing-y:calc(var(--spacing)*6);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.border-spacing-8{--tw-border-spacing-x:calc(var(--spacing)*8);--tw-border-spacing-y:calc(var(--spacing)*8);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.origin-bottom{transform-origin:bottom}.origin-bottom-left{transform-origin:0 100%}.origin-bottom-right{transform-origin:100% 100%}.origin-center{transform-origin:50%}.origin-left{transform-origin:0}.origin-right{transform-origin:100%}.origin-top{transform-origin:top}.origin-top-left{transform-origin:0 0}.origin-top-right{transform-origin:100% 0}.-translate-x-1{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-2{--tw-translate-x:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-3{--tw-translate-x:calc(var(--spacing)*-3);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-4{--tw-translate-x:calc(var(--spacing)*-4);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1\/2{--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1\/3{--tw-translate-x:calc(1/3*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1\/4{--tw-translate-x: 25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-2{--tw-translate-x:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-2\/3{--tw-translate-x:calc(2/3*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-3{--tw-translate-x:calc(var(--spacing)*3);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-3\/4{--tw-translate-x: 75% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-6{--tw-translate-x:calc(var(--spacing)*6);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-8{--tw-translate-x:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-10{--tw-translate-x:calc(var(--spacing)*10);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-2{--tw-translate-y:calc(var(--spacing)*-2);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-3{--tw-translate-y:calc(var(--spacing)*-3);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-4{--tw-translate-y:calc(var(--spacing)*-4);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-1{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-1\/2{--tw-translate-y: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-1\/3{--tw-translate-y:calc(1/3*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-1\/4{--tw-translate-y: 25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-2\/3{--tw-translate-y:calc(2/3*100%);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-3{--tw-translate-y:calc(var(--spacing)*3);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-3\/4{--tw-translate-y: 75% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-5{--tw-translate-y:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-6{--tw-translate-y:calc(var(--spacing)*6);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-8{--tw-translate-y:calc(var(--spacing)*8);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-10{--tw-translate-y:calc(var(--spacing)*10);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-12{--tw-translate-y:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-full{--tw-translate-y:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-50{--tw-scale-x:50%;--tw-scale-y:50%;--tw-scale-z:50%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-90{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-105{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-150{--tw-scale-x:150%;--tw-scale-y:150%;--tw-scale-z:150%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-0{--tw-scale-x:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-50{--tw-scale-x:50%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-75{--tw-scale-x:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-90{--tw-scale-x:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-95{--tw-scale-x:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-100{--tw-scale-x:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-105{--tw-scale-x:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-110{--tw-scale-x:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-125{--tw-scale-x:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-x-150{--tw-scale-x:150%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-0{--tw-scale-y:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-50{--tw-scale-y:50%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-75{--tw-scale-y:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-90{--tw-scale-y:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-95{--tw-scale-y:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-100{--tw-scale-y:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-105{--tw-scale-y:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-110{--tw-scale-y:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-125{--tw-scale-y:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-y-150{--tw-scale-y:150%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-1{rotate:-1deg}.-rotate-2{rotate:-2deg}.-rotate-3{rotate:-3deg}.-rotate-6{rotate:-6deg}.-rotate-12{rotate:-12deg}.-rotate-45{rotate:-45deg}.-rotate-90{rotate:-90deg}.-rotate-180{rotate:-180deg}.rotate-0{rotate:none}.rotate-1{rotate:1deg}.rotate-2{rotate:2deg}.rotate-3{rotate:3deg}.rotate-6{rotate:6deg}.rotate-12{rotate:12deg}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.-skew-x-1{--tw-skew-x:skewX( -1deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-x-2{--tw-skew-x:skewX( -2deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-x-3{--tw-skew-x:skewX( -3deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-x-6{--tw-skew-x:skewX( -6deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-x-12{--tw-skew-x:skewX( -12deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-0{--tw-skew-x:skewX(0deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-1{--tw-skew-x:skewX(1deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-2{--tw-skew-x:skewX(2deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-3{--tw-skew-x:skewX(3deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-6{--tw-skew-x:skewX(6deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-x-12{--tw-skew-x:skewX(12deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-1{--tw-skew-y:skewY( -1deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-2{--tw-skew-y:skewY( -2deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-3{--tw-skew-y:skewY( -3deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-6{--tw-skew-y:skewY( -6deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.-skew-y-12{--tw-skew-y:skewY( -12deg );transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-0{--tw-skew-y:skewY(0deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-1{--tw-skew-y:skewY(1deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-2{--tw-skew-y:skewY(2deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-3{--tw-skew-y:skewY(3deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-6{--tw-skew-y:skewY(6deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.skew-y-12{--tw-skew-y:skewY(12deg);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform,.transform-cpu{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform-gpu{transform:translateZ(0)var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.transform-none{transform:none}.animate-\[loading_1\.5s_ease-in-out_infinite\]{animation:1.5s ease-in-out infinite loading}.animate-bounce{animation:var(--animate-bounce)}.animate-none{animation:none}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-alias{cursor:alias}.cursor-all-scroll{cursor:all-scroll}.cursor-auto{cursor:auto}.cursor-cell{cursor:cell}.cursor-col-resize{cursor:col-resize}.cursor-context-menu{cursor:context-menu}.cursor-copy{cursor:copy}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-e-resize{cursor:e-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-help{cursor:help}.cursor-move{cursor:move}.cursor-n-resize{cursor:n-resize}.cursor-ne-resize{cursor:ne-resize}.cursor-nesw-resize{cursor:nesw-resize}.cursor-no-drop{cursor:no-drop}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-ns-resize{cursor:ns-resize}.cursor-nw-resize{cursor:nw-resize}.cursor-nwse-resize{cursor:nwse-resize}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-row-resize{cursor:row-resize}.cursor-s-resize{cursor:s-resize}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.cursor-text{cursor:text}.cursor-vertical-text{cursor:vertical-text}.cursor-w-resize{cursor:w-resize}.cursor-wait{cursor:wait}.cursor-zoom-in{cursor:zoom-in}.cursor-zoom-out{cursor:zoom-out}.touch-pan-left{--tw-pan-x:pan-left;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-right{--tw-pan-x:pan-right;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-x{--tw-pan-x:pan-x;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-down{--tw-pan-y:pan-down;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-up{--tw-pan-y:pan-up;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-auto{touch-action:auto}.touch-manipulation{touch-action:manipulation}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-x{resize:horizontal}.resize-y{resize:vertical}.snap-both{scroll-snap-type:both var(--tw-scroll-snap-strictness)}.snap-none{scroll-snap-type:none}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-y{scroll-snap-type:y var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-proximity{--tw-scroll-snap-strictness:proximity}.snap-align-none{scroll-snap-align:none}.snap-center{scroll-snap-align:center}.snap-end{scroll-snap-align:end}.snap-start{scroll-snap-align:start}.snap-always{scroll-snap-stop:always}.snap-normal{scroll-snap-stop:normal}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.\[appearance\:textfield\]{appearance:textfield}.appearance-auto{appearance:auto}.appearance-none{appearance:none}.columns-1{columns:1}.columns-2{columns:2}.columns-2xl{columns:var(--container-2xl)}.columns-2xs{columns:var(--container-2xs)}.columns-3{columns:3}.columns-3xl{columns:var(--container-3xl)}.columns-3xs{columns:var(--container-3xs)}.columns-4{columns:4}.columns-4xl{columns:var(--container-4xl)}.columns-5{columns:5}.columns-5xl{columns:var(--container-5xl)}.columns-6{columns:6}.columns-6xl{columns:var(--container-6xl)}.columns-7{columns:7}.columns-7xl{columns:var(--container-7xl)}.columns-8{columns:8}.columns-9{columns:9}.columns-10{columns:10}.columns-11{columns:11}.columns-12{columns:12}.columns-auto{columns:auto}.columns-lg{columns:var(--container-lg)}.columns-md{columns:var(--container-md)}.columns-sm{columns:var(--container-sm)}.columns-xl{columns:var(--container-xl)}.columns-xs{columns:var(--container-xs)}.break-before-all{break-before:all}.break-before-auto{break-before:auto}.break-before-avoid{break-before:avoid}.break-before-avoid-page{break-before:avoid-page}.break-before-column{break-before:column}.break-before-left{break-before:left}.break-before-page{break-before:page}.break-before-right{break-before:right}.break-inside-auto{break-inside:auto}.break-inside-avoid{break-inside:avoid}.break-inside-avoid-column{break-inside:avoid-column}.break-inside-avoid-page{break-inside:avoid-page}.break-after-all{break-after:all}.break-after-auto{break-after:auto}.break-after-avoid{break-after:avoid}.break-after-avoid-page{break-after:avoid-page}.break-after-column{break-after:column}.break-after-left{break-after:left}.break-after-page{break-after:page}.break-after-right{break-after:right}.auto-cols-\[calc\(25\%_-_12px\)\]{grid-auto-columns:calc(25% - 12px)}.auto-cols-\[calc\(33\.333\%_-_11px\)\]{grid-auto-columns:calc(33.333% - 11px)}.auto-cols-\[calc\(50\%_-_8px\)\]{grid-auto-columns:calc(50% - 8px)}.auto-cols-auto{grid-auto-columns:auto}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.auto-cols-max{grid-auto-columns:max-content}.auto-cols-min{grid-auto-columns:min-content}.grid-flow-col{grid-auto-flow:column}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-flow-dense{grid-auto-flow:dense}.grid-flow-row{grid-auto-flow:row}.grid-flow-row-dense{grid-auto-flow:dense}.auto-rows-auto{grid-auto-rows:auto}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.auto-rows-max{grid-auto-rows:max-content}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-\[\.\.\.\]{grid-template-columns:...}.grid-cols-\[60px_1fr\]{grid-template-columns:60px 1fr}.grid-cols-\[60px_1fr_160px\]{grid-template-columns:60px 1fr 160px}.grid-cols-\[60px_minmax\(300px\,1fr\)_160px\]{grid-template-columns:60px minmax(300px,1fr) 160px}.grid-cols-\[60px_minmax\(300px\,1fr\)_160px_100px\]{grid-template-columns:60px minmax(300px,1fr) 160px 100px}.grid-cols-\[60px_minmax\(300px\,1fr\)_160px_100px_70px\]{grid-template-columns:60px minmax(300px,1fr) 160px 100px 70px}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.place-content-around{place-content:space-around}.place-content-baseline{place-content:baseline start}.place-content-between{place-content:space-between}.place-content-center{place-content:center}.place-content-end{place-content:end}.place-content-evenly{place-content:space-evenly}.place-content-start{place-content:start}.place-content-stretch{place-content:stretch}.place-items-baseline{place-items:baseline}.place-items-center{place-items:center}.place-items-end{place-items:end}.place-items-start{place-items:start}.place-items-stretch{place-items:stretch stretch}.content-around{align-content:space-around}.content-between{align-content:space-between}.content-center{align-content:center}.content-end{align-content:flex-end}.content-evenly{align-content:space-evenly}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}.gap-16{gap:calc(var(--spacing)*16)}:where(.-space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*-1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-y-reverse)))}:where(.-space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*-2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-0{column-gap:calc(var(--spacing)*0)}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-2{column-gap:calc(var(--spacing)*2)}.gap-x-3{column-gap:calc(var(--spacing)*3)}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-5{column-gap:calc(var(--spacing)*5)}.gap-x-6{column-gap:calc(var(--spacing)*6)}.gap-x-8{column-gap:calc(var(--spacing)*8)}.gap-x-10{column-gap:calc(var(--spacing)*10)}.gap-x-12{column-gap:calc(var(--spacing)*12)}:where(.-space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}:where(.-space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0{row-gap:calc(var(--spacing)*0)}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-3{row-gap:calc(var(--spacing)*3)}.gap-y-4{row-gap:calc(var(--spacing)*4)}.gap-y-5{row-gap:calc(var(--spacing)*5)}.gap-y-6{row-gap:calc(var(--spacing)*6)}.gap-y-8{row-gap:calc(var(--spacing)*8)}.gap-y-10{row-gap:calc(var(--spacing)*10)}.gap-y-12{row-gap:calc(var(--spacing)*12)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-x-0>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(0px*var(--tw-divide-x-reverse));border-inline-end-width:calc(0px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-x-2>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(2px*var(--tw-divide-x-reverse));border-inline-end-width:calc(2px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-x-4>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(4px*var(--tw-divide-x-reverse));border-inline-end-width:calc(4px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-x-8>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(8px*var(--tw-divide-x-reverse));border-inline-end-width:calc(8px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-0>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px*var(--tw-divide-y-reverse));border-bottom-width:calc(0px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-2>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(2px*var(--tw-divide-y-reverse));border-bottom-width:calc(2px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-4>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(4px*var(--tw-divide-y-reverse));border-bottom-width:calc(4px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-8>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(8px*var(--tw-divide-y-reverse));border-bottom-width:calc(8px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}:where(.divide-dashed>:not(:last-child)){--tw-border-style:dashed;border-style:dashed}:where(.divide-dotted>:not(:last-child)){--tw-border-style:dotted;border-style:dotted}:where(.divide-double>:not(:last-child)){--tw-border-style:double;border-style:double}:where(.divide-none>:not(:last-child)){--tw-border-style:none;border-style:none}:where(.divide-solid>:not(:last-child)){--tw-border-style:solid;border-style:solid}:where(.divide-black>:not(:last-child)){border-color:var(--color-black)}:where(.divide-current>:not(:last-child)){border-color:currentColor}:where(.divide-gray-50>:not(:last-child)){border-color:var(--color-gray-50)}:where(.divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.divide-gray-300>:not(:last-child)){border-color:var(--color-gray-300)}:where(.divide-gray-400>:not(:last-child)){border-color:var(--color-gray-400)}:where(.divide-gray-500>:not(:last-child)){border-color:var(--color-gray-500)}:where(.divide-gray-600>:not(:last-child)){border-color:var(--color-gray-600)}:where(.divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}:where(.divide-gray-800>:not(:last-child)){border-color:var(--color-gray-800)}:where(.divide-gray-900>:not(:last-child)){border-color:var(--color-gray-900)}:where(.divide-inherit>:not(:last-child)){border-color:inherit}:where(.divide-slate-50>:not(:last-child)){border-color:var(--color-slate-50)}:where(.divide-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}:where(.divide-slate-200>:not(:last-child)){border-color:var(--color-slate-200)}:where(.divide-slate-300>:not(:last-child)){border-color:var(--color-slate-300)}:where(.divide-slate-400>:not(:last-child)){border-color:var(--color-slate-400)}:where(.divide-slate-500>:not(:last-child)){border-color:var(--color-slate-500)}:where(.divide-slate-600>:not(:last-child)){border-color:var(--color-slate-600)}:where(.divide-slate-700>:not(:last-child)){border-color:var(--color-slate-700)}:where(.divide-slate-800>:not(:last-child)){border-color:var(--color-slate-800)}:where(.divide-slate-900>:not(:last-child)){border-color:var(--color-slate-900)}:where(.divide-transparent>:not(:last-child)){border-color:#0000}:where(.divide-white>:not(:last-child)){border-color:var(--color-white)}.place-self-auto{place-self:auto}.place-self-center{place-self:center}.place-self-end{place-self:end}.place-self-start{place-self:start}.place-self-stretch{place-self:stretch stretch}.self-auto{align-self:auto}.self-baseline{align-self:baseline}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-x-visible{overflow-x:visible}.overflow-y-auto{overflow-y:auto}.overflow-y-clip{overflow-y:clip}.overflow-y-hidden{overflow-y:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-y-visible{overflow-y:visible}.overscroll-auto{overscroll-behavior:auto}.overscroll-contain{overscroll-behavior:contain}.overscroll-none{overscroll-behavior:none}.overscroll-x-auto{overscroll-behavior-x:auto}.overscroll-x-contain{overscroll-behavior-x:contain}.overscroll-x-none{overscroll-behavior-x:none}.overscroll-y-auto{overscroll-behavior-y:auto}.overscroll-y-contain{overscroll-behavior-y:contain}.overscroll-y-none{overscroll-behavior-y:none}.scroll-auto{scroll-behavior:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.rounded-t-full{border-top-left-radius:3.40282e38px;border-top-right-radius:3.40282e38px}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-t-sm{border-top-left-radius:var(--radius-sm);border-top-right-radius:var(--radius-sm)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-2xl{border-top-left-radius:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl)}.rounded-l-3xl{border-top-left-radius:var(--radius-3xl);border-bottom-left-radius:var(--radius-3xl)}.rounded-l-full{border-top-left-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.rounded-l-lg{border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-l-sm{border-top-left-radius:var(--radius-sm);border-bottom-left-radius:var(--radius-sm)}.rounded-l-xl{border-top-left-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.rounded-tl{border-top-left-radius:.25rem}.rounded-tl-2xl{border-top-left-radius:var(--radius-2xl)}.rounded-tl-3xl{border-top-left-radius:var(--radius-3xl)}.rounded-tl-full{border-top-left-radius:3.40282e38px}.rounded-tl-lg{border-top-left-radius:var(--radius-lg)}.rounded-tl-md{border-top-left-radius:var(--radius-md)}.rounded-tl-none{border-top-left-radius:0}.rounded-tl-sm{border-top-left-radius:var(--radius-sm)}.rounded-tl-xl{border-top-left-radius:var(--radius-xl)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-2xl{border-top-right-radius:var(--radius-2xl);border-bottom-right-radius:var(--radius-2xl)}.rounded-r-3xl{border-top-right-radius:var(--radius-3xl);border-bottom-right-radius:var(--radius-3xl)}.rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-r-sm{border-top-right-radius:var(--radius-sm);border-bottom-right-radius:var(--radius-sm)}.rounded-r-xl{border-top-right-radius:var(--radius-xl);border-bottom-right-radius:var(--radius-xl)}.rounded-tr{border-top-right-radius:.25rem}.rounded-tr-2xl{border-top-right-radius:var(--radius-2xl)}.rounded-tr-3xl{border-top-right-radius:var(--radius-3xl)}.rounded-tr-full{border-top-right-radius:3.40282e38px}.rounded-tr-lg{border-top-right-radius:var(--radius-lg)}.rounded-tr-md{border-top-right-radius:var(--radius-md)}.rounded-tr-none{border-top-right-radius:0}.rounded-tr-sm{border-top-right-radius:var(--radius-sm)}.rounded-tr-xl{border-top-right-radius:var(--radius-xl)}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-2xl{border-bottom-right-radius:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl)}.rounded-b-3xl{border-bottom-right-radius:var(--radius-3xl);border-bottom-left-radius:var(--radius-3xl)}.rounded-b-full{border-bottom-right-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-b-sm{border-bottom-right-radius:var(--radius-sm);border-bottom-left-radius:var(--radius-sm)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.rounded-br{border-bottom-right-radius:.25rem}.rounded-br-2xl{border-bottom-right-radius:var(--radius-2xl)}.rounded-br-3xl{border-bottom-right-radius:var(--radius-3xl)}.rounded-br-full{border-bottom-right-radius:3.40282e38px}.rounded-br-lg{border-bottom-right-radius:var(--radius-lg)}.rounded-br-md{border-bottom-right-radius:var(--radius-md)}.rounded-br-none{border-bottom-right-radius:0}.rounded-br-sm{border-bottom-right-radius:var(--radius-sm)}.rounded-br-xl{border-bottom-right-radius:var(--radius-xl)}.rounded-bl{border-bottom-left-radius:.25rem}.rounded-bl-2xl{border-bottom-left-radius:var(--radius-2xl)}.rounded-bl-3xl{border-bottom-left-radius:var(--radius-3xl)}.rounded-bl-full{border-bottom-left-radius:3.40282e38px}.rounded-bl-lg{border-bottom-left-radius:var(--radius-lg)}.rounded-bl-md{border-bottom-left-radius:var(--radius-md)}.rounded-bl-none{border-bottom-left-radius:0}.rounded-bl-sm{border-bottom-left-radius:var(--radius-sm)}.rounded-bl-xl{border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-8{border-style:var(--tw-border-style);border-width:8px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.border-x-2{border-inline-style:var(--tw-border-style);border-inline-width:2px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-y-0{border-block-style:var(--tw-border-style);border-block-width:0}.border-y-2{border-block-style:var(--tw-border-style);border-block-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-r-4{border-right-style:var(--tw-border-style);border-right-width:4px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-b-4{border-bottom-style:var(--tw-border-style);border-bottom-width:4px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-double{--tw-border-style:double;border-style:double}.border-hidden{--tw-border-style:hidden;border-style:hidden}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-amber-50{border-color:var(--color-amber-50)}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-400{border-color:var(--color-amber-400)}.border-amber-500{border-color:var(--color-amber-500)}.border-amber-600{border-color:var(--color-amber-600)}.border-amber-700{border-color:var(--color-amber-700)}.border-amber-800{border-color:var(--color-amber-800)}.border-amber-900{border-color:var(--color-amber-900)}.border-amber-950{border-color:var(--color-amber-950)}.border-black{border-color:var(--color-black)}.border-blue-50{border-color:var(--color-blue-50)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-blue-700{border-color:var(--color-blue-700)}.border-blue-800{border-color:var(--color-blue-800)}.border-blue-900{border-color:var(--color-blue-900)}.border-blue-950{border-color:var(--color-blue-950)}.border-current{border-color:currentColor}.border-cyan-50{border-color:var(--color-cyan-50)}.border-cyan-100{border-color:var(--color-cyan-100)}.border-cyan-200{border-color:var(--color-cyan-200)}.border-cyan-300{border-color:var(--color-cyan-300)}.border-cyan-400{border-color:var(--color-cyan-400)}.border-cyan-500{border-color:var(--color-cyan-500)}.border-cyan-600{border-color:var(--color-cyan-600)}.border-cyan-700{border-color:var(--color-cyan-700)}.border-cyan-800{border-color:var(--color-cyan-800)}.border-cyan-900{border-color:var(--color-cyan-900)}.border-cyan-950{border-color:var(--color-cyan-950)}.border-emerald-50{border-color:var(--color-emerald-50)}.border-emerald-100{border-color:var(--color-emerald-100)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-emerald-300{border-color:var(--color-emerald-300)}.border-emerald-400{border-color:var(--color-emerald-400)}.border-emerald-500{border-color:var(--color-emerald-500)}.border-emerald-600{border-color:var(--color-emerald-600)}.border-emerald-700{border-color:var(--color-emerald-700)}.border-emerald-800{border-color:var(--color-emerald-800)}.border-emerald-900{border-color:var(--color-emerald-900)}.border-emerald-950{border-color:var(--color-emerald-950)}.border-fuchsia-50{border-color:var(--color-fuchsia-50)}.border-fuchsia-100{border-color:var(--color-fuchsia-100)}.border-fuchsia-200{border-color:var(--color-fuchsia-200)}.border-fuchsia-300{border-color:var(--color-fuchsia-300)}.border-fuchsia-400{border-color:var(--color-fuchsia-400)}.border-fuchsia-500{border-color:var(--color-fuchsia-500)}.border-fuchsia-600{border-color:var(--color-fuchsia-600)}.border-fuchsia-700{border-color:var(--color-fuchsia-700)}.border-fuchsia-800{border-color:var(--color-fuchsia-800)}.border-fuchsia-900{border-color:var(--color-fuchsia-900)}.border-fuchsia-950{border-color:var(--color-fuchsia-950)}.border-gray-50{border-color:var(--color-gray-50)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-500{border-color:var(--color-gray-500)}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-800{border-color:var(--color-gray-800)}.border-gray-900{border-color:var(--color-gray-900)}.border-gray-950{border-color:var(--color-gray-950)}.border-green-50{border-color:var(--color-green-50)}.border-green-100{border-color:var(--color-green-100)}.border-green-200{border-color:var(--color-green-200)}.border-green-300{border-color:var(--color-green-300)}.border-green-400{border-color:var(--color-green-400)}.border-green-500{border-color:var(--color-green-500)}.border-green-600{border-color:var(--color-green-600)}.border-green-700{border-color:var(--color-green-700)}.border-green-800{border-color:var(--color-green-800)}.border-green-900{border-color:var(--color-green-900)}.border-green-950{border-color:var(--color-green-950)}.border-indigo-50{border-color:var(--color-indigo-50)}.border-indigo-100{border-color:var(--color-indigo-100)}.border-indigo-200{border-color:var(--color-indigo-200)}.border-indigo-300{border-color:var(--color-indigo-300)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-indigo-500{border-color:var(--color-indigo-500)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-indigo-700{border-color:var(--color-indigo-700)}.border-indigo-800{border-color:var(--color-indigo-800)}.border-indigo-900{border-color:var(--color-indigo-900)}.border-indigo-950{border-color:var(--color-indigo-950)}.border-inherit{border-color:inherit}.border-lime-50{border-color:var(--color-lime-50)}.border-lime-100{border-color:var(--color-lime-100)}.border-lime-200{border-color:var(--color-lime-200)}.border-lime-300{border-color:var(--color-lime-300)}.border-lime-400{border-color:var(--color-lime-400)}.border-lime-500{border-color:var(--color-lime-500)}.border-lime-600{border-color:var(--color-lime-600)}.border-lime-700{border-color:var(--color-lime-700)}.border-lime-800{border-color:var(--color-lime-800)}.border-lime-900{border-color:var(--color-lime-900)}.border-lime-950{border-color:var(--color-lime-950)}.border-neutral-50{border-color:var(--color-neutral-50)}.border-neutral-100{border-color:var(--color-neutral-100)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-neutral-300{border-color:var(--color-neutral-300)}.border-neutral-400{border-color:var(--color-neutral-400)}.border-neutral-500{border-color:var(--color-neutral-500)}.border-neutral-600{border-color:var(--color-neutral-600)}.border-neutral-700{border-color:var(--color-neutral-700)}.border-neutral-800{border-color:var(--color-neutral-800)}.border-neutral-900{border-color:var(--color-neutral-900)}.border-neutral-950{border-color:var(--color-neutral-950)}.border-orange-50{border-color:var(--color-orange-50)}.border-orange-100{border-color:var(--color-orange-100)}.border-orange-200{border-color:var(--color-orange-200)}.border-orange-300{border-color:var(--color-orange-300)}.border-orange-400{border-color:var(--color-orange-400)}.border-orange-500{border-color:var(--color-orange-500)}.border-orange-600{border-color:var(--color-orange-600)}.border-orange-700{border-color:var(--color-orange-700)}.border-orange-800{border-color:var(--color-orange-800)}.border-orange-900{border-color:var(--color-orange-900)}.border-orange-950{border-color:var(--color-orange-950)}.border-pink-50{border-color:var(--color-pink-50)}.border-pink-100{border-color:var(--color-pink-100)}.border-pink-200{border-color:var(--color-pink-200)}.border-pink-300{border-color:var(--color-pink-300)}.border-pink-400{border-color:var(--color-pink-400)}.border-pink-500{border-color:var(--color-pink-500)}.border-pink-600{border-color:var(--color-pink-600)}.border-pink-700{border-color:var(--color-pink-700)}.border-pink-800{border-color:var(--color-pink-800)}.border-pink-900{border-color:var(--color-pink-900)}.border-pink-950{border-color:var(--color-pink-950)}.border-primary-500{border-color:var(--color-primary-500)}.border-purple-50{border-color:var(--color-purple-50)}.border-purple-100{border-color:var(--color-purple-100)}.border-purple-200{border-color:var(--color-purple-200)}.border-purple-300{border-color:var(--color-purple-300)}.border-purple-400{border-color:var(--color-purple-400)}.border-purple-500{border-color:var(--color-purple-500)}.border-purple-600{border-color:var(--color-purple-600)}.border-purple-700{border-color:var(--color-purple-700)}.border-purple-800{border-color:var(--color-purple-800)}.border-purple-900{border-color:var(--color-purple-900)}.border-purple-950{border-color:var(--color-purple-950)}.border-red-50{border-color:var(--color-red-50)}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-400{border-color:var(--color-red-400)}.border-red-500{border-color:var(--color-red-500)}.border-red-600{border-color:var(--color-red-600)}.border-red-700{border-color:var(--color-red-700)}.border-red-800{border-color:var(--color-red-800)}.border-red-900{border-color:var(--color-red-900)}.border-red-950{border-color:var(--color-red-950)}.border-rose-50{border-color:var(--color-rose-50)}.border-rose-100{border-color:var(--color-rose-100)}.border-rose-200{border-color:var(--color-rose-200)}.border-rose-300{border-color:var(--color-rose-300)}.border-rose-400{border-color:var(--color-rose-400)}.border-rose-500{border-color:var(--color-rose-500)}.border-rose-600{border-color:var(--color-rose-600)}.border-rose-700{border-color:var(--color-rose-700)}.border-rose-800{border-color:var(--color-rose-800)}.border-rose-900{border-color:var(--color-rose-900)}.border-rose-950{border-color:var(--color-rose-950)}.border-sky-50{border-color:var(--color-sky-50)}.border-sky-100{border-color:var(--color-sky-100)}.border-sky-200{border-color:var(--color-sky-200)}.border-sky-300{border-color:var(--color-sky-300)}.border-sky-400{border-color:var(--color-sky-400)}.border-sky-500{border-color:var(--color-sky-500)}.border-sky-600{border-color:var(--color-sky-600)}.border-sky-700{border-color:var(--color-sky-700)}.border-sky-800{border-color:var(--color-sky-800)}.border-sky-900{border-color:var(--color-sky-900)}.border-sky-950{border-color:var(--color-sky-950)}.border-slate-50{border-color:var(--color-slate-50)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-400{border-color:var(--color-slate-400)}.border-slate-500{border-color:var(--color-slate-500)}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-800{border-color:var(--color-slate-800)}.border-slate-900{border-color:var(--color-slate-900)}.border-slate-950{border-color:var(--color-slate-950)}.border-stone-50{border-color:var(--color-stone-50)}.border-stone-100{border-color:var(--color-stone-100)}.border-stone-200{border-color:var(--color-stone-200)}.border-stone-300{border-color:var(--color-stone-300)}.border-stone-400{border-color:var(--color-stone-400)}.border-stone-500{border-color:var(--color-stone-500)}.border-stone-600{border-color:var(--color-stone-600)}.border-stone-700{border-color:var(--color-stone-700)}.border-stone-800{border-color:var(--color-stone-800)}.border-stone-900{border-color:var(--color-stone-900)}.border-stone-950{border-color:var(--color-stone-950)}.border-teal-50{border-color:var(--color-teal-50)}.border-teal-100{border-color:var(--color-teal-100)}.border-teal-200{border-color:var(--color-teal-200)}.border-teal-300{border-color:var(--color-teal-300)}.border-teal-400{border-color:var(--color-teal-400)}.border-teal-500{border-color:var(--color-teal-500)}.border-teal-600{border-color:var(--color-teal-600)}.border-teal-700{border-color:var(--color-teal-700)}.border-teal-800{border-color:var(--color-teal-800)}.border-teal-900{border-color:var(--color-teal-900)}.border-teal-950{border-color:var(--color-teal-950)}.border-transparent{border-color:#0000}.border-violet-50{border-color:var(--color-violet-50)}.border-violet-100{border-color:var(--color-violet-100)}.border-violet-200{border-color:var(--color-violet-200)}.border-violet-300{border-color:var(--color-violet-300)}.border-violet-400{border-color:var(--color-violet-400)}.border-violet-500{border-color:var(--color-violet-500)}.border-violet-600{border-color:var(--color-violet-600)}.border-violet-700{border-color:var(--color-violet-700)}.border-violet-800{border-color:var(--color-violet-800)}.border-violet-900{border-color:var(--color-violet-900)}.border-violet-950{border-color:var(--color-violet-950)}.border-white{border-color:var(--color-white)}.border-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.border-white\/30{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.border-yellow-50{border-color:var(--color-yellow-50)}.border-yellow-100{border-color:var(--color-yellow-100)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-yellow-300{border-color:var(--color-yellow-300)}.border-yellow-400{border-color:var(--color-yellow-400)}.border-yellow-500{border-color:var(--color-yellow-500)}.border-yellow-600{border-color:var(--color-yellow-600)}.border-yellow-700{border-color:var(--color-yellow-700)}.border-yellow-800{border-color:var(--color-yellow-800)}.border-yellow-900{border-color:var(--color-yellow-900)}.border-yellow-950{border-color:var(--color-yellow-950)}.border-zinc-50{border-color:var(--color-zinc-50)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-zinc-400{border-color:var(--color-zinc-400)}.border-zinc-500{border-color:var(--color-zinc-500)}.border-zinc-600{border-color:var(--color-zinc-600)}.border-zinc-700{border-color:var(--color-zinc-700)}.border-zinc-800{border-color:var(--color-zinc-800)}.border-zinc-900{border-color:var(--color-zinc-900)}.border-zinc-950{border-color:var(--color-zinc-950)}.border-t-blue-500{border-top-color:var(--color-blue-500)}.border-t-gray-900{border-top-color:var(--color-gray-900)}.border-t-white{border-top-color:var(--color-white)}.bg-\[\#03C75A\]{background-color:#03c75a}.bg-\[\#1877F2\]{background-color:#1877f2}.bg-\[\#FEE500\]{background-color:#fee500}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-200{background-color:var(--color-amber-200)}.bg-amber-300{background-color:var(--color-amber-300)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-600{background-color:var(--color-amber-600)}.bg-amber-700{background-color:var(--color-amber-700)}.bg-amber-800{background-color:var(--color-amber-800)}.bg-amber-900{background-color:var(--color-amber-900)}.bg-amber-950{background-color:var(--color-amber-950)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:#0000}@supports (color:color-mix(in lab,red,red)){.bg-black\/0{background-color:color-mix(in oklab,var(--color-black)0%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/70{background-color:#eff6ffb3}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50)70%,transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700{background-color:var(--color-blue-700)}.bg-blue-800{background-color:var(--color-blue-800)}.bg-blue-900{background-color:var(--color-blue-900)}.bg-blue-950{background-color:var(--color-blue-950)}.bg-current{background-color:currentColor}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-cyan-200{background-color:var(--color-cyan-200)}.bg-cyan-300{background-color:var(--color-cyan-300)}.bg-cyan-400{background-color:var(--color-cyan-400)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-600{background-color:var(--color-cyan-600)}.bg-cyan-700{background-color:var(--color-cyan-700)}.bg-cyan-800{background-color:var(--color-cyan-800)}.bg-cyan-900{background-color:var(--color-cyan-900)}.bg-cyan-950{background-color:var(--color-cyan-950)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-200{background-color:var(--color-emerald-200)}.bg-emerald-300{background-color:var(--color-emerald-300)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-emerald-700{background-color:var(--color-emerald-700)}.bg-emerald-800{background-color:var(--color-emerald-800)}.bg-emerald-900{background-color:var(--color-emerald-900)}.bg-emerald-950{background-color:var(--color-emerald-950)}.bg-fuchsia-50{background-color:var(--color-fuchsia-50)}.bg-fuchsia-100{background-color:var(--color-fuchsia-100)}.bg-fuchsia-200{background-color:var(--color-fuchsia-200)}.bg-fuchsia-300{background-color:var(--color-fuchsia-300)}.bg-fuchsia-400{background-color:var(--color-fuchsia-400)}.bg-fuchsia-500{background-color:var(--color-fuchsia-500)}.bg-fuchsia-600{background-color:var(--color-fuchsia-600)}.bg-fuchsia-700{background-color:var(--color-fuchsia-700)}.bg-fuchsia-800{background-color:var(--color-fuchsia-800)}.bg-fuchsia-900{background-color:var(--color-fuchsia-900)}.bg-fuchsia-950{background-color:var(--color-fuchsia-950)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-100\/70{background-color:#f3f4f6b3}@supports (color:color-mix(in lab,red,red)){.bg-gray-100\/70{background-color:color-mix(in oklab,var(--color-gray-100)70%,transparent)}}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-900\/40{background-color:#10182866}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/40{background-color:color-mix(in oklab,var(--color-gray-900)40%,transparent)}}.bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.bg-gray-950{background-color:var(--color-gray-950)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-200{background-color:var(--color-green-200)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-green-700{background-color:var(--color-green-700)}.bg-green-800{background-color:var(--color-green-800)}.bg-green-900{background-color:var(--color-green-900)}.bg-green-950{background-color:var(--color-green-950)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-200{background-color:var(--color-indigo-200)}.bg-indigo-300{background-color:var(--color-indigo-300)}.bg-indigo-400{background-color:var(--color-indigo-400)}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-indigo-700{background-color:var(--color-indigo-700)}.bg-indigo-800{background-color:var(--color-indigo-800)}.bg-indigo-900{background-color:var(--color-indigo-900)}.bg-indigo-950{background-color:var(--color-indigo-950)}.bg-inherit{background-color:inherit}.bg-lime-50{background-color:var(--color-lime-50)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-lime-200{background-color:var(--color-lime-200)}.bg-lime-300{background-color:var(--color-lime-300)}.bg-lime-400{background-color:var(--color-lime-400)}.bg-lime-500{background-color:var(--color-lime-500)}.bg-lime-600{background-color:var(--color-lime-600)}.bg-lime-700{background-color:var(--color-lime-700)}.bg-lime-800{background-color:var(--color-lime-800)}.bg-lime-900{background-color:var(--color-lime-900)}.bg-lime-950{background-color:var(--color-lime-950)}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-neutral-400{background-color:var(--color-neutral-400)}.bg-neutral-500{background-color:var(--color-neutral-500)}.bg-neutral-600{background-color:var(--color-neutral-600)}.bg-neutral-700{background-color:var(--color-neutral-700)}.bg-neutral-800{background-color:var(--color-neutral-800)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-neutral-950{background-color:var(--color-neutral-950)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-200{background-color:var(--color-orange-200)}.bg-orange-300{background-color:var(--color-orange-300)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-600{background-color:var(--color-orange-600)}.bg-orange-700{background-color:var(--color-orange-700)}.bg-orange-800{background-color:var(--color-orange-800)}.bg-orange-900{background-color:var(--color-orange-900)}.bg-orange-950{background-color:var(--color-orange-950)}.bg-pink-50{background-color:var(--color-pink-50)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-pink-200{background-color:var(--color-pink-200)}.bg-pink-300{background-color:var(--color-pink-300)}.bg-pink-400{background-color:var(--color-pink-400)}.bg-pink-500{background-color:var(--color-pink-500)}.bg-pink-600{background-color:var(--color-pink-600)}.bg-pink-700{background-color:var(--color-pink-700)}.bg-pink-800{background-color:var(--color-pink-800)}.bg-pink-900{background-color:var(--color-pink-900)}.bg-pink-950{background-color:var(--color-pink-950)}.bg-primary-50{background-color:var(--color-primary-50)}.bg-primary-100{background-color:var(--color-primary-100)}.bg-primary-600{background-color:var(--color-primary-600)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-200{background-color:var(--color-purple-200)}.bg-purple-300{background-color:var(--color-purple-300)}.bg-purple-400{background-color:var(--color-purple-400)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-purple-500\/80{background-color:#ac4bffcc}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/80{background-color:color-mix(in oklab,var(--color-purple-500)80%,transparent)}}.bg-purple-600{background-color:var(--color-purple-600)}.bg-purple-700{background-color:var(--color-purple-700)}.bg-purple-800{background-color:var(--color-purple-800)}.bg-purple-900{background-color:var(--color-purple-900)}.bg-purple-950{background-color:var(--color-purple-950)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-50\/30{background-color:#fef2f24d}@supports (color:color-mix(in lab,red,red)){.bg-red-50\/30{background-color:color-mix(in oklab,var(--color-red-50)30%,transparent)}}.bg-red-100{background-color:var(--color-red-100)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-300{background-color:var(--color-red-300)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/50{background-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/50{background-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-red-700{background-color:var(--color-red-700)}.bg-red-800{background-color:var(--color-red-800)}.bg-red-900{background-color:var(--color-red-900)}.bg-red-950{background-color:var(--color-red-950)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-rose-200{background-color:var(--color-rose-200)}.bg-rose-300{background-color:var(--color-rose-300)}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-600{background-color:var(--color-rose-600)}.bg-rose-700{background-color:var(--color-rose-700)}.bg-rose-800{background-color:var(--color-rose-800)}.bg-rose-900{background-color:var(--color-rose-900)}.bg-rose-950{background-color:var(--color-rose-950)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-sky-200{background-color:var(--color-sky-200)}.bg-sky-300{background-color:var(--color-sky-300)}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-sky-600{background-color:var(--color-sky-600)}.bg-sky-700{background-color:var(--color-sky-700)}.bg-sky-800{background-color:var(--color-sky-800)}.bg-sky-900{background-color:var(--color-sky-900)}.bg-sky-950{background-color:var(--color-sky-950)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-500{background-color:var(--color-slate-500)}.bg-slate-600{background-color:var(--color-slate-600)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-950{background-color:var(--color-slate-950)}.bg-stone-50{background-color:var(--color-stone-50)}.bg-stone-100{background-color:var(--color-stone-100)}.bg-stone-200{background-color:var(--color-stone-200)}.bg-stone-300{background-color:var(--color-stone-300)}.bg-stone-400{background-color:var(--color-stone-400)}.bg-stone-500{background-color:var(--color-stone-500)}.bg-stone-600{background-color:var(--color-stone-600)}.bg-stone-700{background-color:var(--color-stone-700)}.bg-stone-800{background-color:var(--color-stone-800)}.bg-stone-900{background-color:var(--color-stone-900)}.bg-stone-950{background-color:var(--color-stone-950)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-200{background-color:var(--color-teal-200)}.bg-teal-300{background-color:var(--color-teal-300)}.bg-teal-400{background-color:var(--color-teal-400)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-teal-600{background-color:var(--color-teal-600)}.bg-teal-700{background-color:var(--color-teal-700)}.bg-teal-800{background-color:var(--color-teal-800)}.bg-teal-900{background-color:var(--color-teal-900)}.bg-teal-950{background-color:var(--color-teal-950)}.bg-transparent{background-color:#0000}.bg-violet-50{background-color:var(--color-violet-50)}.bg-violet-100{background-color:var(--color-violet-100)}.bg-violet-200{background-color:var(--color-violet-200)}.bg-violet-300{background-color:var(--color-violet-300)}.bg-violet-400{background-color:var(--color-violet-400)}.bg-violet-500{background-color:var(--color-violet-500)}.bg-violet-600{background-color:var(--color-violet-600)}.bg-violet-700{background-color:var(--color-violet-700)}.bg-violet-800{background-color:var(--color-violet-800)}.bg-violet-900{background-color:var(--color-violet-900)}.bg-violet-950{background-color:var(--color-violet-950)}.bg-white{background-color:var(--color-white)}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-white\/30{background-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.bg-white\/30{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-200{background-color:var(--color-yellow-200)}.bg-yellow-300{background-color:var(--color-yellow-300)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-600{background-color:var(--color-yellow-600)}.bg-yellow-700{background-color:var(--color-yellow-700)}.bg-yellow-800{background-color:var(--color-yellow-800)}.bg-yellow-900{background-color:var(--color-yellow-900)}.bg-yellow-950{background-color:var(--color-yellow-950)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-400{background-color:var(--color-zinc-400)}.bg-zinc-500{background-color:var(--color-zinc-500)}.bg-zinc-600{background-color:var(--color-zinc-600)}.bg-zinc-700{background-color:var(--color-zinc-700)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-bl{--tw-gradient-position:to bottom left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-l{--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-tl{--tw-gradient-position:to top left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-tr{--tw-gradient-position:to top right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-none{background-image:none}.from-black{--tw-gradient-from:var(--color-black);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-black\/90{--tw-gradient-from:#000000e6}@supports (color:color-mix(in lab,red,red)){.from-black\/90{--tw-gradient-from:color-mix(in oklab,var(--color-black)90%,transparent)}}.from-black\/90{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-100{--tw-gradient-from:var(--color-blue-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-200{--tw-gradient-from:var(--color-blue-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-300{--tw-gradient-from:var(--color-blue-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-400{--tw-gradient-from:var(--color-blue-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-500{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-600{--tw-gradient-from:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-700{--tw-gradient-from:var(--color-blue-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-800{--tw-gradient-from:var(--color-blue-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-900{--tw-gradient-from:var(--color-blue-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-current{--tw-gradient-from:currentcolor;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-emerald-500{--tw-gradient-from:var(--color-emerald-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-100{--tw-gradient-from:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-200{--tw-gradient-from:var(--color-gray-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-300{--tw-gradient-from:var(--color-gray-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-400{--tw-gradient-from:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-500{--tw-gradient-from:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-600{--tw-gradient-from:var(--color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-700{--tw-gradient-from:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-gray-900{--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-50{--tw-gradient-from:var(--color-green-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-100{--tw-gradient-from:var(--color-green-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-200{--tw-gradient-from:var(--color-green-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-300{--tw-gradient-from:var(--color-green-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-400{--tw-gradient-from:var(--color-green-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-500{--tw-gradient-from:var(--color-green-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-600{--tw-gradient-from:var(--color-green-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-700{--tw-gradient-from:var(--color-green-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-800{--tw-gradient-from:var(--color-green-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-900{--tw-gradient-from:var(--color-green-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-50{--tw-gradient-from:var(--color-indigo-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-100{--tw-gradient-from:var(--color-indigo-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-200{--tw-gradient-from:var(--color-indigo-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-300{--tw-gradient-from:var(--color-indigo-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-400{--tw-gradient-from:var(--color-indigo-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-500{--tw-gradient-from:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-600{--tw-gradient-from:var(--color-indigo-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-700{--tw-gradient-from:var(--color-indigo-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-800{--tw-gradient-from:var(--color-indigo-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-900{--tw-gradient-from:var(--color-indigo-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-inherit{--tw-gradient-from:inherit;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-50{--tw-gradient-from:var(--color-orange-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-100{--tw-gradient-from:var(--color-orange-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-200{--tw-gradient-from:var(--color-orange-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-300{--tw-gradient-from:var(--color-orange-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-400{--tw-gradient-from:var(--color-orange-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-500{--tw-gradient-from:var(--color-orange-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-600{--tw-gradient-from:var(--color-orange-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-700{--tw-gradient-from:var(--color-orange-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-800{--tw-gradient-from:var(--color-orange-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-orange-900{--tw-gradient-from:var(--color-orange-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-50{--tw-gradient-from:var(--color-pink-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-100{--tw-gradient-from:var(--color-pink-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-200{--tw-gradient-from:var(--color-pink-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-300{--tw-gradient-from:var(--color-pink-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-400{--tw-gradient-from:var(--color-pink-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-500{--tw-gradient-from:var(--color-pink-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-600{--tw-gradient-from:var(--color-pink-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-700{--tw-gradient-from:var(--color-pink-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-800{--tw-gradient-from:var(--color-pink-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-pink-900{--tw-gradient-from:var(--color-pink-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-50{--tw-gradient-from:var(--color-purple-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-100{--tw-gradient-from:var(--color-purple-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-200{--tw-gradient-from:var(--color-purple-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-300{--tw-gradient-from:var(--color-purple-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-400{--tw-gradient-from:var(--color-purple-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-500{--tw-gradient-from:var(--color-purple-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-600{--tw-gradient-from:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-700{--tw-gradient-from:var(--color-purple-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-800{--tw-gradient-from:var(--color-purple-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-900{--tw-gradient-from:var(--color-purple-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-50{--tw-gradient-from:var(--color-red-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-100{--tw-gradient-from:var(--color-red-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-200{--tw-gradient-from:var(--color-red-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-300{--tw-gradient-from:var(--color-red-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-400{--tw-gradient-from:var(--color-red-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-600{--tw-gradient-from:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-700{--tw-gradient-from:var(--color-red-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-800{--tw-gradient-from:var(--color-red-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-red-900{--tw-gradient-from:var(--color-red-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-50{--tw-gradient-from:var(--color-slate-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-100{--tw-gradient-from:var(--color-slate-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-200{--tw-gradient-from:var(--color-slate-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-300{--tw-gradient-from:var(--color-slate-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-400{--tw-gradient-from:var(--color-slate-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-500{--tw-gradient-from:var(--color-slate-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-600{--tw-gradient-from:var(--color-slate-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-700{--tw-gradient-from:var(--color-slate-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-800{--tw-gradient-from:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-slate-900{--tw-gradient-from:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-white{--tw-gradient-from:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-50{--tw-gradient-from:var(--color-yellow-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-100{--tw-gradient-from:var(--color-yellow-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-200{--tw-gradient-from:var(--color-yellow-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-300{--tw-gradient-from:var(--color-yellow-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-400{--tw-gradient-from:var(--color-yellow-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-500{--tw-gradient-from:var(--color-yellow-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-600{--tw-gradient-from:var(--color-yellow-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-700{--tw-gradient-from:var(--color-yellow-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-800{--tw-gradient-from:var(--color-yellow-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-900{--tw-gradient-from:var(--color-yellow-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-black{--tw-gradient-via:var(--color-black);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-black\/60{--tw-gradient-via:#0009}@supports (color:color-mix(in lab,red,red)){.via-black\/60{--tw-gradient-via:color-mix(in oklab,var(--color-black)60%,transparent)}}.via-black\/60{--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-50{--tw-gradient-via:var(--color-blue-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-100{--tw-gradient-via:var(--color-blue-100);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-200{--tw-gradient-via:var(--color-blue-200);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-300{--tw-gradient-via:var(--color-blue-300);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-400{--tw-gradient-via:var(--color-blue-400);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-500{--tw-gradient-via:var(--color-blue-500);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-600{--tw-gradient-via:var(--color-blue-600);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-700{--tw-gradient-via:var(--color-blue-700);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-800{--tw-gradient-via:var(--color-blue-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-blue-900{--tw-gradient-via:var(--color-blue-900);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-current{--tw-gradient-via:currentcolor;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-50{--tw-gradient-via:var(--color-gray-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-100{--tw-gradient-via:var(--color-gray-100);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-200{--tw-gradient-via:var(--color-gray-200);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-300{--tw-gradient-via:var(--color-gray-300);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-400{--tw-gradient-via:var(--color-gray-400);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-500{--tw-gradient-via:var(--color-gray-500);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-600{--tw-gradient-via:var(--color-gray-600);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-700{--tw-gradient-via:var(--color-gray-700);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-800{--tw-gradient-via:var(--color-gray-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-gray-900{--tw-gradient-via:var(--color-gray-900);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-inherit{--tw-gradient-via:inherit;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-50{--tw-gradient-via:var(--color-slate-50);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-100{--tw-gradient-via:var(--color-slate-100);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-200{--tw-gradient-via:var(--color-slate-200);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-300{--tw-gradient-via:var(--color-slate-300);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-400{--tw-gradient-via:var(--color-slate-400);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-500{--tw-gradient-via:var(--color-slate-500);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-600{--tw-gradient-via:var(--color-slate-600);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-700{--tw-gradient-via:var(--color-slate-700);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-800{--tw-gradient-via:var(--color-slate-800);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-slate-900{--tw-gradient-via:var(--color-slate-900);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-white{--tw-gradient-via:var(--color-white);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-black{--tw-gradient-to:var(--color-black);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-50{--tw-gradient-to:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-100{--tw-gradient-to:var(--color-blue-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-200{--tw-gradient-to:var(--color-blue-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-300{--tw-gradient-to:var(--color-blue-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-400{--tw-gradient-to:var(--color-blue-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-500{--tw-gradient-to:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-600{--tw-gradient-to:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-700{--tw-gradient-to:var(--color-blue-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-800{--tw-gradient-to:var(--color-blue-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-blue-900{--tw-gradient-to:var(--color-blue-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-current{--tw-gradient-to:currentcolor;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-50{--tw-gradient-to:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-100{--tw-gradient-to:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-200{--tw-gradient-to:var(--color-gray-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-300{--tw-gradient-to:var(--color-gray-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-400{--tw-gradient-to:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-500{--tw-gradient-to:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-600{--tw-gradient-to:var(--color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-800{--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-900{--tw-gradient-to:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-inherit{--tw-gradient-to:inherit;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-50{--tw-gradient-to:var(--color-purple-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-100{--tw-gradient-to:var(--color-purple-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-200{--tw-gradient-to:var(--color-purple-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-300{--tw-gradient-to:var(--color-purple-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-400{--tw-gradient-to:var(--color-purple-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-500{--tw-gradient-to:var(--color-purple-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-700{--tw-gradient-to:var(--color-purple-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-800{--tw-gradient-to:var(--color-purple-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-900{--tw-gradient-to:var(--color-purple-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-50{--tw-gradient-to:var(--color-red-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-100{--tw-gradient-to:var(--color-red-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-200{--tw-gradient-to:var(--color-red-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-300{--tw-gradient-to:var(--color-red-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-400{--tw-gradient-to:var(--color-red-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-500{--tw-gradient-to:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-600{--tw-gradient-to:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-700{--tw-gradient-to:var(--color-red-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-800{--tw-gradient-to:var(--color-red-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-red-900{--tw-gradient-to:var(--color-red-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-50{--tw-gradient-to:var(--color-slate-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-100{--tw-gradient-to:var(--color-slate-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-200{--tw-gradient-to:var(--color-slate-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-300{--tw-gradient-to:var(--color-slate-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-400{--tw-gradient-to:var(--color-slate-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-500{--tw-gradient-to:var(--color-slate-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-600{--tw-gradient-to:var(--color-slate-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-700{--tw-gradient-to:var(--color-slate-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-800{--tw-gradient-to:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-slate-900{--tw-gradient-to:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-teal-600{--tw-gradient-to:var(--color-teal-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-fill{object-fit:fill}.object-none{object-fit:none}.object-scale-down{object-fit:scale-down}.object-bottom{object-position:bottom}.object-center{object-position:center}.object-left{object-position:left}.object-left-bottom{object-position:left bottom}.object-left-top{object-position:left top}.object-right{object-position:right}.object-right-bottom{object-position:right bottom}.object-right-top{object-position:right top}.object-top{object-position:top}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-10{padding:calc(var(--spacing)*10)}.p-12{padding:calc(var(--spacing)*12)}.p-16{padding:calc(var(--spacing)*16)}.p-20{padding:calc(var(--spacing)*20)}.p-24{padding:calc(var(--spacing)*24)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-12{padding-inline:calc(var(--spacing)*12)}.px-16{padding-inline:calc(var(--spacing)*16)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\.5{padding-block:calc(var(--spacing)*3.5)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-12{padding-top:calc(var(--spacing)*12)}.pt-16{padding-top:calc(var(--spacing)*16)}.pr-0{padding-right:calc(var(--spacing)*0)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-5{padding-right:calc(var(--spacing)*5)}.pr-6{padding-right:calc(var(--spacing)*6)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-12{padding-right:calc(var(--spacing)*12)}.pr-16{padding-right:calc(var(--spacing)*16)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-10{padding-bottom:calc(var(--spacing)*10)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.pb-16{padding-bottom:calc(var(--spacing)*16)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-5{padding-left:calc(var(--spacing)*5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-10{padding-left:calc(var(--spacing)*10)}.pl-12{padding-left:calc(var(--spacing)*12)}.pl-16{padding-left:calc(var(--spacing)*16)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.indent-0{text-indent:calc(var(--spacing)*0)}.indent-1{text-indent:calc(var(--spacing)*1)}.indent-2{text-indent:calc(var(--spacing)*2)}.indent-4{text-indent:calc(var(--spacing)*4)}.indent-8{text-indent:calc(var(--spacing)*8)}.align-baseline{vertical-align:baseline}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.align-sub{vertical-align:sub}.align-super{vertical-align:super}.align-text-bottom{vertical-align:text-bottom}.align-text-top{vertical-align:text-top}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-3{--tw-leading:calc(var(--spacing)*3);line-height:calc(var(--spacing)*3)}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-8{--tw-leading:calc(var(--spacing)*8);line-height:calc(var(--spacing)*8)}.leading-9{--tw-leading:calc(var(--spacing)*9);line-height:calc(var(--spacing)*9)}.leading-10{--tw-leading:calc(var(--spacing)*10);line-height:calc(var(--spacing)*10)}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.\!whitespace-normal{white-space:normal!important}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#000000\]\/85{color:oklab(0% none none/.85)}.text-amber-50{color:var(--color-amber-50)}.text-amber-100{color:var(--color-amber-100)}.text-amber-200{color:var(--color-amber-200)}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-amber-950{color:var(--color-amber-950)}.text-black{color:var(--color-black)}.text-blue-50{color:var(--color-blue-50)}.text-blue-100{color:var(--color-blue-100)}.text-blue-200{color:var(--color-blue-200)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-blue-950{color:var(--color-blue-950)}.text-current{color:currentColor}.text-cyan-50{color:var(--color-cyan-50)}.text-cyan-100{color:var(--color-cyan-100)}.text-cyan-200{color:var(--color-cyan-200)}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-400{color:var(--color-cyan-400)}.text-cyan-500{color:var(--color-cyan-500)}.text-cyan-600{color:var(--color-cyan-600)}.text-cyan-700{color:var(--color-cyan-700)}.text-cyan-800{color:var(--color-cyan-800)}.text-cyan-900{color:var(--color-cyan-900)}.text-cyan-950{color:var(--color-cyan-950)}.text-emerald-50{color:var(--color-emerald-50)}.text-emerald-100{color:var(--color-emerald-100)}.text-emerald-200{color:var(--color-emerald-200)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-emerald-900{color:var(--color-emerald-900)}.text-emerald-950{color:var(--color-emerald-950)}.text-fuchsia-50{color:var(--color-fuchsia-50)}.text-fuchsia-100{color:var(--color-fuchsia-100)}.text-fuchsia-200{color:var(--color-fuchsia-200)}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-fuchsia-400{color:var(--color-fuchsia-400)}.text-fuchsia-500{color:var(--color-fuchsia-500)}.text-fuchsia-600{color:var(--color-fuchsia-600)}.text-fuchsia-700{color:var(--color-fuchsia-700)}.text-fuchsia-800{color:var(--color-fuchsia-800)}.text-fuchsia-900{color:var(--color-fuchsia-900)}.text-fuchsia-950{color:var(--color-fuchsia-950)}.text-gray-50{color:var(--color-gray-50)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-gray-950{color:var(--color-gray-950)}.text-green-50{color:var(--color-green-50)}.text-green-100{color:var(--color-green-100)}.text-green-200{color:var(--color-green-200)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-green-950{color:var(--color-green-950)}.text-indigo-50{color:var(--color-indigo-50)}.text-indigo-100{color:var(--color-indigo-100)}.text-indigo-200{color:var(--color-indigo-200)}.text-indigo-300{color:var(--color-indigo-300)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-500{color:var(--color-indigo-500)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-800{color:var(--color-indigo-800)}.text-indigo-900{color:var(--color-indigo-900)}.text-indigo-950{color:var(--color-indigo-950)}.text-inherit{color:inherit}.text-lime-50{color:var(--color-lime-50)}.text-lime-100{color:var(--color-lime-100)}.text-lime-200{color:var(--color-lime-200)}.text-lime-300{color:var(--color-lime-300)}.text-lime-400{color:var(--color-lime-400)}.text-lime-500{color:var(--color-lime-500)}.text-lime-600{color:var(--color-lime-600)}.text-lime-700{color:var(--color-lime-700)}.text-lime-800{color:var(--color-lime-800)}.text-lime-900{color:var(--color-lime-900)}.text-lime-950{color:var(--color-lime-950)}.text-neutral-50{color:var(--color-neutral-50)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-700{color:var(--color-neutral-700)}.text-neutral-800{color:var(--color-neutral-800)}.text-neutral-900{color:var(--color-neutral-900)}.text-neutral-950{color:var(--color-neutral-950)}.text-orange-50{color:var(--color-orange-50)}.text-orange-100{color:var(--color-orange-100)}.text-orange-200{color:var(--color-orange-200)}.text-orange-300{color:var(--color-orange-300)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-orange-800{color:var(--color-orange-800)}.text-orange-900{color:var(--color-orange-900)}.text-orange-950{color:var(--color-orange-950)}.text-pink-50{color:var(--color-pink-50)}.text-pink-100{color:var(--color-pink-100)}.text-pink-200{color:var(--color-pink-200)}.text-pink-300{color:var(--color-pink-300)}.text-pink-400{color:var(--color-pink-400)}.text-pink-500{color:var(--color-pink-500)}.text-pink-600{color:var(--color-pink-600)}.text-pink-700{color:var(--color-pink-700)}.text-pink-800{color:var(--color-pink-800)}.text-pink-900{color:var(--color-pink-900)}.text-pink-950{color:var(--color-pink-950)}.text-primary-400{color:var(--color-primary-400)}.text-primary-600{color:var(--color-primary-600)}.text-purple-50{color:var(--color-purple-50)}.text-purple-100{color:var(--color-purple-100)}.text-purple-200{color:var(--color-purple-200)}.text-purple-300{color:var(--color-purple-300)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.text-purple-950{color:var(--color-purple-950)}.text-red-50{color:var(--color-red-50)}.text-red-100{color:var(--color-red-100)}.text-red-200{color:var(--color-red-200)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-red-950{color:var(--color-red-950)}.text-rose-50{color:var(--color-rose-50)}.text-rose-100{color:var(--color-rose-100)}.text-rose-200{color:var(--color-rose-200)}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-rose-500{color:var(--color-rose-500)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-900{color:var(--color-rose-900)}.text-rose-950{color:var(--color-rose-950)}.text-sky-50{color:var(--color-sky-50)}.text-sky-100{color:var(--color-sky-100)}.text-sky-200{color:var(--color-sky-200)}.text-sky-300{color:var(--color-sky-300)}.text-sky-400{color:var(--color-sky-400)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-sky-800{color:var(--color-sky-800)}.text-sky-900{color:var(--color-sky-900)}.text-sky-950{color:var(--color-sky-950)}.text-slate-50{color:var(--color-slate-50)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-slate-950{color:var(--color-slate-950)}.text-stone-50{color:var(--color-stone-50)}.text-stone-100{color:var(--color-stone-100)}.text-stone-200{color:var(--color-stone-200)}.text-stone-300{color:var(--color-stone-300)}.text-stone-400{color:var(--color-stone-400)}.text-stone-500{color:var(--color-stone-500)}.text-stone-600{color:var(--color-stone-600)}.text-stone-700{color:var(--color-stone-700)}.text-stone-800{color:var(--color-stone-800)}.text-stone-900{color:var(--color-stone-900)}.text-stone-950{color:var(--color-stone-950)}.text-teal-50{color:var(--color-teal-50)}.text-teal-100{color:var(--color-teal-100)}.text-teal-200{color:var(--color-teal-200)}.text-teal-300{color:var(--color-teal-300)}.text-teal-400{color:var(--color-teal-400)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-teal-800{color:var(--color-teal-800)}.text-teal-900{color:var(--color-teal-900)}.text-teal-950{color:var(--color-teal-950)}.text-transparent{color:#0000}.text-violet-50{color:var(--color-violet-50)}.text-violet-100{color:var(--color-violet-100)}.text-violet-200{color:var(--color-violet-200)}.text-violet-300{color:var(--color-violet-300)}.text-violet-400{color:var(--color-violet-400)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-violet-800{color:var(--color-violet-800)}.text-violet-900{color:var(--color-violet-900)}.text-violet-950{color:var(--color-violet-950)}.text-white{color:var(--color-white)}.text-yellow-50{color:var(--color-yellow-50)}.text-yellow-100{color:var(--color-yellow-100)}.text-yellow-200{color:var(--color-yellow-200)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-yellow-900{color:var(--color-yellow-900)}.text-yellow-950{color:var(--color-yellow-950)}.text-zinc-50{color:var(--color-zinc-50)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.accent-black{accent-color:var(--color-black)}.accent-blue-600{accent-color:var(--color-blue-600)}.accent-gray-900{accent-color:var(--color-gray-900)}.opacity-0{opacity:0}.opacity-5{opacity:.05}.opacity-10{opacity:.1}.opacity-15{opacity:.15}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.opacity-95{opacity:.95}.opacity-100{opacity:1}.bg-blend-color{background-blend-mode:color}.bg-blend-color-burn{background-blend-mode:color-burn}.bg-blend-color-dodge{background-blend-mode:color-dodge}.bg-blend-darken{background-blend-mode:darken}.bg-blend-difference{background-blend-mode:difference}.bg-blend-exclusion{background-blend-mode:exclusion}.bg-blend-hard-light{background-blend-mode:hard-light}.bg-blend-hue{background-blend-mode:hue}.bg-blend-lighten{background-blend-mode:lighten}.bg-blend-luminosity{background-blend-mode:luminosity}.bg-blend-multiply{background-blend-mode:multiply}.bg-blend-normal{background-blend-mode:normal}.bg-blend-overlay{background-blend-mode:overlay}.bg-blend-saturation{background-blend-mode:saturation}.bg-blend-screen{background-blend-mode:screen}.bg-blend-soft-light{background-blend-mode:soft-light}.mix-blend-color{mix-blend-mode:color}.mix-blend-color-burn{mix-blend-mode:color-burn}.mix-blend-color-dodge{mix-blend-mode:color-dodge}.mix-blend-darken{mix-blend-mode:darken}.mix-blend-difference{mix-blend-mode:difference}.mix-blend-exclusion{mix-blend-mode:exclusion}.mix-blend-hard-light{mix-blend-mode:hard-light}.mix-blend-hue{mix-blend-mode:hue}.mix-blend-lighten{mix-blend-mode:lighten}.mix-blend-luminosity{mix-blend-mode:luminosity}.mix-blend-multiply{mix-blend-mode:multiply}.mix-blend-normal{mix-blend-mode:normal}.mix-blend-overlay{mix-blend-mode:overlay}.mix-blend-plus-darker{mix-blend-mode:plus-darker}.mix-blend-plus-lighter{mix-blend-mode:plus-lighter}.mix-blend-saturation{mix-blend-mode:saturation}.mix-blend-screen{mix-blend-mode:screen}.mix-blend-soft-light{mix-blend-mode:soft-light}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-8{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(8px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-black{--tw-ring-color:var(--color-black)}.ring-blue-50{--tw-ring-color:var(--color-blue-50)}.ring-blue-100{--tw-ring-color:var(--color-blue-100)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-300{--tw-ring-color:var(--color-blue-300)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-blue-600{--tw-ring-color:var(--color-blue-600)}.ring-blue-700{--tw-ring-color:var(--color-blue-700)}.ring-blue-800{--tw-ring-color:var(--color-blue-800)}.ring-blue-900{--tw-ring-color:var(--color-blue-900)}.ring-current{--tw-ring-color:currentcolor}.ring-gray-50{--tw-ring-color:var(--color-gray-50)}.ring-gray-100{--tw-ring-color:var(--color-gray-100)}.ring-gray-200{--tw-ring-color:var(--color-gray-200)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-gray-400{--tw-ring-color:var(--color-gray-400)}.ring-gray-500{--tw-ring-color:var(--color-gray-500)}.ring-gray-600{--tw-ring-color:var(--color-gray-600)}.ring-gray-700{--tw-ring-color:var(--color-gray-700)}.ring-gray-800{--tw-ring-color:var(--color-gray-800)}.ring-gray-900{--tw-ring-color:var(--color-gray-900)}.ring-inherit{--tw-ring-color:inherit}.ring-red-500{--tw-ring-color:var(--color-red-500)}.ring-slate-50{--tw-ring-color:var(--color-slate-50)}.ring-slate-100{--tw-ring-color:var(--color-slate-100)}.ring-slate-200{--tw-ring-color:var(--color-slate-200)}.ring-slate-300{--tw-ring-color:var(--color-slate-300)}.ring-slate-400{--tw-ring-color:var(--color-slate-400)}.ring-slate-500{--tw-ring-color:var(--color-slate-500)}.ring-slate-600{--tw-ring-color:var(--color-slate-600)}.ring-slate-700{--tw-ring-color:var(--color-slate-700)}.ring-slate-800{--tw-ring-color:var(--color-slate-800)}.ring-slate-900{--tw-ring-color:var(--color-slate-900)}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-offset-0{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-4{--tw-ring-offset-width:4px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-8{--tw-ring-offset-width:8px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-black{--tw-ring-offset-color:var(--color-black)}.ring-offset-current{--tw-ring-offset-color:currentcolor}.ring-offset-inherit{--tw-ring-offset-color:inherit}.ring-offset-transparent{--tw-ring-offset-color:transparent}.ring-offset-white{--tw-ring-offset-color:var(--color-white)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-0{outline-style:var(--tw-outline-style);outline-width:0}.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-2{outline-style:var(--tw-outline-style);outline-width:2px}.outline-4{outline-style:var(--tw-outline-style);outline-width:4px}.outline-8{outline-style:var(--tw-outline-style);outline-width:8px}.outline-offset-0{outline-offset:0px}.outline-offset-1{outline-offset:1px}.outline-offset-2{outline-offset:2px}.outline-offset-4{outline-offset:4px}.outline-offset-8{outline-offset:8px}.outline-black{outline-color:var(--color-black)}.outline-current{outline-color:currentColor}.outline-inherit{outline-color:inherit}.outline-transparent{outline-color:#0000}.outline-white{outline-color:var(--color-white)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-2xl{--tw-blur:blur(var(--blur-2xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-lg{--tw-blur:blur(var(--blur-lg));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-md{--tw-blur:blur(var(--blur-md));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-none{--tw-blur: ;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-sm{--tw-blur:blur(var(--blur-sm));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-xl{--tw-blur:blur(var(--blur-xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-0{--tw-brightness:brightness(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-50{--tw-brightness:brightness(50%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-75{--tw-brightness:brightness(75%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-90{--tw-brightness:brightness(90%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-95{--tw-brightness:brightness(95%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-100{--tw-brightness:brightness(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-105{--tw-brightness:brightness(105%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-110{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-125{--tw-brightness:brightness(125%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-150{--tw-brightness:brightness(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.brightness-200{--tw-brightness:brightness(200%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-0{--tw-contrast:contrast(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-50{--tw-contrast:contrast(50%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-75{--tw-contrast:contrast(75%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-100{--tw-contrast:contrast(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-125{--tw-contrast:contrast(125%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-150{--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.contrast-200{--tw-contrast:contrast(200%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-2xl{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-lg{--tw-drop-shadow-size:drop-shadow(0 4px 4px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-lg));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-md{--tw-drop-shadow-size:drop-shadow(0 3px 3px var(--tw-drop-shadow-color,#0000001f));--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-sm));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-xl{--tw-drop-shadow-size:drop-shadow(0 9px 7px var(--tw-drop-shadow-color,#0000001a));--tw-drop-shadow:drop-shadow(var(--drop-shadow-xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-none{--tw-drop-shadow: ;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.grayscale-0{--tw-grayscale:grayscale(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-15{--tw-hue-rotate:hue-rotate( -15deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-30{--tw-hue-rotate:hue-rotate( -30deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-60{--tw-hue-rotate:hue-rotate( -60deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-90{--tw-hue-rotate:hue-rotate( -90deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.-hue-rotate-180{--tw-hue-rotate:hue-rotate( -180deg );filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-0{--tw-hue-rotate:hue-rotate(0deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-15{--tw-hue-rotate:hue-rotate(15deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-30{--tw-hue-rotate:hue-rotate(30deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-60{--tw-hue-rotate:hue-rotate(60deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-90{--tw-hue-rotate:hue-rotate(90deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hue-rotate-180{--tw-hue-rotate:hue-rotate(180deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert-0{--tw-invert:invert(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-0{--tw-saturate:saturate(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-50{--tw-saturate:saturate(50%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-100{--tw-saturate:saturate(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-150{--tw-saturate:saturate(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.saturate-200{--tw-saturate:saturate(200%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.sepia-0{--tw-sepia:sepia(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-2xl{--tw-backdrop-blur:blur(var(--blur-2xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-3xl{--tw-backdrop-blur:blur(var(--blur-3xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-none{--tw-backdrop-blur: ;-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-0{--tw-backdrop-brightness:brightness(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-50{--tw-backdrop-brightness:brightness(50%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-75{--tw-backdrop-brightness:brightness(75%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-90{--tw-backdrop-brightness:brightness(90%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-95{--tw-backdrop-brightness:brightness(95%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-100{--tw-backdrop-brightness:brightness(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-105{--tw-backdrop-brightness:brightness(105%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-110{--tw-backdrop-brightness:brightness(110%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-125{--tw-backdrop-brightness:brightness(125%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-150{--tw-backdrop-brightness:brightness(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-brightness-200{--tw-backdrop-brightness:brightness(200%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-0{--tw-backdrop-contrast:contrast(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-50{--tw-backdrop-contrast:contrast(50%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-75{--tw-backdrop-contrast:contrast(75%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-100{--tw-backdrop-contrast:contrast(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-125{--tw-backdrop-contrast:contrast(125%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-150{--tw-backdrop-contrast:contrast(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-contrast-200{--tw-backdrop-contrast:contrast(200%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-grayscale-0{--tw-backdrop-grayscale:grayscale(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-0{--tw-backdrop-hue-rotate:hue-rotate(0deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-15{--tw-backdrop-hue-rotate:hue-rotate(15deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-30{--tw-backdrop-hue-rotate:hue-rotate(30deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-60{--tw-backdrop-hue-rotate:hue-rotate(60deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-90{--tw-backdrop-hue-rotate:hue-rotate(90deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-hue-rotate-180{--tw-backdrop-hue-rotate:hue-rotate(180deg);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-invert-0{--tw-backdrop-invert:invert(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-0{--tw-backdrop-opacity:opacity(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-5{--tw-backdrop-opacity:opacity(5%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-10{--tw-backdrop-opacity:opacity(10%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-20{--tw-backdrop-opacity:opacity(20%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-25{--tw-backdrop-opacity:opacity(25%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-30{--tw-backdrop-opacity:opacity(30%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-40{--tw-backdrop-opacity:opacity(40%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-50{--tw-backdrop-opacity:opacity(50%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-60{--tw-backdrop-opacity:opacity(60%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-70{--tw-backdrop-opacity:opacity(70%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-75{--tw-backdrop-opacity:opacity(75%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-80{--tw-backdrop-opacity:opacity(80%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-90{--tw-backdrop-opacity:opacity(90%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-95{--tw-backdrop-opacity:opacity(95%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-opacity-100{--tw-backdrop-opacity:opacity(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-0{--tw-backdrop-saturate:saturate(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-50{--tw-backdrop-saturate:saturate(50%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-100{--tw-backdrop-saturate:saturate(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-150{--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-saturate-200{--tw-backdrop-saturate:saturate(200%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-sepia-0{--tw-backdrop-sepia:sepia(0%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[max-height\]{transition-property:max-height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.delay-75{transition-delay:75ms}.delay-100{transition-delay:.1s}.delay-150{transition-delay:.15s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-500{transition-delay:.5s}.delay-700{transition-delay:.7s}.delay-1000{transition-delay:1s}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-dashed{--tw-outline-style:dashed;outline-style:dashed}.outline-dotted{--tw-outline-style:dotted;outline-style:dotted}.outline-double{--tw-outline-style:double;outline-style:double}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;user-select:auto}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.ring-inset{--tw-ring-inset:inset}@media(hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:translate-y-1:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:scale-100:is(:where(.group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:bg-black\/40:is(:where(.group):hover *){background-color:#0006}@supports (color:color-mix(in lab,red,red)){.group-hover\:bg-black\/40:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.group-hover\:bg-blue-100:is(:where(.group):hover *){background-color:var(--color-blue-100)}.group-hover\:bg-blue-500:is(:where(.group):hover *){background-color:var(--color-blue-500)}.group-hover\:bg-blue-600:is(:where(.group):hover *){background-color:var(--color-blue-600)}.group-hover\:bg-gray-100:is(:where(.group):hover *){background-color:var(--color-gray-100)}.group-hover\:bg-gray-200:is(:where(.group):hover *){background-color:var(--color-gray-200)}.group-hover\:bg-gray-700:is(:where(.group):hover *){background-color:var(--color-gray-700)}.group-hover\:bg-gray-800:is(:where(.group):hover *){background-color:var(--color-gray-800)}.group-hover\:text-black:is(:where(.group):hover *){color:var(--color-black)}.group-hover\:text-blue-500:is(:where(.group):hover *){color:var(--color-blue-500)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-blue-700:is(:where(.group):hover *){color:var(--color-blue-700)}.group-hover\:text-gray-700:is(:where(.group):hover *){color:var(--color-gray-700)}.group-hover\:text-gray-800:is(:where(.group):hover *){color:var(--color-gray-800)}.group-hover\:text-gray-900:is(:where(.group):hover *){color:var(--color-gray-900)}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-focus\:border-blue-500:is(:where(.group):focus *){border-color:var(--color-blue-500)}.group-focus\:ring-2:is(:where(.group):focus *){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.peer-checked\:border-blue-500:is(:where(.peer):checked~*){border-color:var(--color-blue-500)}.peer-checked\:bg-blue-500:is(:where(.peer):checked~*){background-color:var(--color-blue-500)}.peer-invalid\:border-red-500:is(:where(.peer):invalid~*){border-color:var(--color-red-500)}.peer-invalid\:text-red-500:is(:where(.peer):invalid~*){color:var(--color-red-500)}.peer-focus\:border-blue-500:is(:where(.peer):focus~*){border-color:var(--color-blue-500)}.peer-focus\:ring-2:is(:where(.peer):focus~*){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.first-letter\:text-2xl:first-letter{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.first-letter\:font-bold:first-letter{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.first-letter\:text-blue-600:first-letter{color:var(--color-blue-600)}.first-line\:font-semibold:first-line{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.first-line\:text-gray-700:first-line{color:var(--color-gray-700)}.marker\:text-blue-500 ::marker{color:var(--color-blue-500)}.marker\:text-blue-500::marker{color:var(--color-blue-500)}.marker\:text-blue-500 ::-webkit-details-marker{color:var(--color-blue-500)}.marker\:text-blue-500::-webkit-details-marker{color:var(--color-blue-500)}.marker\:text-gray-500 ::marker{color:var(--color-gray-500)}.marker\:text-gray-500::marker{color:var(--color-gray-500)}.marker\:text-gray-500 ::-webkit-details-marker{color:var(--color-gray-500)}.marker\:text-gray-500::-webkit-details-marker{color:var(--color-gray-500)}.selection\:bg-blue-200 ::selection{background-color:var(--color-blue-200)}.selection\:bg-blue-200::selection{background-color:var(--color-blue-200)}.selection\:text-blue-900 ::selection{color:var(--color-blue-900)}.selection\:text-blue-900::selection{color:var(--color-blue-900)}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing)*4)}.file\:cursor-pointer::file-selector-button{cursor:pointer}.file\:rounded-full::file-selector-button{border-radius:3.40282e38px}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-blue-50::file-selector-button{background-color:var(--color-blue-50)}.file\:px-4::file-selector-button{padding-inline:calc(var(--spacing)*4)}.file\:py-2::file-selector-button{padding-block:calc(var(--spacing)*2)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.file\:text-blue-700::file-selector-button{color:var(--color-blue-700)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-0:before{content:var(--tw-content);inset:calc(var(--spacing)*0)}.before\:block:before{content:var(--tw-content);display:block}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing)*0)}.after\:clear-both:after{content:var(--tw-content);clear:both}.after\:block:after{content:var(--tw-content);display:block}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-t-lg:first-child{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.first\:rounded-l-lg:first-child{border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first\:pt-0:first-child{padding-top:calc(var(--spacing)*0)}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\:rounded-r-lg:last-child{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.last\:rounded-b-lg:last-child{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing)*0)}.odd\:bg-gray-50:nth-child(odd){background-color:var(--color-gray-50)}.odd\:bg-gray-100:nth-child(odd){background-color:var(--color-gray-100)}.odd\:bg-white:nth-child(odd){background-color:var(--color-white)}.even\:bg-gray-50:nth-child(2n){background-color:var(--color-gray-50)}.even\:bg-gray-100:nth-child(2n){background-color:var(--color-gray-100)}.even\:bg-white:nth-child(2n){background-color:var(--color-white)}.checked\:border-blue-500:checked{border-color:var(--color-blue-500)}.checked\:border-blue-600:checked{border-color:var(--color-blue-600)}.checked\:bg-blue-500:checked{background-color:var(--color-blue-500)}.checked\:bg-blue-600:checked{background-color:var(--color-blue-600)}.checked\:bg-green-500:checked{background-color:var(--color-green-500)}.checked\:text-white:checked{color:var(--color-white)}.indeterminate\:border-gray-400:indeterminate{border-color:var(--color-gray-400)}.indeterminate\:bg-gray-300:indeterminate{background-color:var(--color-gray-300)}.placeholder-shown\:border-gray-300:placeholder-shown{border-color:var(--color-gray-300)}.autofill\:bg-yellow-100:autofill{background-color:var(--color-yellow-100)}.autofill\:text-black:autofill{color:var(--color-black)}.valid\:border-green-500:valid{border-color:var(--color-green-500)}.valid\:text-green-600:valid{color:var(--color-green-600)}.valid\:ring-green-500:valid{--tw-ring-color:var(--color-green-500)}.invalid\:border-red-500:invalid{border-color:var(--color-red-500)}.invalid\:text-red-600:invalid{color:var(--color-red-600)}.invalid\:ring-red-500:invalid{--tw-ring-color:var(--color-red-500)}.read-only\:cursor-not-allowed:read-only{cursor:not-allowed}.read-only\:bg-gray-50:read-only{background-color:var(--color-gray-50)}.read-only\:bg-gray-100:read-only{background-color:var(--color-gray-100)}.empty\:hidden:empty{display:none}.focus-within\:border-blue-500:focus-within{border-color:var(--color-blue-500)}.focus-within\:border-gray-500:focus-within{border-color:var(--color-gray-500)}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-blue-500:focus-within{--tw-ring-color:var(--color-blue-500)}.focus-within\:ring-gray-500:focus-within{--tw-ring-color:var(--color-gray-500)}@media(hover:hover){.hover\:scale-95:hover{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-blue-50:hover{border-color:var(--color-blue-50)}.hover\:border-blue-100:hover{border-color:var(--color-blue-100)}.hover\:border-blue-200:hover{border-color:var(--color-blue-200)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-blue-600:hover{border-color:var(--color-blue-600)}.hover\:border-blue-700:hover{border-color:var(--color-blue-700)}.hover\:border-blue-800:hover{border-color:var(--color-blue-800)}.hover\:border-blue-900:hover{border-color:var(--color-blue-900)}.hover\:border-gray-50:hover{border-color:var(--color-gray-50)}.hover\:border-gray-100:hover{border-color:var(--color-gray-100)}.hover\:border-gray-200:hover{border-color:var(--color-gray-200)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.hover\:border-gray-800:hover{border-color:var(--color-gray-800)}.hover\:border-gray-900:hover{border-color:var(--color-gray-900)}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-black\/10:hover{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/10:hover{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-100:hover{background-color:var(--color-blue-100)}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-300:hover{background-color:var(--color-blue-300)}.hover\:bg-blue-400:hover{background-color:var(--color-blue-400)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.hover\:bg-blue-900:hover{background-color:var(--color-blue-900)}.hover\:bg-emerald-600:hover{background-color:var(--color-emerald-600)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}.hover\:bg-gray-400:hover{background-color:var(--color-gray-400)}.hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.hover\:bg-green-50:hover{background-color:var(--color-green-50)}.hover\:bg-green-100:hover{background-color:var(--color-green-100)}.hover\:bg-green-200:hover{background-color:var(--color-green-200)}.hover\:bg-green-300:hover{background-color:var(--color-green-300)}.hover\:bg-green-400:hover{background-color:var(--color-green-400)}.hover\:bg-green-500:hover{background-color:var(--color-green-500)}.hover\:bg-green-600:hover{background-color:var(--color-green-600)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-green-800:hover{background-color:var(--color-green-800)}.hover\:bg-green-900:hover{background-color:var(--color-green-900)}.hover\:bg-indigo-50:hover{background-color:var(--color-indigo-50)}.hover\:bg-indigo-100:hover{background-color:var(--color-indigo-100)}.hover\:bg-indigo-200:hover{background-color:var(--color-indigo-200)}.hover\:bg-indigo-300:hover{background-color:var(--color-indigo-300)}.hover\:bg-indigo-400:hover{background-color:var(--color-indigo-400)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-indigo-600:hover{background-color:var(--color-indigo-600)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-indigo-800:hover{background-color:var(--color-indigo-800)}.hover\:bg-indigo-900:hover{background-color:var(--color-indigo-900)}.hover\:bg-orange-50:hover{background-color:var(--color-orange-50)}.hover\:bg-orange-100:hover{background-color:var(--color-orange-100)}.hover\:bg-orange-200:hover{background-color:var(--color-orange-200)}.hover\:bg-orange-300:hover{background-color:var(--color-orange-300)}.hover\:bg-orange-400:hover{background-color:var(--color-orange-400)}.hover\:bg-orange-500:hover{background-color:var(--color-orange-500)}.hover\:bg-orange-600:hover{background-color:var(--color-orange-600)}.hover\:bg-orange-700:hover{background-color:var(--color-orange-700)}.hover\:bg-orange-800:hover{background-color:var(--color-orange-800)}.hover\:bg-orange-900:hover{background-color:var(--color-orange-900)}.hover\:bg-pink-50:hover{background-color:var(--color-pink-50)}.hover\:bg-pink-100:hover{background-color:var(--color-pink-100)}.hover\:bg-pink-200:hover{background-color:var(--color-pink-200)}.hover\:bg-pink-300:hover{background-color:var(--color-pink-300)}.hover\:bg-pink-400:hover{background-color:var(--color-pink-400)}.hover\:bg-pink-500:hover{background-color:var(--color-pink-500)}.hover\:bg-pink-600:hover{background-color:var(--color-pink-600)}.hover\:bg-pink-700:hover{background-color:var(--color-pink-700)}.hover\:bg-pink-800:hover{background-color:var(--color-pink-800)}.hover\:bg-pink-900:hover{background-color:var(--color-pink-900)}.hover\:bg-primary-700:hover{background-color:var(--color-primary-700)}.hover\:bg-purple-50:hover{background-color:var(--color-purple-50)}.hover\:bg-purple-100:hover{background-color:var(--color-purple-100)}.hover\:bg-purple-200:hover{background-color:var(--color-purple-200)}.hover\:bg-purple-300:hover{background-color:var(--color-purple-300)}.hover\:bg-purple-400:hover{background-color:var(--color-purple-400)}.hover\:bg-purple-500:hover{background-color:var(--color-purple-500)}.hover\:bg-purple-600:hover{background-color:var(--color-purple-600)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-purple-800:hover{background-color:var(--color-purple-800)}.hover\:bg-purple-900:hover{background-color:var(--color-purple-900)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-200:hover{background-color:var(--color-red-200)}.hover\:bg-red-300:hover{background-color:var(--color-red-300)}.hover\:bg-red-400:hover{background-color:var(--color-red-400)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-red-800:hover{background-color:var(--color-red-800)}.hover\:bg-red-900:hover{background-color:var(--color-red-900)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.hover\:bg-slate-300:hover{background-color:var(--color-slate-300)}.hover\:bg-slate-400:hover{background-color:var(--color-slate-400)}.hover\:bg-slate-500:hover{background-color:var(--color-slate-500)}.hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}.hover\:bg-slate-900:hover{background-color:var(--color-slate-900)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/30:hover{background-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/30:hover{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\:bg-yellow-50:hover{background-color:var(--color-yellow-50)}.hover\:bg-yellow-100:hover{background-color:var(--color-yellow-100)}.hover\:bg-yellow-200:hover{background-color:var(--color-yellow-200)}.hover\:bg-yellow-300:hover{background-color:var(--color-yellow-300)}.hover\:bg-yellow-400:hover{background-color:var(--color-yellow-400)}.hover\:bg-yellow-500:hover{background-color:var(--color-yellow-500)}.hover\:bg-yellow-600:hover{background-color:var(--color-yellow-600)}.hover\:bg-yellow-700:hover{background-color:var(--color-yellow-700)}.hover\:bg-yellow-800:hover{background-color:var(--color-yellow-800)}.hover\:bg-yellow-900:hover{background-color:var(--color-yellow-900)}.hover\:text-black:hover{color:var(--color-black)}.hover\:text-blue-50:hover{color:var(--color-blue-50)}.hover\:text-blue-100:hover{color:var(--color-blue-100)}.hover\:text-blue-200:hover{color:var(--color-blue-200)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-blue-400:hover{color:var(--color-blue-400)}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-blue-900:hover{color:var(--color-blue-900)}.hover\:text-gray-50:hover{color:var(--color-gray-50)}.hover\:text-gray-100:hover{color:var(--color-gray-100)}.hover\:text-gray-200:hover{color:var(--color-gray-200)}.hover\:text-gray-300:hover{color:var(--color-gray-300)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-50:hover{color:var(--color-green-50)}.hover\:text-green-100:hover{color:var(--color-green-100)}.hover\:text-green-200:hover{color:var(--color-green-200)}.hover\:text-green-300:hover{color:var(--color-green-300)}.hover\:text-green-400:hover{color:var(--color-green-400)}.hover\:text-green-500:hover{color:var(--color-green-500)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-700:hover{color:var(--color-green-700)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-purple-50:hover{color:var(--color-purple-50)}.hover\:text-purple-100:hover{color:var(--color-purple-100)}.hover\:text-purple-200:hover{color:var(--color-purple-200)}.hover\:text-purple-300:hover{color:var(--color-purple-300)}.hover\:text-purple-400:hover{color:var(--color-purple-400)}.hover\:text-purple-500:hover{color:var(--color-purple-500)}.hover\:text-purple-600:hover{color:var(--color-purple-600)}.hover\:text-purple-700:hover{color:var(--color-purple-700)}.hover\:text-purple-800:hover{color:var(--color-purple-800)}.hover\:text-purple-900:hover{color:var(--color-purple-900)}.hover\:text-red-50:hover{color:var(--color-red-50)}.hover\:text-red-100:hover{color:var(--color-red-100)}.hover\:text-red-200:hover{color:var(--color-red-200)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-red-800:hover{color:var(--color-red-800)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-slate-50:hover{color:var(--color-slate-50)}.hover\:text-slate-100:hover{color:var(--color-slate-100)}.hover\:text-slate-200:hover{color:var(--color-slate-200)}.hover\:text-slate-300:hover{color:var(--color-slate-300)}.hover\:text-slate-400:hover{color:var(--color-slate-400)}.hover\:text-slate-500:hover{color:var(--color-slate-500)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-700:hover{color:var(--color-slate-700)}.hover\:text-slate-800:hover{color:var(--color-slate-800)}.hover\:text-slate-900:hover{color:var(--color-slate-900)}.hover\:text-white:hover{color:var(--color-white)}.hover\:line-through:hover{text-decoration-line:line-through}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-0:hover{opacity:0}.hover\:opacity-25:hover{opacity:.25}.hover\:opacity-50:hover{opacity:.5}.hover\:opacity-75:hover{opacity:.75}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-none:hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-0:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-1:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-4:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-8:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(8px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-blue-500:hover{--tw-ring-color:var(--color-blue-500)}.hover\:ring-gray-500:hover{--tw-ring-color:var(--color-gray-500)}.hover\:ring-green-500:hover{--tw-ring-color:var(--color-green-500)}.hover\:ring-red-500:hover{--tw-ring-color:var(--color-red-500)}.file\:hover\:bg-blue-100::file-selector-button:hover{background-color:var(--color-blue-100)}}.focus\:border-blue-50:focus{border-color:var(--color-blue-50)}.focus\:border-blue-100:focus{border-color:var(--color-blue-100)}.focus\:border-blue-200:focus{border-color:var(--color-blue-200)}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-400:focus{border-color:var(--color-blue-400)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-blue-600:focus{border-color:var(--color-blue-600)}.focus\:border-blue-700:focus{border-color:var(--color-blue-700)}.focus\:border-blue-800:focus{border-color:var(--color-blue-800)}.focus\:border-blue-900:focus{border-color:var(--color-blue-900)}.focus\:border-gray-50:focus{border-color:var(--color-gray-50)}.focus\:border-gray-100:focus{border-color:var(--color-gray-100)}.focus\:border-gray-200:focus{border-color:var(--color-gray-200)}.focus\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\:border-gray-400:focus{border-color:var(--color-gray-400)}.focus\:border-gray-500:focus{border-color:var(--color-gray-500)}.focus\:border-gray-600:focus{border-color:var(--color-gray-600)}.focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.focus\:border-gray-800:focus{border-color:var(--color-gray-800)}.focus\:border-gray-900:focus{border-color:var(--color-gray-900)}.focus\:border-green-500:focus{border-color:var(--color-green-500)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-purple-500:focus{border-color:var(--color-purple-500)}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:border-transparent:focus{border-color:#0000}.focus\:border-yellow-500:focus{border-color:var(--color-yellow-500)}.focus\:bg-black:focus{background-color:var(--color-black)}.focus\:bg-blue-50:focus{background-color:var(--color-blue-50)}.focus\:bg-blue-100:focus{background-color:var(--color-blue-100)}.focus\:bg-blue-200:focus{background-color:var(--color-blue-200)}.focus\:bg-blue-300:focus{background-color:var(--color-blue-300)}.focus\:bg-blue-400:focus{background-color:var(--color-blue-400)}.focus\:bg-blue-500:focus{background-color:var(--color-blue-500)}.focus\:bg-blue-600:focus{background-color:var(--color-blue-600)}.focus\:bg-blue-700:focus{background-color:var(--color-blue-700)}.focus\:bg-blue-800:focus{background-color:var(--color-blue-800)}.focus\:bg-blue-900:focus{background-color:var(--color-blue-900)}.focus\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\:bg-gray-100:focus{background-color:var(--color-gray-100)}.focus\:bg-gray-200:focus{background-color:var(--color-gray-200)}.focus\:bg-gray-300:focus{background-color:var(--color-gray-300)}.focus\:bg-gray-400:focus{background-color:var(--color-gray-400)}.focus\:bg-gray-500:focus{background-color:var(--color-gray-500)}.focus\:bg-gray-600:focus{background-color:var(--color-gray-600)}.focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.focus\:bg-transparent:focus{background-color:#0000}.focus\:bg-white:focus{background-color:var(--color-white)}.focus\:text-black:focus{color:var(--color-black)}.focus\:text-blue-50:focus{color:var(--color-blue-50)}.focus\:text-blue-100:focus{color:var(--color-blue-100)}.focus\:text-blue-200:focus{color:var(--color-blue-200)}.focus\:text-blue-300:focus{color:var(--color-blue-300)}.focus\:text-blue-400:focus{color:var(--color-blue-400)}.focus\:text-blue-500:focus{color:var(--color-blue-500)}.focus\:text-blue-600:focus{color:var(--color-blue-600)}.focus\:text-blue-700:focus{color:var(--color-blue-700)}.focus\:text-blue-800:focus{color:var(--color-blue-800)}.focus\:text-blue-900:focus{color:var(--color-blue-900)}.focus\:text-gray-50:focus{color:var(--color-gray-50)}.focus\:text-gray-100:focus{color:var(--color-gray-100)}.focus\:text-gray-200:focus{color:var(--color-gray-200)}.focus\:text-gray-300:focus{color:var(--color-gray-300)}.focus\:text-gray-400:focus{color:var(--color-gray-400)}.focus\:text-gray-500:focus{color:var(--color-gray-500)}.focus\:text-gray-600:focus{color:var(--color-gray-600)}.focus\:text-gray-700:focus{color:var(--color-gray-700)}.focus\:text-gray-800:focus{color:var(--color-gray-800)}.focus\:text-gray-900:focus{color:var(--color-gray-900)}.focus\:text-white:focus{color:var(--color-white)}.focus\:shadow:focus{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-lg:focus{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-md:focus{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-none:focus{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-sm:focus{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:shadow-xl:focus{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-4:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-8:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(8px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-amber-500:focus{--tw-ring-color:var(--color-amber-500)}.focus\:ring-blue-50:focus{--tw-ring-color:var(--color-blue-50)}.focus\:ring-blue-100:focus{--tw-ring-color:var(--color-blue-100)}.focus\:ring-blue-200:focus{--tw-ring-color:var(--color-blue-200)}.focus\:ring-blue-300:focus{--tw-ring-color:var(--color-blue-300)}.focus\:ring-blue-400:focus{--tw-ring-color:var(--color-blue-400)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-blue-600:focus{--tw-ring-color:var(--color-blue-600)}.focus\:ring-blue-700:focus{--tw-ring-color:var(--color-blue-700)}.focus\:ring-blue-800:focus{--tw-ring-color:var(--color-blue-800)}.focus\:ring-blue-900:focus{--tw-ring-color:var(--color-blue-900)}.focus\:ring-current:focus{--tw-ring-color:currentcolor}.focus\:ring-gray-50:focus{--tw-ring-color:var(--color-gray-50)}.focus\:ring-gray-100:focus{--tw-ring-color:var(--color-gray-100)}.focus\:ring-gray-200:focus{--tw-ring-color:var(--color-gray-200)}.focus\:ring-gray-300:focus{--tw-ring-color:var(--color-gray-300)}.focus\:ring-gray-400:focus{--tw-ring-color:var(--color-gray-400)}.focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.focus\:ring-gray-600:focus{--tw-ring-color:var(--color-gray-600)}.focus\:ring-gray-700:focus{--tw-ring-color:var(--color-gray-700)}.focus\:ring-gray-800:focus{--tw-ring-color:var(--color-gray-800)}.focus\:ring-gray-900:focus{--tw-ring-color:var(--color-gray-900)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-primary-500:focus{--tw-ring-color:var(--color-primary-500)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-transparent:focus{--tw-ring-color:transparent}.focus\:ring-yellow-500:focus{--tw-ring-color:var(--color-yellow-500)}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-1:focus{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-4:focus{--tw-ring-offset-width:4px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-gray-100:focus{--tw-ring-offset-color:var(--color-gray-100)}.focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}.focus\:ring-offset-white:focus{--tw-ring-offset-color:var(--color-white)}.focus\:outline:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-0:focus{outline-style:var(--tw-outline-style);outline-width:0}.focus\:outline-1:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:outline-4:focus{outline-style:var(--tw-outline-style);outline-width:4px}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\:ring-inset:focus{--tw-ring-inset:inset}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-blue-500:focus-visible{--tw-ring-color:var(--color-blue-500)}.focus-visible\:ring-gray-500:focus-visible{--tw-ring-color:var(--color-gray-500)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.active\:scale-100:active{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-blue-600:active{background-color:var(--color-blue-600)}.active\:bg-blue-700:active{background-color:var(--color-blue-700)}.active\:bg-blue-800:active{background-color:var(--color-blue-800)}.active\:bg-gray-100:active{background-color:var(--color-gray-100)}.active\:bg-gray-200:active{background-color:var(--color-gray-200)}.active\:bg-gray-300:active{background-color:var(--color-gray-300)}.active\:bg-gray-700:active{background-color:var(--color-gray-700)}.active\:bg-gray-800:active{background-color:var(--color-gray-800)}.active\:bg-green-600:active{background-color:var(--color-green-600)}.active\:bg-green-700:active{background-color:var(--color-green-700)}.active\:bg-red-600:active{background-color:var(--color-red-600)}.active\:bg-red-700:active{background-color:var(--color-red-700)}.active\:opacity-75:active{opacity:.75}.active\:opacity-100:active{opacity:1}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-200:disabled{border-color:var(--color-gray-200)}.disabled\:border-gray-300:disabled{border-color:var(--color-gray-300)}.disabled\:bg-gray-100:disabled{background-color:var(--color-gray-100)}.disabled\:bg-gray-200:disabled{background-color:var(--color-gray-200)}.disabled\:bg-gray-300:disabled{background-color:var(--color-gray-300)}.disabled\:text-gray-300:disabled{color:var(--color-gray-300)}.disabled\:text-gray-400:disabled{color:var(--color-gray-400)}.disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\:no-underline:disabled{text-decoration-line:none}.disabled\:opacity-20:disabled{opacity:.2}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-75:disabled{opacity:.75}@media(min-width:40rem){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-12{grid-column:span 12/span 12}.sm\:col-span-full{grid-column:1/-1}.sm\:m-0{margin:calc(var(--spacing)*0)}.sm\:m-1{margin:calc(var(--spacing)*1)}.sm\:m-2{margin:calc(var(--spacing)*2)}.sm\:m-3{margin:calc(var(--spacing)*3)}.sm\:m-4{margin:calc(var(--spacing)*4)}.sm\:m-auto{margin:auto}.sm\:mx-auto{margin-inline:auto}.sm\:my-auto{margin-block:auto}.sm\:ml-auto{margin-left:auto}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-block{display:inline-block}.sm\:inline-flex{display:inline-flex}.sm\:w-1\/2{width:50%}.sm\:w-1\/3{width:33.3333%}.sm\:w-1\/4{width:25%}.sm\:w-2\/3{width:66.6667%}.sm\:w-3\/4{width:75%}.sm\:w-64{width:calc(var(--spacing)*64)}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:min-w-48{min-width:calc(var(--spacing)*48)}.sm\:auto-cols-\[calc\(33\.333\%_-_11px\)\]{grid-auto-columns:calc(33.333% - 11px)}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}.sm\:gap-0{gap:calc(var(--spacing)*0)}.sm\:gap-1{gap:calc(var(--spacing)*1)}.sm\:gap-2{gap:calc(var(--spacing)*2)}.sm\:gap-3{gap:calc(var(--spacing)*3)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-5{gap:calc(var(--spacing)*5)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}:where(.sm\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.sm\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.sm\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.sm\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}.sm\:p-0{padding:calc(var(--spacing)*0)}.sm\:p-1{padding:calc(var(--spacing)*1)}.sm\:p-2{padding:calc(var(--spacing)*2)}.sm\:p-3{padding:calc(var(--spacing)*3)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-5{padding:calc(var(--spacing)*5)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:px-0{padding-inline:calc(var(--spacing)*0)}.sm\:px-1{padding-inline:calc(var(--spacing)*1)}.sm\:px-2{padding-inline:calc(var(--spacing)*2)}.sm\:px-3{padding-inline:calc(var(--spacing)*3)}.sm\:px-4{padding-inline:calc(var(--spacing)*4)}.sm\:px-5{padding-inline:calc(var(--spacing)*5)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-8{padding-inline:calc(var(--spacing)*8)}.sm\:py-0{padding-block:calc(var(--spacing)*0)}.sm\:py-1{padding-block:calc(var(--spacing)*1)}.sm\:py-2{padding-block:calc(var(--spacing)*2)}.sm\:py-3{padding-block:calc(var(--spacing)*3)}.sm\:py-4{padding-block:calc(var(--spacing)*4)}.sm\:py-5{padding-block:calc(var(--spacing)*5)}.sm\:py-6{padding-block:calc(var(--spacing)*6)}.sm\:py-8{padding-block:calc(var(--spacing)*8)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:48rem){.md\:absolute{position:absolute}.md\:fixed{position:fixed}.md\:relative{position:relative}.md\:static{position:static}.md\:sticky{position:sticky}.md\:inset-0{inset:calc(var(--spacing)*0)}.md\:top-0{top:calc(var(--spacing)*0)}.md\:right-0{right:calc(var(--spacing)*0)}.md\:bottom-0{bottom:calc(var(--spacing)*0)}.md\:left-0{left:calc(var(--spacing)*0)}.md\:order-1{order:1}.md\:order-2{order:2}.md\:order-3{order:3}.md\:order-first{order:-9999}.md\:order-last{order:9999}.md\:order-none{order:0}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-12{grid-column:span 12/span 12}.md\:col-span-full{grid-column:1/-1}.md\:row-span-1{grid-row:span 1/span 1}.md\:row-span-2{grid-row:span 2/span 2}.md\:row-span-3{grid-row:span 3/span 3}.md\:row-span-4{grid-row:span 4/span 4}.md\:row-span-full{grid-row:1/-1}.md\:m-0{margin:calc(var(--spacing)*0)}.md\:m-1{margin:calc(var(--spacing)*1)}.md\:m-2{margin:calc(var(--spacing)*2)}.md\:m-3{margin:calc(var(--spacing)*3)}.md\:m-4{margin:calc(var(--spacing)*4)}.md\:m-auto{margin:auto}.md\:mx-auto{margin-inline:auto}.md\:my-auto{margin-block:auto}.md\:mt-0{margin-top:calc(var(--spacing)*0)}.md\:mt-1{margin-top:calc(var(--spacing)*1)}.md\:mt-2{margin-top:calc(var(--spacing)*2)}.md\:mt-3{margin-top:calc(var(--spacing)*3)}.md\:mt-4{margin-top:calc(var(--spacing)*4)}.md\:mt-6{margin-top:calc(var(--spacing)*6)}.md\:mt-8{margin-top:calc(var(--spacing)*8)}.md\:mr-0{margin-right:calc(var(--spacing)*0)}.md\:mr-1{margin-right:calc(var(--spacing)*1)}.md\:mr-2{margin-right:calc(var(--spacing)*2)}.md\:mr-3{margin-right:calc(var(--spacing)*3)}.md\:mr-4{margin-right:calc(var(--spacing)*4)}.md\:mr-6{margin-right:calc(var(--spacing)*6)}.md\:mr-8{margin-right:calc(var(--spacing)*8)}.md\:mr-auto{margin-right:auto}.md\:mb-0{margin-bottom:calc(var(--spacing)*0)}.md\:mb-1{margin-bottom:calc(var(--spacing)*1)}.md\:mb-2{margin-bottom:calc(var(--spacing)*2)}.md\:mb-3{margin-bottom:calc(var(--spacing)*3)}.md\:mb-4{margin-bottom:calc(var(--spacing)*4)}.md\:mb-6{margin-bottom:calc(var(--spacing)*6)}.md\:mb-8{margin-bottom:calc(var(--spacing)*8)}.md\:ml-0{margin-left:calc(var(--spacing)*0)}.md\:ml-1{margin-left:calc(var(--spacing)*1)}.md\:ml-2{margin-left:calc(var(--spacing)*2)}.md\:ml-3{margin-left:calc(var(--spacing)*3)}.md\:ml-4{margin-left:calc(var(--spacing)*4)}.md\:ml-6{margin-left:calc(var(--spacing)*6)}.md\:ml-8{margin-left:calc(var(--spacing)*8)}.md\:ml-auto{margin-left:auto}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:inline{display:inline}.md\:inline-block{display:inline-block}.md\:inline-flex{display:inline-flex}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.3333%}.md\:w-1\/4{width:25%}.md\:w-1\/5{width:20%}.md\:w-2\/3{width:66.6667%}.md\:w-2\/5{width:40%}.md\:w-3\/4{width:75%}.md\:w-3\/5{width:60%}.md\:w-4\/5{width:80%}.md\:w-auto{width:auto}.md\:w-full{width:100%}.md\:max-w-2xl{max-width:var(--container-2xl)}.md\:max-w-3xl{max-width:var(--container-3xl)}.md\:max-w-4xl{max-width:var(--container-4xl)}.md\:max-w-5xl{max-width:var(--container-5xl)}.md\:max-w-6xl{max-width:var(--container-6xl)}.md\:max-w-7xl{max-width:var(--container-7xl)}.md\:max-w-full{max-width:100%}.md\:max-w-lg{max-width:var(--container-lg)}.md\:max-w-md{max-width:var(--container-md)}.md\:max-w-none{max-width:none}.md\:max-w-sm{max-width:var(--container-sm)}.md\:max-w-xl{max-width:var(--container-xl)}.md\:max-w-xs{max-width:var(--container-xs)}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.md\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.md\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.md\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.md\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.md\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.md\:flex-col{flex-direction:column}.md\:flex-row{flex-direction:row}.md\:items-baseline{align-items:baseline}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:items-stretch{align-items:stretch}.md\:justify-around{justify-content:space-around}.md\:justify-between{justify-content:space-between}.md\:justify-center{justify-content:center}.md\:justify-end{justify-content:flex-end}.md\:justify-start{justify-content:flex-start}.md\:gap-0{gap:calc(var(--spacing)*0)}.md\:gap-1{gap:calc(var(--spacing)*1)}.md\:gap-2{gap:calc(var(--spacing)*2)}.md\:gap-3{gap:calc(var(--spacing)*3)}.md\:gap-4{gap:calc(var(--spacing)*4)}.md\:gap-5{gap:calc(var(--spacing)*5)}.md\:gap-6{gap:calc(var(--spacing)*6)}.md\:gap-8{gap:calc(var(--spacing)*8)}.md\:gap-10{gap:calc(var(--spacing)*10)}.md\:gap-12{gap:calc(var(--spacing)*12)}:where(.md\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.md\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.md\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}.md\:p-0{padding:calc(var(--spacing)*0)}.md\:p-1{padding:calc(var(--spacing)*1)}.md\:p-2{padding:calc(var(--spacing)*2)}.md\:p-3{padding:calc(var(--spacing)*3)}.md\:p-4{padding:calc(var(--spacing)*4)}.md\:p-5{padding:calc(var(--spacing)*5)}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:p-12{padding:calc(var(--spacing)*12)}.md\:px-0{padding-inline:calc(var(--spacing)*0)}.md\:px-1{padding-inline:calc(var(--spacing)*1)}.md\:px-2{padding-inline:calc(var(--spacing)*2)}.md\:px-3{padding-inline:calc(var(--spacing)*3)}.md\:px-4{padding-inline:calc(var(--spacing)*4)}.md\:px-5{padding-inline:calc(var(--spacing)*5)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:px-8{padding-inline:calc(var(--spacing)*8)}.md\:px-10{padding-inline:calc(var(--spacing)*10)}.md\:px-12{padding-inline:calc(var(--spacing)*12)}.md\:py-0{padding-block:calc(var(--spacing)*0)}.md\:py-1{padding-block:calc(var(--spacing)*1)}.md\:py-2{padding-block:calc(var(--spacing)*2)}.md\:py-3{padding-block:calc(var(--spacing)*3)}.md\:py-4{padding-block:calc(var(--spacing)*4)}.md\:py-5{padding-block:calc(var(--spacing)*5)}.md\:py-6{padding-block:calc(var(--spacing)*6)}.md\:py-8{padding-block:calc(var(--spacing)*8)}.md\:py-10{padding-block:calc(var(--spacing)*10)}.md\:py-12{padding-block:calc(var(--spacing)*12)}.md\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.md\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:64rem){.lg\:absolute{position:absolute}.lg\:fixed{position:fixed}.lg\:relative{position:relative}.lg\:static{position:static}.lg\:sticky{position:sticky}.lg\:inset-0{inset:calc(var(--spacing)*0)}.lg\:top-0{top:calc(var(--spacing)*0)}.lg\:right-0{right:calc(var(--spacing)*0)}.lg\:bottom-0{bottom:calc(var(--spacing)*0)}.lg\:left-0{left:calc(var(--spacing)*0)}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-3{order:3}.lg\:order-4{order:4}.lg\:order-first{order:-9999}.lg\:order-last{order:9999}.lg\:order-none{order:0}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:col-span-full{grid-column:1/-1}.lg\:row-span-1{grid-row:span 1/span 1}.lg\:row-span-2{grid-row:span 2/span 2}.lg\:row-span-3{grid-row:span 3/span 3}.lg\:row-span-4{grid-row:span 4/span 4}.lg\:row-span-full{grid-row:1/-1}.lg\:m-0{margin:calc(var(--spacing)*0)}.lg\:m-1{margin:calc(var(--spacing)*1)}.lg\:m-2{margin:calc(var(--spacing)*2)}.lg\:m-3{margin:calc(var(--spacing)*3)}.lg\:m-4{margin:calc(var(--spacing)*4)}.lg\:m-auto{margin:auto}.lg\:mx-auto{margin-inline:auto}.lg\:my-auto{margin-block:auto}.lg\:mt-0{margin-top:calc(var(--spacing)*0)}.lg\:mt-1{margin-top:calc(var(--spacing)*1)}.lg\:mt-2{margin-top:calc(var(--spacing)*2)}.lg\:mt-3{margin-top:calc(var(--spacing)*3)}.lg\:mt-4{margin-top:calc(var(--spacing)*4)}.lg\:mt-6{margin-top:calc(var(--spacing)*6)}.lg\:mt-8{margin-top:calc(var(--spacing)*8)}.lg\:mt-10{margin-top:calc(var(--spacing)*10)}.lg\:mt-12{margin-top:calc(var(--spacing)*12)}.lg\:mr-0{margin-right:calc(var(--spacing)*0)}.lg\:mr-1{margin-right:calc(var(--spacing)*1)}.lg\:mr-2{margin-right:calc(var(--spacing)*2)}.lg\:mr-3{margin-right:calc(var(--spacing)*3)}.lg\:mr-4{margin-right:calc(var(--spacing)*4)}.lg\:mr-6{margin-right:calc(var(--spacing)*6)}.lg\:mr-8{margin-right:calc(var(--spacing)*8)}.lg\:mr-auto{margin-right:auto}.lg\:mb-0{margin-bottom:calc(var(--spacing)*0)}.lg\:mb-1{margin-bottom:calc(var(--spacing)*1)}.lg\:mb-2{margin-bottom:calc(var(--spacing)*2)}.lg\:mb-3{margin-bottom:calc(var(--spacing)*3)}.lg\:mb-4{margin-bottom:calc(var(--spacing)*4)}.lg\:mb-6{margin-bottom:calc(var(--spacing)*6)}.lg\:mb-8{margin-bottom:calc(var(--spacing)*8)}.lg\:mb-10{margin-bottom:calc(var(--spacing)*10)}.lg\:mb-12{margin-bottom:calc(var(--spacing)*12)}.lg\:ml-0{margin-left:calc(var(--spacing)*0)}.lg\:ml-1{margin-left:calc(var(--spacing)*1)}.lg\:ml-2{margin-left:calc(var(--spacing)*2)}.lg\:ml-3{margin-left:calc(var(--spacing)*3)}.lg\:ml-4{margin-left:calc(var(--spacing)*4)}.lg\:ml-6{margin-left:calc(var(--spacing)*6)}.lg\:ml-8{margin-left:calc(var(--spacing)*8)}.lg\:ml-auto{margin-left:auto}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline{display:inline}.lg\:inline-block{display:inline-block}.lg\:inline-flex{display:inline-flex}.lg\:w-1\/2{width:50%}.lg\:w-1\/3{width:33.3333%}.lg\:w-1\/4{width:25%}.lg\:w-1\/5{width:20%}.lg\:w-1\/6{width:16.6667%}.lg\:w-2\/3{width:66.6667%}.lg\:w-2\/5{width:40%}.lg\:w-3\/4{width:75%}.lg\:w-3\/5{width:60%}.lg\:w-4\/5{width:80%}.lg\:w-5\/6{width:83.3333%}.lg\:w-auto{width:auto}.lg\:w-full{width:100%}.lg\:max-w-2xl{max-width:var(--container-2xl)}.lg\:max-w-3xl{max-width:var(--container-3xl)}.lg\:max-w-4xl{max-width:var(--container-4xl)}.lg\:max-w-5xl{max-width:var(--container-5xl)}.lg\:max-w-6xl{max-width:var(--container-6xl)}.lg\:max-w-7xl{max-width:var(--container-7xl)}.lg\:max-w-full{max-width:100%}.lg\:max-w-lg{max-width:var(--container-lg)}.lg\:max-w-md{max-width:var(--container-md)}.lg\:max-w-none{max-width:none}.lg\:max-w-sm{max-width:var(--container-sm)}.lg\:max-w-xl{max-width:var(--container-xl)}.lg\:max-w-xs{max-width:var(--container-xs)}.lg\:auto-cols-\[calc\(25\%_-_12px\)\]{grid-auto-columns:calc(25% - 12px)}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.lg\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.lg\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.lg\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.lg\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.lg\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:flex-row{flex-direction:row}.lg\:items-baseline{align-items:baseline}.lg\:items-center{align-items:center}.lg\:items-end{align-items:flex-end}.lg\:items-start{align-items:flex-start}.lg\:items-stretch{align-items:stretch}.lg\:justify-around{justify-content:space-around}.lg\:justify-between{justify-content:space-between}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:justify-evenly{justify-content:space-evenly}.lg\:justify-start{justify-content:flex-start}.lg\:gap-0{gap:calc(var(--spacing)*0)}.lg\:gap-1{gap:calc(var(--spacing)*1)}.lg\:gap-2{gap:calc(var(--spacing)*2)}.lg\:gap-3{gap:calc(var(--spacing)*3)}.lg\:gap-4{gap:calc(var(--spacing)*4)}.lg\:gap-5{gap:calc(var(--spacing)*5)}.lg\:gap-6{gap:calc(var(--spacing)*6)}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:gap-10{gap:calc(var(--spacing)*10)}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:gap-16{gap:calc(var(--spacing)*16)}:where(.lg\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.lg\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}:where(.lg\:space-x-10>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*10)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-x-reverse)))}.lg\:p-0{padding:calc(var(--spacing)*0)}.lg\:p-1{padding:calc(var(--spacing)*1)}.lg\:p-2{padding:calc(var(--spacing)*2)}.lg\:p-3{padding:calc(var(--spacing)*3)}.lg\:p-4{padding:calc(var(--spacing)*4)}.lg\:p-5{padding:calc(var(--spacing)*5)}.lg\:p-6{padding:calc(var(--spacing)*6)}.lg\:p-8{padding:calc(var(--spacing)*8)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:p-12{padding:calc(var(--spacing)*12)}.lg\:p-16{padding:calc(var(--spacing)*16)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:px-1{padding-inline:calc(var(--spacing)*1)}.lg\:px-2{padding-inline:calc(var(--spacing)*2)}.lg\:px-3{padding-inline:calc(var(--spacing)*3)}.lg\:px-4{padding-inline:calc(var(--spacing)*4)}.lg\:px-5{padding-inline:calc(var(--spacing)*5)}.lg\:px-6{padding-inline:calc(var(--spacing)*6)}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:px-10{padding-inline:calc(var(--spacing)*10)}.lg\:px-12{padding-inline:calc(var(--spacing)*12)}.lg\:px-16{padding-inline:calc(var(--spacing)*16)}.lg\:py-0{padding-block:calc(var(--spacing)*0)}.lg\:py-1{padding-block:calc(var(--spacing)*1)}.lg\:py-2{padding-block:calc(var(--spacing)*2)}.lg\:py-3{padding-block:calc(var(--spacing)*3)}.lg\:py-4{padding-block:calc(var(--spacing)*4)}.lg\:py-5{padding-block:calc(var(--spacing)*5)}.lg\:py-6{padding-block:calc(var(--spacing)*6)}.lg\:py-8{padding-block:calc(var(--spacing)*8)}.lg\:py-10{padding-block:calc(var(--spacing)*10)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:py-16{padding-block:calc(var(--spacing)*16)}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:80rem){.xl\:col-span-1{grid-column:span 1/span 1}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-6{grid-column:span 6/span 6}.xl\:col-span-12{grid-column:span 12/span 12}.xl\:col-span-full{grid-column:1/-1}.xl\:row-span-1{grid-row:span 1/span 1}.xl\:row-span-2{grid-row:span 2/span 2}.xl\:row-span-3{grid-row:span 3/span 3}.xl\:row-span-full{grid-row:1/-1}.xl\:m-0{margin:calc(var(--spacing)*0)}.xl\:m-auto{margin:auto}.xl\:mx-auto{margin-inline:auto}.xl\:my-auto{margin-block:auto}.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:inline{display:inline}.xl\:inline-block{display:inline-block}.xl\:inline-flex{display:inline-flex}.xl\:w-1\/2{width:50%}.xl\:w-1\/3{width:33.3333%}.xl\:w-1\/4{width:25%}.xl\:w-1\/5{width:20%}.xl\:w-2\/3{width:66.6667%}.xl\:w-2\/5{width:40%}.xl\:w-3\/4{width:75%}.xl\:w-3\/5{width:60%}.xl\:w-4\/5{width:80%}.xl\:w-auto{width:auto}.xl\:w-full{width:100%}.xl\:max-w-2xl{max-width:var(--container-2xl)}.xl\:max-w-3xl{max-width:var(--container-3xl)}.xl\:max-w-4xl{max-width:var(--container-4xl)}.xl\:max-w-5xl{max-width:var(--container-5xl)}.xl\:max-w-6xl{max-width:var(--container-6xl)}.xl\:max-w-7xl{max-width:var(--container-7xl)}.xl\:max-w-full{max-width:100%}.xl\:max-w-lg{max-width:var(--container-lg)}.xl\:max-w-md{max-width:var(--container-md)}.xl\:max-w-none{max-width:none}.xl\:max-w-sm{max-width:var(--container-sm)}.xl\:max-w-xl{max-width:var(--container-xl)}.xl\:max-w-xs{max-width:var(--container-xs)}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.xl\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.xl\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.xl\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.xl\:flex-col{flex-direction:column}.xl\:flex-row{flex-direction:row}.xl\:items-center{align-items:center}.xl\:items-end{align-items:flex-end}.xl\:items-start{align-items:flex-start}.xl\:justify-between{justify-content:space-between}.xl\:justify-center{justify-content:center}.xl\:justify-end{justify-content:flex-end}.xl\:justify-start{justify-content:flex-start}.xl\:gap-0{gap:calc(var(--spacing)*0)}.xl\:gap-1{gap:calc(var(--spacing)*1)}.xl\:gap-2{gap:calc(var(--spacing)*2)}.xl\:gap-3{gap:calc(var(--spacing)*3)}.xl\:gap-4{gap:calc(var(--spacing)*4)}.xl\:gap-5{gap:calc(var(--spacing)*5)}.xl\:gap-6{gap:calc(var(--spacing)*6)}.xl\:gap-8{gap:calc(var(--spacing)*8)}.xl\:gap-10{gap:calc(var(--spacing)*10)}.xl\:gap-12{gap:calc(var(--spacing)*12)}.xl\:gap-16{gap:calc(var(--spacing)*16)}:where(.xl\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.xl\:space-x-0>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*0)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*6)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-x-reverse)))}:where(.xl\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*8)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-x-reverse)))}.xl\:p-0{padding:calc(var(--spacing)*0)}.xl\:p-1{padding:calc(var(--spacing)*1)}.xl\:p-2{padding:calc(var(--spacing)*2)}.xl\:p-3{padding:calc(var(--spacing)*3)}.xl\:p-4{padding:calc(var(--spacing)*4)}.xl\:p-5{padding:calc(var(--spacing)*5)}.xl\:p-6{padding:calc(var(--spacing)*6)}.xl\:p-8{padding:calc(var(--spacing)*8)}.xl\:p-10{padding:calc(var(--spacing)*10)}.xl\:p-12{padding:calc(var(--spacing)*12)}.xl\:p-16{padding:calc(var(--spacing)*16)}.xl\:px-0{padding-inline:calc(var(--spacing)*0)}.xl\:px-1{padding-inline:calc(var(--spacing)*1)}.xl\:px-2{padding-inline:calc(var(--spacing)*2)}.xl\:px-3{padding-inline:calc(var(--spacing)*3)}.xl\:px-4{padding-inline:calc(var(--spacing)*4)}.xl\:px-5{padding-inline:calc(var(--spacing)*5)}.xl\:px-6{padding-inline:calc(var(--spacing)*6)}.xl\:px-8{padding-inline:calc(var(--spacing)*8)}.xl\:px-10{padding-inline:calc(var(--spacing)*10)}.xl\:px-12{padding-inline:calc(var(--spacing)*12)}.xl\:px-16{padding-inline:calc(var(--spacing)*16)}.xl\:py-0{padding-block:calc(var(--spacing)*0)}.xl\:py-1{padding-block:calc(var(--spacing)*1)}.xl\:py-2{padding-block:calc(var(--spacing)*2)}.xl\:py-3{padding-block:calc(var(--spacing)*3)}.xl\:py-4{padding-block:calc(var(--spacing)*4)}.xl\:py-5{padding-block:calc(var(--spacing)*5)}.xl\:py-6{padding-block:calc(var(--spacing)*6)}.xl\:py-8{padding-block:calc(var(--spacing)*8)}.xl\:py-10{padding-block:calc(var(--spacing)*10)}.xl\:py-12{padding-block:calc(var(--spacing)*12)}.xl\:py-16{padding-block:calc(var(--spacing)*16)}.xl\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.xl\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.xl\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.xl\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.xl\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.xl\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.xl\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.xl\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.xl\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.xl\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:96rem){.\32xl\:col-span-1{grid-column:span 1/span 1}.\32xl\:col-span-2{grid-column:span 2/span 2}.\32xl\:col-span-3{grid-column:span 3/span 3}.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:col-span-12{grid-column:span 12/span 12}.\32xl\:block{display:block}.\32xl\:flex{display:flex}.\32xl\:hidden{display:none}.\32xl\:w-1\/2{width:50%}.\32xl\:w-1\/3{width:33.3333%}.\32xl\:w-1\/4{width:25%}.\32xl\:w-2\/3{width:66.6667%}.\32xl\:w-3\/4{width:75%}.\32xl\:w-auto{width:auto}.\32xl\:w-full{width:100%}.\32xl\:max-w-2xl{max-width:var(--container-2xl)}.\32xl\:max-w-3xl{max-width:var(--container-3xl)}.\32xl\:max-w-4xl{max-width:var(--container-4xl)}.\32xl\:max-w-5xl{max-width:var(--container-5xl)}.\32xl\:max-w-6xl{max-width:var(--container-6xl)}.\32xl\:max-w-7xl{max-width:var(--container-7xl)}.\32xl\:max-w-full{max-width:100%}.\32xl\:max-w-lg{max-width:var(--container-lg)}.\32xl\:max-w-md{max-width:var(--container-md)}.\32xl\:max-w-sm{max-width:var(--container-sm)}.\32xl\:max-w-xl{max-width:var(--container-xl)}.\32xl\:max-w-xs{max-width:var(--container-xs)}.\32xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.\32xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\32xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.\32xl\:gap-0{gap:calc(var(--spacing)*0)}.\32xl\:gap-4{gap:calc(var(--spacing)*4)}.\32xl\:gap-6{gap:calc(var(--spacing)*6)}.\32xl\:gap-8{gap:calc(var(--spacing)*8)}.\32xl\:gap-12{gap:calc(var(--spacing)*12)}.\32xl\:gap-16{gap:calc(var(--spacing)*16)}.\32xl\:p-0{padding:calc(var(--spacing)*0)}.\32xl\:p-4{padding:calc(var(--spacing)*4)}.\32xl\:p-6{padding:calc(var(--spacing)*6)}.\32xl\:p-8{padding:calc(var(--spacing)*8)}.\32xl\:p-12{padding:calc(var(--spacing)*12)}.\32xl\:p-16{padding:calc(var(--spacing)*16)}.\32xl\:px-0{padding-inline:calc(var(--spacing)*0)}.\32xl\:px-4{padding-inline:calc(var(--spacing)*4)}.\32xl\:px-6{padding-inline:calc(var(--spacing)*6)}.\32xl\:px-8{padding-inline:calc(var(--spacing)*8)}.\32xl\:px-12{padding-inline:calc(var(--spacing)*12)}.\32xl\:px-16{padding-inline:calc(var(--spacing)*16)}.\32xl\:py-0{padding-block:calc(var(--spacing)*0)}.\32xl\:py-4{padding-block:calc(var(--spacing)*4)}.\32xl\:py-6{padding-block:calc(var(--spacing)*6)}.\32xl\:py-8{padding-block:calc(var(--spacing)*8)}.\32xl\:py-12{padding-block:calc(var(--spacing)*12)}.\32xl\:py-16{padding-block:calc(var(--spacing)*16)}.\32xl\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.\32xl\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.\32xl\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.\32xl\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.\32xl\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\32xl\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.\32xl\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\32xl\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.\32xl\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}.dark .dark\:block{display:block}.dark .dark\:flex{display:flex}.dark .dark\:flex-1{flex:1}.dark .dark\:flex-auto{flex:auto}.dark .dark\:flex-none{flex:none}.dark .dark\:flex-col{flex-direction:column}.dark .dark\:flex-row{flex-direction:row}.dark .dark\:flex-wrap{flex-wrap:wrap}.dark .dark\:items-center{align-items:center}.dark .dark\:items-end{align-items:flex-end}.dark .dark\:items-start{align-items:flex-start}.dark .dark\:items-stretch{align-items:stretch}.dark .dark\:justify-around{justify-content:space-around}.dark .dark\:justify-between{justify-content:space-between}.dark .dark\:justify-center{justify-content:center}.dark .dark\:justify-end{justify-content:flex-end}.dark .dark\:justify-start{justify-content:flex-start}:where(.dark .dark\:divide-gray-50>:not(:last-child)){border-color:var(--color-gray-50)}:where(.dark .dark\:divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.dark .dark\:divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}:where(.dark .dark\:divide-gray-300>:not(:last-child)){border-color:var(--color-gray-300)}:where(.dark .dark\:divide-gray-400>:not(:last-child)){border-color:var(--color-gray-400)}:where(.dark .dark\:divide-gray-500>:not(:last-child)){border-color:var(--color-gray-500)}:where(.dark .dark\:divide-gray-600>:not(:last-child)){border-color:var(--color-gray-600)}:where(.dark .dark\:divide-gray-700>:not(:last-child)){border-color:var(--color-gray-700)}:where(.dark .dark\:divide-gray-800>:not(:last-child)){border-color:var(--color-gray-800)}:where(.dark .dark\:divide-gray-900>:not(:last-child)){border-color:var(--color-gray-900)}.dark .dark\:self-center{align-self:center}.dark .dark\:self-end{align-self:flex-end}.dark .dark\:self-start{align-self:flex-start}.dark .dark\:self-stretch{align-self:stretch}.dark .dark\:overflow-auto{overflow:auto}.dark .dark\:overflow-hidden{overflow:hidden}.dark .dark\:overflow-visible{overflow:visible}.dark .dark\:overflow-x-auto{overflow-x:auto}.dark .dark\:overflow-y-auto{overflow-y:auto}.dark .dark\:rounded{border-radius:.25rem}.dark .dark\:rounded-full{border-radius:3.40282e38px}.dark .dark\:rounded-lg{border-radius:var(--radius-lg)}.dark .dark\:rounded-none{border-radius:0}.dark .dark\:rounded-sm{border-radius:var(--radius-sm)}.dark .dark\:rounded-xl{border-radius:var(--radius-xl)}.dark .dark\:border{border-style:var(--tw-border-style);border-width:1px}.dark .dark\:border-0{border-style:var(--tw-border-style);border-width:0}.dark .dark\:border-dashed{--tw-border-style:dashed;border-style:dashed}.dark .dark\:border-dotted{--tw-border-style:dotted;border-style:dotted}.dark .dark\:border-solid{--tw-border-style:solid;border-style:solid}.dark .dark\:border-black{border-color:var(--color-black)}.dark .dark\:border-blue-50{border-color:var(--color-blue-50)}.dark .dark\:border-blue-100{border-color:var(--color-blue-100)}.dark .dark\:border-blue-200{border-color:var(--color-blue-200)}.dark .dark\:border-blue-300{border-color:var(--color-blue-300)}.dark .dark\:border-blue-400{border-color:var(--color-blue-400)}.dark .dark\:border-blue-500{border-color:var(--color-blue-500)}.dark .dark\:border-blue-600{border-color:var(--color-blue-600)}.dark .dark\:border-blue-700{border-color:var(--color-blue-700)}.dark .dark\:border-blue-800{border-color:var(--color-blue-800)}.dark .dark\:border-blue-900{border-color:var(--color-blue-900)}.dark .dark\:border-gray-50{border-color:var(--color-gray-50)}.dark .dark\:border-gray-100{border-color:var(--color-gray-100)}.dark .dark\:border-gray-200{border-color:var(--color-gray-200)}.dark .dark\:border-gray-300{border-color:var(--color-gray-300)}.dark .dark\:border-gray-400{border-color:var(--color-gray-400)}.dark .dark\:border-gray-500{border-color:var(--color-gray-500)}.dark .dark\:border-gray-600{border-color:var(--color-gray-600)}.dark .dark\:border-gray-700{border-color:var(--color-gray-700)}.dark .dark\:border-gray-700\/50{border-color:#36415380}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-gray-700\/50{border-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.dark .dark\:border-gray-800{border-color:var(--color-gray-800)}.dark .dark\:border-gray-900{border-color:var(--color-gray-900)}.dark .dark\:border-gray-900\/30{border-color:#1018284d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-gray-900\/30{border-color:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.dark .dark\:border-gray-950{border-color:var(--color-gray-950)}.dark .dark\:border-green-600{border-color:var(--color-green-600)}.dark .dark\:border-green-700{border-color:var(--color-green-700)}.dark .dark\:border-green-800{border-color:var(--color-green-800)}.dark .dark\:border-orange-600{border-color:var(--color-orange-600)}.dark .dark\:border-orange-800{border-color:var(--color-orange-800)}.dark .dark\:border-red-50{border-color:var(--color-red-50)}.dark .dark\:border-red-100{border-color:var(--color-red-100)}.dark .dark\:border-red-200{border-color:var(--color-red-200)}.dark .dark\:border-red-300{border-color:var(--color-red-300)}.dark .dark\:border-red-400{border-color:var(--color-red-400)}.dark .dark\:border-red-500{border-color:var(--color-red-500)}.dark .dark\:border-red-600{border-color:var(--color-red-600)}.dark .dark\:border-red-700{border-color:var(--color-red-700)}.dark .dark\:border-red-800{border-color:var(--color-red-800)}.dark .dark\:border-red-900{border-color:var(--color-red-900)}.dark .dark\:border-red-900\/50{border-color:#82181a80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:border-red-900\/50{border-color:color-mix(in oklab,var(--color-red-900)50%,transparent)}}.dark .dark\:border-slate-50{border-color:var(--color-slate-50)}.dark .dark\:border-slate-100{border-color:var(--color-slate-100)}.dark .dark\:border-slate-200{border-color:var(--color-slate-200)}.dark .dark\:border-slate-300{border-color:var(--color-slate-300)}.dark .dark\:border-slate-400{border-color:var(--color-slate-400)}.dark .dark\:border-slate-500{border-color:var(--color-slate-500)}.dark .dark\:border-slate-600{border-color:var(--color-slate-600)}.dark .dark\:border-slate-700{border-color:var(--color-slate-700)}.dark .dark\:border-slate-800{border-color:var(--color-slate-800)}.dark .dark\:border-slate-900{border-color:var(--color-slate-900)}.dark .dark\:border-slate-950{border-color:var(--color-slate-950)}.dark .dark\:border-transparent{border-color:#0000}.dark .dark\:border-white{border-color:var(--color-white)}.dark .dark\:border-yellow-800{border-color:var(--color-yellow-800)}.dark .dark\:border-t-gray-900{border-top-color:var(--color-gray-900)}.dark .dark\:border-t-white{border-top-color:var(--color-white)}.dark .dark\:bg-amber-900\/30{background-color:#7b33064d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-amber-900\/30{background-color:color-mix(in oklab,var(--color-amber-900)30%,transparent)}}.dark .dark\:bg-black{background-color:var(--color-black)}.dark .dark\:bg-blue-50{background-color:var(--color-blue-50)}.dark .dark\:bg-blue-100{background-color:var(--color-blue-100)}.dark .dark\:bg-blue-200{background-color:var(--color-blue-200)}.dark .dark\:bg-blue-300{background-color:var(--color-blue-300)}.dark .dark\:bg-blue-400{background-color:var(--color-blue-400)}.dark .dark\:bg-blue-500{background-color:var(--color-blue-500)}.dark .dark\:bg-blue-600{background-color:var(--color-blue-600)}.dark .dark\:bg-blue-700{background-color:var(--color-blue-700)}.dark .dark\:bg-blue-800{background-color:var(--color-blue-800)}.dark .dark\:bg-blue-900{background-color:var(--color-blue-900)}.dark .dark\:bg-blue-900\/10{background-color:#1c398e1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/10{background-color:color-mix(in oklab,var(--color-blue-900)10%,transparent)}}.dark .dark\:bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/20{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}}.dark .dark\:bg-blue-900\/40{background-color:#1c398e66}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/40{background-color:color-mix(in oklab,var(--color-blue-900)40%,transparent)}}.dark .dark\:bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-900\/50{background-color:color-mix(in oklab,var(--color-blue-900)50%,transparent)}}.dark .dark\:bg-blue-950{background-color:var(--color-blue-950)}.dark .dark\:bg-blue-950\/50{background-color:#16245680}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-blue-950\/50{background-color:color-mix(in oklab,var(--color-blue-950)50%,transparent)}}.dark .dark\:bg-emerald-900{background-color:var(--color-emerald-900)}.dark .dark\:bg-gray-50{background-color:var(--color-gray-50)}.dark .dark\:bg-gray-100{background-color:var(--color-gray-100)}.dark .dark\:bg-gray-200{background-color:var(--color-gray-200)}.dark .dark\:bg-gray-300{background-color:var(--color-gray-300)}.dark .dark\:bg-gray-400{background-color:var(--color-gray-400)}.dark .dark\:bg-gray-500{background-color:var(--color-gray-500)}.dark .dark\:bg-gray-600{background-color:var(--color-gray-600)}.dark .dark\:bg-gray-700{background-color:var(--color-gray-700)}.dark .dark\:bg-gray-700\/50{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-700\/50{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.dark .dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark .dark\:bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:bg-gray-800\/80{background-color:#1e2939cc}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/80{background-color:color-mix(in oklab,var(--color-gray-800)80%,transparent)}}.dark .dark\:bg-gray-800\/90{background-color:#1e2939e6}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-800\/90{background-color:color-mix(in oklab,var(--color-gray-800)90%,transparent)}}.dark .dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark .dark\:bg-gray-900\/30{background-color:#1018284d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/30{background-color:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.dark .dark\:bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.dark .dark\:bg-gray-950{background-color:var(--color-gray-950)}.dark .dark\:bg-green-50{background-color:var(--color-green-50)}.dark .dark\:bg-green-100{background-color:var(--color-green-100)}.dark .dark\:bg-green-200{background-color:var(--color-green-200)}.dark .dark\:bg-green-300{background-color:var(--color-green-300)}.dark .dark\:bg-green-400{background-color:var(--color-green-400)}.dark .dark\:bg-green-500{background-color:var(--color-green-500)}.dark .dark\:bg-green-600{background-color:var(--color-green-600)}.dark .dark\:bg-green-700{background-color:var(--color-green-700)}.dark .dark\:bg-green-800{background-color:var(--color-green-800)}.dark .dark\:bg-green-900{background-color:var(--color-green-900)}.dark .dark\:bg-green-900\/20{background-color:#0d542b33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/20{background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}}.dark .dark\:bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900)30%,transparent)}}.dark .dark\:bg-green-900\/50{background-color:#0d542b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-green-900\/50{background-color:color-mix(in oklab,var(--color-green-900)50%,transparent)}}.dark .dark\:bg-green-950{background-color:var(--color-green-950)}.dark .dark\:bg-indigo-50{background-color:var(--color-indigo-50)}.dark .dark\:bg-indigo-100{background-color:var(--color-indigo-100)}.dark .dark\:bg-indigo-200{background-color:var(--color-indigo-200)}.dark .dark\:bg-indigo-300{background-color:var(--color-indigo-300)}.dark .dark\:bg-indigo-400{background-color:var(--color-indigo-400)}.dark .dark\:bg-indigo-500{background-color:var(--color-indigo-500)}.dark .dark\:bg-indigo-600{background-color:var(--color-indigo-600)}.dark .dark\:bg-indigo-700{background-color:var(--color-indigo-700)}.dark .dark\:bg-indigo-800{background-color:var(--color-indigo-800)}.dark .dark\:bg-indigo-900{background-color:var(--color-indigo-900)}.dark .dark\:bg-indigo-900\/30{background-color:#312c854d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-indigo-900\/30{background-color:color-mix(in oklab,var(--color-indigo-900)30%,transparent)}}.dark .dark\:bg-indigo-950{background-color:var(--color-indigo-950)}.dark .dark\:bg-orange-50{background-color:var(--color-orange-50)}.dark .dark\:bg-orange-100{background-color:var(--color-orange-100)}.dark .dark\:bg-orange-200{background-color:var(--color-orange-200)}.dark .dark\:bg-orange-300{background-color:var(--color-orange-300)}.dark .dark\:bg-orange-400{background-color:var(--color-orange-400)}.dark .dark\:bg-orange-500{background-color:var(--color-orange-500)}.dark .dark\:bg-orange-600{background-color:var(--color-orange-600)}.dark .dark\:bg-orange-700{background-color:var(--color-orange-700)}.dark .dark\:bg-orange-800{background-color:var(--color-orange-800)}.dark .dark\:bg-orange-900{background-color:var(--color-orange-900)}.dark .dark\:bg-orange-900\/20{background-color:#7e2a0c33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-900\/20{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}}.dark .dark\:bg-orange-900\/30{background-color:#7e2a0c4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-900\/30{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}}.dark .dark\:bg-orange-900\/50{background-color:#7e2a0c80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-orange-900\/50{background-color:color-mix(in oklab,var(--color-orange-900)50%,transparent)}}.dark .dark\:bg-orange-950{background-color:var(--color-orange-950)}.dark .dark\:bg-pink-50{background-color:var(--color-pink-50)}.dark .dark\:bg-pink-100{background-color:var(--color-pink-100)}.dark .dark\:bg-pink-200{background-color:var(--color-pink-200)}.dark .dark\:bg-pink-300{background-color:var(--color-pink-300)}.dark .dark\:bg-pink-400{background-color:var(--color-pink-400)}.dark .dark\:bg-pink-500{background-color:var(--color-pink-500)}.dark .dark\:bg-pink-600{background-color:var(--color-pink-600)}.dark .dark\:bg-pink-700{background-color:var(--color-pink-700)}.dark .dark\:bg-pink-800{background-color:var(--color-pink-800)}.dark .dark\:bg-pink-900{background-color:var(--color-pink-900)}.dark .dark\:bg-pink-950{background-color:var(--color-pink-950)}.dark .dark\:bg-primary-900\/30{background-color:#1e3a8a4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-primary-900\/30{background-color:color-mix(in oklab,var(--color-primary-900)30%,transparent)}}.dark .dark\:bg-purple-50{background-color:var(--color-purple-50)}.dark .dark\:bg-purple-100{background-color:var(--color-purple-100)}.dark .dark\:bg-purple-200{background-color:var(--color-purple-200)}.dark .dark\:bg-purple-300{background-color:var(--color-purple-300)}.dark .dark\:bg-purple-400{background-color:var(--color-purple-400)}.dark .dark\:bg-purple-500{background-color:var(--color-purple-500)}.dark .dark\:bg-purple-600{background-color:var(--color-purple-600)}.dark .dark\:bg-purple-700{background-color:var(--color-purple-700)}.dark .dark\:bg-purple-800{background-color:var(--color-purple-800)}.dark .dark\:bg-purple-900{background-color:var(--color-purple-900)}.dark .dark\:bg-purple-900\/30{background-color:#59168b4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-900\/30{background-color:color-mix(in oklab,var(--color-purple-900)30%,transparent)}}.dark .dark\:bg-purple-900\/50{background-color:#59168b80}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-purple-900\/50{background-color:color-mix(in oklab,var(--color-purple-900)50%,transparent)}}.dark .dark\:bg-purple-950{background-color:var(--color-purple-950)}.dark .dark\:bg-red-50{background-color:var(--color-red-50)}.dark .dark\:bg-red-100{background-color:var(--color-red-100)}.dark .dark\:bg-red-200{background-color:var(--color-red-200)}.dark .dark\:bg-red-300{background-color:var(--color-red-300)}.dark .dark\:bg-red-400{background-color:var(--color-red-400)}.dark .dark\:bg-red-500{background-color:var(--color-red-500)}.dark .dark\:bg-red-600{background-color:var(--color-red-600)}.dark .dark\:bg-red-700{background-color:var(--color-red-700)}.dark .dark\:bg-red-800{background-color:var(--color-red-800)}.dark .dark\:bg-red-900{background-color:var(--color-red-900)}.dark .dark\:bg-red-900\/10{background-color:#82181a1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/10{background-color:color-mix(in oklab,var(--color-red-900)10%,transparent)}}.dark .dark\:bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-900\/30{background-color:color-mix(in oklab,var(--color-red-900)30%,transparent)}}.dark .dark\:bg-red-950{background-color:var(--color-red-950)}.dark .dark\:bg-red-950\/50{background-color:#46080980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-950\/50{background-color:color-mix(in oklab,var(--color-red-950)50%,transparent)}}.dark .dark\:bg-red-950\/80{background-color:#460809cc}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-red-950\/80{background-color:color-mix(in oklab,var(--color-red-950)80%,transparent)}}.dark .dark\:bg-slate-50{background-color:var(--color-slate-50)}.dark .dark\:bg-slate-100{background-color:var(--color-slate-100)}.dark .dark\:bg-slate-200{background-color:var(--color-slate-200)}.dark .dark\:bg-slate-300{background-color:var(--color-slate-300)}.dark .dark\:bg-slate-400{background-color:var(--color-slate-400)}.dark .dark\:bg-slate-500{background-color:var(--color-slate-500)}.dark .dark\:bg-slate-600{background-color:var(--color-slate-600)}.dark .dark\:bg-slate-700{background-color:var(--color-slate-700)}.dark .dark\:bg-slate-800{background-color:var(--color-slate-800)}.dark .dark\:bg-slate-900{background-color:var(--color-slate-900)}.dark .dark\:bg-slate-950{background-color:var(--color-slate-950)}.dark .dark\:bg-white{background-color:var(--color-white)}.dark .dark\:bg-yellow-50{background-color:var(--color-yellow-50)}.dark .dark\:bg-yellow-100{background-color:var(--color-yellow-100)}.dark .dark\:bg-yellow-200{background-color:var(--color-yellow-200)}.dark .dark\:bg-yellow-300{background-color:var(--color-yellow-300)}.dark .dark\:bg-yellow-400{background-color:var(--color-yellow-400)}.dark .dark\:bg-yellow-500{background-color:var(--color-yellow-500)}.dark .dark\:bg-yellow-600{background-color:var(--color-yellow-600)}.dark .dark\:bg-yellow-700{background-color:var(--color-yellow-700)}.dark .dark\:bg-yellow-800{background-color:var(--color-yellow-800)}.dark .dark\:bg-yellow-900{background-color:var(--color-yellow-900)}.dark .dark\:bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/20{background-color:color-mix(in oklab,var(--color-yellow-900)20%,transparent)}}.dark .dark\:bg-yellow-900\/30{background-color:#733e0a4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:bg-yellow-900\/30{background-color:color-mix(in oklab,var(--color-yellow-900)30%,transparent)}}.dark .dark\:bg-yellow-950{background-color:var(--color-yellow-950)}.dark .dark\:from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-100{--tw-gradient-from:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-200{--tw-gradient-from:var(--color-gray-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-300{--tw-gradient-from:var(--color-gray-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-400{--tw-gradient-from:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-500{--tw-gradient-from:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-600{--tw-gradient-from:var(--color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-700{--tw-gradient-from:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-800{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:from-gray-900{--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-50{--tw-gradient-to:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-100{--tw-gradient-to:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-200{--tw-gradient-to:var(--color-gray-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-300{--tw-gradient-to:var(--color-gray-300);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-400{--tw-gradient-to:var(--color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-500{--tw-gradient-to:var(--color-gray-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-600{--tw-gradient-to:var(--color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-700{--tw-gradient-to:var(--color-gray-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-800{--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:to-gray-900{--tw-gradient-to:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark .dark\:text-center{text-align:center}.dark .dark\:text-justify{text-align:justify}.dark .dark\:text-left{text-align:left}.dark .dark\:text-right{text-align:right}.dark .dark\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.dark .dark\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.dark .dark\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.dark .dark\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.dark .dark\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.dark .dark\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.dark .dark\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.dark .dark\:leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.dark .dark\:leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.dark .dark\:leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.dark .dark\:font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.dark .dark\:font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.dark .dark\:font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.dark .dark\:tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.dark .dark\:tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.dark .dark\:tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.dark .dark\:whitespace-normal{white-space:normal}.dark .dark\:whitespace-nowrap{white-space:nowrap}.dark .dark\:whitespace-pre-wrap{white-space:pre-wrap}.dark .dark\:text-amber-400{color:var(--color-amber-400)}.dark .dark\:text-black{color:var(--color-black)}.dark .dark\:text-blue-50{color:var(--color-blue-50)}.dark .dark\:text-blue-100{color:var(--color-blue-100)}.dark .dark\:text-blue-200{color:var(--color-blue-200)}.dark .dark\:text-blue-300{color:var(--color-blue-300)}.dark .dark\:text-blue-400{color:var(--color-blue-400)}.dark .dark\:text-blue-500{color:var(--color-blue-500)}.dark .dark\:text-blue-600{color:var(--color-blue-600)}.dark .dark\:text-blue-700{color:var(--color-blue-700)}.dark .dark\:text-blue-800{color:var(--color-blue-800)}.dark .dark\:text-blue-900{color:var(--color-blue-900)}.dark .dark\:text-emerald-400{color:var(--color-emerald-400)}.dark .dark\:text-gray-50{color:var(--color-gray-50)}.dark .dark\:text-gray-100{color:var(--color-gray-100)}.dark .dark\:text-gray-200{color:var(--color-gray-200)}.dark .dark\:text-gray-300{color:var(--color-gray-300)}.dark .dark\:text-gray-400{color:var(--color-gray-400)}.dark .dark\:text-gray-500{color:var(--color-gray-500)}.dark .dark\:text-gray-500\/80{color:#6a7282cc}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-gray-500\/80{color:color-mix(in oklab,var(--color-gray-500)80%,transparent)}}.dark .dark\:text-gray-600{color:var(--color-gray-600)}.dark .dark\:text-gray-700{color:var(--color-gray-700)}.dark .dark\:text-gray-800{color:var(--color-gray-800)}.dark .dark\:text-gray-900{color:var(--color-gray-900)}.dark .dark\:text-green-50{color:var(--color-green-50)}.dark .dark\:text-green-100{color:var(--color-green-100)}.dark .dark\:text-green-200{color:var(--color-green-200)}.dark .dark\:text-green-300{color:var(--color-green-300)}.dark .dark\:text-green-400{color:var(--color-green-400)}.dark .dark\:text-green-500{color:var(--color-green-500)}.dark .dark\:text-green-600{color:var(--color-green-600)}.dark .dark\:text-green-700{color:var(--color-green-700)}.dark .dark\:text-green-800{color:var(--color-green-800)}.dark .dark\:text-green-900{color:var(--color-green-900)}.dark .dark\:text-indigo-400{color:var(--color-indigo-400)}.dark .dark\:text-orange-50{color:var(--color-orange-50)}.dark .dark\:text-orange-100{color:var(--color-orange-100)}.dark .dark\:text-orange-200{color:var(--color-orange-200)}.dark .dark\:text-orange-300{color:var(--color-orange-300)}.dark .dark\:text-orange-400{color:var(--color-orange-400)}.dark .dark\:text-orange-500{color:var(--color-orange-500)}.dark .dark\:text-orange-600{color:var(--color-orange-600)}.dark .dark\:text-orange-700{color:var(--color-orange-700)}.dark .dark\:text-orange-800{color:var(--color-orange-800)}.dark .dark\:text-orange-900{color:var(--color-orange-900)}.dark .dark\:text-pink-50{color:var(--color-pink-50)}.dark .dark\:text-pink-100{color:var(--color-pink-100)}.dark .dark\:text-pink-200{color:var(--color-pink-200)}.dark .dark\:text-pink-300{color:var(--color-pink-300)}.dark .dark\:text-pink-400{color:var(--color-pink-400)}.dark .dark\:text-pink-500{color:var(--color-pink-500)}.dark .dark\:text-pink-600{color:var(--color-pink-600)}.dark .dark\:text-pink-700{color:var(--color-pink-700)}.dark .dark\:text-pink-800{color:var(--color-pink-800)}.dark .dark\:text-pink-900{color:var(--color-pink-900)}.dark .dark\:text-primary-400{color:var(--color-primary-400)}.dark .dark\:text-primary-500{color:var(--color-primary-500)}.dark .dark\:text-purple-50{color:var(--color-purple-50)}.dark .dark\:text-purple-100{color:var(--color-purple-100)}.dark .dark\:text-purple-200{color:var(--color-purple-200)}.dark .dark\:text-purple-300{color:var(--color-purple-300)}.dark .dark\:text-purple-400{color:var(--color-purple-400)}.dark .dark\:text-purple-500{color:var(--color-purple-500)}.dark .dark\:text-purple-600{color:var(--color-purple-600)}.dark .dark\:text-purple-700{color:var(--color-purple-700)}.dark .dark\:text-purple-800{color:var(--color-purple-800)}.dark .dark\:text-purple-900{color:var(--color-purple-900)}.dark .dark\:text-red-50{color:var(--color-red-50)}.dark .dark\:text-red-100{color:var(--color-red-100)}.dark .dark\:text-red-200{color:var(--color-red-200)}.dark .dark\:text-red-300{color:var(--color-red-300)}.dark .dark\:text-red-400{color:var(--color-red-400)}.dark .dark\:text-red-500{color:var(--color-red-500)}.dark .dark\:text-red-600{color:var(--color-red-600)}.dark .dark\:text-red-700{color:var(--color-red-700)}.dark .dark\:text-red-800{color:var(--color-red-800)}.dark .dark\:text-red-900{color:var(--color-red-900)}.dark .dark\:text-slate-50{color:var(--color-slate-50)}.dark .dark\:text-slate-100{color:var(--color-slate-100)}.dark .dark\:text-slate-200{color:var(--color-slate-200)}.dark .dark\:text-slate-300{color:var(--color-slate-300)}.dark .dark\:text-slate-400{color:var(--color-slate-400)}.dark .dark\:text-slate-500{color:var(--color-slate-500)}.dark .dark\:text-slate-600{color:var(--color-slate-600)}.dark .dark\:text-slate-700{color:var(--color-slate-700)}.dark .dark\:text-slate-800{color:var(--color-slate-800)}.dark .dark\:text-slate-900{color:var(--color-slate-900)}.dark .dark\:text-white{color:var(--color-white)}.dark .dark\:text-yellow-50{color:var(--color-yellow-50)}.dark .dark\:text-yellow-100{color:var(--color-yellow-100)}.dark .dark\:text-yellow-200{color:var(--color-yellow-200)}.dark .dark\:text-yellow-300{color:var(--color-yellow-300)}.dark .dark\:text-yellow-400{color:var(--color-yellow-400)}.dark .dark\:text-yellow-500{color:var(--color-yellow-500)}.dark .dark\:text-yellow-600{color:var(--color-yellow-600)}.dark .dark\:text-yellow-700{color:var(--color-yellow-700)}.dark .dark\:text-yellow-800{color:var(--color-yellow-800)}.dark .dark\:text-yellow-900{color:var(--color-yellow-900)}.dark .dark\:italic{font-style:italic}.dark .dark\:underline{text-decoration-line:underline}.dark .dark\:placeholder-gray-400::placeholder{color:var(--color-gray-400)}.dark .dark\:placeholder-gray-500::placeholder{color:var(--color-gray-500)}.dark .dark\:opacity-0{opacity:0}.dark .dark\:opacity-25{opacity:.25}.dark .dark\:opacity-50{opacity:.5}.dark .dark\:opacity-75{opacity:.75}.dark .dark\:opacity-100{opacity:1}.dark .dark\:shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark .dark\:ring-blue-50{--tw-ring-color:var(--color-blue-50)}.dark .dark\:ring-blue-100{--tw-ring-color:var(--color-blue-100)}.dark .dark\:ring-blue-200{--tw-ring-color:var(--color-blue-200)}.dark .dark\:ring-blue-300{--tw-ring-color:var(--color-blue-300)}.dark .dark\:ring-blue-400{--tw-ring-color:var(--color-blue-400)}.dark .dark\:ring-blue-500{--tw-ring-color:var(--color-blue-500)}.dark .dark\:ring-blue-600{--tw-ring-color:var(--color-blue-600)}.dark .dark\:ring-blue-700{--tw-ring-color:var(--color-blue-700)}.dark .dark\:ring-blue-800{--tw-ring-color:var(--color-blue-800)}.dark .dark\:ring-blue-900{--tw-ring-color:var(--color-blue-900)}.dark .dark\:ring-gray-50{--tw-ring-color:var(--color-gray-50)}.dark .dark\:ring-gray-100{--tw-ring-color:var(--color-gray-100)}.dark .dark\:ring-gray-200{--tw-ring-color:var(--color-gray-200)}.dark .dark\:ring-gray-300{--tw-ring-color:var(--color-gray-300)}.dark .dark\:ring-gray-400{--tw-ring-color:var(--color-gray-400)}.dark .dark\:ring-gray-500{--tw-ring-color:var(--color-gray-500)}.dark .dark\:ring-gray-600{--tw-ring-color:var(--color-gray-600)}.dark .dark\:ring-gray-700{--tw-ring-color:var(--color-gray-700)}.dark .dark\:ring-gray-800{--tw-ring-color:var(--color-gray-800)}.dark .dark\:ring-gray-900{--tw-ring-color:var(--color-gray-900)}.dark .dark\:ring-white{--tw-ring-color:var(--color-white)}.dark .dark\:ring-offset-gray-800{--tw-ring-offset-color:var(--color-gray-800)}@media(hover:hover){.dark .dark\:group-hover\:bg-gray-700:is(:where(.group):hover *){background-color:var(--color-gray-700)}.dark .dark\:group-hover\:bg-gray-800:is(:where(.group):hover *){background-color:var(--color-gray-800)}.dark .dark\:group-hover\:text-blue-400:is(:where(.group):hover *){color:var(--color-blue-400)}.dark .dark\:group-hover\:text-gray-100:is(:where(.group):hover *){color:var(--color-gray-100)}.dark .dark\:group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}}.dark .dark\:selection\:bg-blue-800 ::selection{background-color:var(--color-blue-800)}.dark .dark\:selection\:bg-blue-800::selection{background-color:var(--color-blue-800)}.dark .dark\:selection\:text-blue-100 ::selection{color:var(--color-blue-100)}.dark .dark\:selection\:text-blue-100::selection{color:var(--color-blue-100)}.dark .dark\:odd\:bg-gray-800:nth-child(odd){background-color:var(--color-gray-800)}.dark .dark\:odd\:bg-gray-900:nth-child(odd){background-color:var(--color-gray-900)}.dark .dark\:even\:bg-gray-800:nth-child(2n){background-color:var(--color-gray-800)}.dark .dark\:even\:bg-gray-900:nth-child(2n){background-color:var(--color-gray-900)}@media(hover:hover){.dark .dark\:hover\:border-blue-600:hover{border-color:var(--color-blue-600)}.dark .dark\:hover\:border-blue-700:hover{border-color:var(--color-blue-700)}.dark .dark\:hover\:border-blue-800:hover{border-color:var(--color-blue-800)}.dark .dark\:hover\:border-gray-50:hover{border-color:var(--color-gray-50)}.dark .dark\:hover\:border-gray-100:hover{border-color:var(--color-gray-100)}.dark .dark\:hover\:border-gray-200:hover{border-color:var(--color-gray-200)}.dark .dark\:hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.dark .dark\:hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.dark .dark\:hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.dark .dark\:hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.dark .dark\:hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.dark .dark\:hover\:border-gray-800:hover{border-color:var(--color-gray-800)}.dark .dark\:hover\:border-gray-900:hover{border-color:var(--color-gray-900)}.dark .dark\:hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.dark .dark\:hover\:bg-blue-100:hover{background-color:var(--color-blue-100)}.dark .dark\:hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.dark .dark\:hover\:bg-blue-300:hover{background-color:var(--color-blue-300)}.dark .dark\:hover\:bg-blue-400:hover{background-color:var(--color-blue-400)}.dark .dark\:hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.dark .dark\:hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.dark .dark\:hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.dark .dark\:hover\:bg-blue-800:hover{background-color:var(--color-blue-800)}.dark .dark\:hover\:bg-blue-900:hover{background-color:var(--color-blue-900)}.dark .dark\:hover\:bg-blue-900\/20:hover{background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-blue-900\/20:hover{background-color:color-mix(in oklab,var(--color-blue-900)20%,transparent)}}.dark .dark\:hover\:bg-blue-900\/30:hover{background-color:#1c398e4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-blue-900\/30:hover{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}}.dark .dark\:hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.dark .dark\:hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.dark .dark\:hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.dark .dark\:hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}.dark .dark\:hover\:bg-gray-400:hover{background-color:var(--color-gray-400)}.dark .dark\:hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.dark .dark\:hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.dark .dark\:hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.dark .dark\:hover\:bg-gray-700\/50:hover{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-gray-700\/50:hover{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.dark .dark\:hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.dark .dark\:hover\:bg-gray-800\/50:hover{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-gray-800\/50:hover{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.dark .dark\:hover\:bg-gray-900:hover{background-color:var(--color-gray-900)}.dark .dark\:hover\:bg-indigo-600:hover{background-color:var(--color-indigo-600)}.dark .dark\:hover\:bg-orange-900\/20:hover{background-color:#7e2a0c33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-orange-900\/20:hover{background-color:color-mix(in oklab,var(--color-orange-900)20%,transparent)}}.dark .dark\:hover\:bg-orange-900\/30:hover{background-color:#7e2a0c4d}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-orange-900\/30:hover{background-color:color-mix(in oklab,var(--color-orange-900)30%,transparent)}}.dark .dark\:hover\:bg-red-600:hover{background-color:var(--color-red-600)}.dark .dark\:hover\:bg-red-900\/20:hover{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-red-900\/20:hover{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark .dark\:hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.dark .dark\:hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.dark .dark\:hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.dark .dark\:hover\:bg-slate-300:hover{background-color:var(--color-slate-300)}.dark .dark\:hover\:bg-slate-400:hover{background-color:var(--color-slate-400)}.dark .dark\:hover\:bg-slate-500:hover{background-color:var(--color-slate-500)}.dark .dark\:hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.dark .dark\:hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.dark .dark\:hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}.dark .dark\:hover\:bg-slate-900:hover{background-color:var(--color-slate-900)}.dark .dark\:hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark .dark\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark .dark\:hover\:text-black:hover{color:var(--color-black)}.dark .dark\:hover\:text-blue-50:hover{color:var(--color-blue-50)}.dark .dark\:hover\:text-blue-100:hover{color:var(--color-blue-100)}.dark .dark\:hover\:text-blue-200:hover{color:var(--color-blue-200)}.dark .dark\:hover\:text-blue-300:hover{color:var(--color-blue-300)}.dark .dark\:hover\:text-blue-400:hover{color:var(--color-blue-400)}.dark .dark\:hover\:text-blue-500:hover{color:var(--color-blue-500)}.dark .dark\:hover\:text-blue-600:hover{color:var(--color-blue-600)}.dark .dark\:hover\:text-blue-700:hover{color:var(--color-blue-700)}.dark .dark\:hover\:text-blue-800:hover{color:var(--color-blue-800)}.dark .dark\:hover\:text-blue-900:hover{color:var(--color-blue-900)}.dark .dark\:hover\:text-gray-50:hover{color:var(--color-gray-50)}.dark .dark\:hover\:text-gray-100:hover{color:var(--color-gray-100)}.dark .dark\:hover\:text-gray-200:hover{color:var(--color-gray-200)}.dark .dark\:hover\:text-gray-300:hover{color:var(--color-gray-300)}.dark .dark\:hover\:text-gray-400:hover{color:var(--color-gray-400)}.dark .dark\:hover\:text-gray-500:hover{color:var(--color-gray-500)}.dark .dark\:hover\:text-gray-600:hover{color:var(--color-gray-600)}.dark .dark\:hover\:text-gray-700:hover{color:var(--color-gray-700)}.dark .dark\:hover\:text-gray-800:hover{color:var(--color-gray-800)}.dark .dark\:hover\:text-gray-900:hover{color:var(--color-gray-900)}.dark .dark\:hover\:text-green-50:hover{color:var(--color-green-50)}.dark .dark\:hover\:text-green-100:hover{color:var(--color-green-100)}.dark .dark\:hover\:text-green-200:hover{color:var(--color-green-200)}.dark .dark\:hover\:text-green-300:hover{color:var(--color-green-300)}.dark .dark\:hover\:text-green-400:hover{color:var(--color-green-400)}.dark .dark\:hover\:text-green-500:hover{color:var(--color-green-500)}.dark .dark\:hover\:text-green-600:hover{color:var(--color-green-600)}.dark .dark\:hover\:text-green-700:hover{color:var(--color-green-700)}.dark .dark\:hover\:text-green-800:hover{color:var(--color-green-800)}.dark .dark\:hover\:text-green-900:hover{color:var(--color-green-900)}.dark .dark\:hover\:text-red-50:hover{color:var(--color-red-50)}.dark .dark\:hover\:text-red-100:hover{color:var(--color-red-100)}.dark .dark\:hover\:text-red-200:hover{color:var(--color-red-200)}.dark .dark\:hover\:text-red-300:hover{color:var(--color-red-300)}.dark .dark\:hover\:text-red-400:hover{color:var(--color-red-400)}.dark .dark\:hover\:text-red-500:hover{color:var(--color-red-500)}.dark .dark\:hover\:text-red-600:hover{color:var(--color-red-600)}.dark .dark\:hover\:text-red-700:hover{color:var(--color-red-700)}.dark .dark\:hover\:text-red-800:hover{color:var(--color-red-800)}.dark .dark\:hover\:text-red-900:hover{color:var(--color-red-900)}.dark .dark\:hover\:text-white:hover{color:var(--color-white)}}.dark .dark\:focus\:border-gray-500:focus{border-color:var(--color-gray-500)}.dark .dark\:focus\:border-gray-600:focus{border-color:var(--color-gray-600)}.dark .dark\:focus\:border-gray-700:focus{border-color:var(--color-gray-700)}.dark .dark\:focus\:bg-gray-700:focus{background-color:var(--color-gray-700)}.dark .dark\:focus\:bg-gray-800:focus{background-color:var(--color-gray-800)}.dark .dark\:focus\:bg-gray-900:focus{background-color:var(--color-gray-900)}.dark .dark\:focus\:text-gray-100:focus{color:var(--color-gray-100)}.dark .dark\:focus\:text-gray-200:focus{color:var(--color-gray-200)}.dark .dark\:focus\:text-gray-300:focus{color:var(--color-gray-300)}.dark .dark\:focus\:text-white:focus{color:var(--color-white)}.dark .dark\:focus\:ring-amber-600:focus{--tw-ring-color:var(--color-amber-600)}.dark .dark\:focus\:ring-blue-400:focus{--tw-ring-color:var(--color-blue-400)}.dark .dark\:focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.dark .dark\:focus\:ring-blue-600:focus{--tw-ring-color:var(--color-blue-600)}.dark .dark\:focus\:ring-blue-700:focus{--tw-ring-color:var(--color-blue-700)}.dark .dark\:focus\:ring-gray-500:focus{--tw-ring-color:var(--color-gray-500)}.dark .dark\:focus\:ring-gray-600:focus{--tw-ring-color:var(--color-gray-600)}.dark .dark\:focus\:ring-gray-700:focus{--tw-ring-color:var(--color-gray-700)}.dark .dark\:focus\:ring-indigo-400:focus{--tw-ring-color:var(--color-indigo-400)}.dark .dark\:focus\:ring-white:focus{--tw-ring-color:var(--color-white)}.dark .dark\:focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:var(--color-gray-800)}.dark .dark\:focus\:ring-offset-gray-900:focus{--tw-ring-offset-color:var(--color-gray-900)}.dark .dark\:active\:bg-gray-200:active{background-color:var(--color-gray-200)}.dark .dark\:active\:bg-gray-600:active{background-color:var(--color-gray-600)}.dark .dark\:active\:bg-gray-700:active{background-color:var(--color-gray-700)}.dark .dark\:active\:bg-gray-800:active{background-color:var(--color-gray-800)}.dark .dark\:disabled\:bg-gray-700:disabled{background-color:var(--color-gray-700)}.dark .dark\:disabled\:bg-gray-800:disabled{background-color:var(--color-gray-800)}.dark .dark\:disabled\:text-gray-500:disabled{color:var(--color-gray-500)}.dark .dark\:disabled\:text-gray-600:disabled{color:var(--color-gray-600)}.dark .dark\:disabled\:opacity-50:disabled{opacity:.5}.\[\&_img\]\:hidden img{display:none}.\[\&_mark\]\:rounded mark{border-radius:.25rem}.\[\&_mark\]\:bg-yellow-200 mark{background-color:var(--color-yellow-200)}.\[\&_mark\]\:px-0\.5 mark{padding-inline:calc(var(--spacing)*.5)}.dark :is(.\[\&_mark\]\:dark\:bg-yellow-500\/40 mark){background-color:#edb20066}@supports (color:color-mix(in lab,red,red)){.dark :is(.\[\&_mark\]\:dark\:bg-yellow-500\/40 mark){background-color:color-mix(in oklab,var(--color-yellow-500)40%,transparent)}}.\[\&_table\]\:hidden table{display:none}.\[\&_table\]\:w-full table{width:100%}.\[\&_table\]\:border-collapse table{border-collapse:collapse}.\[\&_table\]\:border table{border-style:var(--tw-border-style);border-width:1px}.\[\&_table\]\:border-gray-300 table{border-color:var(--color-gray-300)}.dark .dark\:\[\&_table\]\:border-gray-600 table{border-color:var(--color-gray-600)}.\[\&_td\]\:border td{border-style:var(--tw-border-style);border-width:1px}.\[\&_td\]\:border-gray-300 td{border-color:var(--color-gray-300)}.\[\&_td\]\:px-4 td{padding-inline:calc(var(--spacing)*4)}.\[\&_td\]\:py-2 td{padding-block:calc(var(--spacing)*2)}.dark .dark\:\[\&_td\]\:border-gray-600 td{border-color:var(--color-gray-600)}.\[\&_textarea\]\:\!border-red-500 textarea{border-color:var(--color-red-500)!important}.\[\&_textarea\]\:focus\:\!ring-red-500 textarea:focus{--tw-ring-color:var(--color-red-500)!important}.dark :is(.\[\&_textarea\]\:dark\:\!border-red-500 textarea){border-color:var(--color-red-500)!important}.\[\&_th\]\:border th{border-style:var(--tw-border-style);border-width:1px}.\[\&_th\]\:border-gray-300 th{border-color:var(--color-gray-300)}.\[\&_th\]\:bg-gray-100 th{background-color:var(--color-gray-100)}.\[\&_th\]\:px-4 th{padding-inline:calc(var(--spacing)*4)}.\[\&_th\]\:py-2 th{padding-block:calc(var(--spacing)*2)}.\[\&_th\]\:text-left th{text-align:left}.dark .dark\:\[\&_th\]\:border-gray-600 th{border-color:var(--color-gray-600)}.dark .dark\:\[\&_th\]\:bg-gray-800 th{background-color:var(--color-gray-800)}.\[\&_tr\:hover\]\:bg-gray-50 tr:hover{background-color:var(--color-gray-50)}.dark .dark\:\[\&_tr\:hover\]\:bg-gray-700\/50 tr:hover{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.dark .dark\:\[\&_tr\:hover\]\:bg-gray-700\/50 tr:hover{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button{appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{appearance:none}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.yarl__fullsize{height:100%;width:100%}.yarl__relative{position:relative}.yarl__portal{inset:0;opacity:0;overflow:hidden;position:fixed;transition:opacity var(--yarl__fade_animation_duration,.25s) var(--yarl__fade_animation_timing_function,ease);z-index:var(--yarl__portal_zindex,9999)}.yarl__portal_open{opacity:1}.yarl__container{background-color:var(--yarl__container_background_color,var(--yarl__color_backdrop,#000));inset:0;outline:none;overflow:hidden;overscroll-behavior:var(--yarl__controller_overscroll_behavior,contain);position:absolute;touch-action:var(--yarl__controller_touch_action,none);-webkit-user-select:none;-moz-user-select:none;user-select:none}.yarl__carousel{align-content:center;align-items:stretch;display:flex;flex:0 0 auto;height:100%;justify-content:center;opacity:var(--yarl__pull_opacity,1);transform:translate(var(--yarl__swipe_offset,0),var(--yarl__pull_offset,0));width:calc(100% + (var(--yarl__carousel_slides_count) - 1)*(100% + var(--yarl__carousel_spacing_px, 0)*1px + var(--yarl__carousel_spacing_percent, 0)*1%))}.yarl__carousel_with_slides{-moz-column-gap:calc(var(--yarl__carousel_spacing_px, 0)*1px + 100/(var(--yarl__carousel_slides_count)*100 + (var(--yarl__carousel_slides_count) - 1)*var(--yarl__carousel_spacing_percent, 0))*var(--yarl__carousel_spacing_percent, 0)*1%);column-gap:calc(var(--yarl__carousel_spacing_px, 0)*1px + 100/(var(--yarl__carousel_slides_count)*100 + (var(--yarl__carousel_slides_count) - 1)*var(--yarl__carousel_spacing_percent, 0))*var(--yarl__carousel_spacing_percent, 0)*1%)}.yarl__flex_center{align-content:center;align-items:center;display:flex;justify-content:center}.yarl__slide{flex:1;overflow:hidden;padding:calc(var(--yarl__carousel_padding_px, 0)*1px + 100/(var(--yarl__carousel_slides_count)*100 + (var(--yarl__carousel_slides_count) - 1)*var(--yarl__carousel_spacing_percent, 0))*var(--yarl__carousel_padding_percent, 0)*1%);position:relative}[dir=rtl] .yarl__slide{--yarl__direction:-1}.yarl__slide_image{max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain;touch-action:var(--yarl__controller_touch_action,none);-moz-user-select:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.yarl__slide_image_cover{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.yarl__slide_image_loading{opacity:0}@media screen and (min-width:800px){.yarl__slide_wrapper:not(.yarl__slide_wrapper_interactive) .yarl__slide_image{-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);-webkit-transform-style:preserve-3d}}.yarl__slide_placeholder{left:50%;line-height:0;position:absolute;top:50%;transform:translate(-50%) translateY(-50%)}.yarl__slide_loading{animation:yarl__delayed_fadein 1s linear;color:var(--yarl__slide_icon_loading_color,var(--yarl__color_button,hsla(0,0%,100%,.8)))}.yarl__slide_loading line{animation:yarl__stroke_opacity 1s linear infinite}.yarl__slide_loading line:first-of-type{animation-delay:-1.875s}.yarl__slide_loading line:nth-of-type(2){animation-delay:-1.75s}.yarl__slide_loading line:nth-of-type(3){animation-delay:-1.625s}.yarl__slide_loading line:nth-of-type(4){animation-delay:-1.5s}.yarl__slide_loading line:nth-of-type(5){animation-delay:-1.375s}.yarl__slide_loading line:nth-of-type(6){animation-delay:-1.25s}.yarl__slide_loading line:nth-of-type(7){animation-delay:-1.125s}.yarl__slide_loading line:nth-of-type(8){animation-delay:-1s}.yarl__slide_error{color:var(--yarl__slide_icon_error_color,red);height:var(--yarl__slide_icon_error_size,48px);width:var(--yarl__slide_icon_error_size,48px)}@media(prefers-reduced-motion){.yarl__portal,.yarl__slide{transition:unset}.yarl__slide_loading,.yarl__slide_loading line{animation:unset}}.yarl__toolbar{display:flex;justify-content:flex-end;inset:0 0 auto auto;padding:var(--yarl__toolbar_padding,8px);position:absolute}[dir=rtl] .yarl__toolbar{inset:0 auto auto 0}.yarl__icon{height:var(--yarl__icon_size,32px);width:var(--yarl__icon_size,32px)}.yarl__button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--yarl__button_background_color,transparent);border:var(--yarl__button_border,0);color:var(--yarl__color_button,hsla(0,0%,100%,.8));cursor:pointer;filter:var(--yarl__button_filter,drop-shadow(2px 2px 2px rgba(0,0,0,.8)));line-height:0;margin:var(--yarl__button_margin,0);outline:none;padding:var(--yarl__button_padding,8px);-webkit-tap-highlight-color:transparent}.yarl__button:focus{color:var(--yarl__color_button_active,#fff)}.yarl__button:focus:not(:focus-visible){color:var(--yarl__color_button,hsla(0,0%,100%,.8))}.yarl__button:focus-visible{color:var(--yarl__color_button_active,#fff)}@media(hover:hover){.yarl__button:focus-visible:hover,.yarl__button:focus:hover,.yarl__button:hover{color:var(--yarl__color_button_active,#fff)}}.yarl__button:disabled{color:var(--yarl__color_button_disabled,hsla(0,0%,100%,.4));cursor:default}.yarl__navigation_next,.yarl__navigation_prev{padding:var(--yarl__navigation_button_padding,24px 16px);position:absolute;top:50%;transform:translateY(-50%)}.yarl__navigation_prev{left:0}[dir=rtl] .yarl__navigation_prev{left:unset;right:0;transform:translateY(-50%) rotate(180deg)}.yarl__navigation_next{right:0}[dir=rtl] .yarl__navigation_next{left:0;right:unset;transform:translateY(-50%) rotate(180deg)}.yarl__no_scroll{height:100%;overflow:hidden;overscroll-behavior:none}@keyframes yarl__delayed_fadein{0%{opacity:0}80%{opacity:0}to{opacity:1}}@keyframes yarl__stroke_opacity{0%{stroke-opacity:1}to{stroke-opacity:.125}}.yarl__counter{bottom:var(--yarl__counter_bottom,unset);color:var(--yarl__counter_color,var(--yarl__color_button,hsla(0,0%,100%,.8)));filter:var(--yarl__counter_filter,drop-shadow(2px 2px 2px rgba(0,0,0,.8)));left:var(--yarl__counter_left,0);line-height:var(--yarl__counter_line_height,var(--yarl__icon_size,32px));margin:var(--yarl__counter_margin,var(--yarl__toolbar_padding,8px));padding:var(--yarl__counter_padding,var(--yarl__button_padding,8px));position:var(--yarl__counter_position,absolute);right:var(--yarl__counter_right,unset);top:var(--yarl__counter_top,0);-webkit-user-select:var(--yarl__counter_user_select,none);-moz-user-select:var(--yarl__counter_user_select,none);user-select:var(--yarl__counter_user_select,none)}.yarl__thumbnails{display:flex;height:100%}.yarl__thumbnails_bottom,.yarl__thumbnails_end .yarl__thumbnails_track,.yarl__thumbnails_start .yarl__thumbnails_track,.yarl__thumbnails_top{flex-direction:column}.yarl__thumbnails_wrapper{flex:1;position:relative}.yarl__thumbnails_container{background-color:var(--yarl__thumbnails_container_background_color,var(--yarl__color_backdrop,#000));flex:0 0 auto;overflow:hidden;padding:var(--yarl__thumbnails_container_padding,16px);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-touch-callout:none}.yarl__thumbnails_vignette{pointer-events:none;position:absolute;--yarl__thumbnails_vignette_size:12%}@media(min-width:1200px){.yarl__thumbnails_vignette{--yarl__thumbnails_vignette_size:8%}}@media(min-width:2000px){.yarl__thumbnails_vignette{--yarl__thumbnails_vignette_size:5%}}.yarl__thumbnails_bottom .yarl__thumbnails_vignette,.yarl__thumbnails_top .yarl__thumbnails_vignette{background:linear-gradient(to right,var(--yarl__color_backdrop,#000) 0,transparent var(--yarl__thumbnails_vignette_size,12%) calc(100% - var(--yarl__thumbnails_vignette_size, 12%)),var(--yarl__color_backdrop,#000) 100%);height:100%;left:0;right:0}.yarl__thumbnails_end .yarl__thumbnails_vignette,.yarl__thumbnails_start .yarl__thumbnails_vignette{background:linear-gradient(to bottom,var(--yarl__color_backdrop,#000) 0,transparent var(--yarl__thumbnails_vignette_size,12%) calc(100% - var(--yarl__thumbnails_vignette_size, 12%)),var(--yarl__color_backdrop,#000) 100%);bottom:0;top:0;width:100%}.yarl__thumbnails_track{gap:var(--yarl__thumbnails_thumbnail_gap,16px);outline:none}.yarl__thumbnails_thumbnail{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--yarl__thumbnails_thumbnail_background,#000);border-color:var(--yarl__thumbnails_thumbnail_border_color,var(--yarl__color_button,hsla(0,0%,100%,.8)));border-radius:var(--yarl__thumbnails_thumbnail_border_radius,4px);border-style:var(--yarl__thumbnails_thumbnail_border_style,solid);border-width:var(--yarl__thumbnails_thumbnail_border,1px);cursor:pointer;flex:0 0 auto;-webkit-tap-highlight-color:transparent;box-sizing:content-box;height:var(--yarl__thumbnails_thumbnail_height,80px);outline:none;overflow:hidden;padding:var(--yarl__thumbnails_thumbnail_padding,4px);position:relative;width:var(--yarl__thumbnails_thumbnail_width,120px)}.yarl__thumbnails_thumbnail_active{border-color:var(--yarl__thumbnails_thumbnail_active_border_color,var(--yarl__color_button_active,#fff))}.yarl__thumbnails_thumbnail_fadein{animation:yarl__thumbnails_thumbnail_fadein var(--yarl__thumbnails_thumbnail_fadein_duration,.5s) ease-in-out var(--yarl__thumbnails_thumbnail_fadein_delay,0s) forwards;opacity:0}.yarl__thumbnails_thumbnail_fadeout{animation:yarl__thumbnails_thumbnail_fadeout var(--yarl__thumbnails_thumbnail_fadeout_duration,.5s) ease-in-out var(--yarl__thumbnails_thumbnail_fadeout_delay,0s) forwards;cursor:unset}.yarl__thumbnails_thumbnail_placeholder{cursor:unset;visibility:hidden}.yarl__thumbnails_thumbnail:focus{box-shadow:var(--yarl__thumbnails_thumbnail_focus_box_shadow,#000 0 0 0 2px,var(--yarl__color_button,hsla(0,0%,100%,.8)) 0 0 0 4px)}.yarl__thumbnails_thumbnail:focus:not(:focus-visible){box-shadow:unset}.yarl__thumbnails_thumbnail:focus-visible{box-shadow:var(--yarl__thumbnails_thumbnail_focus_box_shadow,#000 0 0 0 2px,var(--yarl__color_button,hsla(0,0%,100%,.8)) 0 0 0 4px)}.yarl__thumbnails_thumbnail_icon{color:var(--yarl__thumbnails_thumbnail_icon_color,var(--yarl__color_button,hsla(0,0%,100%,.8)));filter:var(--yarl__thumbnails_thumbnail_icon_filter,drop-shadow(2px 2px 2px rgba(0,0,0,.8)));height:var(--yarl__thumbnails_thumbnail_icon_size,32px);left:50%;position:absolute;top:50%;transform:translate(-50%) translateY(-50%);width:var(--yarl__thumbnails_thumbnail_icon_size,32px)}@keyframes yarl__thumbnails_thumbnail_fadein{0%{opacity:0}to{opacity:1}}@keyframes yarl__thumbnails_thumbnail_fadeout{0%{opacity:1}to{opacity:0}} diff --git a/templates/_bundled/sirsoft-basic/dist/js/components.iife.js b/templates/_bundled/sirsoft-basic/dist/js/components.iife.js index b5ead756..a78ee80d 100644 --- a/templates/_bundled/sirsoft-basic/dist/js/components.iife.js +++ b/templates/_bundled/sirsoft-basic/dist/js/components.iife.js @@ -39,7 +39,7 @@ var SirsoftBasic=(function(J,d,k,Jt){"use strict";function Mc(e){const t=Object. [&_tr:hover]:bg-gray-50 dark:[&_tr:hover]:bg-gray-700/50 after:content-[''] after:block after:clear-both ${n} - `.trim().replace(/\s+/g," ");return d.jsx(W,{id:a,className:c,dangerouslySetInnerHTML:{__html:h},...s})},Wf=Object.freeze(Object.defineProperty({__proto__:null,HtmlContent:Yo},Symbol.toStringTag,{value:"Module"})),Xo=()=>window.G7Core,qo=(e,t)=>Xo()?.t?.(e,t)??e,Dl=({content:e="",onChange:t,isHtml:r=!1,onIsHtmlChange:n,rows:o=15,placeholder:a="",label:s,showHtmlModeToggle:l=!0,contentClassName:g="",purifyConfig:h,className:c="",name:i="content",htmlFieldName:u="content_mode",readOnly:f=!1,id:p,editorAttrs:m})=>{const[w,x]=k.useState(r),[A,v]=k.useState(e),[E,O]=k.useState(!1);k.useEffect(()=>{x(r)},[r]),k.useEffect(()=>{v(e)},[e]);const _=k.useCallback(y=>{const N=y.target.value;if(v(N),t){const M=Xo()?.createChangeEvent?.({value:N,name:i,type:"textarea"})??{target:{name:i,value:N}};t(M)}},[t,i]),I=k.useCallback(y=>{const N=y.target.checked;if(x(N),N||O(!1),n){const M=Xo()?.createChangeEvent?.({checked:N,name:u,type:"checkbox"})??{target:{name:u,checked:N}};n(M)}},[n,u]),C=k.useCallback(()=>{O(y=>!y)},[]);return d.jsxs(W,{className:`space-y-2 ${c}`,id:p,...m,children:[d.jsxs(W,{className:"flex items-center justify-between",children:[s&&d.jsx(yr,{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:s}),d.jsxs(W,{className:"flex items-center gap-3",children:[w&&!f&&d.jsx(Q,{type:"button",onClick:C,className:`px-3 py-1.5 text-xs font-bold rounded-lg focus:outline-none focus:ring-2 ${E?"text-gray-700 dark:text-gray-200 bg-gray-200 dark:bg-gray-600 border border-gray-300 dark:border-gray-500 hover:bg-gray-300 dark:hover:bg-gray-500 focus:ring-gray-400 dark:focus:ring-gray-500":"text-blue-600 dark:text-blue-400 bg-white dark:bg-gray-700 border border-blue-300 dark:border-blue-600 hover:bg-blue-50 dark:hover:bg-gray-600 focus:ring-blue-500 dark:focus:ring-blue-600"}`,children:qo(E?"common.preview_off":"common.preview")}),l&&d.jsxs(yr,{className:"flex items-center gap-2 p-2 cursor-pointer",children:[d.jsx(xt,{type:"checkbox",name:u,checked:w,onChange:I,disabled:f,className:"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600"}),d.jsx(W,{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:qo("common.html_mode")})]})]})]}),!E&&d.jsx(no,{name:i,value:A,onChange:_,placeholder:a,rows:o,readOnly:f,className:`block w-full rounded-lg border px-3 py-2 text-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-1 disabled:opacity-50 disabled:cursor-not-allowed ${w?"font-mono bg-white dark:bg-gray-800 border-blue-300 dark:border-blue-600 text-gray-800 dark:text-gray-200 focus:border-blue-500 focus:ring-blue-500":"bg-white dark:bg-gray-800 border-gray-300 dark:border-gray-600 text-gray-900 dark:text-white focus:border-blue-500 focus:ring-blue-500"}`}),E&&d.jsx(W,{className:"p-4 bg-gray-50 dark:bg-gray-900 rounded-lg border border-gray-200 dark:border-gray-800 min-h-[400px]",children:d.jsx(Yo,{content:A,isHtml:!0,className:g||"prose dark:prose-invert max-w-none text-gray-900 dark:text-gray-100",purifyConfig:h})})]})},Kf=Object.freeze(Object.defineProperty({__proto__:null,HtmlEditor:Dl},Symbol.toStringTag,{value:"Module"})),Ll=e=>window.G7Core?.t?.(e)??e,Zo=({maxHeight:e=500,expandText:t,collapseText:r,className:n="",children:o,id:a,editorAttrs:s})=>{const[l,g]=k.useState(!1),[h,c]=k.useState(!1),i=k.useRef(null),u=k.useCallback(()=>{if(i.current){const w=i.current.scrollHeight;c(w>e)}},[e]);k.useEffect(()=>{u();const w=i.current;if(!w)return;const x=w.querySelectorAll("img");x.forEach(v=>{v.complete||v.addEventListener("load",u)});let A=null;return typeof ResizeObserver<"u"&&(A=new ResizeObserver(u),A.observe(w)),()=>{x.forEach(v=>{v.removeEventListener("load",u)}),A?.disconnect()}},[u,o]);const f=()=>{g(w=>!w)},p=t||Ll("sirsoft-ecommerce.shop.product.expand_detail"),m=r||Ll("sirsoft-ecommerce.shop.product.collapse_detail");return d.jsxs(W,{className:n,id:a,...s,children:[d.jsxs(W,{className:"relative",children:[d.jsx(W,{ref:i,className:!l&&h?"overflow-hidden transition-[max-height] duration-300 ease-in-out":"transition-[max-height] duration-300 ease-in-out",style:!l&&h?{maxHeight:`${e}px`}:void 0,children:o}),!l&&h&&d.jsx(W,{className:"absolute bottom-0 left-0 right-0 h-24 bg-gradient-to-t from-white dark:from-gray-900 to-transparent pointer-events-none"})]}),h&&d.jsxs(Q,{type:"button",onClick:f,className:"flex items-center justify-center w-full py-3.5 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors cursor-pointer gap-1.5",children:[d.jsx(te,{className:"text-sm font-semibold text-gray-600 dark:text-gray-400",children:l?m:p}),d.jsx(de,{name:l?"chevron-up":"chevron-down",size:"sm"})]})]})},Vf=Object.freeze(Object.defineProperty({__proto__:null,ExpandableContent:Zo,default:Zo},Symbol.toStringTag,{value:"Module"})),Yf=(e,t)=>window.G7Core?.t?.(e,t)??e,Qo=({isOpen:e,onClose:t,title:r,icon:n,iconClassName:o="text-gray-500 dark:text-gray-400",closeOnBackdropClick:a=!0,closeOnOverlayClick:s,showCloseButton:l=!0,closeOnEscape:g=!0,children:h,width:c="500px",className:i="",style:u})=>{const f=s!==void 0?s:a,p=k.useRef(null),m=k.useRef(null);if(k.useEffect(()=>{const x=A=>{A.key==="Escape"&&e&&g&&t()};if(e&&g)return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[e,t,g]),k.useEffect(()=>{if(e&&p.current){m.current=document.activeElement;const x=p.current.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),A=x[0],v=x[x.length-1];A?.focus();const E=O=>{O.key==="Tab"&&(O.shiftKey?document.activeElement===A&&(O.preventDefault(),v?.focus()):document.activeElement===v&&(O.preventDefault(),A?.focus()))};return document.addEventListener("keydown",E),()=>{document.removeEventListener("keydown",E),m.current?.focus()}}},[e]),k.useEffect(()=>{if(e)return document.body.style.overflow="hidden",()=>{document.body.style.overflow=""}},[e]),!e)return null;const w=u?.zIndex??50;return d.jsxs(W,{className:"fixed inset-0 flex items-center justify-center",style:{zIndex:w},onClick:f?t:void 0,children:[d.jsx(W,{className:"absolute inset-0 bg-black/50","aria-hidden":"true"}),d.jsxs(W,{ref:p,className:`relative bg-white dark:bg-gray-800 rounded-lg shadow-xl max-h-[90vh] overflow-hidden ${i}`,style:{width:c,...u?{...u,zIndex:void 0}:{}},onClick:x=>x.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":r?"modal-title":void 0,children:[(r||n||l)&&d.jsxs(W,{className:"flex items-center justify-between p-4",children:[(r||n)&&d.jsxs(W,{id:"modal-title",className:"flex items-center gap-3 text-lg font-semibold text-gray-900 dark:text-white",children:[n&&d.jsx(de,{name:n,size:"md",className:o}),r]}),l&&d.jsx(Q,{onClick:t,className:"ml-auto text-gray-400 dark:text-gray-500 hover:text-gray-600 dark:hover:text-gray-300 focus:outline-none","aria-label":Yf("common.close_modal"),children:d.jsx("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:d.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),d.jsx(W,{className:"px-6 py-4 overflow-y-auto max-h-[calc(90vh-140px)]",children:h})]})]})},Xf=Object.freeze(Object.defineProperty({__proto__:null,Modal:Qo},Symbol.toStringTag,{value:"Module"})),Jo=(e,t)=>window.G7Core?.t?.(e,t)??e,Ro=({isOpen:e,onClose:t,title:r,message:n,confirmText:o,cancelText:a,onConfirm:s,onCancel:l,confirmButtonVariant:g="primary",cancelButtonVariant:h="secondary",width:c="500px",closeOnOverlay:i=!0,isLoading:u=!1,loadingText:f})=>{const p=o??Jo("common.confirm"),m=a??Jo("common.cancel"),w=f??Jo("common.loading"),x=()=>{s()},A=()=>{u||(l?.(),t())},v=()=>{u||t()},E={primary:"bg-blue-600 text-white hover:bg-blue-700",secondary:"bg-gray-200 dark:bg-gray-700 text-gray-800 dark:text-gray-200 hover:bg-gray-300 dark:hover:bg-gray-600",danger:"bg-red-600 text-white hover:bg-red-700",ghost:"bg-transparent text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700"};return d.jsxs(Qo,{isOpen:e,onClose:v,title:r,width:c,children:[d.jsx(W,{className:"py-2",children:typeof n=="string"?d.jsx(Dt,{className:"text-gray-700 dark:text-gray-300",children:n}):n}),d.jsxs(W,{className:"flex justify-end gap-3 mt-6",children:[d.jsx(Q,{onClick:A,disabled:u,className:"px-4 py-2 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed",children:d.jsx(te,{children:m})}),d.jsxs(Q,{onClick:x,disabled:u,className:`flex items-center gap-2 px-4 py-2 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed ${E[g]}`,children:[u&&d.jsx(Ct,{className:"fa-solid fa-spinner w-4 h-4 animate-spin"}),d.jsx(te,{children:u?w:p})]})]})]})},qf=Object.freeze(Object.defineProperty({__proto__:null,ConfirmDialog:Ro},Symbol.toStringTag,{value:"Module"})),Pl=k.createContext(null),Fl=({value:e,children:t})=>d.jsx(Pl.Provider,{value:e,children:t}),Zf=()=>{const e=k.useContext(Pl);if(!e)throw new Error("useFileUploaderContext must be used within FileUploaderProvider");return e};function Qf(e,t){return t.forEach((function(r){r&&typeof r!="string"&&!Array.isArray(r)&&Object.keys(r).forEach((function(n){if(n!=="default"&&!(n in e)){var o=Object.getOwnPropertyDescriptor(r,n);Object.defineProperty(e,n,o.get?o:{enumerable:!0,get:function(){return r[n]}})}}))})),Object.freeze(e)}function Ul(e,t){return new Promise((function(r,n){let o;return Jf(e).then((function(a){try{return o=a,r(new Blob([t.slice(0,2),o,t.slice(2)],{type:"image/jpeg"}))}catch(s){return n(s)}}),n)}))}const Jf=e=>new Promise(((t,r)=>{const n=new FileReader;n.addEventListener("load",(({target:{result:o}})=>{const a=new DataView(o);let s=0;if(a.getUint16(s)!==65496)return r("not a valid JPEG");for(s+=2;;){const l=a.getUint16(s);if(l===65498)break;const g=a.getUint16(s+2);if(l===65505&&a.getUint32(s+4)===1165519206){const h=s+10;let c;switch(a.getUint16(h)){case 18761:c=!0;break;case 19789:c=!1;break;default:return r("TIFF header contains invalid endian")}if(a.getUint16(h+2,c)!==42)return r("TIFF header contains invalid version");const i=a.getUint32(h+4,c),u=h+i+2+12*a.getUint16(h+i,c);for(let f=h+i+2;f>>24&255,l[s+1]=g>>>16&255,l[s+2]=g>>>8&255,l[s+3]=g>>>0&255,new Uint8Array(l.buffer,0,s+4)},n.deflateRaw=function(o,a){a==null&&(a={level:6});var s=new Uint8Array(50+Math.floor(1.1*o.length)),l=n.F.deflateRaw(o,s,l,a.level);return new Uint8Array(s.buffer,0,l)},n.encode=function(o,a){a==null&&(a=!1);var s=0,l=n.bin.writeUint,g=n.bin.writeUshort,h={};for(var c in o){var i=!n._noNeed(c)&&!a,u=o[c],f=n.crc.crc(u,0,u.length);h[c]={cpr:i,usize:u.length,crc:f,file:i?n.deflateRaw(u):u}}for(var c in h)s+=h[c].file.length+30+46+2*n.bin.sizeUTF8(c);s+=22;var p=new Uint8Array(s),m=0,w=[];for(var c in h){var x=h[c];w.push(m),m=n._writeHeader(p,m,c,x,0)}var A=0,v=m;for(var c in h)x=h[c],w.push(m),m=n._writeHeader(p,m,c,x,1,w[A++]);var E=m-v;return l(p,m,101010256),m+=4,g(p,m+=4,A),g(p,m+=2,A),l(p,m+=2,E),l(p,m+=4,v),m+=4,m+=2,p.buffer},n._noNeed=function(o){var a=o.split(".").pop().toLowerCase();return"png,jpg,jpeg,zip".indexOf(a)!=-1},n._writeHeader=function(o,a,s,l,g,h){var c=n.bin.writeUint,i=n.bin.writeUshort,u=l.file;return c(o,a,g==0?67324752:33639248),a+=4,g==1&&(a+=2),i(o,a,20),i(o,a+=2,0),i(o,a+=2,l.cpr?8:0),c(o,a+=2,0),c(o,a+=4,l.crc),c(o,a+=4,u.length),c(o,a+=4,l.usize),i(o,a+=4,n.bin.sizeUTF8(s)),i(o,a+=2,0),a+=2,g==1&&(a+=2,a+=2,c(o,a+=6,h),a+=4),a+=n.bin.writeUTF8(o,a,s),g==0&&(o.set(u,a),a+=u.length),a},n.crc={table:(function(){for(var o=new Uint32Array(256),a=0;a<256;a++){for(var s=a,l=0;l<8;l++)1&s?s=3988292384^s>>>1:s>>>=1;o[a]=s}return o})(),update:function(o,a,s,l){for(var g=0;g>>8;return o},crc:function(o,a,s){return 4294967295^n.crc.update(4294967295,o,a,s)}},n.adler=function(o,a,s){for(var l=1,g=0,h=a,c=a+s;h>8&255},readUint:function(o,a){return 16777216*o[a+3]+(o[a+2]<<16|o[a+1]<<8|o[a])},writeUint:function(o,a,s){o[a]=255&s,o[a+1]=s>>8&255,o[a+2]=s>>16&255,o[a+3]=s>>24&255},readASCII:function(o,a,s){for(var l="",g=0;g>6,o[a+g+1]=128|c>>0&63,g+=2;else if((4294901760&c)==0)o[a+g]=224|c>>12,o[a+g+1]=128|c>>6&63,o[a+g+2]=128|c>>0&63,g+=3;else{if((4292870144&c)!=0)throw"e";o[a+g]=240|c>>18,o[a+g+1]=128|c>>12&63,o[a+g+2]=128|c>>6&63,o[a+g+3]=128|c>>0&63,g+=4}}return g},sizeUTF8:function(o){for(var a=o.length,s=0,l=0;l>>3}var w=h.lits,x=h.strt,A=h.prev,v=0,E=0,O=0,_=0,I=0,C=0;for(m>2&&(x[C=n.F._hash(o,0)]=0),u=0;u14e3||E>26697)&&m-u>100&&(p>>16,P=65535&N;if(N!=0){P=65535&N;var D=c(M=N>>>16,h.of0);h.lhst[257+D]++;var L=c(P,h.df0);h.dhst[L]++,_+=h.exb[D]+h.dxb[L],w[v]=M<<23|u-p,w[v+1]=P<<16|D<<8|L,v+=2,p=u+M}else h.lhst[o[u]]++;E++}}for(O==u&&o.length!=0||(p>>3},n.F._bestMatch=function(o,a,s,l,g,h){var c=32767&a,i=s[c],u=c-i+32768&32767;if(i==c||l!=n.F._hash(o,a-u))return 0;for(var f=0,p=0,m=Math.min(32767,a);u<=m&&--h!=0&&i!=c;){if(f==0||o[a+f]==o[a+f-u]){var w=n.F._howLong(o,a,u);if(w>f){if(p=u,(f=w)>=g)break;u+2x&&(x=E,i=v)}}}u+=(c=i)-(i=s[c])+32768&32767}return f<<16|p},n.F._howLong=function(o,a,s){if(o[a]!=o[a-s]||o[a+1]!=o[a+1-s]||o[a+2]!=o[a+2-s])return 0;var l=a,g=Math.min(o.length,a+258);for(a+=3;a>>23,Y=b+(8388607&F);b>16,j=B>>8&255,H=255&B;C(i,u=n.F._writeLit(257+j,L,i,u),G-_.of0[j]),u+=_.exb[j],I(i,u=n.F._writeLit(H,$,i,u),V-_.df0[H]),u+=_.dxb[H],b+=G}}u=n.F._writeLit(256,L,i,u)}return u},n.F._copyExact=function(o,a,s,l,g){var h=g>>>3;return l[h]=s,l[h+1]=s>>>8,l[h+2]=255-l[h],l[h+3]=255-l[h+1],h+=4,l.set(new Uint8Array(o.buffer,a,s),h),g+(s+4<<3)},n.F.getTrees=function(){for(var o=n.F.U,a=n.F._hufTree(o.lhst,o.ltree,15),s=n.F._hufTree(o.dhst,o.dtree,15),l=[],g=n.F._lenCodes(o.ltree,l),h=[],c=n.F._lenCodes(o.dtree,h),i=0;i4&&o.itree[1+(o.ordr[f-1]<<1)]==0;)f--;return[a,s,u,g,c,f,l,h]},n.F.getSecond=function(o){for(var a=[],s=0;s>1)+",");return a},n.F.contSize=function(o,a){for(var s=0,l=0;l15&&(n.F._putsE(s,l,c,i),l+=i)}return l},n.F._lenCodes=function(o,a){for(var s=o.length;s!=2&&o[s-1]==0;)s-=2;for(var l=0;l>>1,138))<11?a.push(17,f-3):a.push(18,f-11),l+=2*f-2}else if(g==i&&h==g&&c==g){for(u=l+5;u+2>>1,6);a.push(16,f-3),l+=2*f-2}else a.push(g,0)}return s>>>1},n.F._hufTree=function(o,a,s){var l=[],g=o.length,h=a.length,c=0;for(c=0;cs&&(n.F.restrictDepth(u,s,v),v=s),c=0;ca;l++){var c=o[l].d;o[l].d=a,h+=g-(1<>>=s-a;h>0;)(c=o[l].d)=0;l--)o[l].d==a&&h<0&&(o[l].d--,h++);h!=0&&console.log("debt left")},n.F._goodIndex=function(o,a){var s=0;return a[16|s]<=o&&(s|=16),a[8|s]<=o&&(s|=8),a[4|s]<=o&&(s|=4),a[2|s]<=o&&(s|=2),a[1|s]<=o&&(s|=1),s},n.F._writeLit=function(o,a,s,l){return n.F._putsF(s,l,a[o<<1]),l+a[1+(o<<1)]},n.F.inflate=function(o,a){var s=Uint8Array;if(o[0]==3&&o[1]==0)return a||new s(0);var l=n.F,g=l._bitsF,h=l._bitsE,c=l._decodeTiny,i=l.makeCodes,u=l.codes2map,f=l._get17,p=l.U,m=a==null;m&&(a=new s(o.length>>>2<<3));for(var w,x,A=0,v=0,E=0,O=0,_=0,I=0,C=0,y=0,N=0;A==0;)if(A=g(o,N,1),v=g(o,N+1,2),N+=3,v!=0){if(m&&(a=n.F._check(a,y+131072)),v==1&&(w=p.flmap,x=p.fdmap,I=511,C=31),v==2){E=h(o,N,5)+257,O=h(o,N+5,5)+1,_=h(o,N+10,4)+4,N+=14;for(var M=0;M<38;M+=2)p.itree[M]=0,p.itree[M+1]=0;var P=1;for(M=0;M<_;M++){var D=h(o,N+3*M,3);p.itree[1+(p.ordr[M]<<1)]=D,D>P&&(P=D)}N+=3*_,i(p.itree,P),u(p.itree,P,p.imap),w=p.lmap,x=p.dmap,N=c(p.imap,(1<>>4;if(!(b>>>8))a[y++]=b;else{if(b==256)break;var U=y+b-254;if(b>264){var F=p.ldef[b-257];U=y+(F>>>3)+h(o,N,7&F),N+=7&F}var G=x[f(o,N)&C];N+=15&G;var Y=G>>>4,B=p.ddef[Y],V=(B>>>4)+g(o,N,15&B);for(N+=15&B,m&&(a=n.F._check(a,y+131072));y>>3),H=o[j-4]|o[j-3]<<8;m&&(a=n.F._check(a,y+H)),a.set(new s(o.buffer,o.byteOffset+j,H),y),N=j+H<<3,y+=H}return a.length==y?a:a.slice(0,y)},n.F._check=function(o,a){var s=o.length;if(a<=s)return o;var l=new Uint8Array(Math.max(s<<1,a));return l.set(o,0),l},n.F._decodeTiny=function(o,a,s,l,g,h){for(var c=n.F._bitsE,i=n.F._get17,u=0;u>>4;if(p<=15)h[u]=p,u++;else{var m=0,w=0;p==16?(w=3+c(l,g,2),g+=2,m=h[u-1]):p==17?(w=3+c(l,g,3),g+=3):p==18&&(w=11+c(l,g,7),g+=7);for(var x=u+w;u>>1;hg&&(g=i),h++}for(;h>1,i=o[h+1],u=c<<4|i,f=a-i,p=o[h]<>>15-a]=u,p++},n.F.revCodes=function(o,a){for(var s=n.F.U.rev15,l=15-a,g=0;g>>l}},n.F._putsE=function(o,a,s){s<<=7&a;var l=a>>>3;o[l]|=s,o[l+1]|=s>>>8},n.F._putsF=function(o,a,s){s<<=7&a;var l=a>>>3;o[l]|=s,o[l+1]|=s>>>8,o[l+2]|=s>>>16},n.F._bitsE=function(o,a,s){return(o[a>>>3]|o[1+(a>>>3)]<<8)>>>(7&a)&(1<>>3]|o[1+(a>>>3)]<<8|o[2+(a>>>3)]<<16)>>>(7&a)&(1<>>3]|o[1+(a>>>3)]<<8|o[2+(a>>>3)]<<16)>>>(7&a)},n.F._get25=function(o,a){return(o[a>>>3]|o[1+(a>>>3)]<<8|o[2+(a>>>3)]<<16|o[3+(a>>>3)]<<24)>>>(7&a)},n.F.U=(t=Uint16Array,r=Uint32Array,{next_code:new t(16),bl_count:new t(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new t(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new r(32),flmap:new t(512),fltree:[],fdmap:new t(32),fdtree:[],lmap:new t(32768),ltree:[],ttree:[],dmap:new t(32768),dtree:[],imap:new t(512),itree:[],rev15:new t(32768),lhst:new r(286),dhst:new r(30),ihst:new r(19),lits:new r(15e3),strt:new t(65536),prev:new t(32768)}),(function(){for(var o=n.F.U,a=0;a<32768;a++){var s=a;s=(4278255360&(s=(4042322160&(s=(3435973836&(s=(2863311530&s)>>>1|(1431655765&s)<<1))>>>2|(858993459&s)<<2))>>>4|(252645135&s)<<4))>>>8|(16711935&s)<<8,o.rev15[a]=(s>>>16|s<<16)>>>17}function l(g,h,c){for(;h--!=0;)g.push(0,c)}for(a=0;a<32;a++)o.ldef[a]=o.of0[a]<<3|o.exb[a],o.ddef[a]=o.df0[a]<<4|o.dxb[a];l(o.fltree,144,8),l(o.fltree,112,9),l(o.fltree,24,7),l(o.fltree,8,8),n.F.makeCodes(o.fltree,9),n.F.codes2map(o.fltree,9,o.flmap),n.F.revCodes(o.fltree,9),l(o.fdtree,32,5),n.F.makeCodes(o.fdtree,5),n.F.codes2map(o.fdtree,5,o.fdmap),n.F.revCodes(o.fdtree,5),l(o.itree,19,0),l(o.ltree,286,0),l(o.dtree,30,0),l(o.ttree,320,0)})()})();var eg=Qf({__proto__:null,default:On},[On]);const Ht=(function(){var e={nextZero(c,i){for(;c[i]!=0;)i++;return i},readUshort:(c,i)=>c[i]<<8|c[i+1],writeUshort(c,i,u){c[i]=u>>8&255,c[i+1]=255&u},readUint:(c,i)=>16777216*c[i]+(c[i+1]<<16|c[i+2]<<8|c[i+3]),writeUint(c,i,u){c[i]=u>>24&255,c[i+1]=u>>16&255,c[i+2]=u>>8&255,c[i+3]=255&u},readASCII(c,i,u){let f="";for(let p=0;pc.length<2?`0${c}`:c,readUTF8(c,i,u){let f,p="";for(let m=0;m>3)]>>7-((7&_)<<0)&1);x[y]=F[D],x[y+1]=F[D+1],x[y+2]=F[D+2],x[y+3]=L>2)]>>6-((3&_)<<1)&3),x[y]=F[D],x[y+1]=F[D+1],x[y+2]=F[D+2],x[y+3]=L>1)]>>4-((1&_)<<2)&15),x[y]=F[D],x[y+1]=F[D+1],x[y+2]=F[D+2],x[y+3]=L>>3)]>>>7-(7&b)&1))==255*C?0:255;A[G+b]=U<<24|$<<16|$<<8|$}else if(E==2)for(b=0;b>>2)]>>>6-((3&b)<<1)&3))==85*C?0:255,A[G+b]=U<<24|$<<16|$<<8|$;else if(E==4)for(b=0;b>>1)]>>>4-((1&b)<<2)&15))==17*C?0:255,A[G+b]=U<<24|$<<16|$<<8|$;else if(E==8)for(b=0;b>3,C=Math.ceil(E*_/8),y=new Uint8Array(O*C);let N=0;const M=[0,0,4,0,2,0,1],P=[0,4,0,2,0,1,0],D=[8,8,8,4,4,2,2],L=[8,8,4,4,2,2,1];let $=0;for(;$<7;){const b=D[$],U=L[$];let F=0,G=0,Y=M[$];for(;Y>3])>>7-(7&ue)&1,y[H*C+(q>>3)]|=S<<7-((7&q)<<0)),_==2&&(S=(S=A[ue>>3])>>6-(7&ue)&3,y[H*C+(q>>2)]|=S<<6-((3&q)<<1)),_==4&&(S=(S=A[ue>>3])>>4-(7&ue)&15,y[H*C+(q>>1)]|=S<<4-((1&q)<<2)),_>=8){const ee=H*C+q*I;for(let fe=0;fe>3)+fe]}ue+=_,q+=U}j++,H+=b}F*G!=0&&(N+=G*(1+V)),$+=1}return y})(i,c)),i}function n(c,i){return o(new Uint8Array(c.buffer,2,c.length-6),i)}var o=(function(){const c={H:{}};return c.H.N=function(i,u){const f=Uint8Array;let p,m,w=0,x=0,A=0,v=0,E=0,O=0,_=0,I=0,C=0;if(i[0]==3&&i[1]==0)return u||new f(0);const y=c.H,N=y.b,M=y.e,P=y.R,D=y.n,L=y.A,$=y.Z,S=y.m,b=u==null;for(b&&(u=new f(i.length>>>2<<5));w==0;)if(w=N(i,C,1),x=N(i,C+1,2),C+=3,x!=0){if(b&&(u=c.H.W(u,I+(1<<17))),x==1&&(p=S.J,m=S.h,O=511,_=31),x==2){A=M(i,C,5)+257,v=M(i,C+5,5)+1,E=M(i,C+10,4)+4,C+=14;let F=1;for(var U=0;U<38;U+=2)S.Q[U]=0,S.Q[U+1]=0;for(U=0;UF&&(F=B)}C+=3*E,D(S.Q,F),L(S.Q,F,S.u),p=S.w,m=S.d,C=P(S.u,(1<>>4;if(!(G>>>8))u[I++]=G;else{if(G==256)break;{let Y=I+G-254;if(G>264){const q=S.q[G-257];Y=I+(q>>>3)+M(i,C,7&q),C+=7&q}const B=m[$(i,C)&_];C+=15&B;const V=B>>>4,j=S.c[V],H=(j>>>4)+N(i,C,15&j);for(C+=15&j;I>>3),G=i[F-4]|i[F-3]<<8;b&&(u=c.H.W(u,I+G)),u.set(new f(i.buffer,i.byteOffset+F,G),I),C=F+G<<3,I+=G}return u.length==I?u:u.slice(0,I)},c.H.W=function(i,u){const f=i.length;if(u<=f)return i;const p=new Uint8Array(f<<1);return p.set(i,0),p},c.H.R=function(i,u,f,p,m,w){const x=c.H.e,A=c.H.Z;let v=0;for(;v>>4;if(O<=15)w[v]=O,v++;else{let _=0,I=0;O==16?(I=3+x(p,m,2),m+=2,_=w[v-1]):O==17?(I=3+x(p,m,3),m+=3):O==18&&(I=11+x(p,m,7),m+=7);const C=v+I;for(;v>>1;for(;wm&&(m=A),w++}for(;w>1,A=i[w+1],v=x<<4|A,E=u-A;let O=i[w]<>>15-u]=v,O++}},c.H.l=function(i,u){const f=c.H.m.r,p=15-u;for(let m=0;m>>p}},c.H.M=function(i,u,f){f<<=7&u;const p=u>>>3;i[p]|=f,i[p+1]|=f>>>8},c.H.I=function(i,u,f){f<<=7&u;const p=u>>>3;i[p]|=f,i[p+1]|=f>>>8,i[p+2]|=f>>>16},c.H.e=function(i,u,f){return(i[u>>>3]|i[1+(u>>>3)]<<8)>>>(7&u)&(1<>>3]|i[1+(u>>>3)]<<8|i[2+(u>>>3)]<<16)>>>(7&u)&(1<>>3]|i[1+(u>>>3)]<<8|i[2+(u>>>3)]<<16)>>>(7&u)},c.H.i=function(i,u){return(i[u>>>3]|i[1+(u>>>3)]<<8|i[2+(u>>>3)]<<16|i[3+(u>>>3)]<<24)>>>(7&u)},c.H.m=(function(){const i=Uint16Array,u=Uint32Array;return{K:new i(16),j:new i(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new i(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new u(32),J:new i(512),_:[],h:new i(32),$:[],w:new i(32768),C:[],v:[],d:new i(32768),D:[],u:new i(512),Q:[],r:new i(32768),s:new u(286),Y:new u(30),a:new u(19),t:new u(15e3),k:new i(65536),g:new i(32768)}})(),(function(){const i=c.H.m;for(var u=0;u<32768;u++){let p=u;p=(2863311530&p)>>>1|(1431655765&p)<<1,p=(3435973836&p)>>>2|(858993459&p)<<2,p=(4042322160&p)>>>4|(252645135&p)<<4,p=(4278255360&p)>>>8|(16711935&p)<<8,i.r[u]=(p>>>16|p<<16)>>>17}function f(p,m,w){for(;m--!=0;)p.push(0,w)}for(u=0;u<32;u++)i.q[u]=i.S[u]<<3|i.T[u],i.c[u]=i.p[u]<<4|i.z[u];f(i._,144,8),f(i._,112,9),f(i._,24,7),f(i._,8,8),c.H.n(i._,9),c.H.A(i._,9,i.J),c.H.l(i._,9),f(i.$,32,5),c.H.n(i.$,5),c.H.A(i.$,5,i.h),c.H.l(i.$,5),f(i.Q,19,0),f(i.C,286,0),f(i.D,30,0),f(i.v,320,0)})(),c.H.N})();function a(c){return[1,null,3,1,2,null,4][c.ctype]*c.depth}function s(c,i,u,f,p){let m=a(i);const w=Math.ceil(f*m/8);let x,A;m=Math.ceil(m/8);let v=c[u],E=0;if(v>1&&(c[u]=[0,0,1][v-2]),v==3)for(E=m;E>>1)&255;for(let O=0;O>>1);for(;E>>1)}else{for(;E=0&&x>=0?(O=$*i+S<<2,_=(x+$)*p+w+S<<2):(O=(-x+$)*i-w+S<<2,_=$*p+S<<2),A==0)f[_]=c[O],f[_+1]=c[O+1],f[_+2]=c[O+2],f[_+3]=c[O+3];else if(A==1){var I=c[O+3]*.00392156862745098,C=c[O]*I,y=c[O+1]*I,N=c[O+2]*I,M=f[_+3]*(1/255),P=f[_]*M,D=f[_+1]*M,L=f[_+2]*M;const b=1-I,U=I+M*b,F=U==0?0:1/U;f[_+3]=255*U,f[_+0]=(C+P*b)*F,f[_+1]=(y+D*b)*F,f[_+2]=(N+L*b)*F}else if(A==2)I=c[O+3],C=c[O],y=c[O+1],N=c[O+2],M=f[_+3],P=f[_],D=f[_+1],L=f[_+2],I==M&&C==P&&y==D&&N==L?(f[_]=0,f[_+1]=0,f[_+2]=0,f[_+3]=0):(f[_]=C,f[_+1]=y,f[_+2]=N,f[_+3]=I);else if(A==3){if(I=c[O+3],C=c[O],y=c[O+1],N=c[O+2],M=f[_+3],P=f[_],D=f[_+1],L=f[_+2],I==M&&C==P&&y==D&&N==L)continue;if(I<220&&M>20)return!1}return!0}return{decode:function(i){const u=new Uint8Array(i);let f=8;const p=e,m=p.readUshort,w=p.readUint,x={tabs:{},frames:[]},A=new Uint8Array(u.length);let v,E=0,O=0;const _=[137,80,78,71,13,10,26,10];for(var I=0;I<8;I++)if(u[I]!=_[I])throw"The input is not a PNG file!";for(;f>>1:N>>>=1;C[y]=N}return C})(),update(C,y,N,M){for(let P=0;P>>8;return C},crc:(C,y,N)=>4294967295^n.update(4294967295,C,y,N)};function o(C,y,N,M){y[N]+=C[0]*M>>4,y[N+1]+=C[1]*M>>4,y[N+2]+=C[2]*M>>4,y[N+3]+=C[3]*M>>4}function a(C){return Math.max(0,Math.min(255,C))}function s(C,y){const N=C[0]-y[0],M=C[1]-y[1],P=C[2]-y[2],D=C[3]-y[3];return N*N+M*M+P*P+D*D}function l(C,y,N,M,P,D,L){L==null&&(L=1);const $=M.length,S=[];for(var b=0;b<$;b++){const H=M[b];S.push([H>>>0&255,H>>>8&255,H>>>16&255,H>>>24&255])}for(b=0;b<$;b++){let H=4294967295;for(var U=0,F=0;F<$;F++){var G=s(S[b],S[F]);F!=b&&G>2]=U,Y[b>>2]=M[U]}}function g(C,y,N,M,P){P==null&&(P={});const{crc:D}=n,L=t.writeUint,$=t.writeUshort,S=t.writeASCII;let b=8;const U=C.frames.length>1;let F,G=!1,Y=33+(U?20:0);if(P.sRGB!=null&&(Y+=13),P.pHYs!=null&&(Y+=21),P.iCCP!=null&&(F=pako.deflate(P.iCCP),Y+=21+F.length+4),C.ctype==3){for(var B=C.plte.length,V=0;V>>24!=255&&(G=!0);Y+=8+3*B+4+(G?8+1*B+4:0)}for(var j=0;j>>8&255,Ge=R>>>16&255;H[b+fe+0]=ke,H[b+fe+1]=me,H[b+fe+2]=Ge}if(b+=3*B,L(H,b,D(H,b-3*B-4,3*B+4)),b+=4,G){for(L(H,b,B),b+=4,S(H,b,"tRNS"),b+=4,V=0;V>>24&255;b+=B,L(H,b,D(H,b-B-4,B+4)),b+=4}}let ue=0;for(j=0;jNe&&(Ne=Ze),BeVe&&(Ve=Be));Ne==-1&&(Ee=he=Ne=Ve=0),K&&((1&Ee)==1&&Ee--,(1&he)==1&&he--);const Fe=(Ne-Ee+1)*(Ve-he+1);Fe<_e&&(_e=Fe,Se=$e,se=Ee,ie=he,le=Ne-Ee+1,ne=Ve-he+1)}xe=new Uint8Array(Ce[ae-1-Se]),Se==1&&(oe[ae-1].dispose=2),be=new Uint8Array(le*ne*4),e(xe,we,Ue,be,le,ne,-se,-ie,0),Te=e(Oe,we,Ue,be,le,ne,-se,-ie,3)?1:0,Te==1?u(Oe,we,Ue,be,{x:se,y:ie,width:le,height:ne}):e(Oe,we,Ue,be,le,ne,-se,-ie,0)}else be=Oe.slice(0);oe.push({rect:{x:se,y:ie,width:le,height:ne},img:be,blend:Te,dispose:0})}if(Le)for(ae=0;ae>2,Le>>2);fe.push(R);const K=new Uint8Array(we.abuf,Ue,Le);U&&l(ke.img,ke.rect.width,ke.rect.height,ee,K,R),ke.img.set(K),Ue+=Le}}else for(B=0;Bme&&Ce==Me[j-me])R[j]=R[j-me];else{let we=ue[Ce];if(we==null&&(ue[Ce]=we=ee.length,ee.push(Ce),ee.length>=300))break;R[j]=we}}}const Ge=ee.length;for(Ge<=256&&b==0&&(G=Ge<=2?1:Ge<=4?2:Ge<=16?4:8,G=Math.max(G,S)),B=0;B>1)]|=Le[re+ye]<<4-4*(1&ye);else if(G==2)for(ye=0;ye>2)]|=Le[re+ye]<<6-2*(3&ye);else if(G==1)for(ye=0;ye>3)]|=Le[re+ye]<<7-1*(7&ye)}Ce=De,F=3,Ue=1}else if(H==0&&q.length==1){De=new Uint8Array(me*Me*3);const Le=me*Me;for(j=0;jj&&(j=fe),RH&&(H=R))}j==-1&&(B=V=j=H=0),L&&((1&B)==1&&B--,(1&V)==1&&V--),D={x:B,y:V,width:j-B+1,height:H-V+1};const q=M[P];q.rect=D,q.blend=1,q.img=new Uint8Array(D.width*D.height*4),M[P-1].dispose==0?(e(b,y,N,q.img,D.width,D.height,-D.x,-D.y,0),u(G,y,N,q.img,D)):e(G,y,N,q.img,D.width,D.height,-D.x,-D.y,0)}function u(C,y,N,M,P){e(C,y,N,M,P.width,P.height,-P.x,-P.y,2)}function f(C,y,N,M,P,D,L){const $=[];let S,b=[0,1,2,3,4];D!=-1?b=[D]:(y*M>5e5||N==1)&&(b=[0]),L&&(S={level:0});const U=eg;for(var F=0;F>1)+256&255;if(D==4)for(S=P;S>1)&255;for(S=P;S>1)&255}if(D==4){for(S=0;S>2);let U;if(N.length<2e7)for(var F=0;F>2]=U.ind,P[F>>2]=U.est.rgba;else for(F=0;F>2]=U.ind,P[F>>2]=U.est.rgba}return{abuf:M.buffer,inds:b,plte:$}}function w(C,y,N){N==null&&(N=1e-4);const M=new Uint32Array(C.buffer),P={i0:0,i1:C.length,bst:null,est:null,tdst:0,left:null,right:null};P.bst=O(C,P.i0,P.i1),P.est=_(P.bst);const D=[P];for(;D.length$&&($=D[L].est.L,S=L);if($=U||b.i1<=U){b.est.L=0;continue}const F={i0:b.i0,i1:U,bst:null,est:null,tdst:0,left:null,right:null};F.bst=O(C,F.i0,F.i1),F.est=_(F.bst);const G={i0:U,i1:b.i1,bst:null,est:null,tdst:0,left:null,right:null};for(G.bst={R:[],m:[],N:b.bst.N-F.bst.N},L=0;L<16;L++)G.bst.R[L]=b.bst.R[L]-F.bst.R[L];for(L=0;L<4;L++)G.bst.m[L]=b.bst.m[L]-F.bst.m[L];G.est=_(G.bst),b.left=F,b.right=G,D[S]=F,D.push(G)}for(D.sort((($,S)=>S.bst.N-$.bst.N)),L=0;L0&&(L=C.right,$=C.left);const S=x(L,y,N,M,P);if(S.tdst<=D*D)return S;const b=x($,y,N,M,P);return b.tdstD;)M-=4;if(N>=M)break;const L=y[N>>2];y[N>>2]=y[M>>2],y[M>>2]=L,N+=4,M-=4}for(;E(C,N,P)>D;)N-=4;return N+4}function E(C,y,N){return C[y]*N[0]+C[y+1]*N[1]+C[y+2]*N[2]+C[y+3]*N[3]}function O(C,y,N){const M=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],P=[0,0,0,0],D=N-y>>2;for(let L=y;L>>0}}var I={multVec:(C,y)=>[C[0]*y[0]+C[1]*y[1]+C[2]*y[2]+C[3]*y[3],C[4]*y[0]+C[5]*y[1]+C[6]*y[2]+C[7]*y[3],C[8]*y[0]+C[9]*y[1]+C[10]*y[2]+C[11]*y[3],C[12]*y[0]+C[13]*y[1]+C[14]*y[2]+C[15]*y[3]],dot:(C,y)=>C[0]*y[0]+C[1]*y[1]+C[2]*y[2]+C[3]*y[3],sml:(C,y)=>[C*y[0],C*y[1],C*y[2],C*y[3]]};Ht.encode=function(y,N,M,P,D,L,$){P==null&&(P=0),$==null&&($=!1);const S=c(y,N,M,P,[!1,!1,!1,0,$,!1]);return h(S,-1),g(S,N,M,D,L)},Ht.encodeLL=function(y,N,M,P,D,L,$,S){const b={ctype:0+(P==1?0:2)+(D==0?0:4),depth:L,frames:[]},U=(P+D)*L,F=U*N;for(let G=0;G>>0),O(1),O(32),_(3),_(g),_(2835),_(2835),I(8),_(16711680),_(65280),_(255),_(4278190080),_(1466527264),(function C(){for(;A0;){for(w=122+A*l,f=0;f>>24,i.setUint32(w+f,p<<8|m),f+=4;A++}E{t(new Blob([r],{type:"image/bmp"}))}))},_dly:9};var bt={CHROME:"CHROME",FIREFOX:"FIREFOX",DESKTOP_SAFARI:"DESKTOP_SAFARI",IE:"IE",IOS:"IOS",ETC:"ETC"},tg={[bt.CHROME]:16384,[bt.FIREFOX]:11180,[bt.DESKTOP_SAFARI]:16384,[bt.IE]:8192,[bt.IOS]:4096,[bt.ETC]:8192};const ea=typeof window<"u",zl=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,In=ea&&window.cordova&&window.cordova.require&&window.cordova.require("cordova/modulemapper"),rg=(ea||zl)&&(In&&In.getOriginalSymbol(window,"File")||typeof File<"u"&&File),Hl=(ea||zl)&&(In&&In.getOriginalSymbol(window,"FileReader")||typeof FileReader<"u"&&FileReader);function ta(e,t,r=Date.now()){return new Promise((n=>{const o=e.split(","),a=o[0].match(/:(.*?);/)[1],s=globalThis.atob(o[1]);let l=s.length;const g=new Uint8Array(l);for(;l--;)g[l]=s.charCodeAt(l);const h=new Blob([g],{type:a});h.name=t,h.lastModified=r,n(h)}))}function Gl(e){return new Promise(((t,r)=>{const n=new Hl;n.onload=()=>t(n.result),n.onerror=o=>r(o),n.readAsDataURL(e)}))}function jl(e){return new Promise(((t,r)=>{const n=new Image;n.onload=()=>t(n),n.onerror=o=>r(o),n.src=e}))}function fr(){if(fr.cachedResult!==void 0)return fr.cachedResult;let e=bt.ETC;const{userAgent:t}=navigator;return/Chrom(e|ium)/i.test(t)?e=bt.CHROME:/iP(ad|od|hone)/i.test(t)&&/WebKit/i.test(t)?e=bt.IOS:/Safari/i.test(t)?e=bt.DESKTOP_SAFARI:/Firefox/i.test(t)?e=bt.FIREFOX:(/MSIE/i.test(t)||document.documentMode)&&(e=bt.IE),fr.cachedResult=e,fr.cachedResult}function Bl(e,t){const r=fr(),n=tg[r];let o=e,a=t,s=o*a;const l=o>a?a/o:o/a;for(;s>n*n;){const g=(n+o)/2,h=(n+a)/2;g$l.toBlob(e,c))).then(function(c){try{return l=c,l.name=r,l.lastModified=n,h.call(this)}catch(i){return s(i)}}.bind(this),s);{let c=function(){return h.call(this)};if(typeof OffscreenCanvas=="function"&&e instanceof OffscreenCanvas)return e.convertToBlob({type:t,quality:o}).then(function(i){try{return l=i,l.name=r,l.lastModified=n,c.call(this)}catch(u){return s(u)}}.bind(this),s);{let i;return i=e.toDataURL(t,o),ta(i,r,n).then(function(u){try{return l=u,c.call(this)}catch(f){return s(f)}}.bind(this),s)}}}function g(){return a(l)}}))}function Vt(e){e.width=0,e.height=0}function Nr(){return new Promise((function(e,t){let r,n,o,a;return Nr.cachedResult!==void 0?e(Nr.cachedResult):ta("data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==","test.jpg",Date.now()).then((function(s){try{return r=s,Pn(r).then((function(l){try{return n=l[1],Fn(n,r.type,r.name,r.lastModified).then((function(g){try{return o=g,Vt(n),Pn(o).then((function(h){try{return a=h[0],Nr.cachedResult=a.width===1&&a.height===2,e(Nr.cachedResult)}catch(c){return t(c)}}),t)}catch(h){return t(h)}}),t)}catch(g){return t(g)}}),t)}catch(l){return t(l)}}),t)}))}function Kl(e){return new Promise(((t,r)=>{const n=new Hl;n.onload=o=>{const a=new DataView(o.target.result);if(a.getUint16(0,!1)!=65496)return t(-2);const s=a.byteLength;let l=2;for(;lr(o),n.readAsArrayBuffer(e)}))}function Vl(e,t){const{width:r}=e,{height:n}=e,{maxWidthOrHeight:o}=t;let a,s=e;return isFinite(o)&&(r>o||n>o)&&([s,a]=Dn(r,n),r>n?(s.width=o,s.height=n/r*o):(s.width=r/n*o,s.height=o),a.drawImage(e,0,0,s.width,s.height),Vt(e)),s}function Yl(e,t){const{width:r}=e,{height:n}=e,[o,a]=Dn(r,n);switch(t>4&&t<9?(o.width=n,o.height=r):(o.width=r,o.height=n),t){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,n);break;case 4:a.transform(1,0,0,-1,0,n);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,n,0);break;case 7:a.transform(0,-1,-1,0,n,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,n),Vt(e),o}function Xl(e,t,r=0){return new Promise((function(n,o){let a,s,l,g,h,c,i,u,f,p,m,w,x,A,v,E,O,_,I,C;function y(M=5){if(t.signal&&t.signal.aborted)throw t.signal.reason;a+=M,t.onProgress(Math.min(a,100))}function N(M){if(t.signal&&t.signal.aborted)throw t.signal.reason;a=Math.min(Math.max(M,a),100),t.onProgress(a)}return a=r,s=t.maxIteration||10,l=1024*t.maxSizeMB*1024,y(),Pn(e,t).then(function(M){try{return[,g]=M,y(),h=Vl(g,t),y(),new Promise((function(P,D){var L;if(!(L=t.exifOrientation))return Kl(e).then(function(S){try{return L=S,$.call(this)}catch(b){return D(b)}}.bind(this),D);function $(){return P(L)}return $.call(this)})).then(function(P){try{return c=P,y(),Nr().then(function(D){try{return i=D?h:Yl(h,c),y(),u=t.initialQuality||1,f=t.fileType||e.type,Fn(i,f,e.name,e.lastModified,u).then(function(L){try{{let S=function(){if(s--&&(v>l||v>x)){let U,F;return U=C?.95*I.width:I.width,F=C?.95*I.height:I.height,[O,_]=Dn(U,F),_.drawImage(I,0,0,U,F),u*=f==="image/png"?.85:.95,Fn(O,f,e.name,e.lastModified,u).then((function(G){try{return E=G,Vt(I),I=O,v=E.size,N(Math.min(99,Math.floor((A-v)/(A-l)*100))),S}catch(Y){return o(Y)}}),o)}return[1]},b=function(){return Vt(I),Vt(O),Vt(h),Vt(i),Vt(g),N(100),n(E)};if(p=L,y(),m=p.size>l,w=p.size>e.size,!m&&!w)return N(100),n(p);var $;return x=e.size,A=p.size,v=A,I=i,C=!t.alwaysKeepResolution&&m,($=function(U){for(;U;){if(U.then)return void U.then($,o);try{if(U.pop){if(U.length)return U.pop()?b.call(this):U;U=S}else U=U.call(this)}catch(F){return o(F)}}}.bind(this))(S)}}catch(S){return o(S)}}.bind(this),o)}catch(L){return o(L)}}.bind(this),o)}catch(D){return o(D)}}.bind(this),o)}catch(P){return o(P)}}.bind(this),o)}))}const ng=` + `.trim().replace(/\s+/g," ");return d.jsx(W,{id:a,className:c,dangerouslySetInnerHTML:{__html:h},...s})},Wf=Object.freeze(Object.defineProperty({__proto__:null,HtmlContent:Yo},Symbol.toStringTag,{value:"Module"})),Xo=()=>window.G7Core,qo=(e,t)=>Xo()?.t?.(e,t)??e,Dl=({content:e="",onChange:t,isHtml:r=!1,onIsHtmlChange:n,rows:o=15,placeholder:a="",label:s,showHtmlModeToggle:l=!0,contentClassName:g="",purifyConfig:h,className:c="",name:i="content",htmlFieldName:u="content_mode",readOnly:f=!1,id:p,editorAttrs:m})=>{const[w,x]=k.useState(r),[A,v]=k.useState(e),[E,O]=k.useState(!1);k.useEffect(()=>{x(r)},[r]),k.useEffect(()=>{v(e)},[e]);const _=k.useCallback(y=>{const N=y.target.value;if(v(N),t){const M=Xo()?.createChangeEvent?.({value:N,name:i,type:"textarea"})??{target:{name:i,value:N}};t(M)}},[t,i]),I=k.useCallback(y=>{const N=y.target.checked;if(x(N),N||O(!1),n){const M=Xo()?.createChangeEvent?.({checked:N,name:u,type:"checkbox"})??{target:{name:u,checked:N}};n(M)}},[n,u]),C=k.useCallback(()=>{O(y=>!y)},[]);return d.jsxs(W,{className:`space-y-2 ${c}`,id:p,...m,children:[d.jsxs(W,{className:"flex items-center justify-between",children:[s&&d.jsx(yr,{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:s}),d.jsxs(W,{className:"flex items-center gap-3",children:[w&&!f&&d.jsx(Q,{type:"button",onClick:C,className:`px-3 py-1.5 text-xs font-bold rounded-lg focus:outline-none focus:ring-2 ${E?"text-gray-700 dark:text-gray-200 bg-gray-200 dark:bg-gray-600 border border-gray-300 dark:border-gray-500 hover:bg-gray-300 dark:hover:bg-gray-500 focus:ring-gray-400 dark:focus:ring-gray-500":"text-blue-600 dark:text-blue-400 bg-white dark:bg-gray-700 border border-blue-300 dark:border-blue-600 hover:bg-blue-50 dark:hover:bg-gray-600 focus:ring-blue-500 dark:focus:ring-blue-600"}`,children:qo(E?"common.preview_off":"common.preview")}),l&&d.jsxs(yr,{className:"flex items-center gap-2 p-2 cursor-pointer",children:[d.jsx(xt,{type:"checkbox",name:u,checked:w,onChange:I,disabled:f,className:"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600"}),d.jsx(W,{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:qo("common.html_mode")})]})]})]}),!E&&d.jsx(no,{name:i,value:A,onChange:_,placeholder:a,rows:o,readOnly:f,className:`block w-full rounded-lg border px-3 py-2 text-sm placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-1 disabled:opacity-50 disabled:cursor-not-allowed ${w?"font-mono bg-white dark:bg-gray-800 border-blue-300 dark:border-blue-600 text-gray-800 dark:text-gray-200 focus:border-blue-500 focus:ring-blue-500":"bg-white dark:bg-gray-800 border-gray-300 dark:border-gray-600 text-gray-900 dark:text-white focus:border-blue-500 focus:ring-blue-500"}`}),E&&d.jsx(W,{className:"p-4 bg-gray-50 dark:bg-gray-900 rounded-lg border border-gray-200 dark:border-gray-800 min-h-[400px]",children:d.jsx(Yo,{content:A,isHtml:!0,className:g||"prose dark:prose-invert max-w-none text-gray-900 dark:text-gray-100",purifyConfig:h})})]})},Kf=Object.freeze(Object.defineProperty({__proto__:null,HtmlEditor:Dl},Symbol.toStringTag,{value:"Module"})),Ll=e=>window.G7Core?.t?.(e)??e,Zo=({maxHeight:e=500,expandText:t,collapseText:r,className:n="",children:o,id:a,editorAttrs:s})=>{const[l,g]=k.useState(!1),[h,c]=k.useState(!1),i=k.useRef(null),u=k.useCallback(()=>{if(i.current){const w=i.current.scrollHeight;c(w>e)}},[e]);k.useEffect(()=>{u();const w=i.current;if(!w)return;const x=w.querySelectorAll("img");x.forEach(v=>{v.complete||v.addEventListener("load",u)});let A=null;return typeof ResizeObserver<"u"&&(A=new ResizeObserver(u),A.observe(w)),()=>{x.forEach(v=>{v.removeEventListener("load",u)}),A?.disconnect()}},[u,o]);const f=()=>{g(w=>!w)},p=t||Ll("sirsoft-ecommerce.shop.product.expand_detail"),m=r||Ll("sirsoft-ecommerce.shop.product.collapse_detail");return d.jsxs(W,{className:n,id:a,...s,children:[d.jsxs(W,{className:"relative",children:[d.jsx(W,{ref:i,className:!l&&h?"overflow-hidden transition-[max-height] duration-300 ease-in-out":"transition-[max-height] duration-300 ease-in-out",style:!l&&h?{maxHeight:`${e}px`}:void 0,children:o}),!l&&h&&d.jsx(W,{className:"absolute bottom-0 left-0 right-0 h-24 bg-gradient-to-t from-white dark:from-gray-900 to-transparent pointer-events-none"})]}),h&&d.jsxs(Q,{type:"button",onClick:f,className:"flex items-center justify-center w-full py-3.5 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors cursor-pointer gap-1.5",children:[d.jsx(te,{className:"text-sm font-semibold text-gray-600 dark:text-gray-400",children:l?m:p}),d.jsx(de,{name:l?"chevron-up":"chevron-down",size:"sm"})]})]})},Vf=Object.freeze(Object.defineProperty({__proto__:null,ExpandableContent:Zo,default:Zo},Symbol.toStringTag,{value:"Module"})),Yf=(e,t)=>window.G7Core?.t?.(e,t)??e,Qo=({isOpen:e,onClose:t,title:r,icon:n,iconClassName:o="text-gray-500 dark:text-gray-400",closeOnBackdropClick:a=!0,closeOnOverlayClick:s,showCloseButton:l=!0,closeOnEscape:g=!0,children:h,width:c="500px",className:i="",style:u})=>{const f=s!==void 0?s:a,p=k.useRef(null),m=k.useRef(null);if(k.useEffect(()=>{const x=A=>{A.key==="Escape"&&e&&g&&t()};if(e&&g)return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[e,t,g]),k.useEffect(()=>{if(e&&p.current){m.current=document.activeElement;const x=p.current.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),A=x[0],v=x[x.length-1];A?.focus();const E=O=>{O.key==="Tab"&&(O.shiftKey?document.activeElement===A&&(O.preventDefault(),v?.focus()):document.activeElement===v&&(O.preventDefault(),A?.focus()))};return document.addEventListener("keydown",E),()=>{document.removeEventListener("keydown",E),m.current?.focus()}}},[e]),k.useEffect(()=>{if(e)return document.body.style.overflow="hidden",()=>{document.body.style.overflow=""}},[e]),!e)return null;const w=u?.zIndex??50;return d.jsxs(W,{className:"fixed inset-0 flex items-center justify-center",style:{zIndex:w},onClick:f?t:void 0,children:[d.jsx(W,{className:"absolute inset-0 bg-black/50","aria-hidden":"true"}),d.jsxs(W,{ref:p,className:`relative bg-white dark:bg-gray-800 rounded-lg shadow-xl max-h-[90vh] max-w-[calc(100vw-2rem)] overflow-hidden ${i}`,style:{width:c,...u?{...u,zIndex:void 0}:{}},onClick:x=>x.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":r?"modal-title":void 0,children:[(r||n||l)&&d.jsxs(W,{className:"flex items-center justify-between p-4",children:[(r||n)&&d.jsxs(W,{id:"modal-title",className:"flex items-center gap-3 text-lg font-semibold text-gray-900 dark:text-white",children:[n&&d.jsx(de,{name:n,size:"md",className:o}),r]}),l&&d.jsx(Q,{onClick:t,className:"ml-auto text-gray-400 dark:text-gray-500 hover:text-gray-600 dark:hover:text-gray-300 focus:outline-none","aria-label":Yf("common.close_modal"),children:d.jsx("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:d.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),d.jsx(W,{className:"px-6 py-4 overflow-y-auto max-h-[calc(90vh-140px)]",children:h})]})]})},Xf=Object.freeze(Object.defineProperty({__proto__:null,Modal:Qo},Symbol.toStringTag,{value:"Module"})),Jo=(e,t)=>window.G7Core?.t?.(e,t)??e,Ro=({isOpen:e,onClose:t,title:r,message:n,confirmText:o,cancelText:a,onConfirm:s,onCancel:l,confirmButtonVariant:g="primary",cancelButtonVariant:h="secondary",width:c="500px",closeOnOverlay:i=!0,isLoading:u=!1,loadingText:f})=>{const p=o??Jo("common.confirm"),m=a??Jo("common.cancel"),w=f??Jo("common.loading"),x=()=>{s()},A=()=>{u||(l?.(),t())},v=()=>{u||t()},E={primary:"bg-blue-600 text-white hover:bg-blue-700",secondary:"bg-gray-200 dark:bg-gray-700 text-gray-800 dark:text-gray-200 hover:bg-gray-300 dark:hover:bg-gray-600",danger:"bg-red-600 text-white hover:bg-red-700",ghost:"bg-transparent text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700"};return d.jsxs(Qo,{isOpen:e,onClose:v,title:r,width:c,children:[d.jsx(W,{className:"py-2",children:typeof n=="string"?d.jsx(Dt,{className:"text-gray-700 dark:text-gray-300",children:n}):n}),d.jsxs(W,{className:"flex justify-end gap-3 mt-6",children:[d.jsx(Q,{onClick:A,disabled:u,className:"px-4 py-2 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed",children:d.jsx(te,{children:m})}),d.jsxs(Q,{onClick:x,disabled:u,className:`flex items-center gap-2 px-4 py-2 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed ${E[g]}`,children:[u&&d.jsx(Ct,{className:"fa-solid fa-spinner w-4 h-4 animate-spin"}),d.jsx(te,{children:u?w:p})]})]})]})},qf=Object.freeze(Object.defineProperty({__proto__:null,ConfirmDialog:Ro},Symbol.toStringTag,{value:"Module"})),Pl=k.createContext(null),Fl=({value:e,children:t})=>d.jsx(Pl.Provider,{value:e,children:t}),Zf=()=>{const e=k.useContext(Pl);if(!e)throw new Error("useFileUploaderContext must be used within FileUploaderProvider");return e};function Qf(e,t){return t.forEach((function(r){r&&typeof r!="string"&&!Array.isArray(r)&&Object.keys(r).forEach((function(n){if(n!=="default"&&!(n in e)){var o=Object.getOwnPropertyDescriptor(r,n);Object.defineProperty(e,n,o.get?o:{enumerable:!0,get:function(){return r[n]}})}}))})),Object.freeze(e)}function Ul(e,t){return new Promise((function(r,n){let o;return Jf(e).then((function(a){try{return o=a,r(new Blob([t.slice(0,2),o,t.slice(2)],{type:"image/jpeg"}))}catch(s){return n(s)}}),n)}))}const Jf=e=>new Promise(((t,r)=>{const n=new FileReader;n.addEventListener("load",(({target:{result:o}})=>{const a=new DataView(o);let s=0;if(a.getUint16(s)!==65496)return r("not a valid JPEG");for(s+=2;;){const l=a.getUint16(s);if(l===65498)break;const g=a.getUint16(s+2);if(l===65505&&a.getUint32(s+4)===1165519206){const h=s+10;let c;switch(a.getUint16(h)){case 18761:c=!0;break;case 19789:c=!1;break;default:return r("TIFF header contains invalid endian")}if(a.getUint16(h+2,c)!==42)return r("TIFF header contains invalid version");const i=a.getUint32(h+4,c),u=h+i+2+12*a.getUint16(h+i,c);for(let f=h+i+2;f>>24&255,l[s+1]=g>>>16&255,l[s+2]=g>>>8&255,l[s+3]=g>>>0&255,new Uint8Array(l.buffer,0,s+4)},n.deflateRaw=function(o,a){a==null&&(a={level:6});var s=new Uint8Array(50+Math.floor(1.1*o.length)),l=n.F.deflateRaw(o,s,l,a.level);return new Uint8Array(s.buffer,0,l)},n.encode=function(o,a){a==null&&(a=!1);var s=0,l=n.bin.writeUint,g=n.bin.writeUshort,h={};for(var c in o){var i=!n._noNeed(c)&&!a,u=o[c],f=n.crc.crc(u,0,u.length);h[c]={cpr:i,usize:u.length,crc:f,file:i?n.deflateRaw(u):u}}for(var c in h)s+=h[c].file.length+30+46+2*n.bin.sizeUTF8(c);s+=22;var p=new Uint8Array(s),m=0,w=[];for(var c in h){var x=h[c];w.push(m),m=n._writeHeader(p,m,c,x,0)}var A=0,v=m;for(var c in h)x=h[c],w.push(m),m=n._writeHeader(p,m,c,x,1,w[A++]);var E=m-v;return l(p,m,101010256),m+=4,g(p,m+=4,A),g(p,m+=2,A),l(p,m+=2,E),l(p,m+=4,v),m+=4,m+=2,p.buffer},n._noNeed=function(o){var a=o.split(".").pop().toLowerCase();return"png,jpg,jpeg,zip".indexOf(a)!=-1},n._writeHeader=function(o,a,s,l,g,h){var c=n.bin.writeUint,i=n.bin.writeUshort,u=l.file;return c(o,a,g==0?67324752:33639248),a+=4,g==1&&(a+=2),i(o,a,20),i(o,a+=2,0),i(o,a+=2,l.cpr?8:0),c(o,a+=2,0),c(o,a+=4,l.crc),c(o,a+=4,u.length),c(o,a+=4,l.usize),i(o,a+=4,n.bin.sizeUTF8(s)),i(o,a+=2,0),a+=2,g==1&&(a+=2,a+=2,c(o,a+=6,h),a+=4),a+=n.bin.writeUTF8(o,a,s),g==0&&(o.set(u,a),a+=u.length),a},n.crc={table:(function(){for(var o=new Uint32Array(256),a=0;a<256;a++){for(var s=a,l=0;l<8;l++)1&s?s=3988292384^s>>>1:s>>>=1;o[a]=s}return o})(),update:function(o,a,s,l){for(var g=0;g>>8;return o},crc:function(o,a,s){return 4294967295^n.crc.update(4294967295,o,a,s)}},n.adler=function(o,a,s){for(var l=1,g=0,h=a,c=a+s;h>8&255},readUint:function(o,a){return 16777216*o[a+3]+(o[a+2]<<16|o[a+1]<<8|o[a])},writeUint:function(o,a,s){o[a]=255&s,o[a+1]=s>>8&255,o[a+2]=s>>16&255,o[a+3]=s>>24&255},readASCII:function(o,a,s){for(var l="",g=0;g>6,o[a+g+1]=128|c>>0&63,g+=2;else if((4294901760&c)==0)o[a+g]=224|c>>12,o[a+g+1]=128|c>>6&63,o[a+g+2]=128|c>>0&63,g+=3;else{if((4292870144&c)!=0)throw"e";o[a+g]=240|c>>18,o[a+g+1]=128|c>>12&63,o[a+g+2]=128|c>>6&63,o[a+g+3]=128|c>>0&63,g+=4}}return g},sizeUTF8:function(o){for(var a=o.length,s=0,l=0;l>>3}var w=h.lits,x=h.strt,A=h.prev,v=0,E=0,O=0,_=0,I=0,C=0;for(m>2&&(x[C=n.F._hash(o,0)]=0),u=0;u14e3||E>26697)&&m-u>100&&(p>>16,P=65535&N;if(N!=0){P=65535&N;var D=c(M=N>>>16,h.of0);h.lhst[257+D]++;var L=c(P,h.df0);h.dhst[L]++,_+=h.exb[D]+h.dxb[L],w[v]=M<<23|u-p,w[v+1]=P<<16|D<<8|L,v+=2,p=u+M}else h.lhst[o[u]]++;E++}}for(O==u&&o.length!=0||(p>>3},n.F._bestMatch=function(o,a,s,l,g,h){var c=32767&a,i=s[c],u=c-i+32768&32767;if(i==c||l!=n.F._hash(o,a-u))return 0;for(var f=0,p=0,m=Math.min(32767,a);u<=m&&--h!=0&&i!=c;){if(f==0||o[a+f]==o[a+f-u]){var w=n.F._howLong(o,a,u);if(w>f){if(p=u,(f=w)>=g)break;u+2x&&(x=E,i=v)}}}u+=(c=i)-(i=s[c])+32768&32767}return f<<16|p},n.F._howLong=function(o,a,s){if(o[a]!=o[a-s]||o[a+1]!=o[a+1-s]||o[a+2]!=o[a+2-s])return 0;var l=a,g=Math.min(o.length,a+258);for(a+=3;a>>23,Y=b+(8388607&F);b>16,j=B>>8&255,H=255&B;C(i,u=n.F._writeLit(257+j,L,i,u),G-_.of0[j]),u+=_.exb[j],I(i,u=n.F._writeLit(H,$,i,u),V-_.df0[H]),u+=_.dxb[H],b+=G}}u=n.F._writeLit(256,L,i,u)}return u},n.F._copyExact=function(o,a,s,l,g){var h=g>>>3;return l[h]=s,l[h+1]=s>>>8,l[h+2]=255-l[h],l[h+3]=255-l[h+1],h+=4,l.set(new Uint8Array(o.buffer,a,s),h),g+(s+4<<3)},n.F.getTrees=function(){for(var o=n.F.U,a=n.F._hufTree(o.lhst,o.ltree,15),s=n.F._hufTree(o.dhst,o.dtree,15),l=[],g=n.F._lenCodes(o.ltree,l),h=[],c=n.F._lenCodes(o.dtree,h),i=0;i4&&o.itree[1+(o.ordr[f-1]<<1)]==0;)f--;return[a,s,u,g,c,f,l,h]},n.F.getSecond=function(o){for(var a=[],s=0;s>1)+",");return a},n.F.contSize=function(o,a){for(var s=0,l=0;l15&&(n.F._putsE(s,l,c,i),l+=i)}return l},n.F._lenCodes=function(o,a){for(var s=o.length;s!=2&&o[s-1]==0;)s-=2;for(var l=0;l>>1,138))<11?a.push(17,f-3):a.push(18,f-11),l+=2*f-2}else if(g==i&&h==g&&c==g){for(u=l+5;u+2>>1,6);a.push(16,f-3),l+=2*f-2}else a.push(g,0)}return s>>>1},n.F._hufTree=function(o,a,s){var l=[],g=o.length,h=a.length,c=0;for(c=0;cs&&(n.F.restrictDepth(u,s,v),v=s),c=0;ca;l++){var c=o[l].d;o[l].d=a,h+=g-(1<>>=s-a;h>0;)(c=o[l].d)=0;l--)o[l].d==a&&h<0&&(o[l].d--,h++);h!=0&&console.log("debt left")},n.F._goodIndex=function(o,a){var s=0;return a[16|s]<=o&&(s|=16),a[8|s]<=o&&(s|=8),a[4|s]<=o&&(s|=4),a[2|s]<=o&&(s|=2),a[1|s]<=o&&(s|=1),s},n.F._writeLit=function(o,a,s,l){return n.F._putsF(s,l,a[o<<1]),l+a[1+(o<<1)]},n.F.inflate=function(o,a){var s=Uint8Array;if(o[0]==3&&o[1]==0)return a||new s(0);var l=n.F,g=l._bitsF,h=l._bitsE,c=l._decodeTiny,i=l.makeCodes,u=l.codes2map,f=l._get17,p=l.U,m=a==null;m&&(a=new s(o.length>>>2<<3));for(var w,x,A=0,v=0,E=0,O=0,_=0,I=0,C=0,y=0,N=0;A==0;)if(A=g(o,N,1),v=g(o,N+1,2),N+=3,v!=0){if(m&&(a=n.F._check(a,y+131072)),v==1&&(w=p.flmap,x=p.fdmap,I=511,C=31),v==2){E=h(o,N,5)+257,O=h(o,N+5,5)+1,_=h(o,N+10,4)+4,N+=14;for(var M=0;M<38;M+=2)p.itree[M]=0,p.itree[M+1]=0;var P=1;for(M=0;M<_;M++){var D=h(o,N+3*M,3);p.itree[1+(p.ordr[M]<<1)]=D,D>P&&(P=D)}N+=3*_,i(p.itree,P),u(p.itree,P,p.imap),w=p.lmap,x=p.dmap,N=c(p.imap,(1<>>4;if(!(b>>>8))a[y++]=b;else{if(b==256)break;var U=y+b-254;if(b>264){var F=p.ldef[b-257];U=y+(F>>>3)+h(o,N,7&F),N+=7&F}var G=x[f(o,N)&C];N+=15&G;var Y=G>>>4,B=p.ddef[Y],V=(B>>>4)+g(o,N,15&B);for(N+=15&B,m&&(a=n.F._check(a,y+131072));y>>3),H=o[j-4]|o[j-3]<<8;m&&(a=n.F._check(a,y+H)),a.set(new s(o.buffer,o.byteOffset+j,H),y),N=j+H<<3,y+=H}return a.length==y?a:a.slice(0,y)},n.F._check=function(o,a){var s=o.length;if(a<=s)return o;var l=new Uint8Array(Math.max(s<<1,a));return l.set(o,0),l},n.F._decodeTiny=function(o,a,s,l,g,h){for(var c=n.F._bitsE,i=n.F._get17,u=0;u>>4;if(p<=15)h[u]=p,u++;else{var m=0,w=0;p==16?(w=3+c(l,g,2),g+=2,m=h[u-1]):p==17?(w=3+c(l,g,3),g+=3):p==18&&(w=11+c(l,g,7),g+=7);for(var x=u+w;u>>1;hg&&(g=i),h++}for(;h>1,i=o[h+1],u=c<<4|i,f=a-i,p=o[h]<>>15-a]=u,p++},n.F.revCodes=function(o,a){for(var s=n.F.U.rev15,l=15-a,g=0;g>>l}},n.F._putsE=function(o,a,s){s<<=7&a;var l=a>>>3;o[l]|=s,o[l+1]|=s>>>8},n.F._putsF=function(o,a,s){s<<=7&a;var l=a>>>3;o[l]|=s,o[l+1]|=s>>>8,o[l+2]|=s>>>16},n.F._bitsE=function(o,a,s){return(o[a>>>3]|o[1+(a>>>3)]<<8)>>>(7&a)&(1<>>3]|o[1+(a>>>3)]<<8|o[2+(a>>>3)]<<16)>>>(7&a)&(1<>>3]|o[1+(a>>>3)]<<8|o[2+(a>>>3)]<<16)>>>(7&a)},n.F._get25=function(o,a){return(o[a>>>3]|o[1+(a>>>3)]<<8|o[2+(a>>>3)]<<16|o[3+(a>>>3)]<<24)>>>(7&a)},n.F.U=(t=Uint16Array,r=Uint32Array,{next_code:new t(16),bl_count:new t(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new t(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new r(32),flmap:new t(512),fltree:[],fdmap:new t(32),fdtree:[],lmap:new t(32768),ltree:[],ttree:[],dmap:new t(32768),dtree:[],imap:new t(512),itree:[],rev15:new t(32768),lhst:new r(286),dhst:new r(30),ihst:new r(19),lits:new r(15e3),strt:new t(65536),prev:new t(32768)}),(function(){for(var o=n.F.U,a=0;a<32768;a++){var s=a;s=(4278255360&(s=(4042322160&(s=(3435973836&(s=(2863311530&s)>>>1|(1431655765&s)<<1))>>>2|(858993459&s)<<2))>>>4|(252645135&s)<<4))>>>8|(16711935&s)<<8,o.rev15[a]=(s>>>16|s<<16)>>>17}function l(g,h,c){for(;h--!=0;)g.push(0,c)}for(a=0;a<32;a++)o.ldef[a]=o.of0[a]<<3|o.exb[a],o.ddef[a]=o.df0[a]<<4|o.dxb[a];l(o.fltree,144,8),l(o.fltree,112,9),l(o.fltree,24,7),l(o.fltree,8,8),n.F.makeCodes(o.fltree,9),n.F.codes2map(o.fltree,9,o.flmap),n.F.revCodes(o.fltree,9),l(o.fdtree,32,5),n.F.makeCodes(o.fdtree,5),n.F.codes2map(o.fdtree,5,o.fdmap),n.F.revCodes(o.fdtree,5),l(o.itree,19,0),l(o.ltree,286,0),l(o.dtree,30,0),l(o.ttree,320,0)})()})();var eg=Qf({__proto__:null,default:On},[On]);const Ht=(function(){var e={nextZero(c,i){for(;c[i]!=0;)i++;return i},readUshort:(c,i)=>c[i]<<8|c[i+1],writeUshort(c,i,u){c[i]=u>>8&255,c[i+1]=255&u},readUint:(c,i)=>16777216*c[i]+(c[i+1]<<16|c[i+2]<<8|c[i+3]),writeUint(c,i,u){c[i]=u>>24&255,c[i+1]=u>>16&255,c[i+2]=u>>8&255,c[i+3]=255&u},readASCII(c,i,u){let f="";for(let p=0;pc.length<2?`0${c}`:c,readUTF8(c,i,u){let f,p="";for(let m=0;m>3)]>>7-((7&_)<<0)&1);x[y]=F[D],x[y+1]=F[D+1],x[y+2]=F[D+2],x[y+3]=L>2)]>>6-((3&_)<<1)&3),x[y]=F[D],x[y+1]=F[D+1],x[y+2]=F[D+2],x[y+3]=L>1)]>>4-((1&_)<<2)&15),x[y]=F[D],x[y+1]=F[D+1],x[y+2]=F[D+2],x[y+3]=L>>3)]>>>7-(7&b)&1))==255*C?0:255;A[G+b]=U<<24|$<<16|$<<8|$}else if(E==2)for(b=0;b>>2)]>>>6-((3&b)<<1)&3))==85*C?0:255,A[G+b]=U<<24|$<<16|$<<8|$;else if(E==4)for(b=0;b>>1)]>>>4-((1&b)<<2)&15))==17*C?0:255,A[G+b]=U<<24|$<<16|$<<8|$;else if(E==8)for(b=0;b>3,C=Math.ceil(E*_/8),y=new Uint8Array(O*C);let N=0;const M=[0,0,4,0,2,0,1],P=[0,4,0,2,0,1,0],D=[8,8,8,4,4,2,2],L=[8,8,4,4,2,2,1];let $=0;for(;$<7;){const b=D[$],U=L[$];let F=0,G=0,Y=M[$];for(;Y>3])>>7-(7&ue)&1,y[H*C+(q>>3)]|=S<<7-((7&q)<<0)),_==2&&(S=(S=A[ue>>3])>>6-(7&ue)&3,y[H*C+(q>>2)]|=S<<6-((3&q)<<1)),_==4&&(S=(S=A[ue>>3])>>4-(7&ue)&15,y[H*C+(q>>1)]|=S<<4-((1&q)<<2)),_>=8){const ee=H*C+q*I;for(let fe=0;fe>3)+fe]}ue+=_,q+=U}j++,H+=b}F*G!=0&&(N+=G*(1+V)),$+=1}return y})(i,c)),i}function n(c,i){return o(new Uint8Array(c.buffer,2,c.length-6),i)}var o=(function(){const c={H:{}};return c.H.N=function(i,u){const f=Uint8Array;let p,m,w=0,x=0,A=0,v=0,E=0,O=0,_=0,I=0,C=0;if(i[0]==3&&i[1]==0)return u||new f(0);const y=c.H,N=y.b,M=y.e,P=y.R,D=y.n,L=y.A,$=y.Z,S=y.m,b=u==null;for(b&&(u=new f(i.length>>>2<<5));w==0;)if(w=N(i,C,1),x=N(i,C+1,2),C+=3,x!=0){if(b&&(u=c.H.W(u,I+(1<<17))),x==1&&(p=S.J,m=S.h,O=511,_=31),x==2){A=M(i,C,5)+257,v=M(i,C+5,5)+1,E=M(i,C+10,4)+4,C+=14;let F=1;for(var U=0;U<38;U+=2)S.Q[U]=0,S.Q[U+1]=0;for(U=0;UF&&(F=B)}C+=3*E,D(S.Q,F),L(S.Q,F,S.u),p=S.w,m=S.d,C=P(S.u,(1<>>4;if(!(G>>>8))u[I++]=G;else{if(G==256)break;{let Y=I+G-254;if(G>264){const q=S.q[G-257];Y=I+(q>>>3)+M(i,C,7&q),C+=7&q}const B=m[$(i,C)&_];C+=15&B;const V=B>>>4,j=S.c[V],H=(j>>>4)+N(i,C,15&j);for(C+=15&j;I>>3),G=i[F-4]|i[F-3]<<8;b&&(u=c.H.W(u,I+G)),u.set(new f(i.buffer,i.byteOffset+F,G),I),C=F+G<<3,I+=G}return u.length==I?u:u.slice(0,I)},c.H.W=function(i,u){const f=i.length;if(u<=f)return i;const p=new Uint8Array(f<<1);return p.set(i,0),p},c.H.R=function(i,u,f,p,m,w){const x=c.H.e,A=c.H.Z;let v=0;for(;v>>4;if(O<=15)w[v]=O,v++;else{let _=0,I=0;O==16?(I=3+x(p,m,2),m+=2,_=w[v-1]):O==17?(I=3+x(p,m,3),m+=3):O==18&&(I=11+x(p,m,7),m+=7);const C=v+I;for(;v>>1;for(;wm&&(m=A),w++}for(;w>1,A=i[w+1],v=x<<4|A,E=u-A;let O=i[w]<>>15-u]=v,O++}},c.H.l=function(i,u){const f=c.H.m.r,p=15-u;for(let m=0;m>>p}},c.H.M=function(i,u,f){f<<=7&u;const p=u>>>3;i[p]|=f,i[p+1]|=f>>>8},c.H.I=function(i,u,f){f<<=7&u;const p=u>>>3;i[p]|=f,i[p+1]|=f>>>8,i[p+2]|=f>>>16},c.H.e=function(i,u,f){return(i[u>>>3]|i[1+(u>>>3)]<<8)>>>(7&u)&(1<>>3]|i[1+(u>>>3)]<<8|i[2+(u>>>3)]<<16)>>>(7&u)&(1<>>3]|i[1+(u>>>3)]<<8|i[2+(u>>>3)]<<16)>>>(7&u)},c.H.i=function(i,u){return(i[u>>>3]|i[1+(u>>>3)]<<8|i[2+(u>>>3)]<<16|i[3+(u>>>3)]<<24)>>>(7&u)},c.H.m=(function(){const i=Uint16Array,u=Uint32Array;return{K:new i(16),j:new i(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new i(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new u(32),J:new i(512),_:[],h:new i(32),$:[],w:new i(32768),C:[],v:[],d:new i(32768),D:[],u:new i(512),Q:[],r:new i(32768),s:new u(286),Y:new u(30),a:new u(19),t:new u(15e3),k:new i(65536),g:new i(32768)}})(),(function(){const i=c.H.m;for(var u=0;u<32768;u++){let p=u;p=(2863311530&p)>>>1|(1431655765&p)<<1,p=(3435973836&p)>>>2|(858993459&p)<<2,p=(4042322160&p)>>>4|(252645135&p)<<4,p=(4278255360&p)>>>8|(16711935&p)<<8,i.r[u]=(p>>>16|p<<16)>>>17}function f(p,m,w){for(;m--!=0;)p.push(0,w)}for(u=0;u<32;u++)i.q[u]=i.S[u]<<3|i.T[u],i.c[u]=i.p[u]<<4|i.z[u];f(i._,144,8),f(i._,112,9),f(i._,24,7),f(i._,8,8),c.H.n(i._,9),c.H.A(i._,9,i.J),c.H.l(i._,9),f(i.$,32,5),c.H.n(i.$,5),c.H.A(i.$,5,i.h),c.H.l(i.$,5),f(i.Q,19,0),f(i.C,286,0),f(i.D,30,0),f(i.v,320,0)})(),c.H.N})();function a(c){return[1,null,3,1,2,null,4][c.ctype]*c.depth}function s(c,i,u,f,p){let m=a(i);const w=Math.ceil(f*m/8);let x,A;m=Math.ceil(m/8);let v=c[u],E=0;if(v>1&&(c[u]=[0,0,1][v-2]),v==3)for(E=m;E>>1)&255;for(let O=0;O>>1);for(;E>>1)}else{for(;E=0&&x>=0?(O=$*i+S<<2,_=(x+$)*p+w+S<<2):(O=(-x+$)*i-w+S<<2,_=$*p+S<<2),A==0)f[_]=c[O],f[_+1]=c[O+1],f[_+2]=c[O+2],f[_+3]=c[O+3];else if(A==1){var I=c[O+3]*.00392156862745098,C=c[O]*I,y=c[O+1]*I,N=c[O+2]*I,M=f[_+3]*(1/255),P=f[_]*M,D=f[_+1]*M,L=f[_+2]*M;const b=1-I,U=I+M*b,F=U==0?0:1/U;f[_+3]=255*U,f[_+0]=(C+P*b)*F,f[_+1]=(y+D*b)*F,f[_+2]=(N+L*b)*F}else if(A==2)I=c[O+3],C=c[O],y=c[O+1],N=c[O+2],M=f[_+3],P=f[_],D=f[_+1],L=f[_+2],I==M&&C==P&&y==D&&N==L?(f[_]=0,f[_+1]=0,f[_+2]=0,f[_+3]=0):(f[_]=C,f[_+1]=y,f[_+2]=N,f[_+3]=I);else if(A==3){if(I=c[O+3],C=c[O],y=c[O+1],N=c[O+2],M=f[_+3],P=f[_],D=f[_+1],L=f[_+2],I==M&&C==P&&y==D&&N==L)continue;if(I<220&&M>20)return!1}return!0}return{decode:function(i){const u=new Uint8Array(i);let f=8;const p=e,m=p.readUshort,w=p.readUint,x={tabs:{},frames:[]},A=new Uint8Array(u.length);let v,E=0,O=0;const _=[137,80,78,71,13,10,26,10];for(var I=0;I<8;I++)if(u[I]!=_[I])throw"The input is not a PNG file!";for(;f>>1:N>>>=1;C[y]=N}return C})(),update(C,y,N,M){for(let P=0;P>>8;return C},crc:(C,y,N)=>4294967295^n.update(4294967295,C,y,N)};function o(C,y,N,M){y[N]+=C[0]*M>>4,y[N+1]+=C[1]*M>>4,y[N+2]+=C[2]*M>>4,y[N+3]+=C[3]*M>>4}function a(C){return Math.max(0,Math.min(255,C))}function s(C,y){const N=C[0]-y[0],M=C[1]-y[1],P=C[2]-y[2],D=C[3]-y[3];return N*N+M*M+P*P+D*D}function l(C,y,N,M,P,D,L){L==null&&(L=1);const $=M.length,S=[];for(var b=0;b<$;b++){const H=M[b];S.push([H>>>0&255,H>>>8&255,H>>>16&255,H>>>24&255])}for(b=0;b<$;b++){let H=4294967295;for(var U=0,F=0;F<$;F++){var G=s(S[b],S[F]);F!=b&&G>2]=U,Y[b>>2]=M[U]}}function g(C,y,N,M,P){P==null&&(P={});const{crc:D}=n,L=t.writeUint,$=t.writeUshort,S=t.writeASCII;let b=8;const U=C.frames.length>1;let F,G=!1,Y=33+(U?20:0);if(P.sRGB!=null&&(Y+=13),P.pHYs!=null&&(Y+=21),P.iCCP!=null&&(F=pako.deflate(P.iCCP),Y+=21+F.length+4),C.ctype==3){for(var B=C.plte.length,V=0;V>>24!=255&&(G=!0);Y+=8+3*B+4+(G?8+1*B+4:0)}for(var j=0;j>>8&255,Ge=R>>>16&255;H[b+fe+0]=ke,H[b+fe+1]=me,H[b+fe+2]=Ge}if(b+=3*B,L(H,b,D(H,b-3*B-4,3*B+4)),b+=4,G){for(L(H,b,B),b+=4,S(H,b,"tRNS"),b+=4,V=0;V>>24&255;b+=B,L(H,b,D(H,b-B-4,B+4)),b+=4}}let ue=0;for(j=0;jNe&&(Ne=Ze),BeVe&&(Ve=Be));Ne==-1&&(Ee=he=Ne=Ve=0),K&&((1&Ee)==1&&Ee--,(1&he)==1&&he--);const Fe=(Ne-Ee+1)*(Ve-he+1);Fe<_e&&(_e=Fe,Se=$e,se=Ee,ie=he,le=Ne-Ee+1,ne=Ve-he+1)}xe=new Uint8Array(Ce[ae-1-Se]),Se==1&&(oe[ae-1].dispose=2),be=new Uint8Array(le*ne*4),e(xe,we,Ue,be,le,ne,-se,-ie,0),Te=e(Oe,we,Ue,be,le,ne,-se,-ie,3)?1:0,Te==1?u(Oe,we,Ue,be,{x:se,y:ie,width:le,height:ne}):e(Oe,we,Ue,be,le,ne,-se,-ie,0)}else be=Oe.slice(0);oe.push({rect:{x:se,y:ie,width:le,height:ne},img:be,blend:Te,dispose:0})}if(Le)for(ae=0;ae>2,Le>>2);fe.push(R);const K=new Uint8Array(we.abuf,Ue,Le);U&&l(ke.img,ke.rect.width,ke.rect.height,ee,K,R),ke.img.set(K),Ue+=Le}}else for(B=0;Bme&&Ce==Me[j-me])R[j]=R[j-me];else{let we=ue[Ce];if(we==null&&(ue[Ce]=we=ee.length,ee.push(Ce),ee.length>=300))break;R[j]=we}}}const Ge=ee.length;for(Ge<=256&&b==0&&(G=Ge<=2?1:Ge<=4?2:Ge<=16?4:8,G=Math.max(G,S)),B=0;B>1)]|=Le[re+ye]<<4-4*(1&ye);else if(G==2)for(ye=0;ye>2)]|=Le[re+ye]<<6-2*(3&ye);else if(G==1)for(ye=0;ye>3)]|=Le[re+ye]<<7-1*(7&ye)}Ce=De,F=3,Ue=1}else if(H==0&&q.length==1){De=new Uint8Array(me*Me*3);const Le=me*Me;for(j=0;jj&&(j=fe),RH&&(H=R))}j==-1&&(B=V=j=H=0),L&&((1&B)==1&&B--,(1&V)==1&&V--),D={x:B,y:V,width:j-B+1,height:H-V+1};const q=M[P];q.rect=D,q.blend=1,q.img=new Uint8Array(D.width*D.height*4),M[P-1].dispose==0?(e(b,y,N,q.img,D.width,D.height,-D.x,-D.y,0),u(G,y,N,q.img,D)):e(G,y,N,q.img,D.width,D.height,-D.x,-D.y,0)}function u(C,y,N,M,P){e(C,y,N,M,P.width,P.height,-P.x,-P.y,2)}function f(C,y,N,M,P,D,L){const $=[];let S,b=[0,1,2,3,4];D!=-1?b=[D]:(y*M>5e5||N==1)&&(b=[0]),L&&(S={level:0});const U=eg;for(var F=0;F>1)+256&255;if(D==4)for(S=P;S>1)&255;for(S=P;S>1)&255}if(D==4){for(S=0;S>2);let U;if(N.length<2e7)for(var F=0;F>2]=U.ind,P[F>>2]=U.est.rgba;else for(F=0;F>2]=U.ind,P[F>>2]=U.est.rgba}return{abuf:M.buffer,inds:b,plte:$}}function w(C,y,N){N==null&&(N=1e-4);const M=new Uint32Array(C.buffer),P={i0:0,i1:C.length,bst:null,est:null,tdst:0,left:null,right:null};P.bst=O(C,P.i0,P.i1),P.est=_(P.bst);const D=[P];for(;D.length$&&($=D[L].est.L,S=L);if($=U||b.i1<=U){b.est.L=0;continue}const F={i0:b.i0,i1:U,bst:null,est:null,tdst:0,left:null,right:null};F.bst=O(C,F.i0,F.i1),F.est=_(F.bst);const G={i0:U,i1:b.i1,bst:null,est:null,tdst:0,left:null,right:null};for(G.bst={R:[],m:[],N:b.bst.N-F.bst.N},L=0;L<16;L++)G.bst.R[L]=b.bst.R[L]-F.bst.R[L];for(L=0;L<4;L++)G.bst.m[L]=b.bst.m[L]-F.bst.m[L];G.est=_(G.bst),b.left=F,b.right=G,D[S]=F,D.push(G)}for(D.sort((($,S)=>S.bst.N-$.bst.N)),L=0;L0&&(L=C.right,$=C.left);const S=x(L,y,N,M,P);if(S.tdst<=D*D)return S;const b=x($,y,N,M,P);return b.tdstD;)M-=4;if(N>=M)break;const L=y[N>>2];y[N>>2]=y[M>>2],y[M>>2]=L,N+=4,M-=4}for(;E(C,N,P)>D;)N-=4;return N+4}function E(C,y,N){return C[y]*N[0]+C[y+1]*N[1]+C[y+2]*N[2]+C[y+3]*N[3]}function O(C,y,N){const M=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],P=[0,0,0,0],D=N-y>>2;for(let L=y;L>>0}}var I={multVec:(C,y)=>[C[0]*y[0]+C[1]*y[1]+C[2]*y[2]+C[3]*y[3],C[4]*y[0]+C[5]*y[1]+C[6]*y[2]+C[7]*y[3],C[8]*y[0]+C[9]*y[1]+C[10]*y[2]+C[11]*y[3],C[12]*y[0]+C[13]*y[1]+C[14]*y[2]+C[15]*y[3]],dot:(C,y)=>C[0]*y[0]+C[1]*y[1]+C[2]*y[2]+C[3]*y[3],sml:(C,y)=>[C*y[0],C*y[1],C*y[2],C*y[3]]};Ht.encode=function(y,N,M,P,D,L,$){P==null&&(P=0),$==null&&($=!1);const S=c(y,N,M,P,[!1,!1,!1,0,$,!1]);return h(S,-1),g(S,N,M,D,L)},Ht.encodeLL=function(y,N,M,P,D,L,$,S){const b={ctype:0+(P==1?0:2)+(D==0?0:4),depth:L,frames:[]},U=(P+D)*L,F=U*N;for(let G=0;G>>0),O(1),O(32),_(3),_(g),_(2835),_(2835),I(8),_(16711680),_(65280),_(255),_(4278190080),_(1466527264),(function C(){for(;A0;){for(w=122+A*l,f=0;f>>24,i.setUint32(w+f,p<<8|m),f+=4;A++}E{t(new Blob([r],{type:"image/bmp"}))}))},_dly:9};var bt={CHROME:"CHROME",FIREFOX:"FIREFOX",DESKTOP_SAFARI:"DESKTOP_SAFARI",IE:"IE",IOS:"IOS",ETC:"ETC"},tg={[bt.CHROME]:16384,[bt.FIREFOX]:11180,[bt.DESKTOP_SAFARI]:16384,[bt.IE]:8192,[bt.IOS]:4096,[bt.ETC]:8192};const ea=typeof window<"u",zl=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,In=ea&&window.cordova&&window.cordova.require&&window.cordova.require("cordova/modulemapper"),rg=(ea||zl)&&(In&&In.getOriginalSymbol(window,"File")||typeof File<"u"&&File),Hl=(ea||zl)&&(In&&In.getOriginalSymbol(window,"FileReader")||typeof FileReader<"u"&&FileReader);function ta(e,t,r=Date.now()){return new Promise((n=>{const o=e.split(","),a=o[0].match(/:(.*?);/)[1],s=globalThis.atob(o[1]);let l=s.length;const g=new Uint8Array(l);for(;l--;)g[l]=s.charCodeAt(l);const h=new Blob([g],{type:a});h.name=t,h.lastModified=r,n(h)}))}function Gl(e){return new Promise(((t,r)=>{const n=new Hl;n.onload=()=>t(n.result),n.onerror=o=>r(o),n.readAsDataURL(e)}))}function jl(e){return new Promise(((t,r)=>{const n=new Image;n.onload=()=>t(n),n.onerror=o=>r(o),n.src=e}))}function fr(){if(fr.cachedResult!==void 0)return fr.cachedResult;let e=bt.ETC;const{userAgent:t}=navigator;return/Chrom(e|ium)/i.test(t)?e=bt.CHROME:/iP(ad|od|hone)/i.test(t)&&/WebKit/i.test(t)?e=bt.IOS:/Safari/i.test(t)?e=bt.DESKTOP_SAFARI:/Firefox/i.test(t)?e=bt.FIREFOX:(/MSIE/i.test(t)||document.documentMode)&&(e=bt.IE),fr.cachedResult=e,fr.cachedResult}function Bl(e,t){const r=fr(),n=tg[r];let o=e,a=t,s=o*a;const l=o>a?a/o:o/a;for(;s>n*n;){const g=(n+o)/2,h=(n+a)/2;g$l.toBlob(e,c))).then(function(c){try{return l=c,l.name=r,l.lastModified=n,h.call(this)}catch(i){return s(i)}}.bind(this),s);{let c=function(){return h.call(this)};if(typeof OffscreenCanvas=="function"&&e instanceof OffscreenCanvas)return e.convertToBlob({type:t,quality:o}).then(function(i){try{return l=i,l.name=r,l.lastModified=n,c.call(this)}catch(u){return s(u)}}.bind(this),s);{let i;return i=e.toDataURL(t,o),ta(i,r,n).then(function(u){try{return l=u,c.call(this)}catch(f){return s(f)}}.bind(this),s)}}}function g(){return a(l)}}))}function Vt(e){e.width=0,e.height=0}function Nr(){return new Promise((function(e,t){let r,n,o,a;return Nr.cachedResult!==void 0?e(Nr.cachedResult):ta("data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==","test.jpg",Date.now()).then((function(s){try{return r=s,Pn(r).then((function(l){try{return n=l[1],Fn(n,r.type,r.name,r.lastModified).then((function(g){try{return o=g,Vt(n),Pn(o).then((function(h){try{return a=h[0],Nr.cachedResult=a.width===1&&a.height===2,e(Nr.cachedResult)}catch(c){return t(c)}}),t)}catch(h){return t(h)}}),t)}catch(g){return t(g)}}),t)}catch(l){return t(l)}}),t)}))}function Kl(e){return new Promise(((t,r)=>{const n=new Hl;n.onload=o=>{const a=new DataView(o.target.result);if(a.getUint16(0,!1)!=65496)return t(-2);const s=a.byteLength;let l=2;for(;lr(o),n.readAsArrayBuffer(e)}))}function Vl(e,t){const{width:r}=e,{height:n}=e,{maxWidthOrHeight:o}=t;let a,s=e;return isFinite(o)&&(r>o||n>o)&&([s,a]=Dn(r,n),r>n?(s.width=o,s.height=n/r*o):(s.width=r/n*o,s.height=o),a.drawImage(e,0,0,s.width,s.height),Vt(e)),s}function Yl(e,t){const{width:r}=e,{height:n}=e,[o,a]=Dn(r,n);switch(t>4&&t<9?(o.width=n,o.height=r):(o.width=r,o.height=n),t){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,n);break;case 4:a.transform(1,0,0,-1,0,n);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,n,0);break;case 7:a.transform(0,-1,-1,0,n,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,n),Vt(e),o}function Xl(e,t,r=0){return new Promise((function(n,o){let a,s,l,g,h,c,i,u,f,p,m,w,x,A,v,E,O,_,I,C;function y(M=5){if(t.signal&&t.signal.aborted)throw t.signal.reason;a+=M,t.onProgress(Math.min(a,100))}function N(M){if(t.signal&&t.signal.aborted)throw t.signal.reason;a=Math.min(Math.max(M,a),100),t.onProgress(a)}return a=r,s=t.maxIteration||10,l=1024*t.maxSizeMB*1024,y(),Pn(e,t).then(function(M){try{return[,g]=M,y(),h=Vl(g,t),y(),new Promise((function(P,D){var L;if(!(L=t.exifOrientation))return Kl(e).then(function(S){try{return L=S,$.call(this)}catch(b){return D(b)}}.bind(this),D);function $(){return P(L)}return $.call(this)})).then(function(P){try{return c=P,y(),Nr().then(function(D){try{return i=D?h:Yl(h,c),y(),u=t.initialQuality||1,f=t.fileType||e.type,Fn(i,f,e.name,e.lastModified,u).then(function(L){try{{let S=function(){if(s--&&(v>l||v>x)){let U,F;return U=C?.95*I.width:I.width,F=C?.95*I.height:I.height,[O,_]=Dn(U,F),_.drawImage(I,0,0,U,F),u*=f==="image/png"?.85:.95,Fn(O,f,e.name,e.lastModified,u).then((function(G){try{return E=G,Vt(I),I=O,v=E.size,N(Math.min(99,Math.floor((A-v)/(A-l)*100))),S}catch(Y){return o(Y)}}),o)}return[1]},b=function(){return Vt(I),Vt(O),Vt(h),Vt(i),Vt(g),N(100),n(E)};if(p=L,y(),m=p.size>l,w=p.size>e.size,!m&&!w)return N(100),n(p);var $;return x=e.size,A=p.size,v=A,I=i,C=!t.alwaysKeepResolution&&m,($=function(U){for(;U;){if(U.then)return void U.then($,o);try{if(U.pop){if(U.length)return U.pop()?b.call(this):U;U=S}else U=U.call(this)}catch(F){return o(F)}}}.bind(this))(S)}}catch(S){return o(S)}}.bind(this),o)}catch(L){return o(L)}}.bind(this),o)}catch(D){return o(D)}}.bind(this),o)}catch(P){return o(P)}}.bind(this),o)}))}const ng=` let scriptImported = false self.addEventListener('message', async (e) => { const { file, id, imageCompressionLibUrl, options } = e.data @@ -83,5 +83,5 @@ self.addEventListener('message', async (e) => { transform: translateX(-100%); } } - `})]}):null},Rh=Object.freeze(Object.defineProperty({__proto__:null,PageTransitionIndicator:ka,default:ka},Symbol.toStringTag,{value:"Module"})),Vi=window.G7Core?.createLogger?.("Comp:PageTransitionBlur")??{log:(...e)=>console.log("[Comp:PageTransitionBlur]",...e),warn:(...e)=>console.warn("[Comp:PageTransitionBlur]",...e)},Ca=({className:e="",style:t})=>{const[r,n]=k.useState(!1);return k.useEffect(()=>{const o=window.G7Core?.TransitionManager;if(!o){Vi.warn("TransitionManager를 찾을 수 없습니다.");return}return n(o.getIsPending()),o.subscribe(s=>{Vi.log("isPending changed:",s),n(s)})},[]),r?d.jsx(W,{className:`fixed inset-0 z-40 bg-white/30 dark:bg-gray-900/30 backdrop-blur-sm transition-opacity duration-150 pointer-events-none ${e}`,style:t,role:"status","aria-label":"페이지 전환 중","data-testid":"page-transition-blur"}):null},e0=Object.freeze(Object.defineProperty({__proto__:null,PageTransitionBlur:Ca,default:Ca},Symbol.toStringTag,{value:"Module"})),Yi={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},Xi=new Set(["hidden","block","inline-block","inline","flex","inline-flex","grid","inline-grid","table","table-row","table-cell","contents","list-item","flow-root"]),t0=new Set(["Div","Flex","Grid","Section","Article","Nav","Aside","Main","Header","Footer","Fragment","Form","Container"]),r0=new Set(["H1","H2","H3","H4","H5","H6","P","Span","Label","A","Strong","Em","Small","Badge"]),n0=new Set(["Input","Textarea","Select","Checkbox","Radio","Toggle","DatePicker","TagInput","SearchBar"]),o0=new Set(["Img","Image","Avatar","AvatarUploader","ImageGallery","ProductImageViewer","FileUploader"]),qi={DataGrid:(e,t)=>d.jsxs("div",{className:"w-full border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden",children:[d.jsx("div",{className:`h-10 bg-gray-100 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 ${e}`,children:d.jsxs("div",{className:"flex items-center h-full px-4 gap-8",children:[d.jsx("div",{className:"h-3 w-16 bg-gray-300 dark:bg-gray-600 rounded"}),d.jsx("div",{className:"h-3 w-24 bg-gray-300 dark:bg-gray-600 rounded"}),d.jsx("div",{className:"h-3 w-20 bg-gray-300 dark:bg-gray-600 rounded"}),d.jsx("div",{className:"h-3 w-16 bg-gray-300 dark:bg-gray-600 rounded"})]})}),Array.from({length:t},(r,n)=>d.jsx("div",{className:`h-12 border-b border-gray-100 dark:border-gray-800 ${e}`,style:{animationDelay:`${n*75}ms`},children:d.jsxs("div",{className:"flex items-center h-full px-4 gap-8",children:[d.jsx("div",{className:"h-3 w-12 bg-gray-200 dark:bg-gray-700 rounded"}),d.jsx("div",{className:"h-3 flex-1 bg-gray-200 dark:bg-gray-700 rounded"}),d.jsx("div",{className:"h-3 w-16 bg-gray-100 dark:bg-gray-800 rounded"}),d.jsx("div",{className:"h-3 w-14 bg-gray-100 dark:bg-gray-800 rounded"})]})},n))]}),Pagination:e=>d.jsx("div",{className:"flex justify-center gap-1.5 py-3",children:Array.from({length:5},(t,r)=>d.jsx("div",{className:`w-8 h-8 bg-gray-200 dark:bg-gray-700 rounded ${e}`},r))}),Tabs:e=>d.jsxs("div",{children:[d.jsx("div",{className:"flex gap-4 border-b border-gray-200 dark:border-gray-700 pb-2 mb-3",children:Array.from({length:3},(t,r)=>d.jsx("div",{className:`h-4 w-20 bg-gray-200 dark:bg-gray-700 rounded ${e}`},r))}),d.jsx("div",{className:`h-32 bg-gray-100 dark:bg-gray-800 rounded ${e}`})]}),TabNavigation:e=>d.jsx("div",{className:"flex gap-4 border-b border-gray-200 dark:border-gray-700 pb-2",children:Array.from({length:3},(t,r)=>d.jsx("div",{className:`h-4 w-20 bg-gray-200 dark:bg-gray-700 rounded ${e}`},r))}),ProductCard:e=>d.jsxs("div",{className:"rounded-lg overflow-hidden",children:[d.jsx("div",{className:`h-48 w-full bg-gray-200 dark:bg-gray-700 ${e}`}),d.jsxs("div",{className:"p-3 space-y-2",children:[d.jsx("div",{className:`h-3.5 w-3/4 bg-gray-200 dark:bg-gray-700 rounded ${e}`}),d.jsx("div",{className:`h-4 w-1/3 bg-gray-300 dark:bg-gray-600 rounded ${e}`})]})]}),UserInfo:e=>d.jsx("div",{className:`h-3 w-14 bg-gray-200 dark:bg-gray-700 rounded ${e}`}),QuantitySelector:e=>d.jsx("div",{className:`h-9 w-28 bg-gray-100 dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 ${e}`}),Header:e=>d.jsx("header",{className:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700",children:d.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:d.jsxs("div",{className:"flex items-center justify-between h-16",children:[d.jsxs("div",{className:"flex items-center gap-8",children:[d.jsx("div",{className:`h-8 w-24 bg-gray-200 dark:bg-gray-700 rounded ${e}`}),d.jsx("div",{className:"hidden lg:flex items-center gap-6",children:Array.from({length:4},(t,r)=>d.jsx("div",{className:`h-3.5 w-16 bg-gray-200 dark:bg-gray-700 rounded ${e}`},r))})]}),d.jsx("div",{className:"flex items-center gap-4",children:Array.from({length:3},(t,r)=>d.jsx("div",{className:`h-8 w-8 bg-gray-200 dark:bg-gray-700 rounded-full ${e}`},r))})]})})}),Footer:e=>d.jsx("footer",{className:"bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 mt-auto",children:d.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8",children:d.jsxs("div",{className:"flex flex-col items-center gap-4",children:[d.jsx("div",{className:`h-4 w-32 bg-gray-200 dark:bg-gray-700 rounded ${e}`}),d.jsx("div",{className:`h-3 w-48 bg-gray-100 dark:bg-gray-800 rounded ${e}`}),d.jsx("div",{className:"flex gap-3",children:Array.from({length:3},(t,r)=>d.jsx("div",{className:`h-6 w-6 bg-gray-200 dark:bg-gray-700 rounded-full ${e}`},r))}),d.jsx("div",{className:`h-3 w-40 bg-gray-100 dark:bg-gray-800 rounded ${e}`})]})})}),Modal:()=>d.jsx(d.Fragment,{}),Toast:()=>d.jsx(d.Fragment,{}),ConfirmDialog:()=>d.jsx(d.Fragment,{})};function a0(e){if(!e||e.length===0)return[];const t=e.filter(n=>n.if),r=e.filter(n=>!n.if);if(r.length>0&&t.length>0){const n=t.filter(o=>!Zi(o.if));return n.length>1&&s0(n)?[...r,Qi(n)]:[...r,...n]}if(t.length>1&&r.length===0){const n=t.filter(o=>!Zi(o.if));return n.length===0?[]:n.length===1?n:[Qi(n)]}return e}function Zi(e){const t=e.replace(/^\{\{|\}\}$/g,"").trim();return t.startsWith("!")||/\b(hasError|isError|isLoading|error|Error)\b/.test(t)||/===\s*0\s*(\)|\}|$)/.test(t)}function s0(e){if(e.length<2)return!1;const t=[];for(const n of e){const o=(n.if||"").replace(/^\{\{|\}\}$/g,"").trim(),a=o.match(/^(.+?)\s*===\s*['"]/);if(a)t.push(a[1].trim());else{const s=o.match(/(.+?)\s*===\s*['"]/);if(!s)return!1;t.push(s[1].trim())}}const r=t[0];return t.every(n=>n===r)}function Qi(e){return e.reduce((t,r)=>Sa(r)>Sa(t)?r:t)}function Sa(e){return e.children?e.children.length+e.children.reduce((t,r)=>t+Sa(r),0):0}function l0(e){return e.includes("{{")?e.replace(/\{\{([^}]+)\}\}/g,(t,r)=>{const n=r.match(/\?[\s]*['"]([^'"]*)['"]\s*:\s*['"]/);return n?n[1]:""}):e}function _a(e,t){if(!e)return"";let r=e;return r=r.replace(/\b(bg-\S+|text-\S+|border\b|border-\S+|shadow\S*|ring-\S+|outline-\S+|divide-\S+|opacity-\S+|font-\S+|tracking-\S+|leading-\S+|whitespace-\S+|truncate|line-clamp-\S+|underline|no-underline|decoration-\S+|cursor-\S+|hover:\S+|focus:\S+|active:\S+|group-hover:\S+|transition\S*|duration-\S+|ease-\S+|animate-\S+|dark:\S+)\b/g,"").replace(/\s{2,}/g," ").trim(),(t==="Grid"||/\bgrid-cols-\d/.test(r))&&(r=r.replace(/\bgrid-cols-(\d+)/g,(n,o)=>{const a=parseInt(o);return a>4?`grid-cols-${Math.ceil(a/2)}`:`grid-cols-${a}`})),r}function i0(e){const{name:t,props:r}=e;if(!r||!t)return"";const n=[];if(t==="Flex"){n.push("flex");const o=r.direction||"row",a={row:"flex-row","row-reverse":"flex-row-reverse",col:"flex-col","col-reverse":"flex-col-reverse"};a[o]&&n.push(a[o]);const s=r.justify||"start",l={start:"justify-start",end:"justify-end",center:"justify-center",between:"justify-between",around:"justify-around",evenly:"justify-evenly"};l[s]&&n.push(l[s]);const g=r.align||"stretch",h={start:"items-start",end:"items-end",center:"items-center",baseline:"items-baseline",stretch:"items-stretch"};h[g]&&n.push(h[g]);const c=r.wrap||"nowrap",i={wrap:"flex-wrap",nowrap:"flex-nowrap","wrap-reverse":"flex-wrap-reverse"};i[c]&&n.push(i[c]),r.gap&&r.gap>0&&n.push(`gap-${r.gap}`)}if(t==="Grid"){n.push("grid");const o=r.cols||1;if(n.push(`grid-cols-${o}`),r.responsive){const a=r.responsive;a.sm&&n.push(`sm:grid-cols-${a.sm}`),a.md&&n.push(`md:grid-cols-${a.md}`),a.lg&&n.push(`lg:grid-cols-${a.lg}`),a.xl&&n.push(`xl:grid-cols-${a.xl}`),a["2xl"]&&n.push(`2xl:grid-cols-${a["2xl"]}`)}r.gap!==void 0&&r.gap>0&&n.push(`gap-${r.gap}`),r.rowGap!==void 0&&r.rowGap>0&&n.push(`gap-y-${r.rowGap}`),r.colGap!==void 0&&r.colGap>0&&n.push(`gap-x-${r.colGap}`)}return n.join(" ")}function c0(e){switch(e){case"pulse":return"animate-pulse";case"wave":return"animate-pulse";case"none":return"";default:return"animate-pulse"}}function qn(e,t,r,n){return!e||e.length===0?[]:a0(e).map((a,s)=>Ji(a,t,r,s,n))}function d0(e,t){const r=e.props?.className||e.className||"";return e.responsive?t>=1024&&e.responsive.desktop?.props?.className?e.responsive.desktop.props.className:t>=768&&e.responsive.tablet?.props?.className?e.responsive.tablet.props.className:r:r}function u0(e,t){const r=e.split(/\s+/).filter(Boolean),n=[],o=[];for(const g of r){const h=g.match(/^(sm|md|lg|xl|2xl):(.+)$/);if(h){const[,c,i]=h;if(Xi.has(i)){n.push({breakpoint:Yi[c]||0,display:i});continue}(Yi[c]||0)<=t&&o.push(i);continue}if(Xi.has(g)){n.push({breakpoint:0,display:g});continue}o.push(g)}if(n.length===0)return{visible:!0,className:e};n.sort((g,h)=>g.breakpoint-h.breakpoint);let a="";for(const g of n)g.breakpoint<=t&&(a=g.display);a||(a=n[0].display);const s=a!=="hidden",l=s?[a,...o].join(" "):"";return{visible:s,className:l}}function f0(e){const t=e.match(/\bgrid-cols-\[([^\]]+)\]/);if(!t)return{className:e};const r=t[1].replace(/_/g," ");return{className:e.replace(/\bgrid-cols-\[([^\]]+)\]/,"").replace(/\s{2,}/g," ").trim(),style:{gridTemplateColumns:r}}}function Ji(e,t,r,n,o){const{name:a,children:s,iteration:l}=e,g=d0(e,o),h=i0(e),c=h?`${h} ${g}`.trim():g,i=l0(c),u=u0(i,o);if(!a||!u.visible)return null;const f=u.className;if(l)return d.jsx(k.Fragment,{children:Array.from({length:r},(m,w)=>Ji({...e,iteration:void 0},t,r,w,o))},n);if(qi[a])return d.jsx("div",{className:f,children:qi[a](t,r)},n);if(t0.has(a)){const m=_a(f,a);if(!s||s.length===0){const E=/\b(h-\S|w-\S)/.test(m)?`${m} bg-gray-200 dark:bg-gray-700 rounded ${t}`:`${m} h-3.5 w-full bg-gray-200 dark:bg-gray-700 rounded ${t}`.trim();return d.jsx("div",{className:E},n)}const w=qn(s,t,r,o);if(!(w.length>0&&w.some(v=>v!==null)))return null;const A=f0(m);return d.jsx("div",{className:A.className,style:A.style,children:w},n)}const p=_a(f,a);if(r0.has(a)){const m={H1:"h-7",H2:"h-6",H3:"h-5",H4:"h-5",H5:"h-4",H6:"h-4",P:"h-3.5",Span:"h-3",Label:"h-3",A:"h-3.5",Badge:"h-5 w-16"},w={H1:"w-3/5",H2:"w-2/5",H3:"w-1/3",H4:"w-1/3",H5:"w-1/4",H6:"w-1/4",P:"w-full",Span:"w-1/4",Label:"w-1/4",A:"w-1/3",Strong:"w-1/5",Em:"w-1/4",Small:"w-1/5",Badge:"w-16"},x=m[a]||"h-3.5",A=w[a]||"w-full",v=a.startsWith("H")?"mb-2 mt-1":"mb-1.5";return d.jsx("div",{className:`${x} ${A} bg-gray-200 dark:bg-gray-700 rounded ${t} ${v} ${p}`.trim()},n)}if(n0.has(a))return a==="Textarea"?d.jsx("div",{className:`h-20 w-full bg-gray-100 dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 mb-2 ${t}`},n):a==="Checkbox"||a==="Radio"||a==="Toggle"?d.jsx("div",{className:`h-5 w-5 bg-gray-200 dark:bg-gray-700 rounded mb-1.5 ${t}`},n):d.jsx("div",{className:`h-9 w-full bg-gray-100 dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 mb-2 ${t}`},n);if(o0.has(a))return a==="Avatar"||a==="AvatarUploader"?d.jsx("div",{className:`h-10 w-10 bg-gray-200 dark:bg-gray-700 rounded-full ${t}`},n):a==="ProductImageViewer"?d.jsx("div",{className:`h-80 w-full bg-gray-200 dark:bg-gray-700 rounded ${t}`},n):d.jsx("div",{className:`h-40 w-full bg-gray-200 dark:bg-gray-700 rounded mb-2 ${t}`},n);if(a==="Button"){if(s&&s.length>0){const m=_a(f,a),w=qn(s,t,r,o);if(!(w.length>0&&w.some(E=>E!==null)))return null;const v=/\b(border|rounded|px-\d|py-\d)/.test(g)?"border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 rounded-lg":"";return d.jsx("div",{className:`${m} ${v}`.trim(),children:w},n)}return d.jsx("div",{className:`h-9 w-24 bg-gray-200 dark:bg-gray-700 rounded ${t}`},n)}return a==="Icon"?d.jsx("div",{className:`h-5 w-5 bg-gray-200 dark:bg-gray-700 rounded ${t}`},n):s&&s.length>0?d.jsx("div",{className:p,children:qn(s,t,r,o)},n):d.jsx("div",{className:`h-3.5 w-full bg-gray-200 dark:bg-gray-700 rounded mb-1.5 ${t}`},n)}const Ea=({components:e,options:t})=>{const r=c0(t.animation),o=window.G7Core?.useResponsive,a=o?.(),s=a?a.width:typeof window<"u"?window.innerWidth:1024;return d.jsx("div",{className:"w-full",role:"status","aria-busy":"true","aria-label":"Loading...",children:qn(e,r,t.iteration_count,s)})},g0=Object.freeze(Object.defineProperty({__proto__:null,PageSkeleton:Ea,default:Ea},Symbol.toStringTag,{value:"Module"})),h0=(e,t)=>window.G7Core?.t?.(e,t)??e,Ri=({options:e})=>{const t=document.documentElement.classList.contains("dark"),r=t?"rgb(17,24,39)":"rgb(249,250,251)",n=t?"#6b7280":"#9ca3af",o=t?"#9ca3af":"#6b7280";return d.jsxs("div",{style:{position:"absolute",inset:0,zIndex:2147483647,overflow:"hidden",background:r,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"flex-start",paddingTop:"15%",gap:"12px"},children:[d.jsx("div",{style:{width:"32px",height:"32px",border:`3px solid ${n}`,borderTopColor:"transparent",borderRadius:"50%",animation:"g7-spin 0.8s linear infinite"}}),d.jsx("span",{style:{color:o,fontSize:"14px"},children:e?.text||h0("nav.loading")})]})},p0=Object.freeze(Object.defineProperty({__proto__:null,default:Ri},Symbol.toStringTag,{value:"Module"})),Dr=(e,t)=>window.G7Core?.t?.(e,t)??e,ec=({currentPage:e,totalPages:t,onPageChange:r,maxVisiblePages:n=5,showFirstLast:o=!0,className:a="",style:s,prevText:l,nextText:g,id:h,editorAttrs:c})=>{const i=k.useMemo(()=>{const m=[];if(t<=n+2)for(let w=1;w<=t;w++)m.push(w);else{const w=Math.floor(n/2);let x=Math.max(2,e-w),A=Math.min(t-1,e+w);e<=w+1?A=n:e>=t-w&&(x=t-n+1),m.push(1),x>2&&m.push("...");for(let v=x;v<=A;v++)m.push(v);A1&&m.push(t)}return m},[e,t,n]),u=m=>{m<1||m>t||m===e||r(m)},f=()=>{e>1&&r(e-1)},p=()=>{eu(1),disabled:e===1,className:"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800","aria-label":Dr("common.first_page"),children:"«"}),d.jsx(Q,{onClick:f,disabled:e===1,className:"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800","aria-label":Dr("common.prev_page"),children:l||d.jsx(d.Fragment,{children:"‹"})}),d.jsx(W,{className:"flex items-center gap-1",children:i.map((m,w)=>{if(m==="...")return d.jsx(te,{className:"px-3 py-1 text-sm text-gray-500 dark:text-gray-400",children:"..."},`ellipsis-${w}`);const x=m,A=x===e;return d.jsx(Q,{onClick:()=>u(x),className:`px-3 py-1 text-sm border rounded ${A?"bg-blue-500 dark:bg-blue-600 text-white border-blue-500 dark:border-blue-600":"border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800"}`,"aria-label":Dr("common.page_n",{n:x}),"aria-current":A?"page":void 0,children:x},x)})}),d.jsx(Q,{onClick:p,disabled:e===t,className:"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800","aria-label":Dr("common.next_page"),children:g||d.jsx(d.Fragment,{children:"›"})}),o&&d.jsx(Q,{onClick:()=>u(t),disabled:e===t,className:"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800","aria-label":Dr("common.last_page"),children:"»"})]})},m0=Object.freeze(Object.defineProperty({__proto__:null,Pagination:ec},Symbol.toStringTag,{value:"Module"})),tc=(e,t)=>window.G7Core?.t?.(e,t)??e,rc=({name:e="search",placeholder:t,value:r,onChange:n,onSubmit:o,showButton:a=!1,suggestions:s=[],onSuggestionClick:l,showSuggestions:g=!1,className:h="",style:c,id:i,editorAttrs:u})=>{const f=t??tc("common.search_placeholder"),[p,m]=k.useState(""),[w,x]=k.useState(!1),A=k.useRef(null),v=k.useRef(""),E=r!==void 0?r:p,O=g&&w&&s.length>0&&E.length>0;k.useEffect(()=>{r!==void 0&&(v.current=r)},[r]);const _=y=>{const N=y.target.value;m(N),n?.(y),v.current!==""&&N===""&&!y.nativeEvent.inputType&&setTimeout(()=>{const M=A.current?.querySelector("form");M&&M.requestSubmit()},0),v.current=N},I=y=>{m(y.text);const N={target:{value:y.text,name:e}};n?.(N),l?.(y),x(!1)},C=y=>{y.preventDefault(),o?.(y)};return d.jsxs(W,{ref:A,className:`relative ${h}`,style:c,id:i,...u,children:[d.jsx(so,{onSubmit:C,className:"relative",children:d.jsxs(W,{className:`relative flex items-center ${a?"gap-2":""}`,children:[d.jsxs(W,{className:"relative flex-1",children:[d.jsx(W,{className:"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none",children:d.jsx(de,{name:Je.Search,className:"w-5 h-5 text-gray-400 dark:text-gray-500"})}),d.jsx(xt,{type:"search",name:e,value:E,onChange:_,onFocus:()=>x(!0),onBlur:()=>setTimeout(()=>x(!1),200),placeholder:f,className:"w-full pl-10 pr-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white text-sm"})]}),a&&d.jsx(Q,{type:"submit",className:"px-4 py-2 bg-gray-800 dark:bg-gray-600 text-white rounded-lg hover:bg-gray-900 dark:hover:bg-gray-500 transition-colors text-sm font-medium cursor-pointer h-[42px]",children:tc("common.search")})]})}),O&&d.jsx(W,{className:"absolute z-10 w-full mt-2 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg max-h-64 overflow-y-auto",children:s.map(y=>d.jsx(W,{className:"px-4 py-3 hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer border-b border-gray-100 dark:border-gray-700 last:border-b-0 transition-colors",onClick:()=>I(y),children:d.jsxs(W,{className:"flex items-center gap-2",children:[d.jsx(de,{name:Je.Search,className:"w-4 h-4 text-gray-400 dark:text-gray-500"}),d.jsx(te,{className:"text-sm text-gray-700 dark:text-gray-300",children:y.text})]})},y.id))})]})},b0=Object.freeze(Object.defineProperty({__proto__:null,SearchBar:rc},Symbol.toStringTag,{value:"Module"})),vt=window.G7Core,y0={sm:"md",md:"lg",lg:"xl",xl:"2xl","2xl":"3xl"};function Ta({src:e,fallbackText:t="U",size:r="lg",uploadEndpoint:n="/api/me/avatar",deleteEndpoint:o="/api/me/avatar",onUploadSuccess:a,onUploadError:s,onDeleteSuccess:l,onDeleteError:g,showDeleteButton:h=!0,accept:c="image/*",maxSize:i=5,className:u="",uploadButtonText:f,deleteButtonText:p,readOnly:m=!1,confirmDelete:w=!0,deleteConfirmMessage:x,confirmUpload:A=!0,uploadConfirmMessage:v,uploadSuccessActions:E,uploadErrorActions:O,deleteSuccessActions:_,deleteErrorActions:I,id:C,editorAttrs:y}){const N=k.useRef(null),[M,P]=k.useState(!1),[D,L]=k.useState(!1),[$,S]=k.useState(void 0),[b,U]=k.useState(null),[F,G]=k.useState(!1),[Y,B]=k.useState(!1),[V,j]=k.useState(null),[H,q]=k.useState(null),ue=k.useRef(`avatar-upload-${Math.random().toString(36).slice(2,11)}`).current;k.useEffect(()=>{if(V){const oe=URL.createObjectURL(V);return q(oe),()=>URL.revokeObjectURL(oe)}else q(null)},[V]);const ee=k.useCallback(oe=>vt?.t?.(oe)??oe,[]),fe=k.useCallback(()=>{const oe=document.cookie.match(/XSRF-TOKEN=([^;]+)/);return oe?decodeURIComponent(oe[1]):null},[]),R=k.useCallback(()=>vt?.api?.getToken?.()??null,[]),ke=k.useCallback(async oe=>{B(!1),j(null),P(!0),U(null);try{const ae=new FormData;ae.append("avatar",oe);const be=fe(),xe=R(),He=await fetch(n,{method:"POST",headers:{Accept:"application/json",...be&&{"X-XSRF-TOKEN":be},...xe&&{Authorization:`Bearer ${xe}`}},credentials:"include",body:ae});if(!He.ok){const Oe=await He.json().catch(()=>({}));throw new Error(Oe.message||ee("attachment.upload_failed"))}const Pe=await He.json(),Ke=Pe.data||Pe;Ke.avatar&&S(Ke.avatar),a?.(Ke),vt?.toast?.success?.(ee("mypage.profile.avatar_uploaded")),E?.length?E.forEach(Oe=>vt?.dispatch?.(Oe)):vt?.refetchDataSource?.("user")}catch(ae){const be=ae instanceof Error?ae:new Error(String(ae));U(be.message),s?.(be),vt?.toast?.error?.(be.message),O?.length&&O.forEach(xe=>vt?.dispatch?.(xe))}finally{P(!1),N.current&&(N.current.value="")}},[n,a,s,fe,R,ee]),me=k.useCallback(async oe=>{const ae=oe.target.files?.[0];if(!ae)return;U(null);const be=i*1024*1024;if(ae.size>be){const xe=new Error(ee("attachment.file_too_large").replace(":max",`${i}MB`));U(xe.message),s?.(xe),vt?.toast?.error?.(xe.message);return}if(c&&!ae.type.match(c.replace("*",".*"))){const xe=new Error(ee("attachment.invalid_file_type"));U(xe.message),s?.(xe),vt?.toast?.error?.(xe.message);return}A?(j(ae),B(!0)):ke(ae)},[i,c,s,A,ke,ee]),Ge=k.useCallback(async()=>{G(!1),L(!0),U(null);try{const oe=fe(),ae=R(),be=await fetch(o,{method:"DELETE",headers:{Accept:"application/json","Content-Type":"application/json",...oe&&{"X-XSRF-TOKEN":oe},...ae&&{Authorization:`Bearer ${ae}`}},credentials:"include"});if(!be.ok){const xe=await be.json().catch(()=>({}));throw new Error(xe.message||ee("attachment.delete_failed"))}S(null),l?.(),vt?.toast?.success?.(ee("mypage.profile.avatar_deleted")),_?.length?_.forEach(xe=>vt?.dispatch?.(xe)):vt?.refetchDataSource?.("user")}catch(oe){const ae=oe instanceof Error?oe:new Error(String(oe));U(ae.message),g?.(ae),vt?.toast?.error?.(ae.message),I?.length&&I.forEach(be=>vt?.dispatch?.(be))}finally{L(!1)}},[o,l,g,fe,R,ee]),De=k.useCallback(()=>{w?G(!0):Ge()},[w,Ge]),ye=k.useCallback(()=>{G(!1)},[]),Me=k.useCallback(()=>{B(!1),j(null),N.current&&(N.current.value="")},[]),Ce=k.useCallback(()=>{V&&ke(V)},[V,ke]),we=$===void 0?e:$,Ue=!!we,Le=y0[r]||"lg",K=F||Y,re=()=>d.jsxs(W,{className:"flex items-center justify-center gap-2",children:[d.jsx(xt,{ref:N,id:ue,type:"file",accept:c,className:"hidden",onChange:me,disabled:M}),!Ue&&d.jsxs(yr,{htmlFor:ue,className:`inline-flex items-center gap-2 px-4 py-2 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 rounded-lg text-sm font-medium hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors cursor-pointer ${M?"opacity-50 cursor-not-allowed":""}`,children:[M?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"image",size:"sm"}),d.jsx(te,{children:f||ee("mypage.profile.register_avatar")})]}),Ue&&d.jsxs(d.Fragment,{children:[d.jsxs(yr,{htmlFor:ue,className:`inline-flex items-center gap-2 px-4 py-2 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 rounded-lg text-sm font-medium hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors cursor-pointer ${M?"opacity-50 cursor-not-allowed":""}`,children:[M?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"upload",size:"sm"}),d.jsx(te,{children:f||ee("common.change")})]}),h&&d.jsxs(Q,{type:"button",className:"inline-flex items-center gap-2 px-4 py-2 border border-red-300 dark:border-red-600 text-red-600 dark:text-red-400 rounded-lg text-sm font-medium hover:bg-red-50 dark:hover:bg-red-900/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",onClick:De,disabled:D,children:[D?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"trash-2",size:"sm"}),d.jsx(te,{children:p||ee("common.delete")})]})]})]});return d.jsxs(W,{className:`flex flex-col items-center gap-3 ${u}`,id:C,...y,children:[Y&&H?d.jsxs(W,{className:"relative",children:[d.jsx(Lt,{src:H,alt:"Preview",className:`rounded-full object-cover ${r==="sm"?"w-10 h-10":r==="md"?"w-12 h-12":r==="lg"?"w-16 h-16":r==="xl"?"w-24 h-24":"w-32 h-32"}`}),d.jsx(W,{className:"absolute inset-0 rounded-full bg-blue-500/20 border-2 border-blue-500 border-dashed"})]}):d.jsx($r,{avatar:we||void 0,name:t,size:Le}),!m&&d.jsxs(W,{className:"w-[220px] flex flex-col items-center gap-2",children:[Y&&V&&d.jsxs(W,{className:"w-full p-3 bg-blue-50 dark:bg-blue-950/50 border border-blue-200 dark:border-blue-800 rounded-lg",children:[d.jsxs(W,{className:"flex items-center gap-2 mb-2",children:[d.jsx(de,{name:"upload",size:"sm",className:"text-blue-600 dark:text-blue-400 shrink-0"}),d.jsx(te,{className:"text-sm font-medium text-blue-800 dark:text-blue-300",children:v||ee("mypage.profile.upload_avatar_confirm")})]}),d.jsxs(W,{className:"text-xs text-blue-600 dark:text-blue-400 truncate mb-3",title:V.name,children:[V.name," (",(V.size/1024/1024).toFixed(2),"MB)"]}),d.jsxs(W,{className:"grid grid-cols-2 gap-2",children:[d.jsxs(Q,{type:"button",className:"inline-flex items-center justify-center gap-1.5 px-3 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-md text-sm font-medium transition-colors disabled:opacity-50",onClick:Ce,disabled:M,children:[M?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"check",size:"sm"}),d.jsx(te,{children:ee("common.confirm")})]}),d.jsx(Q,{type:"button",className:"inline-flex items-center justify-center gap-1.5 px-3 py-2 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 rounded-md text-sm font-medium hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors",onClick:Me,children:d.jsx(te,{children:ee("common.cancel")})})]})]}),F&&d.jsxs(W,{className:"w-full p-3 bg-red-50 dark:bg-red-950/50 border border-red-200 dark:border-red-800 rounded-lg",children:[d.jsxs(W,{className:"flex items-center gap-2 mb-2",children:[d.jsx(de,{name:"alert-triangle",size:"sm",className:"text-red-600 dark:text-red-400 shrink-0"}),d.jsx(te,{className:"text-sm font-medium text-red-800 dark:text-red-300",children:x||ee("mypage.profile.delete_avatar_confirm")})]}),d.jsxs(W,{className:"grid grid-cols-2 gap-2",children:[d.jsxs(Q,{type:"button",className:"inline-flex items-center justify-center gap-1.5 px-3 py-2 bg-red-600 hover:bg-red-700 text-white rounded-md text-sm font-medium transition-colors disabled:opacity-50",onClick:Ge,disabled:D,children:[D?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"trash-2",size:"sm"}),d.jsx(te,{children:ee("common.delete")})]}),d.jsx(Q,{type:"button",className:"inline-flex items-center justify-center gap-1.5 px-3 py-2 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 rounded-md text-sm font-medium hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors",onClick:ye,children:d.jsx(te,{children:ee("common.cancel")})})]})]}),!K&&re()]}),b&&!K&&d.jsxs(W,{className:"flex items-center gap-2 text-sm text-red-600 dark:text-red-400",children:[d.jsx(de,{name:"alert-circle",size:"sm"}),d.jsx(te,{children:b})]})]})}const v0=Object.freeze(Object.defineProperty({__proto__:null,AvatarUploader:Ta,default:Ta},Symbol.toStringTag,{value:"Module"})),nc=()=>window.G7Core,Zn=(e,t)=>window.G7Core?.t?.(e,t)??e,oc={horizontal:"flex items-center gap-1.5",vertical:"flex flex-col items-start"},w0=()=>[{key:"view_profile",label:Zn("userinfo.view_profile"),icon:"user",path:"/users/{{userId}}"},{key:"view_posts",label:Zn("userinfo.view_posts"),icon:"file-lines",path:"/users/{{userId}}/posts"}],Na=({text:e,title:t})=>e?d.jsx(te,{className:"text-sm text-gray-500 dark:text-gray-400",title:t,children:e}):null,ac=({author:e,name:t,userId:r,subText:n,subTextTitle:o,isGuest:a=!1,isWithdrawn:s=!1,showDropdown:l=!0,clickable:g=!0,profilePath:h="/users/{userId}",className:c="",layout:i="vertical",text:u,stopPropagation:f=!1,menuItems:p,hideMenuItems:m=[],appendMenuItems:w=[],id:x,editorAttrs:A})=>{const v=r??e?.uuid,E=a||e?.is_guest||!1,O=s||e?.status==="withdrawn",_=O?Zn("userinfo.withdrawn_user"):u??t??e?.name??"",[I,C]=k.useState(!1),[y,N]=k.useState({top:0,left:0}),M=k.useRef(null),P=k.useRef(null),D=k.useRef(null),L=h.replace("{userId}",String(v??"")),$=`${oc[i]} ${c}`;k.useEffect(()=>{if(!I)return;const j=q=>{const ue=q.target,ee=M.current?.contains(ue),fe=P.current?.contains(ue);!ee&&!fe&&C(!1)},H=()=>C(!1);return document.addEventListener("mousedown",j),window.addEventListener("scroll",H,!0),window.addEventListener("resize",H),()=>{document.removeEventListener("mousedown",j),window.removeEventListener("scroll",H,!0),window.removeEventListener("resize",H)}},[I]);const S=k.useCallback(()=>{if(p&&p.length>0)return p.filter(q=>q.show!==!1);let H=w0().filter(q=>!m.includes(q.key)&&q.show!==!1);return w&&w.length>0&&(H=[...H,...w.filter(q=>q.show!==!1)]),H},[p,m,w]),b=k.useCallback(()=>{if(D.current){const j=D.current.getBoundingClientRect();N({top:j.bottom+4,left:j.left})}},[]),U=k.useCallback((j,H)=>{if(H.stopPropagation(),H.preventDefault(),C(!1),j.onClick)j.onClick();else if(j.path){const q=j.path.replace(/\{\{userId\}\}/g,String(v??"")),ue=nc();ue?.navigate?ue.navigate(q):window.location.href=q}},[v]),F=k.useCallback(j=>{j.preventDefault(),f&&j.stopPropagation(),!(E||!v)&&(l?(I||b(),C(H=>!H)):g&&nc()?.navigate?.(L))},[f,E,v,l,I,b,g,L]);if(E||!v)return d.jsxs(W,{className:$,id:x,...A,children:[d.jsxs(W,{className:"flex items-center gap-1.5 text-gray-400 dark:text-gray-500",children:[d.jsx(te,{children:_}),d.jsx(te,{className:"text-xs px-1.5 py-0.5 bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-300 rounded",children:Zn("userinfo.guest_badge")})]}),d.jsx(Na,{text:n,title:o})]});if(O)return d.jsxs(W,{className:$,id:x,...A,children:[d.jsx(te,{className:"text-gray-400 dark:text-gray-500 line-through",children:_}),d.jsx(Na,{text:n,title:o})]});const G=S(),B=/\btext-\S+/.test(c)?"":"text-gray-900 dark:text-white",V=l||g?`${B} hover:text-blue-600 dark:hover:text-blue-400 cursor-pointer font-medium`.trim():`${B} font-medium`.trim();return d.jsxs(W,{ref:M,className:`relative inline-block ${c}`,id:x,...A,children:[d.jsxs(W,{className:oc[i],children:[d.jsx(Q,{ref:D,onClick:F,className:V,children:_}),d.jsx(Na,{text:n,title:o})]}),l&&I&&G.length>0&&Jt.createPortal(d.jsx(W,{ref:P,className:"fixed w-40 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg py-1 z-[9999]",style:{top:y.top,left:y.left},"data-testid":"author-dropdown-menu",children:G.map(j=>d.jsxs(Q,{onClick:H=>U(j,H),className:"flex items-center justify-start gap-2 w-full text-left px-3 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer","data-testid":`menu-item-${j.key}`,children:[j.icon&&d.jsx(de,{name:j.icon,className:"w-4 h-4"}),d.jsx(te,{children:j.label})]},j.key))}),document.body)]})},x0=Object.freeze(Object.defineProperty({__proto__:null,UserInfo:ac},Symbol.toStringTag,{value:"Module"})),sc=({tabs:e,activeTabId:t,onTabChange:r,variant:n="underline",className:o="",style:a,hiddenTabIds:s=[],mobileBreakpoint:l=768,id:g,editorAttrs:h})=>{const i=window.G7Core?.useResponsive,u=i?.(),f=u?u.width{!v.disabled&&v.id!==t&&r?.(v.id)},m=v=>{const E=v.target.value,O=Number(E),_=typeof E=="string"&&E!==""&&!Number.isNaN(O)?O:E,I=e.find(C=>String(C.id)===String(_));I&&p(I)},w=s.length>0?e.filter(v=>!s.includes(v.id)):e;if(f)return d.jsx(W,{className:`relative ${o}`,style:a,id:g,...h,children:d.jsx(Va,{value:t!==void 0?String(t):"",onChange:m,options:w.map(v=>({value:String(v.id),label:v.badge!==void 0?`${v.label} (${v.badge})`:v.label,disabled:v.disabled})),className:"w-full"})});const x=v=>{const E=v.id===t,O="flex items-center gap-2 px-3 py-2 font-medium text-sm transition-all shrink-0 whitespace-nowrap";if(v.disabled)return`${O} opacity-50 cursor-not-allowed text-gray-400 dark:text-gray-600`;switch(n){case"pills":return E?`${O} bg-blue-600 dark:bg-blue-500 text-white rounded-lg`:`${O} text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg`;case"underline":return E?`${O} text-gray-900 dark:text-white border-b-2 border-gray-900 dark:border-white`:`${O} text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 border-b-2 border-transparent hover:border-gray-300 dark:hover:border-gray-600`;default:return E?`${O} text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20 border-b-2 border-blue-600 dark:border-blue-400`:`${O} text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 border-b-2 border-transparent`}},A=n==="underline"?"flex gap-0 border-b border-gray-200 dark:border-gray-700":"flex gap-2";return d.jsx(W,{className:`relative ${o}`,style:a,id:g,...h,children:d.jsx(Ur,{className:A,children:w.map(v=>d.jsxs(Q,{type:"button",onClick:()=>p(v),disabled:v.disabled,className:x(v),children:[v.iconName&&d.jsx(de,{name:v.iconName,size:"sm"}),d.jsx(te,{children:v.label}),v.badge!==void 0&&d.jsx(W,{className:"flex items-center justify-center min-w-5 h-5 px-1.5 bg-red-500 text-white text-xs font-bold rounded-full",children:d.jsx(te,{children:v.badge})})]},v.id))})})},k0=Object.freeze(Object.defineProperty({__proto__:null,TabNavigation:sc},Symbol.toStringTag,{value:"Module"})),C0={Header:()=>Promise.resolve().then(()=>rd),Footer:()=>Promise.resolve().then(()=>sd),MobileNav:()=>Promise.resolve().then(()=>ld),SlotContainer:()=>Promise.resolve().then(()=>ed),NotificationCenter:()=>Promise.resolve().then(()=>td),ProductCard:()=>Promise.resolve().then(()=>Id),ImageGallery:()=>Promise.resolve().then(()=>Nl),ProductImageViewer:()=>Promise.resolve().then(()=>$f),QuantitySelector:()=>Promise.resolve().then(()=>zf),PostReactions:()=>Promise.resolve().then(()=>jf),RichTextEditor:()=>Promise.resolve().then(()=>Bf),HtmlContent:()=>Promise.resolve().then(()=>Wf),HtmlEditor:()=>Promise.resolve().then(()=>Kf),ExpandableContent:()=>Promise.resolve().then(()=>Vf),FileUploader:()=>Promise.resolve().then(()=>Wh),ConfirmDialog:()=>Promise.resolve().then(()=>qf),SocialLoginButtons:()=>Promise.resolve().then(()=>Vh),Toast:()=>Promise.resolve().then(()=>Qh),PageTransitionIndicator:()=>Promise.resolve().then(()=>Rh),PageTransitionBlur:()=>Promise.resolve().then(()=>e0),PageSkeleton:()=>Promise.resolve().then(()=>g0),PageLoading:()=>Promise.resolve().then(()=>p0),ThemeToggle:()=>Promise.resolve().then(()=>qc),Pagination:()=>Promise.resolve().then(()=>m0),SearchBar:()=>Promise.resolve().then(()=>b0),Avatar:()=>Promise.resolve().then(()=>Jc),AvatarUploader:()=>Promise.resolve().then(()=>v0),UserInfo:()=>Promise.resolve().then(()=>x0),Modal:()=>Promise.resolve().then(()=>Xf),TabNavigation:()=>Promise.resolve().then(()=>k0)},S0=({id:e,className:t,style:r,children:n,editorAttrs:o})=>d.jsx(W,{id:e,className:t,style:r,...o,children:n}),_0=({id:e,children:t,cols:r=1,responsive:n,gap:o,rowGap:a,colGap:s,autoRows:l,autoCols:g,flow:h="row",className:c="",style:i,onClick:u,editorAttrs:f})=>{const p=["grid"];if(r&&p.push(`grid-cols-${r}`),n&&(n.sm&&p.push(`sm:grid-cols-${n.sm}`),n.md&&p.push(`md:grid-cols-${n.md}`),n.lg&&p.push(`lg:grid-cols-${n.lg}`),n.xl&&p.push(`xl:grid-cols-${n.xl}`),n["2xl"]&&p.push(`2xl:grid-cols-${n["2xl"]}`)),o!==void 0&&o>0&&p.push(`gap-${o}`),a!==void 0&&a>0&&p.push(`gap-y-${a}`),s!==void 0&&s>0&&p.push(`gap-x-${s}`),l){const w={auto:"auto-rows-auto",min:"auto-rows-min",max:"auto-rows-max",fr:"auto-rows-fr"};p.push(w[l])}if(g){const w={auto:"auto-cols-auto",min:"auto-cols-min",max:"auto-cols-max",fr:"auto-cols-fr"};p.push(w[g])}const m={row:"grid-flow-row",col:"grid-flow-col",dense:"grid-flow-dense","row-dense":"grid-flow-row-dense","col-dense":"grid-flow-col-dense"};return p.push(m[h]),c&&p.push(c),d.jsx(W,{id:e,className:p.join(" "),style:i,onClick:u,...f,children:t})},E0=({id:e,children:t,direction:r="row",justify:n="start",align:o="stretch",wrap:a="nowrap",gap:s=0,grow:l=!1,shrink:g=!0,className:h="",style:c,onClick:i,editorAttrs:u})=>{const f=["flex"],p={row:"flex-row","row-reverse":"flex-row-reverse",col:"flex-col","col-reverse":"flex-col-reverse"};f.push(p[r]);const m={wrap:"flex-wrap",nowrap:"flex-nowrap","wrap-reverse":"flex-wrap-reverse"};f.push(m[a]);const w={start:"justify-start",end:"justify-end",center:"justify-center",between:"justify-between",around:"justify-around",evenly:"justify-evenly"};f.push(w[n]);const x={start:"items-start",end:"items-end",center:"items-center",baseline:"items-baseline",stretch:"items-stretch"};return f.push(x[o]),s>0&&f.push(`gap-${s}`),l===!0?f.push("flex-grow"):typeof l=="number"&&l>0&&f.push(`flex-grow-${l}`),g===!1?f.push("shrink-0"):g===!0?f.push("flex-shrink"):typeof g=="number"&&g>0&&f.push(`flex-shrink-${g}`),h&&f.push(h),d.jsx(W,{id:e,className:f.join(" "),style:c,onClick:i,...u,children:t})},T0=({id:e,title:t,subtitle:r,children:n,padding:o="md",background:a="none",maxWidth:s,centered:l=!1,border:g=!1,shadow:h="none",rounded:c=!1,className:i="",style:u,onClick:f,editorAttrs:p})=>{const m=[],w={none:"p-0",sm:"p-2",md:"p-4",lg:"p-6",xl:"p-8"};m.push(w[o]);const x={none:"",white:"bg-white dark:bg-gray-700",gray:"bg-gray-50 dark:bg-gray-800",primary:"bg-blue-50 dark:bg-blue-900/20",secondary:"bg-gray-50 dark:bg-gray-800"};if(a!=="none"&&m.push(x[a]),s){const v={sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl","2xl":"max-w-2xl","4xl":"max-w-4xl","6xl":"max-w-6xl","7xl":"max-w-7xl",full:"max-w-full"};m.push(v[s])}l&&m.push("mx-auto"),g&&m.push("border","border-gray-200","dark:border-gray-700");const A={none:"",sm:"shadow-sm",md:"shadow-md",lg:"shadow-lg",xl:"shadow-xl"};return h!=="none"&&m.push(A[h]),c&&m.push("rounded-lg"),i&&m.push(i),d.jsxs(Xa,{id:e,className:m.join(" "),style:u,onClick:f,...p,children:[(t||r)&&d.jsxs(W,{className:"mb-4",children:[t&&d.jsx(Wa,{className:"text-2xl font-bold text-gray-900 dark:text-white",children:t}),r&&d.jsx(Dt,{className:"mt-1 text-sm text-gray-600 dark:text-gray-400",children:r})]}),n]})},N0=({id:e,leftWidth:t="250px",rightWidth:r="300px",leftSlot:n,centerSlot:o,rightSlot:a,className:s="",style:l,editorAttrs:g})=>{const h=`flex flex-row w-full h-full ${s}`.trim(),c={width:t,flexShrink:0},i={flex:1,minWidth:0},u={width:r,flexShrink:0};return d.jsxs(W,{id:e,className:h,style:l,...g,children:[d.jsx(W,{className:"flex flex-col",style:c,children:n}),d.jsx(W,{className:"flex flex-col",style:i,children:o}),d.jsx(W,{className:"flex flex-col",style:u,children:a})]})},A0={identifier:"sirsoft-basic",vendor:"sirsoft",name:{ko:"Basic",en:"Basic"},version:"1.0.1",license:"MIT",description:{ko:"그누보드7 기본 사용자 템플릿",en:"Gnuboard7 default user template"},type:"user",locales:["ko","en"],author:{name:"sirsoft",email:"contact@sirsoft.com",url:"https://sirsoft.com"},release_date:"2026-01-07",g7_version:">=7.0.0",dependencies:{modules:{"sirsoft-board":">=1.0.0","sirsoft-ecommerce":">=1.0.0","sirsoft-page":">=1.0.0"},plugins:{"sirsoft-daum_postcode":">=1.0.0"}},assets:{css:["dist/css/components.css"],js:["dist/js/components.iife.js"],fonts:[],images:[]},components:{basic:["a","button","checkbox","div","form","h1","h2","h3","h4","hr","icon","img","input","label","li","nav","p","section","select","span","svg","table","tbody","td","textarea","th","thead","tr","ul"],composite:["header","footer","mobile-nav","product-card","rich-text-editor","image-gallery","quantity-selector","post-reactions","social-login-buttons","file-uploader","card","modal","toast","pagination","stat-card","status-badge","tab-navigation","empty-state","loading-spinner","breadcrumb","search-bar","dropdown"],layout:["container","flex","grid","section"]},preview:{thumbnail:"preview/thumbnail.png",screenshots:["preview/screenshot1.png","preview/screenshot2.png"]},error_config:{layouts:{401:"errors/401",403:"errors/403",404:"errors/404",500:"errors/500",503:"errors/503",maintenance:"errors/maintenance"}},features:{dark_mode:!0,responsive:!0,multi_language:!0,multi_currency:!0},github_url:"https://github.com/gnuboard/g7-template-sirsoft-basic",github_changelog_url:"https://github.com/gnuboard/g7-template-sirsoft-basic/blob/main/CHANGELOG.md",externals:[{id:"fontawesome",type:"style",url:"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css",preconnect:"https://cdnjs.cloudflare.com"},{id:"pretendard",type:"webfont",url:"https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css",preconnect:"https://cdn.jsdelivr.net",crossorigin:"anonymous"}]},lc={KRW:{locale:"ko-KR",decimals:0},USD:{locale:"en-US",decimals:2},JPY:{locale:"ja-JP",decimals:0},CNY:{locale:"zh-CN",decimals:2},EUR:{locale:"de-DE",decimals:2}};function Lr(e,t="KRW"){if(!Number.isFinite(e))return"0";const r=lc[t]||lc.KRW;try{return new Intl.NumberFormat(r.locale,{style:"currency",currency:t,minimumFractionDigits:r.decimals,maximumFractionDigits:r.decimals}).format(e)}catch{return e.toLocaleString()+(t==="KRW"?"원":"")}}function Qn(e,t,r=0){if(!e)return;const n=e.KRW?.value??e.KRW?.price??0,o={};for(const[a,s]of Object.entries(e)){const l=s?.value??s?.price??0;let g=0;r>0&&(a==="KRW"?g=r:n>0&&(g=r*l/n));const h=(l+g)*t;o[a]={value:h,formatted:Lr(h,a)}}return o}function Jn(e){const t={};for(const n of e){const o=n?.multiCurrencyTotalPrice;if(o)for(const[a,s]of Object.entries(o)){const l=s?.value??s?.price??0;t[a]=(t[a]??0)+l}}const r={};for(const[n,o]of Object.entries(t))r[n]={value:o,formatted:Lr(o,n)};return r}function ic(e,t){if(!e||!t?.length)return 0;let r=0;for(const n of t){const o=e[n.id];if(o==null)continue;const a=n.values?.find(s=>s.id===Number(o));a&&(r+=a.price_adjustment??0)}return r}function Rn(e){return e.name_localized?e.name_localized:typeof e.name=="string"?e.name:e.name?.ko??""}function M0(e,t,r){if(t&&r in t)return t[r];if(Array.isArray(e)){const n=e.find(o=>typeof o.key=="string"?o.key===r:o.key?.ko===r||Object.values(o.key).includes(r));return n?typeof n.value=="string"?n.value:n.value?.ko??Object.values(n.value)[0]:void 0}return e[r]}function O0(e,t){if(t)return t;if(!Array.isArray(e))return e;const r={};for(const n of e){const o=typeof n.key=="string"?n.key:n.key?.ko??Object.values(n.key)[0]??"",a=typeof n.value=="string"?n.value:n.value?.ko??Object.values(n.value)[0]??"";o&&(r[o]=a)}return r}function I0(e,t,r){return r.find(n=>!n?.option_values||!n?.is_active?!1:e.every(o=>{const a=Rn(o),s=t?.[a];return M0(n.option_values,n.option_values_localized,a)===s}))}function D0(e,t){const r=e.params;if(!r)return;const{optionGroups:n,options:o,selectedOptionItems:a,preferredCurrency:s}=r;let l;if(r.newGroupName&&r.newValue?l={...r.currentSelection??{},[r.newGroupName]:r.newValue}:l=r.currentSelection??{},!n?.every(O=>{const _=Rn(O);return l?.[_]}))return;const h=I0(n,l,o??[]);if(!h){t.setState?.({currentSelection:{},__mergeMode:"shallow"});return}const c=n.map(O=>l[Rn(O)]).join("_"),i=a??[];if(i.find(O=>O.id===c)){const O=window.G7Core;O?.toast?.warning?.(O?.t?.("sirsoft-ecommerce.shop.already_added_option")??"이미 추가된 옵션입니다."),t.setState?.({currentSelection:{},__mergeMode:"shallow"});return}const f=h.selling_price??0,p={};n.forEach(O=>{const _=Rn(O);p[_]=l[_]});const m=r.additionalOptionGroups??[],w={};for(const O of m){if(!O.is_required)continue;const _=O.values?.find(I=>I.is_default);_&&(w[O.id]=_.id)}const x=ic(w,m),A=f+x,v={id:c,optionId:h.id,options:p,optionValues:O0(h.option_values,h.option_values_localized),quantity:1,stock:h.stock_quantity??999,unitPrice:f,unitPriceFormatted:Lr(f,s),totalPrice:A,totalPriceFormatted:Lr(A,s),multiCurrencyUnitPrice:h.multi_currency_selling_price,multiCurrencyTotalPrice:Qn(h.multi_currency_selling_price,1,x),additionalOptionSelections:w,additionalOptionsTotal:x},E=[...i,v];t.setState?.({selectedOptionItems:E,selectedTotalMultiCurrency:Jn(E),currentSelection:{},__mergeMode:"shallow"})}function L0(e,t){const r=e.params;if(!r)return;const{selectedOptionItems:n,preferredCurrency:o}=r,a=Number(r.itemIndex)||0,s=Number(r.newQuantity)||1,l=(n??[]).map((g,h)=>{if(h!==a)return g;const c=g?.unitPrice??0,i=g?.additionalOptionsTotal??0,u=(c+i)*s;return{...g,quantity:s,totalPrice:u,totalPriceFormatted:Lr(u,o),multiCurrencyTotalPrice:Qn(g?.multiCurrencyUnitPrice,s,i)}});t.setState?.({selectedOptionItems:l,selectedTotalMultiCurrency:Jn(l)})}function P0(e,t){const r=e.params;if(!r)return;const{selectedOptionItems:n,additionalOptionGroups:o,preferredCurrency:a}=r,s=Number(r.itemIndex)||0,l=Number(r.additionalOptionId),g=Object.prototype.hasOwnProperty.call(r,"customText"),h=r.valueId===""||r.valueId==null?null:Number(r.valueId),c=(n??[]).map((i,u)=>{if(u!==s)return i;const f={...i.additionalOptionSelections??{}},p={...i.additionalOptionCustomTexts??{}};if(g){const v=String(r.customText??"");v.trim()===""?delete p[l]:p[l]=v}else h==null?(delete f[l],delete p[l]):(f[l]=h,(o??[]).find(O=>O.id===l)?.values?.find(O=>O.id===h)?.allow_custom_text||delete p[l]);const m=ic(f,o),w=i?.unitPrice??0,x=i?.quantity??1,A=(w+m)*x;return{...i,additionalOptionSelections:f,additionalOptionCustomTexts:p,additionalOptionsTotal:m,totalPrice:A,totalPriceFormatted:Lr(A,a),multiCurrencyTotalPrice:Qn(i?.multiCurrencyUnitPrice,x,m)}});t.setState?.({selectedOptionItems:c,selectedTotalMultiCurrency:Jn(c)})}function F0(e,t){const r=e.params;if(!r)return;const n=Number(r.itemIndex)||0,o=(r.selectedOptionItems??[]).filter((a,s)=>s!==n);t.setState?.({selectedOptionItems:o,selectedTotalMultiCurrency:Jn(o)})}function U0(e,t){const r=e.params;if(!r)return;const n=Math.max(1,Number(r.newQuantity)||1);t.setState?.({noOptionQuantity:n,noOptionTotalMultiCurrency:Qn(r.multiCurrencyUnitPrice,n)})}const cn=window.G7Core?.createLogger?.("Handler:Cart")??{log:(...e)=>console.log("[Handler:Cart]",...e),warn:(...e)=>console.warn("[Handler:Cart]",...e),error:(...e)=>console.error("[Handler:Cart]",...e)};function hr(e){const t=window.G7Core;t?.state?.setLocal?(t.state.setLocal(e),cn.log("Local state updated:",e)):cn.warn("G7Core.state.setLocal not available")}function cc(){return window.G7Core?.state?.getLocal?.()||{}}function $0(){return window.G7Core?.state?.get?.()||{}}function z0(e,t="info"){const r=window.G7Core;r?.toast?.show?r.toast.show(e,t):cn.warn("G7Core.toast.show not available, message:",e)}function H0(e){const t=window.G7Core;return t?.t?t.t(e):e}function dc(){const e=window.G7Core;if(e?.dispatch){const r=cc().selectedItems||[];e.dispatch({handler:"refetchDataSource",params:{dataSourceId:"cartItems"}}),cn.log("Refetching cartItems with selected_ids:",r)}else cn.warn("G7Core.dispatch not available")}function G0(e,t){const{itemId:r,selectedItems:n}=e?.params||{},o=n||[];let a;o.includes(r)?a=o.filter(h=>h!==r):a=[...o,r];const l=$0().cartItems?.data?.items||[],g=l.length>0&&a.length===l.length;hr({selectedItems:a,allSelected:g,selectedCount:a.length}),dc()}function j0(e,t){const{allItemIds:r,isSelected:n}=e?.params||{};hr({selectedItems:n?r:[],allSelected:n,selectedCount:n?r.length:0}),dc()}function B0(e,t){const{optionName:r,optionValue:n}=e?.params||{},a=cc().selectedOptions||{};hr({selectedOptions:{...a,[r]:n}})}function W0(e,t){const{targetIds:r}=e?.params||{};if(!r||r.length===0){z0(H0("shop.cart.select_items_to_delete"),"warning");return}hr({deleteModal:{visible:!0,targetIds:r}})}function K0(e,t){const{targetItem:r}=e?.params||{};hr({optionModal:{visible:!0,targetItem:r},selectedOptions:r?.options||{},selectedQuantity:r?.quantity})}function V0(e,t){const{selectedItems:r}=e?.params||{};if(!r||r.length===0){hr({isCalculating:!1});return}hr({isCalculating:!0})}const pr=window.G7Core?.createLogger?.("Handler:CartOptionChange")??{log:(...e)=>console.log("[Handler:CartOptionChange]",...e),warn:(...e)=>console.warn("[Handler:CartOptionChange]",...e),error:(...e)=>console.error("[Handler:CartOptionChange]",...e)};function Aa(e){return e.name_localized?e.name_localized:typeof e.name=="string"?e.name:e.name?.ko??""}function Y0(e,t,r){if(t&&r in t)return t[r];if(Array.isArray(e)){const n=e.find(o=>typeof o.key=="string"?o.key===r:o.key?.ko===r||Object.values(o.key).includes(r));return n?typeof n.value=="string"?n.value:n.value?.ko??Object.values(n.value)[0]:void 0}return e[r]}function uc(e,t,r){return!e||!t?.length?null:t.every(a=>{const s=Aa(a);return e[s]})?r?.find(a=>t.every(s=>{const l=Aa(s);return Y0(a.option_values,a.option_values_localized,l)===e[l]}))||null:(pr.log("Not all options selected yet"),null)}function X0(e,t){const{selectedOptions:r,optionGroups:n,options:o}=e?.params||{};pr.log("findMatchingOption called:",{selectedOptions:r,optionGroups:n,optionsCount:o?.length});const a=uc(r,n,o);return pr.log("Matched option:",a),{matchedOption:a}}function q0(e,t){const{currentOptionValues:r,optionGroups:n,options:o}=e?.params||{};if(pr.log("initCartOptionSelection called:",{currentOptionValues:r,optionGroups:n,optionsCount:o?.length}),!n?.length||!r)return pr.log("No option groups or current values, returning empty"),{selectedOptions:{},matchedOption:null};const a={};for(const l of n){const g=Aa(l),h=r[g],c=l.values_localized??(Array.isArray(l.values)?l.values.map(i=>typeof i=="string"?i:i?.ko??""):[]);h&&c.includes(h)&&(a[g]=h)}pr.log("Initial selectedOptions:",a);const s=uc(a,n,o||[]);return pr.log("Matched option:",s),{selectedOptions:a,matchedOption:s}}const dn="g7_cart_key",Z0="/api/modules/sirsoft-ecommerce/cart/key",Ma="g7_guest_order_token",fc="g7_guest_order_number",Oa="g7_guest_order_expires_at",at=window.G7Core?.createLogger?.("Handler:Storage")??{log:(...e)=>console.log("[Handler:Storage]",...e),warn:(...e)=>console.warn("[Handler:Storage]",...e),error:(...e)=>console.error("[Handler:Storage]",...e)};async function gc(){try{const e=await fetch(Z0,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"}});return e.ok?(await e.json()).data?.cart_key||null:(at.error("Failed to issue cartKey from API:",e.status),null)}catch(e){return at.error("Error issuing cartKey from API:",e),null}}function rr(e){const t=window.G7Core;t?.state?.set?(t.state.set(e),at.log("Global state updated:",e)):at.warn("G7Core.state.set not available")}function Q0(){try{const e=window.G7Config;return e?.user?e.user:(window.G7Core?.state?.get?.()||{}).currentUser||null}catch{return null}}async function J0(e,t){let r=null;try{r=localStorage.getItem(dn)}catch{}if(r)at.log("Existing cartKey loaded:",r);else if(r=await gc(),r)try{localStorage.setItem(dn,r),at.log("New cartKey issued from API:",r)}catch{}else at.error("Failed to issue cartKey from API");rr({cartKey:r})}function R0(e,t){try{return localStorage.getItem(dn)}catch{return null}}function hc(e,t){try{localStorage.removeItem(dn),at.log("cartKey removed from localStorage")}catch{}rr({cartKey:null})}async function ep(e,t){if(Q0()){hc();return}const n=await gc();if(n){try{localStorage.setItem(dn,n),at.log("New cartKey regenerated from API:",n)}catch{}rr({cartKey:n})}else at.error("Failed to regenerate cartKey from API")}function tp(e,t){const{key:r,value:n}=e?.params||{};if(!r){at.warn("saveToStorage: key is required");return}try{localStorage.setItem(r,n),at.log("Saved to storage:",r,n)}catch{}}function rp(e,t){const{key:r,defaultValue:n}=e?.params||{};if(!r)return at.warn("loadFromStorage: key is required"),n||null;try{return localStorage.getItem(r)||n||null}catch{return n||null}}function Ia(){try{sessionStorage.removeItem(Ma),sessionStorage.removeItem(fc),sessionStorage.removeItem(Oa)}catch{}}function np(e,t){let r=null,n=null;try{r=sessionStorage.getItem(Ma),n=sessionStorage.getItem(Oa)}catch{}let o=!1;if(r){const a=n?new Date(n).getTime():NaN;(isNaN(a)||a<=Date.now())&&(Ia(),r=null,o=!0)}if(r){rr({guestOrderToken:r}),at.log("Guest order token loaded from sessionStorage");return}if(!o){const s=window.G7Core?.state?.get?.("_global")?.guestOrderToken;if(typeof s=="string"&&s!==""){at.log("Guest order token preserved from in-memory _global (sessionStorage empty)");return}}rr({guestOrderToken:null}),at.log("No guest order token (visitor not authenticated)")}function op(e,t){const{token:r,orderNumber:n,expiresAt:o}=e?.params||{};if(!r||!n||!o){at.warn("saveGuestOrderToken: token, orderNumber, expiresAt are required");return}try{sessionStorage.setItem(Ma,r),sessionStorage.setItem(fc,n),sessionStorage.setItem(Oa,o)}catch{}rr({guestOrderToken:r})}function ap(e,t){Ia(),rr({guestOrderToken:null})}function sp(e,t){Ia(),rr({guestOrderToken:null})}function lp(e,t){const{product:r,priceField:n,currencyCode:o}=e,a=o||t.getState("_global.preferredCurrency")||"KRW",s=`multi_currency_${n}`,l=r[s];if(l&&l[a])return l[a].formatted;const g=`${n}_formatted`;return r[g]||String(r[n])}const Da={KRW:{code:"KRW",symbol:"₩",locale:"ko-KR",decimals:0},USD:{code:"USD",symbol:"$",locale:"en-US",decimals:2},JPY:{code:"JPY",symbol:"¥",locale:"ja-JP",decimals:0},CNY:{code:"CNY",symbol:"¥",locale:"zh-CN",decimals:2},EUR:{code:"EUR",symbol:"€",locale:"de-DE",decimals:2}};function ip(e,t){const{value:r,currencyCode:n,locale:o}=e,a=n||t.getState("_global.preferredCurrency")||"KRW",s=Da[a]||Da.KRW,l=o||s.locale;try{return new Intl.NumberFormat(l,{style:"currency",currency:s.code,minimumFractionDigits:s.decimals,maximumFractionDigits:s.decimals}).format(r)}catch{const g=r.toLocaleString(void 0,{minimumFractionDigits:s.decimals,maximumFractionDigits:s.decimals});return`${s.symbol}${g}`}}function cp(e){return Da[e]?.symbol||e}const La=window.G7Core?.createLogger?.("Handler:Currency")??{log:(...e)=>console.log("[Handler:Currency]",...e),warn:(...e)=>console.warn("[Handler:Currency]",...e),error:(...e)=>console.error("[Handler:Currency]",...e)},pc="g7_preferred_currency",dp="KRW";function up(e,t){const{defaultCurrency:r=dp}=e;let n=r;try{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(pc);o&&mc(o)&&(n=o)}}catch{La.warn("localStorage 접근 불가, 기본 통화 사용:",r)}return t.setState("global",{preferredCurrency:n}),n}function fp(e,t){const{currencyCode:r}=e;if(!mc(r)){La.warn("유효하지 않은 통화 코드:",r);return}try{typeof window<"u"&&window.localStorage&&localStorage.setItem(pc,r)}catch{La.warn("localStorage 저장 실패")}t.setState("global",{preferredCurrency:r})}function mc(e){return typeof e=="string"&&/^[A-Z]{3}$/.test(e)}const Pr=window.G7Core?.createLogger?.("Handler:SetTheme")??{log:(...e)=>console.log("[Handler:SetTheme]",...e),warn:(...e)=>console.warn("[Handler:SetTheme]",...e),error:(...e)=>console.error("[Handler:SetTheme]",...e)},Pa=["auto","light","dark"],bc="g7_color_scheme",gp=e=>e==="auto"?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e,eo=e=>{const t=gp(e);document.documentElement.setAttribute("data-theme",t),t==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")};function hp(){try{const e=localStorage.getItem(bc),t=e&&Pa.includes(e)?e:"auto";eo(t),Pr.log("Initial theme applied:",t)}catch(e){Pr.warn("Failed to load initial theme:",e),eo("auto")}}async function pp(e,t){const r=e?.target;if(r&&typeof r=="string"&&Pa.includes(r)){eo(r);return}hp()}async function mp(e,t){let r;if(e?.target&&typeof e.target=="string"&&!e.target.includes("{{")&&(r=e.target),!r||typeof r!="string"){Pr.warn("Invalid theme:",r);return}if(!Pa.includes(r)){Pr.warn("Unsupported theme:",r);return}const n=r;try{localStorage.setItem(bc,n)}catch(o){Pr.error("Failed to save theme to localStorage:",o);return}eo(n),Pr.log("Theme changed to:",n)}const bp=window.G7Core?.createLogger?.("Handler:RedirectToLoginWithReturn")??{log:(...e)=>console.log("[Handler:RedirectToLoginWithReturn]",...e),warn:(...e)=>console.warn("[Handler:RedirectToLoginWithReturn]",...e),error:(...e)=>console.error("[Handler:RedirectToLoginWithReturn]",...e)};async function yp(e,t){const r=window.G7Core;if(!r?.dispatch){bp.error("G7Core.dispatch 가 초기화되지 않아 로그인 리다이렉트를 실행할 수 없습니다.");return}const n=window.location.pathname+window.location.search;await r.dispatch({handler:"navigate",params:{path:"/login",query:{redirect:n}}})}const Fa=window.G7Core?.createLogger?.("Handler:DownloadAttachment")??{log:(...e)=>console.log("[Handler:DownloadAttachment]",...e),warn:(...e)=>console.warn("[Handler:DownloadAttachment]",...e),error:(...e)=>console.error("[Handler:DownloadAttachment]",...e)};async function vp(e,t){const r=window.G7Core,{url:n,filename:o}=e?.params||{};if(!n){Fa.warn("다운로드 URL 이 없어 요청을 건너뜁니다.");return}if(!r?.api?.get){Fa.error("G7Core.api.get 이 초기화되지 않아 다운로드를 실행할 수 없습니다.");return}try{const a=await r.api.get(n,{responseType:"blob"});if(a){const s=URL.createObjectURL(a),l=document.createElement("a");l.href=s,l.download=o||"",document.body.appendChild(l),l.click(),document.body.removeChild(l),URL.revokeObjectURL(s)}}catch(a){Fa.error("첨부파일 다운로드 실패",a),r?.toast?.error?.(r?.t?.("common.download_failed")??"Download failed")}}const to={"sirsoft-basic.addSelectedItemIfComplete":D0,"sirsoft-basic.updateSelectedItemQuantity":L0,"sirsoft-basic.removeSelectedItem":F0,"sirsoft-basic.updateNoOptionQuantity":U0,"sirsoft-basic.setBlockAdditionalOption":P0,"sirsoft-basic.getDisplayPrice":lp,"sirsoft-basic.formatCurrency":ip,"sirsoft-basic.getCurrencySymbol":cp,"sirsoft-basic.loadPreferredCurrency":up,"sirsoft-basic.savePreferredCurrency":fp,setTheme:mp,initTheme:pp,redirectToLoginWithReturn:yp,downloadAttachment:vp,toggleCartItemSelection:G0,selectAllCartItems:j0,setCartOption:B0,openCartDeleteModal:W0,openCartOptionModal:K0,recalculateCart:V0,findMatchingOption:X0,initCartOptionSelection:q0,initCartKey:J0,getCartKey:R0,clearCartKey:hc,regenerateCartKey:ep,saveToStorage:tp,loadFromStorage:rp,initGuestOrderToken:np,saveGuestOrderToken:op,clearGuestOrderToken:ap,clearGuestTokenOnEntry:sp},un=window.G7Core?.createLogger?.("Template:sirsoft-basic:IdentityLauncher")??{log:(...e)=>console.log("[Template:sirsoft-basic:IdentityLauncher]",...e),warn:(...e)=>console.warn("[Template:sirsoft-basic:IdentityLauncher]",...e),error:(...e)=>console.error("[Template:sirsoft-basic:IdentityLauncher]",...e)};function wp(e){const t=window.G7Core,r=t?.state?.getLocal?.()??{},n=t?.state?.getGlobal?.()??t?.state?.get?.()??{},o=(...g)=>g.find(h=>typeof h=="string"&&h.length>0),a=o(e.target?.email,n?.currentUser?.email,n?.user?.email,n?.auth?.user?.email,e.purpose==="signup"?r?.registerForm?.email:void 0,e.purpose==="password_reset"?r?.passwordResetForm?.email:void 0,e.purpose==="password_reset"?r?.email:void 0),s=o(e.target?.phone,n?.currentUser?.phone,n?.user?.phone,n?.auth?.user?.phone);if(!a&&!s)return null;const l={};return a&&(l.email=a),s&&(l.phone=s),l}function xp(){const t=window.G7Core?.api?.getToken?.()??null;return t?{Authorization:`Bearer ${t}`}:{}}function kp(){try{const e=typeof window<"u"?window.localStorage?.getItem("g7_locale"):null;return e?{"Accept-Language":e}:{}}catch{return{}}}async function Cp(e,t){const r={purpose:e.purpose};e.provider_id&&(r.provider_id=e.provider_id),t&&(r.target=t);const n=e.challenge_start_url||"/api/identity/challenges",o=await fetch(n,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",Accept:"application/json",...kp(),...xp()},body:JSON.stringify(r)}),a=await o.json().catch(()=>null);if(!o.ok||!a?.success){const l=a?.message??`Challenge 시작 실패 (HTTP ${o.status})`;throw new Error(l)}const s=a.data??a;return{id:s.id,expires_at:s.expires_at,render_hint:s.render_hint??e.render_hint??"text_code",public_payload:s.public_payload,redirect_url:s.redirect_url,max_attempts:typeof s.max_attempts=="number"?s.max_attempts:void 0}}async function Sp(e){const t=window.G7Core,r=t?.identity;if(!t?.dispatch||!t?.state||!r)return un.error("G7Core 또는 G7Core.identity 가 초기화되지 않아 launcher 를 실행할 수 없습니다."),{status:"failed",failureCode:"G7_NOT_READY"};if(e.render_hint==="external_redirect"||e.redirect_url)return r.redirectExternally(e);const n=wp(e);let o;try{o=await Cp(e,n)}catch(p){un.error("Challenge 시작 실패:",p);try{await t.dispatch({handler:"toast",params:{type:"error",message:p instanceof Error?p.message:"본인인증 시작에 실패했습니다."}})}catch{}return{status:"failed",failureCode:"CHALLENGE_START_FAILED",reason:p instanceof Error?p.message:String(p)}}if(o.redirect_url)return r.redirectExternally({...e,render_hint:"external_redirect",redirect_url:o.redirect_url});const a=o.expires_at?new Date(o.expires_at).getTime():0,s=a>0?Math.max(0,Math.floor((a-Date.now())/1e3)):0,l=typeof o.max_attempts=="number"?o.max_attempts:0;t.state.set({identityChallenge:{policy_key:e.policy_key,purpose:e.purpose,provider_id:e.provider_id??null,render_hint:o.render_hint,challenge_id:o.id,expires_at:o.expires_at,public_payload:o.public_payload??{},target:n??null,code:"",error:null,attempts:0,maxAttempts:l,remainingSeconds:s,resendCooldown:0}});let g=a,h=0;const c=window.setInterval(()=>{const p=g>0?Math.max(0,Math.floor((g-Date.now())/1e3)):0;h=Math.max(0,h-1),t.state.set({identityChallenge:{remainingSeconds:p,resendCooldown:h}})},1e3);let i=null;try{i=t.state.subscribe?.(p=>{const m=p?.identityChallenge?.expires_at;if(typeof m=="string"){const x=new Date(m).getTime();Number.isFinite(x)&&x!==g&&(g=x)}const w=p?.identityChallenge?.resendCooldown;typeof w=="number"&&w>h&&(h=w)})??null}catch{}const u=r.createDeferred();try{await t.dispatch({handler:"openModal",target:"identity-challenge-modal"})}catch(p){return un.error("openModal 실패 — 풀페이지로 폴백:",p),window.clearInterval(c),i?.(),r.redirectExternally({...e,render_hint:"external_redirect",redirect_url:`/identity/challenge?challenge_id=${encodeURIComponent(o.id)}&return=${encodeURIComponent(window.location.href)}`})}const f=await u;return window.clearInterval(c),i?.(),f}function _p(){const e=window.G7Core?.identity;if(!e?.setLauncher){un.warn("G7Core.identity 가 아직 초기화되지 않아 launcher 등록을 건너뜁니다. 코어 부트스트랩 순서를 확인하세요.");return}e.setLauncher(Sp),un.log("IDV launcher registered (sirsoft-basic)")}function Ep(e){const t=e.icons;return Array.isArray(t)?t.filter(r=>!!r&&typeof r=="object"&&typeof r.value=="string"):[]}function Tp(e,t){const r=e.label;return typeof r=="string"?r.startsWith("$t:")?t(r.slice(3)):r:e.value}function Np(e,t,r){if(r==="")return!0;const n=r.toLowerCase();return e.value.toLowerCase().includes(n)||t.toLowerCase().includes(n)?!0:(e.keywords??[]).some(o=>o.toLowerCase().includes(n))}function Ap({entry:e}){const t=e.preview;return t?.html?d.jsx("span",{className:"g7le-icon-preview",dangerouslySetInnerHTML:{__html:t.html},style:$a}):t?.className?d.jsx("span",{className:`g7le-icon-preview ${t.className}`,style:$a}):d.jsx("i",{className:`fas fa-${e.value}`,style:$a,"aria-hidden":"true"})}function Mp({control:e,value:t,onChange:r,t:n}){const o=Ep(e),a=t==null?"":String(t),s=typeof e.iconColumns=="number"?e.iconColumns:6,l=e.iconSearchPlaceholder,g=typeof l=="string"&&l.startsWith("$t:")?n(l.slice(3)):n("layout_editor.icon_picker.search_placeholder"),[h,c]=k.useState("");if(o.length===0)return d.jsx("div",{className:"g7le-widget g7le-widget--icon-picker","data-testid":"g7le-widget-icon-picker",style:yc,children:d.jsx("input",{type:"text",className:"g7le-widget g7le-widget--icon-free","data-testid":"g7le-widget-icon-picker-free",value:a,placeholder:n("layout_editor.icon_picker.free_input_hint"),onChange:f=>r(f.target.value===""?void 0:f.target.value),style:vc})});const i=f=>Tp(f,n),u=o.filter(f=>Np(f,i(f),h));return d.jsxs("div",{className:"g7le-widget g7le-widget--icon-picker","data-testid":"g7le-widget-icon-picker",style:yc,children:[d.jsx("input",{type:"text",className:"g7le-widget g7le-widget--icon-search","data-testid":"g7le-widget-icon-picker-search",value:h,placeholder:g,onChange:f=>c(f.target.value),style:vc}),d.jsxs("div",{className:"g7le-icon-grid","data-testid":"g7le-widget-icon-picker-grid",style:{...Op,gridTemplateColumns:`repeat(${s}, minmax(0, 1fr))`},children:[d.jsx("button",{type:"button","data-testid":"g7le-icon-cell-none",title:n("layout_editor.icon_picker.none"),onClick:()=>r(void 0),"aria-pressed":a==="",style:a===""?wc:Ua,children:d.jsx("span",{style:Ip,children:"—"})}),u.map(f=>{const p=f.value===a;return d.jsx("button",{type:"button","data-testid":`g7le-icon-cell-${f.value}`,title:i(f),"aria-pressed":p,onClick:()=>r(f.value),style:p?wc:Ua,children:d.jsx(Ap,{entry:f})},f.value)})]}),u.length===0&&d.jsx("div",{"data-testid":"g7le-widget-icon-picker-empty",style:Dp,children:n("layout_editor.icon_picker.no_results")})]})}const yc={display:"flex",flexDirection:"column",gap:6,width:"100%"},vc={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,width:"100%"},Op={display:"grid",gap:4,maxHeight:220,overflowY:"auto",padding:2},Ua={display:"flex",alignItems:"center",justifyContent:"center",minHeight:34,padding:4,border:"1px solid #e2e8f0",borderRadius:6,background:"#fff",cursor:"pointer"},wc={...Ua,border:"2px solid #2563eb",background:"#eff6ff"},$a={display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:16,lineHeight:1},Ip={fontSize:10,color:"#475569",fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"100%"},Dp={fontSize:11,color:"#94a3b8",fontStyle:"italic",padding:"4px 2px"},xc=window.G7Core?.createLogger?.("Template:sirsoft-basic:EditorWidgets")??{log:(...e)=>console.log("[Template:sirsoft-basic:EditorWidgets]",...e),warn:(...e)=>console.warn("[Template:sirsoft-basic:EditorWidgets]",...e)};function Lp(){if(typeof window>"u")return;const e=window.G7Core?.layoutEditor;if(!e?.registerWidget){xc.warn("G7Core.layoutEditor 미노출 — icon-picker 위젯 등록 보류");return}e.registerWidget("icon-picker",Mp),xc.log("편집기 위젯 'icon-picker' 등록됨(Font Awesome 검색 그리드)")}const za=window.G7Core?.createLogger?.("Template:sirsoft-basic")??{log:(...e)=>console.log("[Template:sirsoft-basic]",...e),warn:(...e)=>console.warn("[Template:sirsoft-basic]",...e),error:(...e)=>console.error("[Template:sirsoft-basic]",...e)};typeof window<"u"&&(window.G7TemplateHandlers=to);function kc(){if(typeof window<"u"){let e=0;const t=50,r=()=>{const n=window.G7Core?.getActionDispatcher?.();n?(Object.entries(to).forEach(([o,a])=>{n.registerHandler(o,a)}),za.log(`${Object.keys(to).length} custom handler(s) registered:`,Object.keys(to)),_p()):(e++,e<=t?(za.warn(`ActionDispatcher not found, retrying... (${e}/${t})`),setTimeout(r,100)):za.error("Failed to register handlers: ActionDispatcher not available after maximum retries"))};document.readyState==="complete"?r():window.addEventListener("load",r)}}return Lp(),kc(),J.A=ao,J.Avatar=$r,J.AvatarUploader=Ta,J.Button=Q,J.Checkbox=Ya,J.Code=Vc,J.ConfirmDialog=Ro,J.Container=S0,J.Div=W,J.ExpandableContent=Zo,J.FileInput=Ga,J.FileUploader=Xn,J.Flex=E0,J.Footer=es,J.Form=so,J.Grid=_0,J.H1=Lc,J.H2=Wa,J.H3=gn,J.H4=Ka,J.Header=Ja,J.Hr=lo,J.HtmlContent=Yo,J.HtmlEditor=Dl,J.Icon=de,J.IconName=Je,J.ImageGallery=Tr,J.Img=Lt,J.Input=xt,J.Label=yr,J.Li=Xt,J.MobileNav=ts,J.Modal=Qo,J.Nav=Ur,J.NotificationCenter=mn,J.Ol=Pc,J.Optgroup=zc,J.Option=$c,J.P=Dt,J.PageLoading=Ri,J.PageSkeleton=Ea,J.PageTransitionBlur=Ca,J.PageTransitionIndicator=ka,J.Pagination=ec,J.PasswordInput=Ba,J.PostReactions=Ol,J.ProductCard=ps,J.ProductImageViewer=An,J.QuantitySelector=Al,J.RichTextEditor=Il,J.SearchBar=rc,J.Section=Xa,J.SectionLayout=T0,J.Select=Va,J.SlotContainer=pn,J.SocialLoginButtons=Wi,J.Span=te,J.Svg=fn,J.TabNavigation=sc,J.Table=Hc,J.Tbody=jc,J.Td=Kc,J.Textarea=no,J.Th=Wc,J.Thead=Gc,J.ThemeToggle=hn,J.ThreeColumnLayout=N0,J.Toast=xa,J.Tr=Bc,J.Ul=oo,J.UserInfo=ac,J.availablePasswordRules=ro,J.compositeComponents=C0,J.defaultPasswordRules=ja,J.initTemplate=kc,J.templateMetadata=A0,Object.defineProperty(J,Symbol.toStringTag,{value:"Module"}),J})({},ReactJSXRuntime,React,ReactDOM); + `})]}):null},Rh=Object.freeze(Object.defineProperty({__proto__:null,PageTransitionIndicator:ka,default:ka},Symbol.toStringTag,{value:"Module"})),Vi=window.G7Core?.createLogger?.("Comp:PageTransitionBlur")??{log:(...e)=>console.log("[Comp:PageTransitionBlur]",...e),warn:(...e)=>console.warn("[Comp:PageTransitionBlur]",...e)},Ca=({className:e="",style:t})=>{const[r,n]=k.useState(!1);return k.useEffect(()=>{const o=window.G7Core?.TransitionManager;if(!o){Vi.warn("TransitionManager를 찾을 수 없습니다.");return}return n(o.getIsPending()),o.subscribe(s=>{Vi.log("isPending changed:",s),n(s)})},[]),r?d.jsx(W,{className:`fixed inset-0 z-40 bg-white/30 dark:bg-gray-900/30 backdrop-blur-sm transition-opacity duration-150 pointer-events-none ${e}`,style:t,role:"status","aria-label":"페이지 전환 중","data-testid":"page-transition-blur"}):null},e0=Object.freeze(Object.defineProperty({__proto__:null,PageTransitionBlur:Ca,default:Ca},Symbol.toStringTag,{value:"Module"})),Yi={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},Xi=new Set(["hidden","block","inline-block","inline","flex","inline-flex","grid","inline-grid","table","table-row","table-cell","contents","list-item","flow-root"]),t0=new Set(["Div","Flex","Grid","Section","Article","Nav","Aside","Main","Header","Footer","Fragment","Form","Container"]),r0=new Set(["H1","H2","H3","H4","H5","H6","P","Span","Label","A","Strong","Em","Small","Badge"]),n0=new Set(["Input","Textarea","Select","Checkbox","Radio","Toggle","DatePicker","TagInput","SearchBar"]),o0=new Set(["Img","Image","Avatar","AvatarUploader","ImageGallery","ProductImageViewer","FileUploader"]),qi={DataGrid:(e,t)=>d.jsxs("div",{className:"w-full border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden",children:[d.jsx("div",{className:`h-10 bg-gray-100 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 ${e}`,children:d.jsxs("div",{className:"flex items-center h-full px-4 gap-8",children:[d.jsx("div",{className:"h-3 w-16 bg-gray-300 dark:bg-gray-600 rounded"}),d.jsx("div",{className:"h-3 w-24 bg-gray-300 dark:bg-gray-600 rounded"}),d.jsx("div",{className:"h-3 w-20 bg-gray-300 dark:bg-gray-600 rounded"}),d.jsx("div",{className:"h-3 w-16 bg-gray-300 dark:bg-gray-600 rounded"})]})}),Array.from({length:t},(r,n)=>d.jsx("div",{className:`h-12 border-b border-gray-100 dark:border-gray-800 ${e}`,style:{animationDelay:`${n*75}ms`},children:d.jsxs("div",{className:"flex items-center h-full px-4 gap-8",children:[d.jsx("div",{className:"h-3 w-12 bg-gray-200 dark:bg-gray-700 rounded"}),d.jsx("div",{className:"h-3 flex-1 bg-gray-200 dark:bg-gray-700 rounded"}),d.jsx("div",{className:"h-3 w-16 bg-gray-100 dark:bg-gray-800 rounded"}),d.jsx("div",{className:"h-3 w-14 bg-gray-100 dark:bg-gray-800 rounded"})]})},n))]}),Pagination:e=>d.jsx("div",{className:"flex justify-center gap-1.5 py-3",children:Array.from({length:5},(t,r)=>d.jsx("div",{className:`w-8 h-8 bg-gray-200 dark:bg-gray-700 rounded ${e}`},r))}),Tabs:e=>d.jsxs("div",{children:[d.jsx("div",{className:"flex gap-4 border-b border-gray-200 dark:border-gray-700 pb-2 mb-3",children:Array.from({length:3},(t,r)=>d.jsx("div",{className:`h-4 w-20 bg-gray-200 dark:bg-gray-700 rounded ${e}`},r))}),d.jsx("div",{className:`h-32 bg-gray-100 dark:bg-gray-800 rounded ${e}`})]}),TabNavigation:e=>d.jsx("div",{className:"flex gap-4 border-b border-gray-200 dark:border-gray-700 pb-2",children:Array.from({length:3},(t,r)=>d.jsx("div",{className:`h-4 w-20 bg-gray-200 dark:bg-gray-700 rounded ${e}`},r))}),ProductCard:e=>d.jsxs("div",{className:"rounded-lg overflow-hidden",children:[d.jsx("div",{className:`h-48 w-full bg-gray-200 dark:bg-gray-700 ${e}`}),d.jsxs("div",{className:"p-3 space-y-2",children:[d.jsx("div",{className:`h-3.5 w-3/4 bg-gray-200 dark:bg-gray-700 rounded ${e}`}),d.jsx("div",{className:`h-4 w-1/3 bg-gray-300 dark:bg-gray-600 rounded ${e}`})]})]}),UserInfo:e=>d.jsx("div",{className:`h-3 w-14 bg-gray-200 dark:bg-gray-700 rounded ${e}`}),QuantitySelector:e=>d.jsx("div",{className:`h-9 w-28 bg-gray-100 dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 ${e}`}),Header:e=>d.jsx("header",{className:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700",children:d.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:d.jsxs("div",{className:"flex items-center justify-between h-16",children:[d.jsxs("div",{className:"flex items-center gap-8",children:[d.jsx("div",{className:`h-8 w-24 bg-gray-200 dark:bg-gray-700 rounded ${e}`}),d.jsx("div",{className:"hidden lg:flex items-center gap-6",children:Array.from({length:4},(t,r)=>d.jsx("div",{className:`h-3.5 w-16 bg-gray-200 dark:bg-gray-700 rounded ${e}`},r))})]}),d.jsx("div",{className:"flex items-center gap-4",children:Array.from({length:3},(t,r)=>d.jsx("div",{className:`h-8 w-8 bg-gray-200 dark:bg-gray-700 rounded-full ${e}`},r))})]})})}),Footer:e=>d.jsx("footer",{className:"bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 mt-auto",children:d.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8",children:d.jsxs("div",{className:"flex flex-col items-center gap-4",children:[d.jsx("div",{className:`h-4 w-32 bg-gray-200 dark:bg-gray-700 rounded ${e}`}),d.jsx("div",{className:`h-3 w-48 bg-gray-100 dark:bg-gray-800 rounded ${e}`}),d.jsx("div",{className:"flex gap-3",children:Array.from({length:3},(t,r)=>d.jsx("div",{className:`h-6 w-6 bg-gray-200 dark:bg-gray-700 rounded-full ${e}`},r))}),d.jsx("div",{className:`h-3 w-40 bg-gray-100 dark:bg-gray-800 rounded ${e}`})]})})}),Modal:()=>d.jsx(d.Fragment,{}),Toast:()=>d.jsx(d.Fragment,{}),ConfirmDialog:()=>d.jsx(d.Fragment,{})};function a0(e){if(!e||e.length===0)return[];const t=e.filter(n=>n.if),r=e.filter(n=>!n.if);if(r.length>0&&t.length>0){const n=t.filter(o=>!Zi(o.if));return n.length>1&&s0(n)?[...r,Qi(n)]:[...r,...n]}if(t.length>1&&r.length===0){const n=t.filter(o=>!Zi(o.if));return n.length===0?[]:n.length===1?n:[Qi(n)]}return e}function Zi(e){const t=e.replace(/^\{\{|\}\}$/g,"").trim();return t.startsWith("!")||/\b(hasError|isError|isLoading|error|Error)\b/.test(t)||/===\s*0\s*(\)|\}|$)/.test(t)}function s0(e){if(e.length<2)return!1;const t=[];for(const n of e){const o=(n.if||"").replace(/^\{\{|\}\}$/g,"").trim(),a=o.match(/^(.+?)\s*===\s*['"]/);if(a)t.push(a[1].trim());else{const s=o.match(/(.+?)\s*===\s*['"]/);if(!s)return!1;t.push(s[1].trim())}}const r=t[0];return t.every(n=>n===r)}function Qi(e){return e.reduce((t,r)=>Sa(r)>Sa(t)?r:t)}function Sa(e){return e.children?e.children.length+e.children.reduce((t,r)=>t+Sa(r),0):0}function l0(e){return e.includes("{{")?e.replace(/\{\{([^}]+)\}\}/g,(t,r)=>{const n=r.match(/\?[\s]*['"]([^'"]*)['"]\s*:\s*['"]/);return n?n[1]:""}):e}function _a(e,t){if(!e)return"";let r=e;return r=r.replace(/\b(bg-\S+|text-\S+|border\b|border-\S+|shadow\S*|ring-\S+|outline-\S+|divide-\S+|opacity-\S+|font-\S+|tracking-\S+|leading-\S+|whitespace-\S+|truncate|line-clamp-\S+|underline|no-underline|decoration-\S+|cursor-\S+|hover:\S+|focus:\S+|active:\S+|group-hover:\S+|transition\S*|duration-\S+|ease-\S+|animate-\S+|dark:\S+)\b/g,"").replace(/\s{2,}/g," ").trim(),(t==="Grid"||/\bgrid-cols-\d/.test(r))&&(r=r.replace(/\bgrid-cols-(\d+)/g,(n,o)=>{const a=parseInt(o);return a>4?`grid-cols-${Math.ceil(a/2)}`:`grid-cols-${a}`})),r}function i0(e){const{name:t,props:r}=e;if(!r||!t)return"";const n=[];if(t==="Flex"){n.push("flex");const o=r.direction||"row",a={row:"flex-row","row-reverse":"flex-row-reverse",col:"flex-col","col-reverse":"flex-col-reverse"};a[o]&&n.push(a[o]);const s=r.justify||"start",l={start:"justify-start",end:"justify-end",center:"justify-center",between:"justify-between",around:"justify-around",evenly:"justify-evenly"};l[s]&&n.push(l[s]);const g=r.align||"stretch",h={start:"items-start",end:"items-end",center:"items-center",baseline:"items-baseline",stretch:"items-stretch"};h[g]&&n.push(h[g]);const c=r.wrap||"nowrap",i={wrap:"flex-wrap",nowrap:"flex-nowrap","wrap-reverse":"flex-wrap-reverse"};i[c]&&n.push(i[c]),r.gap&&r.gap>0&&n.push(`gap-${r.gap}`)}if(t==="Grid"){n.push("grid");const o=r.cols||1;if(n.push(`grid-cols-${o}`),r.responsive){const a=r.responsive;a.sm&&n.push(`sm:grid-cols-${a.sm}`),a.md&&n.push(`md:grid-cols-${a.md}`),a.lg&&n.push(`lg:grid-cols-${a.lg}`),a.xl&&n.push(`xl:grid-cols-${a.xl}`),a["2xl"]&&n.push(`2xl:grid-cols-${a["2xl"]}`)}r.gap!==void 0&&r.gap>0&&n.push(`gap-${r.gap}`),r.rowGap!==void 0&&r.rowGap>0&&n.push(`gap-y-${r.rowGap}`),r.colGap!==void 0&&r.colGap>0&&n.push(`gap-x-${r.colGap}`)}return n.join(" ")}function c0(e){switch(e){case"pulse":return"animate-pulse";case"wave":return"animate-pulse";case"none":return"";default:return"animate-pulse"}}function qn(e,t,r,n){return!e||e.length===0?[]:a0(e).map((a,s)=>Ji(a,t,r,s,n))}function d0(e,t){const r=e.props?.className||e.className||"";return e.responsive?t>=1024&&e.responsive.desktop?.props?.className?e.responsive.desktop.props.className:t>=768&&e.responsive.tablet?.props?.className?e.responsive.tablet.props.className:r:r}function u0(e,t){const r=e.split(/\s+/).filter(Boolean),n=[],o=[];for(const g of r){const h=g.match(/^(sm|md|lg|xl|2xl):(.+)$/);if(h){const[,c,i]=h;if(Xi.has(i)){n.push({breakpoint:Yi[c]||0,display:i});continue}(Yi[c]||0)<=t&&o.push(i);continue}if(Xi.has(g)){n.push({breakpoint:0,display:g});continue}o.push(g)}if(n.length===0)return{visible:!0,className:e};n.sort((g,h)=>g.breakpoint-h.breakpoint);let a="";for(const g of n)g.breakpoint<=t&&(a=g.display);a||(a=n[0].display);const s=a!=="hidden",l=s?[a,...o].join(" "):"";return{visible:s,className:l}}function f0(e){const t=e.match(/\bgrid-cols-\[([^\]]+)\]/);if(!t)return{className:e};const r=t[1].replace(/_/g," ");return{className:e.replace(/\bgrid-cols-\[([^\]]+)\]/,"").replace(/\s{2,}/g," ").trim(),style:{gridTemplateColumns:r}}}function Ji(e,t,r,n,o){const{name:a,children:s,iteration:l}=e,g=d0(e,o),h=i0(e),c=h?`${h} ${g}`.trim():g,i=l0(c),u=u0(i,o);if(!a||!u.visible)return null;const f=u.className;if(l)return d.jsx(k.Fragment,{children:Array.from({length:r},(m,w)=>Ji({...e,iteration:void 0},t,r,w,o))},n);if(qi[a])return d.jsx("div",{className:f,children:qi[a](t,r)},n);if(t0.has(a)){const m=_a(f,a);if(!s||s.length===0){const E=/\b(h-\S|w-\S)/.test(m)?`${m} bg-gray-200 dark:bg-gray-700 rounded ${t}`:`${m} h-3.5 w-full bg-gray-200 dark:bg-gray-700 rounded ${t}`.trim();return d.jsx("div",{className:E},n)}const w=qn(s,t,r,o);if(!(w.length>0&&w.some(v=>v!==null)))return null;const A=f0(m);return d.jsx("div",{className:A.className,style:A.style,children:w},n)}const p=_a(f,a);if(r0.has(a)){const m={H1:"h-7",H2:"h-6",H3:"h-5",H4:"h-5",H5:"h-4",H6:"h-4",P:"h-3.5",Span:"h-3",Label:"h-3",A:"h-3.5",Badge:"h-5 w-16"},w={H1:"w-3/5",H2:"w-2/5",H3:"w-1/3",H4:"w-1/3",H5:"w-1/4",H6:"w-1/4",P:"w-full",Span:"w-1/4",Label:"w-1/4",A:"w-1/3",Strong:"w-1/5",Em:"w-1/4",Small:"w-1/5",Badge:"w-16"},x=m[a]||"h-3.5",A=w[a]||"w-full",v=a.startsWith("H")?"mb-2 mt-1":"mb-1.5";return d.jsx("div",{className:`${x} ${A} bg-gray-200 dark:bg-gray-700 rounded ${t} ${v} ${p}`.trim()},n)}if(n0.has(a))return a==="Textarea"?d.jsx("div",{className:`h-20 w-full bg-gray-100 dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 mb-2 ${t}`},n):a==="Checkbox"||a==="Radio"||a==="Toggle"?d.jsx("div",{className:`h-5 w-5 bg-gray-200 dark:bg-gray-700 rounded mb-1.5 ${t}`},n):d.jsx("div",{className:`h-9 w-full bg-gray-100 dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 mb-2 ${t}`},n);if(o0.has(a))return a==="Avatar"||a==="AvatarUploader"?d.jsx("div",{className:`h-10 w-10 bg-gray-200 dark:bg-gray-700 rounded-full ${t}`},n):a==="ProductImageViewer"?d.jsx("div",{className:`h-80 w-full bg-gray-200 dark:bg-gray-700 rounded ${t}`},n):d.jsx("div",{className:`h-40 w-full bg-gray-200 dark:bg-gray-700 rounded mb-2 ${t}`},n);if(a==="Button"){if(s&&s.length>0){const m=_a(f,a),w=qn(s,t,r,o);if(!(w.length>0&&w.some(E=>E!==null)))return null;const v=/\b(border|rounded|px-\d|py-\d)/.test(g)?"border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 rounded-lg":"";return d.jsx("div",{className:`${m} ${v}`.trim(),children:w},n)}return d.jsx("div",{className:`h-9 w-24 bg-gray-200 dark:bg-gray-700 rounded ${t}`},n)}return a==="Icon"?d.jsx("div",{className:`h-5 w-5 bg-gray-200 dark:bg-gray-700 rounded ${t}`},n):s&&s.length>0?d.jsx("div",{className:p,children:qn(s,t,r,o)},n):d.jsx("div",{className:`h-3.5 w-full bg-gray-200 dark:bg-gray-700 rounded mb-1.5 ${t}`},n)}const Ea=({components:e,options:t})=>{const r=c0(t.animation),o=window.G7Core?.useResponsive,a=o?.(),s=a?a.width:typeof window<"u"?window.innerWidth:1024;return d.jsx("div",{className:"w-full",role:"status","aria-busy":"true","aria-label":"Loading...",children:qn(e,r,t.iteration_count,s)})},g0=Object.freeze(Object.defineProperty({__proto__:null,PageSkeleton:Ea,default:Ea},Symbol.toStringTag,{value:"Module"})),h0=(e,t)=>window.G7Core?.t?.(e,t)??e,Ri=({options:e})=>{const t=document.documentElement.classList.contains("dark"),r=t?"rgb(17,24,39)":"rgb(249,250,251)",n=t?"#6b7280":"#9ca3af",o=t?"#9ca3af":"#6b7280";return d.jsxs("div",{style:{position:"absolute",inset:0,zIndex:2147483647,overflow:"hidden",background:r,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"flex-start",paddingTop:"15%",gap:"12px"},children:[d.jsx("div",{style:{width:"32px",height:"32px",border:`3px solid ${n}`,borderTopColor:"transparent",borderRadius:"50%",animation:"g7-spin 0.8s linear infinite"}}),d.jsx("span",{style:{color:o,fontSize:"14px"},children:e?.text||h0("nav.loading")})]})},p0=Object.freeze(Object.defineProperty({__proto__:null,default:Ri},Symbol.toStringTag,{value:"Module"})),Dr=(e,t)=>window.G7Core?.t?.(e,t)??e,ec=({currentPage:e,totalPages:t,onPageChange:r,maxVisiblePages:n=5,showFirstLast:o=!0,className:a="",style:s,prevText:l,nextText:g,id:h,editorAttrs:c})=>{const i=k.useMemo(()=>{const m=[];if(t<=n+2)for(let w=1;w<=t;w++)m.push(w);else{const w=Math.floor(n/2);let x=Math.max(2,e-w),A=Math.min(t-1,e+w);e<=w+1?A=n:e>=t-w&&(x=t-n+1),m.push(1),x>2&&m.push("...");for(let v=x;v<=A;v++)m.push(v);A1&&m.push(t)}return m},[e,t,n]),u=m=>{m<1||m>t||m===e||r(m)},f=()=>{e>1&&r(e-1)},p=()=>{eu(1),disabled:e===1,className:"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800","aria-label":Dr("common.first_page"),children:"«"}),d.jsx(Q,{onClick:f,disabled:e===1,className:"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800","aria-label":Dr("common.prev_page"),children:l||d.jsx(d.Fragment,{children:"‹"})}),d.jsx(W,{className:"flex items-center gap-1",children:i.map((m,w)=>{if(m==="...")return d.jsx(te,{className:"px-3 py-1 text-sm text-gray-500 dark:text-gray-400",children:"..."},`ellipsis-${w}`);const x=m,A=x===e;return d.jsx(Q,{onClick:()=>u(x),className:`px-3 py-1 text-sm border rounded ${A?"bg-blue-500 dark:bg-blue-600 text-white border-blue-500 dark:border-blue-600":"border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800"}`,"aria-label":Dr("common.page_n",{n:x}),"aria-current":A?"page":void 0,children:x},x)})}),d.jsx(Q,{onClick:p,disabled:e===t,className:"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800","aria-label":Dr("common.next_page"),children:g||d.jsx(d.Fragment,{children:"›"})}),o&&d.jsx(Q,{onClick:()=>u(t),disabled:e===t,className:"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800","aria-label":Dr("common.last_page"),children:"»"})]})},m0=Object.freeze(Object.defineProperty({__proto__:null,Pagination:ec},Symbol.toStringTag,{value:"Module"})),tc=(e,t)=>window.G7Core?.t?.(e,t)??e,rc=({name:e="search",placeholder:t,value:r,onChange:n,onSubmit:o,showButton:a=!1,suggestions:s=[],onSuggestionClick:l,showSuggestions:g=!1,className:h="",style:c,id:i,editorAttrs:u})=>{const f=t??tc("common.search_placeholder"),[p,m]=k.useState(""),[w,x]=k.useState(!1),A=k.useRef(null),v=k.useRef(""),E=r!==void 0?r:p,O=g&&w&&s.length>0&&E.length>0;k.useEffect(()=>{r!==void 0&&(v.current=r)},[r]);const _=y=>{const N=y.target.value;m(N),n?.(y),v.current!==""&&N===""&&!y.nativeEvent.inputType&&setTimeout(()=>{const M=A.current?.querySelector("form");M&&M.requestSubmit()},0),v.current=N},I=y=>{m(y.text);const N={target:{value:y.text,name:e}};n?.(N),l?.(y),x(!1)},C=y=>{y.preventDefault(),o?.(y)};return d.jsxs(W,{ref:A,className:`relative ${h}`,style:c,id:i,...u,children:[d.jsx(so,{onSubmit:C,className:"relative",children:d.jsxs(W,{className:`relative flex items-center ${a?"gap-2":""}`,children:[d.jsxs(W,{className:"relative flex-1",children:[d.jsx(W,{className:"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none",children:d.jsx(de,{name:Je.Search,className:"w-5 h-5 text-gray-400 dark:text-gray-500"})}),d.jsx(xt,{type:"search",name:e,value:E,onChange:_,onFocus:()=>x(!0),onBlur:()=>setTimeout(()=>x(!1),200),placeholder:f,className:"w-full pl-10 pr-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white text-sm"})]}),a&&d.jsx(Q,{type:"submit",className:"px-4 py-2 bg-gray-800 dark:bg-gray-600 text-white rounded-lg hover:bg-gray-900 dark:hover:bg-gray-500 transition-colors text-sm font-medium cursor-pointer h-[42px]",children:tc("common.search")})]})}),O&&d.jsx(W,{className:"absolute z-10 w-full mt-2 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg max-h-64 overflow-y-auto",children:s.map(y=>d.jsx(W,{className:"px-4 py-3 hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer border-b border-gray-100 dark:border-gray-700 last:border-b-0 transition-colors",onClick:()=>I(y),children:d.jsxs(W,{className:"flex items-center gap-2",children:[d.jsx(de,{name:Je.Search,className:"w-4 h-4 text-gray-400 dark:text-gray-500"}),d.jsx(te,{className:"text-sm text-gray-700 dark:text-gray-300",children:y.text})]})},y.id))})]})},b0=Object.freeze(Object.defineProperty({__proto__:null,SearchBar:rc},Symbol.toStringTag,{value:"Module"})),vt=window.G7Core,y0={sm:"md",md:"lg",lg:"xl",xl:"2xl","2xl":"3xl"};function Ta({src:e,fallbackText:t="U",size:r="lg",uploadEndpoint:n="/api/me/avatar",deleteEndpoint:o="/api/me/avatar",onUploadSuccess:a,onUploadError:s,onDeleteSuccess:l,onDeleteError:g,showDeleteButton:h=!0,accept:c="image/*",maxSize:i=5,className:u="",uploadButtonText:f,deleteButtonText:p,readOnly:m=!1,confirmDelete:w=!0,deleteConfirmMessage:x,confirmUpload:A=!0,uploadConfirmMessage:v,uploadSuccessActions:E,uploadErrorActions:O,deleteSuccessActions:_,deleteErrorActions:I,id:C,editorAttrs:y}){const N=k.useRef(null),[M,P]=k.useState(!1),[D,L]=k.useState(!1),[$,S]=k.useState(void 0),[b,U]=k.useState(null),[F,G]=k.useState(!1),[Y,B]=k.useState(!1),[V,j]=k.useState(null),[H,q]=k.useState(null),ue=k.useRef(`avatar-upload-${Math.random().toString(36).slice(2,11)}`).current;k.useEffect(()=>{if(V){const oe=URL.createObjectURL(V);return q(oe),()=>URL.revokeObjectURL(oe)}else q(null)},[V]);const ee=k.useCallback(oe=>vt?.t?.(oe)??oe,[]),fe=k.useCallback(()=>{const oe=document.cookie.match(/XSRF-TOKEN=([^;]+)/);return oe?decodeURIComponent(oe[1]):null},[]),R=k.useCallback(()=>vt?.api?.getToken?.()??null,[]),ke=k.useCallback(async oe=>{B(!1),j(null),P(!0),U(null);try{const ae=new FormData;ae.append("avatar",oe);const be=fe(),xe=R(),He=await fetch(n,{method:"POST",headers:{Accept:"application/json",...be&&{"X-XSRF-TOKEN":be},...xe&&{Authorization:`Bearer ${xe}`}},credentials:"include",body:ae});if(!He.ok){const Oe=await He.json().catch(()=>({}));throw new Error(Oe.message||ee("attachment.upload_failed"))}const Pe=await He.json(),Ke=Pe.data||Pe;Ke.avatar&&S(Ke.avatar),a?.(Ke),vt?.toast?.success?.(ee("mypage.profile.avatar_uploaded")),E?.length?E.forEach(Oe=>vt?.dispatch?.(Oe)):vt?.refetchDataSource?.("user")}catch(ae){const be=ae instanceof Error?ae:new Error(String(ae));U(be.message),s?.(be),vt?.toast?.error?.(be.message),O?.length&&O.forEach(xe=>vt?.dispatch?.(xe))}finally{P(!1),N.current&&(N.current.value="")}},[n,a,s,fe,R,ee]),me=k.useCallback(async oe=>{const ae=oe.target.files?.[0];if(!ae)return;U(null);const be=i*1024*1024;if(ae.size>be){const xe=new Error(ee("attachment.file_too_large").replace(":max",`${i}MB`));U(xe.message),s?.(xe),vt?.toast?.error?.(xe.message);return}if(c&&!ae.type.match(c.replace("*",".*"))){const xe=new Error(ee("attachment.invalid_file_type"));U(xe.message),s?.(xe),vt?.toast?.error?.(xe.message);return}A?(j(ae),B(!0)):ke(ae)},[i,c,s,A,ke,ee]),Ge=k.useCallback(async()=>{G(!1),L(!0),U(null);try{const oe=fe(),ae=R(),be=await fetch(o,{method:"DELETE",headers:{Accept:"application/json","Content-Type":"application/json",...oe&&{"X-XSRF-TOKEN":oe},...ae&&{Authorization:`Bearer ${ae}`}},credentials:"include"});if(!be.ok){const xe=await be.json().catch(()=>({}));throw new Error(xe.message||ee("attachment.delete_failed"))}S(null),l?.(),vt?.toast?.success?.(ee("mypage.profile.avatar_deleted")),_?.length?_.forEach(xe=>vt?.dispatch?.(xe)):vt?.refetchDataSource?.("user")}catch(oe){const ae=oe instanceof Error?oe:new Error(String(oe));U(ae.message),g?.(ae),vt?.toast?.error?.(ae.message),I?.length&&I.forEach(be=>vt?.dispatch?.(be))}finally{L(!1)}},[o,l,g,fe,R,ee]),De=k.useCallback(()=>{w?G(!0):Ge()},[w,Ge]),ye=k.useCallback(()=>{G(!1)},[]),Me=k.useCallback(()=>{B(!1),j(null),N.current&&(N.current.value="")},[]),Ce=k.useCallback(()=>{V&&ke(V)},[V,ke]),we=$===void 0?e:$,Ue=!!we,Le=y0[r]||"lg",K=F||Y,re=()=>d.jsxs(W,{className:"flex items-center justify-center gap-2",children:[d.jsx(xt,{ref:N,id:ue,type:"file",accept:c,className:"hidden",onChange:me,disabled:M}),!Ue&&d.jsxs(yr,{htmlFor:ue,className:`inline-flex items-center gap-2 px-4 py-2 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 rounded-lg text-sm font-medium hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors cursor-pointer ${M?"opacity-50 cursor-not-allowed":""}`,children:[M?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"image",size:"sm"}),d.jsx(te,{children:f||ee("mypage.profile.register_avatar")})]}),Ue&&d.jsxs(d.Fragment,{children:[d.jsxs(yr,{htmlFor:ue,className:`inline-flex items-center gap-2 px-4 py-2 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 rounded-lg text-sm font-medium hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors cursor-pointer ${M?"opacity-50 cursor-not-allowed":""}`,children:[M?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"upload",size:"sm"}),d.jsx(te,{children:f||ee("common.change")})]}),h&&d.jsxs(Q,{type:"button",className:"inline-flex items-center gap-2 px-4 py-2 border border-red-300 dark:border-red-600 text-red-600 dark:text-red-400 rounded-lg text-sm font-medium hover:bg-red-50 dark:hover:bg-red-900/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",onClick:De,disabled:D,children:[D?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"trash-2",size:"sm"}),d.jsx(te,{children:p||ee("common.delete")})]})]})]});return d.jsxs(W,{className:`flex flex-col items-center gap-3 ${u}`,id:C,...y,children:[Y&&H?d.jsxs(W,{className:"relative",children:[d.jsx(Lt,{src:H,alt:"Preview",className:`rounded-full object-cover ${r==="sm"?"w-10 h-10":r==="md"?"w-12 h-12":r==="lg"?"w-16 h-16":r==="xl"?"w-24 h-24":"w-32 h-32"}`}),d.jsx(W,{className:"absolute inset-0 rounded-full bg-blue-500/20 border-2 border-blue-500 border-dashed"})]}):d.jsx($r,{avatar:we||void 0,name:t,size:Le}),!m&&d.jsxs(W,{className:"w-[220px] flex flex-col items-center gap-2",children:[Y&&V&&d.jsxs(W,{className:"w-full p-3 bg-blue-50 dark:bg-blue-950/50 border border-blue-200 dark:border-blue-800 rounded-lg",children:[d.jsxs(W,{className:"flex items-center gap-2 mb-2",children:[d.jsx(de,{name:"upload",size:"sm",className:"text-blue-600 dark:text-blue-400 shrink-0"}),d.jsx(te,{className:"text-sm font-medium text-blue-800 dark:text-blue-300",children:v||ee("mypage.profile.upload_avatar_confirm")})]}),d.jsxs(W,{className:"text-xs text-blue-600 dark:text-blue-400 truncate mb-3",title:V.name,children:[V.name," (",(V.size/1024/1024).toFixed(2),"MB)"]}),d.jsxs(W,{className:"grid grid-cols-2 gap-2",children:[d.jsxs(Q,{type:"button",className:"inline-flex items-center justify-center gap-1.5 px-3 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-md text-sm font-medium transition-colors disabled:opacity-50",onClick:Ce,disabled:M,children:[M?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"check",size:"sm"}),d.jsx(te,{children:ee("common.confirm")})]}),d.jsx(Q,{type:"button",className:"inline-flex items-center justify-center gap-1.5 px-3 py-2 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 rounded-md text-sm font-medium hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors",onClick:Me,children:d.jsx(te,{children:ee("common.cancel")})})]})]}),F&&d.jsxs(W,{className:"w-full p-3 bg-red-50 dark:bg-red-950/50 border border-red-200 dark:border-red-800 rounded-lg",children:[d.jsxs(W,{className:"flex items-center gap-2 mb-2",children:[d.jsx(de,{name:"alert-triangle",size:"sm",className:"text-red-600 dark:text-red-400 shrink-0"}),d.jsx(te,{className:"text-sm font-medium text-red-800 dark:text-red-300",children:x||ee("mypage.profile.delete_avatar_confirm")})]}),d.jsxs(W,{className:"grid grid-cols-2 gap-2",children:[d.jsxs(Q,{type:"button",className:"inline-flex items-center justify-center gap-1.5 px-3 py-2 bg-red-600 hover:bg-red-700 text-white rounded-md text-sm font-medium transition-colors disabled:opacity-50",onClick:Ge,disabled:D,children:[D?d.jsx(de,{name:"spinner",size:"sm",className:"animate-spin"}):d.jsx(de,{name:"trash-2",size:"sm"}),d.jsx(te,{children:ee("common.delete")})]}),d.jsx(Q,{type:"button",className:"inline-flex items-center justify-center gap-1.5 px-3 py-2 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 rounded-md text-sm font-medium hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors",onClick:ye,children:d.jsx(te,{children:ee("common.cancel")})})]})]}),!K&&re()]}),b&&!K&&d.jsxs(W,{className:"flex items-center gap-2 text-sm text-red-600 dark:text-red-400",children:[d.jsx(de,{name:"alert-circle",size:"sm"}),d.jsx(te,{children:b})]})]})}const v0=Object.freeze(Object.defineProperty({__proto__:null,AvatarUploader:Ta,default:Ta},Symbol.toStringTag,{value:"Module"})),nc=()=>window.G7Core,Zn=(e,t)=>window.G7Core?.t?.(e,t)??e,oc={horizontal:"flex items-center gap-1.5",vertical:"flex flex-col items-start"},w0=()=>[{key:"view_profile",label:Zn("userinfo.view_profile"),icon:"user",path:"/users/{{userId}}"},{key:"view_posts",label:Zn("userinfo.view_posts"),icon:"file-lines",path:"/users/{{userId}}/posts"}],Na=({text:e,title:t})=>e?d.jsx(te,{className:"text-sm text-gray-500 dark:text-gray-400",title:t,children:e}):null,ac=({author:e,name:t,userId:r,subText:n,subTextTitle:o,isGuest:a=!1,isWithdrawn:s=!1,showDropdown:l=!0,clickable:g=!0,profilePath:h="/users/{userId}",className:c="",layout:i="vertical",text:u,stopPropagation:f=!1,menuItems:p,hideMenuItems:m=[],appendMenuItems:w=[],id:x,editorAttrs:A})=>{const v=r??e?.uuid,E=a||e?.is_guest||!1,O=s||e?.status==="withdrawn",_=O?Zn("userinfo.withdrawn_user"):u??t??e?.name??"",[I,C]=k.useState(!1),[y,N]=k.useState({top:0,left:0}),M=k.useRef(null),P=k.useRef(null),D=k.useRef(null),L=h.replace("{userId}",String(v??"")),$=`${oc[i]} ${c}`;k.useEffect(()=>{if(!I)return;const j=q=>{const ue=q.target,ee=M.current?.contains(ue),fe=P.current?.contains(ue);!ee&&!fe&&C(!1)},H=()=>C(!1);return document.addEventListener("mousedown",j),window.addEventListener("scroll",H,!0),window.addEventListener("resize",H),()=>{document.removeEventListener("mousedown",j),window.removeEventListener("scroll",H,!0),window.removeEventListener("resize",H)}},[I]);const S=k.useCallback(()=>{if(p&&p.length>0)return p.filter(q=>q.show!==!1);let H=w0().filter(q=>!m.includes(q.key)&&q.show!==!1);return w&&w.length>0&&(H=[...H,...w.filter(q=>q.show!==!1)]),H},[p,m,w]),b=k.useCallback(()=>{if(D.current){const j=D.current.getBoundingClientRect();N({top:j.bottom+4,left:j.left})}},[]),U=k.useCallback((j,H)=>{if(H.stopPropagation(),H.preventDefault(),C(!1),j.onClick)j.onClick();else if(j.path){const q=j.path.replace(/\{\{userId\}\}/g,String(v??"")),ue=nc();ue?.navigate?ue.navigate(q):window.location.href=q}},[v]),F=k.useCallback(j=>{j.preventDefault(),f&&j.stopPropagation(),!(E||!v)&&(l?(I||b(),C(H=>!H)):g&&nc()?.navigate?.(L))},[f,E,v,l,I,b,g,L]);if(E||!v)return d.jsxs(W,{className:$,id:x,...A,children:[d.jsxs(W,{className:"flex items-center gap-1.5 text-gray-400 dark:text-gray-500",children:[d.jsx(te,{children:_}),d.jsx(te,{className:"text-xs px-1.5 py-0.5 bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-300 rounded",children:Zn("userinfo.guest_badge")})]}),d.jsx(Na,{text:n,title:o})]});if(O)return d.jsxs(W,{className:$,id:x,...A,children:[d.jsx(te,{className:"text-gray-400 dark:text-gray-500 line-through",children:_}),d.jsx(Na,{text:n,title:o})]});const G=S(),B=/\btext-\S+/.test(c)?"":"text-gray-900 dark:text-white",V=l||g?`${B} hover:text-blue-600 dark:hover:text-blue-400 cursor-pointer font-medium`.trim():`${B} font-medium`.trim();return d.jsxs(W,{ref:M,className:`relative inline-block ${c}`,id:x,...A,children:[d.jsxs(W,{className:oc[i],children:[d.jsx(Q,{ref:D,onClick:F,className:V,children:_}),d.jsx(Na,{text:n,title:o})]}),l&&I&&G.length>0&&Jt.createPortal(d.jsx(W,{ref:P,className:"fixed w-40 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg py-1 z-[9999]",style:{top:y.top,left:y.left},"data-testid":"author-dropdown-menu",children:G.map(j=>d.jsxs(Q,{onClick:H=>U(j,H),className:"flex items-center justify-start gap-2 w-full text-left px-3 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer","data-testid":`menu-item-${j.key}`,children:[j.icon&&d.jsx(de,{name:j.icon,className:"w-4 h-4"}),d.jsx(te,{children:j.label})]},j.key))}),document.body)]})},x0=Object.freeze(Object.defineProperty({__proto__:null,UserInfo:ac},Symbol.toStringTag,{value:"Module"})),sc=({tabs:e,activeTabId:t,onTabChange:r,variant:n="underline",className:o="",style:a,hiddenTabIds:s=[],mobileBreakpoint:l=768,id:g,editorAttrs:h})=>{const i=window.G7Core?.useResponsive,u=i?.(),f=u?u.width{!v.disabled&&v.id!==t&&r?.(v.id)},m=v=>{const E=v.target.value,O=Number(E),_=typeof E=="string"&&E!==""&&!Number.isNaN(O)?O:E,I=e.find(C=>String(C.id)===String(_));I&&p(I)},w=s.length>0?e.filter(v=>!s.includes(v.id)):e;if(f)return d.jsx(W,{className:`relative ${o}`,style:a,id:g,...h,children:d.jsx(Va,{value:t!==void 0?String(t):"",onChange:m,options:w.map(v=>({value:String(v.id),label:v.badge!==void 0?`${v.label} (${v.badge})`:v.label,disabled:v.disabled})),className:"w-full"})});const x=v=>{const E=v.id===t,O="flex items-center gap-2 px-3 py-2 font-medium text-sm transition-all shrink-0 whitespace-nowrap";if(v.disabled)return`${O} opacity-50 cursor-not-allowed text-gray-400 dark:text-gray-600`;switch(n){case"pills":return E?`${O} bg-blue-600 dark:bg-blue-500 text-white rounded-lg`:`${O} text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg`;case"underline":return E?`${O} text-gray-900 dark:text-white border-b-2 border-gray-900 dark:border-white`:`${O} text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 border-b-2 border-transparent hover:border-gray-300 dark:hover:border-gray-600`;default:return E?`${O} text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20 border-b-2 border-blue-600 dark:border-blue-400`:`${O} text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 border-b-2 border-transparent`}},A=n==="underline"?"flex gap-0 border-b border-gray-200 dark:border-gray-700":"flex gap-2";return d.jsx(W,{className:`relative ${o}`,style:a,id:g,...h,children:d.jsx(Ur,{className:A,children:w.map(v=>d.jsxs(Q,{type:"button",onClick:()=>p(v),disabled:v.disabled,className:x(v),children:[v.iconName&&d.jsx(de,{name:v.iconName,size:"sm"}),d.jsx(te,{children:v.label}),v.badge!==void 0&&d.jsx(W,{className:"flex items-center justify-center min-w-5 h-5 px-1.5 bg-red-500 text-white text-xs font-bold rounded-full",children:d.jsx(te,{children:v.badge})})]},v.id))})})},k0=Object.freeze(Object.defineProperty({__proto__:null,TabNavigation:sc},Symbol.toStringTag,{value:"Module"})),C0={Header:()=>Promise.resolve().then(()=>rd),Footer:()=>Promise.resolve().then(()=>sd),MobileNav:()=>Promise.resolve().then(()=>ld),SlotContainer:()=>Promise.resolve().then(()=>ed),NotificationCenter:()=>Promise.resolve().then(()=>td),ProductCard:()=>Promise.resolve().then(()=>Id),ImageGallery:()=>Promise.resolve().then(()=>Nl),ProductImageViewer:()=>Promise.resolve().then(()=>$f),QuantitySelector:()=>Promise.resolve().then(()=>zf),PostReactions:()=>Promise.resolve().then(()=>jf),RichTextEditor:()=>Promise.resolve().then(()=>Bf),HtmlContent:()=>Promise.resolve().then(()=>Wf),HtmlEditor:()=>Promise.resolve().then(()=>Kf),ExpandableContent:()=>Promise.resolve().then(()=>Vf),FileUploader:()=>Promise.resolve().then(()=>Wh),ConfirmDialog:()=>Promise.resolve().then(()=>qf),SocialLoginButtons:()=>Promise.resolve().then(()=>Vh),Toast:()=>Promise.resolve().then(()=>Qh),PageTransitionIndicator:()=>Promise.resolve().then(()=>Rh),PageTransitionBlur:()=>Promise.resolve().then(()=>e0),PageSkeleton:()=>Promise.resolve().then(()=>g0),PageLoading:()=>Promise.resolve().then(()=>p0),ThemeToggle:()=>Promise.resolve().then(()=>qc),Pagination:()=>Promise.resolve().then(()=>m0),SearchBar:()=>Promise.resolve().then(()=>b0),Avatar:()=>Promise.resolve().then(()=>Jc),AvatarUploader:()=>Promise.resolve().then(()=>v0),UserInfo:()=>Promise.resolve().then(()=>x0),Modal:()=>Promise.resolve().then(()=>Xf),TabNavigation:()=>Promise.resolve().then(()=>k0)},S0=({id:e,className:t,style:r,children:n,editorAttrs:o})=>d.jsx(W,{id:e,className:t,style:r,...o,children:n}),_0=({id:e,children:t,cols:r=1,responsive:n,gap:o,rowGap:a,colGap:s,autoRows:l,autoCols:g,flow:h="row",className:c="",style:i,onClick:u,editorAttrs:f})=>{const p=["grid"];if(r&&p.push(`grid-cols-${r}`),n&&(n.sm&&p.push(`sm:grid-cols-${n.sm}`),n.md&&p.push(`md:grid-cols-${n.md}`),n.lg&&p.push(`lg:grid-cols-${n.lg}`),n.xl&&p.push(`xl:grid-cols-${n.xl}`),n["2xl"]&&p.push(`2xl:grid-cols-${n["2xl"]}`)),o!==void 0&&o>0&&p.push(`gap-${o}`),a!==void 0&&a>0&&p.push(`gap-y-${a}`),s!==void 0&&s>0&&p.push(`gap-x-${s}`),l){const w={auto:"auto-rows-auto",min:"auto-rows-min",max:"auto-rows-max",fr:"auto-rows-fr"};p.push(w[l])}if(g){const w={auto:"auto-cols-auto",min:"auto-cols-min",max:"auto-cols-max",fr:"auto-cols-fr"};p.push(w[g])}const m={row:"grid-flow-row",col:"grid-flow-col",dense:"grid-flow-dense","row-dense":"grid-flow-row-dense","col-dense":"grid-flow-col-dense"};return p.push(m[h]),c&&p.push(c),d.jsx(W,{id:e,className:p.join(" "),style:i,onClick:u,...f,children:t})},E0=({id:e,children:t,direction:r="row",justify:n="start",align:o="stretch",wrap:a="nowrap",gap:s=0,grow:l=!1,shrink:g=!0,className:h="",style:c,onClick:i,editorAttrs:u})=>{const f=["flex"],p={row:"flex-row","row-reverse":"flex-row-reverse",col:"flex-col","col-reverse":"flex-col-reverse"};f.push(p[r]);const m={wrap:"flex-wrap",nowrap:"flex-nowrap","wrap-reverse":"flex-wrap-reverse"};f.push(m[a]);const w={start:"justify-start",end:"justify-end",center:"justify-center",between:"justify-between",around:"justify-around",evenly:"justify-evenly"};f.push(w[n]);const x={start:"items-start",end:"items-end",center:"items-center",baseline:"items-baseline",stretch:"items-stretch"};return f.push(x[o]),s>0&&f.push(`gap-${s}`),l===!0?f.push("flex-grow"):typeof l=="number"&&l>0&&f.push(`flex-grow-${l}`),g===!1?f.push("shrink-0"):g===!0?f.push("flex-shrink"):typeof g=="number"&&g>0&&f.push(`flex-shrink-${g}`),h&&f.push(h),d.jsx(W,{id:e,className:f.join(" "),style:c,onClick:i,...u,children:t})},T0=({id:e,title:t,subtitle:r,children:n,padding:o="md",background:a="none",maxWidth:s,centered:l=!1,border:g=!1,shadow:h="none",rounded:c=!1,className:i="",style:u,onClick:f,editorAttrs:p})=>{const m=[],w={none:"p-0",sm:"p-2",md:"p-4",lg:"p-6",xl:"p-8"};m.push(w[o]);const x={none:"",white:"bg-white dark:bg-gray-700",gray:"bg-gray-50 dark:bg-gray-800",primary:"bg-blue-50 dark:bg-blue-900/20",secondary:"bg-gray-50 dark:bg-gray-800"};if(a!=="none"&&m.push(x[a]),s){const v={sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl","2xl":"max-w-2xl","4xl":"max-w-4xl","6xl":"max-w-6xl","7xl":"max-w-7xl",full:"max-w-full"};m.push(v[s])}l&&m.push("mx-auto"),g&&m.push("border","border-gray-200","dark:border-gray-700");const A={none:"",sm:"shadow-sm",md:"shadow-md",lg:"shadow-lg",xl:"shadow-xl"};return h!=="none"&&m.push(A[h]),c&&m.push("rounded-lg"),i&&m.push(i),d.jsxs(Xa,{id:e,className:m.join(" "),style:u,onClick:f,...p,children:[(t||r)&&d.jsxs(W,{className:"mb-4",children:[t&&d.jsx(Wa,{className:"text-2xl font-bold text-gray-900 dark:text-white",children:t}),r&&d.jsx(Dt,{className:"mt-1 text-sm text-gray-600 dark:text-gray-400",children:r})]}),n]})},N0=({id:e,leftWidth:t="250px",rightWidth:r="300px",leftSlot:n,centerSlot:o,rightSlot:a,className:s="",style:l,editorAttrs:g})=>{const h=`flex flex-row w-full h-full ${s}`.trim(),c={width:t,flexShrink:0},i={flex:1,minWidth:0},u={width:r,flexShrink:0};return d.jsxs(W,{id:e,className:h,style:l,...g,children:[d.jsx(W,{className:"flex flex-col",style:c,children:n}),d.jsx(W,{className:"flex flex-col",style:i,children:o}),d.jsx(W,{className:"flex flex-col",style:u,children:a})]})},A0={identifier:"sirsoft-basic",vendor:"sirsoft",name:{ko:"Basic",en:"Basic"},version:"1.0.2",license:"MIT",description:{ko:"그누보드7 기본 사용자 템플릿",en:"Gnuboard7 default user template"},type:"user",locales:["ko","en"],author:{name:"sirsoft",email:"contact@sirsoft.com",url:"https://sirsoft.com"},release_date:"2026-01-07",g7_version:">=7.0.0",dependencies:{modules:{"sirsoft-board":">=1.0.0","sirsoft-ecommerce":">=1.0.0","sirsoft-page":">=1.0.0"},plugins:{"sirsoft-daum_postcode":">=1.0.0"}},assets:{css:["dist/css/components.css"],js:["dist/js/components.iife.js"],fonts:[],images:[]},components:{basic:["a","button","checkbox","div","form","h1","h2","h3","h4","hr","icon","img","input","label","li","nav","p","section","select","span","svg","table","tbody","td","textarea","th","thead","tr","ul"],composite:["header","footer","mobile-nav","product-card","rich-text-editor","image-gallery","quantity-selector","post-reactions","social-login-buttons","file-uploader","card","modal","toast","pagination","stat-card","status-badge","tab-navigation","empty-state","loading-spinner","breadcrumb","search-bar","dropdown"],layout:["container","flex","grid","section"]},preview:{thumbnail:"preview/thumbnail.png",screenshots:["preview/screenshot1.png","preview/screenshot2.png"]},error_config:{layouts:{401:"errors/401",403:"errors/403",404:"errors/404",500:"errors/500",503:"errors/503",maintenance:"errors/maintenance"}},features:{dark_mode:!0,responsive:!0,multi_language:!0,multi_currency:!0},github_url:"https://github.com/gnuboard/g7-template-sirsoft-basic",github_changelog_url:"https://github.com/gnuboard/g7-template-sirsoft-basic/blob/main/CHANGELOG.md",externals:[{id:"fontawesome",type:"style",url:"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css",preconnect:"https://cdnjs.cloudflare.com"},{id:"pretendard",type:"webfont",url:"https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css",preconnect:"https://cdn.jsdelivr.net",crossorigin:"anonymous"}]},lc={KRW:{locale:"ko-KR",decimals:0},USD:{locale:"en-US",decimals:2},JPY:{locale:"ja-JP",decimals:0},CNY:{locale:"zh-CN",decimals:2},EUR:{locale:"de-DE",decimals:2}};function Lr(e,t="KRW"){if(!Number.isFinite(e))return"0";const r=lc[t]||lc.KRW;try{return new Intl.NumberFormat(r.locale,{style:"currency",currency:t,minimumFractionDigits:r.decimals,maximumFractionDigits:r.decimals}).format(e)}catch{return e.toLocaleString()+(t==="KRW"?"원":"")}}function Qn(e,t,r=0){if(!e)return;const n=e.KRW?.value??e.KRW?.price??0,o={};for(const[a,s]of Object.entries(e)){const l=s?.value??s?.price??0;let g=0;r>0&&(a==="KRW"?g=r:n>0&&(g=r*l/n));const h=(l+g)*t;o[a]={value:h,formatted:Lr(h,a)}}return o}function Jn(e){const t={};for(const n of e){const o=n?.multiCurrencyTotalPrice;if(o)for(const[a,s]of Object.entries(o)){const l=s?.value??s?.price??0;t[a]=(t[a]??0)+l}}const r={};for(const[n,o]of Object.entries(t))r[n]={value:o,formatted:Lr(o,n)};return r}function ic(e,t){if(!e||!t?.length)return 0;let r=0;for(const n of t){const o=e[n.id];if(o==null)continue;const a=n.values?.find(s=>s.id===Number(o));a&&(r+=a.price_adjustment??0)}return r}function Rn(e){return e.name_localized?e.name_localized:typeof e.name=="string"?e.name:e.name?.ko??""}function M0(e,t,r){if(t&&r in t)return t[r];if(Array.isArray(e)){const n=e.find(o=>typeof o.key=="string"?o.key===r:o.key?.ko===r||Object.values(o.key).includes(r));return n?typeof n.value=="string"?n.value:n.value?.ko??Object.values(n.value)[0]:void 0}return e[r]}function O0(e,t){if(t)return t;if(!Array.isArray(e))return e;const r={};for(const n of e){const o=typeof n.key=="string"?n.key:n.key?.ko??Object.values(n.key)[0]??"",a=typeof n.value=="string"?n.value:n.value?.ko??Object.values(n.value)[0]??"";o&&(r[o]=a)}return r}function I0(e,t,r){return r.find(n=>!n?.option_values||!n?.is_active?!1:e.every(o=>{const a=Rn(o),s=t?.[a];return M0(n.option_values,n.option_values_localized,a)===s}))}function D0(e,t){const r=e.params;if(!r)return;const{optionGroups:n,options:o,selectedOptionItems:a,preferredCurrency:s}=r;let l;if(r.newGroupName&&r.newValue?l={...r.currentSelection??{},[r.newGroupName]:r.newValue}:l=r.currentSelection??{},!n?.every(O=>{const _=Rn(O);return l?.[_]}))return;const h=I0(n,l,o??[]);if(!h){t.setState?.({currentSelection:{},__mergeMode:"shallow"});return}const c=n.map(O=>l[Rn(O)]).join("_"),i=a??[];if(i.find(O=>O.id===c)){const O=window.G7Core;O?.toast?.warning?.(O?.t?.("sirsoft-ecommerce.shop.already_added_option")??"이미 추가된 옵션입니다."),t.setState?.({currentSelection:{},__mergeMode:"shallow"});return}const f=h.selling_price??0,p={};n.forEach(O=>{const _=Rn(O);p[_]=l[_]});const m=r.additionalOptionGroups??[],w={};for(const O of m){if(!O.is_required)continue;const _=O.values?.find(I=>I.is_default);_&&(w[O.id]=_.id)}const x=ic(w,m),A=f+x,v={id:c,optionId:h.id,options:p,optionValues:O0(h.option_values,h.option_values_localized),quantity:1,stock:h.stock_quantity??999,unitPrice:f,unitPriceFormatted:Lr(f,s),totalPrice:A,totalPriceFormatted:Lr(A,s),multiCurrencyUnitPrice:h.multi_currency_selling_price,multiCurrencyTotalPrice:Qn(h.multi_currency_selling_price,1,x),additionalOptionSelections:w,additionalOptionsTotal:x},E=[...i,v];t.setState?.({selectedOptionItems:E,selectedTotalMultiCurrency:Jn(E),currentSelection:{},__mergeMode:"shallow"})}function L0(e,t){const r=e.params;if(!r)return;const{selectedOptionItems:n,preferredCurrency:o}=r,a=Number(r.itemIndex)||0,s=Number(r.newQuantity)||1,l=(n??[]).map((g,h)=>{if(h!==a)return g;const c=g?.unitPrice??0,i=g?.additionalOptionsTotal??0,u=(c+i)*s;return{...g,quantity:s,totalPrice:u,totalPriceFormatted:Lr(u,o),multiCurrencyTotalPrice:Qn(g?.multiCurrencyUnitPrice,s,i)}});t.setState?.({selectedOptionItems:l,selectedTotalMultiCurrency:Jn(l)})}function P0(e,t){const r=e.params;if(!r)return;const{selectedOptionItems:n,additionalOptionGroups:o,preferredCurrency:a}=r,s=Number(r.itemIndex)||0,l=Number(r.additionalOptionId),g=Object.prototype.hasOwnProperty.call(r,"customText"),h=r.valueId===""||r.valueId==null?null:Number(r.valueId),c=(n??[]).map((i,u)=>{if(u!==s)return i;const f={...i.additionalOptionSelections??{}},p={...i.additionalOptionCustomTexts??{}};if(g){const v=String(r.customText??"");v.trim()===""?delete p[l]:p[l]=v}else h==null?(delete f[l],delete p[l]):(f[l]=h,(o??[]).find(O=>O.id===l)?.values?.find(O=>O.id===h)?.allow_custom_text||delete p[l]);const m=ic(f,o),w=i?.unitPrice??0,x=i?.quantity??1,A=(w+m)*x;return{...i,additionalOptionSelections:f,additionalOptionCustomTexts:p,additionalOptionsTotal:m,totalPrice:A,totalPriceFormatted:Lr(A,a),multiCurrencyTotalPrice:Qn(i?.multiCurrencyUnitPrice,x,m)}});t.setState?.({selectedOptionItems:c,selectedTotalMultiCurrency:Jn(c)})}function F0(e,t){const r=e.params;if(!r)return;const n=Number(r.itemIndex)||0,o=(r.selectedOptionItems??[]).filter((a,s)=>s!==n);t.setState?.({selectedOptionItems:o,selectedTotalMultiCurrency:Jn(o)})}function U0(e,t){const r=e.params;if(!r)return;const n=Math.max(1,Number(r.newQuantity)||1);t.setState?.({noOptionQuantity:n,noOptionTotalMultiCurrency:Qn(r.multiCurrencyUnitPrice,n)})}const cn=window.G7Core?.createLogger?.("Handler:Cart")??{log:(...e)=>console.log("[Handler:Cart]",...e),warn:(...e)=>console.warn("[Handler:Cart]",...e),error:(...e)=>console.error("[Handler:Cart]",...e)};function hr(e){const t=window.G7Core;t?.state?.setLocal?(t.state.setLocal(e),cn.log("Local state updated:",e)):cn.warn("G7Core.state.setLocal not available")}function cc(){return window.G7Core?.state?.getLocal?.()||{}}function $0(){return window.G7Core?.state?.get?.()||{}}function z0(e,t="info"){const r=window.G7Core;r?.toast?.show?r.toast.show(e,t):cn.warn("G7Core.toast.show not available, message:",e)}function H0(e){const t=window.G7Core;return t?.t?t.t(e):e}function dc(){const e=window.G7Core;if(e?.dispatch){const r=cc().selectedItems||[];e.dispatch({handler:"refetchDataSource",params:{dataSourceId:"cartItems"}}),cn.log("Refetching cartItems with selected_ids:",r)}else cn.warn("G7Core.dispatch not available")}function G0(e,t){const{itemId:r,selectedItems:n}=e?.params||{},o=n||[];let a;o.includes(r)?a=o.filter(h=>h!==r):a=[...o,r];const l=$0().cartItems?.data?.items||[],g=l.length>0&&a.length===l.length;hr({selectedItems:a,allSelected:g,selectedCount:a.length}),dc()}function j0(e,t){const{allItemIds:r,isSelected:n}=e?.params||{};hr({selectedItems:n?r:[],allSelected:n,selectedCount:n?r.length:0}),dc()}function B0(e,t){const{optionName:r,optionValue:n}=e?.params||{},a=cc().selectedOptions||{};hr({selectedOptions:{...a,[r]:n}})}function W0(e,t){const{targetIds:r}=e?.params||{};if(!r||r.length===0){z0(H0("shop.cart.select_items_to_delete"),"warning");return}hr({deleteModal:{visible:!0,targetIds:r}})}function K0(e,t){const{targetItem:r}=e?.params||{};hr({optionModal:{visible:!0,targetItem:r},selectedOptions:r?.options||{},selectedQuantity:r?.quantity})}function V0(e,t){const{selectedItems:r}=e?.params||{};if(!r||r.length===0){hr({isCalculating:!1});return}hr({isCalculating:!0})}const pr=window.G7Core?.createLogger?.("Handler:CartOptionChange")??{log:(...e)=>console.log("[Handler:CartOptionChange]",...e),warn:(...e)=>console.warn("[Handler:CartOptionChange]",...e),error:(...e)=>console.error("[Handler:CartOptionChange]",...e)};function Aa(e){return e.name_localized?e.name_localized:typeof e.name=="string"?e.name:e.name?.ko??""}function Y0(e,t,r){if(t&&r in t)return t[r];if(Array.isArray(e)){const n=e.find(o=>typeof o.key=="string"?o.key===r:o.key?.ko===r||Object.values(o.key).includes(r));return n?typeof n.value=="string"?n.value:n.value?.ko??Object.values(n.value)[0]:void 0}return e[r]}function uc(e,t,r){return!e||!t?.length?null:t.every(a=>{const s=Aa(a);return e[s]})?r?.find(a=>t.every(s=>{const l=Aa(s);return Y0(a.option_values,a.option_values_localized,l)===e[l]}))||null:(pr.log("Not all options selected yet"),null)}function X0(e,t){const{selectedOptions:r,optionGroups:n,options:o}=e?.params||{};pr.log("findMatchingOption called:",{selectedOptions:r,optionGroups:n,optionsCount:o?.length});const a=uc(r,n,o);return pr.log("Matched option:",a),{matchedOption:a}}function q0(e,t){const{currentOptionValues:r,optionGroups:n,options:o}=e?.params||{};if(pr.log("initCartOptionSelection called:",{currentOptionValues:r,optionGroups:n,optionsCount:o?.length}),!n?.length||!r)return pr.log("No option groups or current values, returning empty"),{selectedOptions:{},matchedOption:null};const a={};for(const l of n){const g=Aa(l),h=r[g],c=l.values_localized??(Array.isArray(l.values)?l.values.map(i=>typeof i=="string"?i:i?.ko??""):[]);h&&c.includes(h)&&(a[g]=h)}pr.log("Initial selectedOptions:",a);const s=uc(a,n,o||[]);return pr.log("Matched option:",s),{selectedOptions:a,matchedOption:s}}const dn="g7_cart_key",Z0="/api/modules/sirsoft-ecommerce/cart/key",Ma="g7_guest_order_token",fc="g7_guest_order_number",Oa="g7_guest_order_expires_at",at=window.G7Core?.createLogger?.("Handler:Storage")??{log:(...e)=>console.log("[Handler:Storage]",...e),warn:(...e)=>console.warn("[Handler:Storage]",...e),error:(...e)=>console.error("[Handler:Storage]",...e)};async function gc(){try{const e=await fetch(Z0,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"}});return e.ok?(await e.json()).data?.cart_key||null:(at.error("Failed to issue cartKey from API:",e.status),null)}catch(e){return at.error("Error issuing cartKey from API:",e),null}}function rr(e){const t=window.G7Core;t?.state?.set?(t.state.set(e),at.log("Global state updated:",e)):at.warn("G7Core.state.set not available")}function Q0(){try{const e=window.G7Config;return e?.user?e.user:(window.G7Core?.state?.get?.()||{}).currentUser||null}catch{return null}}async function J0(e,t){let r=null;try{r=localStorage.getItem(dn)}catch{}if(r)at.log("Existing cartKey loaded:",r);else if(r=await gc(),r)try{localStorage.setItem(dn,r),at.log("New cartKey issued from API:",r)}catch{}else at.error("Failed to issue cartKey from API");rr({cartKey:r})}function R0(e,t){try{return localStorage.getItem(dn)}catch{return null}}function hc(e,t){try{localStorage.removeItem(dn),at.log("cartKey removed from localStorage")}catch{}rr({cartKey:null})}async function ep(e,t){if(Q0()){hc();return}const n=await gc();if(n){try{localStorage.setItem(dn,n),at.log("New cartKey regenerated from API:",n)}catch{}rr({cartKey:n})}else at.error("Failed to regenerate cartKey from API")}function tp(e,t){const{key:r,value:n}=e?.params||{};if(!r){at.warn("saveToStorage: key is required");return}try{localStorage.setItem(r,n),at.log("Saved to storage:",r,n)}catch{}}function rp(e,t){const{key:r,defaultValue:n}=e?.params||{};if(!r)return at.warn("loadFromStorage: key is required"),n||null;try{return localStorage.getItem(r)||n||null}catch{return n||null}}function Ia(){try{sessionStorage.removeItem(Ma),sessionStorage.removeItem(fc),sessionStorage.removeItem(Oa)}catch{}}function np(e,t){let r=null,n=null;try{r=sessionStorage.getItem(Ma),n=sessionStorage.getItem(Oa)}catch{}let o=!1;if(r){const a=n?new Date(n).getTime():NaN;(isNaN(a)||a<=Date.now())&&(Ia(),r=null,o=!0)}if(r){rr({guestOrderToken:r}),at.log("Guest order token loaded from sessionStorage");return}if(!o){const s=window.G7Core?.state?.get?.("_global")?.guestOrderToken;if(typeof s=="string"&&s!==""){at.log("Guest order token preserved from in-memory _global (sessionStorage empty)");return}}rr({guestOrderToken:null}),at.log("No guest order token (visitor not authenticated)")}function op(e,t){const{token:r,orderNumber:n,expiresAt:o}=e?.params||{};if(!r||!n||!o){at.warn("saveGuestOrderToken: token, orderNumber, expiresAt are required");return}try{sessionStorage.setItem(Ma,r),sessionStorage.setItem(fc,n),sessionStorage.setItem(Oa,o)}catch{}rr({guestOrderToken:r})}function ap(e,t){Ia(),rr({guestOrderToken:null})}function sp(e,t){Ia(),rr({guestOrderToken:null})}function lp(e,t){const{product:r,priceField:n,currencyCode:o}=e,a=o||t.getState("_global.preferredCurrency")||"KRW",s=`multi_currency_${n}`,l=r[s];if(l&&l[a])return l[a].formatted;const g=`${n}_formatted`;return r[g]||String(r[n])}const Da={KRW:{code:"KRW",symbol:"₩",locale:"ko-KR",decimals:0},USD:{code:"USD",symbol:"$",locale:"en-US",decimals:2},JPY:{code:"JPY",symbol:"¥",locale:"ja-JP",decimals:0},CNY:{code:"CNY",symbol:"¥",locale:"zh-CN",decimals:2},EUR:{code:"EUR",symbol:"€",locale:"de-DE",decimals:2}};function ip(e,t){const{value:r,currencyCode:n,locale:o}=e,a=n||t.getState("_global.preferredCurrency")||"KRW",s=Da[a]||Da.KRW,l=o||s.locale;try{return new Intl.NumberFormat(l,{style:"currency",currency:s.code,minimumFractionDigits:s.decimals,maximumFractionDigits:s.decimals}).format(r)}catch{const g=r.toLocaleString(void 0,{minimumFractionDigits:s.decimals,maximumFractionDigits:s.decimals});return`${s.symbol}${g}`}}function cp(e){return Da[e]?.symbol||e}const La=window.G7Core?.createLogger?.("Handler:Currency")??{log:(...e)=>console.log("[Handler:Currency]",...e),warn:(...e)=>console.warn("[Handler:Currency]",...e),error:(...e)=>console.error("[Handler:Currency]",...e)},pc="g7_preferred_currency",dp="KRW";function up(e,t){const{defaultCurrency:r=dp}=e;let n=r;try{if(typeof window<"u"&&window.localStorage){const o=localStorage.getItem(pc);o&&mc(o)&&(n=o)}}catch{La.warn("localStorage 접근 불가, 기본 통화 사용:",r)}return t.setState("global",{preferredCurrency:n}),n}function fp(e,t){const{currencyCode:r}=e;if(!mc(r)){La.warn("유효하지 않은 통화 코드:",r);return}try{typeof window<"u"&&window.localStorage&&localStorage.setItem(pc,r)}catch{La.warn("localStorage 저장 실패")}t.setState("global",{preferredCurrency:r})}function mc(e){return typeof e=="string"&&/^[A-Z]{3}$/.test(e)}const Pr=window.G7Core?.createLogger?.("Handler:SetTheme")??{log:(...e)=>console.log("[Handler:SetTheme]",...e),warn:(...e)=>console.warn("[Handler:SetTheme]",...e),error:(...e)=>console.error("[Handler:SetTheme]",...e)},Pa=["auto","light","dark"],bc="g7_color_scheme",gp=e=>e==="auto"?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e,eo=e=>{const t=gp(e);document.documentElement.setAttribute("data-theme",t),t==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")};function hp(){try{const e=localStorage.getItem(bc),t=e&&Pa.includes(e)?e:"auto";eo(t),Pr.log("Initial theme applied:",t)}catch(e){Pr.warn("Failed to load initial theme:",e),eo("auto")}}async function pp(e,t){const r=e?.target;if(r&&typeof r=="string"&&Pa.includes(r)){eo(r);return}hp()}async function mp(e,t){let r;if(e?.target&&typeof e.target=="string"&&!e.target.includes("{{")&&(r=e.target),!r||typeof r!="string"){Pr.warn("Invalid theme:",r);return}if(!Pa.includes(r)){Pr.warn("Unsupported theme:",r);return}const n=r;try{localStorage.setItem(bc,n)}catch(o){Pr.error("Failed to save theme to localStorage:",o);return}eo(n),Pr.log("Theme changed to:",n)}const bp=window.G7Core?.createLogger?.("Handler:RedirectToLoginWithReturn")??{log:(...e)=>console.log("[Handler:RedirectToLoginWithReturn]",...e),warn:(...e)=>console.warn("[Handler:RedirectToLoginWithReturn]",...e),error:(...e)=>console.error("[Handler:RedirectToLoginWithReturn]",...e)};async function yp(e,t){const r=window.G7Core;if(!r?.dispatch){bp.error("G7Core.dispatch 가 초기화되지 않아 로그인 리다이렉트를 실행할 수 없습니다.");return}const n=window.location.pathname+window.location.search;await r.dispatch({handler:"navigate",params:{path:"/login",query:{redirect:n}}})}const Fa=window.G7Core?.createLogger?.("Handler:DownloadAttachment")??{log:(...e)=>console.log("[Handler:DownloadAttachment]",...e),warn:(...e)=>console.warn("[Handler:DownloadAttachment]",...e),error:(...e)=>console.error("[Handler:DownloadAttachment]",...e)};async function vp(e,t){const r=window.G7Core,{url:n,filename:o}=e?.params||{};if(!n){Fa.warn("다운로드 URL 이 없어 요청을 건너뜁니다.");return}if(!r?.api?.get){Fa.error("G7Core.api.get 이 초기화되지 않아 다운로드를 실행할 수 없습니다.");return}try{const a=await r.api.get(n,{responseType:"blob"});if(a){const s=URL.createObjectURL(a),l=document.createElement("a");l.href=s,l.download=o||"",document.body.appendChild(l),l.click(),document.body.removeChild(l),URL.revokeObjectURL(s)}}catch(a){Fa.error("첨부파일 다운로드 실패",a),r?.toast?.error?.(r?.t?.("common.download_failed")??"Download failed")}}const to={"sirsoft-basic.addSelectedItemIfComplete":D0,"sirsoft-basic.updateSelectedItemQuantity":L0,"sirsoft-basic.removeSelectedItem":F0,"sirsoft-basic.updateNoOptionQuantity":U0,"sirsoft-basic.setBlockAdditionalOption":P0,"sirsoft-basic.getDisplayPrice":lp,"sirsoft-basic.formatCurrency":ip,"sirsoft-basic.getCurrencySymbol":cp,"sirsoft-basic.loadPreferredCurrency":up,"sirsoft-basic.savePreferredCurrency":fp,setTheme:mp,initTheme:pp,redirectToLoginWithReturn:yp,downloadAttachment:vp,toggleCartItemSelection:G0,selectAllCartItems:j0,setCartOption:B0,openCartDeleteModal:W0,openCartOptionModal:K0,recalculateCart:V0,findMatchingOption:X0,initCartOptionSelection:q0,initCartKey:J0,getCartKey:R0,clearCartKey:hc,regenerateCartKey:ep,saveToStorage:tp,loadFromStorage:rp,initGuestOrderToken:np,saveGuestOrderToken:op,clearGuestOrderToken:ap,clearGuestTokenOnEntry:sp},un=window.G7Core?.createLogger?.("Template:sirsoft-basic:IdentityLauncher")??{log:(...e)=>console.log("[Template:sirsoft-basic:IdentityLauncher]",...e),warn:(...e)=>console.warn("[Template:sirsoft-basic:IdentityLauncher]",...e),error:(...e)=>console.error("[Template:sirsoft-basic:IdentityLauncher]",...e)};function wp(e){const t=window.G7Core,r=t?.state?.getLocal?.()??{},n=t?.state?.getGlobal?.()??t?.state?.get?.()??{},o=(...g)=>g.find(h=>typeof h=="string"&&h.length>0),a=o(e.target?.email,n?.currentUser?.email,n?.user?.email,n?.auth?.user?.email,e.purpose==="signup"?r?.registerForm?.email:void 0,e.purpose==="password_reset"?r?.passwordResetForm?.email:void 0,e.purpose==="password_reset"?r?.email:void 0),s=o(e.target?.phone,n?.currentUser?.phone,n?.user?.phone,n?.auth?.user?.phone);if(!a&&!s)return null;const l={};return a&&(l.email=a),s&&(l.phone=s),l}function xp(){const t=window.G7Core?.api?.getToken?.()??null;return t?{Authorization:`Bearer ${t}`}:{}}function kp(){try{const e=typeof window<"u"?window.localStorage?.getItem("g7_locale"):null;return e?{"Accept-Language":e}:{}}catch{return{}}}async function Cp(e,t){const r={purpose:e.purpose};e.provider_id&&(r.provider_id=e.provider_id),t&&(r.target=t);const n=e.challenge_start_url||"/api/identity/challenges",o=await fetch(n,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",Accept:"application/json",...kp(),...xp()},body:JSON.stringify(r)}),a=await o.json().catch(()=>null);if(!o.ok||!a?.success){const l=a?.message??`Challenge 시작 실패 (HTTP ${o.status})`;throw new Error(l)}const s=a.data??a;return{id:s.id,expires_at:s.expires_at,render_hint:s.render_hint??e.render_hint??"text_code",public_payload:s.public_payload,redirect_url:s.redirect_url,max_attempts:typeof s.max_attempts=="number"?s.max_attempts:void 0}}async function Sp(e){const t=window.G7Core,r=t?.identity;if(!t?.dispatch||!t?.state||!r)return un.error("G7Core 또는 G7Core.identity 가 초기화되지 않아 launcher 를 실행할 수 없습니다."),{status:"failed",failureCode:"G7_NOT_READY"};if(e.render_hint==="external_redirect"||e.redirect_url)return r.redirectExternally(e);const n=wp(e);let o;try{o=await Cp(e,n)}catch(p){un.error("Challenge 시작 실패:",p);try{await t.dispatch({handler:"toast",params:{type:"error",message:p instanceof Error?p.message:"본인인증 시작에 실패했습니다."}})}catch{}return{status:"failed",failureCode:"CHALLENGE_START_FAILED",reason:p instanceof Error?p.message:String(p)}}if(o.redirect_url)return r.redirectExternally({...e,render_hint:"external_redirect",redirect_url:o.redirect_url});const a=o.expires_at?new Date(o.expires_at).getTime():0,s=a>0?Math.max(0,Math.floor((a-Date.now())/1e3)):0,l=typeof o.max_attempts=="number"?o.max_attempts:0;t.state.set({identityChallenge:{policy_key:e.policy_key,purpose:e.purpose,provider_id:e.provider_id??null,render_hint:o.render_hint,challenge_id:o.id,expires_at:o.expires_at,public_payload:o.public_payload??{},target:n??null,code:"",error:null,attempts:0,maxAttempts:l,remainingSeconds:s,resendCooldown:0}});let g=a,h=0;const c=window.setInterval(()=>{const p=g>0?Math.max(0,Math.floor((g-Date.now())/1e3)):0;h=Math.max(0,h-1),t.state.set({identityChallenge:{remainingSeconds:p,resendCooldown:h}})},1e3);let i=null;try{i=t.state.subscribe?.(p=>{const m=p?.identityChallenge?.expires_at;if(typeof m=="string"){const x=new Date(m).getTime();Number.isFinite(x)&&x!==g&&(g=x)}const w=p?.identityChallenge?.resendCooldown;typeof w=="number"&&w>h&&(h=w)})??null}catch{}const u=r.createDeferred();try{await t.dispatch({handler:"openModal",target:"identity-challenge-modal"})}catch(p){return un.error("openModal 실패 — 풀페이지로 폴백:",p),window.clearInterval(c),i?.(),r.redirectExternally({...e,render_hint:"external_redirect",redirect_url:`/identity/challenge?challenge_id=${encodeURIComponent(o.id)}&return=${encodeURIComponent(window.location.href)}`})}const f=await u;return window.clearInterval(c),i?.(),f}function _p(){const e=window.G7Core?.identity;if(!e?.setLauncher){un.warn("G7Core.identity 가 아직 초기화되지 않아 launcher 등록을 건너뜁니다. 코어 부트스트랩 순서를 확인하세요.");return}e.setLauncher(Sp),un.log("IDV launcher registered (sirsoft-basic)")}function Ep(e){const t=e.icons;return Array.isArray(t)?t.filter(r=>!!r&&typeof r=="object"&&typeof r.value=="string"):[]}function Tp(e,t){const r=e.label;return typeof r=="string"?r.startsWith("$t:")?t(r.slice(3)):r:e.value}function Np(e,t,r){if(r==="")return!0;const n=r.toLowerCase();return e.value.toLowerCase().includes(n)||t.toLowerCase().includes(n)?!0:(e.keywords??[]).some(o=>o.toLowerCase().includes(n))}function Ap({entry:e}){const t=e.preview;return t?.html?d.jsx("span",{className:"g7le-icon-preview",dangerouslySetInnerHTML:{__html:t.html},style:$a}):t?.className?d.jsx("span",{className:`g7le-icon-preview ${t.className}`,style:$a}):d.jsx("i",{className:`fas fa-${e.value}`,style:$a,"aria-hidden":"true"})}function Mp({control:e,value:t,onChange:r,t:n}){const o=Ep(e),a=t==null?"":String(t),s=typeof e.iconColumns=="number"?e.iconColumns:6,l=e.iconSearchPlaceholder,g=typeof l=="string"&&l.startsWith("$t:")?n(l.slice(3)):n("layout_editor.icon_picker.search_placeholder"),[h,c]=k.useState("");if(o.length===0)return d.jsx("div",{className:"g7le-widget g7le-widget--icon-picker","data-testid":"g7le-widget-icon-picker",style:yc,children:d.jsx("input",{type:"text",className:"g7le-widget g7le-widget--icon-free","data-testid":"g7le-widget-icon-picker-free",value:a,placeholder:n("layout_editor.icon_picker.free_input_hint"),onChange:f=>r(f.target.value===""?void 0:f.target.value),style:vc})});const i=f=>Tp(f,n),u=o.filter(f=>Np(f,i(f),h));return d.jsxs("div",{className:"g7le-widget g7le-widget--icon-picker","data-testid":"g7le-widget-icon-picker",style:yc,children:[d.jsx("input",{type:"text",className:"g7le-widget g7le-widget--icon-search","data-testid":"g7le-widget-icon-picker-search",value:h,placeholder:g,onChange:f=>c(f.target.value),style:vc}),d.jsxs("div",{className:"g7le-icon-grid","data-testid":"g7le-widget-icon-picker-grid",style:{...Op,gridTemplateColumns:`repeat(${s}, minmax(0, 1fr))`},children:[d.jsx("button",{type:"button","data-testid":"g7le-icon-cell-none",title:n("layout_editor.icon_picker.none"),onClick:()=>r(void 0),"aria-pressed":a==="",style:a===""?wc:Ua,children:d.jsx("span",{style:Ip,children:"—"})}),u.map(f=>{const p=f.value===a;return d.jsx("button",{type:"button","data-testid":`g7le-icon-cell-${f.value}`,title:i(f),"aria-pressed":p,onClick:()=>r(f.value),style:p?wc:Ua,children:d.jsx(Ap,{entry:f})},f.value)})]}),u.length===0&&d.jsx("div",{"data-testid":"g7le-widget-icon-picker-empty",style:Dp,children:n("layout_editor.icon_picker.no_results")})]})}const yc={display:"flex",flexDirection:"column",gap:6,width:"100%"},vc={padding:"5px 8px",fontSize:12,border:"1px solid #cbd5e1",borderRadius:6,width:"100%"},Op={display:"grid",gap:4,maxHeight:220,overflowY:"auto",padding:2},Ua={display:"flex",alignItems:"center",justifyContent:"center",minHeight:34,padding:4,border:"1px solid #e2e8f0",borderRadius:6,background:"#fff",cursor:"pointer"},wc={...Ua,border:"2px solid #2563eb",background:"#eff6ff"},$a={display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:16,lineHeight:1},Ip={fontSize:10,color:"#475569",fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"100%"},Dp={fontSize:11,color:"#94a3b8",fontStyle:"italic",padding:"4px 2px"},xc=window.G7Core?.createLogger?.("Template:sirsoft-basic:EditorWidgets")??{log:(...e)=>console.log("[Template:sirsoft-basic:EditorWidgets]",...e),warn:(...e)=>console.warn("[Template:sirsoft-basic:EditorWidgets]",...e)};function Lp(){if(typeof window>"u")return;const e=window.G7Core?.layoutEditor;if(!e?.registerWidget){xc.warn("G7Core.layoutEditor 미노출 — icon-picker 위젯 등록 보류");return}e.registerWidget("icon-picker",Mp),xc.log("편집기 위젯 'icon-picker' 등록됨(Font Awesome 검색 그리드)")}const za=window.G7Core?.createLogger?.("Template:sirsoft-basic")??{log:(...e)=>console.log("[Template:sirsoft-basic]",...e),warn:(...e)=>console.warn("[Template:sirsoft-basic]",...e),error:(...e)=>console.error("[Template:sirsoft-basic]",...e)};typeof window<"u"&&(window.G7TemplateHandlers=to);function kc(){if(typeof window<"u"){let e=0;const t=50,r=()=>{const n=window.G7Core?.getActionDispatcher?.();n?(Object.entries(to).forEach(([o,a])=>{n.registerHandler(o,a)}),za.log(`${Object.keys(to).length} custom handler(s) registered:`,Object.keys(to)),_p()):(e++,e<=t?(za.warn(`ActionDispatcher not found, retrying... (${e}/${t})`),setTimeout(r,100)):za.error("Failed to register handlers: ActionDispatcher not available after maximum retries"))};document.readyState==="complete"?r():window.addEventListener("load",r)}}return Lp(),kc(),J.A=ao,J.Avatar=$r,J.AvatarUploader=Ta,J.Button=Q,J.Checkbox=Ya,J.Code=Vc,J.ConfirmDialog=Ro,J.Container=S0,J.Div=W,J.ExpandableContent=Zo,J.FileInput=Ga,J.FileUploader=Xn,J.Flex=E0,J.Footer=es,J.Form=so,J.Grid=_0,J.H1=Lc,J.H2=Wa,J.H3=gn,J.H4=Ka,J.Header=Ja,J.Hr=lo,J.HtmlContent=Yo,J.HtmlEditor=Dl,J.Icon=de,J.IconName=Je,J.ImageGallery=Tr,J.Img=Lt,J.Input=xt,J.Label=yr,J.Li=Xt,J.MobileNav=ts,J.Modal=Qo,J.Nav=Ur,J.NotificationCenter=mn,J.Ol=Pc,J.Optgroup=zc,J.Option=$c,J.P=Dt,J.PageLoading=Ri,J.PageSkeleton=Ea,J.PageTransitionBlur=Ca,J.PageTransitionIndicator=ka,J.Pagination=ec,J.PasswordInput=Ba,J.PostReactions=Ol,J.ProductCard=ps,J.ProductImageViewer=An,J.QuantitySelector=Al,J.RichTextEditor=Il,J.SearchBar=rc,J.Section=Xa,J.SectionLayout=T0,J.Select=Va,J.SlotContainer=pn,J.SocialLoginButtons=Wi,J.Span=te,J.Svg=fn,J.TabNavigation=sc,J.Table=Hc,J.Tbody=jc,J.Td=Kc,J.Textarea=no,J.Th=Wc,J.Thead=Gc,J.ThemeToggle=hn,J.ThreeColumnLayout=N0,J.Toast=xa,J.Tr=Bc,J.Ul=oo,J.UserInfo=ac,J.availablePasswordRules=ro,J.compositeComponents=C0,J.defaultPasswordRules=ja,J.initTemplate=kc,J.templateMetadata=A0,Object.defineProperty(J,Symbol.toStringTag,{value:"Module"}),J})({},ReactJSXRuntime,React,ReactDOM); //# sourceMappingURL=components.iife.js.map diff --git a/templates/_bundled/sirsoft-basic/dist/js/components.iife.js.map b/templates/_bundled/sirsoft-basic/dist/js/components.iife.js.map index 4798c8f7..6d4c5d71 100644 --- a/templates/_bundled/sirsoft-basic/dist/js/components.iife.js.map +++ b/templates/_bundled/sirsoft-basic/dist/js/components.iife.js.map @@ -1 +1 @@ -{"version":3,"file":"components.iife.js","sources":["../../src/components/basic/Button.tsx","../../src/components/basic/Div.tsx","../../src/components/basic/Span.tsx","../../src/components/basic/Svg.tsx","../../src/components/basic/Input.tsx","../../src/components/basic/FileInput.tsx","../../src/components/basic/IconTypes.ts","../../src/components/basic/Icon.tsx","../../src/components/basic/PasswordInput.tsx","../../src/components/basic/Textarea.tsx","../../src/components/basic/Label.tsx","../../src/components/basic/P.tsx","../../src/components/basic/Img.tsx","../../src/components/basic/H1.tsx","../../src/components/basic/H2.tsx","../../src/components/basic/H3.tsx","../../src/components/basic/H4.tsx","../../src/components/basic/Ul.tsx","../../src/components/basic/Ol.tsx","../../src/components/basic/Li.tsx","../../src/components/basic/A.tsx","../../src/components/basic/Form.tsx","../../src/components/basic/Select.tsx","../../src/components/basic/Option.tsx","../../src/components/basic/Optgroup.tsx","../../src/components/basic/Checkbox.tsx","../../src/components/basic/Table.tsx","../../src/components/basic/Thead.tsx","../../src/components/basic/Tbody.tsx","../../src/components/basic/Tr.tsx","../../src/components/basic/Th.tsx","../../src/components/basic/Td.tsx","../../src/components/basic/Nav.tsx","../../src/components/basic/Section.tsx","../../src/components/basic/Code.tsx","../../src/components/basic/Hr.tsx","../../src/components/basic/Header.tsx","../../src/components/composite/ThemeToggle.tsx","../../src/components/composite/Avatar.tsx","../../src/components/composite/SlotContainer.tsx","../../src/components/composite/NotificationCenter.tsx","../../src/components/composite/Header.tsx","../../src/components/basic/Footer.tsx","../../src/components/composite/Footer.tsx","../../src/components/composite/MobileNav.tsx","../../node_modules/dompurify/dist/purify.es.mjs","../../src/components/composite/ProductCard.tsx","../../node_modules/yet-another-react-lightbox/dist/types.js","../../node_modules/yet-another-react-lightbox/dist/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/zoom/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/counter/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/slideshow/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/fullscreen/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/thumbnails/index.js","../../src/components/basic/I.tsx","../../src/components/composite/ImageGallery.tsx","../../src/components/composite/ProductImageViewer.tsx","../../src/components/composite/QuantitySelector.tsx","../../src/components/composite/PostReactions.tsx","../../src/components/composite/RichTextEditor.tsx","../../src/components/composite/HtmlContent.tsx","../../src/components/composite/HtmlEditor.tsx","../../src/components/composite/ExpandableContent.tsx","../../src/components/composite/Modal.tsx","../../src/components/composite/ConfirmDialog.tsx","../../src/components/composite/FileUploader/FileUploaderContext.tsx","../../node_modules/browser-image-compression/dist/browser-image-compression.mjs","../../src/components/composite/FileUploader/utils.ts","../../src/components/composite/FileUploader/useFileUploader.ts","../../src/components/composite/FileUploader/FileDropZone.tsx","../../node_modules/@dnd-kit/utilities/dist/utilities.esm.js","../../node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js","../../node_modules/@dnd-kit/core/dist/core.esm.js","../../node_modules/@dnd-kit/sortable/dist/sortable.esm.js","../../src/components/composite/FileUploader/SortableThumbnailItem.tsx","../../src/components/composite/FileUploader/FileList.tsx","../../src/components/composite/FileUploader/FileUploader.tsx","../../src/components/composite/SocialLoginButtons.tsx","../../src/components/composite/Toast.tsx","../../src/components/composite/PageTransitionIndicator.tsx","../../src/components/composite/PageTransitionBlur.tsx","../../src/components/composite/PageSkeleton.tsx","../../src/components/composite/PageLoading.tsx","../../src/components/composite/Pagination.tsx","../../src/components/composite/SearchBar.tsx","../../src/components/composite/AvatarUploader.tsx","../../src/components/composite/UserInfo.tsx","../../src/components/composite/TabNavigation.tsx","../../src/components/composite/index.ts","../../src/components/layout/Container.tsx","../../src/components/layout/Grid.tsx","../../src/components/layout/Flex.tsx","../../src/components/layout/SectionLayout.tsx","../../src/components/layout/ThreeColumnLayout.tsx","../../src/handlers/productOptions.ts","../../src/handlers/cartHandlers.ts","../../src/handlers/cartOptionChange.ts","../../src/handlers/storageHandlers.ts","../../src/handlers/getDisplayPrice.ts","../../src/handlers/formatCurrency.ts","../../src/handlers/loadPreferredCurrency.ts","../../src/handlers/setThemeHandler.ts","../../src/handlers/redirectToLoginWithReturn.ts","../../src/handlers/downloadAttachment.ts","../../src/handlers/index.ts","../../src/handlers/identityLauncher.ts","../../src/layout-editor/IconPickerWidget.tsx","../../src/layout-editor/registerEditorWidgets.ts","../../src/index.ts"],"sourcesContent":["import React, { forwardRef } from 'react';\n\n// G7Core 전역 객체의 스타일 헬퍼 접근\nconst G7Core = () => (window as any).G7Core;\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes {\n variant?: 'primary' | 'secondary' | 'danger' | 'success';\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * 기본 버튼 컴포넌트\n */\nexport const Button = forwardRef(({\n children,\n variant = 'primary',\n size = 'md',\n className = '',\n ...props\n}, ref) => {\n const baseClasses = 'inline-flex items-center justify-center';\n\n // G7Core.style.mergeClasses를 사용하여 충돌하는 Tailwind 클래스 병합\n const mergedClassName = G7Core()?.style?.mergeClasses?.(baseClasses, className)\n ?? `${baseClasses} ${className}`;\n\n return (\n \n {children}\n \n );\n});\n\nButton.displayName = 'Button';\n","import React from 'react';\n\nexport interface DivProps extends React.HTMLAttributes {\n ref?: React.Ref;\n}\n\n/**\n * 기본 div 컴포넌트\n */\nexport const Div = React.forwardRef(({\n children,\n className = '',\n ...props\n}, ref) => {\n return (\n \n {children}\n \n );\n});\n","import React from 'react';\n\nexport interface SpanProps extends React.HTMLAttributes {}\n\n/**\n * 기본 span 컴포넌트\n */\nexport const Span: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface SvgProps extends React.SVGAttributes {}\n\n/**\n * 기본 svg 컴포넌트\n */\nexport const Svg: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React, { useRef, useCallback, useState, useEffect, forwardRef, useImperativeHandle } from 'react';\n\nexport interface InputProps extends React.InputHTMLAttributes {\n label?: string;\n error?: string;\n}\n\n/**\n * 기본 입력 필드 컴포넌트\n *\n * IME(한글 등) 조합 중에는 외부 onChange 이벤트를 발생시키지 않습니다.\n * 내부 로컬 상태를 사용하여 입력을 처리하고, 조합이 완료되면 외부에 알립니다.\n *\n * forwardRef를 사용하여 외부에서 ref로 input 요소에 접근할 수 있습니다.\n * 예: indeterminate 상태 설정 시 ref.current.indeterminate = true\n */\nexport const Input = forwardRef(({\n label,\n error,\n className = '',\n onChange,\n onKeyPress,\n value,\n defaultValue,\n type = 'text',\n checked,\n defaultChecked,\n ...props\n}, ref) => {\n // radio/checkbox 타입인지 확인\n const isCheckableType = type === 'radio' || type === 'checkbox';\n\n // IME 조합 중인지 추적 (text input에만 필요)\n const isComposingRef = useRef(false);\n // input 요소 참조\n const internalRef = useRef(null);\n\n // 외부 ref와 내부 ref를 연결\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement);\n\n // 내부 로컬 값 (IME 조합 중에도 화면에 표시됨) - text input에만 사용\n const [localValue, setLocalValue] = useState(\n (value as string) ?? (defaultValue as string) ?? ''\n );\n\n // 외부 value prop이 변경되면 로컬 값도 동기화 (text input에만 적용)\n useEffect(() => {\n if (!isCheckableType && !isComposingRef.current && value !== undefined) {\n setLocalValue(value as string);\n }\n }, [value, isCheckableType]);\n\n const handleCompositionStart = useCallback(() => {\n isComposingRef.current = true;\n }, []);\n\n const handleCompositionEnd = useCallback(\n (e: React.CompositionEvent) => {\n isComposingRef.current = false;\n // 조합 완료 후 onChange 이벤트 발생\n if (onChange) {\n // 현재 input의 실제 값을 사용\n const currentValue = (e.target as HTMLInputElement).value;\n setLocalValue(currentValue);\n\n // 새로운 ChangeEvent 생성\n const changeEvent = new Event('change', { bubbles: true }) as unknown as React.ChangeEvent;\n Object.defineProperty(changeEvent, 'target', {\n writable: false,\n value: { value: currentValue },\n });\n Object.defineProperty(changeEvent, 'currentTarget', {\n writable: false,\n value: { value: currentValue },\n });\n\n onChange(changeEvent);\n }\n },\n [onChange]\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent) => {\n const newValue = e.target.value;\n // 항상 로컬 값은 업데이트 (화면에 입력이 보이도록)\n setLocalValue(newValue);\n\n // IME 조합 중이면 외부 onChange를 호출하지 않음\n if (isComposingRef.current) {\n return;\n }\n if (onChange) {\n onChange(e);\n }\n },\n [onChange]\n );\n\n const handleKeyPress = useCallback(\n (e: React.KeyboardEvent) => {\n // IME 조합 중이면 keypress 무시 (Enter 등)\n if (isComposingRef.current) {\n return;\n }\n if (onKeyPress) {\n onKeyPress(e);\n }\n },\n [onKeyPress]\n );\n\n // HTML 표준 속성이 아닌 것들을 필터링 (템플릿 엔진 내부 속성)\n const { loadingactions, formdata, ...validProps } = props as any;\n\n // radio/checkbox: checked 속성 사용\n // text input: value 속성 사용 (IME 처리 포함)\n if (isCheckableType) {\n return (\n \n );\n }\n\n // text input: controlled/uncontrolled 구분\n const inputProps = value !== undefined\n ? { value: localValue }\n : { defaultValue };\n\n return (\n \n );\n});\n\n// displayName 설정 (React DevTools에서 컴포넌트 이름 표시)\nInput.displayName = 'Input';","// e2e:allow편집기 passthrough 결함#2 수정(admin 동기, data-editor-*/id 를 시각적 루트 Div 로 라우팅). 단위 회귀는 FileInput.test.tsx passthrough describe.\nimport React, { forwardRef, useRef, useCallback, useState } from 'react';\nimport { Div } from './Div';\nimport { Span } from './Span';\nimport { Svg } from './Svg';\nimport { Input } from './Input';\nimport { Button } from './Button';\n\nexport interface FileInputProps extends Omit, 'type' | 'onChange' | 'onError'> {\n /** 허용되는 파일 확장자 (예: \".zip,.pdf\") */\n accept?: string;\n /** 최대 파일 크기 (MB) */\n maxSize?: number;\n /** 파일 선택 시 콜백 */\n onChange?: (file: File | null) => void;\n /** 에러 발생 시 콜백 */\n onError?: (error: string) => void;\n /** 버튼 텍스트 */\n buttonText?: string;\n /** 빈 상태 텍스트 */\n placeholder?: string;\n}\n\n/**\n * 파일 업로드 입력 컴포넌트\n *\n * ZIP 파일 등의 파일 업로드를 처리하며, 파일 크기 검증을 지원합니다.\n */\nexport const FileInput = forwardRef(({\n accept,\n maxSize,\n onChange,\n onError,\n buttonText = 'Browse',\n placeholder = 'No file selected',\n className = '',\n disabled,\n ...props\n}, ref) => {\n const internalRef = useRef(null);\n const inputRef = (ref as React.RefObject) || internalRef;\n const [fileName, setFileName] = useState('');\n\n // 레이아웃 편집기 식별 표식(data-editor-*) 과 DOM id 는 시각적 루트(
)에 부착해야\n // 캔버스에서 선택/편집이 닿는다. basic 컴포넌트라 DynamicRenderer 가 개별 data-editor-*\n // 키를 props 로 주입하는데, 숨겨진 는 0×0 이라 식별 표식이 닿아도\n // 선택 불가. 식별/표식 키만 분리해 루트로 보낸다.\n const rootEditorProps: Record = {};\n const inputProps: Record = {};\n Object.entries(props as Record).forEach(([key, val]) => {\n if (key.startsWith('data-editor-') || key === 'id' || key === 'onMouseMove' || key === 'onMouseLeave') {\n rootEditorProps[key] = val;\n } else {\n inputProps[key] = val;\n }\n });\n\n const handleClick = useCallback(() => {\n if (!disabled && inputRef.current) {\n inputRef.current.click();\n }\n }, [disabled, inputRef]);\n\n const handleChange = useCallback((e: React.ChangeEvent) => {\n const file = e.target.files?.[0] || null;\n\n if (!file) {\n setFileName('');\n onChange?.(null);\n return;\n }\n\n // 파일 크기 검증 (MB 단위)\n if (maxSize && file.size > maxSize * 1024 * 1024) {\n const errorMsg = `File size exceeds ${maxSize}MB limit`;\n onError?.(errorMsg);\n // 입력 초기화\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n setFileName('');\n return;\n }\n\n setFileName(file.name);\n onChange?.(file);\n }, [maxSize, onChange, onError, inputRef]);\n\n const handleClear = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n setFileName('');\n onChange?.(null);\n }, [onChange, inputRef]);\n\n return (\n
\n \n \n {buttonText}\n \n \n {fileName || placeholder}\n \n {fileName && !disabled && (\n \n \n \n \n \n )}\n
\n );\n});\n\nFileInput.displayName = 'FileInput';\n","/**\n * Font Awesome 아이콘 스타일\n */\nexport type IconStyle = 'solid' | 'regular' | 'light' | 'duotone' | 'brands';\n\n/**\n * Font Awesome 아이콘 크기\n */\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2x' | '3x' | '4x' | '5x';\n\n/**\n * 자주 사용되는 Font Awesome 아이콘 이름\n *\n * @example\n * // 사용 예시\n * \n * \n * \n */\nexport enum IconName {\n // 사용자 및 계정\n User = 'fa-user',\n Users = 'fa-users',\n UserCircle = 'fa-user-circle',\n UserPlus = 'fa-user-plus',\n UserMinus = 'fa-user-minus',\n UserShield = 'fa-user-shield',\n\n // 액션 아이콘\n Search = 'fa-search',\n Edit = 'fa-edit',\n Pencil = 'fa-pencil-alt',\n Trash = 'fa-trash',\n Save = 'fa-save',\n Plus = 'fa-plus',\n Minus = 'fa-minus',\n Check = 'fa-check',\n Times = 'fa-times',\n Download = 'fa-download',\n Upload = 'fa-upload',\n Copy = 'fa-copy',\n ExternalLink = 'fa-external-link-alt',\n\n // 네비게이션\n Home = 'fa-home',\n ChevronLeft = 'fa-chevron-left',\n ChevronRight = 'fa-chevron-right',\n ChevronUp = 'fa-chevron-up',\n ChevronDown = 'fa-chevron-down',\n AngleLeft = 'fa-angle-left',\n AngleRight = 'fa-angle-right',\n AngleUp = 'fa-angle-up',\n AngleDown = 'fa-angle-down',\n ArrowUp = 'fa-arrow-up',\n ArrowDown = 'fa-arrow-down',\n ArrowLeft = 'fa-arrow-left',\n ArrowRight = 'fa-arrow-right',\n Bars = 'fa-bars',\n EllipsisVertical = 'fa-ellipsis-v',\n EllipsisHorizontal = 'fa-ellipsis-h',\n\n // 상태 아이콘\n CheckCircle = 'fa-check-circle',\n TimesCircle = 'fa-times-circle',\n ExclamationCircle = 'fa-exclamation-circle',\n ExclamationTriangle = 'fa-exclamation-triangle',\n InfoCircle = 'fa-info-circle',\n QuestionCircle = 'fa-question-circle',\n XCircle = 'fa-times-circle',\n\n // 이커머스\n ShoppingCart = 'fa-shopping-cart',\n ShoppingBag = 'fa-shopping-bag',\n CreditCard = 'fa-credit-card',\n Tag = 'fa-tag',\n Tags = 'fa-tags',\n\n // 파일 및 문서\n File = 'fa-file',\n FileAlt = 'fa-file-alt',\n Folder = 'fa-folder',\n FolderOpen = 'fa-folder-open',\n\n // 통신\n Envelope = 'fa-envelope',\n Phone = 'fa-phone',\n Comment = 'fa-comment',\n Comments = 'fa-comments',\n\n // 설정\n Cog = 'fa-cog',\n Cogs = 'fa-cogs',\n Settings = 'fa-cog',\n Wrench = 'fa-wrench',\n Sliders = 'fa-sliders-h',\n\n // 미디어\n Image = 'fa-image',\n Images = 'fa-images',\n Video = 'fa-video',\n Camera = 'fa-camera',\n\n // 소셜\n Heart = 'fa-heart',\n Star = 'fa-star',\n ThumbsUp = 'fa-thumbs-up',\n ThumbsDown = 'fa-thumbs-down',\n Share = 'fa-share',\n\n // 시간\n Clock = 'fa-clock',\n Calendar = 'fa-calendar',\n CalendarAlt = 'fa-calendar-alt',\n\n // 기타\n Lock = 'fa-lock',\n Unlock = 'fa-unlock',\n Eye = 'fa-eye',\n EyeSlash = 'fa-eye-slash',\n Bell = 'fa-bell',\n Flag = 'fa-flag',\n Map = 'fa-map',\n MapMarker = 'fa-map-marker-alt',\n Globe = 'fa-globe',\n Link = 'fa-link',\n Unlink = 'fa-unlink',\n Sun = 'fa-sun',\n Moon = 'fa-moon',\n\n // 차트 및 통계\n ChartBar = 'fa-chart-bar',\n ChartLine = 'fa-chart-line',\n ChartPie = 'fa-chart-pie',\n ChartArea = 'fa-chart-area',\n\n // 스피너 (로딩)\n Spinner = 'fa-spinner',\n CircleNotch = 'fa-circle-notch',\n\n // 배지 아이콘\n CheckBadge = 'fa-badge-check',\n\n // 알림 관련\n BellSlash = 'fa-bell-slash',\n\n // 문서/책 관련\n BookOpen = 'fa-book-open',\n\n // 건물/주소 관련\n Building = 'fa-building',\n\n // 파일 관련\n FileCircleCheck = 'fa-file-circle-check',\n\n // 마법 관련\n WandMagicSparkles = 'fa-wand-magic-sparkles',\n\n // 사용자 관련\n UserXmark = 'fa-user-xmark',\n\n // 확장 시스템 (모듈/플러그인)\n Cube = 'fa-cube',\n Cubes = 'fa-cubes',\n Plug = 'fa-plug',\n PuzzlePiece = 'fa-puzzle-piece',\n\n // 추가 아이콘 (Lucide 호환)\n Fire = 'fa-fire',\n CommentDots = 'fa-comment-dots',\n DollarSign = 'fa-dollar-sign',\n Bars2 = 'fa-bars',\n X = 'fa-times',\n List = 'fa-list',\n ThLarge = 'fa-th-large',\n Inbox = 'fa-inbox',\n Box = 'fa-box',\n PaperPlane = 'fa-paper-plane',\n FileText = 'fa-file-alt',\n Paperclip = 'fa-paperclip',\n Truck = 'fa-truck',\n Sync = 'fa-sync',\n RotateLeft = 'fa-rotate-left',\n MapPin = 'fa-map-marker-alt',\n HelpCircle = 'fa-question-circle',\n}\n\n/**\n * 문자열 아이콘 이름을 IconName enum으로 매핑합니다.\n * JSON 레이아웃에서 문자열로 아이콘 이름을 지정할 때 사용합니다.\n */\nexport const iconNameMap: Record = {\n // 사용자 및 계정\n 'user': IconName.User,\n 'users': IconName.Users,\n 'user-circle': IconName.UserCircle,\n 'user-plus': IconName.UserPlus,\n 'user-minus': IconName.UserMinus,\n 'user-shield': IconName.UserShield,\n\n // 액션 아이콘\n 'search': IconName.Search,\n 'edit': IconName.Edit,\n 'pencil': IconName.Pencil,\n 'trash': IconName.Trash,\n 'save': IconName.Save,\n 'plus': IconName.Plus,\n 'minus': IconName.Minus,\n 'check': IconName.Check,\n 'times': IconName.Times,\n 'download': IconName.Download,\n 'upload': IconName.Upload,\n 'copy': IconName.Copy,\n 'external-link': IconName.ExternalLink,\n\n // 네비게이션\n 'home': IconName.Home,\n 'chevron-left': IconName.ChevronLeft,\n 'chevron-right': IconName.ChevronRight,\n 'chevron-up': IconName.ChevronUp,\n 'chevron-down': IconName.ChevronDown,\n 'angle-left': IconName.AngleLeft,\n 'angle-right': IconName.AngleRight,\n 'angle-up': IconName.AngleUp,\n 'angle-down': IconName.AngleDown,\n 'arrow-up': IconName.ArrowUp,\n 'arrow-down': IconName.ArrowDown,\n 'arrow-left': IconName.ArrowLeft,\n 'arrow-right': IconName.ArrowRight,\n 'bars': IconName.Bars,\n 'ellipsis-vertical': IconName.EllipsisVertical,\n 'ellipsis-v': IconName.EllipsisVertical,\n 'ellipsis-horizontal': IconName.EllipsisHorizontal,\n 'ellipsis-h': IconName.EllipsisHorizontal,\n\n // 상태 아이콘\n 'check-circle': IconName.CheckCircle,\n 'times-circle': IconName.TimesCircle,\n 'x-circle': IconName.XCircle,\n 'exclamation-circle': IconName.ExclamationCircle,\n 'exclamation-triangle': IconName.ExclamationTriangle,\n 'info-circle': IconName.InfoCircle,\n 'question-circle': IconName.QuestionCircle,\n\n // 이커머스\n 'shopping-cart': IconName.ShoppingCart,\n 'shopping-bag': IconName.ShoppingBag,\n 'credit-card': IconName.CreditCard,\n 'tag': IconName.Tag,\n 'tags': IconName.Tags,\n\n // 파일 및 문서\n 'file': IconName.File,\n 'file-alt': IconName.FileAlt,\n 'folder': IconName.Folder,\n 'folder-open': IconName.FolderOpen,\n\n // 통신\n 'envelope': IconName.Envelope,\n 'phone': IconName.Phone,\n 'comment': IconName.Comment,\n 'comments': IconName.Comments,\n\n // 설정\n 'cog': IconName.Cog,\n 'cogs': IconName.Cogs,\n 'settings': IconName.Settings,\n 'wrench': IconName.Wrench,\n 'sliders': IconName.Sliders,\n\n // 미디어\n 'image': IconName.Image,\n 'images': IconName.Images,\n 'video': IconName.Video,\n 'camera': IconName.Camera,\n\n // 소셜\n 'heart': IconName.Heart,\n 'star': IconName.Star,\n 'thumbs-up': IconName.ThumbsUp,\n 'thumbs-down': IconName.ThumbsDown,\n 'share': IconName.Share,\n\n // 시간\n 'clock': IconName.Clock,\n 'calendar': IconName.Calendar,\n 'calendar-alt': IconName.CalendarAlt,\n\n // 기타\n 'lock': IconName.Lock,\n 'unlock': IconName.Unlock,\n 'eye': IconName.Eye,\n 'eye-slash': IconName.EyeSlash,\n 'bell': IconName.Bell,\n 'flag': IconName.Flag,\n 'map': IconName.Map,\n 'map-marker': IconName.MapMarker,\n 'globe': IconName.Globe,\n 'link': IconName.Link,\n 'unlink': IconName.Unlink,\n 'sun': IconName.Sun,\n 'moon': IconName.Moon,\n\n // 차트 및 통계\n 'chart-bar': IconName.ChartBar,\n 'chart-line': IconName.ChartLine,\n 'chart-pie': IconName.ChartPie,\n 'chart-area': IconName.ChartArea,\n\n // 스피너 (로딩)\n 'spinner': IconName.Spinner,\n 'circle-notch': IconName.CircleNotch,\n\n // 배지 아이콘\n 'check-badge': IconName.CheckBadge,\n 'badge-check': IconName.CheckBadge,\n\n // 확장 시스템 (모듈/플러그인)\n 'cube': IconName.Cube,\n 'cubes': IconName.Cubes,\n 'plug': IconName.Plug,\n 'puzzle-piece': IconName.PuzzlePiece,\n\n // Lucide 호환 아이콘 매핑\n 'flame': IconName.Fire,\n 'fire': IconName.Fire,\n 'message-square': IconName.CommentDots,\n 'dollar-sign': IconName.DollarSign,\n 'menu': IconName.Bars,\n 'x': IconName.X,\n 'list': IconName.List,\n 'layout-grid': IconName.ThLarge,\n 'th-large': IconName.ThLarge,\n 'grid': IconName.ThLarge,\n 'inbox': IconName.Inbox,\n 'package': IconName.Box,\n 'box': IconName.Box,\n 'send': IconName.PaperPlane,\n 'paper-plane': IconName.PaperPlane,\n 'file-text': IconName.FileText,\n 'paperclip': IconName.Paperclip,\n 'truck': IconName.Truck,\n 'refresh-cw': IconName.Sync,\n 'sync': IconName.Sync,\n 'undo-2': IconName.RotateLeft,\n 'rotate-left': IconName.RotateLeft,\n 'map-pin': IconName.MapPin,\n 'help-circle': IconName.HelpCircle,\n\n // 추가 Lucide 호환 아이콘 매핑\n 'alert-triangle': IconName.ExclamationTriangle,\n 'bell-off': IconName.BellSlash,\n 'book-open': IconName.BookOpen,\n 'building': IconName.Building,\n 'edit-2': IconName.Edit,\n 'edit-3': IconName.Edit,\n 'file-check': IconName.FileCircleCheck,\n 'mail': IconName.Envelope,\n 'sparkles': IconName.WandMagicSparkles,\n 'trash-2': IconName.Trash,\n 'user-x': IconName.UserXmark,\n};\n","import React from 'react';\nimport { IconName, IconStyle, IconSize, iconNameMap } from './IconTypes';\n\nexport interface IconProps extends Omit, 'style'> {\n /**\n * 아이콘 이름 (Font Awesome 클래스명 또는 IconName enum)\n *\n * @example\n * // 문자열로 직접 지정\n * \n *\n * // enum 사용 (타입 안전)\n * \n */\n name: string | IconName;\n\n /**\n * 아이콘 스타일 (Font Awesome 5/6)\n *\n * - solid: fas (기본값)\n * - regular: far\n * - light: fal\n * - duotone: fad\n * - brands: fab\n */\n iconStyle?: IconStyle;\n\n /**\n * CSS 스타일 객체 (HTML style 속성)\n */\n style?: React.CSSProperties;\n\n /**\n * 아이콘 크기\n *\n * @default 'md'\n */\n size?: IconSize;\n\n /**\n * 색상 (Tailwind 클래스 또는 CSS 색상)\n */\n color?: string;\n\n /**\n * 회전 애니메이션 활성화\n */\n spin?: boolean;\n\n /**\n * 펄스 애니메이션 활성화 (8단계 회전)\n */\n pulse?: boolean;\n\n /**\n * 고정 너비 (아이콘 정렬 시 유용)\n */\n fixedWidth?: boolean;\n\n /**\n * 접근성 레이블 (자동 생성 가능)\n */\n ariaLabel?: string;\n}\n\n/**\n * Font Awesome 아이콘 컴포넌트\n *\n * Font Awesome 5/6 버전과 호환되며 다양한 props를 지원합니다.\n *\n * @example\n * // 기본 사용\n * \n *\n * // enum 사용 (타입 안전)\n * \n *\n * // 스타일 및 크기 지정\n * \n *\n * // 애니메이션\n * \n * \n *\n * // 색상 지정\n * \n *\n * // 접근성\n * \n */\nexport const Icon: React.FC = ({\n name,\n iconStyle = 'solid',\n size,\n color,\n spin = false,\n pulse = false,\n fixedWidth = false,\n ariaLabel,\n className = '',\n style,\n ...props\n}) => {\n // Font Awesome 스타일 클래스 매핑\n const styleClassMap: Record = {\n solid: 'fas',\n regular: 'far',\n light: 'fal',\n duotone: 'fad',\n brands: 'fab',\n };\n\n // 아이콘 이름 처리: iconNameMap을 사용하여 Lucide 스타일 이름을 FontAwesome으로 변환\n const rawName = typeof name === 'string' ? name : String(name);\n const mappedName = iconNameMap[rawName];\n // 매핑된 이름이 있으면 사용, 없으면 원본 사용 후 'fa-' 접두사 제거\n const iconName = mappedName\n ? String(mappedName).replace(/^fa-/, '')\n : rawName.replace(/^fa-/, '');\n\n // 클래스 조합\n const classes = [\n styleClassMap[iconStyle],\n `fa-${iconName}`,\n size && `fa-${size}`,\n spin && 'fa-spin',\n pulse && 'fa-pulse',\n fixedWidth && 'fa-fw',\n color,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // 접근성: ariaLabel이 없으면 name에서 생성\n const accessibilityLabel = ariaLabel || iconName.replace(/-/g, ' ');\n\n return (\n \n );\n};\n","import React, { useState, useCallback, forwardRef, useImperativeHandle, useRef, useEffect, useMemo } from 'react';\nimport { Icon } from './Icon';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as unknown as { G7Core?: { t?: (key: string, params?: Record) => string } })\n .G7Core?.t?.(key, params) ?? key;\n\n/**\n * 비밀번호 검증 규칙 정의\n */\nexport interface PasswordRule {\n /** 규칙 식별자 */\n key: string;\n /** 규칙 설명 (다국어 키) */\n labelKey: string;\n /** 검증 함수 (param은 규칙별 설정값) */\n validate: (value: string, param?: number) => boolean;\n /** 기본 파라미터 값 */\n defaultParam?: number;\n}\n\n/**\n * 사용 가능한 모든 비밀번호 검증 규칙\n *\n * JSON 레이아웃에서 enableRules prop으로 키를 지정하여 선택적으로 활성화\n * 파라미터가 있는 규칙은 \"규칙명:값\" 형식으로 지정 (예: \"minLength:12\")\n */\nexport const availablePasswordRules: Record = {\n minLength: {\n key: 'minLength',\n labelKey: 'auth.password_input.rules.minLength',\n defaultParam: 6,\n validate: (value: string, param = 6) => value.length >= param,\n },\n maxLength: {\n key: 'maxLength',\n labelKey: 'auth.password_input.rules.maxLength',\n defaultParam: 20,\n validate: (value: string, param = 20) => value.length <= param,\n },\n hasUppercase: {\n key: 'hasUppercase',\n labelKey: 'auth.password_input.rules.hasUppercase',\n validate: (value: string) => /[A-Z]/.test(value),\n },\n hasLowercase: {\n key: 'hasLowercase',\n labelKey: 'auth.password_input.rules.hasLowercase',\n validate: (value: string) => /[a-z]/.test(value),\n },\n hasNumber: {\n key: 'hasNumber',\n labelKey: 'auth.password_input.rules.hasNumber',\n validate: (value: string) => /[0-9]/.test(value),\n },\n hasSpecial: {\n key: 'hasSpecial',\n labelKey: 'auth.password_input.rules.hasSpecial',\n validate: (value: string) => /[!@#$%^&*(),.?\":{}|<>]/.test(value),\n },\n noSpaces: {\n key: 'noSpaces',\n labelKey: 'auth.password_input.rules.noSpaces',\n validate: (value: string) => !/\\s/.test(value),\n },\n minTypes: {\n key: 'minTypes',\n labelKey: 'auth.password_input.rules.minTypes',\n defaultParam: 3,\n validate: (value: string, param = 3) => {\n let types = 0;\n if (/[A-Z]/.test(value)) types++;\n if (/[a-z]/.test(value)) types++;\n if (/[0-9]/.test(value)) types++;\n if (/[!@#$%^&*(),.?\":{}|<>]/.test(value)) types++;\n return types >= param;\n },\n },\n};\n\n/**\n * 기본 비밀번호 검증 규칙\n *\n * 백엔드 검증 규칙(RegisterRequest.php)과 동일:\n * - password: required|string|min:6|confirmed\n */\nexport const defaultPasswordRules: PasswordRule[] = [\n availablePasswordRules.minLength,\n];\n\n/**\n * 파싱된 규칙 (규칙 + 파라미터)\n */\ninterface ParsedRule {\n rule: PasswordRule;\n param?: number;\n}\n\n/**\n * enableRules 문자열을 파싱하여 규칙과 파라미터를 추출\n * 예: \"minLength:12\" → { rule: minLengthRule, param: 12 }\n * 예: \"hasUppercase\" → { rule: hasUppercaseRule, param: undefined }\n *\n * @param ruleString 규칙 문자열 (예: \"minLength:12\" 또는 \"hasUppercase\")\n * @returns 파싱된 규칙 또는 null (규칙이 존재하지 않는 경우)\n */\nfunction parseRuleString(ruleString: string): ParsedRule | null {\n const [key, paramStr] = ruleString.split(':');\n const rule = availablePasswordRules[key];\n if (!rule) return null;\n\n const param = paramStr ? parseInt(paramStr, 10) : rule.defaultParam;\n return { rule, param: isNaN(param as number) ? rule.defaultParam : param };\n}\n\n/**\n * PasswordInput에서 사용하지 않는 HTML 속성 목록\n * (그누보드7 템플릿 엔진에서 전달되는 커스텀 속성)\n */\ninterface NonStandardProps {\n loadingactions?: unknown;\n formdata?: unknown;\n}\n\nexport interface PasswordInputProps extends Omit, 'type'> {\n /** 레이블 텍스트 */\n label?: string;\n /** 에러 메시지 */\n error?: string;\n /** 비밀번호 보기/숨기기 버튼 표시 */\n showToggle?: boolean;\n /** 비밀번호 조건 검증 표시 */\n showValidation?: boolean;\n /** 비밀번호 확인 모드 (확인 필드로 사용) */\n isConfirmField?: boolean;\n /** 비밀번호 확인 대상 값 (isConfirmField가 true일 때 필요) */\n confirmTarget?: string;\n /** 비밀번호 확인 일치 여부 콜백 */\n onMatchChange?: (isMatch: boolean) => void;\n /** 비밀번호 유효성 변경 콜백 */\n onValidityChange?: (isValid: boolean, failedRules: string[]) => void;\n /** 커스텀 비밀번호 규칙 (기본 규칙 대체, 코드에서만 사용) */\n rules?: PasswordRule[];\n /**\n * 활성화할 규칙 키 목록 (JSON 레이아웃에서 사용)\n * 사용 가능: minLength, maxLength, hasUppercase, hasLowercase, hasNumber, hasSpecial, noSpaces, minTypes\n * 파라미터 지정: \"규칙명:값\" 형식 (예: \"minLength:12\", \"minTypes:3\")\n * 예: [\"minLength:12\", \"hasUppercase\", \"hasSpecial\"]\n */\n enableRules?: string[];\n /** 표시할 규칙 키 목록 (지정하지 않으면 전체 표시) */\n showRules?: string[];\n /** 입력 필드 wrapper 클래스 */\n wrapperClassName?: string;\n /** 검증 결과 표시 영역 클래스 */\n validationClassName?: string;\n}\n\n/**\n * 비밀번호 입력 컴포넌트\n *\n * 비밀번호 보기/숨기기 토글, 실시간 조건 검증, 비밀번호 확인 기능을 제공합니다.\n *\n * @example\n * // 기본 사용 (보기/숨기기만)\n * \n *\n * @example\n * // 조건 검증 표시\n * console.log(isValid, failed)}\n * />\n *\n * @example\n * // 비밀번호 확인 필드\n * console.log(isMatch)}\n * />\n */\nexport const PasswordInput = forwardRef(\n (\n {\n label,\n error,\n showToggle = true,\n showValidation = false,\n isConfirmField = false,\n confirmTarget,\n onMatchChange,\n onValidityChange,\n rules,\n enableRules,\n showRules,\n wrapperClassName = '',\n validationClassName = '',\n className = '',\n onChange,\n value,\n defaultValue,\n disabled,\n ...props\n },\n ref\n ) => {\n const internalRef = useRef(null);\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement);\n\n // 비밀번호 보기/숨기기 상태\n const [showPassword, setShowPassword] = useState(false);\n\n // CapsLock 활성화 상태\n const [capsLockOn, setCapsLockOn] = useState(false);\n\n // 내부 값 상태 (controlled/uncontrolled 지원)\n const [internalValue, setInternalValue] = useState(\n (value as string) ?? (defaultValue as string) ?? ''\n );\n\n // 외부 value가 변경되면 동기화\n useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value as string);\n }\n }, [value]);\n\n // 사용할 규칙 결정: rules > enableRules > defaultPasswordRules\n const parsedRules = useMemo((): ParsedRule[] => {\n // 1. rules prop이 있으면 그대로 사용 (코드에서 직접 전달, 기본 파라미터 적용)\n if (rules && rules.length > 0) {\n return rules.map((rule) => ({ rule, param: rule.defaultParam }));\n }\n\n // 2. enableRules가 있으면 파싱하여 규칙과 파라미터 추출\n if (enableRules && enableRules.length > 0) {\n return enableRules\n .map((ruleStr) => parseRuleString(ruleStr))\n .filter((parsed): parsed is ParsedRule => parsed !== null);\n }\n\n // 3. 기본 규칙 사용\n return defaultPasswordRules.map((rule) => ({ rule, param: rule.defaultParam }));\n }, [rules, enableRules]);\n\n // 표시할 규칙 필터링\n const displayRules = useMemo(() => {\n if (!showRules || showRules.length === 0) return parsedRules;\n return parsedRules.filter((parsed) => showRules.includes(parsed.rule.key));\n }, [parsedRules, showRules]);\n\n // 비밀번호 규칙 검증 결과\n const validationResults = useMemo(() => {\n if (!showValidation || isConfirmField) return {};\n return displayRules.reduce((acc, { rule, param }) => {\n acc[rule.key] = rule.validate(internalValue, param);\n return acc;\n }, {} as Record);\n }, [internalValue, displayRules, showValidation, isConfirmField]);\n\n // 비밀번호 확인 일치 여부\n const isMatch = useMemo(() => {\n if (!isConfirmField || confirmTarget === undefined) return true;\n return internalValue === confirmTarget && internalValue.length > 0;\n }, [isConfirmField, internalValue, confirmTarget]);\n\n // 전체 유효성 (모든 규칙 통과)\n const isAllValid = useMemo(() => {\n if (!showValidation) return true;\n return Object.values(validationResults).every((v) => v);\n }, [validationResults, showValidation]);\n\n // 유효성 변경 콜백\n useEffect(() => {\n if (onValidityChange && showValidation && !isConfirmField) {\n const failedRules = Object.entries(validationResults)\n .filter(([, passed]) => !passed)\n .map(([key]) => key);\n onValidityChange(isAllValid, failedRules);\n }\n }, [isAllValid, validationResults, onValidityChange, showValidation, isConfirmField]);\n\n // 비밀번호 확인 일치 콜백\n useEffect(() => {\n if (onMatchChange && isConfirmField) {\n onMatchChange(isMatch);\n }\n }, [isMatch, onMatchChange, isConfirmField]);\n\n // 비밀번호 보기/숨기기 토글\n const handleToggle = useCallback(() => {\n setShowPassword((prev) => !prev);\n }, []);\n\n // 입력값 변경 처리\n const handleChange = useCallback(\n (e: React.ChangeEvent) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n if (onChange) {\n onChange(e);\n }\n },\n [onChange]\n );\n\n // CapsLock 상태 감지\n const handleKeyEvent = useCallback(\n (e: React.KeyboardEvent) => {\n setCapsLockOn(e.getModifierState('CapsLock'));\n },\n []\n );\n\n // HTML 표준 속성이 아닌 것들을 필터링 (타입 안전성 개선)\n const { loadingactions, formdata, ...validProps } = props as typeof props & NonStandardProps;\n\n // 레이아웃 편집기 표식/핸들러(data-editor-*, onMouseMove/Leave 등)는 시각적\n // 루트(wrapper div)에 부착해야 캔버스 선택/드래그가 컴포넌트 전체를 잡는다.\n // 내부 input 에만 spread 하면 선택 박스가 input 으로 한정되고 error/검증/토글이\n // 선택 영역 밖이 된다.\n const editorRootProps: Record = {};\n const inputRestProps: Record = {};\n for (const [k, v] of Object.entries(validProps as Record)) {\n if (k.startsWith('data-editor-') || k === 'onMouseMove' || k === 'onMouseLeave') {\n editorRootProps[k] = v;\n } else {\n inputRestProps[k] = v;\n }\n }\n\n return (\n
\n {/* 입력 필드 wrapper */}\n
\n \n\n {/* 비밀번호 보기/숨기기 버튼 */}\n {showToggle && (\n \n \n \n )}\n
\n\n {/* CapsLock 경고 */}\n {capsLockOn && !showPassword && (\n
\n \n {t('auth.password_input.caps_lock_on')}\n
\n )}\n\n {/* 비밀번호 확인 일치/불일치 표시 */}\n {isConfirmField && confirmTarget !== undefined && internalValue.length > 0 && (\n \n \n {isMatch ? t('auth.password_input.match') : t('auth.password_input.mismatch')}\n
\n )}\n\n {/* 비밀번호 조건 검증 표시 */}\n {showValidation && !isConfirmField && internalValue.length > 0 && (\n
\n {displayRules.map(({ rule, param }) => {\n const passed = validationResults[rule.key];\n // 파라미터가 있는 규칙은 라벨에 파라미터 값 전달\n const labelParams = param !== undefined ? { count: param } : undefined;\n return (\n \n \n {t(rule.labelKey, labelParams)}\n
\n );\n })}\n
\n )}\n\n {/* 에러 메시지 */}\n {error && (\n

{error}

\n )}\n \n );\n }\n);\n\nPasswordInput.displayName = 'PasswordInput';\n","import React, { useRef, useCallback, useState, useEffect } from 'react';\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes {\n label?: string;\n error?: string;\n}\n\n/**\n * 기본 텍스트 영역 컴포넌트\n *\n * IME(한글 등) 조합 중에는 외부 onChange 이벤트를 발생시키지 않습니다.\n * 내부 로컬 상태를 사용하여 입력을 처리하고, 조합이 완료되면 외부에 알립니다.\n */\nexport const Textarea: React.FC = ({\n label,\n error,\n className = '',\n onChange,\n value,\n defaultValue,\n ...props\n}) => {\n // IME 조합 중인지 추적\n const isComposingRef = useRef(false);\n // textarea 요소 참조\n const textareaRef = useRef(null);\n\n // 내부 로컬 값 (IME 조합 중에도 화면에 표시됨)\n const [localValue, setLocalValue] = useState(\n (value as string) ?? (defaultValue as string) ?? ''\n );\n\n // 외부 value prop이 변경되면 로컬 값도 동기화\n useEffect(() => {\n if (!isComposingRef.current && value !== undefined) {\n setLocalValue(value as string);\n }\n }, [value]);\n\n const handleCompositionStart = useCallback(() => {\n isComposingRef.current = true;\n }, []);\n\n const handleCompositionEnd = useCallback(\n (e: React.CompositionEvent) => {\n isComposingRef.current = false;\n // 조합 완료 후 onChange 이벤트 발생\n if (onChange) {\n // 현재 textarea의 실제 값을 사용\n const currentValue = (e.target as HTMLTextAreaElement).value;\n setLocalValue(currentValue);\n\n // 새로운 ChangeEvent 생성\n const changeEvent = new Event('change', { bubbles: true }) as unknown as React.ChangeEvent;\n Object.defineProperty(changeEvent, 'target', {\n writable: false,\n value: { value: currentValue },\n });\n Object.defineProperty(changeEvent, 'currentTarget', {\n writable: false,\n value: { value: currentValue },\n });\n\n onChange(changeEvent);\n }\n },\n [onChange]\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent) => {\n const newValue = e.target.value;\n // 항상 로컬 값은 업데이트 (화면에 입력이 보이도록)\n setLocalValue(newValue);\n\n // IME 조합 중이면 외부 onChange를 호출하지 않음\n if (isComposingRef.current) {\n return;\n }\n if (onChange) {\n onChange(e);\n }\n },\n [onChange]\n );\n\n // HTML 표준 속성이 아닌 것들을 필터링 (템플릿 엔진 내부 속성)\n const { loadingactions, formdata, ...validProps } = props as any;\n\n // controlled/uncontrolled 구분\n const textareaValueProps = value !== undefined\n ? { value: localValue }\n : { defaultValue };\n\n return (\n \n );\n};\n","import React from 'react';\n\nexport interface LabelProps extends React.LabelHTMLAttributes {}\n\n/**\n * 기본 레이블 컴포넌트\n */\nexport const Label: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface PProps extends React.HTMLAttributes {}\n\n/**\n * 기본 p(단락) 컴포넌트\n */\nexport const P: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n

\n );\n};\n","import React from 'react';\n\nexport interface ImgProps extends React.ImgHTMLAttributes {}\n\n/**\n * 기본 이미지 컴포넌트\n */\nexport const Img: React.FC = ({\n className = '',\n alt = '',\n ...props\n}) => {\n return (\n \n );\n};\n","import React from 'react';\n\nexport interface H1Props extends React.HTMLAttributes {}\n\n/**\n * 기본 h1 제목 컴포넌트\n */\nexport const H1: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface H2Props extends React.HTMLAttributes {}\n\n/**\n * 기본 h2 제목 컴포넌트\n */\nexport const H2: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface H3Props extends React.HTMLAttributes {}\n\n/**\n * 기본 h3 제목 컴포넌트\n */\nexport const H3: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface H4Props extends React.HTMLAttributes {}\n\n/**\n * 기본 h4 제목 컴포넌트\n */\nexport const H4: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface UlProps extends React.HTMLAttributes {}\n\n/**\n * 기본 ul(순서없는 목록) 컴포넌트\n */\nexport const Ul: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface OlProps extends React.HTMLAttributes {}\n\n/**\n * 기본 ol(순서있는 목록) 컴포넌트\n */\nexport const Ol: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface LiProps extends React.LiHTMLAttributes {}\n\n/**\n * 기본 li(목록 항목) 컴포넌트\n */\nexport const Li: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface AProps extends React.AnchorHTMLAttributes {}\n\n/**\n * 기본 a(링크) 컴포넌트\n */\nexport const A: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface FormProps extends React.FormHTMLAttributes {}\n\n/**\n * 기본 form 컴포넌트\n */\nexport const Form: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","// e2e:allow커스텀 드롭다운 루트 props spread 타입 안전 캐스팅(admin 동기). 단위 회귀는 Select.test.tsx.\nimport React, { useMemo, useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Div } from './Div';\nimport { Button } from './Button';\nimport { Span } from './Span';\nimport { Svg } from './Svg';\nimport { Input } from './Input';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:Select')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:Select]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:Select]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:Select]', ...args),\n};\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps extends Omit, 'onChange'> {\n label?: string;\n error?: string;\n options?: SelectOption[] | string[];\n onChange?: (e: React.ChangeEvent | { target: { value: string | number } }) => void;\n /** 드롭다운 내 검색 input 활성화 (engine-v1.40.0+) */\n searchable?: boolean;\n /** 검색 input placeholder */\n searchPlaceholder?: string;\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용). Select 는 커스텀 드롭다운 루트에\n * 개별 data-editor-* 키를 spread 해야 선택/편집이 닿는다(커스텀 루트\n * passthrough). basic 컴포넌트라 `{...props}` 로 DOM 표준 속성(id 등)도 함께 흐른다.\n */\n editorAttrs?: Record;\n}\n\n/**\n * 로케일 코드를 사람이 읽을 수 있는 이름으로 변환\n */\nfunction getLocaleName(locale: string): string {\n const fromAppConfig = (window as any).G7Core?.state?.get?.('_global.appConfig.localeNames')?.[locale];\n if (fromAppConfig) {\n return fromAppConfig;\n }\n const fallback: Record = {\n ko: '한국어',\n en: 'English',\n ja: '日本語',\n zh: '中文',\n es: 'Español',\n fr: 'Français',\n de: 'Deutsch',\n };\n return fallback[locale] || locale;\n}\n\n/**\n * 커스텀 Select 컴포넌트\n *\n * options prop을 사용하여 드롭다운 메뉴를 생성합니다.\n * 둥근 모서리, 그림자, 체크마크가 있는 커스텀 스타일을 지원합니다.\n */\nexport const Select: React.FC = ({\n children,\n label,\n error,\n options,\n className = '',\n value,\n onChange,\n disabled,\n searchable = false,\n searchPlaceholder,\n editorAttrs,\n ...props\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const [dropdownPos, setDropdownPos] = useState<{ top?: number; bottom?: number; left: number; width: number } | null>(null);\n const containerRef = useRef(null);\n const buttonRef = useRef(null);\n const searchInputRef = useRef(null);\n const dropdownRef = useRef(null);\n\n // options를 SelectOption[] 형식으로 정규화\n const normalizedOptions = useMemo((): SelectOption[] | null => {\n if (!options) return null;\n\n // 배열이 아닌 경우 (바인딩 에러 또는 잘못된 prop)\n if (!Array.isArray(options)) {\n logger.warn('options prop is not an array:', options);\n return null;\n }\n\n // 빈 배열인 경우\n if (options.length === 0) return [];\n\n // string[] 배열인 경우\n if (typeof options[0] === 'string') {\n return (options as string[]).map((locale): SelectOption => ({\n value: locale,\n label: getLocaleName(locale),\n }));\n }\n\n // SelectOption[] 배열인 경우 (기존 동작)\n return options as SelectOption[];\n }, [options]);\n\n // 현재 선택된 옵션의 라벨 가져오기\n const selectedLabel = useMemo(() => {\n if (!normalizedOptions) return '';\n const selected = normalizedOptions.find(opt => String(opt.value) === String(value));\n return selected?.label || '';\n }, [normalizedOptions, value]);\n\n // searchable 모드에서 검색어로 필터링된 옵션\n const visibleOptions = useMemo((): SelectOption[] | null => {\n if (!normalizedOptions) return null;\n if (!searchable || searchTerm.trim() === '') return normalizedOptions;\n const needle = searchTerm.trim().toLowerCase();\n return normalizedOptions.filter(opt =>\n opt.label.toLowerCase().includes(needle) ||\n String(opt.value).toLowerCase().includes(needle)\n );\n }, [normalizedOptions, searchable, searchTerm]);\n\n // 드롭다운 열릴 때 검색어 초기화 및 input 포커스\n useEffect(() => {\n if (isOpen && searchable) {\n setSearchTerm('');\n // 다음 tick에 포커스 (DOM 렌더 이후)\n const timer = setTimeout(() => searchInputRef.current?.focus(), 0);\n return () => clearTimeout(timer);\n }\n if (!isOpen) {\n setSearchTerm('');\n }\n }, [isOpen, searchable]);\n\n /**\n * 드롭다운 위치 계산 (버튼 기준 fixed positioning)\n * Modal 등 overflow:hidden 컨테이너 내부에서도 정상 표시\n */\n const updateDropdownPos = useCallback(() => {\n if (!buttonRef.current) return;\n const rect = buttonRef.current.getBoundingClientRect();\n const spaceBelow = window.innerHeight - rect.bottom;\n const dropdownMaxH = 280; // max-h-60(240px) + search(~40px)\n // 아래 공간 부족 시 위로 열기\n const openUpward = spaceBelow < dropdownMaxH && rect.top > spaceBelow;\n if (openUpward) {\n setDropdownPos({\n bottom: window.innerHeight - rect.top + 4,\n left: rect.left,\n width: rect.width,\n });\n } else {\n setDropdownPos({\n top: rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n });\n }\n }, []);\n\n // 드롭다운 열릴 때 위치 계산 + 스크롤/리사이즈 추적\n useEffect(() => {\n if (!isOpen) {\n setDropdownPos(null);\n return;\n }\n updateDropdownPos();\n window.addEventListener('scroll', updateDropdownPos, true);\n window.addEventListener('resize', updateDropdownPos);\n return () => {\n window.removeEventListener('scroll', updateDropdownPos, true);\n window.removeEventListener('resize', updateDropdownPos);\n };\n }, [isOpen, updateDropdownPos]);\n\n // 외부 클릭 시 드롭다운 닫기 (Portal 영역 포함)\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n if (\n containerRef.current && !containerRef.current.contains(target) &&\n (!dropdownRef.current || !dropdownRef.current.contains(target))\n ) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n // ESC 키로 드롭다운 닫기\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false);\n buttonRef.current?.focus();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen]);\n\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const handleSelect = (optionValue: string | number) => {\n if (onChange) {\n // ActionDispatcher가 이벤트를 인식할 수 있도록 preventDefault 메서드 포함\n const syntheticEvent = {\n target: { value: optionValue },\n preventDefault: () => {},\n stopPropagation: () => {},\n type: 'change',\n };\n onChange(syntheticEvent as any);\n }\n setIsOpen(false);\n buttonRef.current?.focus();\n };\n\n // options가 없으면 기본 select 사용 (children 지원)\n if (!normalizedOptions) {\n return (\n }\n disabled={disabled}\n {...editorAttrs}\n {...props}\n >\n {children}\n \n );\n }\n\n // 기본 스타일 (className이 없을 때 적용)\n const hasCustomStyle = className && className.includes('bg-');\n // 커스텀 스타일에 텍스트 색상이 없으면 기본 텍스트 색상 보충\n const hasTextColor = className && /text-(gray|red|blue|green|yellow|white|black|indigo|purple|pink|orange|amber|emerald|teal|cyan|slate)-\\d+|text-white|text-black/.test(className);\n const baseButtonClass = hasCustomStyle\n ? `${className}${hasTextColor ? '' : ' text-gray-700 dark:text-gray-200'}`\n : `w-full px-4 py-2.5 bg-gray-100 dark:bg-gray-700 border-0 rounded-xl text-gray-700 dark:text-gray-200 font-medium focus:ring-2 focus:ring-blue-500 focus:outline-none ${className}`;\n\n // props 는 SelectHTMLAttributes 기반이라 Div(HTMLDivElement) 에 직접 spread 시 타입 불일치.\n // 런타임 동작(편집기 data-editor-* / id 등 DOM 표준 속성 passthrough)은 동일하므로\n // DOM-safe 레코드로 캐스팅해 커스텀 드롭다운 루트에 전달한다.\n const rootDomProps = { ...editorAttrs, ...props } as Record;\n\n return (\n
\n \n {selectedLabel || '\\u00A0'}\n \n \n \n \n\n {isOpen && dropdownPos && createPortal(\n \n {searchable && (\n
\n ) => setSearchTerm(e.target.value)}\n placeholder={searchPlaceholder ?? 'Search...'}\n className=\"w-full px-3 py-2 bg-gray-100 dark:bg-gray-700 border-0 rounded-lg text-sm text-gray-700 dark:text-gray-200 placeholder-gray-400 dark:placeholder-gray-500 focus:ring-2 focus:ring-blue-500 focus:outline-none\"\n role=\"searchbox\"\n aria-label={searchPlaceholder ?? 'Search'}\n />\n
\n )}\n
\n {visibleOptions && visibleOptions.length === 0 && (\n
\n {searchTerm ? 'No results' : ''}\n
\n )}\n {(visibleOptions ?? []).map((option) => {\n const isSelected = String(option.value) === String(value);\n return (\n !option.disabled && handleSelect(option.value)}\n disabled={option.disabled}\n className={`w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors ${\n isSelected ? 'text-blue-600 dark:text-blue-400 font-medium' : 'text-gray-700 dark:text-gray-200'\n } ${option.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n role=\"option\"\n aria-selected={isSelected}\n >\n {option.label}\n {isSelected && (\n \n \n \n )}\n \n );\n })}\n
\n
,\n document.body\n )}\n \n );\n};\n","import React from 'react';\n\nexport interface OptionProps extends React.OptionHTMLAttributes {}\n\n/**\n * 기본 option 컴포넌트 (Select 내부에서 사용)\n */\nexport const Option: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface OptgroupProps extends React.OptgroupHTMLAttributes {}\n\n/**\n * 기본 optgroup 컴포넌트 (Select 내부에서 옵션 그룹화)\n */\nexport const Optgroup: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React, { forwardRef } from 'react';\n\nexport interface CheckboxProps extends React.InputHTMLAttributes {\n label?: string;\n}\n\n/**\n * 기본 체크박스 컴포넌트\n *\n * forwardRef를 사용하여 ref 전달을 지원합니다.\n * indeterminate 상태 등을 설정할 때 ref가 필요합니다.\n */\nexport const Checkbox = forwardRef(\n ({ label, className = '', ...props }, ref) => {\n return (\n \n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n","import React from 'react';\n\nexport interface TableProps extends React.TableHTMLAttributes {}\n\n/**\n * 기본 table 컴포넌트\n */\nexport const Table: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface TheadProps extends React.HTMLAttributes {}\n\n/**\n * 기본 thead 컴포넌트\n */\nexport const Thead: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface TbodyProps extends React.HTMLAttributes {}\n\n/**\n * 기본 tbody 컴포넌트\n */\nexport const Tbody: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface TrProps extends React.HTMLAttributes {}\n\n/**\n * 기본 tr(테이블 행) 컴포넌트\n */\nexport const Tr: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface ThProps extends React.ThHTMLAttributes {}\n\n/**\n * 기본 th(테이블 헤더 셀) 컴포넌트\n */\nexport const Th: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface TdProps extends React.TdHTMLAttributes {}\n\n/**\n * 기본 td(테이블 데이터 셀) 컴포넌트\n */\nexport const Td: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React, { forwardRef } from 'react';\n\nexport interface NavProps extends React.HTMLAttributes {}\n\n/**\n * 기본 nav 컴포넌트\n */\nexport const Nav = forwardRef(\n ({ children, className = '', ...props }, ref) => {\n return (\n \n {children}\n \n );\n }\n);\n\nNav.displayName = 'Nav';\n","import React from 'react';\n\nexport interface SectionProps extends React.HTMLAttributes {}\n\n/**\n * 기본 section 컴포넌트\n */\nexport const Section: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface CodeProps extends React.HTMLAttributes {}\n\n/**\n * 기본 code 컴포넌트\n *\n * 인라인 코드 또는 코드 스니펫을 표시하기 위한 기본 컴포넌트입니다.\n * HTML 태그를 래핑합니다.\n */\nexport const Code: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface HrProps extends React.HTMLAttributes {\n ref?: React.Ref;\n}\n\n/**\n * 기본 hr (수평선) 컴포넌트\n */\nexport const Hr = React.forwardRef(({\n className = '',\n ...props\n}, ref) => {\n return (\n \n );\n});\n","import React from 'react';\n\nexport interface HeaderProps extends React.HTMLAttributes {\n ref?: React.Ref;\n}\n\n/**\n * 기본 header 컴포넌트\n */\nexport const Header = React.forwardRef(({\n children,\n className = '',\n ...props\n}, ref) => {\n return (\n \n {children}\n \n );\n});\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 테마 모드 타입\n */\nexport type ThemeMode = 'auto' | 'light' | 'dark';\n\n/**\n * ThemeToggle Props\n */\nexport interface ThemeToggleProps {\n /** 테마 변경 콜백 */\n onThemeChange?: (theme: ThemeMode) => void;\n /** 추가 CSS 클래스 */\n className?: string;\n /** 자동 모드 텍스트 (다국어 키 사용 권장) */\n autoText?: string;\n /** 라이트 모드 텍스트 (다국어 키 사용 권장) */\n lightText?: string;\n /** 다크 모드 텍스트 (다국어 키 사용 권장) */\n darkText?: string;\n /** DOM id 속성 (레이아웃 편집기 코어 일괄 ID) */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * ThemeToggle 컴포넌트\n *\n * 다크/라이트 모드 전환 버튼\n * - 3가지 모드: 자동(시스템 설정 따름), 라이트, 다크\n * - localStorage에 'g7_color_scheme' 키로 저장 (admin 템플릿과 동일)\n * - 시스템 prefers-color-scheme 감지 지원\n *\n * @example\n * ```json\n * {\n * \"type\": \"composite\",\n * \"name\": \"ThemeToggle\",\n * \"props\": {\n * \"autoText\": \"$t:common.theme.auto\",\n * \"lightText\": \"$t:common.theme.light\",\n * \"darkText\": \"$t:common.theme.dark\"\n * }\n * }\n * ```\n */\n\n/**\n * 실제 적용될 테마 결정 (auto인 경우 시스템 설정 반영)\n */\nconst getEffectiveTheme = (mode: ThemeMode): 'light' | 'dark' => {\n if (mode === 'auto') {\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n }\n return mode;\n};\n\n/**\n * 테마 적용\n */\nconst applyTheme = (mode: ThemeMode) => {\n const effectiveTheme = getEffectiveTheme(mode);\n document.documentElement.setAttribute('data-theme', effectiveTheme);\n\n // dark 클래스 토글 (Tailwind CSS dark: 모드 지원)\n if (effectiveTheme === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n};\n\n/**\n * 초기 테마 로드 및 적용 (즉시 실행)\n * admin 템플릿과 동일한 localStorage 키 사용: 'g7_color_scheme'\n */\nconst getInitialTheme = (): ThemeMode => {\n const savedTheme = localStorage.getItem('g7_color_scheme') as ThemeMode | null;\n if (savedTheme && ['auto', 'light', 'dark'].includes(savedTheme)) {\n return savedTheme;\n }\n return 'auto';\n};\n\nexport const ThemeToggle: React.FC = ({\n onThemeChange,\n className = '',\n autoText = 'System',\n lightText = 'Light',\n darkText = 'Dark',\n id,\n editorAttrs,\n}) => {\n // 초기 테마를 즉시 로드하고 적용\n const initialTheme = getInitialTheme();\n const [currentMode, setCurrentMode] = useState(initialTheme);\n const [showMenu, setShowMenu] = useState(false);\n const menuRef = useRef(null);\n\n /**\n * 컴포넌트 마운트 시 즉시 테마 적용\n */\n useEffect(() => {\n applyTheme(currentMode);\n }, []);\n\n /**\n * 시스템 테마 변경 감지\n */\n useEffect(() => {\n if (currentMode !== 'auto') return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => {\n applyTheme('auto');\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [currentMode]);\n\n /**\n * 외부 클릭 감지\n */\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setShowMenu(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n /**\n * 테마 변경 핸들러\n * admin 템플릿과 동일한 localStorage 키 사용: 'g7_color_scheme'\n */\n const handleThemeChange = (mode: ThemeMode) => {\n setCurrentMode(mode);\n localStorage.setItem('g7_color_scheme', mode);\n applyTheme(mode);\n setShowMenu(false);\n onThemeChange?.(mode);\n };\n\n /**\n * 현재 표시할 아이콘 결정\n */\n const getCurrentIcon = (): IconName => {\n const effectiveTheme = getEffectiveTheme(currentMode);\n return effectiveTheme === 'dark' ? IconName.Moon : IconName.Sun;\n };\n\n return (\n
\n {/* 테마 토글 버튼 */}\n setShowMenu(!showMenu)}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg transition-colors text-gray-600 dark:text-gray-400\"\n aria-label=\"Toggle theme\"\n >\n \n \n\n {/* 테마 선택 드롭다운 */}\n {showMenu && (\n
\n
\n {/* 자동 모드 */}\n handleThemeChange('auto')}\n className={`\n w-full px-4 py-2 text-left hover:bg-gray-50 dark:hover:bg-gray-700 flex items-center gap-3 transition-colors\n ${currentMode === 'auto' ? 'bg-gray-50 dark:bg-gray-700' : ''}\n `}\n >\n \n {autoText}\n {currentMode === 'auto' && (\n \n )}\n \n\n {/* 라이트 모드 */}\n handleThemeChange('light')}\n className={`\n w-full px-4 py-2 text-left hover:bg-gray-50 dark:hover:bg-gray-700 flex items-center gap-3 transition-colors\n ${currentMode === 'light' ? 'bg-gray-50 dark:bg-gray-700' : ''}\n `}\n >\n \n {lightText}\n {currentMode === 'light' && (\n \n )}\n \n\n {/* 다크 모드 */}\n handleThemeChange('dark')}\n className={`\n w-full px-4 py-2 text-left hover:bg-gray-50 dark:hover:bg-gray-700 flex items-center gap-3 transition-colors\n ${currentMode === 'dark' ? 'bg-gray-50 dark:bg-gray-700' : ''}\n `}\n >\n \n {darkText}\n {currentMode === 'dark' && (\n \n )}\n \n
\n
\n )}\n
\n );\n};\n\nexport default ThemeToggle;\n","import React, { useMemo } from 'react';\nimport { Div } from '../basic/Div';\nimport { Img } from '../basic/Img';\nimport { Icon } from '../basic/Icon';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 아바타 크기 타입\n */\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl';\n\n/**\n * 사이즈별 Tailwind 클래스 매핑\n * - 크기 (w/h) + 텍스트 크기 (이니셜용)\n */\nconst SIZE_CLASSES: Record = {\n xs: 'w-6 h-6 text-xs', // 24px\n sm: 'w-8 h-8 text-sm', // 32px\n md: 'w-10 h-10 text-base', // 40px\n lg: 'w-12 h-12 text-lg', // 48px\n xl: 'w-16 h-16 text-xl', // 64px\n '2xl': 'w-24 h-24 text-2xl', // 96px\n '3xl': 'w-32 h-32 text-3xl', // 128px\n '4xl': 'w-40 h-40 text-4xl', // 160px\n '5xl': 'w-48 h-48 text-5xl', // 192px\n} as const;\n\n/**\n * 기본 컨테이너 스타일 (공통)\n */\nconst BASE_CONTAINER_CLASSES = 'rounded-full overflow-hidden flex-shrink-0 border border-gray-200 dark:border-gray-700';\n\n/**\n * 탈퇴 사용자 스타일\n */\nconst WITHDRAWN_CLASSES = 'grayscale opacity-50';\n\n/**\n * 이니셜 배경 스타일\n */\nconst INITIAL_BG_CLASSES = {\n normal: 'bg-gradient-to-br from-blue-500 to-purple-600',\n withdrawn: 'bg-gray-300 dark:bg-gray-600',\n guest: 'bg-gray-200 dark:bg-gray-700',\n} as const;\n\n/**\n * Author 객체 인터페이스\n */\nexport interface AuthorInfo {\n /** 사용자 ID */\n id?: string | number;\n /** 사용자 이름 */\n name?: string;\n /** 아바타 URL */\n avatar?: string;\n /** 사용자 상태 */\n status?: 'active' | 'inactive' | 'blocked' | 'withdrawn';\n /** 비회원 여부 */\n is_guest?: boolean;\n}\n\nexport interface AvatarProps {\n /**\n * 작성자 객체 (권장)\n * API 응답의 author 객체를 그대로 전달하면 됩니다.\n * 개별 props(name, avatar 등)가 함께 전달되면 개별 props가 우선합니다.\n */\n author?: AuthorInfo;\n /** 사용자 이름 (author.name보다 우선) */\n name?: string;\n /** 아바타 이미지 URL (author.avatar보다 우선) */\n avatar?: string;\n /** 사이즈 @default 'md' */\n size?: AvatarSize;\n /** 추가 className */\n className?: string;\n /** 레이아웃 JSON text 속성 (name보다 우선) */\n text?: string;\n /** 탈퇴한 사용자 여부 (author.status === 'withdrawn'과 OR 조건) @default false */\n isWithdrawn?: boolean;\n /** 비회원 여부 (author.is_guest보다 우선) @default false */\n isGuest?: boolean;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Avatar 컴포넌트\n *\n * 사용자 아바타를 표시하는 재사용 가능한 composite 컴포넌트입니다.\n * - 아바타 이미지가 있으면 이미지 표시\n * - 이미지가 없으면 이름의 첫 글자(이니셜) 표시\n * - 비회원: 연한 회색 배경 + 사람 실루엣 아이콘\n * - 탈퇴한 사용자: 회색 빈 원 (그레이스케일 + 투명도)\n *\n * ## Props 우선순위\n * 명시적으로 전달한 props가 author에서 추출한 값보다 우선합니다.\n * - 이름: text > name > author.name\n * - 아바타: avatar > author.avatar\n * - 비회원 여부: isGuest > author.is_guest\n * - 탈퇴 여부: isWithdrawn || author.status === 'withdrawn'\n *\n * @example\n * // 레이아웃 JSON에서 사용 (author 객체 전달 - 권장)\n * {\n * \"type\": \"composite\",\n * \"name\": \"Avatar\",\n * \"props\": {\n * \"author\": \"{{post.author}}\",\n * \"size\": \"md\"\n * }\n * }\n *\n * @example\n * // author와 개별 props 혼합 사용 (개별 props가 우선)\n * {\n * \"type\": \"composite\",\n * \"name\": \"Avatar\",\n * \"props\": {\n * \"author\": \"{{post.author}}\",\n * \"avatar\": \"/images/custom-avatar.png\",\n * \"size\": \"md\"\n * }\n * }\n * // author.avatar가 있어도 \"/images/custom-avatar.png\"이 표시됨\n */\nexport const Avatar: React.FC = ({\n author,\n name,\n avatar,\n size = 'md',\n className = '',\n text,\n isWithdrawn = false,\n isGuest = false,\n id,\n editorAttrs,\n}) => {\n // 명시적 props > author 추출값 순서로 결정\n const actualAvatar = avatar ?? author?.avatar;\n const actualName = text ?? name ?? author?.name ?? '?';\n const actualIsWithdrawn = isWithdrawn || author?.status === 'withdrawn';\n const actualIsGuest = isGuest || author?.is_guest || false;\n\n // 컨테이너 클래스 메모이제이션\n const containerClasses = useMemo(() => {\n const sizeClass = SIZE_CLASSES[size] || SIZE_CLASSES.md;\n const withdrawnClass = actualIsWithdrawn ? WITHDRAWN_CLASSES : '';\n\n return [sizeClass, BASE_CONTAINER_CLASSES, withdrawnClass, className]\n .filter(Boolean)\n .join(' ');\n }, [size, actualIsWithdrawn, className]);\n\n // 이니셜 배경 클래스\n const initialBgClass = actualIsGuest\n ? INITIAL_BG_CLASSES.guest\n : actualIsWithdrawn\n ? INITIAL_BG_CLASSES.withdrawn\n : INITIAL_BG_CLASSES.normal;\n\n // 비회원: 사람 실루엣 아이콘 (연한 회색), 탈퇴 사용자: 사람 실루엣 아이콘 (진한 회색), 일반: 이니셜\n const renderContent = () => {\n if (actualIsGuest) {\n return (\n
\n \n
\n );\n }\n if (actualIsWithdrawn) {\n return (\n
\n \n
\n );\n }\n return (\n
\n {actualName.charAt(0).toUpperCase()}\n
\n );\n };\n\n return (\n
\n {actualAvatar && !actualIsGuest && !actualIsWithdrawn ? (\n \n ) : (\n renderContent()\n )}\n
\n );\n};\n","/**\n * SlotContainer.tsx\n *\n * 동적 슬롯에 등록된 컴포넌트들을 렌더링하는 컨테이너 컴포넌트\n *\n * SlotContainer는 SlotContext에서 지정된 슬롯 ID에 등록된 모든 컴포넌트를 수집하고,\n * slotOrder 기준으로 정렬하여 렌더링합니다.\n *\n * 통짜 TSX 컴포넌트(예: Header)가 레이아웃 JSON 노드(`\"slot\": \"...\"`)로 주입된 UI를\n * 떙겨 쓰는 코어 슬롯 시스템의 소비 측 컴포넌트입니다. 빈 슬롯이면 null 을 렌더하므로\n * \"모듈 활성 시에만 노출\"이 확장 주입 인프라로 자동 충족됩니다(헤더는 주입 모듈을 모름).\n *\n * @module SlotContainer\n *\n * @example\n * ```json\n * {\n * \"type\": \"composite\",\n * \"name\": \"SlotContainer\",\n * \"props\": {\n * \"slotId\": \"header_currency\",\n * \"className\": \"flex items-center\"\n * }\n * }\n * ```\n */\n\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { Div } from '../basic/Div';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:SlotContainer')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:SlotContainer]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:SlotContainer]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:SlotContainer]', ...args),\n};\n\n/**\n * 슬롯에 주입된 컴포넌트의 root id 를 컨테이너 id 로 스코프해 고유화한다.\n *\n * 같은 슬롯 컴포넌트가 여러 SlotContainer(예: 헤더 데스크톱/모바일)에서 렌더되면 주입\n * 컴포넌트의 정적 root id 가 컨테이너마다 같은 값으로 중복 출력되어 HTML id 유일성을\n * 위반한다. 컨테이너 고유 id 가 있고 컴포넌트가 root id 를 가지면 `{id}__{containerId}`\n * 로 스코프한다. 둘 중 하나라도 없으면 원본 그대로(무영향).\n *\n * @param componentDef 주입 컴포넌트 정의\n * @param containerId 이 SlotContainer 의 DOM id (없으면 스코프 안 함)\n * @returns 스코프된(또는 원본) 컴포넌트 정의\n */\nexport function scopeSlotChildDef(\n componentDef: T,\n containerId: string | undefined,\n): T {\n if (\n containerId &&\n componentDef &&\n typeof componentDef.id === 'string' &&\n componentDef.id.length > 0\n ) {\n return { ...componentDef, id: `${componentDef.id}__${containerId}` };\n }\n return componentDef;\n}\n\n/**\n * SlotContainer Props\n */\nexport interface SlotContainerProps {\n /**\n * 슬롯 ID\n *\n * 이 슬롯에 등록된 컴포넌트들을 렌더링합니다.\n */\n slotId: string;\n\n /**\n * 컨테이너 CSS 클래스\n */\n className?: string;\n\n /**\n * 빈 슬롯일 때 표시할 내용\n */\n emptyContent?: React.ReactNode;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 컴포넌트 ID (DOM id)\n */\n id?: string;\n\n /**\n * 자식 컴포넌트 (children을 통한 fallback 또는 slot 컴포넌트가 아닌 정적 컨텐츠)\n */\n children?: React.ReactNode;\n}\n\n/**\n * SlotRegistration 타입 (SlotContext에서 정의된 것과 호환)\n */\ninterface SlotRegistration {\n componentDef: any;\n dataContext: Record;\n order: number;\n parentFormContext: any;\n getParentComponentContext: () => { state: Record; setState: (updates: any) => void };\n translationContext: any;\n registrationKey: string;\n}\n\n/**\n * SlotContext 값 타입\n */\ninterface SlotContextValue {\n getSlotComponents: (slotId: string) => SlotRegistration[];\n subscribeToSlot: (slotId: string, callback: () => void) => () => void;\n isEnabled: boolean;\n}\n\n/**\n * SlotContainer 컴포넌트\n *\n * SlotContext에서 지정된 슬롯 ID에 등록된 컴포넌트들을 수집하여 렌더링합니다.\n * 컴포넌트는 slotOrder 기준으로 정렬됩니다.\n *\n * 이 컴포넌트는 SlotContext를 사용하므로 SlotProvider 내부에서만 동작합니다.\n * SlotProvider는 DynamicRenderer의 루트에서 자동으로 래핑됩니다.\n *\n * @param props SlotContainerProps\n */\nexport const SlotContainer: React.FC = ({\n slotId,\n className = '',\n emptyContent,\n style,\n id,\n children,\n}) => {\n const [slotComponents, setSlotComponents] = useState([]);\n const [, forceUpdate] = useState({});\n\n // SlotContext 가져오기 (window.__slotContextValue 또는 G7Core.getSlotContext() 사용)\n const getSlotContext = useCallback((): SlotContextValue | null => {\n const directSlotContext = (window as any).__slotContextValue;\n if (directSlotContext) {\n return directSlotContext;\n }\n\n const g7Core = (window as any).G7Core;\n if (!g7Core) return null;\n\n const slotContext = g7Core.getSlotContext?.();\n return slotContext || null;\n }, []);\n\n // 슬롯 컴포넌트 업데이트 함수\n const updateSlotComponents = useCallback(() => {\n const slotContext = getSlotContext();\n if (slotContext && slotContext.isEnabled) {\n setSlotComponents(slotContext.getSlotComponents(slotId));\n }\n }, [slotId, getSlotContext]);\n\n // 슬롯 구독 및 업데이트\n useEffect(() => {\n const slotContext = getSlotContext();\n\n if (!slotContext || !slotContext.isEnabled) {\n return;\n }\n\n updateSlotComponents();\n\n const unsubscribe = slotContext.subscribeToSlot(slotId, () => {\n updateSlotComponents();\n forceUpdate({});\n });\n\n return unsubscribe;\n }, [slotId, getSlotContext, updateSlotComponents]);\n\n // G7Core에서 DynamicRenderer 가져오기\n const getDynamicRenderer = useCallback(() => {\n const g7Core = (window as any).G7Core;\n if (!g7Core) return null;\n\n return g7Core.getDynamicRenderer?.();\n }, []);\n\n // 빈 슬롯 처리\n if (slotComponents.length === 0) {\n if (emptyContent) {\n return (\n
\n {emptyContent}\n
\n );\n }\n\n if (children) {\n return (\n
\n {children}\n
\n );\n }\n\n return null;\n }\n\n const DynamicRenderer = getDynamicRenderer();\n const g7Core = (window as any).G7Core;\n\n if (!DynamicRenderer || !g7Core) {\n logger.error('G7Core or DynamicRenderer not available');\n return null;\n }\n\n return (\n
\n {slotComponents.map((registration) => {\n const {\n componentDef,\n dataContext,\n parentFormContext,\n getParentComponentContext,\n translationContext,\n } = registration;\n\n // 같은 슬롯 컴포넌트가 여러 SlotContainer(헤더 데스크톱/모바일)에서 렌더될 때\n // 주입 컴포넌트 root id 를 컨테이너 id 로 스코프해 HTML id 중복을 막는다.\n const scopedDef = scopeSlotChildDef(componentDef, id);\n\n return (\n \n );\n })}\n {children}\n
\n );\n};\n\nexport default SlotContainer;\n","import React, { useState, useRef, useEffect, useCallback, useLayoutEffect } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\nimport { Input } from '../basic/Input';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 알림 아이템 인터페이스\n */\nexport interface NotificationItem {\n id: string | number;\n title: string;\n message: string;\n time: string;\n read?: boolean;\n iconName?: IconName;\n data?: Record;\n onClick?: () => void;\n}\n\n/**\n * NotificationCenter Props\n */\nexport interface NotificationCenterProps {\n /** 알림 목록 */\n notifications?: NotificationItem[];\n /** 서버 기반 미읽음 알림 수 */\n unreadCount?: number;\n /** 추가 로드 가능 여부 */\n hasMore?: boolean;\n /** 로딩 상태 */\n loading?: boolean;\n /** 알림 제목 텍스트 */\n titleText?: string;\n /** 알림 없음 텍스트 */\n emptyText?: string;\n /** \"모두 읽음\" 버튼 텍스트 */\n markAllReadText?: string;\n /** \"모두 삭제\" 버튼 텍스트 */\n deleteAllText?: string;\n /** \"미읽음만\" 체크박스 텍스트 */\n unreadOnlyText?: string;\n /** \"미읽음만\" 체크박스 상태 */\n unreadOnly?: boolean;\n /** 알림 클릭 핸들러 (알림 전체 객체 전달) */\n onNotificationClick?: (notification: NotificationItem) => void;\n /** 드롭다운 닫힐 때 (뷰포트에 들어온 미읽음 알림 ID 목록) */\n onClose?: (visibleUnreadIds: (string | number)[]) => void;\n /** 추가 로드 요청 */\n onLoadMore?: () => void;\n /** 모두 읽음 처리 요청 */\n onMarkAllRead?: () => void;\n /** 모두 삭제 요청 */\n onDeleteAll?: () => void;\n /** 개별 알림 삭제 요청 (알림 전체 객체 전달) */\n onDelete?: (notification: NotificationItem) => void;\n /** \"미읽음만\" 체크박스 토글 */\n onUnreadOnlyToggle?: (checked: boolean) => void;\n /** 드롭다운 정렬 방향 — \"right\"(기본): 우측 정렬되어 좌측으로 확장 / \"left\": 좌측 정렬되어 우측으로 확장 */\n dropdownAlign?: 'left' | 'right';\n className?: string;\n /** DOM id 속성 (레이아웃 편집기 코어 일괄 ID) */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * NotificationCenter 컴포넌트 (User)\n *\n * 알림 센터 - 알림 목록 표시, 무한스크롤, 읽음 추적.\n * sirsoft-admin_basic의 NotificationCenter와 동일 API/동작을 제공한다.\n *\n * @example\n * ```tsx\n * \n * ```\n */\nexport const NotificationCenter: React.FC = ({\n notifications = [],\n unreadCount = 0,\n hasMore = false,\n loading = false,\n titleText = '알림',\n emptyText = '알림이 없습니다.',\n markAllReadText = '모두 읽음',\n deleteAllText = '모두 삭제',\n unreadOnlyText = '안 읽은 알림만',\n unreadOnly = false,\n onNotificationClick,\n onClose,\n onLoadMore,\n onMarkAllRead,\n onDeleteAll,\n onDelete,\n onUnreadOnlyToggle,\n dropdownAlign = 'right',\n className = '',\n id,\n editorAttrs,\n}) => {\n const [showNotifications, setShowNotifications] = useState(false);\n const notificationRef = useRef(null);\n const dropdownRef = useRef(null);\n const scrollRef = useRef(null);\n const sentinelRef = useRef(null);\n const visibleUnreadIdsRef = useRef>(new Set());\n\n // 무한스크롤 관련 최신 값 참조 (observer 재등록 없이 최신 prop 접근)\n const onLoadMoreRef = useRef(onLoadMore);\n const hasMoreRef = useRef(hasMore);\n const loadingRef = useRef(loading);\n const notificationsCountRef = useRef(notifications.length);\n // 마지막 onLoadMore 발행 시점의 notifications.length — 동일 길이에서 중복 발행 가드\n const lastRequestedCountRef = useRef(-1);\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore;\n hasMoreRef.current = hasMore;\n loadingRef.current = loading;\n notificationsCountRef.current = notifications.length;\n });\n\n /**\n * 무한스크롤 — IntersectionObserver\n *\n * observer는 드롭다운 열림/닫힘 전환 시에만 재등록한다.\n * 목록이 append되거나 loading/hasMore가 바뀌어도 observer를 새로 만들지 않으므로,\n * sentinel이 이미 뷰포트에 있는 상태에서 재등록 시 즉시 intersecting callback이\n * 중복 발행되던 문제를 방지한다.\n */\n useEffect(() => {\n if (!sentinelRef.current || !scrollRef.current || !showNotifications) return;\n\n // 드롭다운이 새로 열릴 때마다 중복 가드 초기화\n lastRequestedCountRef.current = -1;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (!entry.isIntersecting) return;\n if (loadingRef.current || !hasMoreRef.current) return;\n // B안 가드: 같은 length에서 이미 한 번 발행했다면 skip\n if (lastRequestedCountRef.current === notificationsCountRef.current) return;\n lastRequestedCountRef.current = notificationsCountRef.current;\n onLoadMoreRef.current?.();\n },\n { root: scrollRef.current, threshold: 0.1 }\n );\n\n observer.observe(sentinelRef.current);\n return () => observer.disconnect();\n }, [showNotifications]);\n\n /**\n * 뷰포트 내 미읽음 알림 추적 — IntersectionObserver\n */\n useEffect(() => {\n if (!scrollRef.current || !showNotifications) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const id = entry.target.getAttribute('data-notification-id');\n const isUnread = entry.target.getAttribute('data-unread') === 'true';\n if (id && isUnread && entry.isIntersecting) {\n visibleUnreadIdsRef.current.add(id);\n }\n });\n },\n {\n root: scrollRef.current,\n threshold: 0.5,\n }\n );\n\n const items = scrollRef.current.querySelectorAll('[data-notification-id]');\n items.forEach((item) => observer.observe(item));\n\n return () => observer.disconnect();\n }, [showNotifications, notifications]);\n\n /**\n * 뱃지에 표시할 카운트 (handleClose 보다 먼저 선언 — deps 참조 순서)\n */\n const displayCount = unreadCount > 0 ? unreadCount : notifications.filter((n) => !n.read).length;\n\n /**\n * 드롭다운 닫기 — 뷰포트에 들어온 미읽음 알림 ID 전달\n *\n * 불필요한 read-batch 호출 방지:\n * 1) displayCount 가 0 이면 이미 모두 읽음/삭제 처리된 상태 → 전체 skip\n * 2) 뷰포트에 나타났던 ID 중 현재 notifications 기준 여전히 unread 인 것만 전달\n * (\"모두 읽음\" onSuccess 로 notifications 가 갱신되면 필터 결과가 빈 배열이 됨)\n */\n const handleClose = useCallback(() => {\n if (showNotifications) {\n if (displayCount > 0) {\n const unreadIds = Array.from(visibleUnreadIdsRef.current).filter((id) => {\n const n = notifications.find((item) => String(item.id) === String(id));\n return n && !n.read;\n });\n if (unreadIds.length > 0) {\n onClose?.(unreadIds);\n }\n }\n visibleUnreadIdsRef.current.clear();\n setShowNotifications(false);\n }\n }, [showNotifications, onClose, displayCount, notifications]);\n\n /**\n * 외부 클릭 감지 — 드롭다운이 열려 있을 때만 리스너 등록\n * (stale closure 방지: showNotifications 변경 시 리스너 재등록)\n * 주의: handleClose가 useCallback으로 선언된 이후에 위치해야 TDZ 위반 방지\n */\n useEffect(() => {\n if (!showNotifications) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n notificationRef.current &&\n !notificationRef.current.contains(event.target as Node)\n ) {\n handleClose();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showNotifications, handleClose]);\n\n /**\n * 드롭다운 토글\n */\n const handleToggle = useCallback(() => {\n if (showNotifications) {\n handleClose();\n } else {\n setShowNotifications(true);\n }\n }, [showNotifications, handleClose]);\n\n /**\n * 드롭다운 열릴 때 뷰포트 경계 검사 후 이탈량만큼 translateX 로 보정\n *\n * class 기반 left-0/right-0 전환은 부모 컨테이너 기준이라 부모가 뷰포트 가장자리에 있을 때\n * 여전히 이탈할 수 있다. 따라서 초기 렌더 후 드롭다운의 실제 뷰포트 좌표를 측정하여\n * 이탈한 픽셀만큼 반대 방향으로 이동시키는 방식을 사용한다.\n */\n useLayoutEffect(() => {\n const dropdown = dropdownRef.current;\n if (!showNotifications || !dropdown) return;\n\n // 측정 전 기존 transform 초기화 (재측정 시 누적 방지)\n dropdown.style.transform = '';\n const rect = dropdown.getBoundingClientRect();\n const vw = typeof window !== 'undefined' ? window.innerWidth : 0;\n\n // layout 미측정(jsdom 등)에서 rect 가 0 으로 반환되는 경우 보정 스킵\n if (rect.width === 0 && rect.height === 0) return;\n\n const margin = 8;\n let shift = 0;\n if (rect.right > vw - margin) {\n shift = -(rect.right - (vw - margin));\n } else if (rect.left < margin) {\n shift = margin - rect.left;\n }\n\n if (shift !== 0) {\n dropdown.style.transform = `translateX(${shift}px)`;\n }\n }, [showNotifications, dropdownAlign, notifications.length]);\n\n return (\n
\n \n \n {displayCount > 0 && (\n \n {displayCount > 99 ? '99+' : displayCount}\n \n )}\n \n\n {/* 알림 드롭다운 */}\n {showNotifications && (\n
\n
\n
\n {titleText}\n {onUnreadOnlyToggle && (\n onUnreadOnlyToggle(!unreadOnly)}\n >\n ) => {\n e.stopPropagation();\n onUnreadOnlyToggle(e.target.checked);\n }}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n className=\"w-3.5 h-3.5 rounded border-gray-300 dark:border-gray-600 text-blue-600 dark:text-blue-400 focus:ring-blue-500 dark:focus:ring-blue-400 cursor-pointer\"\n />\n {unreadOnlyText}\n
\n )}\n
\n
\n {onMarkAllRead && displayCount > 0 && (\n {\n onMarkAllRead();\n visibleUnreadIdsRef.current.clear();\n }}\n className=\"text-xs text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 hover:underline cursor-pointer\"\n >\n {markAllReadText}\n \n )}\n {onDeleteAll && notifications.length > 0 && (\n {\n // 드롭다운은 닫지 않음 — 확인 모달이 닫히면 다시 자연스럽게 노출되어야 하고,\n // 사용자가 모달 취소 시에도 컨텍스트 유지 (요구사항)\n onDeleteAll();\n }}\n className=\"text-xs text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300 hover:underline cursor-pointer\"\n >\n {deleteAllText}\n \n )}\n
\n
\n
\n {notifications.length === 0 && !loading ? (\n
\n {emptyText}\n
\n ) : (\n <>\n {notifications.map((notification) => {\n const isUnread = !notification.read;\n return (\n {\n notification.onClick?.();\n onNotificationClick?.(notification);\n setShowNotifications(false);\n }}\n className={`group flex items-start gap-3 px-4 py-3 text-left border-b border-gray-100 dark:border-gray-700 transition-colors cursor-pointer ${\n isUnread\n ? 'bg-blue-50/70 dark:bg-blue-900/20 hover:bg-blue-50 dark:hover:bg-blue-900/30'\n : 'bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700/50 opacity-70'\n }`}\n >\n {notification.iconName && (\n \n )}\n
\n \n {notification.title}\n
\n \n {notification.message}\n
\n
\n {notification.time}\n
\n
\n
\n {isUnread && (\n \n )}\n {onDelete && (\n {\n e.stopPropagation();\n onDelete(notification);\n }}\n className=\"p-1 text-gray-400 dark:text-gray-500 hover:text-red-600 dark:hover:text-red-400 rounded hover:bg-red-50 dark:hover:bg-red-900/20 cursor-pointer opacity-0 group-hover:opacity-100 transition-opacity\"\n aria-label=\"Delete notification\"\n >\n \n \n )}\n
\n \n );\n })}\n {/* 무한스크롤 sentinel */}\n {hasMore && (\n
\n {loading ? (\n ...\n ) : (\n \n )}\n
\n )}\n {loading && !hasMore && notifications.length > 0 && (\n
\n ...\n
\n )}\n \n )}\n \n \n )}\n \n );\n};\n\nexport default NotificationCenter;\n","/**\n * Header 컴포넌트\n *\n * 사이트 상단 헤더 컴포넌트입니다.\n * 로고, 검색바, 네비게이션, 사용자 메뉴, 장바구니, 알림을 포함합니다.\n *\n * @see 화면 구성:\n * ┌─────────────────────────────────────────────────────────────────┐\n * │ [Logo] [검색바................] [🔔] [🛒(3)] [👤 닉네임 ▼] │\n * ├─────────────────────────────────────────────────────────────────┤\n * │ [홈] [🔥인기] [🛒쇼핑] [자유게시판] [질문답변] [갤러리] [더보기▼] │\n * └─────────────────────────────────────────────────────────────────┘\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\n\n// 기본 컴포넌트 import\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Input } from '../basic/Input';\nimport { Span } from '../basic/Span';\nimport { Img } from '../basic/Img';\nimport { Icon } from '../basic/Icon';\nimport { Form } from '../basic/Form';\nimport { Nav } from '../basic/Nav';\nimport { Header as HeaderBasic } from '../basic/Header';\nimport { Hr } from '../basic/Hr';\nimport { A } from '../basic/A';\n\n// ThemeToggle 컴포넌트 import\nimport { ThemeToggle } from './ThemeToggle';\n\n// Avatar 컴포넌트 import\nimport { Avatar } from './Avatar';\n\n// SlotContainer — 헤더 통화 등 모듈 주입 UI 를 떙겨 렌더 (헤더는 주입 모듈을 모름)\nimport { SlotContainer } from './SlotContainer';\n\n// NotificationCenter 컴포넌트 import\nimport { NotificationCenter, type NotificationItem } from './NotificationCenter';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n// G7Core.dispatch() navigate 헬퍼\nconst navigate = (path: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'navigate',\n params: { path },\n });\n};\n\ninterface Board {\n id: number;\n name: string;\n slug: string;\n icon?: string;\n}\n\ninterface User {\n uuid: string;\n name: string;\n avatar?: string;\n is_admin?: boolean;\n}\n\ninterface HeaderProps {\n /** 사이트 로고 URL */\n logo?: string;\n /** 사이트 이름 */\n siteName?: string;\n /** 현재 로그인된 사용자 */\n user?: User | null;\n /** 장바구니 아이템 수 */\n cartCount?: number;\n /** 읽지 않은 알림 수 */\n notificationCount?: number;\n /** 게시판 목록 */\n boards?: Board[];\n /** 탭에 표시할 최대 게시판 수 */\n maxVisibleBoards?: number;\n /** 모바일 메뉴 열기 콜백 */\n onMobileMenuOpen?: () => void;\n /** 사용 가능한 언어 목록 */\n availableLocales?: string[];\n /** 현재 언어 */\n currentLocale?: string;\n /** 쇼핑몰 기본 경로 (예: \"/shop\", \"/\") */\n shopBase?: string;\n /** 추가 CSS 클래스 */\n className?: string;\n /** 레이아웃 편집기 식별 속성(data-editor-*) — 시각적 루트에 spread */\n editorAttrs?: Record;\n\n // ===== 알림센터 드롭다운 Props =====\n /** 알림 목록 (NotificationCenter에 전달) */\n notifications?: NotificationItem[];\n /** 더 불러올 페이지 존재 여부 */\n notificationHasMore?: boolean;\n /** 알림 로딩 상태 */\n notificationLoading?: boolean;\n /** \"안 읽은 알림만\" 필터 상태 */\n notificationUnreadOnly?: boolean;\n /** 알림 드롭다운 제목 */\n notificationTitleText?: string;\n /** 알림 없음 텍스트 */\n notificationEmptyText?: string;\n /** \"모두 읽음\" 텍스트 */\n notificationMarkAllReadText?: string;\n /** \"모두 삭제\" 텍스트 */\n notificationDeleteAllText?: string;\n /** \"안 읽은 알림만\" 체크박스 텍스트 */\n notificationUnreadOnlyText?: string;\n /** 알림 드롭다운 닫힐 때 (뷰포트에 보인 미읽음 ID 배열 전달) */\n onNotificationClose?: (visibleUnreadIds: (string | number)[]) => void;\n /** 개별 알림 클릭 */\n onNotificationClick?: (notification: NotificationItem) => void;\n /** 무한 스크롤: 추가 로드 */\n onNotificationLoadMore?: () => void;\n /** \"모두 읽음\" 처리 */\n onNotificationMarkAllRead?: () => void;\n /** \"모두 삭제\" 요청 (모달 오픈) */\n onNotificationDeleteAll?: () => void;\n /** 개별 알림 삭제 */\n onNotificationDelete?: (notification: NotificationItem) => void;\n /** \"안 읽은 알림만\" 체크박스 토글 */\n onNotificationUnreadOnlyToggle?: (checked: boolean) => void;\n}\n\n/**\n * 사이트 헤더 컴포넌트\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"Header\",\n * \"props\": {\n * \"logo\": \"{{_global.settings.site_logo}}\",\n * \"siteName\": \"{{_global.settings.site_name}}\",\n * \"user\": \"{{_global.currentUser}}\",\n * \"cartCount\": \"{{_global.cartCount}}\",\n * \"notificationCount\": \"{{_global.notificationCount}}\",\n * \"boards\": \"{{boards.data}}\",\n * \"maxVisibleBoards\": 5\n * }\n * }\n * ```\n */\nconst Header: React.FC = ({\n logo,\n siteName = '그누보드7',\n user,\n cartCount = 0,\n notificationCount = 0,\n boards = [],\n maxVisibleBoards = 5,\n onMobileMenuOpen,\n availableLocales = [],\n currentLocale = 'ko',\n shopBase = '/shop',\n className = '',\n editorAttrs,\n // 알림센터\n notifications = [],\n notificationHasMore = false,\n notificationLoading = false,\n notificationUnreadOnly = false,\n notificationTitleText,\n notificationEmptyText,\n notificationMarkAllReadText,\n notificationDeleteAllText,\n notificationUnreadOnlyText,\n onNotificationClose,\n onNotificationClick,\n onNotificationLoadMore,\n onNotificationMarkAllRead,\n onNotificationDeleteAll,\n onNotificationDelete,\n onNotificationUnreadOnlyToggle,\n}) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [showUserMenu, setShowUserMenu] = useState(false);\n const [showMoreBoards, setShowMoreBoards] = useState(false);\n const [showLangMenu, setShowLangMenu] = useState(false);\n const [dropdownPosition, setDropdownPosition] = useState<{ top: number; left: number }>({ top: 0, left: 0 });\n const [currentPath, setCurrentPath] = useState(window.location.pathname);\n const userMenuRef = useRef(null);\n const moreButtonRef = useRef(null);\n const langMenuRef = useRef(null);\n\n // G7Core.useResponsive를 통해 반응형 상태 구독 (G7 표준 — 위지윅 overrideWidth 호환)\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive;\n const responsiveValue = useResponsive?.();\n const isMobile = responsiveValue\n ? responsiveValue.width < 768\n : typeof window !== 'undefined' && window.innerWidth < 768;\n\n // 경로 변경 감지 (SPA 네비게이션 대응)\n useEffect(() => {\n const handlePopState = () => setCurrentPath(window.location.pathname);\n window.addEventListener('popstate', handlePopState);\n\n // G7Core의 navigate 이벤트 감지\n const originalPushState = history.pushState;\n history.pushState = function(...args) {\n originalPushState.apply(this, args);\n setCurrentPath(window.location.pathname);\n };\n\n return () => {\n window.removeEventListener('popstate', handlePopState);\n history.pushState = originalPushState;\n };\n }, []);\n\n // 경로 매칭 헬퍼 함수\n const isActiveRoute = (path: string, exact = false): boolean => {\n if (exact) {\n return currentPath === path;\n }\n return currentPath === path || currentPath.startsWith(path + '/');\n };\n\n // 쇼핑 관련 경로 체크 (products, cart, checkout, category 등)\n const isShopActive = (): boolean => {\n const base = shopBase === '/' ? '' : shopBase;\n return currentPath.startsWith(`${base}/products`) ||\n currentPath.startsWith(`${base}/cart`) ||\n currentPath.startsWith(`${base}/checkout`) ||\n currentPath.startsWith(`${base}/category`);\n };\n\n // 네비게이션 버튼 스타일\n const getNavButtonClass = (isActive: boolean): string => {\n const baseClass = 'px-3 py-2 text-sm font-medium whitespace-nowrap cursor-pointer rounded-lg transition-colors';\n if (isActive) {\n return `${baseClass} bg-gray-900 text-white dark:bg-white dark:text-gray-900`;\n }\n return `${baseClass} text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-800`;\n };\n\n // 메뉴 외부 클릭 시 닫기\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (userMenuRef.current && !userMenuRef.current.contains(event.target as Node)) {\n setShowUserMenu(false);\n }\n if (moreButtonRef.current && !moreButtonRef.current.contains(event.target as Node)) {\n setShowMoreBoards(false);\n }\n if (langMenuRef.current && !langMenuRef.current.contains(event.target as Node)) {\n setShowLangMenu(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const visibleBoards = boards.slice(0, maxVisibleBoards);\n const hiddenBoards = boards.slice(maxVisibleBoards);\n\n const handleSearch = (e: React.FormEvent) => {\n e.preventDefault();\n if (searchQuery.trim()) {\n navigate(`/search?q=${encodeURIComponent(searchQuery)}`);\n }\n };\n\n const handleLogout = async () => {\n // G7Core.dispatch를 사용하여 logout 핸들러 호출\n // AuthManager가 토큰 삭제, 상태 초기화, 리다이렉트를 처리\n (window as any).G7Core?.dispatch?.({\n handler: 'logout',\n });\n };\n\n // 언어 변경 핸들러 — 헤더 독립 언어 버튼(코어 기능)에서 호출. setLocale 은 비회원도 동작.\n const handleLocaleChange = (locale: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'setLocale',\n target: locale,\n });\n setShowLangMenu(false);\n };\n\n // 로케일 코드 → 표시명 (활성 언어팩 native_name 우선, 폴백 사전)\n const getLocaleName = (locale: string): string =>\n (window as any).G7Core?.state?.get?.('_global.appConfig.localeNames')?.[locale] ??\n (locale === 'ko' ? '한국어' : locale === 'en' ? 'English' : locale === 'ja' ? '日本語' : locale === 'zh' ? '中文' : locale === 'es' ? 'Español' : locale === 'fr' ? 'Français' : locale === 'de' ? 'Deutsch' : locale.toUpperCase());\n\n return (\n )}\n className={`sticky top-0 z-50 bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800 ${className}`}\n >\n {/* 상단 바 */}\n
\n
\n {/* 로고 */}\n \n\n {/* 검색바 (데스크톱 전용) */}\n {!isMobile && (\n
\n
\n setSearchQuery(e.target.value)}\n placeholder={t('common.search_placeholder')}\n className=\"w-full px-4 py-2 pl-10 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-blue-500\"\n />\n \n
\n
\n )}\n\n {/* 우측 액션 버튼들 */}\n
\n {/* 다크모드 전환 */}\n \n\n {/* 알림센터 드롭다운 — 로그인 사용자에게만 노출 */}\n {user?.uuid && (\n \n )}\n\n {/* 장바구니 */}\n \n\n {/* 언어 선택 — 헤더 독립 버튼(코어 기능, 비회원 포함 전체 노출). 공간 절약 위해 아이콘+로케일 코드만.\n 언어는 항상 존재(이커머스 무관) → 템플릿 헤더 내장. */}\n {availableLocales && availableLocales.length > 1 && (\n
\n setShowLangMenu(!showLangMenu)}\n className=\"flex items-center gap-1.5 px-2.5 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg cursor-pointer transition-colors\"\n aria-haspopup=\"listbox\"\n aria-expanded={showLangMenu}\n aria-label={t('common.language')}\n >\n \n {currentLocale}\n \n \n {showLangMenu && (\n \n {availableLocales.map((locale) => {\n const isActive = locale === currentLocale;\n return (\n handleLocaleChange(locale)}\n className={`w-full px-4 py-2.5 text-left text-sm flex items-center gap-3 cursor-pointer transition-colors ${\n isActive\n ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700'\n }`}\n >\n \n {getLocaleName(locale)}\n {isActive && }\n \n );\n })}\n
\n )}\n
\n )}\n\n {/* 통화 선택 — 이커머스 모듈이 'header_currency' 슬롯에 주입(layout_extensions).\n 헤더는 슬롯 이름만 알고 통화/모듈을 모름. 모듈 비활성 시 빈 슬롯 → 미렌더(인프라 자동 게이트).\n id 지정 필수 — 같은 슬롯이 모바일 헤더 SlotContainer 와 동시 렌더되므로 주입 컴포넌트\n root id 가 컨테이너별로 스코프되도록(SlotContainer 가 id 로 자식 root id 를 고유화) 한다. */}\n \n\n {/* 사용자 메뉴 */}\n {user?.uuid ? (\n
\n setShowUserMenu(!showUserMenu)}\n className=\"flex items-center gap-2 p-2 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white\"\n >\n \n {user.name}\n \n \n\n {/* 드롭다운 메뉴 */}\n {showUserMenu && (\n
\n {/* 사용자 정보 헤더 */}\n
\n
\n \n
\n
{user.name}
\n
{t('common.member')}
\n
\n
\n
\n\n {/* 메뉴 항목 */}\n
\n {/* 관리자 메뉴 (is_admin일 때만 표시) - 하이퍼링크로 전체 페이지 새로고침 */}\n {user.is_admin && (\n <>\n \n \n {t('common.admin_menu')}\n \n
\n \n )}\n \n \n \n
\n\n {/* 언어 선택은 헤더 독립 버튼으로 일원화(드롭다운에서 제거) — 비회원도 헤더에서 전환 가능 */}\n\n
\n \n \n {t('auth.logout')}\n \n
\n )}\n
\n ) : (\n
\n {/* 주문조회 — 로그인 페이지로 진입. 회원은 로그인 후 redirect 파라미터로 마이페이지 주문 내역으로 이동, 비회원은 로그인 페이지의 '비회원 주문 조회' 링크로 폼 진입. 로그아웃된 회원이 비회원 페이지에서 막다른 길에 빠지는 케이스를 차단한다. */}\n navigate('/login?redirect=/mypage/orders')}\n className=\"px-2.5 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white cursor-pointer\"\n >\n {t('shop.guest_order_form.nav_link')}\n \n navigate('/login')}\n className=\"px-2.5 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white cursor-pointer\"\n >\n {t('auth.login')}\n \n navigate('/register')}\n className=\"ml-1 px-3 py-2 text-sm font-medium text-white bg-emerald-500 rounded-lg hover:bg-emerald-600 cursor-pointer\"\n >\n {t('auth.register_link')}\n \n
\n )}\n\n {/* 모바일 햄버거 메뉴 (모바일 전용) */}\n {isMobile && (\n \n \n \n )}\n
\n
\n \n\n {/* 탭 네비게이션 (데스크톱 전용) */}\n {!isMobile && (\n \n )}\n \n );\n};\n\nexport default Header;\n","import React from 'react';\n\nexport interface FooterProps extends React.HTMLAttributes {\n ref?: React.Ref;\n}\n\n/**\n * 기본 footer 컴포넌트\n */\nexport const Footer = React.forwardRef(({\n children,\n className = '',\n ...props\n}, ref) => {\n return (\n \n {children}\n \n );\n});\n","/**\n * Footer 컴포넌트\n *\n * 사이트 하단 푸터 컴포넌트입니다.\n * 사이트 정보, 링크 그룹, 소셜 링크, 저작권 표시를 포함합니다.\n *\n * @see 화면 구성:\n * ┌─────────────────────────────────────────────────────────────────┐\n * │ [사이트명] │\n * │ 함께 성장하는 커뮤니티 │\n * ├────────────┬────────────┬────────────┬────────────────────────────┤\n * │ 커뮤니티 │ 정보 │ 정책 │ [GitHub] [Twitter] [Discord]│\n * ├─────────────────────────────────────────────────────────────────┤\n * │ © 2026 사이트명. All rights reserved. Made with ❤️ │\n * └─────────────────────────────────────────────────────────────────┘\n */\n\nimport React from 'react';\n\n// 기본 컴포넌트 import\nimport { Div } from '../basic/Div';\nimport { A } from '../basic/A';\nimport { Button } from '../basic/Button';\nimport { H3 } from '../basic/H3';\nimport { H4 } from '../basic/H4';\nimport { P } from '../basic/P';\nimport { Ul } from '../basic/Ul';\nimport { Li } from '../basic/Li';\nimport { Footer as FooterBasic } from '../basic/Footer';\nimport { Icon } from '../basic/Icon';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n// G7 표준 반응형 breakpoint — 모바일(< 768) / 데스크톱(>= 1024).\n// 레이아웃 편집기 프리뷰 호환을 위해 Tailwind md:/lg:/sm: 미디어쿼리 대신\n// G7Core.useResponsive() width 기반 분기 사용 (편집 가능 템플릿은 G7 표준\n// responsive 만 허용 — viewport 미디어쿼리는 프리뷰 overrideWidth 를 무시).\nconst TABLET_BREAKPOINT = 768;\nconst DESKTOP_BREAKPOINT = 1024;\n\n// G7Core.dispatch() navigate 헬퍼\nconst navigate = (path: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'navigate',\n params: { path },\n });\n};\n\ninterface SocialLinks {\n github?: string;\n twitter?: string;\n discord?: string;\n facebook?: string;\n instagram?: string;\n}\n\ninterface FooterLink {\n label: string;\n href: string;\n}\n\ninterface FooterLinkGroup {\n title: string;\n links: FooterLink[];\n}\n\ninterface FooterProps {\n /** 사이트 이름 */\n siteName?: string;\n /** 사이트 설명 */\n siteDescription?: string;\n /** 저작권 텍스트 */\n copyrightText?: string;\n /** 소셜 미디어 링크 */\n socialLinks?: SocialLinks;\n /** 링크 그룹 (미지정 시 기본값 사용) */\n linkGroups?: FooterLinkGroup[];\n /** 추가 CSS 클래스 */\n className?: string;\n /** 레이아웃 편집기 식별 속성(data-editor-*) — 시각적 루트에 spread */\n editorAttrs?: Record;\n}\n\n/**\n * 사이트 푸터 컴포넌트\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"Footer\",\n * \"props\": {\n * \"siteName\": \"{{_global.settings.site_name}}\",\n * \"siteDescription\": \"{{_global.settings.site_description}}\",\n * \"copyrightText\": \"{{_global.settings.copyright_text}}\",\n * \"socialLinks\": {\n * \"github\": \"https://github.com/...\",\n * \"twitter\": \"https://twitter.com/...\",\n * \"discord\": \"https://discord.gg/...\"\n * }\n * }\n * }\n * ```\n */\nconst Footer: React.FC = ({\n siteName = '그누보드7',\n siteDescription,\n copyrightText,\n socialLinks = {},\n linkGroups,\n className = '',\n editorAttrs,\n}) => {\n const currentYear = new Date().getFullYear();\n\n // G7 표준 반응형 — useResponsive() 로 프리뷰 overrideWidth 수신 (편집기 디바이스\n // 전환에 정상 반응). hook 미주입 시 window.innerWidth fallback.\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive as (() => { width: number }) | undefined;\n const responsiveValue = useResponsive?.();\n const width =\n responsiveValue?.width ??\n (typeof window !== 'undefined' ? window.innerWidth : DESKTOP_BREAKPOINT);\n const isMobile = width < TABLET_BREAKPOINT;\n const isDesktop = width >= DESKTOP_BREAKPOINT;\n // 링크 그룹 그리드 컬럼 — 모바일 1열 / 태블릿 2열 / 데스크톱 5열.\n const gridColumns = isMobile ? 1 : isDesktop ? 5 : 2;\n\n // 기본 링크 그룹\n const defaultLinkGroups: FooterLinkGroup[] = [\n {\n title: t('footer.community'),\n links: [\n { label: t('nav.home'), href: '/' },\n { label: t('nav.popular'), href: '/boards/popular' },\n { label: t('footer.all_boards'), href: '/boards' },\n ],\n },\n {\n title: t('footer.info'),\n links: [\n { label: t('footer.about'), href: '/page/about' },\n { label: t('footer.faq'), href: '/page/faq' },\n { label: t('footer.contact'), href: '/page/contact' },\n ],\n },\n {\n title: t('footer.policy'),\n links: [\n { label: t('footer.terms'), href: '/page/terms' },\n { label: t('footer.privacy'), href: '/page/privacy' },\n { label: t('footer.refund'), href: '/page/refund' },\n ],\n },\n ];\n\n const groups = linkGroups || defaultLinkGroups;\n\n // 소셜 아이콘 이름 매핑\n const socialIconMap: Record = {\n github: 'github',\n twitter: 'twitter',\n discord: 'discord',\n facebook: 'facebook',\n instagram: 'instagram',\n };\n\n return (\n )}\n className={`bg-gray-50 dark:bg-gray-900 border-t border-gray-200 dark:border-gray-800 ${className}`}\n >\n
\n \n {/* 사이트 정보 — 데스크톱(5열)에서만 2칸 차지 */}\n
\n

{siteName}

\n {siteDescription && (\n

{siteDescription}

\n )}\n\n {/* 소셜 링크 */}\n
\n {Object.entries(socialLinks).map(([type, url]) =>\n url ? (\n \n \n \n ) : null\n )}\n
\n
\n\n {/* 링크 그룹 */}\n {groups.map((group, index) => (\n
\n

\n {group.title}\n

\n
    \n {group.links.map((link, linkIndex) => (\n
  • \n navigate(link.href)}\n className=\"text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white cursor-pointer\"\n >\n {link.label}\n \n
  • \n ))}\n
\n
\n ))}\n
\n\n {/* 저작권 */}\n \n

\n {copyrightText || `© ${currentYear} ${siteName}. All rights reserved.`}\n

\n

\n {t('footer.powered_by')}\n

\n \n \n \n );\n};\n\nexport default Footer;\n","/**\n * MobileNav 컴포넌트\n *\n * 모바일 환경에서 표시되는 슬라이드 드로어 네비게이션입니다.\n * 햄버거 메뉴 클릭 시 좌측에서 슬라이드하며 나타납니다.\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { P } from '../basic/P';\nimport { Icon } from '../basic/Icon';\nimport { Img } from '../basic/Img';\nimport { Nav } from '../basic/Nav';\nimport { Ul } from '../basic/Ul';\nimport { Li } from '../basic/Li';\n\n/**\n * G7Core 번역 함수\n */\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n/**\n * G7Core navigate 헬퍼\n */\nconst navigate = (path: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'navigate',\n params: { path },\n });\n};\n\ninterface Board {\n id: number;\n name: string;\n slug: string;\n icon?: string;\n}\n\ninterface User {\n id: number;\n name: string;\n avatar?: string;\n}\n\ninterface MobileNavProps {\n /** 드로어 열림 상태 */\n isOpen: boolean;\n /** 닫기 콜백 */\n onClose: () => void;\n /** 사이트 로고 URL */\n logo?: string;\n /** 사이트 이름 */\n siteName?: string;\n /** 현재 로그인된 사용자 */\n user?: User | null;\n /** 게시판 목록 */\n boards?: Board[];\n /** 장바구니 아이템 수 */\n cartCount?: number;\n}\n\n/**\n * 모바일 네비게이션 드로어\n *\n * @example\n * ```tsx\n * const [isOpen, setIsOpen] = useState(false);\n *\n * setIsOpen(false)}\n * user={currentUser}\n * boards={boards}\n * />\n * ```\n */\nconst MobileNav: React.FC = ({\n isOpen,\n onClose,\n logo,\n siteName = '그누보드7',\n user,\n boards = [],\n cartCount = 0,\n}) => {\n const drawerRef = useRef(null);\n\n // G7Core.useResponsive를 통해 반응형 상태 구독 (G7 표준 — 위지윅 overrideWidth 호환)\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive;\n const responsiveValue = useResponsive?.();\n // lg 미만(< 1024px)에서만 드로어 노출 — 데스크톱은 Header의 탭 nav 사용\n const isPortable = responsiveValue\n ? responsiveValue.width < 1024\n : typeof window !== 'undefined' && window.innerWidth < 1024;\n\n // ESC 키로 닫기\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose]);\n\n // 오버레이 클릭으로 닫기\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n };\n\n if (!isOpen) return null;\n // 데스크톱(lg+)에서는 모바일 드로어 자체를 노출하지 않음 (위지윅 overrideWidth 호환)\n if (!isPortable) return null;\n\n return (\n \n {/* 오버레이 */}\n
\n\n {/* 드로어 */}\n \n {/* 헤더 */}\n
\n \n \n \n \n
\n\n {/* 사용자 정보 */}\n {user ? (\n
\n
\n {user.avatar ? (\n {user.name}\n ) : (\n
\n {(user.name || 'U').charAt(0).toUpperCase()}\n
\n )}\n
\n

{user.name}

\n \n
\n
\n
\n ) : (\n
\n
\n { onClose(); navigate('/login'); }}\n className=\"flex-1 py-2 text-center text-sm font-medium text-white bg-gray-900 dark:bg-white dark:text-gray-900 rounded-lg cursor-pointer\"\n >\n {t('auth.login')}\n \n { onClose(); navigate('/register'); }}\n className=\"flex-1 py-2 text-center text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg cursor-pointer\"\n >\n {t('auth.register')}\n \n
\n
\n )}\n\n {/* 메뉴 */}\n \n\n {/* 하단 링크 */}\n
\n
\n \n \n \n
\n
\n
\n \n );\n};\n\nexport default MobileNav;\n","/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.1';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","/**\n * ProductCard 컴포넌트\n *\n * 상품 목록에서 개별 상품을 표시하는 카드 컴포넌트입니다.\n * 다중 통화를 지원하며, 할인율 뱃지를 표시합니다.\n */\n\nimport React, { useEffect, useState } from 'react';\n\n// @ts-ignore - DOMPurify 타입 정의 없음\nimport DOMPurify from 'dompurify';\n\n// 기본 컴포넌트 import\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { H3 } from '../basic/H3';\nimport { Img } from '../basic/Img';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 선호 통화를 전역 상태에서 읽고, 변경을 구독하는 훅.\n *\n * 회귀 배경: 종전 `G7Core.state.get('preferredCurrency')` 는 key 를 무시하고\n * _global 전체 객체를 반환해(G7CoreGlobals: get: () => getGlobalState()) 통화 코드가\n * 아닌 객체가 들어가 multi_currency 조회가 항상 KRW 폴백되었고, 단발 get 이라 헤더에서\n * 통화를 바꿔도 카드가 리렌더되지 않았다(상품 리스트/검색/캐러셀 KRW 고정 결함).\n * → 전체 객체에서 `.preferredCurrency` 키로 접근 + state.subscribe 로 리렌더한다.\n *\n * @returns 현재 선호 통화 코드(미설정 시 'KRW')\n */\nconst usePreferredCurrency = (): string => {\n const read = (): string => {\n const state = (window as any).G7Core?.state?.get?.();\n return (state && state.preferredCurrency) || 'KRW';\n };\n const [currency, setCurrency] = useState(read);\n\n useEffect(() => {\n const subscribe = (window as any).G7Core?.state?.subscribe;\n // 구독 시점과 마운트 사이 변경분 보정\n setCurrency(read());\n if (typeof subscribe !== 'function') return;\n const unsubscribe = subscribe((state: Record) => {\n setCurrency((state && state.preferredCurrency) || 'KRW');\n });\n return typeof unsubscribe === 'function' ? unsubscribe : undefined;\n }, []);\n\n return currency;\n};\n\n// G7Core.dispatch() navigate 헬퍼\nconst navigate = (path: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'navigate',\n params: { path },\n });\n};\n\ninterface CurrencyPrice {\n value: number;\n formatted: string;\n}\n\ninterface ProductLabel {\n name: string;\n color: string;\n}\n\ninterface ProductCardProps {\n product: {\n id: number;\n /** 상품코드 — 상세 페이지 링크 식별자 (product_code 기준 라우팅). 없으면 id 로 폴백 */\n product_code?: string;\n name?: string | Record;\n name_localized?: string;\n thumbnail_url: string;\n primary_category?: string;\n selling_price: number;\n selling_price_formatted: string;\n list_price?: number;\n list_price_formatted?: string;\n discount_rate?: number;\n multi_currency_selling_price?: Record;\n multi_currency_list_price?: Record;\n /** 검색 하이라이트된 상품명 (HTML) */\n name_highlighted?: string;\n /** 검색 하이라이트된 설명 (HTML) */\n description_highlighted?: string;\n /** 짧은 설명 */\n short_description?: string;\n /** 판매 상태 (on_sale, sold_out, suspended, coming_soon) */\n sales_status?: string;\n /** 판매 상태 번역 라벨 */\n sales_status_label?: string;\n /** 브랜드명 */\n brand_name?: string;\n /** 상품 라벨/뱃지 목록 */\n labels?: ProductLabel[];\n /** 평균 별점 (0.0 ~ 5.0, 소수점 1자리) */\n rating_avg?: number;\n /** 전시중 리뷰 수 */\n review_count?: number;\n };\n /** 클릭 시 호출되는 콜백 */\n onClick?: (productId: number) => void;\n /** 쇼핑몰 base 경로 (예: '/shop', '/store', '/') */\n shopBase?: string;\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * 상품 카드 컴포넌트\n *\n * @example\n * ```tsx\n * \n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"ProductCard\",\n * \"props\": { \"product\": \"{{product}}\" }\n * }\n * ```\n */\n/**\n * rating_avg(0~5)를 0.5 단위로 반올림하여 별 아이콘 배열을 반환합니다.\n * 반환값: 5개 원소, 각각 'full' | 'half' | 'empty'\n */\nconst getStarTypes = (avg: number): Array<'full' | 'half' | 'empty'> => {\n const rounded = Math.round(avg * 2) / 2; // 0.5 단위 반올림\n return [1, 2, 3, 4, 5].map((pos) => {\n if (rounded >= pos) return 'full';\n if (rounded >= pos - 0.5) return 'half';\n return 'empty';\n });\n};\n\nconst ProductCard: React.FC = ({\n product,\n onClick,\n shopBase = '/shop',\n className = '',\n id,\n editorAttrs,\n}) => {\n const preferredCurrency = usePreferredCurrency();\n\n /**\n * 다중 통화 가격을 가져옵니다.\n * 선호 통화가 없으면 기본 포맷 가격을 반환합니다.\n */\n const getPrice = (field: 'selling_price' | 'list_price'): string | undefined => {\n const multiCurrencyField = `multi_currency_${field}` as keyof typeof product;\n const multiCurrencyData = product[multiCurrencyField] as Record | undefined;\n\n if (multiCurrencyData && multiCurrencyData[preferredCurrency]) {\n return multiCurrencyData[preferredCurrency].formatted;\n }\n\n const formattedField = `${field}_formatted` as keyof typeof product;\n return product[formattedField] as string | undefined;\n };\n\n const displayName = product.name_localized\n ?? (typeof product.name === 'string' ? product.name : '')\n ?? '';\n const sellingPrice = getPrice('selling_price');\n const listPrice = getPrice('list_price');\n const hasDiscount = product.discount_rate && product.discount_rate > 0;\n const isNotOnSale = product.sales_status && product.sales_status !== 'on_sale';\n const labels = product.labels ?? [];\n\n /**\n * HTML 하이라이트가 있으면 sanitize하여 반환합니다.\n * mark 태그만 허용하여 XSS를 방지합니다.\n */\n const sanitizeHighlight = (html: string): string => {\n return DOMPurify.sanitize(html, {\n ALLOWED_TAGS: ['mark'],\n ALLOWED_ATTR: [],\n }) as unknown as string;\n };\n\n const nameHighlighted = product.name_highlighted;\n const descriptionHtml = product.description_highlighted ?? product.short_description;\n\n const handleClick = () => {\n if (onClick) {\n onClick(product.id);\n } else {\n const base = shopBase === '/' ? '' : shopBase;\n // 상세 페이지는 product_code 기준 라우팅. code 미제공 시 id 로 폴백(하위호환).\n const identifier = product.product_code ?? product.id;\n navigate(`${base}/products/${identifier}`);\n }\n };\n\n return (\n \n {/* 이미지 영역 */}\n
\n {/* 상품 이미지 */}\n \n\n {/* 판매 상태 오버레이 */}\n {isNotOnSale && (\n
\n \n {product.sales_status_label ?? product.sales_status}\n \n
\n )}\n\n {/* 할인율 뱃지 (좌상단) - 품절/판매중단 시 숨김 */}\n {hasDiscount && product.sales_status !== 'sold_out' && product.sales_status !== 'suspended' && (\n \n {product.discount_rate}%\n \n )}\n\n {/* 상품 라벨/뱃지 (우하단) */}\n {labels.length > 0 && (\n
\n {labels.map((label, idx) => (\n \n {label.name}\n \n ))}\n
\n )}\n
\n\n {/* 상품 정보 */}\n
\n {/* 카테고리 및 브랜드 */}\n
\n {product.primary_category && (\n \n {product.primary_category}\n \n )}\n {product.brand_name && (\n \n {product.brand_name}\n \n )}\n
\n\n {/* 상품명 */}\n {nameHighlighted ? (\n \n ) : (\n

\n {displayName}\n

\n )}\n\n {/* 상품 설명 (검색 결과 등에서 표시) */}\n {descriptionHtml && (\n \n )}\n\n {/* 별점 영역 */}\n
\n {getStarTypes(product.rating_avg ?? 0).map((type, idx) => (\n \n {type === 'full' && }\n {type === 'half' && }\n {type === 'empty' && }\n \n ))}\n \n {(product.rating_avg ?? 0).toFixed(1)}\n \n \n ({product.review_count ?? 0})\n \n
\n\n {/* 가격 영역 */}\n
\n \n {sellingPrice}\n \n {listPrice && hasDiscount && (\n \n {listPrice}\n \n )}\n
\n
\n \n );\n};\n\nexport default ProductCard;\n","const MODULE_CAROUSEL = \"carousel\";\nconst MODULE_CONTROLLER = \"controller\";\nconst MODULE_NAVIGATION = \"navigation\";\nconst MODULE_NO_SCROLL = \"no-scroll\";\nconst MODULE_PORTAL = \"portal\";\nconst MODULE_ROOT = \"root\";\nconst MODULE_TOOLBAR = \"toolbar\";\nconst PLUGIN_CAPTIONS = \"captions\";\nconst PLUGIN_COUNTER = \"counter\";\nconst PLUGIN_DOWNLOAD = \"download\";\nconst PLUGIN_FULLSCREEN = \"fullscreen\";\nconst PLUGIN_INLINE = \"inline\";\nconst PLUGIN_SHARE = \"share\";\nconst PLUGIN_SLIDESHOW = \"slideshow\";\nconst PLUGIN_THUMBNAILS = \"thumbnails\";\nconst PLUGIN_ZOOM = \"zoom\";\nconst SLIDE_STATUS_LOADING = \"loading\";\nconst SLIDE_STATUS_PLAYING = \"playing\";\nconst SLIDE_STATUS_ERROR = \"error\";\nconst SLIDE_STATUS_COMPLETE = \"complete\";\nconst SLIDE_STATUS_PLACEHOLDER = \"placeholder\";\nconst activeSlideStatus = (status) => `active-slide-${status}`;\nconst ACTIVE_SLIDE_LOADING = activeSlideStatus(SLIDE_STATUS_LOADING);\nconst ACTIVE_SLIDE_PLAYING = activeSlideStatus(SLIDE_STATUS_PLAYING);\nconst ACTIVE_SLIDE_ERROR = activeSlideStatus(SLIDE_STATUS_ERROR);\nconst ACTIVE_SLIDE_COMPLETE = activeSlideStatus(SLIDE_STATUS_COMPLETE);\nconst CLASS_FULLSIZE = \"fullsize\";\nconst CLASS_FLEX_CENTER = \"flex_center\";\nconst CLASS_NO_SCROLL = \"no_scroll\";\nconst CLASS_NO_SCROLL_PADDING = \"no_scroll_padding\";\nconst CLASS_SLIDE = \"slide\";\nconst CLASS_SLIDE_WRAPPER = \"slide_wrapper\";\nconst CLASS_SLIDE_WRAPPER_INTERACTIVE = \"slide_wrapper_interactive\";\nconst ACTION_PREV = \"prev\";\nconst ACTION_NEXT = \"next\";\nconst ACTION_SWIPE = \"swipe\";\nconst ACTION_CLOSE = \"close\";\nconst EVENT_ON_POINTER_DOWN = \"onPointerDown\";\nconst EVENT_ON_POINTER_MOVE = \"onPointerMove\";\nconst EVENT_ON_POINTER_UP = \"onPointerUp\";\nconst EVENT_ON_POINTER_LEAVE = \"onPointerLeave\";\nconst EVENT_ON_POINTER_CANCEL = \"onPointerCancel\";\nconst EVENT_ON_KEY_DOWN = \"onKeyDown\";\nconst EVENT_ON_KEY_UP = \"onKeyUp\";\nconst EVENT_ON_WHEEL = \"onWheel\";\nconst VK_ESCAPE = \"Escape\";\nconst VK_ARROW_LEFT = \"ArrowLeft\";\nconst VK_ARROW_RIGHT = \"ArrowRight\";\nconst ELEMENT_BUTTON = \"button\";\nconst ELEMENT_ICON = \"icon\";\nconst IMAGE_FIT_CONTAIN = \"contain\";\nconst IMAGE_FIT_COVER = \"cover\";\nconst UNKNOWN_ACTION_TYPE = \"Unknown action type\";\n\nexport { ACTION_CLOSE, ACTION_NEXT, ACTION_PREV, ACTION_SWIPE, ACTIVE_SLIDE_COMPLETE, ACTIVE_SLIDE_ERROR, ACTIVE_SLIDE_LOADING, ACTIVE_SLIDE_PLAYING, CLASS_FLEX_CENTER, CLASS_FULLSIZE, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, CLASS_SLIDE, CLASS_SLIDE_WRAPPER, CLASS_SLIDE_WRAPPER_INTERACTIVE, ELEMENT_BUTTON, ELEMENT_ICON, EVENT_ON_KEY_DOWN, EVENT_ON_KEY_UP, EVENT_ON_POINTER_CANCEL, EVENT_ON_POINTER_DOWN, EVENT_ON_POINTER_LEAVE, EVENT_ON_POINTER_MOVE, EVENT_ON_POINTER_UP, EVENT_ON_WHEEL, IMAGE_FIT_CONTAIN, IMAGE_FIT_COVER, MODULE_CAROUSEL, MODULE_CONTROLLER, MODULE_NAVIGATION, MODULE_NO_SCROLL, MODULE_PORTAL, MODULE_ROOT, MODULE_TOOLBAR, PLUGIN_CAPTIONS, PLUGIN_COUNTER, PLUGIN_DOWNLOAD, PLUGIN_FULLSCREEN, PLUGIN_INLINE, PLUGIN_SHARE, PLUGIN_SLIDESHOW, PLUGIN_THUMBNAILS, PLUGIN_ZOOM, SLIDE_STATUS_COMPLETE, SLIDE_STATUS_ERROR, SLIDE_STATUS_LOADING, SLIDE_STATUS_PLACEHOLDER, SLIDE_STATUS_PLAYING, UNKNOWN_ACTION_TYPE, VK_ARROW_LEFT, VK_ARROW_RIGHT, VK_ESCAPE, activeSlideStatus };\n","\"use client\";\nimport * as React from 'react';\nimport { IMAGE_FIT_COVER, IMAGE_FIT_CONTAIN, ACTION_CLOSE, MODULE_CONTROLLER, UNKNOWN_ACTION_TYPE, ELEMENT_BUTTON, ELEMENT_ICON, EVENT_ON_WHEEL, EVENT_ON_KEY_UP, EVENT_ON_KEY_DOWN, EVENT_ON_POINTER_CANCEL, EVENT_ON_POINTER_LEAVE, EVENT_ON_POINTER_UP, EVENT_ON_POINTER_MOVE, EVENT_ON_POINTER_DOWN, SLIDE_STATUS_LOADING, activeSlideStatus, SLIDE_STATUS_COMPLETE, SLIDE_STATUS_ERROR, SLIDE_STATUS_PLACEHOLDER, CLASS_SLIDE, CLASS_SLIDE_WRAPPER, ACTION_PREV, ACTION_NEXT, ACTION_SWIPE, MODULE_PORTAL, CLASS_FLEX_CENTER, MODULE_CAROUSEL, VK_ARROW_RIGHT, VK_ARROW_LEFT, VK_ESCAPE, MODULE_NAVIGATION, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, MODULE_NO_SCROLL, MODULE_ROOT, MODULE_TOOLBAR } from './types.js';\nimport { createPortal } from 'react-dom';\nexport { ACTIVE_SLIDE_COMPLETE, ACTIVE_SLIDE_ERROR, ACTIVE_SLIDE_LOADING, ACTIVE_SLIDE_PLAYING, CLASS_FULLSIZE, CLASS_SLIDE_WRAPPER_INTERACTIVE, PLUGIN_CAPTIONS, PLUGIN_COUNTER, PLUGIN_DOWNLOAD, PLUGIN_FULLSCREEN, PLUGIN_INLINE, PLUGIN_SHARE, PLUGIN_SLIDESHOW, PLUGIN_THUMBNAILS, PLUGIN_ZOOM, SLIDE_STATUS_PLAYING } from './types.js';\n\nconst cssPrefix$3 = \"yarl__\";\nfunction clsx(...classes) {\n return [...classes].filter(Boolean).join(\" \");\n}\nfunction cssClass(name) {\n return `${cssPrefix$3}${name}`;\n}\nfunction cssVar(name) {\n return `--${cssPrefix$3}${name}`;\n}\nfunction composePrefix(base, prefix) {\n return `${base}${prefix ? `_${prefix}` : \"\"}`;\n}\nfunction makeComposePrefix(base) {\n return (prefix) => composePrefix(base, prefix);\n}\nfunction translateLabel(labels, defaultLabel) {\n var _a;\n return (_a = labels === null || labels === void 0 ? void 0 : labels[defaultLabel]) !== null && _a !== void 0 ? _a : defaultLabel;\n}\nfunction label(labels, defaultLabel) {\n return translateLabel(labels, defaultLabel);\n}\nfunction translateSlideCounter(labels, slides, index) {\n return translateLabel(labels, \"{index} of {total}\")\n .replace(/\\{index}/g, `${getSlideIndex(index, slides.length) + 1}`)\n .replace(/\\{total}/g, `${slides.length}`);\n}\nfunction cleanup(...cleaners) {\n return () => {\n cleaners.forEach((cleaner) => {\n cleaner();\n });\n };\n}\nfunction makeUseContext(name, contextName, context) {\n return () => {\n const ctx = React.useContext(context);\n if (!ctx) {\n throw new Error(`${name} must be used within a ${contextName}.Provider`);\n }\n return ctx;\n };\n}\nfunction hasWindow() {\n return typeof window !== \"undefined\";\n}\nfunction round(value, decimals = 0) {\n const factor = 10 ** decimals;\n return Math.round((value + Number.EPSILON) * factor) / factor;\n}\nfunction isImageSlide(slide) {\n return slide.type === undefined || slide.type === \"image\";\n}\nfunction isImageFitCover(image, imageFit) {\n return image.imageFit === IMAGE_FIT_COVER || (image.imageFit !== IMAGE_FIT_CONTAIN && imageFit === IMAGE_FIT_COVER);\n}\nfunction parseInt(value) {\n return typeof value === \"string\" ? Number.parseInt(value, 10) : value;\n}\nfunction parseLengthPercentage(input) {\n if (typeof input === \"number\") {\n return { pixel: input };\n }\n if (typeof input === \"string\") {\n const value = parseInt(input);\n return input.endsWith(\"%\") ? { percent: value } : { pixel: value };\n }\n return { pixel: 0 };\n}\nfunction computeSlideRect(containerRect, padding) {\n const paddingValue = parseLengthPercentage(padding);\n const paddingPixels = paddingValue.percent !== undefined ? (containerRect.width / 100) * paddingValue.percent : paddingValue.pixel;\n return {\n width: Math.max(containerRect.width - 2 * paddingPixels, 0),\n height: Math.max(containerRect.height - 2 * paddingPixels, 0),\n };\n}\nfunction devicePixelRatio() {\n return (hasWindow() ? window === null || window === void 0 ? void 0 : window.devicePixelRatio : undefined) || 1;\n}\nfunction getSlideIndex(index, slidesCount) {\n return slidesCount > 0 ? ((index % slidesCount) + slidesCount) % slidesCount : 0;\n}\nfunction hasSlides(slides) {\n return slides.length > 0;\n}\nfunction getSlide(slides, index) {\n return slides[getSlideIndex(index, slides.length)];\n}\nfunction getSlideIfPresent(slides, index) {\n return hasSlides(slides) ? getSlide(slides, index) : undefined;\n}\nfunction getSlideKey(slide) {\n return isImageSlide(slide) ? slide.src : undefined;\n}\nfunction addToolbarButton(toolbar, key, button) {\n if (!button)\n return toolbar;\n const { buttons, ...restToolbar } = toolbar;\n const index = buttons.findIndex((item) => item === key);\n const buttonWithKey = React.isValidElement(button) ? React.cloneElement(button, { key }, null) : button;\n if (index >= 0) {\n const result = [...buttons];\n result.splice(index, 1, buttonWithKey);\n return { buttons: result, ...restToolbar };\n }\n return { buttons: [buttonWithKey, ...buttons], ...restToolbar };\n}\nfunction stopNavigationEventsPropagation() {\n const stopPropagation = (event) => {\n event.stopPropagation();\n };\n return { onPointerDown: stopPropagation, onKeyDown: stopPropagation, onWheel: stopPropagation };\n}\nfunction calculatePreload(carousel, slides, minimum = 0) {\n return Math.min(carousel.preload, Math.max(carousel.finite ? slides.length - 1 : Math.floor(slides.length / 2), minimum));\n}\nconst isReact19 = Number(React.version.split(\".\")[0]) >= 19;\nfunction makeInertWhen(condition) {\n const legacyValue = condition ? \"\" : undefined;\n return { inert: isReact19 ? condition : legacyValue };\n}\nfunction reflow(node) {\n node.scrollTop;\n}\n\nconst LightboxDefaultProps = {\n open: false,\n close: () => { },\n index: 0,\n slides: [],\n render: {},\n plugins: [],\n toolbar: { buttons: [ACTION_CLOSE] },\n labels: {},\n animation: {\n fade: 250,\n swipe: 500,\n easing: {\n fade: \"ease\",\n swipe: \"ease-out\",\n navigation: \"ease-in-out\",\n },\n },\n carousel: {\n finite: false,\n preload: 2,\n padding: \"16px\",\n spacing: \"30%\",\n imageFit: IMAGE_FIT_CONTAIN,\n imageProps: {},\n },\n controller: {\n ref: null,\n focus: true,\n aria: false,\n touchAction: \"none\",\n closeOnPullUp: false,\n closeOnPullDown: false,\n closeOnBackdropClick: false,\n preventDefaultWheelX: true,\n preventDefaultWheelY: false,\n disableSwipeNavigation: false,\n },\n portal: {},\n noScroll: {\n disabled: false,\n },\n on: {},\n styles: {},\n className: \"\",\n};\n\nfunction createModule(name, component) {\n return { name, component };\n}\nfunction createNode(module, children) {\n return { module, children };\n}\nfunction traverseNode(node, target, apply) {\n if (node.module.name === target) {\n return apply(node);\n }\n if (node.children) {\n return [\n createNode(node.module, node.children.flatMap((n) => { var _a; return (_a = traverseNode(n, target, apply)) !== null && _a !== void 0 ? _a : []; })),\n ];\n }\n return [node];\n}\nfunction traverse(nodes, target, apply) {\n return nodes.flatMap((node) => { var _a; return (_a = traverseNode(node, target, apply)) !== null && _a !== void 0 ? _a : []; });\n}\nfunction withPlugins(root, plugins = [], augmentations = []) {\n let config = root;\n const contains = (target) => {\n const nodes = [...config];\n while (nodes.length > 0) {\n const node = nodes.pop();\n if ((node === null || node === void 0 ? void 0 : node.module.name) === target)\n return true;\n if (node === null || node === void 0 ? void 0 : node.children)\n nodes.push(...node.children);\n }\n return false;\n };\n const addParent = (target, module) => {\n if (target === \"\") {\n config = [createNode(module, config)];\n return;\n }\n config = traverse(config, target, (node) => [createNode(module, [node])]);\n };\n const append = (target, module) => {\n config = traverse(config, target, (node) => [createNode(node.module, [createNode(module, node.children)])]);\n };\n const addChild = (target, module, precede) => {\n config = traverse(config, target, (node) => {\n var _a;\n return [\n createNode(node.module, [\n ...(precede ? [createNode(module)] : []),\n ...((_a = node.children) !== null && _a !== void 0 ? _a : []),\n ...(!precede ? [createNode(module)] : []),\n ]),\n ];\n });\n };\n const addSibling = (target, module, precede) => {\n config = traverse(config, target, (node) => [\n ...(precede ? [createNode(module)] : []),\n node,\n ...(!precede ? [createNode(module)] : []),\n ]);\n };\n const addModule = (module) => {\n append(MODULE_CONTROLLER, module);\n };\n const replace = (target, module) => {\n config = traverse(config, target, (node) => [createNode(module, node.children)]);\n };\n const remove = (target) => {\n config = traverse(config, target, (node) => node.children);\n };\n const augment = (augmentation) => {\n augmentations.push(augmentation);\n };\n plugins.forEach((plugin) => {\n plugin({\n contains,\n addParent,\n append,\n addChild,\n addSibling,\n addModule,\n replace,\n remove,\n augment,\n });\n });\n return {\n config,\n augmentation: (props) => augmentations.reduce((acc, augmentation) => augmentation(acc), props),\n };\n}\n\nconst A11yContext = React.createContext(null);\nconst useA11yContext = makeUseContext(\"useA11yContext\", \"A11yContext\", A11yContext);\nfunction A11yContextProvider({ children }) {\n const [focusWithin, setFocusWithin] = React.useState(false);\n const [autoPlaying, setAutoPlaying] = React.useState(false);\n const context = React.useMemo(() => {\n const trackFocusWithin = (onFocus, onBlur) => {\n const trackAndDelegate = (focusWithinValue) => (event) => {\n var _a;\n if (!event.currentTarget.contains(event.relatedTarget)) {\n setFocusWithin(focusWithinValue);\n }\n (_a = (focusWithinValue ? onFocus : onBlur)) === null || _a === void 0 ? void 0 : _a(event);\n };\n return {\n onFocus: trackAndDelegate(true),\n onBlur: trackAndDelegate(false),\n };\n };\n return { focusWithin, trackFocusWithin, autoPlaying, setAutoPlaying };\n }, [focusWithin, autoPlaying]);\n return React.createElement(A11yContext.Provider, { value: context }, children);\n}\n\nconst DocumentContext = React.createContext(null);\nconst useDocumentContext = makeUseContext(\"useDocument\", \"DocumentContext\", DocumentContext);\nfunction DocumentContextProvider({ nodeRef, children }) {\n const context = React.useMemo(() => {\n const getOwnerDocument = (node) => { var _a; return ((_a = (node || nodeRef.current)) === null || _a === void 0 ? void 0 : _a.ownerDocument) || document; };\n const getOwnerWindow = (node) => { var _a; return ((_a = getOwnerDocument(node)) === null || _a === void 0 ? void 0 : _a.defaultView) || window; };\n return { getOwnerDocument, getOwnerWindow };\n }, [nodeRef]);\n return React.createElement(DocumentContext.Provider, { value: context }, children);\n}\n\nconst EventsContext = React.createContext(null);\nconst useEvents = makeUseContext(\"useEvents\", \"EventsContext\", EventsContext);\nfunction EventsProvider({ children }) {\n const [subscriptions] = React.useState({});\n React.useEffect(() => () => {\n Object.keys(subscriptions).forEach((topic) => delete subscriptions[topic]);\n }, [subscriptions]);\n const context = React.useMemo(() => {\n const unsubscribe = (topic, callback) => {\n var _a;\n (_a = subscriptions[topic]) === null || _a === void 0 ? void 0 : _a.splice(0, subscriptions[topic].length, ...subscriptions[topic].filter((cb) => cb !== callback));\n };\n const subscribe = (topic, callback) => {\n if (!subscriptions[topic]) {\n subscriptions[topic] = [];\n }\n subscriptions[topic].push(callback);\n return () => unsubscribe(topic, callback);\n };\n const publish = (...[topic, event]) => {\n var _a;\n (_a = subscriptions[topic]) === null || _a === void 0 ? void 0 : _a.forEach((callback) => callback(event));\n };\n return { publish, subscribe, unsubscribe };\n }, [subscriptions]);\n return React.createElement(EventsContext.Provider, { value: context }, children);\n}\n\nconst LightboxPropsContext = React.createContext(null);\nconst useLightboxProps = makeUseContext(\"useLightboxProps\", \"LightboxPropsContext\", LightboxPropsContext);\nfunction LightboxPropsProvider({ children, ...props }) {\n return React.createElement(LightboxPropsContext.Provider, { value: props }, children);\n}\n\nconst LightboxStateContext = React.createContext(null);\nconst useLightboxState = makeUseContext(\"useLightboxState\", \"LightboxStateContext\", LightboxStateContext);\nconst LightboxDispatchContext = React.createContext(null);\nconst useLightboxDispatch = makeUseContext(\"useLightboxDispatch\", \"LightboxDispatchContext\", LightboxDispatchContext);\nfunction reducer(state, action) {\n switch (action.type) {\n case \"swipe\": {\n const { slides } = state;\n const increment = (action === null || action === void 0 ? void 0 : action.increment) || 0;\n const globalIndex = state.globalIndex + increment;\n const currentIndex = getSlideIndex(globalIndex, slides.length);\n const currentSlide = getSlideIfPresent(slides, currentIndex);\n const animation = increment || action.duration !== undefined\n ? {\n increment,\n duration: action.duration,\n easing: action.easing,\n }\n : undefined;\n return { slides, currentIndex, globalIndex, currentSlide, animation };\n }\n case \"update\":\n if (action.slides !== state.slides || action.index !== state.currentIndex) {\n return {\n slides: action.slides,\n currentIndex: action.index,\n globalIndex: action.index,\n currentSlide: getSlideIfPresent(action.slides, action.index),\n };\n }\n return state;\n default:\n throw new Error(UNKNOWN_ACTION_TYPE);\n }\n}\nfunction LightboxStateProvider({ slides, index, children }) {\n const [state, dispatch] = React.useReducer(reducer, {\n slides,\n currentIndex: index,\n globalIndex: index,\n currentSlide: getSlideIfPresent(slides, index),\n });\n React.useEffect(() => {\n dispatch({ type: \"update\", slides, index });\n }, [slides, index]);\n const context = React.useMemo(() => ({ ...state, state, dispatch }), [state, dispatch]);\n return (React.createElement(LightboxDispatchContext.Provider, { value: dispatch },\n React.createElement(LightboxStateContext.Provider, { value: context }, children)));\n}\n\nconst TimeoutsContext = React.createContext(null);\nconst useTimeouts = makeUseContext(\"useTimeouts\", \"TimeoutsContext\", TimeoutsContext);\nfunction TimeoutsProvider({ children }) {\n const [timeouts] = React.useState([]);\n React.useEffect(() => () => {\n timeouts.forEach((tid) => window.clearTimeout(tid));\n timeouts.splice(0, timeouts.length);\n }, [timeouts]);\n const context = React.useMemo(() => {\n const removeTimeout = (id) => {\n timeouts.splice(0, timeouts.length, ...timeouts.filter((tid) => tid !== id));\n };\n const setTimeout = (fn, delay) => {\n const id = window.setTimeout(() => {\n removeTimeout(id);\n fn();\n }, delay);\n timeouts.push(id);\n return id;\n };\n const clearTimeout = (id) => {\n if (id !== undefined) {\n removeTimeout(id);\n window.clearTimeout(id);\n }\n };\n return { setTimeout, clearTimeout };\n }, [timeouts]);\n return React.createElement(TimeoutsContext.Provider, { value: context }, children);\n}\n\nconst IconButton = React.forwardRef(function IconButton({ label, className, icon: Icon, renderIcon, onClick, style, ...rest }, ref) {\n const { styles, labels } = useLightboxProps();\n const buttonLabel = translateLabel(labels, label);\n return (React.createElement(\"button\", { ref: ref, type: \"button\", title: buttonLabel, \"aria-label\": buttonLabel, className: clsx(cssClass(ELEMENT_BUTTON), className), onClick: onClick, style: { ...style, ...styles.button }, ...rest }, renderIcon ? renderIcon() : React.createElement(Icon, { className: cssClass(ELEMENT_ICON), style: styles.icon })));\n});\n\nfunction svgIcon(name, children) {\n const icon = (props) => (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 24 24\", width: \"24\", height: \"24\", \"aria-hidden\": \"true\", focusable: \"false\", ...props }, children));\n icon.displayName = name;\n return icon;\n}\nfunction createIcon(name, glyph) {\n return svgIcon(name, React.createElement(\"g\", { fill: \"currentColor\" },\n React.createElement(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" }),\n glyph));\n}\nfunction createIconDisabled(name, glyph) {\n return svgIcon(name, React.createElement(React.Fragment, null,\n React.createElement(\"defs\", null,\n React.createElement(\"mask\", { id: \"strike\" },\n React.createElement(\"path\", { d: \"M0 0h24v24H0z\", fill: \"white\" }),\n React.createElement(\"path\", { d: \"M0 0L24 24\", stroke: \"black\", strokeWidth: 4 }))),\n React.createElement(\"path\", { d: \"M0.70707 2.121320L21.878680 23.292883\", stroke: \"currentColor\", strokeWidth: 2 }),\n React.createElement(\"g\", { fill: \"currentColor\", mask: \"url(#strike)\" },\n React.createElement(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" }),\n glyph)));\n}\nconst CloseIcon = createIcon(\"Close\", React.createElement(\"path\", { d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" }));\nconst PreviousIcon = createIcon(\"Previous\", React.createElement(\"path\", { d: \"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" }));\nconst NextIcon = createIcon(\"Next\", React.createElement(\"path\", { d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" }));\nconst LoadingIcon = createIcon(\"Loading\", React.createElement(React.Fragment, null, Array.from({ length: 8 }).map((_, index, array) => (React.createElement(\"line\", { key: index, x1: \"12\", y1: \"6.5\", x2: \"12\", y2: \"1.8\", strokeLinecap: \"round\", strokeWidth: \"2.6\", stroke: \"currentColor\", strokeOpacity: (1 / array.length) * (index + 1), transform: `rotate(${(360 / array.length) * index}, 12, 12)` })))));\nconst ErrorIcon = createIcon(\"Error\", React.createElement(\"path\", { d: \"M21.9,21.9l-8.49-8.49l0,0L3.59,3.59l0,0L2.1,2.1L0.69,3.51L3,5.83V19c0,1.1,0.9,2,2,2h13.17l2.31,2.31L21.9,21.9z M5,18 l3.5-4.5l2.5,3.01L12.17,15l3,3H5z M21,18.17L5.83,3H19c1.1,0,2,0.9,2,2V18.17z\" }));\n\nconst useLayoutEffect = hasWindow() ? React.useLayoutEffect : React.useEffect;\n\nfunction useMotionPreference() {\n const [reduceMotion, setReduceMotion] = React.useState(false);\n React.useEffect(() => {\n var _a, _b;\n const mediaQuery = (_a = window.matchMedia) === null || _a === void 0 ? void 0 : _a.call(window, \"(prefers-reduced-motion: reduce)\");\n setReduceMotion(mediaQuery === null || mediaQuery === void 0 ? void 0 : mediaQuery.matches);\n const listener = (event) => setReduceMotion(event.matches);\n (_b = mediaQuery === null || mediaQuery === void 0 ? void 0 : mediaQuery.addEventListener) === null || _b === void 0 ? void 0 : _b.call(mediaQuery, \"change\", listener);\n return () => { var _a; return (_a = mediaQuery === null || mediaQuery === void 0 ? void 0 : mediaQuery.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(mediaQuery, \"change\", listener); };\n }, []);\n return reduceMotion;\n}\n\nfunction currentTransformation(node) {\n let x = 0;\n let y = 0;\n let z = 0;\n const matrix = window.getComputedStyle(node).transform;\n const matcher = matrix.match(/matrix.*\\((.+)\\)/);\n if (matcher) {\n const values = matcher[1].split(\",\").map(parseInt);\n if (values.length === 6) {\n x = values[4];\n y = values[5];\n }\n else if (values.length === 16) {\n x = values[12];\n y = values[13];\n z = values[14];\n }\n }\n return { x, y, z };\n}\nfunction useAnimation(nodeRef, computeAnimation) {\n const snapshot = React.useRef(undefined);\n const animation = React.useRef(undefined);\n const reduceMotion = useMotionPreference();\n useLayoutEffect(() => {\n var _a, _b, _c;\n if (nodeRef.current && snapshot.current !== undefined && !reduceMotion) {\n const { keyframes, duration, easing, onfinish } = computeAnimation(snapshot.current, nodeRef.current.getBoundingClientRect(), currentTransformation(nodeRef.current)) || {};\n if (keyframes && duration) {\n (_a = animation.current) === null || _a === void 0 ? void 0 : _a.cancel();\n animation.current = undefined;\n try {\n animation.current = (_c = (_b = nodeRef.current).animate) === null || _c === void 0 ? void 0 : _c.call(_b, keyframes, { duration, easing });\n }\n catch (err) {\n console.error(err);\n }\n if (animation.current) {\n animation.current.onfinish = () => {\n animation.current = undefined;\n onfinish === null || onfinish === void 0 ? void 0 : onfinish();\n };\n }\n }\n }\n snapshot.current = undefined;\n });\n return {\n prepareAnimation: (currentSnapshot) => {\n snapshot.current = currentSnapshot;\n },\n isAnimationPlaying: () => { var _a; return ((_a = animation.current) === null || _a === void 0 ? void 0 : _a.playState) === \"running\"; },\n };\n}\n\nfunction useContainerRect() {\n const containerRef = React.useRef(null);\n const observerRef = React.useRef(undefined);\n const [containerRect, setContainerRect] = React.useState();\n const setContainerRef = React.useCallback((node) => {\n containerRef.current = node;\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = undefined;\n }\n const updateContainerRect = () => {\n if (node) {\n const styles = window.getComputedStyle(node);\n const parse = (value) => parseFloat(value) || 0;\n setContainerRect({\n width: Math.round(node.clientWidth - parse(styles.paddingLeft) - parse(styles.paddingRight)),\n height: Math.round(node.clientHeight - parse(styles.paddingTop) - parse(styles.paddingBottom)),\n });\n }\n else {\n setContainerRect(undefined);\n }\n };\n updateContainerRect();\n if (node && typeof ResizeObserver !== \"undefined\") {\n observerRef.current = new ResizeObserver(updateContainerRect);\n observerRef.current.observe(node);\n }\n }, []);\n return { setContainerRef, containerRef, containerRect };\n}\n\nfunction useDelay() {\n const timeoutId = React.useRef(undefined);\n const { setTimeout, clearTimeout } = useTimeouts();\n return React.useCallback((callback, delay) => {\n clearTimeout(timeoutId.current);\n timeoutId.current = setTimeout(callback, delay > 0 ? delay : 0);\n }, [setTimeout, clearTimeout]);\n}\n\nfunction useEventCallback(fn) {\n const ref = React.useRef(fn);\n useLayoutEffect(() => {\n ref.current = fn;\n });\n return React.useCallback((...args) => { var _a; return (_a = ref.current) === null || _a === void 0 ? void 0 : _a.call(ref, ...args); }, []);\n}\n\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n}\nfunction useForkRef(refA, refB) {\n return React.useMemo(() => refA == null && refB == null\n ? null\n : (refValue) => {\n setRef(refA, refValue);\n setRef(refB, refValue);\n }, [refA, refB]);\n}\n\nfunction useLoseFocus(focus, disabled = false) {\n const focused = React.useRef(false);\n useLayoutEffect(() => {\n if (disabled && focused.current) {\n focused.current = false;\n focus();\n }\n }, [disabled, focus]);\n const onFocus = React.useCallback(() => {\n focused.current = true;\n }, []);\n const onBlur = React.useCallback(() => {\n focused.current = false;\n }, []);\n return { onFocus, onBlur };\n}\n\nfunction useRTL() {\n const [isRTL, setIsRTL] = React.useState(false);\n useLayoutEffect(() => {\n setIsRTL(window.getComputedStyle(window.document.documentElement).direction === \"rtl\");\n }, []);\n return isRTL;\n}\n\nfunction useSensors() {\n const [subscribers] = React.useState({});\n const notifySubscribers = React.useCallback((type, event) => {\n var _a;\n (_a = subscribers[type]) === null || _a === void 0 ? void 0 : _a.forEach((listener) => {\n if (!event.isPropagationStopped())\n listener(event);\n });\n }, [subscribers]);\n const registerSensors = React.useMemo(() => ({\n onPointerDown: (event) => notifySubscribers(EVENT_ON_POINTER_DOWN, event),\n onPointerMove: (event) => notifySubscribers(EVENT_ON_POINTER_MOVE, event),\n onPointerUp: (event) => notifySubscribers(EVENT_ON_POINTER_UP, event),\n onPointerLeave: (event) => notifySubscribers(EVENT_ON_POINTER_LEAVE, event),\n onPointerCancel: (event) => notifySubscribers(EVENT_ON_POINTER_CANCEL, event),\n onKeyDown: (event) => notifySubscribers(EVENT_ON_KEY_DOWN, event),\n onKeyUp: (event) => notifySubscribers(EVENT_ON_KEY_UP, event),\n onWheel: (event) => notifySubscribers(EVENT_ON_WHEEL, event),\n }), [notifySubscribers]);\n const subscribeSensors = React.useCallback((type, callback) => {\n if (!subscribers[type]) {\n subscribers[type] = [];\n }\n subscribers[type].unshift(callback);\n return () => {\n const listeners = subscribers[type];\n if (listeners) {\n listeners.splice(0, listeners.length, ...listeners.filter((el) => el !== callback));\n }\n };\n }, [subscribers]);\n return { registerSensors, subscribeSensors };\n}\n\nfunction useThrottle(callback, delay) {\n const lastCallbackTime = React.useRef(0);\n const delayCallback = useDelay();\n const executeCallback = useEventCallback((...args) => {\n lastCallbackTime.current = Date.now();\n callback(args);\n });\n return React.useCallback((...args) => {\n delayCallback(() => {\n executeCallback(args);\n }, delay - (Date.now() - lastCallbackTime.current));\n }, [delay, executeCallback, delayCallback]);\n}\n\nconst slidePrefix = makeComposePrefix(\"slide\");\nconst slideImagePrefix = makeComposePrefix(\"slide_image\");\nfunction ImageSlide({ slide: image, offset, render, rect, imageFit, imageProps, onClick, onLoad, onError, style, }) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const [status, setStatus] = React.useState(SLIDE_STATUS_LOADING);\n const { publish } = useEvents();\n const { setTimeout } = useTimeouts();\n const imageRef = React.useRef(null);\n React.useEffect(() => {\n if (offset === 0) {\n publish(activeSlideStatus(status));\n }\n }, [offset, status, publish]);\n const handleLoading = useEventCallback((img) => {\n (\"decode\" in img ? img.decode() : Promise.resolve())\n .catch(() => { })\n .then(() => {\n if (!img.parentNode) {\n return;\n }\n setStatus(SLIDE_STATUS_COMPLETE);\n setTimeout(() => {\n onLoad === null || onLoad === void 0 ? void 0 : onLoad(img);\n }, 0);\n });\n });\n const setImageRef = React.useCallback((img) => {\n imageRef.current = img;\n if (img === null || img === void 0 ? void 0 : img.complete) {\n handleLoading(img);\n }\n }, [handleLoading]);\n const handleOnLoad = React.useCallback((event) => {\n handleLoading(event.currentTarget);\n }, [handleLoading]);\n const handleOnError = useEventCallback(() => {\n setStatus(SLIDE_STATUS_ERROR);\n onError === null || onError === void 0 ? void 0 : onError();\n });\n const cover = isImageFitCover(image, imageFit);\n const nonInfinite = (value, fallback) => (Number.isFinite(value) ? value : fallback);\n const maxWidth = nonInfinite(Math.max(...((_b = (_a = image.srcSet) === null || _a === void 0 ? void 0 : _a.map((x) => x.width)) !== null && _b !== void 0 ? _b : []).concat(image.width ? [image.width] : []).filter(Boolean)), ((_c = imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalWidth) || 0);\n const maxHeight = nonInfinite(Math.max(...((_e = (_d = image.srcSet) === null || _d === void 0 ? void 0 : _d.map((x) => x.height)) !== null && _e !== void 0 ? _e : []).concat(image.height ? [image.height] : []).filter(Boolean)), ((_f = imageRef.current) === null || _f === void 0 ? void 0 : _f.naturalHeight) || 0);\n const defaultStyle = maxWidth && maxHeight\n ? {\n maxWidth: `min(${maxWidth}px, 100%)`,\n maxHeight: `min(${maxHeight}px, 100%)`,\n }\n : {\n maxWidth: \"100%\",\n maxHeight: \"100%\",\n };\n const srcSet = (_g = image.srcSet) === null || _g === void 0 ? void 0 : _g.sort((a, b) => a.width - b.width).map((item) => `${item.src} ${item.width}w`).join(\", \");\n const estimateActualWidth = () => rect && !cover && image.width && image.height ? (rect.height / image.height) * image.width : Number.MAX_VALUE;\n const sizes = srcSet && rect && hasWindow() ? `${Math.round(Math.min(estimateActualWidth(), rect.width))}px` : undefined;\n const { style: imagePropsStyle, className: imagePropsClassName, ...restImageProps } = imageProps || {};\n return (React.createElement(React.Fragment, null,\n React.createElement(\"img\", { ref: setImageRef, onLoad: handleOnLoad, onError: handleOnError, onClick: onClick, draggable: false, className: clsx(cssClass(slideImagePrefix()), cover && cssClass(slideImagePrefix(\"cover\")), status !== SLIDE_STATUS_COMPLETE && cssClass(slideImagePrefix(\"loading\")), imagePropsClassName), style: { ...defaultStyle, ...style, ...imagePropsStyle }, ...restImageProps, alt: (_h = image.alt) !== null && _h !== void 0 ? _h : \"\", sizes: sizes, srcSet: srcSet, src: image.src }),\n status !== SLIDE_STATUS_COMPLETE && (React.createElement(\"div\", { className: cssClass(slidePrefix(SLIDE_STATUS_PLACEHOLDER)) },\n status === SLIDE_STATUS_LOADING &&\n ((render === null || render === void 0 ? void 0 : render.iconLoading) ? (render.iconLoading()) : (React.createElement(LoadingIcon, { className: clsx(cssClass(ELEMENT_ICON), cssClass(slidePrefix(SLIDE_STATUS_LOADING))) }))),\n status === SLIDE_STATUS_ERROR &&\n ((render === null || render === void 0 ? void 0 : render.iconError) ? (render.iconError()) : (React.createElement(ErrorIcon, { className: clsx(cssClass(ELEMENT_ICON), cssClass(slidePrefix(SLIDE_STATUS_ERROR))) })))))));\n}\n\nconst LightboxRoot = React.forwardRef(function LightboxRoot({ className, children, onFocus, onBlur, ...rest }, ref) {\n const nodeRef = React.useRef(null);\n const { trackFocusWithin } = useA11yContext();\n return (React.createElement(DocumentContextProvider, { nodeRef: nodeRef },\n React.createElement(\"div\", { ref: useForkRef(ref, nodeRef), className: clsx(cssClass(\"root\"), className), ...trackFocusWithin(onFocus, onBlur), ...rest }, children)));\n});\n\nvar SwipeState;\n(function (SwipeState) {\n SwipeState[SwipeState[\"NONE\"] = 0] = \"NONE\";\n SwipeState[SwipeState[\"SWIPE\"] = 1] = \"SWIPE\";\n SwipeState[SwipeState[\"PULL\"] = 2] = \"PULL\";\n SwipeState[SwipeState[\"ANIMATION\"] = 3] = \"ANIMATION\";\n})(SwipeState || (SwipeState = {}));\n\nfunction usePointerEvents(subscribeSensors, onPointerDown, onPointerMove, onPointerUp, disabled) {\n React.useEffect(() => !disabled\n ? cleanup(subscribeSensors(EVENT_ON_POINTER_DOWN, onPointerDown), subscribeSensors(EVENT_ON_POINTER_MOVE, onPointerMove), subscribeSensors(EVENT_ON_POINTER_UP, onPointerUp), subscribeSensors(EVENT_ON_POINTER_LEAVE, onPointerUp), subscribeSensors(EVENT_ON_POINTER_CANCEL, onPointerUp))\n : () => { }, [subscribeSensors, onPointerDown, onPointerMove, onPointerUp, disabled]);\n}\n\nvar Gesture;\n(function (Gesture) {\n Gesture[Gesture[\"NONE\"] = 0] = \"NONE\";\n Gesture[Gesture[\"SWIPE\"] = 1] = \"SWIPE\";\n Gesture[Gesture[\"PULL\"] = 2] = \"PULL\";\n})(Gesture || (Gesture = {}));\nconst SWIPE_THRESHOLD = 30;\nfunction usePointerSwipe({ disableSwipeNavigation, closeOnBackdropClick }, subscribeSensors, isSwipeValid, containerWidth, swipeAnimationDuration, onSwipeStart, onSwipeProgress, onSwipeFinish, onSwipeCancel, pullUpEnabled, pullDownEnabled, onPullStart, onPullProgress, onPullFinish, onPullCancel, onClose) {\n const offset = React.useRef(0);\n const pointers = React.useRef([]);\n const activePointer = React.useRef(undefined);\n const startTime = React.useRef(0);\n const gesture = React.useRef(Gesture.NONE);\n const clearPointer = React.useCallback((event) => {\n if (activePointer.current === event.pointerId) {\n activePointer.current = undefined;\n gesture.current = Gesture.NONE;\n }\n const currentPointers = pointers.current;\n currentPointers.splice(0, currentPointers.length, ...currentPointers.filter((p) => p.pointerId !== event.pointerId));\n }, []);\n const addPointer = React.useCallback((event) => {\n clearPointer(event);\n event.persist();\n pointers.current.push(event);\n }, [clearPointer]);\n const lookupPointer = React.useCallback((event) => pointers.current.find(({ pointerId }) => event.pointerId === pointerId), []);\n const onPointerDown = useEventCallback((event) => {\n addPointer(event);\n });\n const exceedsPullThreshold = (value, threshold) => (pullDownEnabled && value > threshold) || (pullUpEnabled && value < -threshold);\n const onPointerUp = useEventCallback((event) => {\n const pointer = lookupPointer(event);\n if (pointer) {\n if (activePointer.current === event.pointerId) {\n const duration = Date.now() - startTime.current;\n const currentOffset = offset.current;\n if (gesture.current === Gesture.SWIPE) {\n if (Math.abs(currentOffset) > 0.3 * containerWidth ||\n (Math.abs(currentOffset) > 5 && duration < swipeAnimationDuration)) {\n onSwipeFinish(currentOffset, duration);\n }\n else {\n onSwipeCancel(currentOffset);\n }\n }\n else if (gesture.current === Gesture.PULL) {\n if (exceedsPullThreshold(currentOffset, 2 * SWIPE_THRESHOLD)) {\n onPullFinish(currentOffset, duration);\n }\n else {\n onPullCancel(currentOffset);\n }\n }\n offset.current = 0;\n gesture.current = Gesture.NONE;\n }\n else {\n const { target } = event;\n if (closeOnBackdropClick &&\n target instanceof HTMLElement &&\n target === pointer.target &&\n (target.classList.contains(cssClass(CLASS_SLIDE)) || target.classList.contains(cssClass(CLASS_SLIDE_WRAPPER)))) {\n onClose();\n }\n }\n }\n clearPointer(event);\n });\n const onPointerMove = useEventCallback((event) => {\n const pointer = lookupPointer(event);\n if (pointer) {\n const isCurrentPointer = activePointer.current === event.pointerId;\n if (event.buttons === 0) {\n if (isCurrentPointer && offset.current !== 0) {\n onPointerUp(event);\n }\n else {\n clearPointer(pointer);\n }\n return;\n }\n const deltaX = event.clientX - pointer.clientX;\n const deltaY = event.clientY - pointer.clientY;\n if (activePointer.current === undefined) {\n const startGesture = (newGesture) => {\n addPointer(event);\n activePointer.current = event.pointerId;\n startTime.current = Date.now();\n gesture.current = newGesture;\n };\n if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > SWIPE_THRESHOLD && isSwipeValid(deltaX)) {\n if (!disableSwipeNavigation) {\n startGesture(Gesture.SWIPE);\n onSwipeStart();\n }\n }\n else if (Math.abs(deltaY) > Math.abs(deltaX) && exceedsPullThreshold(deltaY, SWIPE_THRESHOLD)) {\n startGesture(Gesture.PULL);\n onPullStart();\n }\n }\n else if (isCurrentPointer) {\n if (gesture.current === Gesture.SWIPE) {\n offset.current = deltaX;\n onSwipeProgress(deltaX);\n }\n else if (gesture.current === Gesture.PULL) {\n offset.current = deltaY;\n onPullProgress(deltaY);\n }\n }\n }\n });\n usePointerEvents(subscribeSensors, onPointerDown, onPointerMove, onPointerUp);\n}\n\nfunction usePreventWheelDefaults({ preventDefaultWheelX, preventDefaultWheelY, }) {\n const ref = React.useRef(null);\n const listener = useEventCallback((event) => {\n const horizontal = Math.abs(event.deltaX) > Math.abs(event.deltaY);\n if ((horizontal && preventDefaultWheelX) || (!horizontal && preventDefaultWheelY) || event.ctrlKey) {\n event.preventDefault();\n }\n });\n return React.useCallback((node) => {\n var _a;\n if (node) {\n node.addEventListener(\"wheel\", listener, { passive: false });\n }\n else {\n (_a = ref.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(\"wheel\", listener);\n }\n ref.current = node;\n }, [listener]);\n}\n\nfunction useWheelSwipe(swipeState, subscribeSensors, isSwipeValid, containerWidth, swipeAnimationDuration, onSwipeStart, onSwipeProgress, onSwipeFinish, onSwipeCancel) {\n const offset = React.useRef(0);\n const intent = React.useRef(0);\n const intentCleanup = React.useRef(undefined);\n const resetCleanup = React.useRef(undefined);\n const wheelInertia = React.useRef(0);\n const wheelInertiaCleanup = React.useRef(undefined);\n const startTime = React.useRef(0);\n const { setTimeout, clearTimeout } = useTimeouts();\n const cancelSwipeIntentCleanup = React.useCallback(() => {\n if (intentCleanup.current) {\n clearTimeout(intentCleanup.current);\n intentCleanup.current = undefined;\n }\n }, [clearTimeout]);\n const cancelSwipeResetCleanup = React.useCallback(() => {\n if (resetCleanup.current) {\n clearTimeout(resetCleanup.current);\n resetCleanup.current = undefined;\n }\n }, [clearTimeout]);\n const handleCleanup = useEventCallback(() => {\n if (swipeState !== SwipeState.SWIPE) {\n offset.current = 0;\n startTime.current = 0;\n cancelSwipeIntentCleanup();\n cancelSwipeResetCleanup();\n }\n });\n React.useEffect(handleCleanup, [swipeState, handleCleanup]);\n const handleCancelSwipe = useEventCallback((currentSwipeOffset) => {\n resetCleanup.current = undefined;\n if (offset.current === currentSwipeOffset) {\n onSwipeCancel(offset.current);\n }\n });\n const onWheel = useEventCallback((event) => {\n if (event.ctrlKey) {\n return;\n }\n if (Math.abs(event.deltaY) > Math.abs(event.deltaX)) {\n return;\n }\n const setWheelInertia = (inertia) => {\n wheelInertia.current = inertia;\n clearTimeout(wheelInertiaCleanup.current);\n wheelInertiaCleanup.current =\n inertia > 0\n ? setTimeout(() => {\n wheelInertia.current = 0;\n wheelInertiaCleanup.current = undefined;\n }, 300)\n : undefined;\n };\n if (swipeState === SwipeState.NONE) {\n if (Math.abs(event.deltaX) <= 1.2 * Math.abs(wheelInertia.current)) {\n setWheelInertia(event.deltaX);\n return;\n }\n if (!isSwipeValid(-event.deltaX)) {\n return;\n }\n intent.current += event.deltaX;\n cancelSwipeIntentCleanup();\n if (Math.abs(intent.current) > 30) {\n intent.current = 0;\n setWheelInertia(0);\n startTime.current = Date.now();\n onSwipeStart();\n }\n else {\n const currentSwipeIntent = intent.current;\n intentCleanup.current = setTimeout(() => {\n intentCleanup.current = undefined;\n if (currentSwipeIntent === intent.current) {\n intent.current = 0;\n }\n }, swipeAnimationDuration);\n }\n }\n else if (swipeState === SwipeState.SWIPE) {\n let newSwipeOffset = offset.current - event.deltaX;\n newSwipeOffset = Math.min(Math.abs(newSwipeOffset), containerWidth) * Math.sign(newSwipeOffset);\n offset.current = newSwipeOffset;\n onSwipeProgress(newSwipeOffset);\n cancelSwipeResetCleanup();\n if (Math.abs(newSwipeOffset) > 0.2 * containerWidth) {\n setWheelInertia(event.deltaX);\n onSwipeFinish(newSwipeOffset, Date.now() - startTime.current);\n return;\n }\n resetCleanup.current = setTimeout(() => handleCancelSwipe(newSwipeOffset), 2 * swipeAnimationDuration);\n }\n else {\n setWheelInertia(event.deltaX);\n }\n });\n React.useEffect(() => subscribeSensors(EVENT_ON_WHEEL, onWheel), [subscribeSensors, onWheel]);\n}\n\nconst cssContainerPrefix = makeComposePrefix(\"container\");\nconst ControllerContext = React.createContext(null);\nconst useController = makeUseContext(\"useController\", \"ControllerContext\", ControllerContext);\nfunction Controller({ children, ...props }) {\n var _a;\n const { carousel, animation, controller, on, styles, render } = props;\n const { closeOnPullUp, closeOnPullDown, preventDefaultWheelX, preventDefaultWheelY } = controller;\n const [toolbarWidth, setToolbarWidth] = React.useState();\n const state = useLightboxState();\n const dispatch = useLightboxDispatch();\n const [swipeState, setSwipeState] = React.useState(SwipeState.NONE);\n const swipeOffset = React.useRef(0);\n const pullOffset = React.useRef(0);\n const pullOpacity = React.useRef(1);\n const { registerSensors, subscribeSensors } = useSensors();\n const { subscribe, publish } = useEvents();\n const cleanupAnimationIncrement = useDelay();\n const cleanupSwipeOffset = useDelay();\n const cleanupPullOffset = useDelay();\n const { containerRef, setContainerRef, containerRect } = useContainerRect();\n const handleContainerRef = useForkRef(usePreventWheelDefaults({ preventDefaultWheelX, preventDefaultWheelY }), setContainerRef);\n const carouselRef = React.useRef(null);\n const setCarouselRef = useForkRef(carouselRef, undefined);\n const { getOwnerDocument } = useDocumentContext();\n const isRTL = useRTL();\n const rtl = (value) => (isRTL ? -1 : 1) * (typeof value === \"number\" ? value : 1);\n const focus = useEventCallback(() => { var _a; return (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.focus(); });\n const getLightboxProps = useEventCallback(() => props);\n const getLightboxState = useEventCallback(() => state);\n const prev = React.useCallback((params) => publish(ACTION_PREV, params), [publish]);\n const next = React.useCallback((params) => publish(ACTION_NEXT, params), [publish]);\n const close = React.useCallback(() => publish(ACTION_CLOSE), [publish]);\n const isSwipeValid = (offset) => !(carousel.finite &&\n ((rtl(offset) > 0 && state.currentIndex === 0) ||\n (rtl(offset) < 0 && state.currentIndex === state.slides.length - 1)));\n const setSwipeOffset = (offset) => {\n var _a;\n swipeOffset.current = offset;\n (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.style.setProperty(cssVar(\"swipe_offset\"), `${Math.round(offset)}px`);\n };\n const setPullOffset = (offset) => {\n var _a, _b;\n pullOffset.current = offset;\n pullOpacity.current = (() => {\n const threshold = 60;\n const minOpacity = 0.5;\n const offsetValue = (() => {\n if (closeOnPullDown && offset > 0)\n return offset;\n if (closeOnPullUp && offset < 0)\n return -offset;\n return 0;\n })();\n return Math.min(Math.max(round(1 - (offsetValue / threshold) * (1 - minOpacity), 2), minOpacity), 1);\n })();\n (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.style.setProperty(cssVar(\"pull_offset\"), `${Math.round(offset)}px`);\n (_b = containerRef.current) === null || _b === void 0 ? void 0 : _b.style.setProperty(cssVar(\"pull_opacity\"), `${pullOpacity.current}`);\n };\n const { prepareAnimation: preparePullAnimation } = useAnimation(carouselRef, (snapshot, rect, translate) => {\n if (carouselRef.current && containerRect) {\n return {\n keyframes: [\n {\n transform: `translate(0, ${snapshot.rect.y - rect.y + translate.y}px)`,\n opacity: snapshot.opacity,\n },\n { transform: \"translate(0, 0)\", opacity: 1 },\n ],\n duration: snapshot.duration,\n easing: animation.easing.fade,\n };\n }\n return undefined;\n });\n const pull = (offset, cancel) => {\n if (closeOnPullUp || closeOnPullDown) {\n setPullOffset(offset);\n let duration = 0;\n if (carouselRef.current) {\n duration = animation.fade * (cancel ? 2 : 1);\n preparePullAnimation({\n rect: carouselRef.current.getBoundingClientRect(),\n opacity: pullOpacity.current,\n duration,\n });\n }\n cleanupPullOffset(() => {\n setPullOffset(0);\n setSwipeState(SwipeState.NONE);\n }, duration);\n setSwipeState(SwipeState.ANIMATION);\n if (!cancel) {\n close();\n }\n }\n };\n const { prepareAnimation, isAnimationPlaying } = useAnimation(carouselRef, (snapshot, rect, translate) => {\n var _a;\n if (carouselRef.current && containerRect && ((_a = state.animation) === null || _a === void 0 ? void 0 : _a.duration)) {\n const parsedSpacing = parseLengthPercentage(carousel.spacing);\n const spacingValue = (parsedSpacing.percent ? (parsedSpacing.percent * containerRect.width) / 100 : parsedSpacing.pixel) || 0;\n return {\n keyframes: [\n {\n transform: `translate(${rtl(state.globalIndex - snapshot.index) * (containerRect.width + spacingValue) +\n snapshot.rect.x -\n rect.x +\n translate.x}px, 0)`,\n },\n { transform: \"translate(0, 0)\" },\n ],\n duration: state.animation.duration,\n easing: state.animation.easing,\n };\n }\n return undefined;\n });\n const swipe = useEventCallback((action) => {\n var _a, _b;\n const currentSwipeOffset = action.offset || 0;\n const swipeDuration = !currentSwipeOffset ? ((_a = animation.navigation) !== null && _a !== void 0 ? _a : animation.swipe) : animation.swipe;\n const swipeEasing = !currentSwipeOffset && !isAnimationPlaying() ? animation.easing.navigation : animation.easing.swipe;\n let { direction } = action;\n const count = (_b = action.count) !== null && _b !== void 0 ? _b : 1;\n let newSwipeState = SwipeState.ANIMATION;\n let newSwipeAnimationDuration = swipeDuration * count;\n if (!direction) {\n const containerWidth = containerRect === null || containerRect === void 0 ? void 0 : containerRect.width;\n const elapsedTime = action.duration || 0;\n const expectedTime = containerWidth\n ? (swipeDuration / containerWidth) * Math.abs(currentSwipeOffset)\n : swipeDuration;\n if (count !== 0) {\n if (elapsedTime < expectedTime) {\n newSwipeAnimationDuration =\n (newSwipeAnimationDuration / expectedTime) * Math.max(elapsedTime, expectedTime / 5);\n }\n else if (containerWidth) {\n newSwipeAnimationDuration =\n (swipeDuration / containerWidth) * (containerWidth - Math.abs(currentSwipeOffset));\n }\n direction = rtl(currentSwipeOffset) > 0 ? ACTION_PREV : ACTION_NEXT;\n }\n else {\n newSwipeAnimationDuration = swipeDuration / 2;\n }\n }\n let increment = 0;\n if (direction === ACTION_PREV) {\n if (isSwipeValid(rtl(1))) {\n increment = -count;\n }\n else {\n newSwipeState = SwipeState.NONE;\n newSwipeAnimationDuration = swipeDuration;\n }\n }\n else if (direction === ACTION_NEXT) {\n if (isSwipeValid(rtl(-1))) {\n increment = count;\n }\n else {\n newSwipeState = SwipeState.NONE;\n newSwipeAnimationDuration = swipeDuration;\n }\n }\n newSwipeAnimationDuration = Math.round(newSwipeAnimationDuration);\n cleanupSwipeOffset(() => {\n setSwipeOffset(0);\n setSwipeState(SwipeState.NONE);\n }, newSwipeAnimationDuration);\n if (carouselRef.current) {\n prepareAnimation({\n rect: carouselRef.current.getBoundingClientRect(),\n index: state.globalIndex,\n });\n }\n setSwipeState(newSwipeState);\n publish(ACTION_SWIPE, {\n type: \"swipe\",\n increment,\n duration: newSwipeAnimationDuration,\n easing: swipeEasing,\n });\n });\n React.useEffect(() => {\n var _a, _b;\n if (((_a = state.animation) === null || _a === void 0 ? void 0 : _a.increment) && ((_b = state.animation) === null || _b === void 0 ? void 0 : _b.duration)) {\n cleanupAnimationIncrement(() => dispatch({ type: \"swipe\", increment: 0 }), state.animation.duration);\n }\n }, [state.animation, dispatch, cleanupAnimationIncrement]);\n const swipeParams = [\n subscribeSensors,\n isSwipeValid,\n (containerRect === null || containerRect === void 0 ? void 0 : containerRect.width) || 0,\n animation.swipe,\n () => setSwipeState(SwipeState.SWIPE),\n (offset) => setSwipeOffset(offset),\n (offset, duration) => swipe({ offset, duration, count: 1 }),\n (offset) => swipe({ offset, count: 0 }),\n ];\n const pullParams = [\n () => {\n if (closeOnPullDown) {\n setSwipeState(SwipeState.PULL);\n }\n },\n (offset) => setPullOffset(offset),\n (offset) => pull(offset),\n (offset) => pull(offset, true),\n ];\n usePointerSwipe(controller, ...swipeParams, closeOnPullUp, closeOnPullDown, ...pullParams, close);\n useWheelSwipe(swipeState, ...swipeParams);\n const focusOnMount = useEventCallback(() => {\n if (controller.focus &&\n getOwnerDocument().querySelector(`.${cssClass(MODULE_PORTAL)} .${cssClass(cssContainerPrefix())}`)) {\n focus();\n }\n });\n React.useEffect(focusOnMount, [focusOnMount]);\n const onViewCallback = useEventCallback(() => {\n var _a;\n (_a = on.view) === null || _a === void 0 ? void 0 : _a.call(on, { index: state.currentIndex });\n });\n React.useEffect(onViewCallback, [state.globalIndex, onViewCallback]);\n React.useEffect(() => cleanup(subscribe(ACTION_PREV, (action) => swipe({ direction: ACTION_PREV, ...action })), subscribe(ACTION_NEXT, (action) => swipe({ direction: ACTION_NEXT, ...action })), subscribe(ACTION_SWIPE, (action) => dispatch(action))), [subscribe, swipe, dispatch]);\n const context = React.useMemo(() => ({\n prev,\n next,\n close,\n focus,\n slideRect: containerRect ? computeSlideRect(containerRect, carousel.padding) : { width: 0, height: 0 },\n containerRect: containerRect || { width: 0, height: 0 },\n subscribeSensors,\n containerRef,\n setCarouselRef,\n toolbarWidth,\n setToolbarWidth,\n }), [\n prev,\n next,\n close,\n focus,\n subscribeSensors,\n containerRect,\n containerRef,\n setCarouselRef,\n toolbarWidth,\n setToolbarWidth,\n carousel.padding,\n ]);\n React.useImperativeHandle(controller.ref, () => ({\n prev,\n next,\n close,\n focus,\n getLightboxProps,\n getLightboxState,\n }), [prev, next, close, focus, getLightboxProps, getLightboxState]);\n return (React.createElement(\"div\", { ref: handleContainerRef, className: clsx(cssClass(cssContainerPrefix()), cssClass(CLASS_FLEX_CENTER)), style: {\n ...(swipeState === SwipeState.SWIPE\n ? { [cssVar(\"swipe_offset\")]: `${Math.round(swipeOffset.current)}px` }\n : null),\n ...(swipeState === SwipeState.PULL\n ? {\n [cssVar(\"pull_offset\")]: `${Math.round(pullOffset.current)}px`,\n [cssVar(\"pull_opacity\")]: `${pullOpacity.current}`,\n }\n : null),\n ...(controller.touchAction !== \"none\" ? { [cssVar(\"controller_touch_action\")]: controller.touchAction } : null),\n ...styles.container,\n }, tabIndex: -1, ...registerSensors }, containerRect && (React.createElement(ControllerContext.Provider, { value: context },\n children, (_a = render.controls) === null || _a === void 0 ? void 0 :\n _a.call(render)))));\n}\nconst ControllerModule = createModule(MODULE_CONTROLLER, Controller);\n\nfunction cssPrefix$2(value) {\n return composePrefix(MODULE_CAROUSEL, value);\n}\nfunction cssSlidePrefix(value) {\n return composePrefix(CLASS_SLIDE, value);\n}\nfunction CarouselSlide({ slide, offset }) {\n const containerRef = React.useRef(null);\n const { currentIndex, slides } = useLightboxState();\n const { slideRect, focus } = useController();\n const { render, carousel: { imageFit, imageProps }, on: { click: onClick }, styles: { slide: style }, labels, } = useLightboxProps();\n const { getOwnerDocument } = useDocumentContext();\n const offscreen = offset !== 0;\n React.useEffect(() => {\n var _a;\n if (offscreen && ((_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.contains(getOwnerDocument().activeElement))) {\n focus();\n }\n }, [offscreen, focus, getOwnerDocument]);\n const renderSlide = () => {\n var _a, _b, _c, _d;\n let rendered = (_a = render.slide) === null || _a === void 0 ? void 0 : _a.call(render, { slide, offset, rect: slideRect });\n if (!rendered && isImageSlide(slide)) {\n rendered = (React.createElement(ImageSlide, { slide: slide, offset: offset, render: render, rect: slideRect, imageFit: imageFit, imageProps: imageProps, onClick: !offscreen ? () => onClick === null || onClick === void 0 ? void 0 : onClick({ index: currentIndex }) : undefined }));\n }\n return rendered ? (React.createElement(React.Fragment, null, (_b = render.slideHeader) === null || _b === void 0 ? void 0 :\n _b.call(render, { slide }),\n ((_c = render.slideContainer) !== null && _c !== void 0 ? _c : (({ children }) => children))({ slide, children: rendered }), (_d = render.slideFooter) === null || _d === void 0 ? void 0 :\n _d.call(render, { slide }))) : null;\n };\n return (React.createElement(\"div\", { ref: containerRef, className: clsx(cssClass(cssSlidePrefix()), !offscreen && cssClass(cssSlidePrefix(\"current\")), cssClass(CLASS_FLEX_CENTER)), ...makeInertWhen(offscreen), style: style, role: \"group\", \"aria-roledescription\": translateLabel(labels, \"Slide\"), \"aria-label\": translateSlideCounter(labels, slides, currentIndex + offset) }, renderSlide()));\n}\nfunction Placeholder() {\n const style = useLightboxProps().styles.slide;\n return React.createElement(\"div\", { className: cssClass(CLASS_SLIDE), style: style });\n}\nfunction Carousel({ carousel, labels }) {\n const { slides, currentIndex, globalIndex } = useLightboxState();\n const { setCarouselRef } = useController();\n const { autoPlaying, focusWithin } = useA11yContext();\n const spacingValue = parseLengthPercentage(carousel.spacing);\n const paddingValue = parseLengthPercentage(carousel.padding);\n const preload = calculatePreload(carousel, slides, 1);\n const items = [];\n if (hasSlides(slides)) {\n for (let index = currentIndex - preload; index <= currentIndex + preload; index += 1) {\n const slide = getSlide(slides, index);\n const key = globalIndex - currentIndex + index;\n const placeholder = carousel.finite && (index < 0 || index > slides.length - 1);\n items.push(!placeholder\n ? {\n key: [`${key}`, getSlideKey(slide)].filter(Boolean).join(\"|\"),\n offset: index - currentIndex,\n slide,\n }\n : { key });\n }\n }\n return (React.createElement(\"div\", { ref: setCarouselRef, className: clsx(cssClass(cssPrefix$2()), items.length > 0 && cssClass(cssPrefix$2(\"with_slides\"))), style: {\n [`${cssVar(cssPrefix$2(\"slides_count\"))}`]: items.length,\n [`${cssVar(cssPrefix$2(\"spacing_px\"))}`]: spacingValue.pixel || 0,\n [`${cssVar(cssPrefix$2(\"spacing_percent\"))}`]: spacingValue.percent || 0,\n [`${cssVar(cssPrefix$2(\"padding_px\"))}`]: paddingValue.pixel || 0,\n [`${cssVar(cssPrefix$2(\"padding_percent\"))}`]: paddingValue.percent || 0,\n }, role: \"region\", \"aria-live\": autoPlaying && !focusWithin ? \"off\" : \"polite\", \"aria-roledescription\": translateLabel(labels, \"Carousel\"), \"aria-label\": translateLabel(labels, \"Photo gallery\") }, items.map(({ key, slide, offset }) => slide ? React.createElement(CarouselSlide, { key: key, slide: slide, offset: offset }) : React.createElement(Placeholder, { key: key }))));\n}\nconst CarouselModule = createModule(MODULE_CAROUSEL, Carousel);\n\nfunction useNavigationState() {\n const { carousel } = useLightboxProps();\n const { slides, currentIndex } = useLightboxState();\n const prevDisabled = slides.length === 0 || (carousel.finite && currentIndex === 0);\n const nextDisabled = slides.length === 0 || (carousel.finite && currentIndex === slides.length - 1);\n return { prevDisabled, nextDisabled };\n}\n\nfunction useKeyboardNavigation(subscribeSensors) {\n var _a;\n const isRTL = useRTL();\n const { publish } = useEvents();\n const { animation } = useLightboxProps();\n const { prevDisabled, nextDisabled } = useNavigationState();\n const throttle = ((_a = animation.navigation) !== null && _a !== void 0 ? _a : animation.swipe) / 2;\n const prev = useThrottle(() => publish(ACTION_PREV), throttle);\n const next = useThrottle(() => publish(ACTION_NEXT), throttle);\n const handleKeyDown = useEventCallback((event) => {\n switch (event.key) {\n case VK_ESCAPE:\n publish(ACTION_CLOSE);\n break;\n case VK_ARROW_LEFT:\n if (!(isRTL ? nextDisabled : prevDisabled))\n (isRTL ? next : prev)();\n break;\n case VK_ARROW_RIGHT:\n if (!(isRTL ? prevDisabled : nextDisabled))\n (isRTL ? prev : next)();\n break;\n default:\n }\n });\n React.useEffect(() => subscribeSensors(EVENT_ON_KEY_DOWN, handleKeyDown), [subscribeSensors, handleKeyDown]);\n}\n\nfunction NavigationButton({ label, icon, renderIcon, action, onClick, disabled, style }) {\n return (React.createElement(IconButton, { label: label, icon: icon, renderIcon: renderIcon, className: cssClass(`navigation_${action}`), disabled: disabled, onClick: onClick, style: style, ...useLoseFocus(useController().focus, disabled) }));\n}\nfunction Navigation({ render: { buttonPrev, buttonNext, iconPrev, iconNext }, styles }) {\n const { prev, next, subscribeSensors } = useController();\n const { prevDisabled, nextDisabled } = useNavigationState();\n useKeyboardNavigation(subscribeSensors);\n return (React.createElement(React.Fragment, null,\n buttonPrev ? (buttonPrev()) : (React.createElement(NavigationButton, { label: \"Previous\", action: ACTION_PREV, icon: PreviousIcon, renderIcon: iconPrev, style: styles.navigationPrev, disabled: prevDisabled, onClick: prev })),\n buttonNext ? (buttonNext()) : (React.createElement(NavigationButton, { label: \"Next\", action: ACTION_NEXT, icon: NextIcon, renderIcon: iconNext, style: styles.navigationNext, disabled: nextDisabled, onClick: next }))));\n}\nconst NavigationModule = createModule(MODULE_NAVIGATION, Navigation);\n\nconst noScroll = cssClass(CLASS_NO_SCROLL);\nconst noScrollPadding = cssClass(CLASS_NO_SCROLL_PADDING);\nfunction isHTMLElement(element) {\n return \"style\" in element;\n}\nfunction padScrollbar(element, padding, rtl) {\n const styles = window.getComputedStyle(element);\n const property = rtl ? \"padding-left\" : \"padding-right\";\n const computedValue = rtl ? styles.paddingLeft : styles.paddingRight;\n const originalValue = element.style.getPropertyValue(property);\n element.style.setProperty(property, `${(parseInt(computedValue) || 0) + padding}px`);\n return () => {\n if (originalValue) {\n element.style.setProperty(property, originalValue);\n }\n else {\n element.style.removeProperty(property);\n }\n };\n}\nfunction NoScroll({ noScroll: { disabled }, children }) {\n const rtl = useRTL();\n const { getOwnerDocument, getOwnerWindow } = useDocumentContext();\n React.useEffect(() => {\n if (disabled)\n return () => { };\n const cleanup = [];\n const ownerWindow = getOwnerWindow();\n const { body, documentElement } = getOwnerDocument();\n const scrollbar = Math.round(ownerWindow.innerWidth - documentElement.clientWidth);\n if (scrollbar > 0) {\n cleanup.push(padScrollbar(body, scrollbar, rtl));\n const elements = body.getElementsByTagName(\"*\");\n for (let i = 0; i < elements.length; i += 1) {\n const element = elements[i];\n if (isHTMLElement(element) &&\n ownerWindow.getComputedStyle(element).getPropertyValue(\"position\") === \"fixed\" &&\n !element.classList.contains(noScrollPadding)) {\n cleanup.push(padScrollbar(element, scrollbar, rtl));\n }\n }\n }\n body.classList.add(noScroll);\n return () => {\n body.classList.remove(noScroll);\n cleanup.forEach((clean) => clean());\n };\n }, [rtl, disabled, getOwnerDocument, getOwnerWindow]);\n return React.createElement(React.Fragment, null, children);\n}\nconst NoScrollModule = createModule(MODULE_NO_SCROLL, NoScroll);\n\nfunction cssPrefix$1(value) {\n return composePrefix(MODULE_PORTAL, value);\n}\nfunction setAttribute(element, attribute, value) {\n const previousValue = element.getAttribute(attribute);\n element.setAttribute(attribute, value);\n return () => {\n if (previousValue) {\n element.setAttribute(attribute, previousValue);\n }\n else {\n element.removeAttribute(attribute);\n }\n };\n}\nfunction Portal({ children, animation, styles, className, on, portal, close, labels }) {\n const [mounted, setMounted] = React.useState(false);\n const [visible, setVisible] = React.useState(false);\n const cleanup = React.useRef([]);\n const restoreFocus = React.useRef(null);\n const { setTimeout } = useTimeouts();\n const { subscribe } = useEvents();\n const reduceMotion = useMotionPreference();\n const animationDuration = !reduceMotion ? animation.fade : 0;\n React.useEffect(() => {\n setMounted(true);\n return () => {\n setMounted(false);\n setVisible(false);\n };\n }, []);\n const handleCleanup = useEventCallback(() => {\n cleanup.current.forEach((clean) => clean());\n cleanup.current = [];\n });\n const handleClose = useEventCallback(() => {\n var _a;\n setVisible(false);\n handleCleanup();\n (_a = on.exiting) === null || _a === void 0 ? void 0 : _a.call(on);\n setTimeout(() => {\n var _a;\n (_a = on.exited) === null || _a === void 0 ? void 0 : _a.call(on);\n close();\n }, animationDuration);\n });\n React.useEffect(() => subscribe(ACTION_CLOSE, handleClose), [subscribe, handleClose]);\n const handleEnter = useEventCallback((node) => {\n var _a, _b, _c;\n reflow(node);\n setVisible(true);\n (_a = on.entering) === null || _a === void 0 ? void 0 : _a.call(on);\n const elements = (_c = (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.children) !== null && _c !== void 0 ? _c : [];\n for (let i = 0; i < elements.length; i += 1) {\n const element = elements[i];\n if ([\"TEMPLATE\", \"SCRIPT\", \"STYLE\"].indexOf(element.tagName) === -1 && element !== node) {\n cleanup.current.push(setAttribute(element, \"inert\", \"\"));\n cleanup.current.push(setAttribute(element, \"aria-hidden\", \"true\"));\n }\n }\n cleanup.current.push(() => {\n var _a, _b;\n (_b = (_a = restoreFocus.current) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n setTimeout(() => {\n var _a;\n (_a = on.entered) === null || _a === void 0 ? void 0 : _a.call(on);\n }, animationDuration);\n });\n const handleRef = React.useCallback((node) => {\n if (node) {\n handleEnter(node);\n }\n else {\n handleCleanup();\n }\n }, [handleEnter, handleCleanup]);\n return mounted\n ? createPortal(React.createElement(LightboxRoot, { ref: handleRef, className: clsx(className, cssClass(cssPrefix$1()), cssClass(CLASS_NO_SCROLL_PADDING), visible && cssClass(cssPrefix$1(\"open\"))), \"aria-modal\": true, role: \"dialog\", \"aria-label\": translateLabel(labels, \"Lightbox\"), style: {\n ...(animation.fade !== LightboxDefaultProps.animation.fade\n ? { [cssVar(\"fade_animation_duration\")]: `${animationDuration}ms` }\n : null),\n ...(animation.easing.fade !== LightboxDefaultProps.animation.easing.fade\n ? { [cssVar(\"fade_animation_timing_function\")]: animation.easing.fade }\n : null),\n ...styles.root,\n }, onFocus: (event) => {\n if (!restoreFocus.current) {\n restoreFocus.current = event.relatedTarget;\n }\n } }, children), portal.root || document.body)\n : null;\n}\nconst PortalModule = createModule(MODULE_PORTAL, Portal);\n\nfunction Root({ children }) {\n return React.createElement(React.Fragment, null, children);\n}\nconst RootModule = createModule(MODULE_ROOT, Root);\n\nfunction cssPrefix(value) {\n return composePrefix(MODULE_TOOLBAR, value);\n}\nfunction Toolbar({ toolbar: { buttons }, render: { buttonClose, iconClose }, styles }) {\n const { close, setToolbarWidth } = useController();\n const { setContainerRef, containerRect } = useContainerRect();\n useLayoutEffect(() => {\n setToolbarWidth(containerRect === null || containerRect === void 0 ? void 0 : containerRect.width);\n }, [setToolbarWidth, containerRect === null || containerRect === void 0 ? void 0 : containerRect.width]);\n const renderCloseButton = () => {\n if (buttonClose)\n return buttonClose();\n return React.createElement(IconButton, { key: ACTION_CLOSE, label: \"Close\", icon: CloseIcon, renderIcon: iconClose, onClick: close });\n };\n return (React.createElement(\"div\", { ref: setContainerRef, style: styles.toolbar, className: cssClass(cssPrefix()) }, buttons === null || buttons === void 0 ? void 0 : buttons.map((button) => (button === ACTION_CLOSE ? renderCloseButton() : button))));\n}\nconst ToolbarModule = createModule(MODULE_TOOLBAR, Toolbar);\n\nfunction renderNode(node, props) {\n var _a;\n return React.createElement(node.module.component, { key: node.module.name, ...props }, (_a = node.children) === null || _a === void 0 ? void 0 : _a.map((child) => renderNode(child, props)));\n}\nfunction mergeAnimation(defaultAnimation, animation = {}) {\n const { easing: defaultAnimationEasing, ...restDefaultAnimation } = defaultAnimation;\n const { easing, ...restAnimation } = animation;\n return {\n easing: { ...defaultAnimationEasing, ...easing },\n ...restDefaultAnimation,\n ...restAnimation,\n };\n}\nfunction Lightbox({ carousel, animation, render, toolbar, controller, noScroll, on, plugins, slides, index, ...restProps }) {\n const { animation: defaultAnimation, carousel: defaultCarousel, render: defaultRender, toolbar: defaultToolbar, controller: defaultController, noScroll: defaultNoScroll, on: defaultOn, slides: defaultSlides, index: defaultIndex, plugins: defaultPlugins, ...restDefaultProps } = LightboxDefaultProps;\n const { config, augmentation } = withPlugins([\n createNode(PortalModule, [\n createNode(NoScrollModule, [\n createNode(ControllerModule, [\n createNode(CarouselModule),\n createNode(ToolbarModule),\n createNode(NavigationModule),\n ]),\n ]),\n ]),\n ], plugins || defaultPlugins);\n const props = augmentation({\n animation: mergeAnimation(defaultAnimation, animation),\n carousel: { ...defaultCarousel, ...carousel },\n render: { ...defaultRender, ...render },\n toolbar: { ...defaultToolbar, ...toolbar },\n controller: { ...defaultController, ...controller },\n noScroll: { ...defaultNoScroll, ...noScroll },\n on: { ...defaultOn, ...on },\n ...restDefaultProps,\n ...restProps,\n });\n if (!props.open)\n return null;\n return (React.createElement(LightboxPropsProvider, { ...props },\n React.createElement(LightboxStateProvider, { slides: slides || defaultSlides, index: parseInt(index || defaultIndex) },\n React.createElement(TimeoutsProvider, null,\n React.createElement(EventsProvider, null,\n React.createElement(A11yContextProvider, null, renderNode(createNode(RootModule, config), props)))))));\n}\n\nexport { A11yContext, A11yContextProvider, ACTION_CLOSE, ACTION_NEXT, ACTION_PREV, ACTION_SWIPE, CLASS_FLEX_CENTER, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, CLASS_SLIDE, CLASS_SLIDE_WRAPPER, Carousel, CarouselModule, CloseIcon, Controller, ControllerContext, ControllerModule, DocumentContext, DocumentContextProvider, ELEMENT_BUTTON, ELEMENT_ICON, EVENT_ON_KEY_DOWN, EVENT_ON_KEY_UP, EVENT_ON_POINTER_CANCEL, EVENT_ON_POINTER_DOWN, EVENT_ON_POINTER_LEAVE, EVENT_ON_POINTER_MOVE, EVENT_ON_POINTER_UP, EVENT_ON_WHEEL, ErrorIcon, EventsContext, EventsProvider, IMAGE_FIT_CONTAIN, IMAGE_FIT_COVER, IconButton, ImageSlide, Lightbox, LightboxDefaultProps, LightboxDispatchContext, LightboxPropsContext, LightboxPropsProvider, LightboxRoot, LightboxStateContext, LightboxStateProvider, LoadingIcon, MODULE_CAROUSEL, MODULE_CONTROLLER, MODULE_NAVIGATION, MODULE_NO_SCROLL, MODULE_PORTAL, MODULE_ROOT, MODULE_TOOLBAR, Navigation, NavigationButton, NavigationModule, NextIcon, NoScroll, NoScrollModule, Portal, PortalModule, PreviousIcon, Root, RootModule, SLIDE_STATUS_COMPLETE, SLIDE_STATUS_ERROR, SLIDE_STATUS_LOADING, SLIDE_STATUS_PLACEHOLDER, SwipeState, TimeoutsContext, TimeoutsProvider, Toolbar, ToolbarModule, UNKNOWN_ACTION_TYPE, VK_ARROW_LEFT, VK_ARROW_RIGHT, VK_ESCAPE, activeSlideStatus, addToolbarButton, calculatePreload, cleanup, clsx, composePrefix, computeSlideRect, createIcon, createIconDisabled, createModule, createNode, cssClass, cssVar, Lightbox as default, devicePixelRatio, getSlide, getSlideIfPresent, getSlideIndex, getSlideKey, hasSlides, hasWindow, isImageFitCover, isImageSlide, label, makeComposePrefix, makeInertWhen, makeUseContext, parseInt, parseLengthPercentage, reflow, round, setRef, stopNavigationEventsPropagation, translateLabel, translateSlideCounter, useA11yContext, useAnimation, useContainerRect, useController, useDelay, useDocumentContext, useEventCallback, useEvents, useForkRef, useKeyboardNavigation, useLayoutEffect, useLightboxDispatch, useLightboxProps, useLightboxState, useLoseFocus, useMotionPreference, useNavigationState, usePointerEvents, usePointerSwipe, usePreventWheelDefaults, useRTL, useSensors, useThrottle, useTimeouts, useWheelSwipe, withPlugins };","import * as React from 'react';\nimport { useLightboxProps, useMotionPreference, useEventCallback, useLayoutEffect, useLightboxState, isImageSlide, isImageFitCover, round, useDocumentContext, useController, usePointerEvents, cleanup, makeUseContext, createIcon, IconButton, devicePixelRatio, ImageSlide, clsx, cssClass, addToolbarButton, createModule } from '../../index.js';\nimport { EVENT_ON_KEY_DOWN, EVENT_ON_WHEEL, UNKNOWN_ACTION_TYPE, CLASS_FULLSIZE, CLASS_FLEX_CENTER, CLASS_SLIDE_WRAPPER, CLASS_SLIDE_WRAPPER_INTERACTIVE, PLUGIN_ZOOM } from '../../types.js';\n\nconst defaultZoomProps = {\n minZoom: 1,\n maxZoomPixelRatio: 1,\n zoomInMultiplier: 2,\n doubleTapDelay: 300,\n doubleClickDelay: 500,\n doubleClickMaxStops: 2,\n keyboardMoveDistance: 50,\n wheelZoomDistanceFactor: 100,\n pinchZoomDistanceFactor: 100,\n pinchZoomV4: false,\n scrollToZoom: false,\n};\nfunction validateMinZoom(minZoom) {\n return Math.min(Math.max(minZoom, Number.EPSILON), 1);\n}\nfunction resolveZoomProps(zoom) {\n const { minZoom, ...rest } = { ...defaultZoomProps, ...zoom };\n return { minZoom: validateMinZoom(minZoom), ...rest };\n}\n\nfunction useZoomAnimation(zoom, offsetX, offsetY, zoomWrapperRef) {\n const zoomAnimation = React.useRef(undefined);\n const zoomAnimationStart = React.useRef(undefined);\n const { zoom: zoomAnimationDuration } = useLightboxProps().animation;\n const reduceMotion = useMotionPreference();\n const playZoomAnimation = useEventCallback(() => {\n var _a, _b, _c;\n (_a = zoomAnimation.current) === null || _a === void 0 ? void 0 : _a.cancel();\n zoomAnimation.current = undefined;\n if (zoomAnimationStart.current && (zoomWrapperRef === null || zoomWrapperRef === void 0 ? void 0 : zoomWrapperRef.current)) {\n try {\n zoomAnimation.current = (_c = (_b = zoomWrapperRef.current).animate) === null || _c === void 0 ? void 0 : _c.call(_b, [\n { transform: zoomAnimationStart.current },\n { transform: `scale(${zoom}) translateX(${offsetX}px) translateY(${offsetY}px)` },\n ], {\n duration: !reduceMotion ? (zoomAnimationDuration !== null && zoomAnimationDuration !== void 0 ? zoomAnimationDuration : 500) : 0,\n easing: zoomAnimation.current ? \"ease-out\" : \"ease-in-out\",\n });\n }\n catch (err) {\n console.error(err);\n }\n zoomAnimationStart.current = undefined;\n if (zoomAnimation.current) {\n zoomAnimation.current.onfinish = () => {\n zoomAnimation.current = undefined;\n };\n }\n }\n });\n useLayoutEffect(playZoomAnimation, [zoom, offsetX, offsetY, playZoomAnimation]);\n return React.useCallback(() => {\n zoomAnimationStart.current = (zoomWrapperRef === null || zoomWrapperRef === void 0 ? void 0 : zoomWrapperRef.current)\n ? window.getComputedStyle(zoomWrapperRef.current).transform\n : undefined;\n }, [zoomWrapperRef]);\n}\n\nfunction useZoomCallback(zoom, disabled) {\n const { on } = useLightboxProps();\n const onZoomCallback = useEventCallback(() => {\n var _a;\n if (!disabled) {\n (_a = on.zoom) === null || _a === void 0 ? void 0 : _a.call(on, { zoom });\n }\n });\n React.useEffect(onZoomCallback, [zoom, onZoomCallback]);\n}\n\nfunction useZoomProps() {\n const { zoom } = useLightboxProps();\n return resolveZoomProps(zoom);\n}\n\nfunction useZoomImageRect(slideRect, imageDimensions) {\n var _a, _b;\n let imageRect = { width: 0, height: 0 };\n let maxImageRect = { width: 0, height: 0 };\n const { currentSlide } = useLightboxState();\n const { imageFit } = useLightboxProps().carousel;\n const { maxZoomPixelRatio } = useZoomProps();\n if (slideRect && currentSlide) {\n const slide = { ...currentSlide, ...imageDimensions };\n if (isImageSlide(slide)) {\n const cover = isImageFitCover(slide, imageFit);\n const width = Math.max(...(((_a = slide.srcSet) === null || _a === void 0 ? void 0 : _a.map((x) => x.width)) || []).concat(slide.width ? [slide.width] : []));\n const height = Math.max(...(((_b = slide.srcSet) === null || _b === void 0 ? void 0 : _b.map((x) => x.height)) || []).concat(slide.height ? [slide.height] : []));\n if (width > 0 && height > 0 && slideRect.width > 0 && slideRect.height > 0) {\n maxImageRect = cover\n ? {\n width: Math.round(Math.min(width, (slideRect.width / slideRect.height) * height)),\n height: Math.round(Math.min(height, (slideRect.height / slideRect.width) * width)),\n }\n : { width, height };\n maxImageRect = {\n width: maxImageRect.width * maxZoomPixelRatio,\n height: maxImageRect.height * maxZoomPixelRatio,\n };\n imageRect = cover\n ? {\n width: Math.min(slideRect.width, maxImageRect.width, width),\n height: Math.min(slideRect.height, maxImageRect.height, height),\n }\n : {\n width: Math.round(Math.min(slideRect.width, (slideRect.height / height) * width, width)),\n height: Math.round(Math.min(slideRect.height, (slideRect.width / width) * height, height)),\n };\n }\n }\n }\n const maxZoom = imageRect.width ? Math.max(round(maxImageRect.width / imageRect.width, 5), 1) : 1;\n return { imageRect, maxZoom };\n}\n\nfunction distance(pointerA, pointerB) {\n return Math.hypot(pointerA.clientX - pointerB.clientX, pointerA.clientY - pointerB.clientY);\n}\nfunction scaleZoom(value, delta, factor = 100, clamp = 2) {\n return value * Math.min(1 + Math.abs(delta / factor), clamp) ** Math.sign(delta);\n}\nfunction useZoomSensors(zoom, minZoom, maxZoom, disabled, zoomIn, zoomOut, changeZoom, changeOffsets, zoomWrapperRef) {\n const activePointers = React.useRef([]);\n const lastPointerDown = React.useRef(0);\n const pinchZoom = React.useRef(undefined);\n const { globalIndex } = useLightboxState();\n const { getOwnerWindow } = useDocumentContext();\n const { containerRef, subscribeSensors } = useController();\n const { keyboardMoveDistance, zoomInMultiplier, wheelZoomDistanceFactor, scrollToZoom, doubleTapDelay, doubleClickDelay, doubleClickMaxStops, pinchZoomDistanceFactor, pinchZoomV4, } = useZoomProps();\n const translateCoordinates = React.useCallback((event) => {\n if (containerRef.current) {\n const { pageX, pageY } = event;\n const { scrollX, scrollY } = getOwnerWindow();\n const { left, top, width, height } = containerRef.current.getBoundingClientRect();\n return [pageX - left - scrollX - width / 2, pageY - top - scrollY - height / 2];\n }\n return [];\n }, [containerRef, getOwnerWindow]);\n const onKeyDown = useEventCallback((event) => {\n const { key, metaKey, ctrlKey } = event;\n const meta = metaKey || ctrlKey;\n const preventDefault = () => {\n event.preventDefault();\n event.stopPropagation();\n };\n if (zoom > 1) {\n const move = (deltaX, deltaY) => {\n preventDefault();\n changeOffsets(deltaX, deltaY);\n };\n if (key === \"ArrowDown\") {\n move(0, keyboardMoveDistance);\n }\n else if (key === \"ArrowUp\") {\n move(0, -keyboardMoveDistance);\n }\n else if (key === \"ArrowLeft\") {\n move(-keyboardMoveDistance, 0);\n }\n else if (key === \"ArrowRight\") {\n move(keyboardMoveDistance, 0);\n }\n }\n if (key === \"+\" || (meta && key === \"=\")) {\n preventDefault();\n zoomIn();\n }\n else if (key === \"-\" || (meta && key === \"_\")) {\n preventDefault();\n zoomOut();\n }\n else if (meta && key === \"0\") {\n preventDefault();\n changeZoom(1);\n }\n });\n const onWheel = useEventCallback((event) => {\n if (event.ctrlKey || scrollToZoom) {\n if (Math.abs(event.deltaY) > Math.abs(event.deltaX)) {\n event.stopPropagation();\n changeZoom(scaleZoom(zoom, -event.deltaY, wheelZoomDistanceFactor), true, ...translateCoordinates(event));\n return;\n }\n }\n if (zoom > 1) {\n event.stopPropagation();\n if (!scrollToZoom) {\n changeOffsets(event.deltaX, event.deltaY);\n }\n }\n });\n const clearPointer = React.useCallback((event) => {\n const pointers = activePointers.current;\n pointers.splice(0, pointers.length, ...pointers.filter((p) => p.pointerId !== event.pointerId));\n }, []);\n const replacePointer = React.useCallback((event) => {\n clearPointer(event);\n event.persist();\n activePointers.current.push(event);\n }, [clearPointer]);\n const onPointerDown = useEventCallback((event) => {\n var _a;\n const pointers = activePointers.current;\n if ((event.pointerType === \"mouse\" && event.buttons > 1) ||\n !((_a = zoomWrapperRef === null || zoomWrapperRef === void 0 ? void 0 : zoomWrapperRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {\n return;\n }\n if (zoom > 1) {\n event.stopPropagation();\n }\n const { timeStamp } = event;\n if (pointers.length === 0 &&\n timeStamp - lastPointerDown.current < (event.pointerType === \"touch\" ? doubleTapDelay : doubleClickDelay)) {\n lastPointerDown.current = 0;\n const targetZoom = zoom >= 1\n ? zoom !== maxZoom\n ? zoom * Math.max(maxZoom ** (1 / doubleClickMaxStops), zoomInMultiplier)\n : 1\n : zoom !== minZoom\n ? zoom / Math.max(minZoom ** (-1 / doubleClickMaxStops), zoomInMultiplier)\n : 1;\n changeZoom(targetZoom, false, ...translateCoordinates(event));\n }\n else {\n lastPointerDown.current = timeStamp;\n }\n replacePointer(event);\n if (pointers.length === 2) {\n const initialDistance = distance(pointers[0], pointers[1]);\n pinchZoom.current = {\n previousDistance: initialDistance,\n initialDistance: Math.max(initialDistance, 1),\n initialZoom: zoom,\n };\n }\n });\n const onPointerMove = useEventCallback((event) => {\n const pointers = activePointers.current;\n const activePointer = pointers.find((p) => p.pointerId === event.pointerId);\n if (pointers.length === 2 && pinchZoom.current) {\n event.stopPropagation();\n replacePointer(event);\n const currentDistance = distance(pointers[0], pointers[1]);\n const targetZoom = pinchZoomV4\n ? (pinchZoom.current.initialZoom / pinchZoom.current.initialDistance) * currentDistance\n : scaleZoom(zoom, currentDistance - pinchZoom.current.previousDistance, pinchZoomDistanceFactor);\n changeZoom(targetZoom, true, ...pointers\n .map((x) => translateCoordinates(x))\n .reduce((acc, coordinate) => coordinate.map((x, i) => acc[i] + x / 2)));\n pinchZoom.current.previousDistance = currentDistance;\n return;\n }\n if (zoom > 1) {\n event.stopPropagation();\n if (activePointer) {\n if (pointers.length === 1) {\n changeOffsets((activePointer.clientX - event.clientX) / zoom, (activePointer.clientY - event.clientY) / zoom);\n }\n replacePointer(event);\n }\n }\n });\n const onPointerUp = React.useCallback((event) => {\n const pointers = activePointers.current;\n if (pointers.length === 2 && pointers.find((p) => p.pointerId === event.pointerId)) {\n pinchZoom.current = undefined;\n }\n clearPointer(event);\n }, [clearPointer]);\n const cleanupSensors = React.useCallback(() => {\n const pointers = activePointers.current;\n pointers.splice(0, pointers.length);\n lastPointerDown.current = 0;\n pinchZoom.current = undefined;\n }, []);\n usePointerEvents(subscribeSensors, onPointerDown, onPointerMove, onPointerUp, disabled);\n React.useEffect(cleanupSensors, [globalIndex, cleanupSensors]);\n React.useEffect(() => {\n if (!disabled) {\n return cleanup(cleanupSensors, subscribeSensors(EVENT_ON_KEY_DOWN, onKeyDown), subscribeSensors(EVENT_ON_WHEEL, onWheel));\n }\n return () => { };\n }, [disabled, subscribeSensors, cleanupSensors, onKeyDown, onWheel]);\n}\n\nfunction useZoomState(imageRect, maxZoom, zoomWrapperRef) {\n const [zoom, setZoom] = React.useState(1);\n const [offsetX, setOffsetX] = React.useState(0);\n const [offsetY, setOffsetY] = React.useState(0);\n const animate = useZoomAnimation(zoom, offsetX, offsetY, zoomWrapperRef);\n const { currentSlide, globalIndex } = useLightboxState();\n const { containerRect, slideRect } = useController();\n const { minZoom, zoomInMultiplier } = useZoomProps();\n const currentSource = currentSlide && isImageSlide(currentSlide) ? currentSlide.src : undefined;\n const disabled = !currentSource || !(zoomWrapperRef === null || zoomWrapperRef === void 0 ? void 0 : zoomWrapperRef.current);\n useLayoutEffect(() => {\n setZoom(1);\n setOffsetX(0);\n setOffsetY(0);\n }, [globalIndex, currentSource]);\n const changeOffsets = React.useCallback((dx, dy, targetZoom) => {\n const newZoom = targetZoom || zoom;\n const newOffsetX = offsetX - (dx || 0);\n const newOffsetY = offsetY - (dy || 0);\n const maxOffsetX = (imageRect.width * newZoom - slideRect.width) / 2 / newZoom;\n const maxOffsetY = (imageRect.height * newZoom - slideRect.height) / 2 / newZoom;\n setOffsetX(Math.min(Math.abs(newOffsetX), Math.max(maxOffsetX, 0)) * Math.sign(newOffsetX));\n setOffsetY(Math.min(Math.abs(newOffsetY), Math.max(maxOffsetY, 0)) * Math.sign(newOffsetY));\n }, [zoom, offsetX, offsetY, slideRect, imageRect.width, imageRect.height]);\n const changeZoom = React.useCallback((targetZoom, rapid, dx, dy) => {\n const newZoom = round(targetZoom + 0.01 < maxZoom ? (targetZoom - 0.01 > minZoom ? targetZoom : minZoom) : maxZoom, 5);\n if (!rapid) {\n animate();\n }\n changeOffsets(dx ? dx * (1 / zoom - 1 / newZoom) : 0, dy ? dy * (1 / zoom - 1 / newZoom) : 0, newZoom);\n setZoom(newZoom);\n }, [zoom, minZoom, maxZoom, changeOffsets, animate]);\n const handleControllerRectChange = useEventCallback(() => {\n if (zoom > 1) {\n if (zoom > maxZoom) {\n changeZoom(maxZoom, true);\n }\n changeOffsets();\n }\n });\n useLayoutEffect(handleControllerRectChange, [containerRect.width, containerRect.height, handleControllerRectChange]);\n const zoomIn = React.useCallback(() => {\n const targetZoom = zoom * zoomInMultiplier;\n changeZoom(zoom < 1 && targetZoom > 1 ? 1 : targetZoom);\n }, [zoom, zoomInMultiplier, changeZoom]);\n const zoomOut = React.useCallback(() => {\n const targetZoom = zoom / zoomInMultiplier;\n changeZoom(zoom > 1 && targetZoom < 1 ? 1 : targetZoom);\n }, [zoom, zoomInMultiplier, changeZoom]);\n return { zoom, offsetX, offsetY, disabled, changeOffsets, changeZoom, zoomIn, zoomOut };\n}\n\nconst ZoomControllerContext = React.createContext(null);\nconst useZoom = makeUseContext(\"useZoom\", \"ZoomControllerContext\", ZoomControllerContext);\nfunction ZoomContextProvider({ children }) {\n const [zoomWrapper, setZoomWrapper] = React.useState();\n const { slideRect } = useController();\n const { ref, minZoom } = useZoomProps();\n const { imageRect, maxZoom } = useZoomImageRect(slideRect, zoomWrapper === null || zoomWrapper === void 0 ? void 0 : zoomWrapper.imageDimensions);\n const { zoom, offsetX, offsetY, disabled, changeZoom, changeOffsets, zoomIn, zoomOut } = useZoomState(imageRect, maxZoom, zoomWrapper === null || zoomWrapper === void 0 ? void 0 : zoomWrapper.zoomWrapperRef);\n useZoomCallback(zoom, disabled);\n useZoomSensors(zoom, minZoom, maxZoom, disabled, zoomIn, zoomOut, changeZoom, changeOffsets, zoomWrapper === null || zoomWrapper === void 0 ? void 0 : zoomWrapper.zoomWrapperRef);\n const zoomRef = React.useMemo(() => ({ zoom, minZoom, maxZoom, offsetX, offsetY, disabled, zoomIn, zoomOut, changeZoom }), [zoom, minZoom, maxZoom, offsetX, offsetY, disabled, zoomIn, zoomOut, changeZoom]);\n React.useImperativeHandle(ref, () => zoomRef, [zoomRef]);\n const context = React.useMemo(() => ({ ...zoomRef, setZoomWrapper }), [zoomRef, setZoomWrapper]);\n return React.createElement(ZoomControllerContext.Provider, { value: context }, children);\n}\n\nconst ZoomInIcon = createIcon(\"ZoomIn\", React.createElement(React.Fragment, null,\n React.createElement(\"path\", { d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" }),\n React.createElement(\"path\", { d: \"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\" })));\nconst ZoomOutIcon = createIcon(\"ZoomOut\", React.createElement(\"path\", { d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z\" }));\nconst ZoomButton = React.forwardRef(function ZoomButton({ zoomIn, onLoseFocus }, ref) {\n const wasEnabled = React.useRef(false);\n const wasFocused = React.useRef(false);\n const { zoom, minZoom, maxZoom, zoomIn: zoomInCallback, zoomOut: zoomOutCallback, disabled: zoomDisabled, } = useZoom();\n const { render } = useLightboxProps();\n const disabled = zoomDisabled || (zoomIn ? zoom >= maxZoom : zoom <= minZoom);\n React.useEffect(() => {\n if (disabled && wasEnabled.current && wasFocused.current) {\n onLoseFocus();\n }\n if (!disabled) {\n wasEnabled.current = true;\n }\n }, [disabled, onLoseFocus]);\n return (React.createElement(IconButton, { ref: ref, disabled: disabled, label: zoomIn ? \"Zoom in\" : \"Zoom out\", icon: zoomIn ? ZoomInIcon : ZoomOutIcon, renderIcon: zoomIn ? render.iconZoomIn : render.iconZoomOut, onClick: zoomIn ? zoomInCallback : zoomOutCallback, onFocus: () => {\n wasFocused.current = true;\n }, onBlur: () => {\n wasFocused.current = false;\n } }));\n});\n\nfunction ZoomButtonsGroup() {\n const zoomInRef = React.useRef(null);\n const zoomOutRef = React.useRef(null);\n const { focus } = useController();\n const focusSibling = React.useCallback((sibling) => {\n var _a, _b;\n if (!((_a = sibling.current) === null || _a === void 0 ? void 0 : _a.disabled)) {\n (_b = sibling.current) === null || _b === void 0 ? void 0 : _b.focus();\n }\n else {\n focus();\n }\n }, [focus]);\n const focusZoomIn = React.useCallback(() => focusSibling(zoomInRef), [focusSibling]);\n const focusZoomOut = React.useCallback(() => focusSibling(zoomOutRef), [focusSibling]);\n return (React.createElement(React.Fragment, null,\n React.createElement(ZoomButton, { zoomIn: true, ref: zoomInRef, onLoseFocus: focusZoomOut }),\n React.createElement(ZoomButton, { ref: zoomOutRef, onLoseFocus: focusZoomIn })));\n}\n\nfunction ZoomToolbarControl() {\n const { render } = useLightboxProps();\n const zoomRef = useZoom();\n if (render.buttonZoom) {\n return React.createElement(React.Fragment, null, render.buttonZoom(zoomRef));\n }\n return React.createElement(ZoomButtonsGroup, null);\n}\n\nfunction isResponsiveImageSlide(slide) {\n var _a;\n return (((_a = slide.srcSet) === null || _a === void 0 ? void 0 : _a.length) || 0) > 0;\n}\nfunction reducer({ current, preload }, { type, source }) {\n switch (type) {\n case \"fetch\":\n if (!current) {\n return { current: source };\n }\n return { current, preload: source };\n case \"done\":\n if (source === preload) {\n return { current: source };\n }\n return { current, preload };\n default:\n throw new Error(UNKNOWN_ACTION_TYPE);\n }\n}\nfunction ResponsiveImage(props) {\n var _a, _b;\n const [{ current, preload }, dispatch] = React.useReducer(reducer, {});\n const { slide: image, rect, imageFit, render, interactive } = props;\n const srcSet = image.srcSet.sort((a, b) => a.width - b.width);\n const width = (_a = image.width) !== null && _a !== void 0 ? _a : srcSet[srcSet.length - 1].width;\n const height = (_b = image.height) !== null && _b !== void 0 ? _b : srcSet[srcSet.length - 1].height;\n const cover = isImageFitCover(image, imageFit);\n const maxWidth = Math.max(...srcSet.map((x) => x.width));\n const targetWidth = Math.min((cover ? Math.max : Math.min)(rect.width, width * (rect.height / height)), maxWidth);\n const pixelDensity = devicePixelRatio();\n const handleResize = useEventCallback(() => {\n var _a;\n const targetSource = (_a = srcSet.find((x) => x.width >= targetWidth * pixelDensity)) !== null && _a !== void 0 ? _a : srcSet[srcSet.length - 1];\n if (!current || srcSet.findIndex((x) => x.src === current) < srcSet.findIndex((x) => x === targetSource)) {\n dispatch({ type: \"fetch\", source: targetSource.src });\n }\n });\n useLayoutEffect(handleResize, [rect.width, rect.height, pixelDensity, handleResize]);\n const handlePreload = useEventCallback((currentPreload) => dispatch({ type: \"done\", source: currentPreload }));\n const style = {\n WebkitTransform: !interactive ? \"translateZ(0)\" : \"initial\",\n };\n if (!cover) {\n Object.assign(style, rect.width / rect.height < width / height ? { width: \"100%\", height: \"auto\" } : { width: \"auto\", height: \"100%\" });\n }\n return (React.createElement(React.Fragment, null,\n preload && preload !== current && (React.createElement(ImageSlide, { key: \"preload\", ...props, offset: undefined, slide: { ...image, src: preload, srcSet: undefined }, style: { position: \"absolute\", visibility: \"hidden\", ...style }, onLoad: () => handlePreload(preload), render: {\n ...render,\n iconLoading: () => null,\n iconError: () => null,\n } })),\n current && (React.createElement(ImageSlide, { key: \"current\", ...props, slide: { ...image, src: current, srcSet: undefined }, style: style }))));\n}\n\nfunction ZoomWrapper({ render, slide, offset, rect }) {\n var _a;\n const [imageDimensions, setImageDimensions] = React.useState();\n const zoomWrapperRef = React.useRef(null);\n const { zoom, maxZoom, offsetX, offsetY, setZoomWrapper } = useZoom();\n const interactive = zoom > 1;\n const { carousel, on } = useLightboxProps();\n const { currentIndex } = useLightboxState();\n useLayoutEffect(() => {\n if (offset === 0) {\n setZoomWrapper({ zoomWrapperRef, imageDimensions });\n return () => setZoomWrapper(undefined);\n }\n return () => { };\n }, [offset, imageDimensions, setZoomWrapper]);\n let rendered = (_a = render.slide) === null || _a === void 0 ? void 0 : _a.call(render, { slide, offset, rect, zoom, maxZoom });\n if (!rendered && isImageSlide(slide)) {\n const slideProps = {\n slide,\n offset,\n rect,\n render,\n imageFit: carousel.imageFit,\n imageProps: carousel.imageProps,\n onClick: offset === 0 ? () => { var _a; return (_a = on.click) === null || _a === void 0 ? void 0 : _a.call(on, { index: currentIndex }); } : undefined,\n };\n rendered = isResponsiveImageSlide(slide) ? (React.createElement(ResponsiveImage, { ...slideProps, slide: slide, interactive: interactive, rect: offset === 0 ? { width: rect.width * zoom, height: rect.height * zoom } : rect })) : (React.createElement(ImageSlide, { onLoad: (img) => setImageDimensions({ width: img.naturalWidth, height: img.naturalHeight }), ...slideProps }));\n }\n if (!rendered)\n return null;\n return (React.createElement(\"div\", { ref: zoomWrapperRef, className: clsx(cssClass(CLASS_FULLSIZE), cssClass(CLASS_FLEX_CENTER), cssClass(CLASS_SLIDE_WRAPPER), interactive && cssClass(CLASS_SLIDE_WRAPPER_INTERACTIVE)), style: offset === 0 ? { transform: `scale(${zoom}) translateX(${offsetX}px) translateY(${offsetY}px)` } : undefined }, rendered));\n}\n\nconst Zoom = ({ augment, addModule }) => {\n augment(({ zoom: zoomProps, toolbar, render, controller, ...restProps }) => {\n const zoom = resolveZoomProps(zoomProps);\n return {\n zoom,\n toolbar: addToolbarButton(toolbar, PLUGIN_ZOOM, React.createElement(ZoomToolbarControl, null)),\n render: {\n ...render,\n slide: (props) => { var _a; return isImageSlide(props.slide) ? React.createElement(ZoomWrapper, { render: render, ...props }) : (_a = render.slide) === null || _a === void 0 ? void 0 : _a.call(render, props); },\n },\n controller: { ...controller, preventDefaultWheelY: zoom.scrollToZoom },\n ...restProps,\n };\n });\n addModule(createModule(PLUGIN_ZOOM, ZoomContextProvider));\n};\n\nexport { Zoom as default };\n","import * as React from 'react';\nimport { useLightboxState, clsx, cssClass, createModule } from '../../index.js';\nimport { MODULE_CONTROLLER, PLUGIN_COUNTER } from '../../types.js';\n\nconst defaultCounterProps = {\n separator: \"/\",\n container: {},\n};\nconst resolveCounterProps = (counter) => ({\n ...defaultCounterProps,\n ...counter,\n});\n\nfunction CounterComponent({ counter }) {\n const { slides, currentIndex } = useLightboxState();\n const { separator, container: { className, ...rest }, className: legacyClassName, ...legacyRest } = resolveCounterProps(counter);\n if (slides.length === 0)\n return null;\n return (React.createElement(\"div\", { className: clsx(cssClass(\"counter\"), className || legacyClassName), ...legacyRest, ...rest, \"aria-hidden\": true },\n currentIndex + 1,\n \" \",\n separator,\n \" \",\n slides.length));\n}\nfunction Counter({ augment, addChild }) {\n augment(({ counter, ...restProps }) => ({\n counter: resolveCounterProps(counter),\n ...restProps,\n }));\n addChild(MODULE_CONTROLLER, createModule(PLUGIN_COUNTER, CounterComponent));\n}\n\nexport { Counter as default };\n","import * as React from 'react';\nimport { makeUseContext, useLightboxState, useTimeouts, useEvents, useController, useA11yContext, useEventCallback, cleanup, createIcon, useLightboxProps, useLoseFocus, IconButton, addToolbarButton, createModule } from '../../index.js';\nimport { SLIDE_STATUS_LOADING, SLIDE_STATUS_PLAYING, ACTIVE_SLIDE_LOADING, ACTIVE_SLIDE_PLAYING, ACTIVE_SLIDE_ERROR, SLIDE_STATUS_ERROR, ACTIVE_SLIDE_COMPLETE, SLIDE_STATUS_COMPLETE, PLUGIN_SLIDESHOW } from '../../types.js';\n\nconst defaultSlideshowProps = {\n autoplay: false,\n delay: 3000,\n ref: null,\n};\nconst resolveSlideshowProps = (slideshow) => ({\n ...defaultSlideshowProps,\n ...slideshow,\n});\n\nconst SlideshowContext = React.createContext(null);\nconst useSlideshow = makeUseContext(\"useSlideshow\", \"SlideshowContext\", SlideshowContext);\nfunction SlideshowContextProvider({ slideshow, carousel: { finite }, on, children }) {\n const { autoplay, delay, ref } = resolveSlideshowProps(slideshow);\n const wasPlaying = React.useRef(autoplay);\n const [playing, setPlaying] = React.useState(autoplay);\n const scheduler = React.useRef(undefined);\n const slideStatus = React.useRef(undefined);\n const { slides, currentIndex } = useLightboxState();\n const { setTimeout, clearTimeout } = useTimeouts();\n const { subscribe } = useEvents();\n const { next } = useController();\n const { setAutoPlaying } = useA11yContext();\n React.useEffect(() => setAutoPlaying(playing), [playing, setAutoPlaying]);\n const disabled = slides.length === 0 || (finite && currentIndex === slides.length - 1);\n const play = React.useCallback(() => {\n if (!playing && !disabled) {\n setPlaying(true);\n }\n }, [playing, disabled]);\n const pause = React.useCallback(() => {\n if (playing) {\n setPlaying(false);\n }\n }, [playing]);\n const cancelScheduler = React.useCallback(() => {\n clearTimeout(scheduler.current);\n scheduler.current = undefined;\n }, [clearTimeout]);\n const scheduleNextSlide = useEventCallback(() => {\n cancelScheduler();\n if (!playing ||\n disabled ||\n slideStatus.current === SLIDE_STATUS_LOADING ||\n slideStatus.current === SLIDE_STATUS_PLAYING) {\n return;\n }\n scheduler.current = setTimeout(() => {\n if (playing) {\n slideStatus.current = undefined;\n next();\n }\n }, delay);\n });\n React.useEffect(scheduleNextSlide, [currentIndex, playing, scheduleNextSlide]);\n React.useEffect(() => {\n if (playing && disabled) {\n setPlaying(false);\n }\n }, [currentIndex, playing, disabled]);\n const onSlideshowStart = useEventCallback(() => { var _a; return (_a = on.slideshowStart) === null || _a === void 0 ? void 0 : _a.call(on); });\n const onSlideshowStop = useEventCallback(() => { var _a; return (_a = on.slideshowStop) === null || _a === void 0 ? void 0 : _a.call(on); });\n React.useEffect(() => {\n if (playing) {\n onSlideshowStart();\n }\n else if (wasPlaying.current) {\n onSlideshowStop();\n }\n wasPlaying.current = playing;\n }, [playing, onSlideshowStart, onSlideshowStop]);\n React.useEffect(() => cleanup(cancelScheduler, subscribe(ACTIVE_SLIDE_LOADING, () => {\n slideStatus.current = SLIDE_STATUS_LOADING;\n cancelScheduler();\n }), subscribe(ACTIVE_SLIDE_PLAYING, () => {\n slideStatus.current = SLIDE_STATUS_PLAYING;\n cancelScheduler();\n }), subscribe(ACTIVE_SLIDE_ERROR, () => {\n slideStatus.current = SLIDE_STATUS_ERROR;\n scheduleNextSlide();\n }), subscribe(ACTIVE_SLIDE_COMPLETE, () => {\n slideStatus.current = SLIDE_STATUS_COMPLETE;\n scheduleNextSlide();\n })), [subscribe, cancelScheduler, scheduleNextSlide]);\n const context = React.useMemo(() => ({ playing, disabled, play, pause }), [playing, disabled, play, pause]);\n React.useImperativeHandle(ref, () => context, [context]);\n return React.createElement(SlideshowContext.Provider, { value: context }, children);\n}\n\nconst PlayIcon = createIcon(\"Play\", React.createElement(\"path\", { d: \"M8 5v14l11-7z\" }));\nconst PauseIcon = createIcon(\"Pause\", React.createElement(\"path\", { d: \"M6 19h4V5H6v14zm8-14v14h4V5h-4z\" }));\nfunction SlideshowButton() {\n const { playing, disabled, play, pause } = useSlideshow();\n const { render } = useLightboxProps();\n const focusListeners = useLoseFocus(useController().focus, disabled);\n if (render.buttonSlideshow) {\n return React.createElement(React.Fragment, null, render.buttonSlideshow({ playing, disabled, play, pause }));\n }\n return (React.createElement(IconButton, { label: playing ? \"Pause\" : \"Play\", icon: playing ? PauseIcon : PlayIcon, renderIcon: playing ? render.iconSlideshowPause : render.iconSlideshowPlay, onClick: playing ? pause : play, disabled: disabled, ...focusListeners }));\n}\n\nfunction Slideshow({ augment, addModule }) {\n augment(({ slideshow, toolbar, ...restProps }) => ({\n toolbar: addToolbarButton(toolbar, PLUGIN_SLIDESHOW, React.createElement(SlideshowButton, null)),\n slideshow: resolveSlideshowProps(slideshow),\n ...restProps,\n }));\n addModule(createModule(PLUGIN_SLIDESHOW, SlideshowContextProvider));\n}\n\nexport { Slideshow as default };\n","import * as React from 'react';\nimport { makeUseContext, useDocumentContext, useLayoutEffect, cleanup, useEventCallback, clsx, cssClass, createIcon, useLightboxProps, IconButton, addToolbarButton, createModule } from '../../index.js';\nimport { PLUGIN_FULLSCREEN, CLASS_FULLSIZE, PLUGIN_THUMBNAILS, MODULE_CONTROLLER } from '../../types.js';\n\nconst defaultFullscreenProps = {\n auto: false,\n ref: null,\n};\nconst resolveFullscreenProps = (fullscreen) => ({\n ...defaultFullscreenProps,\n ...fullscreen,\n});\n\nconst FullscreenContext = React.createContext(null);\nconst useFullscreen = makeUseContext(\"useFullscreen\", \"FullscreenContext\", FullscreenContext);\nfunction FullscreenContextProvider({ fullscreen: fullscreenProps, on, children }) {\n const { auto, ref } = resolveFullscreenProps(fullscreenProps);\n const containerRef = React.useRef(null);\n const [disabled, setDisabled] = React.useState();\n const [fullscreen, setFullscreen] = React.useState(false);\n const wasFullscreen = React.useRef(false);\n const { getOwnerDocument } = useDocumentContext();\n useLayoutEffect(() => {\n var _a, _b, _c, _d;\n const ownerDocument = getOwnerDocument();\n setDisabled(!((_d = (_c = (_b = (_a = ownerDocument.fullscreenEnabled) !== null && _a !== void 0 ? _a : ownerDocument.webkitFullscreenEnabled) !== null && _b !== void 0 ? _b : ownerDocument.mozFullScreenEnabled) !== null && _c !== void 0 ? _c : ownerDocument.msFullscreenEnabled) !== null && _d !== void 0 ? _d : false));\n }, [getOwnerDocument]);\n const getFullscreenElement = React.useCallback(() => {\n var _a;\n const ownerDocument = getOwnerDocument();\n const fullscreenElement = ownerDocument.fullscreenElement ||\n ownerDocument.webkitFullscreenElement ||\n ownerDocument.mozFullScreenElement ||\n ownerDocument.msFullscreenElement;\n return ((_a = fullscreenElement === null || fullscreenElement === void 0 ? void 0 : fullscreenElement.shadowRoot) === null || _a === void 0 ? void 0 : _a.fullscreenElement) || fullscreenElement;\n }, [getOwnerDocument]);\n const enter = React.useCallback(() => {\n const container = containerRef.current;\n try {\n if (container.requestFullscreen) {\n container.requestFullscreen().catch(() => { });\n }\n else if (container.webkitRequestFullscreen) {\n container.webkitRequestFullscreen();\n }\n else if (container.mozRequestFullScreen) {\n container.mozRequestFullScreen();\n }\n else if (container.msRequestFullscreen) {\n container.msRequestFullscreen();\n }\n }\n catch (_) {\n }\n }, []);\n const exit = React.useCallback(() => {\n if (!getFullscreenElement())\n return;\n const ownerDocument = getOwnerDocument();\n try {\n if (ownerDocument.exitFullscreen) {\n ownerDocument.exitFullscreen().catch(() => { });\n }\n else if (ownerDocument.webkitExitFullscreen) {\n ownerDocument.webkitExitFullscreen();\n }\n else if (ownerDocument.mozCancelFullScreen) {\n ownerDocument.mozCancelFullScreen();\n }\n else if (ownerDocument.msExitFullscreen) {\n ownerDocument.msExitFullscreen();\n }\n }\n catch (_) {\n }\n }, [getFullscreenElement, getOwnerDocument]);\n React.useEffect(() => {\n const ownerDocument = getOwnerDocument();\n const listener = () => {\n setFullscreen(getFullscreenElement() === containerRef.current);\n };\n return cleanup(...[\"fullscreenchange\", \"webkitfullscreenchange\", \"mozfullscreenchange\", \"MSFullscreenChange\"].map((event) => {\n ownerDocument.addEventListener(event, listener);\n return () => ownerDocument.removeEventListener(event, listener);\n }));\n }, [getFullscreenElement, getOwnerDocument]);\n const onEnterFullscreen = useEventCallback(() => { var _a; return (_a = on.enterFullscreen) === null || _a === void 0 ? void 0 : _a.call(on); });\n const onExitFullscreen = useEventCallback(() => { var _a; return (_a = on.exitFullscreen) === null || _a === void 0 ? void 0 : _a.call(on); });\n React.useEffect(() => {\n if (fullscreen) {\n wasFullscreen.current = true;\n }\n if (wasFullscreen.current) {\n (fullscreen ? onEnterFullscreen : onExitFullscreen)();\n }\n }, [fullscreen, onEnterFullscreen, onExitFullscreen]);\n const handleAutoFullscreen = useEventCallback(() => {\n var _a;\n (_a = (auto ? enter : null)) === null || _a === void 0 ? void 0 : _a();\n return exit;\n });\n React.useEffect(handleAutoFullscreen, [handleAutoFullscreen]);\n const context = React.useMemo(() => ({ fullscreen, disabled, enter, exit }), [fullscreen, disabled, enter, exit]);\n React.useImperativeHandle(ref, () => context, [context]);\n return (React.createElement(\"div\", { ref: containerRef, className: clsx(cssClass(PLUGIN_FULLSCREEN), cssClass(CLASS_FULLSIZE)) },\n React.createElement(FullscreenContext.Provider, { value: context }, children)));\n}\n\nconst EnterFullscreenIcon = createIcon(\"EnterFullscreen\", React.createElement(\"path\", { d: \"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\" }));\nconst ExitFullscreenIcon = createIcon(\"ExitFullscreen\", React.createElement(\"path\", { d: \"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z\" }));\nfunction FullscreenButton() {\n var _a;\n const { fullscreen, disabled, enter, exit } = useFullscreen();\n const { render } = useLightboxProps();\n if (disabled)\n return null;\n if (render.buttonFullscreen) {\n return React.createElement(React.Fragment, null, (_a = render.buttonFullscreen) === null || _a === void 0 ? void 0 : _a.call(render, { fullscreen, disabled, enter, exit }));\n }\n return (React.createElement(IconButton, { disabled: disabled, label: fullscreen ? \"Exit Fullscreen\" : \"Enter Fullscreen\", icon: fullscreen ? ExitFullscreenIcon : EnterFullscreenIcon, renderIcon: fullscreen ? render.iconExitFullscreen : render.iconEnterFullscreen, onClick: fullscreen ? exit : enter }));\n}\n\nfunction Fullscreen({ augment, contains, addParent }) {\n augment(({ fullscreen, toolbar, ...restProps }) => ({\n toolbar: addToolbarButton(toolbar, PLUGIN_FULLSCREEN, React.createElement(FullscreenButton, null)),\n fullscreen: resolveFullscreenProps(fullscreen),\n ...restProps,\n }));\n addParent(contains(PLUGIN_THUMBNAILS) ? PLUGIN_THUMBNAILS : MODULE_CONTROLLER, createModule(PLUGIN_FULLSCREEN, FullscreenContextProvider));\n}\n\nexport { Fullscreen as default };\n","import * as React from 'react';\nimport { useLightboxProps, composePrefix, createIcon, ImageSlide, isImageSlide, cssClass, makeComposePrefix, useLightboxState, useDocumentContext, useEventCallback, translateSlideCounter, cssVar, clsx, getSlideKey, useRTL, useEvents, useSensors, useKeyboardNavigation, useAnimation, cleanup, calculatePreload, hasSlides, getSlide, translateLabel, makeUseContext, LightboxPropsProvider, createIconDisabled, IconButton, addToolbarButton, createModule } from '../../index.js';\nimport { PLUGIN_THUMBNAILS, ELEMENT_ICON, CLASS_FLEX_CENTER, ACTION_SWIPE, ACTION_NEXT, ACTION_PREV, PLUGIN_FULLSCREEN, MODULE_CONTROLLER } from '../../types.js';\n\nconst defaultThumbnailsProps = {\n ref: null,\n position: \"bottom\",\n width: 120,\n height: 80,\n border: 1,\n borderRadius: 4,\n padding: 4,\n gap: 16,\n imageFit: \"contain\",\n vignette: true,\n hidden: false,\n showToggle: false,\n};\nconst resolveThumbnailsProps = (thumbnails) => ({\n ...defaultThumbnailsProps,\n ...thumbnails,\n});\nfunction useThumbnailsProps() {\n const { thumbnails } = useLightboxProps();\n return resolveThumbnailsProps(thumbnails);\n}\n\nconst cssPrefix = (value) => composePrefix(PLUGIN_THUMBNAILS, value);\nconst cssThumbnailPrefix = (value) => cssPrefix(composePrefix(\"thumbnail\", value));\n\nconst VideoThumbnailIcon = createIcon(\"VideoThumbnail\", React.createElement(\"path\", { d: \"M10 16.5l6-4.5-6-4.5v9zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\" }));\nconst UnknownThumbnailIcon = createIcon(\"UnknownThumbnail\", React.createElement(\"path\", { d: \"M23 18V6c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zM8.5 12.5l2.5 3.01L14.5 11l4.5 6H5l3.5-4.5z\" }));\nfunction renderThumbnail({ slide, render, rect, imageFit }) {\n var _a;\n const customThumbnail = (_a = render.thumbnail) === null || _a === void 0 ? void 0 : _a.call(render, { slide, render, rect, imageFit });\n if (customThumbnail) {\n return customThumbnail;\n }\n const imageSlideProps = { render, rect, imageFit };\n if (slide.thumbnail) {\n return React.createElement(ImageSlide, { slide: { src: slide.thumbnail }, ...imageSlideProps });\n }\n if (isImageSlide(slide)) {\n return React.createElement(ImageSlide, { slide: slide, ...imageSlideProps });\n }\n const thumbnailIconClass = cssClass(cssThumbnailPrefix(ELEMENT_ICON));\n if (slide.type === \"video\") {\n return (React.createElement(React.Fragment, null,\n slide.poster && React.createElement(ImageSlide, { slide: { src: slide.poster }, ...imageSlideProps }),\n React.createElement(VideoThumbnailIcon, { className: thumbnailIconClass })));\n }\n return React.createElement(UnknownThumbnailIcon, { className: thumbnailIconClass });\n}\nconst activePrefix = makeComposePrefix(\"active\");\nconst fadeInPrefix = makeComposePrefix(\"fadein\");\nconst fadeOutPrefix = makeComposePrefix(\"fadeout\");\nconst placeholderPrefix = makeComposePrefix(\"placeholder\");\nconst DELAY = \"delay\";\nconst DURATION = \"duration\";\nfunction Thumbnail({ slide, index, onClick, fadeIn, fadeOut, placeholder, onLoseFocus }) {\n const ref = React.useRef(null);\n const { render, styles, labels } = useLightboxProps();\n const { slides, globalIndex } = useLightboxState();\n const { getOwnerDocument } = useDocumentContext();\n const { width, height, imageFit } = useThumbnailsProps();\n const rect = { width, height };\n const active = index === globalIndex;\n const onLoseFocusCallback = useEventCallback(onLoseFocus);\n React.useEffect(() => {\n if (fadeOut && getOwnerDocument().activeElement === ref.current) {\n onLoseFocusCallback();\n }\n }, [fadeOut, onLoseFocusCallback, getOwnerDocument]);\n return (React.createElement(\"button\", { ref: ref, type: \"button\", className: clsx(cssClass(CLASS_FLEX_CENTER), cssClass(cssThumbnailPrefix()), active && cssClass(cssThumbnailPrefix(activePrefix())), fadeIn && cssClass(cssThumbnailPrefix(fadeInPrefix())), fadeOut && cssClass(cssThumbnailPrefix(fadeOutPrefix())), placeholder && cssClass(cssThumbnailPrefix(placeholderPrefix()))), style: {\n ...(fadeIn\n ? {\n [cssVar(cssThumbnailPrefix(fadeInPrefix(DURATION)))]: `${fadeIn.duration}ms`,\n [cssVar(cssThumbnailPrefix(fadeInPrefix(DELAY)))]: `${fadeIn.delay}ms`,\n }\n : null),\n ...(fadeOut\n ? {\n [cssVar(cssThumbnailPrefix(fadeOutPrefix(DURATION)))]: `${fadeOut.duration}ms`,\n [cssVar(cssThumbnailPrefix(fadeOutPrefix(DELAY)))]: `${fadeOut.delay}ms`,\n }\n : null),\n ...styles.thumbnail,\n }, onClick: onClick, \"aria-current\": active ? true : undefined, \"aria-label\": translateSlideCounter(labels, slides, index) }, slide && renderThumbnail({ slide, render, rect, imageFit })));\n}\n\nfunction isHorizontal(position) {\n return [\"top\", \"bottom\"].includes(position);\n}\nfunction boxSize(thumbnails, dimension) {\n return dimension + 2 * (thumbnails.border + thumbnails.padding) + thumbnails.gap;\n}\nfunction getThumbnailKey(slide) {\n const { thumbnail, poster } = slide || { thumbnail: \"placeholder\" };\n return ((typeof thumbnail === \"string\" && thumbnail) ||\n (typeof poster === \"string\" && poster) ||\n (slide && getSlideKey(slide)) ||\n undefined);\n}\nfunction ThumbnailsTrack({ visible, containerRef }) {\n const track = React.useRef(null);\n const isRTL = useRTL();\n const { publish, subscribe } = useEvents();\n const { carousel, styles, labels } = useLightboxProps();\n const { slides, globalIndex, animation } = useLightboxState();\n const { registerSensors, subscribeSensors } = useSensors();\n useKeyboardNavigation(subscribeSensors);\n const thumbnails = useThumbnailsProps();\n const { position, width, height, border, borderStyle, borderColor, borderRadius, padding, gap, vignette } = thumbnails;\n const offset = ((animation === null || animation === void 0 ? void 0 : animation.duration) !== undefined && (animation === null || animation === void 0 ? void 0 : animation.increment)) || 0;\n const animationDuration = (animation === null || animation === void 0 ? void 0 : animation.duration) || 0;\n const { prepareAnimation } = useAnimation(track, (snapshot) => ({\n keyframes: isHorizontal(position)\n ? [\n {\n transform: `translateX(${(isRTL ? -1 : 1) * boxSize(thumbnails, width) * offset + snapshot}px)`,\n },\n { transform: \"translateX(0)\" },\n ]\n : [\n {\n transform: `translateY(${boxSize(thumbnails, height) * offset + snapshot}px)`,\n },\n { transform: \"translateY(0)\" },\n ],\n duration: animationDuration,\n easing: animation === null || animation === void 0 ? void 0 : animation.easing,\n }));\n const handleControllerSwipe = useEventCallback(() => {\n let animationOffset = 0;\n if (containerRef.current && track.current) {\n const containerRect = containerRef.current.getBoundingClientRect();\n const trackRect = track.current.getBoundingClientRect();\n animationOffset = isHorizontal(position)\n ? trackRect.left - containerRect.left - (containerRect.width - trackRect.width) / 2\n : trackRect.top - containerRect.top - (containerRect.height - trackRect.height) / 2;\n }\n prepareAnimation(animationOffset);\n });\n React.useEffect(() => cleanup(subscribe(ACTION_SWIPE, handleControllerSwipe)), [subscribe, handleControllerSwipe]);\n const preload = calculatePreload(carousel, slides);\n const items = [];\n if (hasSlides(slides)) {\n for (let index = globalIndex - preload - Math.abs(offset); index <= globalIndex + preload + Math.abs(offset); index += 1) {\n const placeholder = (carousel.finite && (index < 0 || index > slides.length - 1)) ||\n (offset < 0 && index < globalIndex - preload) ||\n (offset > 0 && index > globalIndex + preload);\n const slide = !placeholder ? getSlide(slides, index) : null;\n const key = [`${index}`, getThumbnailKey(slide)].filter(Boolean).join(\"|\");\n items.push({ key, index, slide });\n }\n }\n const handleClick = (slideIndex) => () => {\n if (slideIndex > globalIndex) {\n publish(ACTION_NEXT, { count: slideIndex - globalIndex });\n }\n else if (slideIndex < globalIndex) {\n publish(ACTION_PREV, { count: globalIndex - slideIndex });\n }\n };\n return (React.createElement(\"div\", { className: clsx(cssClass(cssPrefix(\"container\")), cssClass(CLASS_FLEX_CENTER)), style: {\n ...(!visible ? { display: \"none\" } : null),\n ...(width !== defaultThumbnailsProps.width ? { [cssVar(cssThumbnailPrefix(\"width\"))]: `${width}px` } : null),\n ...(height !== defaultThumbnailsProps.height\n ? { [cssVar(cssThumbnailPrefix(\"height\"))]: `${height}px` }\n : null),\n ...(border !== defaultThumbnailsProps.border\n ? { [cssVar(cssThumbnailPrefix(\"border\"))]: `${border}px` }\n : null),\n ...(borderStyle ? { [cssVar(cssThumbnailPrefix(\"border_style\"))]: borderStyle } : null),\n ...(borderColor ? { [cssVar(cssThumbnailPrefix(\"border_color\"))]: borderColor } : null),\n ...(borderRadius !== defaultThumbnailsProps.borderRadius\n ? { [cssVar(cssThumbnailPrefix(\"border_radius\"))]: `${borderRadius}px` }\n : null),\n ...(padding !== defaultThumbnailsProps.padding\n ? { [cssVar(cssThumbnailPrefix(\"padding\"))]: `${padding}px` }\n : null),\n ...(gap !== defaultThumbnailsProps.gap ? { [cssVar(cssThumbnailPrefix(\"gap\"))]: `${gap}px` } : null),\n ...styles.thumbnailsContainer,\n } },\n React.createElement(\"nav\", { ref: track, style: styles.thumbnailsTrack, className: clsx(cssClass(cssPrefix(\"track\")), cssClass(CLASS_FLEX_CENTER)), \"aria-label\": translateLabel(labels, \"Thumbnails\"), tabIndex: -1, ...registerSensors }, items.map(({ key, index, slide }) => {\n const fadeAnimationDuration = animationDuration / Math.abs(offset || 1);\n const fadeIn = (offset > 0 && index > globalIndex + preload - offset && index <= globalIndex + preload) ||\n (offset < 0 && index < globalIndex - preload - offset && index >= globalIndex - preload)\n ? {\n duration: fadeAnimationDuration,\n delay: ((offset > 0 ? index - (globalIndex + preload - offset) : globalIndex - preload - offset - index) -\n 1) *\n fadeAnimationDuration,\n }\n : undefined;\n const fadeOut = (offset > 0 && index < globalIndex - preload) || (offset < 0 && index > globalIndex + preload)\n ? {\n duration: fadeAnimationDuration,\n delay: (offset > 0\n ? offset - (globalIndex - preload - index)\n : -offset - (index - (globalIndex + preload))) * fadeAnimationDuration,\n }\n : undefined;\n return (React.createElement(Thumbnail, { key: key, index: index, slide: slide, fadeIn: fadeIn, fadeOut: fadeOut, placeholder: !slide, onClick: handleClick(index), onLoseFocus: () => { var _a; return (_a = track.current) === null || _a === void 0 ? void 0 : _a.focus(); } }));\n })),\n vignette && React.createElement(\"div\", { className: cssClass(cssPrefix(\"vignette\")) })));\n}\n\nconst ThumbnailsContext = React.createContext(null);\nconst useThumbnails = makeUseContext(\"useThumbnails\", \"ThumbnailsContext\", ThumbnailsContext);\nfunction ThumbnailsContextProvider({ children, ...props }) {\n const { ref, position, hidden } = resolveThumbnailsProps(props.thumbnails);\n const [visible, setVisible] = React.useState(!hidden);\n const containerRef = React.useRef(null);\n const context = React.useMemo(() => ({\n visible,\n show: () => setVisible(true),\n hide: () => setVisible(false),\n }), [visible]);\n React.useImperativeHandle(ref, () => context, [context]);\n return (React.createElement(LightboxPropsProvider, { ...props },\n React.createElement(ThumbnailsContext.Provider, { value: context },\n React.createElement(\"div\", { ref: containerRef, className: clsx(cssClass(cssPrefix()), cssClass(cssPrefix(`${position}`))) },\n [\"start\", \"top\"].includes(position) && React.createElement(ThumbnailsTrack, { containerRef: containerRef, visible: visible }),\n React.createElement(\"div\", { className: cssClass(cssPrefix(\"wrapper\")) }, children),\n [\"end\", \"bottom\"].includes(position) && React.createElement(ThumbnailsTrack, { containerRef: containerRef, visible: visible })))));\n}\n\nconst thumbnailsIcon = () => (React.createElement(React.Fragment, null,\n React.createElement(\"path\", { strokeWidth: 2, stroke: \"currentColor\", strokeLinejoin: \"round\", fill: \"none\", d: \"M3 5l18 0l0 14l-18 0l0-14z\" }),\n React.createElement(\"path\", { d: \"M5 14h4v3h-4zM10 14h4v3h-4zM15 14h4v3h-4z\" })));\nconst ThumbnailsVisible = createIcon(\"ThumbnailsVisible\", thumbnailsIcon());\nconst ThumbnailsHidden = createIconDisabled(\"ThumbnailsHidden\", thumbnailsIcon());\nfunction ThumbnailsButton() {\n const { visible, show, hide } = useThumbnails();\n const { render } = useLightboxProps();\n if (render.buttonThumbnails) {\n return React.createElement(React.Fragment, null, render.buttonThumbnails({ visible, show, hide }));\n }\n return (React.createElement(IconButton, { label: visible ? \"Hide thumbnails\" : \"Show thumbnails\", icon: visible ? ThumbnailsVisible : ThumbnailsHidden, renderIcon: visible ? render.iconThumbnailsVisible : render.iconThumbnailsHidden, onClick: visible ? hide : show }));\n}\n\nfunction Thumbnails({ augment, contains, append, addParent }) {\n augment(({ thumbnails: thumbnailsProps, toolbar, ...restProps }) => {\n const thumbnails = resolveThumbnailsProps(thumbnailsProps);\n return {\n toolbar: addToolbarButton(toolbar, PLUGIN_THUMBNAILS, thumbnails.showToggle ? React.createElement(ThumbnailsButton, null) : null),\n thumbnails,\n ...restProps,\n };\n });\n const module = createModule(PLUGIN_THUMBNAILS, ThumbnailsContextProvider);\n if (contains(PLUGIN_FULLSCREEN)) {\n append(PLUGIN_FULLSCREEN, module);\n }\n else {\n addParent(MODULE_CONTROLLER, module);\n }\n}\n\nexport { Thumbnails as default };\n","import React from 'react';\n\nexport interface IProps extends React.HTMLAttributes {\n className?: string;\n children?: React.ReactNode;\n style?: React.CSSProperties;\n}\n\n/**\n * I 기본 컴포넌트\n *\n * HTML 태그를 래핑한 기본 컴포넌트입니다.\n * 주로 아이콘 폰트 (FontAwesome 등)와 함께 사용됩니다.\n *\n * @example\n * ```tsx\n * \n * \n * ```\n */\nexport const I: React.FC = ({ className = '', children, style, ...props }) => {\n return (\n \n {children}\n \n );\n};","/**\n * ImageGallery 컴포넌트\n *\n * yet-another-react-lightbox 기반 이미지 갤러리 컴포넌트입니다.\n * 줌, 슬라이드쇼, 전체화면, 다운로드 기능을 지원합니다.\n *\n * @module composite/ImageGallery\n */\n\nimport React, { useState, useCallback, useEffect, useRef } from 'react';\nimport Lightbox, { Slide } from 'yet-another-react-lightbox';\nimport Zoom from 'yet-another-react-lightbox/plugins/zoom';\nimport Counter from 'yet-another-react-lightbox/plugins/counter';\nimport Slideshow from 'yet-another-react-lightbox/plugins/slideshow';\nimport Fullscreen from 'yet-another-react-lightbox/plugins/fullscreen';\nimport Thumbnails from 'yet-another-react-lightbox/plugins/thumbnails';\nimport 'yet-another-react-lightbox/styles.css';\nimport 'yet-another-react-lightbox/plugins/counter.css';\nimport 'yet-another-react-lightbox/plugins/thumbnails.css';\n\nimport { Button } from '../basic/Button';\nimport { I } from '../basic/I';\nimport { Div } from '../basic/Div';\nimport { Img } from '../basic/Img';\nimport type { EditorAttrs } from '../../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n G7Core?.t?.(key, params) ?? key;\n\n// ========== Types ==========\n\nexport interface GalleryImage {\n /** 이미지 표시용 URL (라이트박스에서 보여줄 이미지) */\n src: string;\n /** 다운로드용 URL (src와 다를 수 있음, 없으면 src 사용) */\n downloadUrl?: string;\n /** 이미지 제목/캡션 */\n title?: string;\n /** 이미지 설명 */\n description?: string;\n /** 썸네일 URL (없으면 src 사용) */\n thumbnail?: string;\n /** 원본 파일명 (다운로드 시 사용) */\n filename?: string;\n /** 다운로드 시 인증된 요청이 필요한지 여부 (기본값: false) */\n downloadRequiresAuth?: boolean;\n}\n\nexport interface ImageGalleryProps {\n /** 갤러리에 표시할 이미지 배열 */\n images: GalleryImage[];\n /** 라이트박스 열기 여부 */\n isOpen: boolean;\n /** 라이트박스 닫기 콜백 */\n onClose: () => void;\n /** 시작 인덱스 (기본값: 0) */\n startIndex?: number;\n /** 줌 기능 활성화 (기본값: true) */\n enableZoom?: boolean;\n /** 슬라이드쇼 기능 활성화 (기본값: false) */\n enableSlideshow?: boolean;\n /** 전체화면 기능 활성화 (기본값: true) */\n enableFullscreen?: boolean;\n /** 이미지 카운터 표시 (기본값: true) */\n showCounter?: boolean;\n /** 다운로드 버튼 표시 (기본값: true) */\n showDownload?: boolean;\n /** 썸네일 네비게이션 표시 (기본값: true) */\n showThumbnails?: boolean;\n /** 커스텀 다운로드 핸들러 (제공 시 기본 다운로드 로직 대신 실행) */\n onDownload?: (image: GalleryImage, index: number) => void;\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용).\n * 본 컴포넌트는 서드파티 Lightbox 모달(`createPortal` 로 body 렌더)이라 런타임에는\n * 인라인 DOM 이 없다. 편집 모드(editorAttrs 존재)에서는 캔버스 선택·속성 편집이\n * 가능하도록 인라인 placeholder(이미지 썸네일 그리드)를 대신 렌더하고 거기에\n * editorAttrs·id 를 부착한다. 런타임(editorAttrs 미주입)은 종전 Lightbox 동작 그대로.\n *\n */\n editorAttrs?: EditorAttrs;\n\n /** DOM id 속성 (레이아웃 편집기 코어 일괄 ID — 편집 placeholder 루트에 부착) */\n id?: string;\n}\n\n// ========== Helper Functions ==========\n\n/**\n * 인증된 이미지 다운로드 (Blob으로 변환 후 다운로드)\n */\nconst downloadAuthenticatedFile = async (url: string, filename: string): Promise => {\n try {\n const blob = await G7Core.api.get(url, {\n responseType: 'blob',\n });\n\n if (blob) {\n const objectUrl = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = objectUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(objectUrl);\n }\n } catch (error) {\n console.error('Failed to download file:', error);\n G7Core?.toast?.error?.(t('common.download_failed'));\n }\n};\n\n/**\n * 일반 파일 다운로드\n */\nconst downloadFile = (url: string, filename: string): void => {\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n/**\n * 이미지 다운로드 실행\n */\nexport const executeImageDownload = async (image: GalleryImage): Promise => {\n const downloadUrl = image.downloadUrl || image.src;\n const filename = image.filename || image.title || 'image';\n\n if (image.downloadRequiresAuth) {\n await downloadAuthenticatedFile(downloadUrl, filename);\n } else {\n downloadFile(downloadUrl, filename);\n }\n};\n\n// ========== Custom Download Button Component ==========\n\ninterface DownloadButtonProps {\n image: GalleryImage;\n index: number;\n onDownload?: (image: GalleryImage, index: number) => void;\n}\n\nconst DownloadButton: React.FC = ({ image, index, onDownload }) => {\n const [isDownloading, setIsDownloading] = useState(false);\n\n const handleDownload = async (e: React.MouseEvent) => {\n e.stopPropagation();\n\n if (onDownload) {\n onDownload(image, index);\n return;\n }\n\n setIsDownloading(true);\n try {\n await executeImageDownload(image);\n } finally {\n setIsDownloading(false);\n }\n };\n\n return (\n \n {isDownloading ? (\n \n ) : (\n \n )}\n \n );\n};\n\n// ========== Main Component ==========\n\nexport const ImageGallery: React.FC = ({\n images,\n isOpen,\n onClose,\n startIndex = 0,\n enableZoom = true,\n enableSlideshow = false,\n enableFullscreen = true,\n showCounter = true,\n showDownload = true,\n showThumbnails = true,\n onDownload,\n editorAttrs,\n id,\n}) => {\n // 현재 슬라이드 인덱스 (다운로드 버튼용)\n const [currentIndex, setCurrentIndex] = useState(startIndex);\n // 최신 인덱스를 ref로 추적 (클로저 문제 방지)\n const currentIndexRef = useRef(startIndex);\n\n // 이미지를 라이트박스 슬라이드 형식으로 변환 (썸네일 포함)\n const slides: Slide[] = images.map((image) => ({\n src: image.src,\n title: image.title,\n description: image.description,\n }));\n\n // 활성화할 플러그인 목록\n const plugins = [];\n if (enableZoom) plugins.push(Zoom);\n if (enableSlideshow) plugins.push(Slideshow);\n if (enableFullscreen) plugins.push(Fullscreen);\n if (showCounter) plugins.push(Counter);\n if (showThumbnails) plugins.push(Thumbnails);\n\n // 현재 이미지\n const currentImage = images[currentIndex];\n\n // currentIndex가 변경되면 ref도 업데이트\n useEffect(() => {\n currentIndexRef.current = currentIndex;\n }, [currentIndex]);\n\n // 편집 모드(편집기 캔버스) — Lightbox 모달은 인라인 DOM 이 없어 선택·편집 불가.\n // editorAttrs 가 주입되면 인라인 placeholder(썸네일 그리드)를 대신 렌더해\n // 캔버스에서 선택·속성 편집이 가능하게 한다. 런타임(editorAttrs 미주입)은 미진입.\n // (Hooks 규칙 — 모든 hook 호출 이후에 분기 return)\n if (editorAttrs) {\n const previewImages = (images ?? []).slice(0, 4);\n return (\n \n {previewImages.length > 0 ? (\n previewImages.map((image, index) => (\n \n ))\n ) : (\n
\n \n {t('editor.component.image_gallery')}\n
\n )}\n \n );\n }\n\n return (\n {\n if (index !== currentIndexRef.current) {\n setCurrentIndex(index);\n }\n },\n }}\n zoom={{\n maxZoomPixelRatio: 3,\n zoomInMultiplier: 2,\n doubleTapDelay: 300,\n doubleClickDelay: 300,\n doubleClickMaxStops: 2,\n keyboardMoveDistance: 50,\n wheelZoomDistanceFactor: 100,\n pinchZoomDistanceFactor: 100,\n scrollToZoom: true,\n }}\n carousel={{\n finite: true,\n preload: 2,\n padding: '16px',\n spacing: '30%',\n }}\n animation={{\n fade: 250,\n swipe: 500,\n easing: {\n fade: 'ease',\n swipe: 'ease-out',\n navigation: 'ease-in-out',\n },\n }}\n controller={{\n closeOnBackdropClick: true,\n closeOnPullDown: true,\n closeOnPullUp: true,\n }}\n thumbnails={{\n position: 'bottom',\n width: 120,\n height: 80,\n border: 2,\n borderRadius: 4,\n padding: 4,\n gap: 16,\n showToggle: false,\n vignette: true,\n }}\n toolbar={{\n buttons: [\n showDownload && currentImage && (\n \n ),\n 'close',\n ].filter(Boolean),\n }}\n styles={{\n container: {\n backgroundColor: 'rgba(0, 0, 0, 0.9)',\n },\n }}\n />\n );\n};\n\n// ========== Utility Hook ==========\n\n/**\n * ImageGallery를 쉽게 사용하기 위한 커스텀 훅\n *\n * @example\n * const { openGallery, galleryProps } = useImageGallery();\n *\n * // 이미지 클릭 시\n * openGallery(images, 0)} />\n *\n * // 컴포넌트 렌더링\n * \n */\nexport const useImageGallery = () => {\n const [isOpen, setIsOpen] = useState(false);\n const [images, setImages] = useState([]);\n const [startIndex, setStartIndex] = useState(0);\n\n const openGallery = useCallback((galleryImages: GalleryImage[], index = 0) => {\n setImages(galleryImages);\n setStartIndex(index);\n setIsOpen(true);\n }, []);\n\n const closeGallery = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n return {\n isOpen,\n openGallery,\n closeGallery,\n galleryProps: {\n images,\n isOpen,\n onClose: closeGallery,\n startIndex,\n },\n };\n};\n\nImageGallery.displayName = 'ImageGallery';\n\nexport default ImageGallery;\n","/**\n * ProductImageViewer 컴포넌트\n *\n * 상품 상세 페이지용 이미지 뷰어입니다.\n * 메인 이미지 + 썸네일 리스트 + 라이트박스(ImageGallery) 연동을 지원합니다.\n *\n * @module composite/ProductImageViewer\n */\n\nimport React, { useState, useMemo } from 'react';\nimport { Div } from '../basic/Div';\nimport { Img } from '../basic/Img';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { ImageGallery, useImageGallery, GalleryImage } from './ImageGallery';\nimport type { EditorAttrs } from '../../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\nconst t = (key: string, params?: Record) =>\n G7Core?.t?.(key, params) ?? key;\n\n// ========== Types ==========\n\nexport interface ProductImage {\n /** 이미지 ID */\n id: number;\n /** 외부 URL (CDN 등, nullable) */\n url: string | null;\n /** API 서빙 URL (항상 존재) */\n download_url: string;\n /** 현재 로케일 대체 텍스트 */\n alt_text_current?: string;\n /** 대표 이미지 여부 */\n is_thumbnail?: boolean;\n /** 정렬 순서 */\n sort_order?: number;\n}\n\nexport interface ProductImageViewerProps {\n /** 상품 이미지 배열 (API 응답 그대로) */\n images: ProductImage[];\n /** 커스텀 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\n// ========== Helper ==========\n\n/**\n * 이미지 표시용 URL 반환 (url 우선, 없으면 download_url)\n */\nconst getImageSrc = (image: ProductImage): string => {\n return image.url ?? image.download_url;\n};\n\n// ========== Main Component ==========\n\nexport const ProductImageViewer: React.FC = ({\n images = [],\n className = '',\n id,\n editorAttrs,\n}) => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const { openGallery, galleryProps } = useImageGallery();\n\n // 이미지를 ImageGallery용 형식으로 변환\n const galleryImages: GalleryImage[] = useMemo(\n () =>\n images.map((img) => ({\n src: getImageSrc(img),\n title: img.alt_text_current ?? '',\n thumbnail: getImageSrc(img),\n downloadUrl: img.download_url,\n filename: img.alt_text_current ?? `image-${img.id}`,\n })),\n [images],\n );\n\n // 이미지 없음\n if (!images || images.length === 0) {\n return (\n \n
\n \n
{t('shop.no_image')}
\n
\n \n );\n }\n\n const currentImage = images[selectedIndex] ?? images[0];\n\n return (\n
\n {/* 메인 이미지 */}\n
\n openGallery(galleryImages, selectedIndex)}\n aria-label={t('shop.view_image')}\n >\n \n \n
\n\n {/* 썸네일 리스트 (2개 이상일 때만) */}\n {images.length > 1 && (\n
\n {images.map((img, index) => (\n setSelectedIndex(index)}\n aria-label={img.alt_text_current ?? `${t('shop.image')} ${index + 1}`}\n >\n \n \n ))}\n
\n )}\n\n {/* 라이트박스 */}\n \n
\n );\n};\n\nProductImageViewer.displayName = 'ProductImageViewer';\n\nexport default ProductImageViewer;\n","/**\n * QuantitySelector 컴포넌트\n *\n * 수량 선택을 위한 +/- 버튼 컴포넌트입니다.\n * 상품 상세 페이지, 장바구니 등에서 사용됩니다.\n */\n\nimport React from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Input } from '../basic/Input';\nimport { Icon } from '../basic/Icon';\nimport type { EditorAttrs } from '../../types';\n\ninterface QuantitySelectorProps {\n /** 현재 수량 */\n value: number;\n /** 최소 수량 */\n min?: number;\n /** 최대 수량 */\n max?: number;\n /** 수량 변경 콜백 */\n onChange: (value: number) => void;\n /** 컴포넌트 크기 */\n size?: 'sm' | 'md' | 'lg';\n /** 비활성화 여부 */\n disabled?: boolean;\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * 수량 선택 컴포넌트\n *\n * @example\n * ```tsx\n * const [quantity, setQuantity] = useState(1);\n *\n * \n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"QuantitySelector\",\n * \"props\": {\n * \"value\": \"{{item.quantity}}\",\n * \"min\": 1,\n * \"max\": \"{{item.stock}}\",\n * \"size\": \"sm\"\n * },\n * \"actions\": [{\n * \"event\": \"onChange\",\n * \"type\": \"change\",\n * \"handler\": \"updateQuantity\",\n * \"params\": { \"itemId\": \"{{item.id}}\", \"quantity\": \"{{$args[0]}}\" }\n * }]\n * }\n * ```\n */\nconst QuantitySelector: React.FC = ({\n value,\n min = 1,\n max = 999,\n onChange,\n size = 'md',\n disabled = false,\n className = '',\n id,\n editorAttrs,\n}) => {\n const sizeClasses = {\n sm: {\n container: 'h-8',\n button: 'w-8 h-8 text-sm',\n input: 'w-10 text-sm',\n },\n md: {\n container: 'h-10',\n button: 'w-10 h-10',\n input: 'w-14',\n },\n lg: {\n container: 'h-12',\n button: 'w-12 h-12 text-lg',\n input: 'w-16 text-lg',\n },\n };\n\n const classes = sizeClasses[size];\n\n const handleDecrease = () => {\n if (value > min && !disabled) {\n onChange(value - 1);\n }\n };\n\n const handleIncrease = () => {\n if (value < max && !disabled) {\n onChange(value + 1);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent) => {\n const newValue = parseInt(e.target.value, 10);\n if (!isNaN(newValue)) {\n const clampedValue = Math.max(min, Math.min(max, newValue));\n onChange(clampedValue);\n }\n };\n\n const handleInputBlur = (e: React.FocusEvent) => {\n const newValue = parseInt(e.target.value, 10);\n if (isNaN(newValue) || newValue < min) {\n onChange(min);\n } else if (newValue > max) {\n onChange(max);\n }\n };\n\n const isMinDisabled = disabled || value <= min;\n const isMaxDisabled = disabled || value >= max;\n\n return (\n \n {/* 감소 버튼 */}\n \n \n \n\n {/* 수량 입력 */}\n \n\n {/* 증가 버튼 */}\n \n \n \n \n );\n};\n\nexport default QuantitySelector;\n","/**\n * PostReactions 컴포넌트\n *\n * 게시글에 대한 리액션(이모지) 버튼 그룹입니다.\n * 좋아요, 웃겨요, 동의해요, 감사해요, 놀라워요 5종 리액션을 지원합니다.\n */\n\nimport React from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:PostReactions')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:PostReactions]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:PostReactions]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:PostReactions]', ...args),\n};\n\n/**\n * G7Core 번역 함수\n */\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\ntype ReactionType = 'like' | 'funny' | 'agree' | 'thanks' | 'wow';\n\ninterface ReactionCount {\n type: ReactionType;\n count: number;\n}\n\ninterface PostReactionsProps {\n /** 각 리액션별 카운트 */\n reactions: ReactionCount[];\n /** 현재 사용자의 리액션 (없으면 null) */\n userReaction?: ReactionType | null;\n /** 게시글 ID */\n postId: number;\n /** 리액션 클릭 콜백 */\n onReact?: (type: ReactionType) => void;\n /** 컴포넌트 크기 */\n size?: 'sm' | 'md' | 'lg';\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\ninterface ReactionConfig {\n type: ReactionType;\n emoji: string;\n labelKey: string;\n activeColor: string;\n}\n\n/**\n * 리액션 설정\n */\nconst REACTION_CONFIGS: ReactionConfig[] = [\n { type: 'like', emoji: '👍', labelKey: 'board.reactions.like', activeColor: 'bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400' },\n { type: 'funny', emoji: '😂', labelKey: 'board.reactions.funny', activeColor: 'bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400' },\n { type: 'agree', emoji: '👌', labelKey: 'board.reactions.agree', activeColor: 'bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400' },\n { type: 'thanks', emoji: '🙏', labelKey: 'board.reactions.thanks', activeColor: 'bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400' },\n { type: 'wow', emoji: '😮', labelKey: 'board.reactions.wow', activeColor: 'bg-orange-100 dark:bg-orange-900/30 text-orange-600 dark:text-orange-400' },\n];\n\n/**\n * 게시글 리액션 컴포넌트\n *\n * @example\n * ```tsx\n * handleReact(type)}\n * />\n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"PostReactions\",\n * \"props\": {\n * \"reactions\": \"{{post.data.reactions}}\",\n * \"userReaction\": \"{{post.data.user_reaction}}\",\n * \"postId\": \"{{post.data.id}}\"\n * }\n * }\n * ```\n */\nconst PostReactions: React.FC = ({\n reactions,\n userReaction,\n postId,\n onReact,\n size = 'md',\n className = '',\n id,\n editorAttrs,\n}) => {\n const sizeClasses = {\n sm: 'px-2 py-1 text-xs gap-1',\n md: 'px-3 py-1.5 text-sm gap-1.5',\n lg: 'px-4 py-2 text-base gap-2',\n };\n\n const emojiSizes = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n };\n\n const getReactionCount = (type: ReactionType): number => {\n const reaction = reactions.find((r) => r.type === type);\n return reaction?.count ?? 0;\n };\n\n const handleClick = async (type: ReactionType) => {\n if (onReact) {\n onReact(type);\n return;\n }\n\n // 기본 API 호출\n try {\n const response = await fetch(`/api/posts/${postId}/reactions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ type }),\n credentials: 'include',\n });\n\n if (!response.ok) {\n throw new Error('리액션 처리 실패');\n }\n\n // 성공 시 페이지 새로고침 또는 상태 업데이트\n window.location.reload();\n } catch (error) {\n logger.error('리액션 오류:', error);\n }\n };\n\n return (\n
\n {REACTION_CONFIGS.map((config) => {\n const count = getReactionCount(config.type);\n const isActive = userReaction === config.type;\n\n return (\n handleClick(config.type)}\n className={`\n inline-flex items-center rounded-full border transition-colors\n ${sizeClasses[size]}\n ${isActive\n ? `${config.activeColor} border-transparent`\n : 'border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700'\n }\n `}\n title={t(config.labelKey)}\n >\n {config.emoji}\n {t(config.labelKey)}\n {count > 0 && (\n {count}\n )}\n \n );\n })}\n
\n );\n};\n\nexport default PostReactions;\n","/**\n * RichTextEditor 컴포넌트\n *\n * 게시글 작성을 위한 리치 텍스트 에디터입니다.\n * TipTap 또는 Quill 등의 외부 라이브러리를 래핑합니다.\n *\n * @note 실제 구현 시 TipTap, Quill, CKEditor 등 선택하여 래핑\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Div } from '../basic/Div';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:RichTextEditor')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:RichTextEditor]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:RichTextEditor]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:RichTextEditor]', ...args),\n};\nimport { Button } from '../basic/Button';\nimport { Input } from '../basic/Input';\nimport { Textarea } from '../basic/Textarea';\nimport { H3 } from '../basic/H3';\nimport { Label } from '../basic/Label';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\ninterface RichTextEditorProps {\n /** 필드 이름 */\n name: string;\n /** 초기 HTML 값 */\n initialValue?: string;\n /** 플레이스홀더 */\n placeholder?: string;\n /** 값 변경 콜백 */\n onChange?: (html: string) => void;\n /** 이미지 업로드 URL */\n imageUploadUrl?: string;\n /** 최소 높이 */\n minHeight?: string;\n /** 비활성화 여부 */\n disabled?: boolean;\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\ntype FormatType =\n | 'bold'\n | 'italic'\n | 'underline'\n | 'strike'\n | 'code'\n | 'h1'\n | 'h2'\n | 'h3'\n | 'bulletList'\n | 'orderedList'\n | 'blockquote'\n | 'link'\n | 'image';\n\n/**\n * 리치 텍스트 에디터 컴포넌트\n *\n * @example\n * ```tsx\n * setContent(html)}\n * />\n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"RichTextEditor\",\n * \"props\": {\n * \"name\": \"content\",\n * \"placeholder\": \"$t:board.form.content_placeholder\",\n * \"initialValue\": \"{{post.data?.content ?? ''}}\"\n * }\n * }\n * ```\n */\nconst RichTextEditor: React.FC = ({\n name,\n initialValue = '',\n placeholder,\n onChange,\n imageUploadUrl = '/api/upload/image',\n minHeight = '300px',\n disabled = false,\n className = '',\n id,\n editorAttrs,\n}) => {\n const editorRef = useRef(null);\n const [content, setContent] = useState(initialValue);\n const [showCodeView, setShowCodeView] = useState(false);\n const [showLinkModal, setShowLinkModal] = useState(false);\n const [linkUrl, setLinkUrl] = useState('');\n\n // 에디터 초기화 (실제 구현 시 TipTap/Quill 초기화)\n useEffect(() => {\n // 초기값 설정 (dangerouslySetInnerHTML 대신 직접 설정)\n if (editorRef.current && !editorRef.current.innerHTML) {\n editorRef.current.innerHTML = initialValue;\n }\n }, [initialValue]);\n\n // 값 변경 시 콜백 호출\n useEffect(() => {\n if (onChange) {\n onChange(content);\n }\n }, [content, onChange]);\n\n // 포맷 적용 (실제 구현 시 에디터 API 사용)\n const applyFormat = (format: FormatType) => {\n // TODO: 에디터 라이브러리의 포맷 API 호출\n logger.log('Apply format:', format);\n };\n\n // 이미지 업로드\n const handleImageUpload = async (file: File) => {\n const formData = new FormData();\n formData.append('file', file);\n\n try {\n const response = await fetch(imageUploadUrl, {\n method: 'POST',\n body: formData,\n credentials: 'include',\n });\n\n if (!response.ok) throw new Error('업로드 실패');\n\n const data = await response.json();\n // TODO: 에디터에 이미지 삽입\n logger.log('Image uploaded:', data.url);\n } catch (error) {\n logger.error('이미지 업로드 오류:', error);\n }\n };\n\n // 파일 선택 핸들러\n const handleFileSelect = (e: React.ChangeEvent) => {\n const file = e.target.files?.[0];\n if (file) {\n handleImageUpload(file);\n }\n };\n\n // 링크 삽입\n const insertLink = () => {\n if (linkUrl) {\n // TODO: 에디터에 링크 삽입\n logger.log('Insert link:', linkUrl);\n setShowLinkModal(false);\n setLinkUrl('');\n }\n };\n\n const toolbarButtons: { format: FormatType; icon: React.ReactNode; title: string }[] = [\n { format: 'bold', icon: 'B', title: t('editor.toolbar.bold') },\n { format: 'italic', icon: 'I', title: t('editor.toolbar.italic') },\n { format: 'underline', icon: 'U', title: t('editor.toolbar.underline') },\n { format: 'strike', icon: 'S', title: t('editor.toolbar.strike') },\n { format: 'code', icon: '', title: t('editor.toolbar.code') },\n ];\n\n const headingButtons: { format: FormatType; label: string }[] = [\n { format: 'h1', label: 'H1' },\n { format: 'h2', label: 'H2' },\n { format: 'h3', label: 'H3' },\n ];\n\n const listButtons: { format: FormatType; icon: string; title: string }[] = [\n { format: 'bulletList', icon: '•', title: t('editor.toolbar.bullet_list') },\n { format: 'orderedList', icon: '1.', title: t('editor.toolbar.ordered_list') },\n { format: 'blockquote', icon: '❝', title: t('editor.toolbar.blockquote') },\n ];\n\n return (\n
\n {/* 툴바 */}\n
\n {/* 텍스트 포맷 */}\n
\n {toolbarButtons.map((btn) => (\n applyFormat(btn.format)}\n disabled={disabled}\n className=\"w-8 h-8 flex items-center justify-center text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50\"\n title={btn.title}\n >\n {btn.icon}\n \n ))}\n
\n\n {/* 제목 */}\n
\n {headingButtons.map((btn) => (\n applyFormat(btn.format)}\n disabled={disabled}\n className=\"px-2 h-8 text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50\"\n >\n {btn.label}\n \n ))}\n
\n\n {/* 리스트 */}\n
\n {listButtons.map((btn) => (\n applyFormat(btn.format)}\n disabled={disabled}\n className=\"w-8 h-8 flex items-center justify-center text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50\"\n title={btn.title}\n >\n {btn.icon}\n \n ))}\n
\n\n {/* 미디어 */}\n
\n setShowLinkModal(true)}\n disabled={disabled}\n className=\"w-8 h-8 flex items-center justify-center text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50\"\n title={t('editor.toolbar.link')}\n >\n 🔗\n \n \n
\n\n {/* 코드 보기 토글 */}\n setShowCodeView(!showCodeView)}\n disabled={disabled}\n className={`px-2 h-8 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50 ${\n showCodeView ? 'bg-gray-200 dark:bg-gray-700' : ''\n }`}\n >\n {''}\n {t('editor.toolbar.code_view')}\n \n
\n\n {/* 에디터 영역 */}\n {showCodeView ? (\n setContent(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className=\"w-full p-4 bg-gray-900 text-gray-100 font-mono text-sm focus:outline-none resize-none\"\n style={{ minHeight }}\n />\n ) : (\n setContent(e.currentTarget.innerHTML)}\n className=\"p-4 bg-white dark:bg-gray-900 text-gray-900 dark:text-white focus:outline-none prose dark:prose-invert max-w-none\"\n style={{ minHeight }}\n data-placeholder={placeholder}\n />\n )}\n\n {/* 숨겨진 input (폼 전송용) */}\n \n\n {/* 링크 모달 */}\n {showLinkModal && (\n
\n
\n

\n {t('editor.link_modal.title')}\n

\n setLinkUrl(e.target.value)}\n placeholder=\"https://example.com\"\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white mb-4\"\n />\n
\n {\n setShowLinkModal(false);\n setLinkUrl('');\n }}\n className=\"px-4 py-2 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg\"\n >\n {t('common.cancel')}\n \n \n {t('editor.link_modal.insert')}\n \n
\n
\n
\n )}\n
\n );\n};\n\nexport default RichTextEditor;\n","import React, { useMemo } from 'react';\n// @ts-ignore - DOMPurify 타입 정의 없음\nimport DOMPurify from 'dompurify';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface HtmlContentProps {\n /**\n * 콘텐츠 (HTML 또는 일반 텍스트)\n */\n content?: string;\n\n /**\n * 콘텐츠가 HTML 형식인지 여부\n * - true: HTML 렌더링 (DOMPurify 적용, prose 스타일)\n * - false: 일반 텍스트 (whitespace-pre-wrap으로 줄바꿈 보존)\n * @default true\n */\n isHtml?: boolean;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * DOMPurify 설정 오버라이드 (isHtml=true일 때만 사용)\n */\n purifyConfig?: any;\n\n /**\n * 레이아웃 JSON에서 text 속성으로 전달되는 콘텐츠\n * content보다 우선순위가 높음\n */\n text?: string;\n\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * HtmlContent 콘텐츠 렌더링 컴포넌트\n *\n * HTML과 일반 텍스트를 안전하게 렌더링하는 범용 composite 컴포넌트입니다.\n * - isHtml=true: DOMPurify를 사용하여 XSS 공격 방지\n * - isHtml=false: 일반 텍스트로 렌더링 (줄바꿈 보존)\n *\n * @example\n * // HTML 렌더링 (기본값)\n * 안녕하세요

\" />\n *\n * // 일반 텍스트 렌더링\n * \n *\n * // 커스텀 클래스 적용\n * 게시글 내용

\"\n * className=\"prose dark:prose-invert\"\n * />\n *\n * // DOMPurify 설정 커스터마이징 (HTML 모드)\n * 내용

\"\n * purifyConfig={{ ALLOWED_TAGS: ['p', 'br', 'strong', 'em'] }}\n * />\n */\nexport const HtmlContent: React.FC = ({\n content,\n text,\n isHtml = true,\n className = '',\n purifyConfig,\n id,\n editorAttrs,\n}) => {\n // text prop이 우선순위가 높음 (레이아웃 JSON에서 사용)\n const actualContent = text ?? content ?? '';\n\n // 빈 값 처리\n if (!actualContent || actualContent.trim() === '') {\n return null;\n }\n\n // isHtml=false: 일반 텍스트 렌더링\n if (!isHtml) {\n const textClasses = `\n whitespace-pre-wrap\n text-gray-900 dark:text-gray-100\n font-sans\n ${className}\n `.trim().replace(/\\s+/g, ' ');\n\n return (\n
\n {actualContent}\n
\n );\n }\n\n // 기본 DOMPurify 설정 (FORBID 방식: 위험 태그/속성만 차단, 나머지 허용)\n const defaultConfig: any = {\n FORBID_TAGS: [\n // 스크립트 실행\n 'script', 'noscript',\n // 외부 콘텐츠 삽입\n 'iframe', 'frame', 'frameset', 'object', 'embed', 'applet', 'portal',\n // 폼 요소 (피싱 방지)\n 'form', 'input', 'textarea', 'select', 'button',\n // 메타/스타일 조작\n 'style', 'link', 'meta', 'base',\n // 구조 태그 주입\n 'body', 'head', 'html', 'title',\n // SVG/MathML (XSS 벡터)\n 'svg', 'math',\n // 미디어 이벤트 핸들러 (onerror, onloadstart)\n 'audio', 'video', 'source', 'track', 'canvas',\n // UI 오버레이/이벤트\n 'details', 'dialog',\n // HTML 파서 혼란/sanitizer 우회\n 'plaintext', 'xmp', 'listing',\n // 레거시/비표준\n 'marquee', 'noframes', 'noembed', 'template', 'slot',\n ],\n FORBID_ATTR: [\n 'onerror', 'onload', 'onclick', 'onmouseover', 'onfocus', 'onblur',\n 'ontoggle', 'oncanplay', 'onloadstart',\n 'formaction', 'xlink:href', 'action',\n ],\n ALLOW_DATA_ATTR: true,\n ADD_ATTR: ['target'],\n };\n\n // sanitize된 HTML을 메모이제이션\n const sanitizedHtml = useMemo(() => {\n const config = purifyConfig\n ? {\n ...defaultConfig,\n ...purifyConfig,\n // 보안 기본값은 항상 유지 (사용자 설정으로 덮어쓰기 방지)\n FORBID_TAGS: [...defaultConfig.FORBID_TAGS, ...(purifyConfig.FORBID_TAGS || [])],\n FORBID_ATTR: [...defaultConfig.FORBID_ATTR, ...(purifyConfig.FORBID_ATTR || [])],\n }\n : defaultConfig;\n const cleaned = DOMPurify.sanitize(actualContent, config) as unknown as string;\n\n // target=\"_blank\" 링크에 rel 속성 추가 (보안)\n return cleaned.replace(\n /]*?)href=[\"']([^\"']+)[\"']([^>]*?)>/gi,\n (match: string, before: string, href: string, after: string) => {\n if (href.startsWith('http://') || href.startsWith('https://')) {\n if (!match.includes('rel=')) {\n return ``;\n }\n }\n return match;\n }\n );\n }, [actualContent, purifyConfig]);\n\n // 컨테이너 클래스 조합\n const containerClasses = `\n prose dark:prose-invert max-w-none\n prose-p:my-2\n prose-headings:font-bold prose-headings:mt-6 prose-headings:mb-4\n prose-h1:text-2xl prose-h2:text-xl prose-h3:text-lg\n prose-a:text-blue-600 dark:prose-a:text-blue-400\n prose-a:no-underline hover:prose-a:underline\n prose-blockquote:border-l-4 prose-blockquote:border-gray-300 dark:prose-blockquote:border-gray-600\n prose-blockquote:pl-4 prose-blockquote:italic\n prose-code:bg-gray-100 dark:prose-code:bg-gray-800\n prose-code:px-1 prose-code:py-0.5 prose-code:rounded\n prose-pre:bg-gray-100 dark:prose-pre:bg-gray-800\n prose-pre:p-4 prose-pre:rounded-lg prose-pre:overflow-x-auto\n [&_table]:w-full [&_table]:border-collapse [&_table]:border [&_table]:border-gray-300\n dark:[&_table]:border-gray-600\n [&_th]:border [&_th]:border-gray-300 [&_th]:px-4 [&_th]:py-2 [&_th]:bg-gray-100 [&_th]:text-left\n dark:[&_th]:border-gray-600 dark:[&_th]:bg-gray-800\n [&_td]:border [&_td]:border-gray-300 [&_td]:px-4 [&_td]:py-2\n dark:[&_td]:border-gray-600\n [&_tr:hover]:bg-gray-50 dark:[&_tr:hover]:bg-gray-700/50\n after:content-[''] after:block after:clear-both\n ${className}\n `.trim().replace(/\\s+/g, ' ');\n\n return (\n \n );\n};\n","import React, { useCallback, useState } from 'react';\nimport { Div } from '../basic/Div';\nimport { Label } from '../basic/Label';\nimport { Button } from '../basic/Button';\nimport { Textarea } from '../basic/Textarea';\nimport { Input } from '../basic/Input';\nimport { HtmlContent } from './HtmlContent';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core 참조\nconst G7Core = () => (window as any).G7Core;\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n G7Core()?.t?.(key, params) ?? key;\n\nexport interface HtmlEditorProps {\n /**\n * 콘텐츠 값\n */\n content?: string;\n\n /**\n * 콘텐츠 변경 콜백\n * Form 자동 바인딩을 위해 이벤트 객체 형식으로 전달\n */\n onChange?: (event: { target: { name: string; value: string } }) => void;\n\n /**\n * HTML 모드 여부 (미리보기 버튼 표시 조건)\n * 자동 바인딩된 값을 Layout JSON에서 전달받아 사용\n */\n isHtml?: boolean;\n\n /**\n * HTML 모드 변경 콜백\n * Form 자동 바인딩을 위해 이벤트 객체 형식으로 전달\n */\n onIsHtmlChange?: (event: { target: { name: string; checked: boolean } }) => void;\n\n /**\n * Textarea 행 수\n * @default 15\n */\n rows?: number;\n\n /**\n * placeholder 텍스트\n */\n placeholder?: string;\n\n /**\n * 라벨 텍스트\n */\n label?: string;\n\n /**\n * HTML 모드 체크박스 표시 여부\n * @default true\n */\n showHtmlModeToggle?: boolean;\n\n /**\n * HtmlContent 렌더링 시 적용할 클래스\n */\n contentClassName?: string;\n\n /**\n * DOMPurify 설정 (HTML 모드)\n */\n purifyConfig?: any;\n\n /**\n * 추가 className\n */\n className?: string;\n\n /**\n * 콘텐츠 필드 name 속성\n * @default 'content'\n */\n name?: string;\n\n /**\n * HTML 모드 체크박스 name 속성\n * @default 'content_mode'\n */\n htmlFieldName?: string;\n\n /**\n * 읽기 전용 모드\n */\n readOnly?: boolean;\n\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * HtmlEditor 컴포넌트\n *\n * HTML과 일반 텍스트를 편집할 수 있는 범용 에디터 컴포넌트입니다.\n * - HTML 모드 체크박스는 자동 바인딩됩니다 (htmlFieldName prop 사용)\n * - HTML 모드에서는 편집/미리보기 토글 가능 (내부 상태 관리)\n * - 일반 텍스트 모드에서는 Textarea만 표시\n *\n * @example\n * // Layout JSON에서 사용 (자동 바인딩)\n * {\n * \"type\": \"composite\",\n * \"name\": \"HtmlEditor\",\n * \"props\": {\n * \"content\": \"{{_local.form?.content}}\",\n * \"name\": \"content\",\n * \"htmlFieldName\": \"content_mode\"\n * }\n * }\n */\nexport const HtmlEditor: React.FC = ({\n content = '',\n onChange,\n isHtml: isHtmlProp = false,\n onIsHtmlChange,\n rows = 15,\n placeholder = '',\n label,\n showHtmlModeToggle = true,\n contentClassName = '',\n purifyConfig,\n className = '',\n name = 'content',\n htmlFieldName = 'content_mode',\n readOnly = false,\n id,\n editorAttrs,\n}) => {\n // HTML 모드 내부 상태 (Toggle과 동기화)\n const [isHtml, setIsHtml] = useState(isHtmlProp);\n\n // 콘텐츠 내부 상태 (입력값 즉시 반영용)\n const [localContent, setLocalContent] = useState(content);\n\n // 미리보기 모드 내부 상태 (컴포넌트 자체에서 관리)\n const [previewMode, setPreviewMode] = useState(false);\n\n // Props 변경 시 내부 상태 동기화\n React.useEffect(() => {\n setIsHtml(isHtmlProp);\n }, [isHtmlProp]);\n\n // content prop 변경 시 로컬 상태 동기화\n React.useEffect(() => {\n setLocalContent(content);\n }, [content]);\n\n // 콘텐츠 변경 핸들러\n const handleContentChange = useCallback((e: React.ChangeEvent) => {\n const newContent = e.target.value;\n\n // 로컬 상태 즉시 업데이트 (입력 반응성)\n setLocalContent(newContent);\n\n // Props 콜백 호출 (G7Core.createChangeEvent 사용으로 ActionDispatcher 호환성 확보)\n if (onChange) {\n const event = G7Core()?.createChangeEvent?.({ value: newContent, name, type: 'textarea' })\n ?? { target: { name, value: newContent } };\n onChange(event);\n }\n }, [onChange, name]);\n\n // HTML 모드 변경 핸들러\n const handleHtmlModeChange = useCallback((e: React.ChangeEvent) => {\n const isHtmlMode = e.target.checked;\n\n // 로컬 상태 즉시 업데이트 (미리보기 버튼 표시용)\n setIsHtml(isHtmlMode);\n\n // HTML 모드 비활성화 시 미리보기 모드도 함께 비활성화\n if (!isHtmlMode) {\n setPreviewMode(false);\n }\n\n // Props 콜백 호출 (G7Core.createChangeEvent 사용으로 ActionDispatcher 호환성 확보)\n if (onIsHtmlChange) {\n const event = G7Core()?.createChangeEvent?.({ checked: isHtmlMode, name: htmlFieldName, type: 'checkbox' })\n ?? { target: { name: htmlFieldName, checked: isHtmlMode } };\n onIsHtmlChange(event);\n }\n }, [onIsHtmlChange, htmlFieldName]);\n\n // 미리보기 모드 토글 핸들러 (내부 상태만 변경)\n const handlePreviewModeToggle = useCallback(() => {\n setPreviewMode(prev => !prev);\n }, []);\n\n return (\n
\n {/* 라벨 및 HTML 모드 토글 */}\n
\n\n {label && (\n \n )}\n\n
\n {/* 미리보기 버튼 (HTML 모드일 때만 표시) */}\n {isHtml && !readOnly && (\n \n {previewMode ? t('common.preview_off') : t('common.preview')}\n \n )}\n\n {showHtmlModeToggle && (\n \n )}\n
\n
\n\n {/* 콘텐츠 편집 영역 */}\n {!previewMode && (\n \n )}\n\n {/* 미리보기 영역 (미리보기 모드일 때만) */}\n {previewMode && (\n
\n \n
\n )}\n\n
\n );\n};\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { Icon } from '../basic/Icon';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * G7Core 다국어 헬퍼\n *\n * @param key 다국어 키\n * @return 번역된 문자열\n */\nconst t = (key: string): string =>\n (window as any).G7Core?.t?.(key) ?? key;\n\nexport interface ExpandableContentProps {\n /**\n * 접힌 상태의 최대 높이 (px)\n * @default 500\n */\n maxHeight?: number;\n\n /**\n * 펼치기 버튼 텍스트\n */\n expandText?: string;\n\n /**\n * 접기 버튼 텍스트\n */\n collapseText?: string;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * children 렌더링\n */\n children?: React.ReactNode;\n\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * ExpandableContent 컴포넌트\n *\n * 콘텐츠가 maxHeight를 초과하면 그라데이션 오버레이와 펼치기/접기 버튼을 표시합니다.\n * 콘텐츠가 짧으면 버튼/그라데이션 없이 전체 콘텐츠를 그대로 표시합니다.\n *\n * @example\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"ExpandableContent\",\n * \"props\": { \"maxHeight\": 500 },\n * \"children\": [\n * {\n * \"type\": \"composite\",\n * \"name\": \"HtmlContent\",\n * \"props\": { \"content\": \"{{product.data?.description_localized ?? ''}}\" }\n * }\n * ]\n * }\n */\nexport const ExpandableContent: React.FC = ({\n maxHeight = 500,\n expandText,\n collapseText,\n className = '',\n children,\n id,\n editorAttrs,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const [needsExpand, setNeedsExpand] = useState(false);\n const contentRef = useRef(null);\n\n /**\n * 콘텐츠 높이를 측정하여 펼치기 버튼 필요 여부를 결정합니다.\n */\n const checkHeight = useCallback(() => {\n if (contentRef.current) {\n const scrollHeight = contentRef.current.scrollHeight;\n setNeedsExpand(scrollHeight > maxHeight);\n }\n }, [maxHeight]);\n\n useEffect(() => {\n checkHeight();\n\n // 이미지 로드 후 높이 재측정\n const container = contentRef.current;\n if (!container) return;\n\n const images = container.querySelectorAll('img');\n images.forEach((img) => {\n if (!img.complete) {\n img.addEventListener('load', checkHeight);\n }\n });\n\n // ResizeObserver로 동적 콘텐츠 변경 감지\n let observer: ResizeObserver | null = null;\n if (typeof ResizeObserver !== 'undefined') {\n observer = new ResizeObserver(checkHeight);\n observer.observe(container);\n }\n\n return () => {\n images.forEach((img) => {\n img.removeEventListener('load', checkHeight);\n });\n observer?.disconnect();\n };\n }, [checkHeight, children]);\n\n const toggleExpand = () => {\n setIsExpanded((prev) => !prev);\n };\n\n const resolvedExpandText = expandText || t('sirsoft-ecommerce.shop.product.expand_detail');\n const resolvedCollapseText = collapseText || t('sirsoft-ecommerce.shop.product.collapse_detail');\n\n return (\n
\n {/* 콘텐츠 컨테이너 */}\n
\n \n {children}\n
\n\n {/* 그라데이션 오버레이 */}\n {!isExpanded && needsExpand && (\n
\n )}\n
\n\n {/* 펼치기/접기 버튼 (전체 너비 바 스타일) */}\n {needsExpand && (\n \n \n {isExpanded ? resolvedCollapseText : resolvedExpandText}\n \n \n \n )}\n
\n );\n};\n\nexport default ExpandableContent;\n","import React, { useEffect, useRef } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n /**\n * 타이틀 옆에 표시할 아이콘 이름 (Font Awesome)\n * @example \"lock\", \"trash\", \"warning\"\n */\n icon?: string;\n /**\n * 아이콘 색상 클래스 (Tailwind)\n * @default \"text-gray-500\"\n */\n iconClassName?: string;\n /**\n * Backdrop(오버레이) 클릭 시 모달 닫기 여부\n * @default true\n */\n closeOnBackdropClick?: boolean;\n /**\n * closeOnOverlayClick 별칭 (레이아웃 JSON 호환)\n * @default true\n */\n closeOnOverlayClick?: boolean;\n /**\n * 헤더 닫기 버튼 표시 여부\n * @default true\n */\n showCloseButton?: boolean;\n /**\n * ESC 키로 모달 닫기 허용 여부\n * @default true\n */\n closeOnEscape?: boolean;\n children?: React.ReactNode;\n width?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Modal 집합 컴포넌트\n *\n * Div + Button 기본 컴포넌트를 조합하여 모달 UI를 구성합니다.\n * ESC 키 닫기, 포커스 트랩, 오버레이 클릭 닫기 기능을 포함합니다.\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"Modal\",\n * \"props\": {\n * \"isOpen\": \"{{modals.userEdit}}\",\n * \"title\": \"사용자 편집\",\n * \"width\": \"600px\"\n * },\n * \"children\": [...]\n * }\n */\nexport const Modal: React.FC = ({\n isOpen,\n onClose,\n title,\n icon,\n iconClassName = 'text-gray-500 dark:text-gray-400',\n closeOnBackdropClick = true,\n closeOnOverlayClick,\n showCloseButton = true,\n closeOnEscape = true,\n children,\n width = '500px',\n className = '',\n style,\n}) => {\n // closeOnOverlayClick 별칭 지원 (레이아웃 JSON 호환)\n const shouldCloseOnBackdrop = closeOnOverlayClick !== undefined\n ? closeOnOverlayClick\n : closeOnBackdropClick;\n const modalRef = useRef(null);\n const previousFocusRef = useRef(null);\n\n // ESC 키로 모달 닫기\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen && closeOnEscape) {\n onClose();\n }\n };\n\n if (isOpen && closeOnEscape) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isOpen, onClose, closeOnEscape]);\n\n // 포커스 트랩\n useEffect(() => {\n if (isOpen && modalRef.current) {\n // 모달 열릴 때 현재 포커스 저장\n previousFocusRef.current = document.activeElement as HTMLElement;\n\n // 모달 내부 포커스 가능한 요소들\n const focusableElements = modalRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n // 첫 번째 요소에 포커스\n firstElement?.focus();\n\n // Tab 키 핸들러 (포커스 트랩)\n const handleTab = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n if (event.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement?.focus();\n }\n } else {\n // Tab\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement?.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleTab);\n\n return () => {\n document.removeEventListener('keydown', handleTab);\n // 모달 닫힐 때 이전 포커스 복원\n previousFocusRef.current?.focus();\n };\n }\n }, [isOpen]);\n\n // body 스크롤 방지\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n // z-index를 style에서 가져오거나 기본값 50 사용\n const zIndex = style?.zIndex ?? 50;\n\n return (\n \n {/* Overlay */}\n \n\n {/* Modal Content */}\n e.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n >\n {/* Header */}\n {(title || icon || showCloseButton) && (\n
\n {(title || icon) && (\n \n {icon && }\n {title}\n
\n )}\n {showCloseButton && (\n \n \n \n \n \n )}\n \n )}\n\n {/* Body */}\n
\n {children}\n
\n \n \n );\n};\n","import React from 'react';\nimport { Modal } from './Modal';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { P } from '../basic/P';\nimport { Span } from '../basic/Span';\nimport { I } from '../basic/I';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\nexport interface ConfirmDialogProps {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n message: string | React.ReactNode;\n confirmText?: string;\n cancelText?: string;\n onConfirm: () => void;\n onCancel?: () => void;\n confirmButtonVariant?: 'primary' | 'secondary' | 'danger' | 'ghost';\n cancelButtonVariant?: 'primary' | 'secondary' | 'danger' | 'ghost';\n width?: string;\n closeOnOverlay?: boolean;\n /** 로딩 중 여부 (확인 버튼 비활성화 및 텍스트 변경) */\n isLoading?: boolean;\n /** 로딩 중 확인 버튼에 표시할 텍스트 */\n loadingText?: string;\n}\n\n/**\n * ConfirmDialog 집합 컴포넌트\n *\n * Modal 기반 확인/취소 다이얼로그 컴포넌트.\n * 사용자에게 확인을 요청하고 확인/취소 중 하나를 선택하도록 합니다.\n *\n * 기본 컴포넌트 조합:\n * - Modal > P(message) + Button(확인) + Button(취소)\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"ConfirmDialog\",\n * \"props\": {\n * \"isOpen\": \"{{dialogs.deleteConfirm}}\",\n * \"title\": \"삭제 확인\",\n * \"message\": \"정말 이 항목을 삭제하시겠습니까?\",\n * \"confirmText\": \"삭제\",\n * \"cancelText\": \"$t:common.cancel\",\n * \"confirmButtonVariant\": \"danger\"\n * }\n * }\n */\nexport const ConfirmDialog: React.FC = ({\n isOpen,\n onClose,\n title,\n message,\n confirmText,\n cancelText,\n onConfirm,\n onCancel,\n confirmButtonVariant = 'primary',\n // cancelButtonVariant는 현재 고정 스타일 사용으로 미사용\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n cancelButtonVariant: _cancelButtonVariant = 'secondary',\n width = '500px',\n // closeOnOverlay는 Modal에서 처리하므로 미사용\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n closeOnOverlay: _closeOnOverlay = true,\n isLoading = false,\n loadingText,\n}) => {\n // props로 전달된 값이 없으면 다국어 키 사용\n const resolvedConfirmText = confirmText ?? t('common.confirm');\n const resolvedCancelText = cancelText ?? t('common.cancel');\n const resolvedLoadingText = loadingText ?? t('common.loading');\n\n const handleConfirm = () => {\n onConfirm();\n };\n\n const handleCancel = () => {\n // 로딩 중에는 취소 불가\n if (isLoading) return;\n onCancel?.();\n onClose();\n };\n\n const handleClose = () => {\n // 로딩 중에는 닫기 불가\n if (isLoading) return;\n onClose();\n };\n\n // 버튼 variant별 스타일 매핑\n const confirmVariantClassMap: Record<'primary' | 'secondary' | 'danger' | 'ghost', string> = {\n primary: 'bg-blue-600 text-white hover:bg-blue-700',\n secondary: 'bg-gray-200 dark:bg-gray-700 text-gray-800 dark:text-gray-200 hover:bg-gray-300 dark:hover:bg-gray-600',\n danger: 'bg-red-600 text-white hover:bg-red-700',\n ghost: 'bg-transparent text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700',\n };\n\n return (\n \n {/* 본문 */}\n
\n {typeof message === 'string' ? (\n

{message}

\n ) : (\n message\n )}\n
\n\n {/* 푸터 (버튼 영역) */}\n
\n {/* 취소 버튼 */}\n \n {resolvedCancelText}\n \n\n {/* 확인 버튼 */}\n \n {isLoading && (\n \n )}\n {isLoading ? resolvedLoadingText : resolvedConfirmText}\n \n
\n \n );\n};\n","/**\n * FileUploader Context\n *\n * 파일 업로더의 상태와 액션을 공유하는 Context입니다.\n *\n * @module composite/FileUploader/FileUploaderContext\n */\n\nimport React, { createContext, useContext } from 'react';\nimport type { Attachment, PendingFile, ApiEndpoints } from './types';\n\n// ========== Context Types ==========\n\nexport interface FileUploaderContextValue {\n // 상태\n existingFiles: Attachment[];\n pendingFiles: PendingFile[];\n isDragOver: boolean;\n isDeleting: boolean;\n\n // 설정\n maxFiles: number;\n maxSize: number;\n accept?: string;\n endpoints: ApiEndpoints;\n confirmBeforeRemove: boolean;\n\n // 계산된 값\n totalCount: number;\n hasFiles: boolean;\n canAddMore: boolean;\n allItems: (Attachment | PendingFile)[];\n imageFiles: (Attachment | PendingFile)[];\n\n // 액션\n handleFiles: (files: FileList) => Promise;\n handleRemove: (item: PendingFile | Attachment) => Promise;\n handleRetry: (pendingFile: PendingFile) => void;\n handleUploadAll: () => Promise;\n handleOpenGallery: (item: PendingFile | Attachment) => void;\n handleDownload: (item: Attachment) => Promise;\n handleDragEnd: (event: import('@dnd-kit/core').DragEndEvent) => Promise;\n\n // 드래그 상태 설정\n setIsDragOver: (value: boolean) => void;\n\n // Input ref\n inputRef: React.RefObject;\n\n // 갤러리 상태\n galleryOpen: boolean;\n setGalleryOpen: (value: boolean) => void;\n galleryStartIndex: number;\n galleryKeyRef: React.MutableRefObject;\n\n // 삭제 확인 모달 상태\n confirmDialogOpen: boolean;\n setConfirmDialogOpen: (value: boolean) => void;\n itemToDelete: Attachment | null;\n executeRemoveAttachment: (item: Attachment) => Promise;\n\n // 인증된 이미지 URL 캐시\n authenticatedImageUrls: Map;\n}\n\n// ========== Context ==========\n\nconst FileUploaderContext = createContext(null);\n\n/**\n * FileUploader Context Provider\n */\nexport const FileUploaderProvider: React.FC<{\n value: FileUploaderContextValue;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n \n {children}\n \n );\n};\n\n/**\n * FileUploader Context 사용 훅\n */\nexport const useFileUploaderContext = (): FileUploaderContextValue => {\n const context = useContext(FileUploaderContext);\n if (!context) {\n throw new Error('useFileUploaderContext must be used within FileUploaderProvider');\n }\n return context;\n};\n\nexport default FileUploaderContext;","/**\n * Browser Image Compression\n * v2.0.2\n * by Donald \n * https://github.com/Donaldcwl/browser-image-compression\n */\n\nfunction _mergeNamespaces(e,t){return t.forEach((function(t){t&&\"string\"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach((function(r){if(\"default\"!==r&&!(r in e)){var i=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,i.get?i:{enumerable:!0,get:function(){return t[r]}})}}))})),Object.freeze(e)}function copyExifWithoutOrientation(e,t){return new Promise((function(r,i){let o;return getApp1Segment(e).then((function(e){try{return o=e,r(new Blob([t.slice(0,2),o,t.slice(2)],{type:\"image/jpeg\"}))}catch(e){return i(e)}}),i)}))}const getApp1Segment=e=>new Promise(((t,r)=>{const i=new FileReader;i.addEventListener(\"load\",(({target:{result:e}})=>{const i=new DataView(e);let o=0;if(65496!==i.getUint16(o))return r(\"not a valid JPEG\");for(o+=2;;){const a=i.getUint16(o);if(65498===a)break;const s=i.getUint16(o+2);if(65505===a&&1165519206===i.getUint32(o+4)){const a=o+10;let f;switch(i.getUint16(a)){case 18761:f=!0;break;case 19789:f=!1;break;default:return r(\"TIFF header contains invalid endian\")}if(42!==i.getUint16(a+2,f))return r(\"TIFF header contains invalid version\");const l=i.getUint32(a+4,f),c=a+l+2+12*i.getUint16(a+l,f);for(let e=a+l+2;e>>24&255,i[r+1]=o>>>16&255,i[r+2]=o>>>8&255,i[r+3]=o>>>0&255,new Uint8Array(i.buffer,0,r+4)},UZIP.deflateRaw=function(e,t){null==t&&(t={level:6});var r=new Uint8Array(50+Math.floor(1.1*e.length)),i=UZIP.F.deflateRaw(e,r,i,t.level);return new Uint8Array(r.buffer,0,i)},UZIP.encode=function(e,t){null==t&&(t=!1);var r=0,i=UZIP.bin.writeUint,o=UZIP.bin.writeUshort,a={};for(var s in e){var f=!UZIP._noNeed(s)&&!t,l=e[s],c=UZIP.crc.crc(l,0,l.length);a[s]={cpr:f,usize:l.length,crc:c,file:f?UZIP.deflateRaw(l):l}}for(var s in a)r+=a[s].file.length+30+46+2*UZIP.bin.sizeUTF8(s);r+=22;var u=new Uint8Array(r),h=0,d=[];for(var s in a){var A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,0)}var g=0,p=h;for(var s in a){A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,1,d[g++])}var m=h-p;return i(u,h,101010256),h+=4,o(u,h+=4,g),o(u,h+=2,g),i(u,h+=2,m),i(u,h+=4,p),h+=4,h+=2,u.buffer},UZIP._noNeed=function(e){var t=e.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(t)},UZIP._writeHeader=function(e,t,r,i,o,a){var s=UZIP.bin.writeUint,f=UZIP.bin.writeUshort,l=i.file;return s(e,t,0==o?67324752:33639248),t+=4,1==o&&(t+=2),f(e,t,20),f(e,t+=2,0),f(e,t+=2,i.cpr?8:0),s(e,t+=2,0),s(e,t+=4,i.crc),s(e,t+=4,l.length),s(e,t+=4,i.usize),f(e,t+=4,UZIP.bin.sizeUTF8(r)),f(e,t+=2,0),t+=2,1==o&&(t+=2,t+=2,s(e,t+=6,a),t+=4),t+=UZIP.bin.writeUTF8(e,t,r),0==o&&(e.set(l,t),t+=l.length),t},UZIP.crc={table:function(){for(var e=new Uint32Array(256),t=0;t<256;t++){for(var r=t,i=0;i<8;i++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update:function(e,t,r,i){for(var o=0;o>>8;return e},crc:function(e,t,r){return 4294967295^UZIP.crc.update(4294967295,e,t,r)}},UZIP.adler=function(e,t,r){for(var i=1,o=0,a=t,s=t+r;a>8&255},readUint:function(e,t){return 16777216*e[t+3]+(e[t+2]<<16|e[t+1]<<8|e[t])},writeUint:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255,e[t+2]=r>>16&255,e[t+3]=r>>24&255},readASCII:function(e,t,r){for(var i=\"\",o=0;o>6,e[t+o+1]=128|s>>0&63,o+=2;else if(0==(4294901760&s))e[t+o]=224|s>>12,e[t+o+1]=128|s>>6&63,e[t+o+2]=128|s>>0&63,o+=3;else{if(0!=(4292870144&s))throw\"e\";e[t+o]=240|s>>18,e[t+o+1]=128|s>>12&63,e[t+o+2]=128|s>>6&63,e[t+o+3]=128|s>>0&63,o+=4}}return o},sizeUTF8:function(e){for(var t=e.length,r=0,i=0;i>>3}var d=a.lits,A=a.strt,g=a.prev,p=0,m=0,w=0,v=0,b=0,y=0;for(h>2&&(A[y=UZIP.F._hash(e,0)]=0),l=0;l14e3||m>26697)&&h-l>100&&(u>>16,B=65535&F;if(0!=F){B=65535&F;var U=s(_=F>>>16,a.of0);a.lhst[257+U]++;var C=s(B,a.df0);a.dhst[C]++,v+=a.exb[U]+a.dxb[C],d[p]=_<<23|l-u,d[p+1]=B<<16|U<<8|C,p+=2,u=l+_}else a.lhst[e[l]]++;m++}}for(w==l&&0!=e.length||(u>>3},UZIP.F._bestMatch=function(e,t,r,i,o,a){var s=32767&t,f=r[s],l=s-f+32768&32767;if(f==s||i!=UZIP.F._hash(e,t-l))return 0;for(var c=0,u=0,h=Math.min(32767,t);l<=h&&0!=--a&&f!=s;){if(0==c||e[t+c]==e[t+c-l]){var d=UZIP.F._howLong(e,t,l);if(d>c){if(u=l,(c=d)>=o)break;l+2A&&(A=m,f=p)}}}l+=(s=f)-(f=r[s])+32768&32767}return c<<16|u},UZIP.F._howLong=function(e,t,r){if(e[t]!=e[t-r]||e[t+1]!=e[t+1-r]||e[t+2]!=e[t+2-r])return 0;var i=t,o=Math.min(e.length,t+258);for(t+=3;t>>23,T=M+(8388607&S);M>16,H=O>>8&255,L=255&O;y(f,l=UZIP.F._writeLit(257+H,C,f,l),R-v.of0[H]),l+=v.exb[H],b(f,l=UZIP.F._writeLit(L,I,f,l),P-v.df0[L]),l+=v.dxb[L],M+=R}}l=UZIP.F._writeLit(256,C,f,l)}return l},UZIP.F._copyExact=function(e,t,r,i,o){var a=o>>>3;return i[a]=r,i[a+1]=r>>>8,i[a+2]=255-i[a],i[a+3]=255-i[a+1],a+=4,i.set(new Uint8Array(e.buffer,t,r),a),o+(r+4<<3)},UZIP.F.getTrees=function(){for(var e=UZIP.F.U,t=UZIP.F._hufTree(e.lhst,e.ltree,15),r=UZIP.F._hufTree(e.dhst,e.dtree,15),i=[],o=UZIP.F._lenCodes(e.ltree,i),a=[],s=UZIP.F._lenCodes(e.dtree,a),f=0;f4&&0==e.itree[1+(e.ordr[c-1]<<1)];)c--;return[t,r,l,o,s,c,i,a]},UZIP.F.getSecond=function(e){for(var t=[],r=0;r>1)+\",\");return t},UZIP.F.contSize=function(e,t){for(var r=0,i=0;i15&&(UZIP.F._putsE(r,i,s,f),i+=f)}return i},UZIP.F._lenCodes=function(e,t){for(var r=e.length;2!=r&&0==e[r-1];)r-=2;for(var i=0;i>>1,138))<11?t.push(17,c-3):t.push(18,c-11),i+=2*c-2}else if(o==f&&a==o&&s==o){for(l=i+5;l+2>>1,6);t.push(16,c-3),i+=2*c-2}else t.push(o,0)}return r>>>1},UZIP.F._hufTree=function(e,t,r){var i=[],o=e.length,a=t.length,s=0;for(s=0;sr&&(UZIP.F.restrictDepth(l,r,p),p=r),s=0;st;i++){var s=e[i].d;e[i].d=t,a+=o-(1<>>=r-t;a>0;){(s=e[i].d)=0;i--)e[i].d==t&&a<0&&(e[i].d--,a++);0!=a&&console.log(\"debt left\")},UZIP.F._goodIndex=function(e,t){var r=0;return t[16|r]<=e&&(r|=16),t[8|r]<=e&&(r|=8),t[4|r]<=e&&(r|=4),t[2|r]<=e&&(r|=2),t[1|r]<=e&&(r|=1),r},UZIP.F._writeLit=function(e,t,r,i){return UZIP.F._putsF(r,i,t[e<<1]),i+t[1+(e<<1)]},UZIP.F.inflate=function(e,t){var r=Uint8Array;if(3==e[0]&&0==e[1])return t||new r(0);var i=UZIP.F,o=i._bitsF,a=i._bitsE,s=i._decodeTiny,f=i.makeCodes,l=i.codes2map,c=i._get17,u=i.U,h=null==t;h&&(t=new r(e.length>>>2<<3));for(var d,A,g=0,p=0,m=0,w=0,v=0,b=0,y=0,E=0,F=0;0==g;)if(g=o(e,F,1),p=o(e,F+1,2),F+=3,0!=p){if(h&&(t=UZIP.F._check(t,E+(1<<17))),1==p&&(d=u.flmap,A=u.fdmap,b=511,y=31),2==p){m=a(e,F,5)+257,w=a(e,F+5,5)+1,v=a(e,F+10,4)+4,F+=14;for(var _=0;_<38;_+=2)u.itree[_]=0,u.itree[_+1]=0;var B=1;for(_=0;_B&&(B=U)}F+=3*v,f(u.itree,B),l(u.itree,B,u.imap),d=u.lmap,A=u.dmap,F=s(u.imap,(1<>>4;if(M>>>8==0)t[E++]=M;else{if(256==M)break;var x=E+M-254;if(M>264){var S=u.ldef[M-257];x=E+(S>>>3)+a(e,F,7&S),F+=7&S}var R=A[c(e,F)&y];F+=15&R;var T=R>>>4,O=u.ddef[T],P=(O>>>4)+o(e,F,15&O);for(F+=15&O,h&&(t=UZIP.F._check(t,E+(1<<17)));E>>3),L=e[H-4]|e[H-3]<<8;h&&(t=UZIP.F._check(t,E+L)),t.set(new r(e.buffer,e.byteOffset+H,L),E),F=H+L<<3,E+=L}return t.length==E?t:t.slice(0,E)},UZIP.F._check=function(e,t){var r=e.length;if(t<=r)return e;var i=new Uint8Array(Math.max(r<<1,t));return i.set(e,0),i},UZIP.F._decodeTiny=function(e,t,r,i,o,a){for(var s=UZIP.F._bitsE,f=UZIP.F._get17,l=0;l>>4;if(u<=15)a[l]=u,l++;else{var h=0,d=0;16==u?(d=3+s(i,o,2),o+=2,h=a[l-1]):17==u?(d=3+s(i,o,3),o+=3):18==u&&(d=11+s(i,o,7),o+=7);for(var A=l+d;l>>1;ao&&(o=f),a++}for(;a>1,f=e[a+1],l=s<<4|f,c=t-f,u=e[a]<>>15-t]=l,u++}},UZIP.F.revCodes=function(e,t){for(var r=UZIP.F.U.rev15,i=15-t,o=0;o>>i}},UZIP.F._putsE=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},UZIP.F._putsF=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},UZIP.F._bitsE=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},UZIP.F._get25=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},UZIP.F.U=(r=Uint16Array,i=Uint32Array,{next_code:new r(16),bl_count:new r(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new r(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new i(32),flmap:new r(512),fltree:[],fdmap:new r(32),fdtree:[],lmap:new r(32768),ltree:[],ttree:[],dmap:new r(32768),dtree:[],imap:new r(512),itree:[],rev15:new r(32768),lhst:new i(286),dhst:new i(30),ihst:new i(19),lits:new i(15e3),strt:new r(65536),prev:new r(32768)}),function(){for(var e=UZIP.F.U,t=0;t<32768;t++){var r=t;r=(4278255360&(r=(4042322160&(r=(3435973836&(r=(2863311530&r)>>>1|(1431655765&r)<<1))>>>2|(858993459&r)<<2))>>>4|(252645135&r)<<4))>>>8|(16711935&r)<<8,e.rev15[t]=(r>>>16|r<<16)>>>17}function pushV(e,t,r){for(;0!=t--;)e.push(0,r)}for(t=0;t<32;t++)e.ldef[t]=e.of0[t]<<3|e.exb[t],e.ddef[t]=e.df0[t]<<4|e.dxb[t];pushV(e.fltree,144,8),pushV(e.fltree,112,9),pushV(e.fltree,24,7),pushV(e.fltree,8,8),UZIP.F.makeCodes(e.fltree,9),UZIP.F.codes2map(e.fltree,9,e.flmap),UZIP.F.revCodes(e.fltree,9),pushV(e.fdtree,32,5),UZIP.F.makeCodes(e.fdtree,5),UZIP.F.codes2map(e.fdtree,5,e.fdmap),UZIP.F.revCodes(e.fdtree,5),pushV(e.itree,19,0),pushV(e.ltree,286,0),pushV(e.dtree,30,0),pushV(e.ttree,320,0)}()}();var UZIP=_mergeNamespaces({__proto__:null,default:e},[e]);const UPNG=function(){var e={nextZero(e,t){for(;0!=e[t];)t++;return t},readUshort:(e,t)=>e[t]<<8|e[t+1],writeUshort(e,t,r){e[t]=r>>8&255,e[t+1]=255&r},readUint:(e,t)=>16777216*e[t]+(e[t+1]<<16|e[t+2]<<8|e[t+3]),writeUint(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r},readASCII(e,t,r){let i=\"\";for(let o=0;oe.length<2?`0${e}`:e,readUTF8(t,r,i){let o,a=\"\";for(let o=0;o>3)]>>7-((7&A)<<0)&1);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E>2)]>>6-((3&A)<<1)&3);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E>1)]>>4-((1&A)<<2)&15);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E>>3)]>>>7-(7&B)&1))==255*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(2==h)for(B=0;B>>2)]>>>6-((3&B)<<1)&3))==85*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(4==h)for(B=0;B>>1)]>>>4-((1&B)<<2)&15))==17*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(8==h)for(B=0;B>3,s=Math.ceil(r*o/8),f=new Uint8Array(i*s);let l=0;const c=[0,0,4,0,2,0,1],u=[0,4,0,2,0,1,0],h=[8,8,8,4,4,2,2],d=[8,8,4,4,2,2,1];let A=0;for(;A<7;){const p=h[A],m=d[A];let w=0,v=0,b=c[A];for(;b>3])>>7-(7&i)&1,f[_*s+(t>>3)]|=g<<7-((7&t)<<0);if(2==o)g=(g=e[i>>3])>>6-(7&i)&3,f[_*s+(t>>2)]|=g<<6-((3&t)<<1);if(4==o)g=(g=e[i>>3])>>4-(7&i)&15,f[_*s+(t>>1)]|=g<<4-((1&t)<<2);if(o>=8){const r=_*s+t*a;for(let t=0;t>3)+t]}i+=o,t+=m}F++,_+=p}w*v!=0&&(l+=v*(1+E)),A+=1}return f}(r,e)),r}function _inflate(e,r){return t(new Uint8Array(e.buffer,2,e.length-6),r)}var t=function(){const e={H:{}};return e.H.N=function(t,r){const i=Uint8Array;let o,a,s=0,f=0,l=0,c=0,u=0,h=0,d=0,A=0,g=0;if(3==t[0]&&0==t[1])return r||new i(0);const p=e.H,m=p.b,w=p.e,v=p.R,b=p.n,y=p.A,E=p.Z,F=p.m,_=null==r;for(_&&(r=new i(t.length>>>2<<5));0==s;)if(s=m(t,g,1),f=m(t,g+1,2),g+=3,0!=f){if(_&&(r=e.H.W(r,A+(1<<17))),1==f&&(o=F.J,a=F.h,h=511,d=31),2==f){l=w(t,g,5)+257,c=w(t,g+5,5)+1,u=w(t,g+10,4)+4,g+=14;let e=1;for(var B=0;B<38;B+=2)F.Q[B]=0,F.Q[B+1]=0;for(B=0;Be&&(e=r)}g+=3*u,b(F.Q,e),y(F.Q,e,F.u),o=F.w,a=F.d,g=v(F.u,(1<>>4;if(i>>>8==0)r[A++]=i;else{if(256==i)break;{let e=A+i-254;if(i>264){const r=F.q[i-257];e=A+(r>>>3)+w(t,g,7&r),g+=7&r}const o=a[E(t,g)&d];g+=15&o;const s=o>>>4,f=F.c[s],l=(f>>>4)+m(t,g,15&f);for(g+=15&f;A>>3),a=t[o-4]|t[o-3]<<8;_&&(r=e.H.W(r,A+a)),r.set(new i(t.buffer,t.byteOffset+o,a),A),g=o+a<<3,A+=a}return r.length==A?r:r.slice(0,A)},e.H.W=function(e,t){const r=e.length;if(t<=r)return e;const i=new Uint8Array(r<<1);return i.set(e,0),i},e.H.R=function(t,r,i,o,a,s){const f=e.H.e,l=e.H.Z;let c=0;for(;c>>4;if(i<=15)s[c]=i,c++;else{let e=0,t=0;16==i?(t=3+f(o,a,2),a+=2,e=s[c-1]):17==i?(t=3+f(o,a,3),a+=3):18==i&&(t=11+f(o,a,7),a+=7);const r=c+t;for(;c>>1;for(;ao&&(o=r),a++}for(;a>1,s=t[e+1],f=o<<4|s,l=r-s;let c=t[e]<>>15-r]=f,c++}}},e.H.l=function(t,r){const i=e.H.m.r,o=15-r;for(let e=0;e>>o}},e.H.M=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},e.H.I=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},e.H.e=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},e.H.i=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},e.H.m=function(){const e=Uint16Array,t=Uint32Array;return{K:new e(16),j:new e(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new e(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new t(32),J:new e(512),_:[],h:new e(32),$:[],w:new e(32768),C:[],v:[],d:new e(32768),D:[],u:new e(512),Q:[],r:new e(32768),s:new t(286),Y:new t(30),a:new t(19),t:new t(15e3),k:new e(65536),g:new e(32768)}}(),function(){const t=e.H.m;for(var r=0;r<32768;r++){let e=r;e=(2863311530&e)>>>1|(1431655765&e)<<1,e=(3435973836&e)>>>2|(858993459&e)<<2,e=(4042322160&e)>>>4|(252645135&e)<<4,e=(4278255360&e)>>>8|(16711935&e)<<8,t.r[r]=(e>>>16|e<<16)>>>17}function n(e,t,r){for(;0!=t--;)e.push(0,r)}for(r=0;r<32;r++)t.q[r]=t.S[r]<<3|t.T[r],t.c[r]=t.p[r]<<4|t.z[r];n(t._,144,8),n(t._,112,9),n(t._,24,7),n(t._,8,8),e.H.n(t._,9),e.H.A(t._,9,t.J),e.H.l(t._,9),n(t.$,32,5),e.H.n(t.$,5),e.H.A(t.$,5,t.h),e.H.l(t.$,5),n(t.Q,19,0),n(t.C,286,0),n(t.D,30,0),n(t.v,320,0)}(),e.H.N}();function _getBPP(e){return[1,null,3,1,2,null,4][e.ctype]*e.depth}function _filterZero(e,t,r,i,o){let a=_getBPP(t);const s=Math.ceil(i*a/8);let f,l;a=Math.ceil(a/8);let c=e[r],u=0;if(c>1&&(e[r]=[0,0,1][c-2]),3==c)for(u=a;u>>1)&255;for(let t=0;t>>1);for(;u>>1)}else{for(;u=0&&f>=0?(h=r*t+a<<2,d=(f+r)*o+s+a<<2):(h=(-f+r)*t-s+a<<2,d=r*o+a<<2),0==l)i[d]=e[h],i[d+1]=e[h+1],i[d+2]=e[h+2],i[d+3]=e[h+3];else if(1==l){var A=e[h+3]*(1/255),g=e[h]*A,p=e[h+1]*A,m=e[h+2]*A,w=i[d+3]*(1/255),v=i[d]*w,b=i[d+1]*w,y=i[d+2]*w;const t=1-A,r=A+w*t,o=0==r?0:1/r;i[d+3]=255*r,i[d+0]=(g+v*t)*o,i[d+1]=(p+b*t)*o,i[d+2]=(m+y*t)*o}else if(2==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];A==w&&g==v&&p==b&&m==y?(i[d]=0,i[d+1]=0,i[d+2]=0,i[d+3]=0):(i[d]=g,i[d+1]=p,i[d+2]=m,i[d+3]=A)}else if(3==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];if(A==w&&g==v&&p==b&&m==y)continue;if(A<220&&w>20)return!1}return!0}return{decode:function decode(r){const i=new Uint8Array(r);let o=8;const a=e,s=a.readUshort,f=a.readUint,l={tabs:{},frames:[]},c=new Uint8Array(i.length);let u,h=0,d=0;const A=[137,80,78,71,13,10,26,10];for(var g=0;g<8;g++)if(i[g]!=A[g])throw\"The input is not a PNG file!\";for(;o>>1:r>>>=1;e[t]=r}return e}(),update(e,t,r,o){for(let a=0;a>>8;return e},crc:(e,t,r)=>4294967295^i.update(4294967295,e,t,r)};function addErr(e,t,r,i){t[r]+=e[0]*i>>4,t[r+1]+=e[1]*i>>4,t[r+2]+=e[2]*i>>4,t[r+3]+=e[3]*i>>4}function N(e){return Math.max(0,Math.min(255,e))}function D(e,t){const r=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2],a=e[3]-t[3];return r*r+i*i+o*o+a*a}function dither(e,t,r,i,o,a,s){null==s&&(s=1);const f=i.length,l=[];for(var c=0;c>>0&255,e>>>8&255,e>>>16&255,e>>>24&255])}for(c=0;c>2]=u,A[c>>2]=i[u]}}function _main(e,r,o,a,s){null==s&&(s={});const{crc:f}=i,l=t.writeUint,c=t.writeUshort,u=t.writeASCII;let h=8;const d=e.frames.length>1;let A,g=!1,p=33+(d?20:0);if(null!=s.sRGB&&(p+=13),null!=s.pHYs&&(p+=21),null!=s.iCCP&&(A=pako.deflate(s.iCCP),p+=21+A.length+4),3==e.ctype){for(var m=e.plte.length,w=0;w>>24!=255&&(g=!0);p+=8+3*m+4+(g?8+1*m+4:0)}for(var v=0;v>>8&255,a=r>>>16&255;b[h+t+0]=i,b[h+t+1]=o,b[h+t+2]=a}if(h+=3*m,l(b,h,f(b,h-3*m-4,3*m+4)),h+=4,g){l(b,h,m),h+=4,u(b,h,\"tRNS\"),h+=4;for(w=0;w>>24&255;h+=m,l(b,h,f(b,h-m-4,m+4)),h+=4}}let E=0;for(v=0;vc&&(c=t),eh&&(h=e))}-1==c&&(s=f=c=h=0),a&&(1==(1&s)&&s--,1==(1&f)&&f--);const v=(c-s+1)*(h-f+1);v>2,e>>2);F.push(_);const t=new Uint8Array(r.abuf,i,e);h&&dither(B.img,B.rect.width,B.rect.height,E,t,_),B.img.set(t),i+=e}}else for(p=0;pU&&t==e[w-U])_[w]=_[w-U];else{let e=y[t];if(null==e&&(y[t]=e=E.length,E.push(t),E.length>=300))break;_[w]=e}}}const C=E.length;C<=256&&0==u&&(A=C<=2?1:C<=4?2:C<=16?4:8,A=Math.max(A,c));for(p=0;p>1)]|=o[e+Q]<<4-4*(1&Q);else if(2==A)for(Q=0;Q>2)]|=o[e+Q]<<6-2*(3&Q);else if(1==A)for(Q=0;Q>3)]|=o[e+Q]<<7-1*(7&Q)}t=I,d=3,i=1}else if(0==v&&1==b.length){I=new Uint8Array(U*e*3);const o=U*e;for(w=0;ww&&(w=i),fv&&(v=f))}-1==w&&(p=m=w=v=0),f&&(1==(1&p)&&p--,1==(1&m)&&m--),s={x:p,y:m,width:w-p+1,height:v-m+1};const b=o[a];b.rect=s,b.blend=1,b.img=new Uint8Array(s.width*s.height*4),0==o[a-1].dispose?(e(u,r,i,b.img,s.width,s.height,-s.x,-s.y,0),_prepareDiff(A,r,i,b.img,s)):e(A,r,i,b.img,s.width,s.height,-s.x,-s.y,0)}function _prepareDiff(t,r,i,o,a){e(t,r,i,o,a.width,a.height,-a.x,-a.y,2)}function _filterZero(e,t,r,i,o,a,s){const f=[];let l,c=[0,1,2,3,4];-1!=a?c=[a]:(t*i>5e5||1==r)&&(c=[0]),s&&(l={level:0});const u=UZIP;for(var h=0;h>1)+256&255;if(4==s)for(c=a;c>1)&255;for(c=a;c>1)&255}if(4==s){for(c=0;c>2);let u;if(r.length<2e7)for(var h=0;h>2]=u.ind,o[h>>2]=u.est.rgba}else for(h=0;h>2]=u.ind,o[h>>2]=u.est.rgba}return{abuf:i.buffer,inds:c,plte:f}}function getKDtree(e,t,r){null==r&&(r=1e-4);const i=new Uint32Array(e.buffer),o={i0:0,i1:e.length,bst:null,est:null,tdst:0,left:null,right:null};o.bst=stats(e,o.i0,o.i1),o.est=estats(o.bst);const a=[o];for(;a.lengtht&&(t=a[s].est.L,o=s);if(t=l||f.i1<=l){f.est.L=0;continue}const c={i0:f.i0,i1:l,bst:null,est:null,tdst:0,left:null,right:null};c.bst=stats(e,c.i0,c.i1),c.est=estats(c.bst);const u={i0:l,i1:f.i1,bst:null,est:null,tdst:0,left:null,right:null};u.bst={R:[],m:[],N:f.bst.N-c.bst.N};for(s=0;s<16;s++)u.bst.R[s]=f.bst.R[s]-c.bst.R[s];for(s=0;s<4;s++)u.bst.m[s]=f.bst.m[s]-c.bst.m[s];u.est=estats(u.bst),f.left=c,f.right=u,a[o]=c,a.push(u)}a.sort(((e,t)=>t.bst.N-e.bst.N));for(s=0;s0&&(s=e.right,f=e.left);const l=getNearest(s,t,r,i,o);if(l.tdst<=a*a)return l;const c=getNearest(f,t,r,i,o);return c.tdsta;)i-=4;if(r>=i)break;const s=t[r>>2];t[r>>2]=t[i>>2],t[i>>2]=s,r+=4,i-=4}for(;vecDot(e,r,o)>a;)r-=4;return r+4}function vecDot(e,t,r){return e[t]*r[0]+e[t+1]*r[1]+e[t+2]*r[2]+e[t+3]*r[3]}function stats(e,t,r){const i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=[0,0,0,0],a=r-t>>2;for(let a=t;a>>0}}var o={multVec:(e,t)=>[e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7]*t[3],e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11]*t[3],e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]*t[3]],dot:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],sml:(e,t)=>[e*t[0],e*t[1],e*t[2],e*t[3]]};UPNG.encode=function encode(e,t,r,i,o,a,s){null==i&&(i=0),null==s&&(s=!1);const f=compress(e,t,r,i,[!1,!1,!1,0,s,!1]);return compressPNG(f,-1),_main(f,t,r,o,a)},UPNG.encodeLL=function encodeLL(e,t,r,i,o,a,s,f){const l={ctype:0+(1==i?0:2)+(0==o?0:4),depth:a,frames:[]},c=(i+o)*a,u=c*t;for(let i=0;i>>0),set16(1),set16(32),set32(3),set32(c),set32(2835),set32(2835),seek(8),set32(16711680),set32(65280),set32(255),set32(4278190080),set32(1466527264),function convert(){for(;b0;){for(w=122+b*l,g=0;g>>24,d.setUint32(w+g,p<<8|m),g+=4;b++}E{t(new Blob([e],{type:\"image/bmp\"}))}))},_dly:9};var i={CHROME:\"CHROME\",FIREFOX:\"FIREFOX\",DESKTOP_SAFARI:\"DESKTOP_SAFARI\",IE:\"IE\",IOS:\"IOS\",ETC:\"ETC\"},o={[i.CHROME]:16384,[i.FIREFOX]:11180,[i.DESKTOP_SAFARI]:16384,[i.IE]:8192,[i.IOS]:4096,[i.ETC]:8192};const a=\"undefined\"!=typeof window,s=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,f=a&&window.cordova&&window.cordova.require&&window.cordova.require(\"cordova/modulemapper\"),CustomFile=(a||s)&&(f&&f.getOriginalSymbol(window,\"File\")||\"undefined\"!=typeof File&&File),CustomFileReader=(a||s)&&(f&&f.getOriginalSymbol(window,\"FileReader\")||\"undefined\"!=typeof FileReader&&FileReader);function getFilefromDataUrl(e,t,r=Date.now()){return new Promise((i=>{const o=e.split(\",\"),a=o[0].match(/:(.*?);/)[1],s=globalThis.atob(o[1]);let f=s.length;const l=new Uint8Array(f);for(;f--;)l[f]=s.charCodeAt(f);const c=new Blob([l],{type:a});c.name=t,c.lastModified=r,i(c)}))}function getDataUrlFromFile(e){return new Promise(((t,r)=>{const i=new CustomFileReader;i.onload=()=>t(i.result),i.onerror=e=>r(e),i.readAsDataURL(e)}))}function loadImage(e){return new Promise(((t,r)=>{const i=new Image;i.onload=()=>t(i),i.onerror=e=>r(e),i.src=e}))}function getBrowserName(){if(void 0!==getBrowserName.cachedResult)return getBrowserName.cachedResult;let e=i.ETC;const{userAgent:t}=navigator;return/Chrom(e|ium)/i.test(t)?e=i.CHROME:/iP(ad|od|hone)/i.test(t)&&/WebKit/i.test(t)?e=i.IOS:/Safari/i.test(t)?e=i.DESKTOP_SAFARI:/Firefox/i.test(t)?e=i.FIREFOX:(/MSIE/i.test(t)||!0==!!document.documentMode)&&(e=i.IE),getBrowserName.cachedResult=e,getBrowserName.cachedResult}function approximateBelowMaximumCanvasSizeOfBrowser(e,t){const r=getBrowserName(),i=o[r];let a=e,s=t,f=a*s;const l=a>s?s/a:a/s;for(;f>i*i;){const e=(i+a)/2,t=(i+s)/2;er.toBlob(e,t))).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_5.call(this)}catch(e){return f(e)}}.bind(this),f);{if(\"function\"==typeof OffscreenCanvas&&e instanceof OffscreenCanvas)return e.convertToBlob({type:t,quality:a}).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f);{let d;return d=e.toDataURL(t,a),getFilefromDataUrl(d,i,o).then(function(e){try{return l=e,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f)}function $If_6(){return $If_5.call(this)}}function $If_5(){return $If_4.call(this)}}function $If_4(){return s(l)}}))}function cleanupCanvasMemory(e){e.width=0,e.height=0}function isAutoOrientationInBrowser(){return new Promise((function(e,t){let r,i,o,a,s;return void 0!==isAutoOrientationInBrowser.cachedResult?e(isAutoOrientationInBrowser.cachedResult):(r=\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",getFilefromDataUrl(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then((function(r){try{return i=r,drawFileInCanvas(i).then((function(r){try{return o=r[1],canvasToFile(o,i.type,i.name,i.lastModified).then((function(r){try{return a=r,cleanupCanvasMemory(o),drawFileInCanvas(a).then((function(r){try{return s=r[0],isAutoOrientationInBrowser.cachedResult=1===s.width&&2===s.height,e(isAutoOrientationInBrowser.cachedResult)}catch(e){return t(e)}}),t)}catch(e){return t(e)}}),t)}catch(e){return t(e)}}),t)}catch(e){return t(e)}}),t))}))}function getExifOrientation(e){return new Promise(((t,r)=>{const i=new CustomFileReader;i.onload=e=>{const r=new DataView(e.target.result);if(65496!=r.getUint16(0,!1))return t(-2);const i=r.byteLength;let o=2;for(;or(e),i.readAsArrayBuffer(e)}))}function handleMaxWidthOrHeight(e,t){const{width:r}=e,{height:i}=e,{maxWidthOrHeight:o}=t;let a,s=e;return isFinite(o)&&(r>o||i>o)&&([s,a]=getNewCanvasAndCtx(r,i),r>i?(s.width=o,s.height=i/r*o):(s.width=r/i*o,s.height=o),a.drawImage(e,0,0,s.width,s.height),cleanupCanvasMemory(e)),s}function followExifOrientation(e,t){const{width:r}=e,{height:i}=e,[o,a]=getNewCanvasAndCtx(r,i);switch(t>4&&t<9?(o.width=i,o.height=r):(o.width=r,o.height=i),t){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,i);break;case 4:a.transform(1,0,0,-1,0,i);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,i,0);break;case 7:a.transform(0,-1,-1,0,i,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,i),cleanupCanvasMemory(e),o}function compress(e,t,r=0){return new Promise((function(i,o){let a,s,f,l,c,u,h,d,A,g,p,m,w,v,b,y,E,F,_,B;function incProgress(e=5){if(t.signal&&t.signal.aborted)throw t.signal.reason;a+=e,t.onProgress(Math.min(a,100))}function setProgress(e){if(t.signal&&t.signal.aborted)throw t.signal.reason;a=Math.min(Math.max(e,a),100),t.onProgress(a)}return a=r,s=t.maxIteration||10,f=1024*t.maxSizeMB*1024,incProgress(),drawFileInCanvas(e,t).then(function(r){try{return[,l]=r,incProgress(),c=handleMaxWidthOrHeight(l,t),incProgress(),new Promise((function(r,i){var o;if(!(o=t.exifOrientation))return getExifOrientation(e).then(function(e){try{return o=e,$If_2.call(this)}catch(e){return i(e)}}.bind(this),i);function $If_2(){return r(o)}return $If_2.call(this)})).then(function(r){try{return u=r,incProgress(),isAutoOrientationInBrowser().then(function(r){try{return h=r?c:followExifOrientation(c,u),incProgress(),d=t.initialQuality||1,A=t.fileType||e.type,canvasToFile(h,A,e.name,e.lastModified,d).then(function(r){try{{if(g=r,incProgress(),p=g.size>f,m=g.size>e.size,!p&&!m)return setProgress(100),i(g);var a;function $Loop_3(){if(s--&&(b>f||b>w)){let t,r;return t=B?.95*_.width:_.width,r=B?.95*_.height:_.height,[E,F]=getNewCanvasAndCtx(t,r),F.drawImage(_,0,0,t,r),d*=\"image/png\"===A?.85:.95,canvasToFile(E,A,e.name,e.lastModified,d).then((function(e){try{return y=e,cleanupCanvasMemory(_),_=E,b=y.size,setProgress(Math.min(99,Math.floor((v-b)/(v-f)*100))),$Loop_3}catch(e){return o(e)}}),o)}return[1]}return w=e.size,v=g.size,b=v,_=h,B=!t.alwaysKeepResolution&&p,(a=function(e){for(;e;){if(e.then)return void e.then(a,o);try{if(e.pop){if(e.length)return e.pop()?$Loop_3_exit.call(this):e;e=$Loop_3}else e=e.call(this)}catch(e){return o(e)}}}.bind(this))($Loop_3);function $Loop_3_exit(){return cleanupCanvasMemory(_),cleanupCanvasMemory(E),cleanupCanvasMemory(c),cleanupCanvasMemory(h),cleanupCanvasMemory(l),setProgress(100),i(y)}}}catch(u){return o(u)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}))}const l=\"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n const { file, id, imageCompressionLibUrl, options } = e.data\\n options.onProgress = (progress) => self.postMessage({ progress, id })\\n try {\\n if (!scriptImported) {\\n // console.log('[worker] importScripts', imageCompressionLibUrl)\\n self.importScripts(imageCompressionLibUrl)\\n scriptImported = true\\n }\\n // console.log('[worker] self', self)\\n const compressedFile = await imageCompression(file, options)\\n self.postMessage({ file: compressedFile, id })\\n } catch (e) {\\n // console.error('[worker] error', e)\\n self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n }\\n})\\n\";let c;function compressOnWebWorker(e,t){return new Promise(((r,i)=>{c||(c=function createWorkerScriptURL(e){const t=[];return\"function\"==typeof e?t.push(`(${e})()`):t.push(e),URL.createObjectURL(new Blob(t))}(l));const o=new Worker(c);o.addEventListener(\"message\",(function handler(e){if(t.signal&&t.signal.aborted)o.terminate();else if(void 0===e.data.progress){if(e.data.error)return i(new Error(e.data.error)),void o.terminate();r(e.data.file),o.terminate()}else t.onProgress(e.data.progress)})),o.addEventListener(\"error\",i),t.signal&&t.signal.addEventListener(\"abort\",(()=>{i(t.signal.reason),o.terminate()})),o.postMessage({file:e,imageCompressionLibUrl:t.libURL,options:{...t,onProgress:void 0,signal:void 0}})}))}function imageCompression(e,t){return new Promise((function(r,i){let o,a,s,f,l,c;if(o={...t},s=0,({onProgress:f}=o),o.maxSizeMB=o.maxSizeMB||Number.POSITIVE_INFINITY,l=\"boolean\"!=typeof o.useWebWorker||o.useWebWorker,delete o.useWebWorker,o.onProgress=e=>{s=e,\"function\"==typeof f&&f(s)},!(e instanceof Blob||e instanceof CustomFile))return i(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(e.type))return i(new Error(\"The file given is not an image\"));if(c=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!l||\"function\"!=typeof Worker||c)return compress(e,o).then(function(e){try{return a=e,$If_4.call(this)}catch(e){return i(e)}}.bind(this),i);var u=function(){try{return $If_4.call(this)}catch(e){return i(e)}}.bind(this),$Try_1_Catch=function(t){try{return compress(e,o).then((function(e){try{return a=e,u()}catch(e){return i(e)}}),i)}catch(e){return i(e)}};try{return o.libURL=o.libURL||\"https://cdn.jsdelivr.net/npm/browser-image-compression@2.0.2/dist/browser-image-compression.js\",compressOnWebWorker(e,o).then((function(e){try{return a=e,u()}catch(e){return $Try_1_Catch()}}),$Try_1_Catch)}catch(e){$Try_1_Catch()}function $If_4(){try{a.name=e.name,a.lastModified=e.lastModified}catch(e){}try{o.preserveExif&&\"image/jpeg\"===e.type&&(!o.fileType||o.fileType&&o.fileType===e.type)&&(a=copyExifWithoutOrientation(e,a))}catch(e){}return r(a)}}))}imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupCanvasMemory=cleanupCanvasMemory,imageCompression.isAutoOrientationInBrowser=isAutoOrientationInBrowser,imageCompression.approximateBelowMaximumCanvasSizeOfBrowser=approximateBelowMaximumCanvasSizeOfBrowser,imageCompression.copyExifWithoutOrientation=copyExifWithoutOrientation,imageCompression.getBrowserName=getBrowserName,imageCompression.version=\"2.0.2\";export{imageCompression as default};\n//# sourceMappingURL=browser-image-compression.mjs.map\n","/**\n * FileUploader 유틸리티 함수\n *\n * @module composite/FileUploader/utils\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\n/**\n * 파일 크기를 읽기 쉬운 형식으로 변환합니다.\n */\nexport const formatFileSize = (bytes: number): string => {\n const units = ['B', 'KB', 'MB', 'GB'];\n let i = 0;\n let size = bytes;\n while (size >= 1024 && i < units.length - 1) {\n size /= 1024;\n i++;\n }\n return `${size.toFixed(2)} ${units[i]}`;\n};\n\n/**\n * API 에러 응답에서 상세 메시지를 추출합니다.\n */\nexport const extractErrorMessage = (error: unknown): string => {\n // Axios 에러 응답 구조 처리\n if (error && typeof error === 'object') {\n const axiosError = error as {\n response?: {\n data?: {\n message?: string;\n errors?: Record;\n };\n };\n message?: string;\n };\n\n // API 응답의 message 필드\n if (axiosError.response?.data?.message) {\n return axiosError.response.data.message;\n }\n\n // Laravel validation 에러 (errors 객체의 첫 번째 메시지)\n if (axiosError.response?.data?.errors) {\n const firstError = Object.values(axiosError.response.data.errors)[0];\n if (Array.isArray(firstError) && firstError[0]) {\n return firstError[0];\n }\n }\n\n // 일반 에러 메시지\n if (axiosError.message) {\n return axiosError.message;\n }\n }\n\n // Error 인스턴스\n if (error instanceof Error) {\n return error.message;\n }\n\n return '업로드 실패';\n};\n\n/**\n * MIME 타입에 따른 Font Awesome 아이콘 클래스를 반환합니다.\n */\nexport const getFileIcon = (mimeType: string): string => {\n if (!mimeType) return 'fa-file';\n if (mimeType.startsWith('image/')) return 'fa-file-image';\n if (mimeType.startsWith('video/')) return 'fa-file-video';\n if (mimeType.startsWith('audio/')) return 'fa-file-audio';\n if (mimeType === 'application/pdf') return 'fa-file-pdf';\n if (mimeType.includes('word') || mimeType.includes('document')) return 'fa-file-word';\n if (mimeType.includes('excel') || mimeType.includes('spreadsheet')) return 'fa-file-excel';\n if (mimeType.includes('zip') || mimeType.includes('compressed')) return 'fa-file-zipper';\n return 'fa-file';\n};\n\n/**\n * G7Core.t() 번역 함수 참조\n */\nexport const t = (key: string, params?: Record) =>\n G7Core?.t?.(key, params) ?? key;","/**\n * useFileUploader Hook\n *\n * FileUploader의 핵심 로직을 담당하는 훅입니다.\n * - 파일 추가/삭제/업로드\n * - 이미지 압축\n * - 병렬 업로드 큐\n * - 순서 변경\n *\n * @module composite/FileUploader/useFileUploader\n */\n\nimport { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport imageCompression from 'browser-image-compression';\n\nimport type { Attachment, PendingFile, FileUploaderProps, ApiEndpoints } from './types';\nimport { formatFileSize, extractErrorMessage, t } from './utils';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\nexport interface UseFileUploaderOptions {\n attachmentableType?: string;\n attachmentableId?: number;\n collection: string;\n maxFiles: number;\n maxSize: number;\n maxConcurrentUploads: number;\n accept?: string;\n imageCompression?: FileUploaderProps['imageCompression'];\n roleIds: number[];\n autoUpload: boolean;\n initialFiles: Attachment[];\n endpoints: ApiEndpoints;\n onFilesChange?: (files: PendingFile[]) => void;\n onUploadComplete?: (attachments: Attachment[]) => void;\n onUploadError?: (error: string, file: File) => void;\n onRemove?: (id: number | string) => void;\n onReorder?: (files: Attachment[]) => void;\n uploadTriggerEvent?: string;\n confirmBeforeRemove: boolean;\n uploadParams?: Record;\n}\n\nexport interface UseFileUploaderReturn {\n // 상태\n existingFiles: Attachment[];\n pendingFiles: PendingFile[];\n isDragOver: boolean;\n setIsDragOver: (value: boolean) => void;\n isDeleting: boolean;\n\n // 계산된 값\n totalCount: number;\n hasFiles: boolean;\n canAddMore: boolean;\n allItems: (Attachment | PendingFile)[];\n imageFiles: (Attachment | PendingFile)[];\n\n // 액션\n handleFiles: (files: FileList) => Promise;\n handleRemove: (item: PendingFile | Attachment) => Promise;\n handleRetry: (pendingFile: PendingFile) => void;\n handleUploadAll: () => Promise;\n handleOpenGallery: (item: PendingFile | Attachment) => void;\n handleDownload: (item: Attachment) => Promise;\n handleDragEnd: (event: import('@dnd-kit/core').DragEndEvent) => Promise;\n\n // Input ref\n inputRef: React.RefObject;\n\n // 갤러리 상태\n galleryOpen: boolean;\n setGalleryOpen: (value: boolean) => void;\n galleryStartIndex: number;\n galleryKeyRef: React.MutableRefObject;\n\n // 삭제 확인 모달 상태\n confirmDialogOpen: boolean;\n setConfirmDialogOpen: (value: boolean) => void;\n itemToDelete: Attachment | null;\n executeRemoveAttachment: (item: Attachment) => Promise;\n\n // 인증된 이미지 URL 캐시\n authenticatedImageUrls: Map;\n\n // 초기화\n clear: () => void;\n getPendingFiles: () => PendingFile[];\n}\n\nexport function useFileUploader(options: UseFileUploaderOptions): UseFileUploaderReturn {\n const {\n attachmentableType,\n attachmentableId,\n collection,\n maxFiles,\n maxSize,\n maxConcurrentUploads,\n accept,\n imageCompression: compressionOptions,\n roleIds,\n autoUpload,\n initialFiles,\n endpoints,\n onFilesChange,\n onUploadComplete,\n onUploadError,\n onRemove,\n onReorder,\n uploadTriggerEvent,\n confirmBeforeRemove,\n uploadParams,\n } = options;\n\n // 상태\n const [existingFiles, setExistingFiles] = useState(initialFiles);\n const [pendingFiles, setPendingFiles] = useState([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const inputRef = useRef(null);\n const activeUploadsRef = useRef(0);\n // 삭제된 파일 ID 또는 hash를 추적하여 initialFiles 동기화 시 제외\n const deletedIdsRef = useRef>(new Set());\n // 세션 중 업로드된 파일을 추적하여 initialFiles 동기화 시 유지\n const uploadedFilesRef = useRef>(new Map());\n\n // 삭제 확인 모달 상태\n const [confirmDialogOpen, setConfirmDialogOpen] = useState(false);\n const [itemToDelete, setItemToDelete] = useState(null);\n const [isDeleting, setIsDeleting] = useState(false);\n // 순서가 변경되었는지 추적 (변경 후에는 initialFiles 동기화 무시)\n const hasReorderedRef = useRef(false);\n // 드래그 순서 유지: 기존/신규 파일 간 섞인 순서를 보존하기 위한 ID 배열\n const [customOrder, setCustomOrder] = useState<(string | number)[]>([]);\n // initialFiles 참조 안정성 — 외부에서 매 렌더마다 새 배열이 전달되는 경우 방어\n const prevInitialFilesRef = useRef(initialFiles);\n\n // 이미지 갤러리 상태\n const [galleryOpen, setGalleryOpen] = useState(false);\n const [galleryStartIndex, setGalleryStartIndex] = useState(0);\n // 갤러리 리마운트용 key (열릴 때마다 증가)\n const galleryKeyRef = useRef(0);\n // 인증된 이미지 URL 캐시 (기존 첨부파일용)\n const [authenticatedImageUrls, setAuthenticatedImageUrls] = useState>(new Map());\n // ref로 URL 캐시 추적 (stale closure 방지 — cleanup/has 체크에서 항상 최신 참조)\n const authenticatedImageUrlsRef = useRef>(new Map());\n\n // 대기 파일 변경 시 콜백\n useEffect(() => {\n onFilesChange?.(pendingFiles);\n }, [pendingFiles, onFilesChange]);\n\n // initialFiles 참조 안정화 — 매 렌더마다 새 배열이 전달되어도 내용이 같으면 무시\n const stableInitialFiles = useMemo(() => {\n const prev = prevInitialFilesRef.current;\n // 동일 참조면 즉시 반환\n if (prev === initialFiles) return prev;\n // 길이가 다르면 실제 변경\n if (prev.length !== initialFiles.length) {\n prevInitialFilesRef.current = initialFiles;\n return initialFiles;\n }\n // 빈 배열끼리는 항상 동일 (가장 흔한 케이스 — 무한 루프 방지)\n if (prev.length === 0 && initialFiles.length === 0) return prev;\n // ID 기반 얕은 비교\n const changed = initialFiles.some((f, i) => f.id !== prev[i]?.id);\n if (changed) {\n prevInitialFilesRef.current = initialFiles;\n return initialFiles;\n }\n return prev;\n }, [initialFiles]);\n\n // initialFiles prop 변경 시 existingFiles 동기화 (삭제/순서변경된 경우 제외)\n useEffect(() => {\n // 순서가 변경된 후에는 initialFiles 동기화를 무시\n if (hasReorderedRef.current) {\n return;\n }\n const filteredFiles = stableInitialFiles.filter(\n (file) => !deletedIdsRef.current.has(file.id) && (!file.hash || !deletedIdsRef.current.has(file.hash))\n );\n\n // 세션 중 업로드된 파일 병합 (initialFiles에 없는 것만 추가)\n const initialIds = new Set(filteredFiles.map((f) => f.id));\n const sessionUploaded = Array.from(uploadedFilesRef.current.values()).filter(\n (f) => !initialIds.has(f.id) && !deletedIdsRef.current.has(f.id)\n );\n\n setExistingFiles([...filteredFiles, ...sessionUploaded]);\n }, [stableInitialFiles]);\n\n // 이미지 압축\n const compressImage = useCallback(\n async (file: File): Promise => {\n const compressionOpts = {\n maxSizeMB: compressionOptions?.maxSizeMB ?? 1,\n maxWidthOrHeight: compressionOptions?.maxWidthOrHeight ?? 1920,\n useWebWorker: true,\n };\n return await imageCompression(file, compressionOpts);\n },\n [compressionOptions]\n );\n\n // 파일 추가 처리\n const handleFiles = useCallback(\n async (selectedFiles: FileList) => {\n const totalCount = existingFiles.length + pendingFiles.length;\n const remainingSlots = Math.max(0, maxFiles - totalCount);\n const filesToAdd = Array.from(selectedFiles).slice(0, remainingSlots);\n\n // 개수 상한 초과분은 조용히 절단하지 않고 안내 (개수 초과 silent 무시 방지)\n if (selectedFiles.length > remainingSlots) {\n const overflow = Array.from(selectedFiles).slice(remainingSlots);\n const message = t('attachment.upload_limit_exceeded', { max: maxFiles });\n // 잘린 첫 파일을 대표로 콜백에 전달 (없으면 무시)\n onUploadError?.(message, overflow[0] ?? selectedFiles[0]);\n }\n\n for (const file of filesToAdd) {\n // 크기 검증\n if (file.size > maxSize * 1024 * 1024) {\n onUploadError?.(\n `[${file.name}] 파일 크기(${formatFileSize(file.size)})가 최대 허용 크기(${maxSize}MB)를 초과합니다.`,\n file\n );\n continue;\n }\n\n // 확장자/MIME 타입 검증\n if (accept) {\n const ext = '.' + file.name.split('.').pop()?.toLowerCase();\n const acceptedTypes = accept.split(',').map((e) => e.trim().toLowerCase());\n const isAccepted = acceptedTypes.some((accepted) => {\n // MIME 타입 와일드카드 (예: image/*, video/*, audio/*)\n if (accepted.includes('/')) {\n if (accepted.endsWith('/*')) {\n const mimePrefix = accepted.slice(0, -2);\n return file.type.toLowerCase().startsWith(mimePrefix + '/');\n }\n // 정확한 MIME 타입 매칭 (예: image/jpeg)\n return file.type.toLowerCase() === accepted;\n }\n // 확장자 매칭 (예: .jpg, .png)\n return ext === accepted;\n });\n if (!isAccepted) {\n onUploadError?.(`[${file.name}] 허용되지 않는 파일 형식입니다. (허용: ${accept})`, file);\n continue;\n }\n }\n\n const pendingFile: PendingFile = {\n id: `pending-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n file,\n original_filename: file.name,\n mime_type: file.type,\n size: file.size,\n size_formatted: formatFileSize(file.size),\n status: 'pending',\n progress: 0,\n };\n\n // 이미지 미리보기 생성\n if (file.type.startsWith('image/')) {\n pendingFile.preview = URL.createObjectURL(file);\n }\n\n setPendingFiles((prev) => [...prev, pendingFile]);\n\n // 이미지인 경우 압축 처리\n if (file.type.startsWith('image/') && compressionOptions) {\n setPendingFiles((prev) =>\n prev.map((f) => (f.id === pendingFile.id ? { ...f, status: 'compressing' } : f))\n );\n\n try {\n const compressedBlob = await compressImage(file);\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id\n ? {\n ...f,\n compressedBlob,\n size: compressedBlob.size,\n size_formatted: formatFileSize(compressedBlob.size),\n status: 'pending',\n progress: 0,\n }\n : f\n )\n );\n } catch {\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id\n ? { ...f, status: 'error', error: '이미지 압축 실패' }\n : f\n )\n );\n }\n }\n }\n },\n [existingFiles.length, pendingFiles.length, maxFiles, maxSize, accept, compressionOptions, compressImage, onUploadError]\n );\n\n // 단일 파일 업로드\n const uploadSingleFile = useCallback(\n async (pendingFile: PendingFile): Promise => {\n const formData = new FormData();\n\n // 압축된 Blob 또는 원본 파일\n const fileToUpload = pendingFile.compressedBlob\n ? new File([pendingFile.compressedBlob], pendingFile.original_filename, {\n type: pendingFile.mime_type,\n })\n : pendingFile.file;\n\n formData.append('file', fileToUpload);\n\n if (attachmentableType) {\n formData.append('attachmentable_type', attachmentableType);\n }\n if (attachmentableId) {\n formData.append('attachmentable_id', String(attachmentableId));\n }\n formData.append('collection', collection);\n\n roleIds.forEach((roleId) => {\n formData.append('role_ids[]', String(roleId));\n });\n\n // 추가 업로드 파라미터 (예: temp_key)\n if (uploadParams) {\n Object.entries(uploadParams).forEach(([key, value]) => {\n formData.append(key, value);\n });\n }\n\n try {\n const response = await G7Core.api.post(endpoints.upload, formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => {\n const progress = Math.round((progressEvent.loaded * 100) / (progressEvent.total ?? 1));\n setPendingFiles((prev) =>\n prev.map((f) => (f.id === pendingFile.id ? { ...f, progress } : f))\n );\n },\n });\n\n // ResponseHelper 이중 래핑 대응: response.data.data (래핑) 또는 response.data (비래핑)\n const attachment = response?.data?.data ?? response?.data;\n return attachment as Attachment;\n } catch (error: unknown) {\n // API 에러 응답에서 상세 메시지 추출\n const errorMessage = extractErrorMessage(error);\n throw new Error(errorMessage);\n }\n },\n [attachmentableType, attachmentableId, collection, roleIds, endpoints.upload]\n );\n\n // 모든 파일 업로드\n const handleUploadAll = useCallback(async (): Promise => {\n const filesToUpload = pendingFiles.filter(\n (f) => f.status === 'pending' || f.status === 'error'\n );\n\n if (filesToUpload.length === 0) {\n return [];\n }\n\n const uploadedAttachments: Attachment[] = [];\n // 드래그 순서 복원용: pending ID → 업로드된 hash 매핑\n const pendingToHashMap = new Map();\n const uploadQueue = [...filesToUpload];\n\n const processQueue = async () => {\n while (uploadQueue.length > 0 && activeUploadsRef.current < maxConcurrentUploads) {\n const pendingFile = uploadQueue.shift()!;\n activeUploadsRef.current++;\n\n setPendingFiles((prev) =>\n prev.map((f) => (f.id === pendingFile.id ? { ...f, status: 'uploading', progress: 0 } : f))\n );\n\n try {\n const attachment = await uploadSingleFile(pendingFile);\n if (attachment) {\n uploadedAttachments.push(attachment);\n // 드래그 순서 복원용: pending ID → 업로드된 hash 매핑\n pendingToHashMap.set(String(pendingFile.id), String(attachment.hash));\n // 세션 중 업로드된 파일 추적 (initialFiles 동기화 시 유지)\n uploadedFilesRef.current.set(attachment.id, attachment);\n setPendingFiles((prev) => prev.filter((f) => f.id !== pendingFile.id));\n setExistingFiles((prev) => [...prev, attachment]);\n\n // customOrder에 pending ID가 있으면 즉시 hash로 교체\n // → allItems useMemo가 올바른 순서로 E를 표시 (UI 플래시 방지)\n setCustomOrder((prev) => {\n if (prev.length === 0) return prev;\n const pendingId = String(pendingFile.id);\n const hasMatch = prev.some((id) => String(id) === pendingId);\n if (!hasMatch) return prev;\n return prev.map((id) => String(id) === pendingId ? String(attachment.hash) : id);\n });\n\n // 미리보기 URL 해제\n if (pendingFile.preview) {\n URL.revokeObjectURL(pendingFile.preview);\n }\n } else {\n // 업로드 API 성공이지만 응답 파싱 실패 → 에러 상태로 전환 ('uploading' 영구 잔류 방지)\n const invalidMsg = t('attachment.upload_response_invalid');\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id\n ? { ...f, status: 'error', error: invalidMsg }\n : f\n )\n );\n onUploadError?.(\n `[${pendingFile.original_filename}] ${invalidMsg}`,\n pendingFile.file\n );\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : '업로드 실패';\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id ? { ...f, status: 'error', error: errorMessage } : f\n )\n );\n onUploadError?.(`[${pendingFile.original_filename}] ${errorMessage}`, pendingFile.file);\n } finally {\n activeUploadsRef.current--;\n }\n }\n };\n\n // 병렬 업로드 시작\n const workers = Array(Math.min(maxConcurrentUploads, filesToUpload.length))\n .fill(null)\n .map(() => processQueue());\n\n await Promise.all(workers);\n\n if (uploadedAttachments.length > 0) {\n onUploadComplete?.(uploadedAttachments);\n\n // 편집 모드(reorder 엔드포인트 존재)에서 드래그 순서가 있는 경우에만 onReorder 호출\n // → form.images를 올바른 순서로 덮어쓰기 (onUploadComplete의 append 순서를 교정)\n // 복사/생성 모드에서는 호출하지 않음 (linkTempImages가 별도 처리하므로 중복 방지)\n // NOTE: customOrder의 pending ID→hash 교체는 processQueue 내에서 즉시 처리됨\n if (endpoints.reorder && customOrder.length > 0 && onReorder) {\n const allExisting = [...existingFiles, ...uploadedAttachments];\n\n // pending ID를 업로드된 hash로 교체 (이미 setCustomOrder로 갱신되었지만, 클로저 값 기준 재계산)\n const updatedOrder = customOrder.map((id) => {\n const hash = pendingToHashMap.get(String(id));\n return hash ?? id;\n });\n\n const orderMap = new Map(updatedOrder.map((id, idx) => [String(id), idx]));\n const ordered = [...allExisting]\n .sort((a, b) => {\n const aOrder = orderMap.get(String(a.hash)) ?? allExisting.length;\n const bOrder = orderMap.get(String(b.hash)) ?? allExisting.length;\n return aOrder - bOrder;\n })\n .map((item, idx) => ({ ...item, sort_order: idx, order: idx + 1 }));\n\n onReorder(ordered);\n }\n }\n\n return uploadedAttachments;\n }, [pendingFiles, maxConcurrentUploads, uploadSingleFile, onUploadComplete, onUploadError, customOrder, existingFiles, onReorder, endpoints.reorder]);\n\n // 업로드 트리거 이벤트 구독 (uploadTriggerEvent가 있는 경우)\n useEffect(() => {\n if (!uploadTriggerEvent) return;\n\n const unsubscribe = G7Core.componentEvent.on(uploadTriggerEvent, async () => {\n // 업로드할 파일이 있으면 업로드, 없으면 기존 파일 ID 반환\n const uploadedAttachments = await handleUploadAll();\n return {\n uploadedAttachments,\n existingFiles,\n allFiles: [...existingFiles, ...uploadedAttachments],\n };\n });\n\n return () => {\n unsubscribe();\n };\n }, [uploadTriggerEvent, handleUploadAll, existingFiles]);\n\n // autoUpload가 true이고 pendingFiles가 추가되면 자동 업로드\n useEffect(() => {\n if (autoUpload && pendingFiles.some((f) => f.status === 'pending')) {\n handleUploadAll();\n }\n }, [autoUpload, pendingFiles, handleUploadAll]);\n\n // 실제 삭제 실행 (기존 첨부파일)\n const executeRemoveAttachment = useCallback(\n async (item: Attachment) => {\n setIsDeleting(true);\n try {\n // id가 있는 경우만 서버 API 삭제 호출 (복사 모드 등 id 없는 이미지는 로컬 제거만)\n if (item.id && endpoints.delete) {\n const deleteUrl = endpoints.delete.replace(':id', String(item.id));\n await G7Core.api.delete(deleteUrl);\n }\n // 삭제 추적 — id와 hash 모두 기록 (복사 모드 이미지는 id 없이 hash만 존재)\n const itemKey = item.hash || item.id;\n if (item.id) {\n deletedIdsRef.current.add(item.id);\n uploadedFilesRef.current.delete(item.id);\n }\n if (item.hash) {\n deletedIdsRef.current.add(item.hash);\n }\n setExistingFiles((prev) => prev.filter((f) => (f.hash || f.id) !== itemKey));\n onRemove?.(item.hash || item.id);\n setConfirmDialogOpen(false);\n setItemToDelete(null);\n } catch {\n console.error('첨부파일 삭제 실패');\n } finally {\n setIsDeleting(false);\n }\n },\n [onRemove, endpoints.delete]\n );\n\n // 파일 삭제 핸들러 (확인 모달 또는 즉시 삭제)\n const handleRemove = useCallback(\n async (item: PendingFile | Attachment) => {\n if ('hash' in item) {\n // 기존 첨부파일\n if (confirmBeforeRemove) {\n // 확인 모달 표시\n setItemToDelete(item);\n setConfirmDialogOpen(true);\n } else {\n // 즉시 삭제\n await executeRemoveAttachment(item);\n }\n } else {\n // 대기 파일 삭제 (확인 없이 즉시)\n if (item.preview) {\n URL.revokeObjectURL(item.preview);\n }\n setPendingFiles((prev) => prev.filter((f) => f.id !== item.id));\n }\n },\n [confirmBeforeRemove, executeRemoveAttachment]\n );\n\n // 재시도 핸들러\n const handleRetry = useCallback((pendingFile: PendingFile) => {\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id ? { ...f, status: 'pending', error: undefined } : f\n )\n );\n }, []);\n\n // 순서 변경\n const handleDragEnd = useCallback(\n async (event: import('@dnd-kit/core').DragEndEvent) => {\n const { arrayMove } = await import('@dnd-kit/sortable');\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n // customOrder 기반으로 시각 순서와 일치하는 allItems 계산\n // (raw [...existingFiles, ...pendingFiles] 는 시각 순서와 다를 수 있음)\n const combined = [...existingFiles, ...pendingFiles];\n let orderedItems: (Attachment | PendingFile)[];\n if (customOrder.length === 0) {\n orderedItems = combined;\n } else {\n const orderMap = new Map(customOrder.map((id, idx) => [String(id), idx]));\n orderedItems = [...combined].sort((a, b) => {\n const aKey = 'hash' in a ? String(a.hash) : String(a.id);\n const bKey = 'hash' in b ? String(b.hash) : String(b.id);\n return (orderMap.get(aKey) ?? combined.length) - (orderMap.get(bKey) ?? combined.length);\n });\n }\n\n const oldIndex = orderedItems.findIndex((item) =>\n 'hash' in item ? item.hash === active.id : item.id === active.id\n );\n const newIndex = orderedItems.findIndex((item) =>\n 'hash' in item ? item.hash === over.id : item.id === over.id\n );\n\n const reordered = arrayMove(orderedItems, oldIndex, newIndex);\n\n // 드래그 순서 보존 (기존/신규 파일 간 섞인 순서 유지)\n setCustomOrder(reordered.map((item) => 'hash' in item ? item.hash : item.id));\n\n // 분리\n const newExisting = reordered.filter((item): item is Attachment => 'hash' in item);\n const newPending = reordered.filter((item): item is PendingFile => !('hash' in item));\n\n // 순서 변경 플래그 설정 (initialFiles 동기화 방지)\n hasReorderedRef.current = true;\n\n setExistingFiles(newExisting);\n setPendingFiles(newPending);\n\n // sort_order/order 필드를 새 인덱스로 갱신 (form.images 동기화용)\n const reorderedFiles = newExisting.map((item, idx) => ({\n ...item,\n sort_order: idx,\n order: idx + 1,\n }));\n\n // 서버에 순서 변경 요청 (기존 파일 + reorder 엔드포인트가 설정된 경우만)\n if (newExisting.length > 0 && endpoints.reorder) {\n const orderData = newExisting.map((item, index) => ({\n id: item.id,\n order: index + 1,\n }));\n\n try {\n const response = await G7Core.api.patch(endpoints.reorder, { order: orderData });\n G7Core.toast.success(response.message);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : t('attachment.reorder_failed');\n G7Core.toast.error(message);\n }\n }\n\n // API 호출 성공/스킵 무관하게 항상 콜백 호출\n onReorder?.(reorderedFiles);\n },\n [existingFiles, pendingFiles, customOrder, endpoints.reorder, onReorder]\n );\n\n // 이미지 파일만 필터링 (갤러리용)\n const imageFiles = useMemo(\n () =>\n [...existingFiles, ...pendingFiles].filter((item) => {\n if ('is_image' in item) {\n // Attachment (기존 첨부파일) - is_image 필드 우선 사용\n return (item as Attachment).is_image;\n }\n // PendingFile (대기 파일) - mime_type으로 확인\n return item.mime_type?.startsWith('image/') ?? false;\n }),\n [existingFiles, pendingFiles]\n );\n\n // 갤러리 열기 (이미지 인덱스로)\n const handleOpenGallery = useCallback(\n (item: PendingFile | Attachment) => {\n // 클릭된 아이템의 인덱스를 imageFiles에서 찾기\n const imageIndex = imageFiles.findIndex((img) => {\n // 둘 다 Attachment인 경우 (hash로 비교)\n if ('hash' in item && 'hash' in img) {\n return img.hash === item.hash;\n }\n // 둘 다 PendingFile인 경우 (id로 비교)\n if ('id' in item && 'id' in img && !('hash' in item) && !('hash' in img)) {\n return img.id === item.id;\n }\n return false;\n });\n if (imageIndex !== -1) {\n // 갤러리를 열 때마다 key 증가 (강제 리마운트)\n galleryKeyRef.current += 1;\n setGalleryStartIndex(imageIndex);\n setGalleryOpen(true);\n }\n },\n [imageFiles]\n );\n\n // 기존 첨부파일 인증된 이미지 URL 로드 (갤러리용)\n useEffect(() => {\n let cancelled = false;\n\n const loadAuthenticatedUrls = async () => {\n // is_image 필드 사용 (imageFiles 필터와 일치)\n const existingImageFiles = existingFiles.filter((f) => f.is_image);\n\n // existingFiles에서 제거된 파일의 URL 정리\n const currentIds = new Set(existingImageFiles.map((f) => f.id));\n for (const [id, url] of authenticatedImageUrlsRef.current) {\n if (!currentIds.has(id)) {\n URL.revokeObjectURL(url);\n authenticatedImageUrlsRef.current.delete(id);\n }\n }\n\n for (const file of existingImageFiles) {\n if (cancelled) break;\n // ref 기반 has 체크 (stale closure 방지)\n if (authenticatedImageUrlsRef.current.has(file.id)) continue;\n\n try {\n const blob = await G7Core.api.get(file.download_url, {\n responseType: 'blob',\n });\n if (!cancelled && blob) {\n const objectUrl = URL.createObjectURL(blob);\n authenticatedImageUrlsRef.current.set(file.id, objectUrl);\n setAuthenticatedImageUrls(new Map(authenticatedImageUrlsRef.current));\n }\n } catch (error) {\n console.error('Failed to load authenticated image:', error);\n }\n }\n };\n\n loadAuthenticatedUrls();\n\n return () => {\n cancelled = true;\n };\n }, [existingFiles]);\n\n // 언마운트 시에만 모든 인증된 이미지 URL 해제\n useEffect(() => {\n return () => {\n authenticatedImageUrlsRef.current.forEach((url) => URL.revokeObjectURL(url));\n authenticatedImageUrlsRef.current.clear();\n };\n }, []);\n\n // 파일 다운로드 실행\n const handleDownload = useCallback(async (item: Attachment) => {\n const { executeImageDownload } = await import('../ImageGallery');\n await executeImageDownload({\n src: item.download_url,\n downloadUrl: item.download_url,\n filename: item.original_filename,\n downloadRequiresAuth: true,\n });\n }, []);\n\n // 계산된 값 (customOrder가 있으면 드래그 순서 유지, 없으면 기본 순서)\n const allItems = useMemo(() => {\n const combined = [...existingFiles, ...pendingFiles];\n if (customOrder.length === 0) return combined;\n\n const orderMap = new Map(customOrder.map((id, idx) => [String(id), idx]));\n return [...combined].sort((a, b) => {\n const aKey = 'hash' in a ? String(a.hash) : String(a.id);\n const bKey = 'hash' in b ? String(b.hash) : String(b.id);\n const aOrder = orderMap.get(aKey) ?? combined.length;\n const bOrder = orderMap.get(bKey) ?? combined.length;\n return aOrder - bOrder;\n });\n }, [existingFiles, pendingFiles, customOrder]);\n const totalCount = allItems.length;\n const hasFiles = totalCount > 0;\n const canAddMore = totalCount < maxFiles;\n\n // 초기화 함수들\n const clear = useCallback(() => setPendingFiles([]), []);\n const getPendingFiles = useCallback(() => pendingFiles, [pendingFiles]);\n\n return {\n // 상태\n existingFiles,\n pendingFiles,\n isDragOver,\n setIsDragOver,\n isDeleting,\n\n // 계산된 값\n totalCount,\n hasFiles,\n canAddMore,\n allItems,\n imageFiles,\n\n // 액션\n handleFiles,\n handleRemove,\n handleRetry,\n handleUploadAll,\n handleOpenGallery,\n handleDownload,\n handleDragEnd,\n\n // Input ref\n inputRef,\n\n // 갤러리 상태\n galleryOpen,\n setGalleryOpen,\n galleryStartIndex,\n galleryKeyRef,\n\n // 삭제 확인 모달 상태\n confirmDialogOpen,\n setConfirmDialogOpen,\n itemToDelete,\n executeRemoveAttachment,\n\n // 인증된 이미지 URL 캐시\n authenticatedImageUrls,\n\n // 초기화\n clear,\n getPendingFiles,\n };\n}\n\nexport default useFileUploader;","/**\n * FileDropZone 컴포넌트\n *\n * 파일을 드래그 앤 드롭하거나 클릭하여 선택할 수 있는 영역입니다.\n *\n * @module composite/FileUploader/FileDropZone\n */\n\nimport React from 'react';\n\nimport { Div } from '../../basic/Div';\nimport { P } from '../../basic/P';\nimport { I } from '../../basic/I';\n\nimport { t } from './utils';\n\nexport interface FileDropZoneProps {\n /** 드래그 오버 상태 */\n isDragOver: boolean;\n /** 추가 가능 여부 */\n canAddMore: boolean;\n /** 파일 처리 핸들러 */\n onFiles: (files: FileList) => void;\n /** 드래그 오버 상태 설정 */\n setIsDragOver: (value: boolean) => void;\n /** Input 요소 ref */\n inputRef: React.RefObject;\n /** 허용 확장자 */\n accept?: string;\n /** 최대 파일 수 */\n maxFiles: number;\n /** 최대 파일 크기 (MB) */\n maxSize: number;\n /** 자식 요소 */\n children?: React.ReactNode;\n}\n\nexport const FileDropZone: React.FC = ({\n isDragOver,\n canAddMore,\n onFiles,\n setIsDragOver,\n inputRef,\n accept,\n maxFiles,\n maxSize,\n children,\n}) => {\n return (\n {\n e.preventDefault();\n if (canAddMore) setIsDragOver(true);\n }}\n onDragLeave={() => setIsDragOver(false)}\n onDrop={(e) => {\n e.preventDefault();\n setIsDragOver(false);\n if (canAddMore) {\n onFiles(e.dataTransfer.files);\n }\n }}\n >\n e.target.files && onFiles(e.target.files)}\n className=\"hidden\"\n />\n\n {/* 파일이 없을 때: 빈 드롭존 */}\n {!children && (\n inputRef.current?.click()}\n >\n \n

\n {t('attachment.drop_or_click')}\n

\n

\n {t('attachment.upload_limit', { maxFiles, maxSize })}\n {accept && ` (${accept})`}\n

\n \n )}\n\n {/* 파일이 있을 때: 자식 요소 렌더링 */}\n {children}\n \n );\n};\n\nexport default FileDropZone;","import { useMemo, useLayoutEffect, useEffect, useRef, useCallback } from 'react';\n\nfunction useCombinedRefs() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n\n return useMemo(() => node => {\n refs.forEach(ref => ref(node));\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n refs);\n}\n\n// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nconst canUseDOM = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';\n\nfunction isWindow(element) {\n const elementString = Object.prototype.toString.call(element);\n return elementString === '[object Window]' || // In Electron context the Window object serializes to [object global]\n elementString === '[object global]';\n}\n\nfunction isNode(node) {\n return 'nodeType' in node;\n}\n\nfunction getWindow(target) {\n var _target$ownerDocument, _target$ownerDocument2;\n\n if (!target) {\n return window;\n }\n\n if (isWindow(target)) {\n return target;\n }\n\n if (!isNode(target)) {\n return window;\n }\n\n return (_target$ownerDocument = (_target$ownerDocument2 = target.ownerDocument) == null ? void 0 : _target$ownerDocument2.defaultView) != null ? _target$ownerDocument : window;\n}\n\nfunction isDocument(node) {\n const {\n Document\n } = getWindow(node);\n return node instanceof Document;\n}\n\nfunction isHTMLElement(node) {\n if (isWindow(node)) {\n return false;\n }\n\n return node instanceof getWindow(node).HTMLElement;\n}\n\nfunction isSVGElement(node) {\n return node instanceof getWindow(node).SVGElement;\n}\n\nfunction getOwnerDocument(target) {\n if (!target) {\n return document;\n }\n\n if (isWindow(target)) {\n return target.document;\n }\n\n if (!isNode(target)) {\n return document;\n }\n\n if (isDocument(target)) {\n return target;\n }\n\n if (isHTMLElement(target) || isSVGElement(target)) {\n return target.ownerDocument;\n }\n\n return document;\n}\n\n/**\r\n * A hook that resolves to useEffect on the server and useLayoutEffect on the client\r\n * @param callback {function} Callback function that is invoked when the dependencies of the hook change\r\n */\n\nconst useIsomorphicLayoutEffect = canUseDOM ? useLayoutEffect : useEffect;\n\nfunction useEvent(handler) {\n const handlerRef = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n handlerRef.current = handler;\n });\n return useCallback(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return handlerRef.current == null ? void 0 : handlerRef.current(...args);\n }, []);\n}\n\nfunction useInterval() {\n const intervalRef = useRef(null);\n const set = useCallback((listener, duration) => {\n intervalRef.current = setInterval(listener, duration);\n }, []);\n const clear = useCallback(() => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n return [set, clear];\n}\n\nfunction useLatestValue(value, dependencies) {\n if (dependencies === void 0) {\n dependencies = [value];\n }\n\n const valueRef = useRef(value);\n useIsomorphicLayoutEffect(() => {\n if (valueRef.current !== value) {\n valueRef.current = value;\n }\n }, dependencies);\n return valueRef;\n}\n\nfunction useLazyMemo(callback, dependencies) {\n const valueRef = useRef();\n return useMemo(() => {\n const newValue = callback(valueRef.current);\n valueRef.current = newValue;\n return newValue;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [...dependencies]);\n}\n\nfunction useNodeRef(onChange) {\n const onChangeHandler = useEvent(onChange);\n const node = useRef(null);\n const setNodeRef = useCallback(element => {\n if (element !== node.current) {\n onChangeHandler == null ? void 0 : onChangeHandler(element, node.current);\n }\n\n node.current = element;\n }, //eslint-disable-next-line\n []);\n return [node, setNodeRef];\n}\n\nfunction usePrevious(value) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n\nlet ids = {};\nfunction useUniqueId(prefix, value) {\n return useMemo(() => {\n if (value) {\n return value;\n }\n\n const id = ids[prefix] == null ? 0 : ids[prefix] + 1;\n ids[prefix] = id;\n return prefix + \"-\" + id;\n }, [prefix, value]);\n}\n\nfunction createAdjustmentFn(modifier) {\n return function (object) {\n for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n adjustments[_key - 1] = arguments[_key];\n }\n\n return adjustments.reduce((accumulator, adjustment) => {\n const entries = Object.entries(adjustment);\n\n for (const [key, valueAdjustment] of entries) {\n const value = accumulator[key];\n\n if (value != null) {\n accumulator[key] = value + modifier * valueAdjustment;\n }\n }\n\n return accumulator;\n }, { ...object\n });\n };\n}\n\nconst add = /*#__PURE__*/createAdjustmentFn(1);\nconst subtract = /*#__PURE__*/createAdjustmentFn(-1);\n\nfunction hasViewportRelativeCoordinates(event) {\n return 'clientX' in event && 'clientY' in event;\n}\n\nfunction isKeyboardEvent(event) {\n if (!event) {\n return false;\n }\n\n const {\n KeyboardEvent\n } = getWindow(event.target);\n return KeyboardEvent && event instanceof KeyboardEvent;\n}\n\nfunction isTouchEvent(event) {\n if (!event) {\n return false;\n }\n\n const {\n TouchEvent\n } = getWindow(event.target);\n return TouchEvent && event instanceof TouchEvent;\n}\n\n/**\r\n * Returns the normalized x and y coordinates for mouse and touch events.\r\n */\n\nfunction getEventCoordinates(event) {\n if (isTouchEvent(event)) {\n if (event.touches && event.touches.length) {\n const {\n clientX: x,\n clientY: y\n } = event.touches[0];\n return {\n x,\n y\n };\n } else if (event.changedTouches && event.changedTouches.length) {\n const {\n clientX: x,\n clientY: y\n } = event.changedTouches[0];\n return {\n x,\n y\n };\n }\n }\n\n if (hasViewportRelativeCoordinates(event)) {\n return {\n x: event.clientX,\n y: event.clientY\n };\n }\n\n return null;\n}\n\nconst CSS = /*#__PURE__*/Object.freeze({\n Translate: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n const {\n x,\n y\n } = transform;\n return \"translate3d(\" + (x ? Math.round(x) : 0) + \"px, \" + (y ? Math.round(y) : 0) + \"px, 0)\";\n }\n\n },\n Scale: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n const {\n scaleX,\n scaleY\n } = transform;\n return \"scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\";\n }\n\n },\n Transform: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(' ');\n }\n\n },\n Transition: {\n toString(_ref) {\n let {\n property,\n duration,\n easing\n } = _ref;\n return property + \" \" + duration + \"ms \" + easing;\n }\n\n }\n});\n\nconst SELECTOR = 'a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]';\nfunction findFirstFocusableNode(element) {\n if (element.matches(SELECTOR)) {\n return element;\n }\n\n return element.querySelector(SELECTOR);\n}\n\nexport { CSS, add, canUseDOM, findFirstFocusableNode, getEventCoordinates, getOwnerDocument, getWindow, hasViewportRelativeCoordinates, isDocument, isHTMLElement, isKeyboardEvent, isNode, isSVGElement, isTouchEvent, isWindow, subtract, useCombinedRefs, useEvent, useInterval, useIsomorphicLayoutEffect, useLatestValue, useLazyMemo, useNodeRef, usePrevious, useUniqueId };\n//# sourceMappingURL=utilities.esm.js.map\n","import React, { useState, useCallback } from 'react';\n\nconst hiddenStyles = {\n display: 'none'\n};\nfunction HiddenText(_ref) {\n let {\n id,\n value\n } = _ref;\n return React.createElement(\"div\", {\n id: id,\n style: hiddenStyles\n }, value);\n}\n\nfunction LiveRegion(_ref) {\n let {\n id,\n announcement,\n ariaLiveType = \"assertive\"\n } = _ref;\n // Hide element visually but keep it readable by screen readers\n const visuallyHidden = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: 1,\n height: 1,\n margin: -1,\n border: 0,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(100%)',\n whiteSpace: 'nowrap'\n };\n return React.createElement(\"div\", {\n id: id,\n style: visuallyHidden,\n role: \"status\",\n \"aria-live\": ariaLiveType,\n \"aria-atomic\": true\n }, announcement);\n}\n\nfunction useAnnouncement() {\n const [announcement, setAnnouncement] = useState('');\n const announce = useCallback(value => {\n if (value != null) {\n setAnnouncement(value);\n }\n }, []);\n return {\n announce,\n announcement\n };\n}\n\nexport { HiddenText, LiveRegion, useAnnouncement };\n//# sourceMappingURL=accessibility.esm.js.map\n","import React, { createContext, useContext, useEffect, useState, useCallback, useMemo, useRef, memo, useReducer, cloneElement, forwardRef } from 'react';\nimport { createPortal, unstable_batchedUpdates } from 'react-dom';\nimport { useUniqueId, getEventCoordinates, getWindow, isDocument, isHTMLElement, isSVGElement, canUseDOM, isWindow, isNode, getOwnerDocument, add, isKeyboardEvent, subtract, useLazyMemo, useInterval, usePrevious, useLatestValue, useEvent, useIsomorphicLayoutEffect, useNodeRef, findFirstFocusableNode, CSS } from '@dnd-kit/utilities';\nimport { useAnnouncement, HiddenText, LiveRegion } from '@dnd-kit/accessibility';\n\nconst DndMonitorContext = /*#__PURE__*/createContext(null);\n\nfunction useDndMonitor(listener) {\n const registerListener = useContext(DndMonitorContext);\n useEffect(() => {\n if (!registerListener) {\n throw new Error('useDndMonitor must be used within a children of ');\n }\n\n const unsubscribe = registerListener(listener);\n return unsubscribe;\n }, [listener, registerListener]);\n}\n\nfunction useDndMonitorProvider() {\n const [listeners] = useState(() => new Set());\n const registerListener = useCallback(listener => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }, [listeners]);\n const dispatch = useCallback(_ref => {\n let {\n type,\n event\n } = _ref;\n listeners.forEach(listener => {\n var _listener$type;\n\n return (_listener$type = listener[type]) == null ? void 0 : _listener$type.call(listener, event);\n });\n }, [listeners]);\n return [dispatch, registerListener];\n}\n\nconst defaultScreenReaderInstructions = {\n draggable: \"\\n To pick up a draggable item, press the space bar.\\n While dragging, use the arrow keys to move the item.\\n Press space again to drop the item in its new position, or press escape to cancel.\\n \"\n};\nconst defaultAnnouncements = {\n onDragStart(_ref) {\n let {\n active\n } = _ref;\n return \"Picked up draggable item \" + active.id + \".\";\n },\n\n onDragOver(_ref2) {\n let {\n active,\n over\n } = _ref2;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was moved over droppable area \" + over.id + \".\";\n }\n\n return \"Draggable item \" + active.id + \" is no longer over a droppable area.\";\n },\n\n onDragEnd(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was dropped over droppable area \" + over.id;\n }\n\n return \"Draggable item \" + active.id + \" was dropped.\";\n },\n\n onDragCancel(_ref4) {\n let {\n active\n } = _ref4;\n return \"Dragging was cancelled. Draggable item \" + active.id + \" was dropped.\";\n }\n\n};\n\nfunction Accessibility(_ref) {\n let {\n announcements = defaultAnnouncements,\n container,\n hiddenTextDescribedById,\n screenReaderInstructions = defaultScreenReaderInstructions\n } = _ref;\n const {\n announce,\n announcement\n } = useAnnouncement();\n const liveRegionId = useUniqueId(\"DndLiveRegion\");\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n useDndMonitor(useMemo(() => ({\n onDragStart(_ref2) {\n let {\n active\n } = _ref2;\n announce(announcements.onDragStart({\n active\n }));\n },\n\n onDragMove(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (announcements.onDragMove) {\n announce(announcements.onDragMove({\n active,\n over\n }));\n }\n },\n\n onDragOver(_ref4) {\n let {\n active,\n over\n } = _ref4;\n announce(announcements.onDragOver({\n active,\n over\n }));\n },\n\n onDragEnd(_ref5) {\n let {\n active,\n over\n } = _ref5;\n announce(announcements.onDragEnd({\n active,\n over\n }));\n },\n\n onDragCancel(_ref6) {\n let {\n active,\n over\n } = _ref6;\n announce(announcements.onDragCancel({\n active,\n over\n }));\n }\n\n }), [announce, announcements]));\n\n if (!mounted) {\n return null;\n }\n\n const markup = React.createElement(React.Fragment, null, React.createElement(HiddenText, {\n id: hiddenTextDescribedById,\n value: screenReaderInstructions.draggable\n }), React.createElement(LiveRegion, {\n id: liveRegionId,\n announcement: announcement\n }));\n return container ? createPortal(markup, container) : markup;\n}\n\nvar Action;\n\n(function (Action) {\n Action[\"DragStart\"] = \"dragStart\";\n Action[\"DragMove\"] = \"dragMove\";\n Action[\"DragEnd\"] = \"dragEnd\";\n Action[\"DragCancel\"] = \"dragCancel\";\n Action[\"DragOver\"] = \"dragOver\";\n Action[\"RegisterDroppable\"] = \"registerDroppable\";\n Action[\"SetDroppableDisabled\"] = \"setDroppableDisabled\";\n Action[\"UnregisterDroppable\"] = \"unregisterDroppable\";\n})(Action || (Action = {}));\n\nfunction noop() {}\n\nfunction useSensor(sensor, options) {\n return useMemo(() => ({\n sensor,\n options: options != null ? options : {}\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [sensor, options]);\n}\n\nfunction useSensors() {\n for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) {\n sensors[_key] = arguments[_key];\n }\n\n return useMemo(() => [...sensors].filter(sensor => sensor != null), // eslint-disable-next-line react-hooks/exhaustive-deps\n [...sensors]);\n}\n\nconst defaultCoordinates = /*#__PURE__*/Object.freeze({\n x: 0,\n y: 0\n});\n\n/**\r\n * Returns the distance between two points\r\n */\nfunction distanceBetween(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n\nfunction getRelativeTransformOrigin(event, rect) {\n const eventCoordinates = getEventCoordinates(event);\n\n if (!eventCoordinates) {\n return '0 0';\n }\n\n const transformOrigin = {\n x: (eventCoordinates.x - rect.left) / rect.width * 100,\n y: (eventCoordinates.y - rect.top) / rect.height * 100\n };\n return transformOrigin.x + \"% \" + transformOrigin.y + \"%\";\n}\n\n/**\r\n * Sort collisions from smallest to greatest value\r\n */\nfunction sortCollisionsAsc(_ref, _ref2) {\n let {\n data: {\n value: a\n }\n } = _ref;\n let {\n data: {\n value: b\n }\n } = _ref2;\n return a - b;\n}\n/**\r\n * Sort collisions from greatest to smallest value\r\n */\n\nfunction sortCollisionsDesc(_ref3, _ref4) {\n let {\n data: {\n value: a\n }\n } = _ref3;\n let {\n data: {\n value: b\n }\n } = _ref4;\n return b - a;\n}\n/**\r\n * Returns the coordinates of the corners of a given rectangle:\r\n * [TopLeft {x, y}, TopRight {x, y}, BottomLeft {x, y}, BottomRight {x, y}]\r\n */\n\nfunction cornersOfRectangle(_ref5) {\n let {\n left,\n top,\n height,\n width\n } = _ref5;\n return [{\n x: left,\n y: top\n }, {\n x: left + width,\n y: top\n }, {\n x: left,\n y: top + height\n }, {\n x: left + width,\n y: top + height\n }];\n}\nfunction getFirstCollision(collisions, property) {\n if (!collisions || collisions.length === 0) {\n return null;\n }\n\n const [firstCollision] = collisions;\n return property ? firstCollision[property] : firstCollision;\n}\n\n/**\r\n * Returns the coordinates of the center of a given ClientRect\r\n */\n\nfunction centerOfRectangle(rect, left, top) {\n if (left === void 0) {\n left = rect.left;\n }\n\n if (top === void 0) {\n top = rect.top;\n }\n\n return {\n x: left + rect.width * 0.5,\n y: top + rect.height * 0.5\n };\n}\n/**\r\n * Returns the closest rectangles from an array of rectangles to the center of a given\r\n * rectangle.\r\n */\n\n\nconst closestCenter = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const centerRect = centerOfRectangle(collisionRect, collisionRect.left, collisionRect.top);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const distBetween = distanceBetween(centerOfRectangle(rect), centerRect);\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: distBetween\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the closest rectangles from an array of rectangles to the corners of\r\n * another rectangle.\r\n */\n\nconst closestCorners = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const corners = cornersOfRectangle(collisionRect);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const rectCorners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner, index) => {\n return accumulator + distanceBetween(rectCorners[index], corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the intersecting rectangle area between two rectangles\r\n */\n\nfunction getIntersectionRatio(entry, target) {\n const top = Math.max(target.top, entry.top);\n const left = Math.max(target.left, entry.left);\n const right = Math.min(target.left + target.width, entry.left + entry.width);\n const bottom = Math.min(target.top + target.height, entry.top + entry.height);\n const width = right - left;\n const height = bottom - top;\n\n if (left < right && top < bottom) {\n const targetArea = target.width * target.height;\n const entryArea = entry.width * entry.height;\n const intersectionArea = width * height;\n const intersectionRatio = intersectionArea / (targetArea + entryArea - intersectionArea);\n return Number(intersectionRatio.toFixed(4));\n } // Rectangles do not overlap, or overlap has an area of zero (edge/corner overlap)\n\n\n return 0;\n}\n/**\r\n * Returns the rectangles that has the greatest intersection area with a given\r\n * rectangle in an array of rectangles.\r\n */\n\nconst rectIntersection = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const intersectionRatio = getIntersectionRatio(rect, collisionRect);\n\n if (intersectionRatio > 0) {\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: intersectionRatio\n }\n });\n }\n }\n }\n\n return collisions.sort(sortCollisionsDesc);\n};\n\n/**\r\n * Check if a given point is contained within a bounding rectangle\r\n */\n\nfunction isPointWithinRect(point, rect) {\n const {\n top,\n left,\n bottom,\n right\n } = rect;\n return top <= point.y && point.y <= bottom && left <= point.x && point.x <= right;\n}\n/**\r\n * Returns the rectangles that the pointer is hovering over\r\n */\n\n\nconst pointerWithin = _ref => {\n let {\n droppableContainers,\n droppableRects,\n pointerCoordinates\n } = _ref;\n\n if (!pointerCoordinates) {\n return [];\n }\n\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect && isPointWithinRect(pointerCoordinates, rect)) {\n /* There may be more than a single rectangle intersecting\r\n * with the pointer coordinates. In order to sort the\r\n * colliding rectangles, we measure the distance between\r\n * the pointer and the corners of the intersecting rectangle\r\n */\n const corners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner) => {\n return accumulator + distanceBetween(pointerCoordinates, corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\nfunction adjustScale(transform, rect1, rect2) {\n return { ...transform,\n scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1,\n scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1\n };\n}\n\nfunction getRectDelta(rect1, rect2) {\n return rect1 && rect2 ? {\n x: rect1.left - rect2.left,\n y: rect1.top - rect2.top\n } : defaultCoordinates;\n}\n\nfunction createRectAdjustmentFn(modifier) {\n return function adjustClientRect(rect) {\n for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n adjustments[_key - 1] = arguments[_key];\n }\n\n return adjustments.reduce((acc, adjustment) => ({ ...acc,\n top: acc.top + modifier * adjustment.y,\n bottom: acc.bottom + modifier * adjustment.y,\n left: acc.left + modifier * adjustment.x,\n right: acc.right + modifier * adjustment.x\n }), { ...rect\n });\n };\n}\nconst getAdjustedRect = /*#__PURE__*/createRectAdjustmentFn(1);\n\nfunction parseTransform(transform) {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5]\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3]\n };\n }\n\n return null;\n}\n\nfunction inverseTransform(rect, transform, transformOrigin) {\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return rect;\n }\n\n const {\n scaleX,\n scaleY,\n x: translateX,\n y: translateY\n } = parsedTransform;\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y = rect.top - translateY - (1 - scaleY) * parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x\n };\n}\n\nconst defaultOptions = {\n ignoreTransform: false\n};\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n */\n\nfunction getClientRect(element, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n let rect = element.getBoundingClientRect();\n\n if (options.ignoreTransform) {\n const {\n transform,\n transformOrigin\n } = getWindow(element).getComputedStyle(element);\n\n if (transform) {\n rect = inverseTransform(rect, transform, transformOrigin);\n }\n }\n\n const {\n top,\n left,\n width,\n height,\n bottom,\n right\n } = rect;\n return {\n top,\n left,\n width,\n height,\n bottom,\n right\n };\n}\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n *\r\n * @remarks\r\n * The ClientRect returned by this method does not take into account transforms\r\n * applied to the element it measures.\r\n *\r\n */\n\nfunction getTransformAgnosticClientRect(element) {\n return getClientRect(element, {\n ignoreTransform: true\n });\n}\n\nfunction getWindowClientRect(element) {\n const width = element.innerWidth;\n const height = element.innerHeight;\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height\n };\n}\n\nfunction isFixed(node, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = getWindow(node).getComputedStyle(node);\n }\n\n return computedStyle.position === 'fixed';\n}\n\nfunction isScrollable(element, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = getWindow(element).getComputedStyle(element);\n }\n\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n return properties.some(property => {\n const value = computedStyle[property];\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n });\n}\n\nfunction getScrollableAncestors(element, limit) {\n const scrollParents = [];\n\n function findScrollableAncestors(node) {\n if (limit != null && scrollParents.length >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if (isDocument(node) && node.scrollingElement != null && !scrollParents.includes(node.scrollingElement)) {\n scrollParents.push(node.scrollingElement);\n return scrollParents;\n }\n\n if (!isHTMLElement(node) || isSVGElement(node)) {\n return scrollParents;\n }\n\n if (scrollParents.includes(node)) {\n return scrollParents;\n }\n\n const computedStyle = getWindow(element).getComputedStyle(node);\n\n if (node !== element) {\n if (isScrollable(node, computedStyle)) {\n scrollParents.push(node);\n }\n }\n\n if (isFixed(node, computedStyle)) {\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\nfunction getFirstScrollableAncestor(node) {\n const [firstScrollableAncestor] = getScrollableAncestors(node, 1);\n return firstScrollableAncestor != null ? firstScrollableAncestor : null;\n}\n\nfunction getScrollableElement(element) {\n if (!canUseDOM || !element) {\n return null;\n }\n\n if (isWindow(element)) {\n return element;\n }\n\n if (!isNode(element)) {\n return null;\n }\n\n if (isDocument(element) || element === getOwnerDocument(element).scrollingElement) {\n return window;\n }\n\n if (isHTMLElement(element)) {\n return element;\n }\n\n return null;\n}\n\nfunction getScrollXCoordinate(element) {\n if (isWindow(element)) {\n return element.scrollX;\n }\n\n return element.scrollLeft;\n}\nfunction getScrollYCoordinate(element) {\n if (isWindow(element)) {\n return element.scrollY;\n }\n\n return element.scrollTop;\n}\nfunction getScrollCoordinates(element) {\n return {\n x: getScrollXCoordinate(element),\n y: getScrollYCoordinate(element)\n };\n}\n\nvar Direction;\n\n(function (Direction) {\n Direction[Direction[\"Forward\"] = 1] = \"Forward\";\n Direction[Direction[\"Backward\"] = -1] = \"Backward\";\n})(Direction || (Direction = {}));\n\nfunction isDocumentScrollingElement(element) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === document.scrollingElement;\n}\n\nfunction getScrollPosition(scrollingContainer) {\n const minScroll = {\n x: 0,\n y: 0\n };\n const dimensions = isDocumentScrollingElement(scrollingContainer) ? {\n height: window.innerHeight,\n width: window.innerWidth\n } : {\n height: scrollingContainer.clientHeight,\n width: scrollingContainer.clientWidth\n };\n const maxScroll = {\n x: scrollingContainer.scrollWidth - dimensions.width,\n y: scrollingContainer.scrollHeight - dimensions.height\n };\n const isTop = scrollingContainer.scrollTop <= minScroll.y;\n const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n return {\n isTop,\n isLeft,\n isBottom,\n isRight,\n maxScroll,\n minScroll\n };\n}\n\nconst defaultThreshold = {\n x: 0.2,\n y: 0.2\n};\nfunction getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, _ref, acceleration, thresholdPercentage) {\n let {\n top,\n left,\n right,\n bottom\n } = _ref;\n\n if (acceleration === void 0) {\n acceleration = 10;\n }\n\n if (thresholdPercentage === void 0) {\n thresholdPercentage = defaultThreshold;\n }\n\n const {\n isTop,\n isBottom,\n isLeft,\n isRight\n } = getScrollPosition(scrollContainer);\n const direction = {\n x: 0,\n y: 0\n };\n const speed = {\n x: 0,\n y: 0\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x\n };\n\n if (!isTop && top <= scrollContainerRect.top + threshold.height) {\n // Scroll Up\n direction.y = Direction.Backward;\n speed.y = acceleration * Math.abs((scrollContainerRect.top + threshold.height - top) / threshold.height);\n } else if (!isBottom && bottom >= scrollContainerRect.bottom - threshold.height) {\n // Scroll Down\n direction.y = Direction.Forward;\n speed.y = acceleration * Math.abs((scrollContainerRect.bottom - threshold.height - bottom) / threshold.height);\n }\n\n if (!isRight && right >= scrollContainerRect.right - threshold.width) {\n // Scroll Right\n direction.x = Direction.Forward;\n speed.x = acceleration * Math.abs((scrollContainerRect.right - threshold.width - right) / threshold.width);\n } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) {\n // Scroll Left\n direction.x = Direction.Backward;\n speed.x = acceleration * Math.abs((scrollContainerRect.left + threshold.width - left) / threshold.width);\n }\n\n return {\n direction,\n speed\n };\n}\n\nfunction getScrollElementRect(element) {\n if (element === document.scrollingElement) {\n const {\n innerWidth,\n innerHeight\n } = window;\n return {\n top: 0,\n left: 0,\n right: innerWidth,\n bottom: innerHeight,\n width: innerWidth,\n height: innerHeight\n };\n }\n\n const {\n top,\n left,\n right,\n bottom\n } = element.getBoundingClientRect();\n return {\n top,\n left,\n right,\n bottom,\n width: element.clientWidth,\n height: element.clientHeight\n };\n}\n\nfunction getScrollOffsets(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return add(acc, getScrollCoordinates(node));\n }, defaultCoordinates);\n}\nfunction getScrollXOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollXCoordinate(node);\n }, 0);\n}\nfunction getScrollYOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollYCoordinate(node);\n }, 0);\n}\n\nfunction scrollIntoViewIfNeeded(element, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n if (!element) {\n return;\n }\n\n const {\n top,\n left,\n bottom,\n right\n } = measure(element);\n const firstScrollableAncestor = getFirstScrollableAncestor(element);\n\n if (!firstScrollableAncestor) {\n return;\n }\n\n if (bottom <= 0 || right <= 0 || top >= window.innerHeight || left >= window.innerWidth) {\n element.scrollIntoView({\n block: 'center',\n inline: 'center'\n });\n }\n}\n\nconst properties = [['x', ['left', 'right'], getScrollXOffset], ['y', ['top', 'bottom'], getScrollYOffset]];\nclass Rect {\n constructor(rect, element) {\n this.rect = void 0;\n this.width = void 0;\n this.height = void 0;\n this.top = void 0;\n this.bottom = void 0;\n this.right = void 0;\n this.left = void 0;\n const scrollableAncestors = getScrollableAncestors(element);\n const scrollOffsets = getScrollOffsets(scrollableAncestors);\n this.rect = { ...rect\n };\n this.width = rect.width;\n this.height = rect.height;\n\n for (const [axis, keys, getScrollOffset] of properties) {\n for (const key of keys) {\n Object.defineProperty(this, key, {\n get: () => {\n const currentOffsets = getScrollOffset(scrollableAncestors);\n const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets;\n return this.rect[key] + scrollOffsetsDeltla;\n },\n enumerable: true\n });\n }\n }\n\n Object.defineProperty(this, 'rect', {\n enumerable: false\n });\n }\n\n}\n\nclass Listeners {\n constructor(target) {\n this.target = void 0;\n this.listeners = [];\n\n this.removeAll = () => {\n this.listeners.forEach(listener => {\n var _this$target;\n\n return (_this$target = this.target) == null ? void 0 : _this$target.removeEventListener(...listener);\n });\n };\n\n this.target = target;\n }\n\n add(eventName, handler, options) {\n var _this$target2;\n\n (_this$target2 = this.target) == null ? void 0 : _this$target2.addEventListener(eventName, handler, options);\n this.listeners.push([eventName, handler, options]);\n }\n\n}\n\nfunction getEventListenerTarget(target) {\n // If the `event.target` element is removed from the document events will still be targeted\n // at it, and hence won't always bubble up to the window or document anymore.\n // If there is any risk of an element being removed while it is being dragged,\n // the best practice is to attach the event listeners directly to the target.\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n const {\n EventTarget\n } = getWindow(target);\n return target instanceof EventTarget ? target : getOwnerDocument(target);\n}\n\nfunction hasExceededDistance(delta, measurement) {\n const dx = Math.abs(delta.x);\n const dy = Math.abs(delta.y);\n\n if (typeof measurement === 'number') {\n return Math.sqrt(dx ** 2 + dy ** 2) > measurement;\n }\n\n if ('x' in measurement && 'y' in measurement) {\n return dx > measurement.x && dy > measurement.y;\n }\n\n if ('x' in measurement) {\n return dx > measurement.x;\n }\n\n if ('y' in measurement) {\n return dy > measurement.y;\n }\n\n return false;\n}\n\nvar EventName;\n\n(function (EventName) {\n EventName[\"Click\"] = \"click\";\n EventName[\"DragStart\"] = \"dragstart\";\n EventName[\"Keydown\"] = \"keydown\";\n EventName[\"ContextMenu\"] = \"contextmenu\";\n EventName[\"Resize\"] = \"resize\";\n EventName[\"SelectionChange\"] = \"selectionchange\";\n EventName[\"VisibilityChange\"] = \"visibilitychange\";\n})(EventName || (EventName = {}));\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction stopPropagation(event) {\n event.stopPropagation();\n}\n\nvar KeyboardCode;\n\n(function (KeyboardCode) {\n KeyboardCode[\"Space\"] = \"Space\";\n KeyboardCode[\"Down\"] = \"ArrowDown\";\n KeyboardCode[\"Right\"] = \"ArrowRight\";\n KeyboardCode[\"Left\"] = \"ArrowLeft\";\n KeyboardCode[\"Up\"] = \"ArrowUp\";\n KeyboardCode[\"Esc\"] = \"Escape\";\n KeyboardCode[\"Enter\"] = \"Enter\";\n KeyboardCode[\"Tab\"] = \"Tab\";\n})(KeyboardCode || (KeyboardCode = {}));\n\nconst defaultKeyboardCodes = {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter, KeyboardCode.Tab]\n};\nconst defaultKeyboardCoordinateGetter = (event, _ref) => {\n let {\n currentCoordinates\n } = _ref;\n\n switch (event.code) {\n case KeyboardCode.Right:\n return { ...currentCoordinates,\n x: currentCoordinates.x + 25\n };\n\n case KeyboardCode.Left:\n return { ...currentCoordinates,\n x: currentCoordinates.x - 25\n };\n\n case KeyboardCode.Down:\n return { ...currentCoordinates,\n y: currentCoordinates.y + 25\n };\n\n case KeyboardCode.Up:\n return { ...currentCoordinates,\n y: currentCoordinates.y - 25\n };\n }\n\n return undefined;\n};\n\nclass KeyboardSensor {\n constructor(props) {\n this.props = void 0;\n this.autoScrollEnabled = false;\n this.referenceCoordinates = void 0;\n this.listeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n const {\n event: {\n target\n }\n } = props;\n this.props = props;\n this.listeners = new Listeners(getOwnerDocument(target));\n this.windowListeners = new Listeners(getWindow(target));\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.attach();\n }\n\n attach() {\n this.handleStart();\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown));\n }\n\n handleStart() {\n const {\n activeNode,\n onStart\n } = this.props;\n const node = activeNode.node.current;\n\n if (node) {\n scrollIntoViewIfNeeded(node);\n }\n\n onStart(defaultCoordinates);\n }\n\n handleKeyDown(event) {\n if (isKeyboardEvent(event)) {\n const {\n active,\n context,\n options\n } = this.props;\n const {\n keyboardCodes = defaultKeyboardCodes,\n coordinateGetter = defaultKeyboardCoordinateGetter,\n scrollBehavior = 'smooth'\n } = options;\n const {\n code\n } = event;\n\n if (keyboardCodes.end.includes(code)) {\n this.handleEnd(event);\n return;\n }\n\n if (keyboardCodes.cancel.includes(code)) {\n this.handleCancel(event);\n return;\n }\n\n const {\n collisionRect\n } = context.current;\n const currentCoordinates = collisionRect ? {\n x: collisionRect.left,\n y: collisionRect.top\n } : defaultCoordinates;\n\n if (!this.referenceCoordinates) {\n this.referenceCoordinates = currentCoordinates;\n }\n\n const newCoordinates = coordinateGetter(event, {\n active,\n context: context.current,\n currentCoordinates\n });\n\n if (newCoordinates) {\n const coordinatesDelta = subtract(newCoordinates, currentCoordinates);\n const scrollDelta = {\n x: 0,\n y: 0\n };\n const {\n scrollableAncestors\n } = context.current;\n\n for (const scrollContainer of scrollableAncestors) {\n const direction = event.code;\n const {\n isTop,\n isRight,\n isLeft,\n isBottom,\n maxScroll,\n minScroll\n } = getScrollPosition(scrollContainer);\n const scrollElementRect = getScrollElementRect(scrollContainer);\n const clampedCoordinates = {\n x: Math.min(direction === KeyboardCode.Right ? scrollElementRect.right - scrollElementRect.width / 2 : scrollElementRect.right, Math.max(direction === KeyboardCode.Right ? scrollElementRect.left : scrollElementRect.left + scrollElementRect.width / 2, newCoordinates.x)),\n y: Math.min(direction === KeyboardCode.Down ? scrollElementRect.bottom - scrollElementRect.height / 2 : scrollElementRect.bottom, Math.max(direction === KeyboardCode.Down ? scrollElementRect.top : scrollElementRect.top + scrollElementRect.height / 2, newCoordinates.y))\n };\n const canScrollX = direction === KeyboardCode.Right && !isRight || direction === KeyboardCode.Left && !isLeft;\n const canScrollY = direction === KeyboardCode.Down && !isBottom || direction === KeyboardCode.Up && !isTop;\n\n if (canScrollX && clampedCoordinates.x !== newCoordinates.x) {\n const newScrollCoordinates = scrollContainer.scrollLeft + coordinatesDelta.x;\n const canScrollToNewCoordinates = direction === KeyboardCode.Right && newScrollCoordinates <= maxScroll.x || direction === KeyboardCode.Left && newScrollCoordinates >= minScroll.x;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.y) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n left: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates;\n } else {\n scrollDelta.x = direction === KeyboardCode.Right ? scrollContainer.scrollLeft - maxScroll.x : scrollContainer.scrollLeft - minScroll.x;\n }\n\n if (scrollDelta.x) {\n scrollContainer.scrollBy({\n left: -scrollDelta.x,\n behavior: scrollBehavior\n });\n }\n\n break;\n } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y;\n const canScrollToNewCoordinates = direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y || direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.x) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n top: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates;\n } else {\n scrollDelta.y = direction === KeyboardCode.Down ? scrollContainer.scrollTop - maxScroll.y : scrollContainer.scrollTop - minScroll.y;\n }\n\n if (scrollDelta.y) {\n scrollContainer.scrollBy({\n top: -scrollDelta.y,\n behavior: scrollBehavior\n });\n }\n\n break;\n }\n }\n\n this.handleMove(event, add(subtract(newCoordinates, this.referenceCoordinates), scrollDelta));\n }\n }\n }\n\n handleMove(event, coordinates) {\n const {\n onMove\n } = this.props;\n event.preventDefault();\n onMove(coordinates);\n }\n\n handleEnd(event) {\n const {\n onEnd\n } = this.props;\n event.preventDefault();\n this.detach();\n onEnd();\n }\n\n handleCancel(event) {\n const {\n onCancel\n } = this.props;\n event.preventDefault();\n this.detach();\n onCancel();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n }\n\n}\nKeyboardSensor.activators = [{\n eventName: 'onKeyDown',\n handler: (event, _ref, _ref2) => {\n let {\n keyboardCodes = defaultKeyboardCodes,\n onActivation\n } = _ref;\n let {\n active\n } = _ref2;\n const {\n code\n } = event.nativeEvent;\n\n if (keyboardCodes.start.includes(code)) {\n const activator = active.activatorNode.current;\n\n if (activator && event.target !== activator) {\n return false;\n }\n\n event.preventDefault();\n onActivation == null ? void 0 : onActivation({\n event: event.nativeEvent\n });\n return true;\n }\n\n return false;\n }\n}];\n\nfunction isDistanceConstraint(constraint) {\n return Boolean(constraint && 'distance' in constraint);\n}\n\nfunction isDelayConstraint(constraint) {\n return Boolean(constraint && 'delay' in constraint);\n}\n\nclass AbstractPointerSensor {\n constructor(props, events, listenerTarget) {\n var _getEventCoordinates;\n\n if (listenerTarget === void 0) {\n listenerTarget = getEventListenerTarget(props.event.target);\n }\n\n this.props = void 0;\n this.events = void 0;\n this.autoScrollEnabled = true;\n this.document = void 0;\n this.activated = false;\n this.initialCoordinates = void 0;\n this.timeoutId = null;\n this.listeners = void 0;\n this.documentListeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n this.events = events;\n const {\n event\n } = props;\n const {\n target\n } = event;\n this.props = props;\n this.events = events;\n this.document = getOwnerDocument(target);\n this.documentListeners = new Listeners(this.document);\n this.listeners = new Listeners(listenerTarget);\n this.windowListeners = new Listeners(getWindow(target));\n this.initialCoordinates = (_getEventCoordinates = getEventCoordinates(event)) != null ? _getEventCoordinates : defaultCoordinates;\n this.handleStart = this.handleStart.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleKeydown = this.handleKeydown.bind(this);\n this.removeTextSelection = this.removeTextSelection.bind(this);\n this.attach();\n }\n\n attach() {\n const {\n events,\n props: {\n options: {\n activationConstraint,\n bypassActivationConstraint\n }\n }\n } = this;\n this.listeners.add(events.move.name, this.handleMove, {\n passive: false\n });\n this.listeners.add(events.end.name, this.handleEnd);\n\n if (events.cancel) {\n this.listeners.add(events.cancel.name, this.handleCancel);\n }\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.DragStart, preventDefault);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n this.windowListeners.add(EventName.ContextMenu, preventDefault);\n this.documentListeners.add(EventName.Keydown, this.handleKeydown);\n\n if (activationConstraint) {\n if (bypassActivationConstraint != null && bypassActivationConstraint({\n event: this.props.event,\n activeNode: this.props.activeNode,\n options: this.props.options\n })) {\n return this.handleStart();\n }\n\n if (isDelayConstraint(activationConstraint)) {\n this.timeoutId = setTimeout(this.handleStart, activationConstraint.delay);\n this.handlePending(activationConstraint);\n return;\n }\n\n if (isDistanceConstraint(activationConstraint)) {\n this.handlePending(activationConstraint);\n return;\n }\n }\n\n this.handleStart();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll(); // Wait until the next event loop before removing document listeners\n // This is necessary because we listen for `click` and `selection` events on the document\n\n setTimeout(this.documentListeners.removeAll, 50);\n\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n handlePending(constraint, offset) {\n const {\n active,\n onPending\n } = this.props;\n onPending(active, constraint, this.initialCoordinates, offset);\n }\n\n handleStart() {\n const {\n initialCoordinates\n } = this;\n const {\n onStart\n } = this.props;\n\n if (initialCoordinates) {\n this.activated = true; // Stop propagation of click events once activation constraints are met\n\n this.documentListeners.add(EventName.Click, stopPropagation, {\n capture: true\n }); // Remove any text selection from the document\n\n this.removeTextSelection(); // Prevent further text selection while dragging\n\n this.documentListeners.add(EventName.SelectionChange, this.removeTextSelection);\n onStart(initialCoordinates);\n }\n }\n\n handleMove(event) {\n var _getEventCoordinates2;\n\n const {\n activated,\n initialCoordinates,\n props\n } = this;\n const {\n onMove,\n options: {\n activationConstraint\n }\n } = props;\n\n if (!initialCoordinates) {\n return;\n }\n\n const coordinates = (_getEventCoordinates2 = getEventCoordinates(event)) != null ? _getEventCoordinates2 : defaultCoordinates;\n const delta = subtract(initialCoordinates, coordinates); // Constraint validation\n\n if (!activated && activationConstraint) {\n if (isDistanceConstraint(activationConstraint)) {\n if (activationConstraint.tolerance != null && hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n\n if (hasExceededDistance(delta, activationConstraint.distance)) {\n return this.handleStart();\n }\n }\n\n if (isDelayConstraint(activationConstraint)) {\n if (hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n }\n\n this.handlePending(activationConstraint, delta);\n return;\n }\n\n if (event.cancelable) {\n event.preventDefault();\n }\n\n onMove(coordinates);\n }\n\n handleEnd() {\n const {\n onAbort,\n onEnd\n } = this.props;\n this.detach();\n\n if (!this.activated) {\n onAbort(this.props.active);\n }\n\n onEnd();\n }\n\n handleCancel() {\n const {\n onAbort,\n onCancel\n } = this.props;\n this.detach();\n\n if (!this.activated) {\n onAbort(this.props.active);\n }\n\n onCancel();\n }\n\n handleKeydown(event) {\n if (event.code === KeyboardCode.Esc) {\n this.handleCancel();\n }\n }\n\n removeTextSelection() {\n var _this$document$getSel;\n\n (_this$document$getSel = this.document.getSelection()) == null ? void 0 : _this$document$getSel.removeAllRanges();\n }\n\n}\n\nconst events = {\n cancel: {\n name: 'pointercancel'\n },\n move: {\n name: 'pointermove'\n },\n end: {\n name: 'pointerup'\n }\n};\nclass PointerSensor extends AbstractPointerSensor {\n constructor(props) {\n const {\n event\n } = props; // Pointer events stop firing if the target is unmounted while dragging\n // Therefore we attach listeners to the owner document instead\n\n const listenerTarget = getOwnerDocument(event.target);\n super(props, events, listenerTarget);\n }\n\n}\nPointerSensor.activators = [{\n eventName: 'onPointerDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (!event.isPrimary || event.button !== 0) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$1 = {\n move: {\n name: 'mousemove'\n },\n end: {\n name: 'mouseup'\n }\n};\nvar MouseButton;\n\n(function (MouseButton) {\n MouseButton[MouseButton[\"RightClick\"] = 2] = \"RightClick\";\n})(MouseButton || (MouseButton = {}));\n\nclass MouseSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$1, getOwnerDocument(props.event.target));\n }\n\n}\nMouseSensor.activators = [{\n eventName: 'onMouseDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (event.button === MouseButton.RightClick) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$2 = {\n cancel: {\n name: 'touchcancel'\n },\n move: {\n name: 'touchmove'\n },\n end: {\n name: 'touchend'\n }\n};\nclass TouchSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$2);\n }\n\n static setup() {\n // Adding a non-capture and non-passive `touchmove` listener in order\n // to force `event.preventDefault()` calls to work in dynamically added\n // touchmove event handlers. This is required for iOS Safari.\n window.addEventListener(events$2.move.name, noop, {\n capture: false,\n passive: false\n });\n return function teardown() {\n window.removeEventListener(events$2.move.name, noop);\n }; // We create a new handler because the teardown function of another sensor\n // could remove our event listener if we use a referentially equal listener.\n\n function noop() {}\n }\n\n}\nTouchSensor.activators = [{\n eventName: 'onTouchStart',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n const {\n touches\n } = event;\n\n if (touches.length > 1) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nvar AutoScrollActivator;\n\n(function (AutoScrollActivator) {\n AutoScrollActivator[AutoScrollActivator[\"Pointer\"] = 0] = \"Pointer\";\n AutoScrollActivator[AutoScrollActivator[\"DraggableRect\"] = 1] = \"DraggableRect\";\n})(AutoScrollActivator || (AutoScrollActivator = {}));\n\nvar TraversalOrder;\n\n(function (TraversalOrder) {\n TraversalOrder[TraversalOrder[\"TreeOrder\"] = 0] = \"TreeOrder\";\n TraversalOrder[TraversalOrder[\"ReversedTreeOrder\"] = 1] = \"ReversedTreeOrder\";\n})(TraversalOrder || (TraversalOrder = {}));\n\nfunction useAutoScroller(_ref) {\n let {\n acceleration,\n activator = AutoScrollActivator.Pointer,\n canScroll,\n draggingRect,\n enabled,\n interval = 5,\n order = TraversalOrder.TreeOrder,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n delta,\n threshold\n } = _ref;\n const scrollIntent = useScrollIntent({\n delta,\n disabled: !enabled\n });\n const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval();\n const scrollSpeed = useRef({\n x: 0,\n y: 0\n });\n const scrollDirection = useRef({\n x: 0,\n y: 0\n });\n const rect = useMemo(() => {\n switch (activator) {\n case AutoScrollActivator.Pointer:\n return pointerCoordinates ? {\n top: pointerCoordinates.y,\n bottom: pointerCoordinates.y,\n left: pointerCoordinates.x,\n right: pointerCoordinates.x\n } : null;\n\n case AutoScrollActivator.DraggableRect:\n return draggingRect;\n }\n }, [activator, draggingRect, pointerCoordinates]);\n const scrollContainerRef = useRef(null);\n const autoScroll = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n\n if (!scrollContainer) {\n return;\n }\n\n const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x;\n const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;\n scrollContainer.scrollBy(scrollLeft, scrollTop);\n }, []);\n const sortedScrollableAncestors = useMemo(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]);\n useEffect(() => {\n if (!enabled || !scrollableAncestors.length || !rect) {\n clearAutoScrollInterval();\n return;\n }\n\n for (const scrollContainer of sortedScrollableAncestors) {\n if ((canScroll == null ? void 0 : canScroll(scrollContainer)) === false) {\n continue;\n }\n\n const index = scrollableAncestors.indexOf(scrollContainer);\n const scrollContainerRect = scrollableAncestorRects[index];\n\n if (!scrollContainerRect) {\n continue;\n }\n\n const {\n direction,\n speed\n } = getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, rect, acceleration, threshold);\n\n for (const axis of ['x', 'y']) {\n if (!scrollIntent[axis][direction[axis]]) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n\n if (speed.x > 0 || speed.y > 0) {\n clearAutoScrollInterval();\n scrollContainerRef.current = scrollContainer;\n setAutoScrollInterval(autoScroll, interval);\n scrollSpeed.current = speed;\n scrollDirection.current = direction;\n return;\n }\n }\n\n scrollSpeed.current = {\n x: 0,\n y: 0\n };\n scrollDirection.current = {\n x: 0,\n y: 0\n };\n clearAutoScrollInterval();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [acceleration, autoScroll, canScroll, clearAutoScrollInterval, enabled, interval, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(rect), // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(scrollIntent), setAutoScrollInterval, scrollableAncestors, sortedScrollableAncestors, scrollableAncestorRects, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold)]);\n}\nconst defaultScrollIntent = {\n x: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n },\n y: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n }\n};\n\nfunction useScrollIntent(_ref2) {\n let {\n delta,\n disabled\n } = _ref2;\n const previousDelta = usePrevious(delta);\n return useLazyMemo(previousIntent => {\n if (disabled || !previousDelta || !previousIntent) {\n // Reset scroll intent tracking when auto-scrolling is disabled\n return defaultScrollIntent;\n }\n\n const direction = {\n x: Math.sign(delta.x - previousDelta.x),\n y: Math.sign(delta.y - previousDelta.y)\n }; // Keep track of the user intent to scroll in each direction for both axis\n\n return {\n x: {\n [Direction.Backward]: previousIntent.x[Direction.Backward] || direction.x === -1,\n [Direction.Forward]: previousIntent.x[Direction.Forward] || direction.x === 1\n },\n y: {\n [Direction.Backward]: previousIntent.y[Direction.Backward] || direction.y === -1,\n [Direction.Forward]: previousIntent.y[Direction.Forward] || direction.y === 1\n }\n };\n }, [disabled, delta, previousDelta]);\n}\n\nfunction useCachedNode(draggableNodes, id) {\n const draggableNode = id != null ? draggableNodes.get(id) : undefined;\n const node = draggableNode ? draggableNode.node.current : null;\n return useLazyMemo(cachedNode => {\n var _ref;\n\n if (id == null) {\n return null;\n } // In some cases, the draggable node can unmount while dragging\n // This is the case for virtualized lists. In those situations,\n // we fall back to the last known value for that node.\n\n\n return (_ref = node != null ? node : cachedNode) != null ? _ref : null;\n }, [node, id]);\n}\n\nfunction useCombineActivators(sensors, getSyntheticHandler) {\n return useMemo(() => sensors.reduce((accumulator, sensor) => {\n const {\n sensor: Sensor\n } = sensor;\n const sensorActivators = Sensor.activators.map(activator => ({\n eventName: activator.eventName,\n handler: getSyntheticHandler(activator.handler, sensor)\n }));\n return [...accumulator, ...sensorActivators];\n }, []), [sensors, getSyntheticHandler]);\n}\n\nvar MeasuringStrategy;\n\n(function (MeasuringStrategy) {\n MeasuringStrategy[MeasuringStrategy[\"Always\"] = 0] = \"Always\";\n MeasuringStrategy[MeasuringStrategy[\"BeforeDragging\"] = 1] = \"BeforeDragging\";\n MeasuringStrategy[MeasuringStrategy[\"WhileDragging\"] = 2] = \"WhileDragging\";\n})(MeasuringStrategy || (MeasuringStrategy = {}));\n\nvar MeasuringFrequency;\n\n(function (MeasuringFrequency) {\n MeasuringFrequency[\"Optimized\"] = \"optimized\";\n})(MeasuringFrequency || (MeasuringFrequency = {}));\n\nconst defaultValue = /*#__PURE__*/new Map();\nfunction useDroppableMeasuring(containers, _ref) {\n let {\n dragging,\n dependencies,\n config\n } = _ref;\n const [queue, setQueue] = useState(null);\n const {\n frequency,\n measure,\n strategy\n } = config;\n const containersRef = useRef(containers);\n const disabled = isDisabled();\n const disabledRef = useLatestValue(disabled);\n const measureDroppableContainers = useCallback(function (ids) {\n if (ids === void 0) {\n ids = [];\n }\n\n if (disabledRef.current) {\n return;\n }\n\n setQueue(value => {\n if (value === null) {\n return ids;\n }\n\n return value.concat(ids.filter(id => !value.includes(id)));\n });\n }, [disabledRef]);\n const timeoutId = useRef(null);\n const droppableRects = useLazyMemo(previousValue => {\n if (disabled && !dragging) {\n return defaultValue;\n }\n\n if (!previousValue || previousValue === defaultValue || containersRef.current !== containers || queue != null) {\n const map = new Map();\n\n for (let container of containers) {\n if (!container) {\n continue;\n }\n\n if (queue && queue.length > 0 && !queue.includes(container.id) && container.rect.current) {\n // This container does not need to be re-measured\n map.set(container.id, container.rect.current);\n continue;\n }\n\n const node = container.node.current;\n const rect = node ? new Rect(measure(node), node) : null;\n container.rect.current = rect;\n\n if (rect) {\n map.set(container.id, rect);\n }\n }\n\n return map;\n }\n\n return previousValue;\n }, [containers, queue, dragging, disabled, measure]);\n useEffect(() => {\n containersRef.current = containers;\n }, [containers]);\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n measureDroppableContainers();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [dragging, disabled]);\n useEffect(() => {\n if (queue && queue.length > 0) {\n setQueue(null);\n }\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(queue)]);\n useEffect(() => {\n if (disabled || typeof frequency !== 'number' || timeoutId.current !== null) {\n return;\n }\n\n timeoutId.current = setTimeout(() => {\n measureDroppableContainers();\n timeoutId.current = null;\n }, frequency);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [frequency, disabled, measureDroppableContainers, ...dependencies]);\n return {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled: queue != null\n };\n\n function isDisabled() {\n switch (strategy) {\n case MeasuringStrategy.Always:\n return false;\n\n case MeasuringStrategy.BeforeDragging:\n return dragging;\n\n default:\n return !dragging;\n }\n }\n}\n\nfunction useInitialValue(value, computeFn) {\n return useLazyMemo(previousValue => {\n if (!value) {\n return null;\n }\n\n if (previousValue) {\n return previousValue;\n }\n\n return typeof computeFn === 'function' ? computeFn(value) : value;\n }, [computeFn, value]);\n}\n\nfunction useInitialRect(node, measure) {\n return useInitialValue(node, measure);\n}\n\n/**\r\n * Returns a new MutationObserver instance.\r\n * If `MutationObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useMutationObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleMutations = useEvent(callback);\n const mutationObserver = useMemo(() => {\n if (disabled || typeof window === 'undefined' || typeof window.MutationObserver === 'undefined') {\n return undefined;\n }\n\n const {\n MutationObserver\n } = window;\n return new MutationObserver(handleMutations);\n }, [handleMutations, disabled]);\n useEffect(() => {\n return () => mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }, [mutationObserver]);\n return mutationObserver;\n}\n\n/**\r\n * Returns a new ResizeObserver instance bound to the `onResize` callback.\r\n * If `ResizeObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useResizeObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleResize = useEvent(callback);\n const resizeObserver = useMemo(() => {\n if (disabled || typeof window === 'undefined' || typeof window.ResizeObserver === 'undefined') {\n return undefined;\n }\n\n const {\n ResizeObserver\n } = window;\n return new ResizeObserver(handleResize);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [disabled]);\n useEffect(() => {\n return () => resizeObserver == null ? void 0 : resizeObserver.disconnect();\n }, [resizeObserver]);\n return resizeObserver;\n}\n\nfunction defaultMeasure(element) {\n return new Rect(getClientRect(element), element);\n}\n\nfunction useRect(element, measure, fallbackRect) {\n if (measure === void 0) {\n measure = defaultMeasure;\n }\n\n const [rect, setRect] = useState(null);\n\n function measureRect() {\n setRect(currentRect => {\n if (!element) {\n return null;\n }\n\n if (element.isConnected === false) {\n var _ref;\n\n // Fall back to last rect we measured if the element is\n // no longer connected to the DOM.\n return (_ref = currentRect != null ? currentRect : fallbackRect) != null ? _ref : null;\n }\n\n const newRect = measure(element);\n\n if (JSON.stringify(currentRect) === JSON.stringify(newRect)) {\n return currentRect;\n }\n\n return newRect;\n });\n }\n\n const mutationObserver = useMutationObserver({\n callback(records) {\n if (!element) {\n return;\n }\n\n for (const record of records) {\n const {\n type,\n target\n } = record;\n\n if (type === 'childList' && target instanceof HTMLElement && target.contains(element)) {\n measureRect();\n break;\n }\n }\n }\n\n });\n const resizeObserver = useResizeObserver({\n callback: measureRect\n });\n useIsomorphicLayoutEffect(() => {\n measureRect();\n\n if (element) {\n resizeObserver == null ? void 0 : resizeObserver.observe(element);\n mutationObserver == null ? void 0 : mutationObserver.observe(document.body, {\n childList: true,\n subtree: true\n });\n } else {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }\n }, [element]);\n return rect;\n}\n\nfunction useRectDelta(rect) {\n const initialRect = useInitialValue(rect);\n return getRectDelta(rect, initialRect);\n}\n\nconst defaultValue$1 = [];\nfunction useScrollableAncestors(node) {\n const previousNode = useRef(node);\n const ancestors = useLazyMemo(previousValue => {\n if (!node) {\n return defaultValue$1;\n }\n\n if (previousValue && previousValue !== defaultValue$1 && node && previousNode.current && node.parentNode === previousNode.current.parentNode) {\n return previousValue;\n }\n\n return getScrollableAncestors(node);\n }, [node]);\n useEffect(() => {\n previousNode.current = node;\n }, [node]);\n return ancestors;\n}\n\nfunction useScrollOffsets(elements) {\n const [scrollCoordinates, setScrollCoordinates] = useState(null);\n const prevElements = useRef(elements); // To-do: Throttle the handleScroll callback\n\n const handleScroll = useCallback(event => {\n const scrollingElement = getScrollableElement(event.target);\n\n if (!scrollingElement) {\n return;\n }\n\n setScrollCoordinates(scrollCoordinates => {\n if (!scrollCoordinates) {\n return null;\n }\n\n scrollCoordinates.set(scrollingElement, getScrollCoordinates(scrollingElement));\n return new Map(scrollCoordinates);\n });\n }, []);\n useEffect(() => {\n const previousElements = prevElements.current;\n\n if (elements !== previousElements) {\n cleanup(previousElements);\n const entries = elements.map(element => {\n const scrollableElement = getScrollableElement(element);\n\n if (scrollableElement) {\n scrollableElement.addEventListener('scroll', handleScroll, {\n passive: true\n });\n return [scrollableElement, getScrollCoordinates(scrollableElement)];\n }\n\n return null;\n }).filter(entry => entry != null);\n setScrollCoordinates(entries.length ? new Map(entries) : null);\n prevElements.current = elements;\n }\n\n return () => {\n cleanup(elements);\n cleanup(previousElements);\n };\n\n function cleanup(elements) {\n elements.forEach(element => {\n const scrollableElement = getScrollableElement(element);\n scrollableElement == null ? void 0 : scrollableElement.removeEventListener('scroll', handleScroll);\n });\n }\n }, [handleScroll, elements]);\n return useMemo(() => {\n if (elements.length) {\n return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => add(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements);\n }\n\n return defaultCoordinates;\n }, [elements, scrollCoordinates]);\n}\n\nfunction useScrollOffsetsDelta(scrollOffsets, dependencies) {\n if (dependencies === void 0) {\n dependencies = [];\n }\n\n const initialScrollOffsets = useRef(null);\n useEffect(() => {\n initialScrollOffsets.current = null;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n dependencies);\n useEffect(() => {\n const hasScrollOffsets = scrollOffsets !== defaultCoordinates;\n\n if (hasScrollOffsets && !initialScrollOffsets.current) {\n initialScrollOffsets.current = scrollOffsets;\n }\n\n if (!hasScrollOffsets && initialScrollOffsets.current) {\n initialScrollOffsets.current = null;\n }\n }, [scrollOffsets]);\n return initialScrollOffsets.current ? subtract(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates;\n}\n\nfunction useSensorSetup(sensors) {\n useEffect(() => {\n if (!canUseDOM) {\n return;\n }\n\n const teardownFns = sensors.map(_ref => {\n let {\n sensor\n } = _ref;\n return sensor.setup == null ? void 0 : sensor.setup();\n });\n return () => {\n for (const teardown of teardownFns) {\n teardown == null ? void 0 : teardown();\n }\n };\n }, // TO-DO: Sensors length could theoretically change which would not be a valid dependency\n // eslint-disable-next-line react-hooks/exhaustive-deps\n sensors.map(_ref2 => {\n let {\n sensor\n } = _ref2;\n return sensor;\n }));\n}\n\nfunction useSyntheticListeners(listeners, id) {\n return useMemo(() => {\n return listeners.reduce((acc, _ref) => {\n let {\n eventName,\n handler\n } = _ref;\n\n acc[eventName] = event => {\n handler(event, id);\n };\n\n return acc;\n }, {});\n }, [listeners, id]);\n}\n\nfunction useWindowRect(element) {\n return useMemo(() => element ? getWindowClientRect(element) : null, [element]);\n}\n\nconst defaultValue$2 = [];\nfunction useRects(elements, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n const [firstElement] = elements;\n const windowRect = useWindowRect(firstElement ? getWindow(firstElement) : null);\n const [rects, setRects] = useState(defaultValue$2);\n\n function measureRects() {\n setRects(() => {\n if (!elements.length) {\n return defaultValue$2;\n }\n\n return elements.map(element => isDocumentScrollingElement(element) ? windowRect : new Rect(measure(element), element));\n });\n }\n\n const resizeObserver = useResizeObserver({\n callback: measureRects\n });\n useIsomorphicLayoutEffect(() => {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n measureRects();\n elements.forEach(element => resizeObserver == null ? void 0 : resizeObserver.observe(element));\n }, [elements]);\n return rects;\n}\n\nfunction getMeasurableNode(node) {\n if (!node) {\n return null;\n }\n\n if (node.children.length > 1) {\n return node;\n }\n\n const firstChild = node.children[0];\n return isHTMLElement(firstChild) ? firstChild : node;\n}\n\nfunction useDragOverlayMeasuring(_ref) {\n let {\n measure\n } = _ref;\n const [rect, setRect] = useState(null);\n const handleResize = useCallback(entries => {\n for (const {\n target\n } of entries) {\n if (isHTMLElement(target)) {\n setRect(rect => {\n const newRect = measure(target);\n return rect ? { ...rect,\n width: newRect.width,\n height: newRect.height\n } : newRect;\n });\n break;\n }\n }\n }, [measure]);\n const resizeObserver = useResizeObserver({\n callback: handleResize\n });\n const handleNodeChange = useCallback(element => {\n const node = getMeasurableNode(element);\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n\n if (node) {\n resizeObserver == null ? void 0 : resizeObserver.observe(node);\n }\n\n setRect(node ? measure(node) : null);\n }, [measure, resizeObserver]);\n const [nodeRef, setRef] = useNodeRef(handleNodeChange);\n return useMemo(() => ({\n nodeRef,\n rect,\n setRef\n }), [rect, nodeRef, setRef]);\n}\n\nconst defaultSensors = [{\n sensor: PointerSensor,\n options: {}\n}, {\n sensor: KeyboardSensor,\n options: {}\n}];\nconst defaultData = {\n current: {}\n};\nconst defaultMeasuringConfiguration = {\n draggable: {\n measure: getTransformAgnosticClientRect\n },\n droppable: {\n measure: getTransformAgnosticClientRect,\n strategy: MeasuringStrategy.WhileDragging,\n frequency: MeasuringFrequency.Optimized\n },\n dragOverlay: {\n measure: getClientRect\n }\n};\n\nclass DroppableContainersMap extends Map {\n get(id) {\n var _super$get;\n\n return id != null ? (_super$get = super.get(id)) != null ? _super$get : undefined : undefined;\n }\n\n toArray() {\n return Array.from(this.values());\n }\n\n getEnabled() {\n return this.toArray().filter(_ref => {\n let {\n disabled\n } = _ref;\n return !disabled;\n });\n }\n\n getNodeFor(id) {\n var _this$get$node$curren, _this$get;\n\n return (_this$get$node$curren = (_this$get = this.get(id)) == null ? void 0 : _this$get.node.current) != null ? _this$get$node$curren : undefined;\n }\n\n}\n\nconst defaultPublicContext = {\n activatorEvent: null,\n active: null,\n activeNode: null,\n activeNodeRect: null,\n collisions: null,\n containerNodeRect: null,\n draggableNodes: /*#__PURE__*/new Map(),\n droppableRects: /*#__PURE__*/new Map(),\n droppableContainers: /*#__PURE__*/new DroppableContainersMap(),\n over: null,\n dragOverlay: {\n nodeRef: {\n current: null\n },\n rect: null,\n setRef: noop\n },\n scrollableAncestors: [],\n scrollableAncestorRects: [],\n measuringConfiguration: defaultMeasuringConfiguration,\n measureDroppableContainers: noop,\n windowRect: null,\n measuringScheduled: false\n};\nconst defaultInternalContext = {\n activatorEvent: null,\n activators: [],\n active: null,\n activeNodeRect: null,\n ariaDescribedById: {\n draggable: ''\n },\n dispatch: noop,\n draggableNodes: /*#__PURE__*/new Map(),\n over: null,\n measureDroppableContainers: noop\n};\nconst InternalContext = /*#__PURE__*/createContext(defaultInternalContext);\nconst PublicContext = /*#__PURE__*/createContext(defaultPublicContext);\n\nfunction getInitialState() {\n return {\n draggable: {\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n nodes: new Map(),\n translate: {\n x: 0,\n y: 0\n }\n },\n droppable: {\n containers: new DroppableContainersMap()\n }\n };\n}\nfunction reducer(state, action) {\n switch (action.type) {\n case Action.DragStart:\n return { ...state,\n draggable: { ...state.draggable,\n initialCoordinates: action.initialCoordinates,\n active: action.active\n }\n };\n\n case Action.DragMove:\n if (state.draggable.active == null) {\n return state;\n }\n\n return { ...state,\n draggable: { ...state.draggable,\n translate: {\n x: action.coordinates.x - state.draggable.initialCoordinates.x,\n y: action.coordinates.y - state.draggable.initialCoordinates.y\n }\n }\n };\n\n case Action.DragEnd:\n case Action.DragCancel:\n return { ...state,\n draggable: { ...state.draggable,\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n translate: {\n x: 0,\n y: 0\n }\n }\n };\n\n case Action.RegisterDroppable:\n {\n const {\n element\n } = action;\n const {\n id\n } = element;\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, element);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.SetDroppableDisabled:\n {\n const {\n id,\n key,\n disabled\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, { ...element,\n disabled\n });\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.UnregisterDroppable:\n {\n const {\n id,\n key\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.delete(id);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n default:\n {\n return state;\n }\n }\n}\n\nfunction RestoreFocus(_ref) {\n let {\n disabled\n } = _ref;\n const {\n active,\n activatorEvent,\n draggableNodes\n } = useContext(InternalContext);\n const previousActivatorEvent = usePrevious(activatorEvent);\n const previousActiveId = usePrevious(active == null ? void 0 : active.id); // Restore keyboard focus on the activator node\n\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n if (!activatorEvent && previousActivatorEvent && previousActiveId != null) {\n if (!isKeyboardEvent(previousActivatorEvent)) {\n return;\n }\n\n if (document.activeElement === previousActivatorEvent.target) {\n // No need to restore focus\n return;\n }\n\n const draggableNode = draggableNodes.get(previousActiveId);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n activatorNode,\n node\n } = draggableNode;\n\n if (!activatorNode.current && !node.current) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const element of [activatorNode.current, node.current]) {\n if (!element) {\n continue;\n }\n\n const focusableNode = findFirstFocusableNode(element);\n\n if (focusableNode) {\n focusableNode.focus();\n break;\n }\n }\n });\n }\n }, [activatorEvent, disabled, draggableNodes, previousActiveId, previousActivatorEvent]);\n return null;\n}\n\nfunction applyModifiers(modifiers, _ref) {\n let {\n transform,\n ...args\n } = _ref;\n return modifiers != null && modifiers.length ? modifiers.reduce((accumulator, modifier) => {\n return modifier({\n transform: accumulator,\n ...args\n });\n }, transform) : transform;\n}\n\nfunction useMeasuringConfiguration(config) {\n return useMemo(() => ({\n draggable: { ...defaultMeasuringConfiguration.draggable,\n ...(config == null ? void 0 : config.draggable)\n },\n droppable: { ...defaultMeasuringConfiguration.droppable,\n ...(config == null ? void 0 : config.droppable)\n },\n dragOverlay: { ...defaultMeasuringConfiguration.dragOverlay,\n ...(config == null ? void 0 : config.dragOverlay)\n }\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [config == null ? void 0 : config.draggable, config == null ? void 0 : config.droppable, config == null ? void 0 : config.dragOverlay]);\n}\n\nfunction useLayoutShiftScrollCompensation(_ref) {\n let {\n activeNode,\n measure,\n initialRect,\n config = true\n } = _ref;\n const initialized = useRef(false);\n const {\n x,\n y\n } = typeof config === 'boolean' ? {\n x: config,\n y: config\n } : config;\n useIsomorphicLayoutEffect(() => {\n const disabled = !x && !y;\n\n if (disabled || !activeNode) {\n initialized.current = false;\n return;\n }\n\n if (initialized.current || !initialRect) {\n // Return early if layout shift scroll compensation was already attempted\n // or if there is no initialRect to compare to.\n return;\n } // Get the most up to date node ref for the active draggable\n\n\n const node = activeNode == null ? void 0 : activeNode.node.current;\n\n if (!node || node.isConnected === false) {\n // Return early if there is no attached node ref or if the node is\n // disconnected from the document.\n return;\n }\n\n const rect = measure(node);\n const rectDelta = getRectDelta(rect, initialRect);\n\n if (!x) {\n rectDelta.x = 0;\n }\n\n if (!y) {\n rectDelta.y = 0;\n } // Only perform layout shift scroll compensation once\n\n\n initialized.current = true;\n\n if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) {\n const firstScrollableAncestor = getFirstScrollableAncestor(node);\n\n if (firstScrollableAncestor) {\n firstScrollableAncestor.scrollBy({\n top: rectDelta.y,\n left: rectDelta.x\n });\n }\n }\n }, [activeNode, x, y, initialRect, measure]);\n}\n\nconst ActiveDraggableContext = /*#__PURE__*/createContext({ ...defaultCoordinates,\n scaleX: 1,\n scaleY: 1\n});\nvar Status;\n\n(function (Status) {\n Status[Status[\"Uninitialized\"] = 0] = \"Uninitialized\";\n Status[Status[\"Initializing\"] = 1] = \"Initializing\";\n Status[Status[\"Initialized\"] = 2] = \"Initialized\";\n})(Status || (Status = {}));\n\nconst DndContext = /*#__PURE__*/memo(function DndContext(_ref) {\n var _sensorContext$curren, _dragOverlay$nodeRef$, _dragOverlay$rect, _over$rect;\n\n let {\n id,\n accessibility,\n autoScroll = true,\n children,\n sensors = defaultSensors,\n collisionDetection = rectIntersection,\n measuring,\n modifiers,\n ...props\n } = _ref;\n const store = useReducer(reducer, undefined, getInitialState);\n const [state, dispatch] = store;\n const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider();\n const [status, setStatus] = useState(Status.Uninitialized);\n const isInitialized = status === Status.Initialized;\n const {\n draggable: {\n active: activeId,\n nodes: draggableNodes,\n translate\n },\n droppable: {\n containers: droppableContainers\n }\n } = state;\n const node = activeId != null ? draggableNodes.get(activeId) : null;\n const activeRects = useRef({\n initial: null,\n translated: null\n });\n const active = useMemo(() => {\n var _node$data;\n\n return activeId != null ? {\n id: activeId,\n // It's possible for the active node to unmount while dragging\n data: (_node$data = node == null ? void 0 : node.data) != null ? _node$data : defaultData,\n rect: activeRects\n } : null;\n }, [activeId, node]);\n const activeRef = useRef(null);\n const [activeSensor, setActiveSensor] = useState(null);\n const [activatorEvent, setActivatorEvent] = useState(null);\n const latestProps = useLatestValue(props, Object.values(props));\n const draggableDescribedById = useUniqueId(\"DndDescribedBy\", id);\n const enabledDroppableContainers = useMemo(() => droppableContainers.getEnabled(), [droppableContainers]);\n const measuringConfiguration = useMeasuringConfiguration(measuring);\n const {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled\n } = useDroppableMeasuring(enabledDroppableContainers, {\n dragging: isInitialized,\n dependencies: [translate.x, translate.y],\n config: measuringConfiguration.droppable\n });\n const activeNode = useCachedNode(draggableNodes, activeId);\n const activationCoordinates = useMemo(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]);\n const autoScrollOptions = getAutoScrollerOptions();\n const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure);\n useLayoutShiftScrollCompensation({\n activeNode: activeId != null ? draggableNodes.get(activeId) : null,\n config: autoScrollOptions.layoutShiftCompensation,\n initialRect: initialActiveNodeRect,\n measure: measuringConfiguration.draggable.measure\n });\n const activeNodeRect = useRect(activeNode, measuringConfiguration.draggable.measure, initialActiveNodeRect);\n const containerNodeRect = useRect(activeNode ? activeNode.parentElement : null);\n const sensorContext = useRef({\n activatorEvent: null,\n active: null,\n activeNode,\n collisionRect: null,\n collisions: null,\n droppableRects,\n draggableNodes,\n draggingNode: null,\n draggingNodeRect: null,\n droppableContainers,\n over: null,\n scrollableAncestors: [],\n scrollAdjustedTranslate: null\n });\n const overNode = droppableContainers.getNodeFor((_sensorContext$curren = sensorContext.current.over) == null ? void 0 : _sensorContext$curren.id);\n const dragOverlay = useDragOverlayMeasuring({\n measure: measuringConfiguration.dragOverlay.measure\n }); // Use the rect of the drag overlay if it is mounted\n\n const draggingNode = (_dragOverlay$nodeRef$ = dragOverlay.nodeRef.current) != null ? _dragOverlay$nodeRef$ : activeNode;\n const draggingNodeRect = isInitialized ? (_dragOverlay$rect = dragOverlay.rect) != null ? _dragOverlay$rect : activeNodeRect : null;\n const usesDragOverlay = Boolean(dragOverlay.nodeRef.current && dragOverlay.rect); // The delta between the previous and new position of the draggable node\n // is only relevant when there is no drag overlay\n\n const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect); // Get the window rect of the dragging node\n\n const windowRect = useWindowRect(draggingNode ? getWindow(draggingNode) : null); // Get scrollable ancestors of the dragging node\n\n const scrollableAncestors = useScrollableAncestors(isInitialized ? overNode != null ? overNode : activeNode : null);\n const scrollableAncestorRects = useRects(scrollableAncestors); // Apply modifiers\n\n const modifiedTranslate = applyModifiers(modifiers, {\n transform: {\n x: translate.x - nodeRectDelta.x,\n y: translate.y - nodeRectDelta.y,\n scaleX: 1,\n scaleY: 1\n },\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect,\n over: sensorContext.current.over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n });\n const pointerCoordinates = activationCoordinates ? add(activationCoordinates, translate) : null;\n const scrollOffsets = useScrollOffsets(scrollableAncestors); // Represents the scroll delta since dragging was initiated\n\n const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets); // Represents the scroll delta since the last time the active node rect was measured\n\n const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [activeNodeRect]);\n const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment);\n const collisionRect = draggingNodeRect ? getAdjustedRect(draggingNodeRect, modifiedTranslate) : null;\n const collisions = active && collisionRect ? collisionDetection({\n active,\n collisionRect,\n droppableRects,\n droppableContainers: enabledDroppableContainers,\n pointerCoordinates\n }) : null;\n const overId = getFirstCollision(collisions, 'id');\n const [over, setOver] = useState(null); // When there is no drag overlay used, we need to account for the\n // window scroll delta\n\n const appliedTranslate = usesDragOverlay ? modifiedTranslate : add(modifiedTranslate, activeNodeScrollDelta);\n const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect);\n const activeSensorRef = useRef(null);\n const instantiateSensor = useCallback((event, _ref2) => {\n let {\n sensor: Sensor,\n options\n } = _ref2;\n\n if (activeRef.current == null) {\n return;\n }\n\n const activeNode = draggableNodes.get(activeRef.current);\n\n if (!activeNode) {\n return;\n }\n\n const activatorEvent = event.nativeEvent;\n const sensorInstance = new Sensor({\n active: activeRef.current,\n activeNode,\n event: activatorEvent,\n options,\n // Sensors need to be instantiated with refs for arguments that change over time\n // otherwise they are frozen in time with the stale arguments\n context: sensorContext,\n\n onAbort(id) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragAbort\n } = latestProps.current;\n const event = {\n id\n };\n onDragAbort == null ? void 0 : onDragAbort(event);\n dispatchMonitorEvent({\n type: 'onDragAbort',\n event\n });\n },\n\n onPending(id, constraint, initialCoordinates, offset) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragPending\n } = latestProps.current;\n const event = {\n id,\n constraint,\n initialCoordinates,\n offset\n };\n onDragPending == null ? void 0 : onDragPending(event);\n dispatchMonitorEvent({\n type: 'onDragPending',\n event\n });\n },\n\n onStart(initialCoordinates) {\n const id = activeRef.current;\n\n if (id == null) {\n return;\n }\n\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragStart\n } = latestProps.current;\n const event = {\n activatorEvent,\n active: {\n id,\n data: draggableNode.data,\n rect: activeRects\n }\n };\n unstable_batchedUpdates(() => {\n onDragStart == null ? void 0 : onDragStart(event);\n setStatus(Status.Initializing);\n dispatch({\n type: Action.DragStart,\n initialCoordinates,\n active: id\n });\n dispatchMonitorEvent({\n type: 'onDragStart',\n event\n });\n setActiveSensor(activeSensorRef.current);\n setActivatorEvent(activatorEvent);\n });\n },\n\n onMove(coordinates) {\n dispatch({\n type: Action.DragMove,\n coordinates\n });\n },\n\n onEnd: createHandler(Action.DragEnd),\n onCancel: createHandler(Action.DragCancel)\n });\n activeSensorRef.current = sensorInstance;\n\n function createHandler(type) {\n return async function handler() {\n const {\n active,\n collisions,\n over,\n scrollAdjustedTranslate\n } = sensorContext.current;\n let event = null;\n\n if (active && scrollAdjustedTranslate) {\n const {\n cancelDrop\n } = latestProps.current;\n event = {\n activatorEvent,\n active: active,\n collisions,\n delta: scrollAdjustedTranslate,\n over\n };\n\n if (type === Action.DragEnd && typeof cancelDrop === 'function') {\n const shouldCancel = await Promise.resolve(cancelDrop(event));\n\n if (shouldCancel) {\n type = Action.DragCancel;\n }\n }\n }\n\n activeRef.current = null;\n unstable_batchedUpdates(() => {\n dispatch({\n type\n });\n setStatus(Status.Uninitialized);\n setOver(null);\n setActiveSensor(null);\n setActivatorEvent(null);\n activeSensorRef.current = null;\n const eventName = type === Action.DragEnd ? 'onDragEnd' : 'onDragCancel';\n\n if (event) {\n const handler = latestProps.current[eventName];\n handler == null ? void 0 : handler(event);\n dispatchMonitorEvent({\n type: eventName,\n event\n });\n }\n });\n };\n }\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes]);\n const bindActivatorToSensorInstantiator = useCallback((handler, sensor) => {\n return (event, active) => {\n const nativeEvent = event.nativeEvent;\n const activeDraggableNode = draggableNodes.get(active);\n\n if ( // Another sensor is already instantiating\n activeRef.current !== null || // No active draggable\n !activeDraggableNode || // Event has already been captured\n nativeEvent.dndKit || nativeEvent.defaultPrevented) {\n return;\n }\n\n const activationContext = {\n active: activeDraggableNode\n };\n const shouldActivate = handler(event, sensor.options, activationContext);\n\n if (shouldActivate === true) {\n nativeEvent.dndKit = {\n capturedBy: sensor.sensor\n };\n activeRef.current = active;\n instantiateSensor(event, sensor);\n }\n };\n }, [draggableNodes, instantiateSensor]);\n const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator);\n useSensorSetup(sensors);\n useIsomorphicLayoutEffect(() => {\n if (activeNodeRect && status === Status.Initializing) {\n setStatus(Status.Initialized);\n }\n }, [activeNodeRect, status]);\n useEffect(() => {\n const {\n onDragMove\n } = latestProps.current;\n const {\n active,\n activatorEvent,\n collisions,\n over\n } = sensorContext.current;\n\n if (!active || !activatorEvent) {\n return;\n }\n\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n unstable_batchedUpdates(() => {\n onDragMove == null ? void 0 : onDragMove(event);\n dispatchMonitorEvent({\n type: 'onDragMove',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]);\n useEffect(() => {\n const {\n active,\n activatorEvent,\n collisions,\n droppableContainers,\n scrollAdjustedTranslate\n } = sensorContext.current;\n\n if (!active || activeRef.current == null || !activatorEvent || !scrollAdjustedTranslate) {\n return;\n }\n\n const {\n onDragOver\n } = latestProps.current;\n const overContainer = droppableContainers.get(overId);\n const over = overContainer && overContainer.rect.current ? {\n id: overContainer.id,\n rect: overContainer.rect.current,\n data: overContainer.data,\n disabled: overContainer.disabled\n } : null;\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n unstable_batchedUpdates(() => {\n setOver(over);\n onDragOver == null ? void 0 : onDragOver(event);\n dispatchMonitorEvent({\n type: 'onDragOver',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [overId]);\n useIsomorphicLayoutEffect(() => {\n sensorContext.current = {\n activatorEvent,\n active,\n activeNode,\n collisionRect,\n collisions,\n droppableRects,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate\n };\n activeRects.current = {\n initial: draggingNodeRect,\n translated: collisionRect\n };\n }, [active, activeNode, collisions, collisionRect, draggableNodes, draggingNode, draggingNodeRect, droppableRects, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate]);\n useAutoScroller({ ...autoScrollOptions,\n delta: translate,\n draggingRect: collisionRect,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects\n });\n const publicContext = useMemo(() => {\n const context = {\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect\n };\n return context;\n }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect]);\n const internalContext = useMemo(() => {\n const context = {\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n ariaDescribedById: {\n draggable: draggableDescribedById\n },\n dispatch,\n draggableNodes,\n over,\n measureDroppableContainers\n };\n return context;\n }, [activatorEvent, activators, active, activeNodeRect, dispatch, draggableDescribedById, draggableNodes, over, measureDroppableContainers]);\n return React.createElement(DndMonitorContext.Provider, {\n value: registerMonitorListener\n }, React.createElement(InternalContext.Provider, {\n value: internalContext\n }, React.createElement(PublicContext.Provider, {\n value: publicContext\n }, React.createElement(ActiveDraggableContext.Provider, {\n value: transform\n }, children)), React.createElement(RestoreFocus, {\n disabled: (accessibility == null ? void 0 : accessibility.restoreFocus) === false\n })), React.createElement(Accessibility, { ...accessibility,\n hiddenTextDescribedById: draggableDescribedById\n }));\n\n function getAutoScrollerOptions() {\n const activeSensorDisablesAutoscroll = (activeSensor == null ? void 0 : activeSensor.autoScrollEnabled) === false;\n const autoScrollGloballyDisabled = typeof autoScroll === 'object' ? autoScroll.enabled === false : autoScroll === false;\n const enabled = isInitialized && !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled;\n\n if (typeof autoScroll === 'object') {\n return { ...autoScroll,\n enabled\n };\n }\n\n return {\n enabled\n };\n }\n});\n\nconst NullContext = /*#__PURE__*/createContext(null);\nconst defaultRole = 'button';\nconst ID_PREFIX = 'Draggable';\nfunction useDraggable(_ref) {\n let {\n id,\n data,\n disabled = false,\n attributes\n } = _ref;\n const key = useUniqueId(ID_PREFIX);\n const {\n activators,\n activatorEvent,\n active,\n activeNodeRect,\n ariaDescribedById,\n draggableNodes,\n over\n } = useContext(InternalContext);\n const {\n role = defaultRole,\n roleDescription = 'draggable',\n tabIndex = 0\n } = attributes != null ? attributes : {};\n const isDragging = (active == null ? void 0 : active.id) === id;\n const transform = useContext(isDragging ? ActiveDraggableContext : NullContext);\n const [node, setNodeRef] = useNodeRef();\n const [activatorNode, setActivatorNodeRef] = useNodeRef();\n const listeners = useSyntheticListeners(activators, id);\n const dataRef = useLatestValue(data);\n useIsomorphicLayoutEffect(() => {\n draggableNodes.set(id, {\n id,\n key,\n node,\n activatorNode,\n data: dataRef\n });\n return () => {\n const node = draggableNodes.get(id);\n\n if (node && node.key === key) {\n draggableNodes.delete(id);\n }\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes, id]);\n const memoizedAttributes = useMemo(() => ({\n role,\n tabIndex,\n 'aria-disabled': disabled,\n 'aria-pressed': isDragging && role === defaultRole ? true : undefined,\n 'aria-roledescription': roleDescription,\n 'aria-describedby': ariaDescribedById.draggable\n }), [disabled, role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]);\n return {\n active,\n activatorEvent,\n activeNodeRect,\n attributes: memoizedAttributes,\n isDragging,\n listeners: disabled ? undefined : listeners,\n node,\n over,\n setNodeRef,\n setActivatorNodeRef,\n transform\n };\n}\n\nfunction useDndContext() {\n return useContext(PublicContext);\n}\n\nconst ID_PREFIX$1 = 'Droppable';\nconst defaultResizeObserverConfig = {\n timeout: 25\n};\nfunction useDroppable(_ref) {\n let {\n data,\n disabled = false,\n id,\n resizeObserverConfig\n } = _ref;\n const key = useUniqueId(ID_PREFIX$1);\n const {\n active,\n dispatch,\n over,\n measureDroppableContainers\n } = useContext(InternalContext);\n const previous = useRef({\n disabled\n });\n const resizeObserverConnected = useRef(false);\n const rect = useRef(null);\n const callbackId = useRef(null);\n const {\n disabled: resizeObserverDisabled,\n updateMeasurementsFor,\n timeout: resizeObserverTimeout\n } = { ...defaultResizeObserverConfig,\n ...resizeObserverConfig\n };\n const ids = useLatestValue(updateMeasurementsFor != null ? updateMeasurementsFor : id);\n const handleResize = useCallback(() => {\n if (!resizeObserverConnected.current) {\n // ResizeObserver invokes the `handleResize` callback as soon as `observe` is called,\n // assuming the element is rendered and displayed.\n resizeObserverConnected.current = true;\n return;\n }\n\n if (callbackId.current != null) {\n clearTimeout(callbackId.current);\n }\n\n callbackId.current = setTimeout(() => {\n measureDroppableContainers(Array.isArray(ids.current) ? ids.current : [ids.current]);\n callbackId.current = null;\n }, resizeObserverTimeout);\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [resizeObserverTimeout]);\n const resizeObserver = useResizeObserver({\n callback: handleResize,\n disabled: resizeObserverDisabled || !active\n });\n const handleNodeChange = useCallback((newElement, previousElement) => {\n if (!resizeObserver) {\n return;\n }\n\n if (previousElement) {\n resizeObserver.unobserve(previousElement);\n resizeObserverConnected.current = false;\n }\n\n if (newElement) {\n resizeObserver.observe(newElement);\n }\n }, [resizeObserver]);\n const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange);\n const dataRef = useLatestValue(data);\n useEffect(() => {\n if (!resizeObserver || !nodeRef.current) {\n return;\n }\n\n resizeObserver.disconnect();\n resizeObserverConnected.current = false;\n resizeObserver.observe(nodeRef.current);\n }, [nodeRef, resizeObserver]);\n useEffect(() => {\n dispatch({\n type: Action.RegisterDroppable,\n element: {\n id,\n key,\n disabled,\n node: nodeRef,\n rect,\n data: dataRef\n }\n });\n return () => dispatch({\n type: Action.UnregisterDroppable,\n key,\n id\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [id]);\n useEffect(() => {\n if (disabled !== previous.current.disabled) {\n dispatch({\n type: Action.SetDroppableDisabled,\n id,\n key,\n disabled\n });\n previous.current.disabled = disabled;\n }\n }, [id, key, disabled, dispatch]);\n return {\n active,\n rect,\n isOver: (over == null ? void 0 : over.id) === id,\n node: nodeRef,\n over,\n setNodeRef\n };\n}\n\nfunction AnimationManager(_ref) {\n let {\n animation,\n children\n } = _ref;\n const [clonedChildren, setClonedChildren] = useState(null);\n const [element, setElement] = useState(null);\n const previousChildren = usePrevious(children);\n\n if (!children && !clonedChildren && previousChildren) {\n setClonedChildren(previousChildren);\n }\n\n useIsomorphicLayoutEffect(() => {\n if (!element) {\n return;\n }\n\n const key = clonedChildren == null ? void 0 : clonedChildren.key;\n const id = clonedChildren == null ? void 0 : clonedChildren.props.id;\n\n if (key == null || id == null) {\n setClonedChildren(null);\n return;\n }\n\n Promise.resolve(animation(id, element)).then(() => {\n setClonedChildren(null);\n });\n }, [animation, clonedChildren, element]);\n return React.createElement(React.Fragment, null, children, clonedChildren ? cloneElement(clonedChildren, {\n ref: setElement\n }) : null);\n}\n\nconst defaultTransform = {\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1\n};\nfunction NullifiedContextProvider(_ref) {\n let {\n children\n } = _ref;\n return React.createElement(InternalContext.Provider, {\n value: defaultInternalContext\n }, React.createElement(ActiveDraggableContext.Provider, {\n value: defaultTransform\n }, children));\n}\n\nconst baseStyles = {\n position: 'fixed',\n touchAction: 'none'\n};\n\nconst defaultTransition = activatorEvent => {\n const isKeyboardActivator = isKeyboardEvent(activatorEvent);\n return isKeyboardActivator ? 'transform 250ms ease' : undefined;\n};\n\nconst PositionedOverlay = /*#__PURE__*/forwardRef((_ref, ref) => {\n let {\n as,\n activatorEvent,\n adjustScale,\n children,\n className,\n rect,\n style,\n transform,\n transition = defaultTransition\n } = _ref;\n\n if (!rect) {\n return null;\n }\n\n const scaleAdjustedTransform = adjustScale ? transform : { ...transform,\n scaleX: 1,\n scaleY: 1\n };\n const styles = { ...baseStyles,\n width: rect.width,\n height: rect.height,\n top: rect.top,\n left: rect.left,\n transform: CSS.Transform.toString(scaleAdjustedTransform),\n transformOrigin: adjustScale && activatorEvent ? getRelativeTransformOrigin(activatorEvent, rect) : undefined,\n transition: typeof transition === 'function' ? transition(activatorEvent) : transition,\n ...style\n };\n return React.createElement(as, {\n className,\n style: styles,\n ref\n }, children);\n});\n\nconst defaultDropAnimationSideEffects = options => _ref => {\n let {\n active,\n dragOverlay\n } = _ref;\n const originalStyles = {};\n const {\n styles,\n className\n } = options;\n\n if (styles != null && styles.active) {\n for (const [key, value] of Object.entries(styles.active)) {\n if (value === undefined) {\n continue;\n }\n\n originalStyles[key] = active.node.style.getPropertyValue(key);\n active.node.style.setProperty(key, value);\n }\n }\n\n if (styles != null && styles.dragOverlay) {\n for (const [key, value] of Object.entries(styles.dragOverlay)) {\n if (value === undefined) {\n continue;\n }\n\n dragOverlay.node.style.setProperty(key, value);\n }\n }\n\n if (className != null && className.active) {\n active.node.classList.add(className.active);\n }\n\n if (className != null && className.dragOverlay) {\n dragOverlay.node.classList.add(className.dragOverlay);\n }\n\n return function cleanup() {\n for (const [key, value] of Object.entries(originalStyles)) {\n active.node.style.setProperty(key, value);\n }\n\n if (className != null && className.active) {\n active.node.classList.remove(className.active);\n }\n };\n};\n\nconst defaultKeyframeResolver = _ref2 => {\n let {\n transform: {\n initial,\n final\n }\n } = _ref2;\n return [{\n transform: CSS.Transform.toString(initial)\n }, {\n transform: CSS.Transform.toString(final)\n }];\n};\n\nconst defaultDropAnimationConfiguration = {\n duration: 250,\n easing: 'ease',\n keyframes: defaultKeyframeResolver,\n sideEffects: /*#__PURE__*/defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0'\n }\n }\n })\n};\nfunction useDropAnimation(_ref3) {\n let {\n config,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n } = _ref3;\n return useEvent((id, node) => {\n if (config === null) {\n return;\n }\n\n const activeDraggable = draggableNodes.get(id);\n\n if (!activeDraggable) {\n return;\n }\n\n const activeNode = activeDraggable.node.current;\n\n if (!activeNode) {\n return;\n }\n\n const measurableNode = getMeasurableNode(node);\n\n if (!measurableNode) {\n return;\n }\n\n const {\n transform\n } = getWindow(node).getComputedStyle(node);\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return;\n }\n\n const animation = typeof config === 'function' ? config : createDefaultDropAnimation(config);\n scrollIntoViewIfNeeded(activeNode, measuringConfiguration.draggable.measure);\n return animation({\n active: {\n id,\n data: activeDraggable.data,\n node: activeNode,\n rect: measuringConfiguration.draggable.measure(activeNode)\n },\n draggableNodes,\n dragOverlay: {\n node,\n rect: measuringConfiguration.dragOverlay.measure(measurableNode)\n },\n droppableContainers,\n measuringConfiguration,\n transform: parsedTransform\n });\n });\n}\n\nfunction createDefaultDropAnimation(options) {\n const {\n duration,\n easing,\n sideEffects,\n keyframes\n } = { ...defaultDropAnimationConfiguration,\n ...options\n };\n return _ref4 => {\n let {\n active,\n dragOverlay,\n transform,\n ...rest\n } = _ref4;\n\n if (!duration) {\n // Do not animate if animation duration is zero.\n return;\n }\n\n const delta = {\n x: dragOverlay.rect.left - active.rect.left,\n y: dragOverlay.rect.top - active.rect.top\n };\n const scale = {\n scaleX: transform.scaleX !== 1 ? active.rect.width * transform.scaleX / dragOverlay.rect.width : 1,\n scaleY: transform.scaleY !== 1 ? active.rect.height * transform.scaleY / dragOverlay.rect.height : 1\n };\n const finalTransform = {\n x: transform.x - delta.x,\n y: transform.y - delta.y,\n ...scale\n };\n const animationKeyframes = keyframes({ ...rest,\n active,\n dragOverlay,\n transform: {\n initial: transform,\n final: finalTransform\n }\n });\n const [firstKeyframe] = animationKeyframes;\n const lastKeyframe = animationKeyframes[animationKeyframes.length - 1];\n\n if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) {\n // The start and end keyframes are the same, infer that there is no animation needed.\n return;\n }\n\n const cleanup = sideEffects == null ? void 0 : sideEffects({\n active,\n dragOverlay,\n ...rest\n });\n const animation = dragOverlay.node.animate(animationKeyframes, {\n duration,\n easing,\n fill: 'forwards'\n });\n return new Promise(resolve => {\n animation.onfinish = () => {\n cleanup == null ? void 0 : cleanup();\n resolve();\n };\n });\n };\n}\n\nlet key = 0;\nfunction useKey(id) {\n return useMemo(() => {\n if (id == null) {\n return;\n }\n\n key++;\n return key;\n }, [id]);\n}\n\nconst DragOverlay = /*#__PURE__*/React.memo(_ref => {\n let {\n adjustScale = false,\n children,\n dropAnimation: dropAnimationConfig,\n style,\n transition,\n modifiers,\n wrapperElement = 'div',\n className,\n zIndex = 999\n } = _ref;\n const {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggableNodes,\n droppableContainers,\n dragOverlay,\n over,\n measuringConfiguration,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n } = useDndContext();\n const transform = useContext(ActiveDraggableContext);\n const key = useKey(active == null ? void 0 : active.id);\n const modifiedTransform = applyModifiers(modifiers, {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect: dragOverlay.rect,\n over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n transform,\n windowRect\n });\n const initialRect = useInitialValue(activeNodeRect);\n const dropAnimation = useDropAnimation({\n config: dropAnimationConfig,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n }); // We need to wait for the active node to be measured before connecting the drag overlay ref\n // otherwise collisions can be computed against a mispositioned drag overlay\n\n const ref = initialRect ? dragOverlay.setRef : undefined;\n return React.createElement(NullifiedContextProvider, null, React.createElement(AnimationManager, {\n animation: dropAnimation\n }, active && key ? React.createElement(PositionedOverlay, {\n key: key,\n id: active.id,\n ref: ref,\n as: wrapperElement,\n activatorEvent: activatorEvent,\n adjustScale: adjustScale,\n className: className,\n transition: transition,\n rect: initialRect,\n style: {\n zIndex,\n ...style\n },\n transform: modifiedTransform\n }, children) : null));\n});\n\nexport { AutoScrollActivator, DndContext, DragOverlay, KeyboardCode, KeyboardSensor, MeasuringFrequency, MeasuringStrategy, MouseSensor, PointerSensor, TouchSensor, TraversalOrder, applyModifiers, closestCenter, closestCorners, defaultAnnouncements, defaultCoordinates, defaultDropAnimationConfiguration as defaultDropAnimation, defaultDropAnimationSideEffects, defaultKeyboardCoordinateGetter, defaultScreenReaderInstructions, getClientRect, getFirstCollision, getScrollableAncestors, pointerWithin, rectIntersection, useDndContext, useDndMonitor, useDraggable, useDroppable, useSensor, useSensors };\n//# sourceMappingURL=core.esm.js.map\n","import React, { useMemo, useRef, useEffect, useState, useContext } from 'react';\nimport { useDndContext, getClientRect, useDroppable, useDraggable, closestCorners, getFirstCollision, getScrollableAncestors, KeyboardCode } from '@dnd-kit/core';\nimport { useUniqueId, useIsomorphicLayoutEffect, CSS, useCombinedRefs, isKeyboardEvent, subtract } from '@dnd-kit/utilities';\n\n/**\r\n * Move an array item to a different position. Returns a new array with the item moved to the new position.\r\n */\nfunction arrayMove(array, from, to) {\n const newArray = array.slice();\n newArray.splice(to < 0 ? newArray.length + to : to, 0, newArray.splice(from, 1)[0]);\n return newArray;\n}\n\n/**\r\n * Swap an array item to a different position. Returns a new array with the item swapped to the new position.\r\n */\nfunction arraySwap(array, from, to) {\n const newArray = array.slice();\n newArray[from] = array[to];\n newArray[to] = array[from];\n return newArray;\n}\n\nfunction getSortedRects(items, rects) {\n return items.reduce((accumulator, id, index) => {\n const rect = rects.get(id);\n\n if (rect) {\n accumulator[index] = rect;\n }\n\n return accumulator;\n }, Array(items.length));\n}\n\nfunction isValidIndex(index) {\n return index !== null && index >= 0;\n}\n\nfunction itemsEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction normalizeDisabled(disabled) {\n if (typeof disabled === 'boolean') {\n return {\n draggable: disabled,\n droppable: disabled\n };\n }\n\n return disabled;\n}\n\n// To-do: We should be calculating scale transformation\nconst defaultScale = {\n scaleX: 1,\n scaleY: 1\n};\nconst horizontalListSortingStrategy = _ref => {\n var _rects$activeIndex;\n\n let {\n rects,\n activeNodeRect: fallbackActiveRect,\n activeIndex,\n overIndex,\n index\n } = _ref;\n const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect;\n\n if (!activeNodeRect) {\n return null;\n }\n\n const itemGap = getItemGap(rects, index, activeIndex);\n\n if (index === activeIndex) {\n const newIndexRect = rects[overIndex];\n\n if (!newIndexRect) {\n return null;\n }\n\n return {\n x: activeIndex < overIndex ? newIndexRect.left + newIndexRect.width - (activeNodeRect.left + activeNodeRect.width) : newIndexRect.left - activeNodeRect.left,\n y: 0,\n ...defaultScale\n };\n }\n\n if (index > activeIndex && index <= overIndex) {\n return {\n x: -activeNodeRect.width - itemGap,\n y: 0,\n ...defaultScale\n };\n }\n\n if (index < activeIndex && index >= overIndex) {\n return {\n x: activeNodeRect.width + itemGap,\n y: 0,\n ...defaultScale\n };\n }\n\n return {\n x: 0,\n y: 0,\n ...defaultScale\n };\n};\n\nfunction getItemGap(rects, index, activeIndex) {\n const currentRect = rects[index];\n const previousRect = rects[index - 1];\n const nextRect = rects[index + 1];\n\n if (!currentRect || !previousRect && !nextRect) {\n return 0;\n }\n\n if (activeIndex < index) {\n return previousRect ? currentRect.left - (previousRect.left + previousRect.width) : nextRect.left - (currentRect.left + currentRect.width);\n }\n\n return nextRect ? nextRect.left - (currentRect.left + currentRect.width) : currentRect.left - (previousRect.left + previousRect.width);\n}\n\nconst rectSortingStrategy = _ref => {\n let {\n rects,\n activeIndex,\n overIndex,\n index\n } = _ref;\n const newRects = arrayMove(rects, overIndex, activeIndex);\n const oldRect = rects[index];\n const newRect = newRects[index];\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height\n };\n};\n\nconst rectSwappingStrategy = _ref => {\n let {\n activeIndex,\n index,\n rects,\n overIndex\n } = _ref;\n let oldRect;\n let newRect;\n\n if (index === activeIndex) {\n oldRect = rects[index];\n newRect = rects[overIndex];\n }\n\n if (index === overIndex) {\n oldRect = rects[index];\n newRect = rects[activeIndex];\n }\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height\n };\n};\n\n// To-do: We should be calculating scale transformation\nconst defaultScale$1 = {\n scaleX: 1,\n scaleY: 1\n};\nconst verticalListSortingStrategy = _ref => {\n var _rects$activeIndex;\n\n let {\n activeIndex,\n activeNodeRect: fallbackActiveRect,\n index,\n rects,\n overIndex\n } = _ref;\n const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect;\n\n if (!activeNodeRect) {\n return null;\n }\n\n if (index === activeIndex) {\n const overIndexRect = rects[overIndex];\n\n if (!overIndexRect) {\n return null;\n }\n\n return {\n x: 0,\n y: activeIndex < overIndex ? overIndexRect.top + overIndexRect.height - (activeNodeRect.top + activeNodeRect.height) : overIndexRect.top - activeNodeRect.top,\n ...defaultScale$1\n };\n }\n\n const itemGap = getItemGap$1(rects, index, activeIndex);\n\n if (index > activeIndex && index <= overIndex) {\n return {\n x: 0,\n y: -activeNodeRect.height - itemGap,\n ...defaultScale$1\n };\n }\n\n if (index < activeIndex && index >= overIndex) {\n return {\n x: 0,\n y: activeNodeRect.height + itemGap,\n ...defaultScale$1\n };\n }\n\n return {\n x: 0,\n y: 0,\n ...defaultScale$1\n };\n};\n\nfunction getItemGap$1(clientRects, index, activeIndex) {\n const currentRect = clientRects[index];\n const previousRect = clientRects[index - 1];\n const nextRect = clientRects[index + 1];\n\n if (!currentRect) {\n return 0;\n }\n\n if (activeIndex < index) {\n return previousRect ? currentRect.top - (previousRect.top + previousRect.height) : nextRect ? nextRect.top - (currentRect.top + currentRect.height) : 0;\n }\n\n return nextRect ? nextRect.top - (currentRect.top + currentRect.height) : previousRect ? currentRect.top - (previousRect.top + previousRect.height) : 0;\n}\n\nconst ID_PREFIX = 'Sortable';\nconst Context = /*#__PURE__*/React.createContext({\n activeIndex: -1,\n containerId: ID_PREFIX,\n disableTransforms: false,\n items: [],\n overIndex: -1,\n useDragOverlay: false,\n sortedRects: [],\n strategy: rectSortingStrategy,\n disabled: {\n draggable: false,\n droppable: false\n }\n});\nfunction SortableContext(_ref) {\n let {\n children,\n id,\n items: userDefinedItems,\n strategy = rectSortingStrategy,\n disabled: disabledProp = false\n } = _ref;\n const {\n active,\n dragOverlay,\n droppableRects,\n over,\n measureDroppableContainers\n } = useDndContext();\n const containerId = useUniqueId(ID_PREFIX, id);\n const useDragOverlay = Boolean(dragOverlay.rect !== null);\n const items = useMemo(() => userDefinedItems.map(item => typeof item === 'object' && 'id' in item ? item.id : item), [userDefinedItems]);\n const isDragging = active != null;\n const activeIndex = active ? items.indexOf(active.id) : -1;\n const overIndex = over ? items.indexOf(over.id) : -1;\n const previousItemsRef = useRef(items);\n const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current);\n const disableTransforms = overIndex !== -1 && activeIndex === -1 || itemsHaveChanged;\n const disabled = normalizeDisabled(disabledProp);\n useIsomorphicLayoutEffect(() => {\n if (itemsHaveChanged && isDragging) {\n measureDroppableContainers(items);\n }\n }, [itemsHaveChanged, items, isDragging, measureDroppableContainers]);\n useEffect(() => {\n previousItemsRef.current = items;\n }, [items]);\n const contextValue = useMemo(() => ({\n activeIndex,\n containerId,\n disabled,\n disableTransforms,\n items,\n overIndex,\n useDragOverlay,\n sortedRects: getSortedRects(items, droppableRects),\n strategy\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [activeIndex, containerId, disabled.draggable, disabled.droppable, disableTransforms, items, overIndex, droppableRects, useDragOverlay, strategy]);\n return React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nconst defaultNewIndexGetter = _ref => {\n let {\n id,\n items,\n activeIndex,\n overIndex\n } = _ref;\n return arrayMove(items, activeIndex, overIndex).indexOf(id);\n};\nconst defaultAnimateLayoutChanges = _ref2 => {\n let {\n containerId,\n isSorting,\n wasDragging,\n index,\n items,\n newIndex,\n previousItems,\n previousContainerId,\n transition\n } = _ref2;\n\n if (!transition || !wasDragging) {\n return false;\n }\n\n if (previousItems !== items && index === newIndex) {\n return false;\n }\n\n if (isSorting) {\n return true;\n }\n\n return newIndex !== index && containerId === previousContainerId;\n};\nconst defaultTransition = {\n duration: 200,\n easing: 'ease'\n};\nconst transitionProperty = 'transform';\nconst disabledTransition = /*#__PURE__*/CSS.Transition.toString({\n property: transitionProperty,\n duration: 0,\n easing: 'linear'\n});\nconst defaultAttributes = {\n roleDescription: 'sortable'\n};\n\n/*\r\n * When the index of an item changes while sorting,\r\n * we need to temporarily disable the transforms\r\n */\n\nfunction useDerivedTransform(_ref) {\n let {\n disabled,\n index,\n node,\n rect\n } = _ref;\n const [derivedTransform, setDerivedtransform] = useState(null);\n const previousIndex = useRef(index);\n useIsomorphicLayoutEffect(() => {\n if (!disabled && index !== previousIndex.current && node.current) {\n const initial = rect.current;\n\n if (initial) {\n const current = getClientRect(node.current, {\n ignoreTransform: true\n });\n const delta = {\n x: initial.left - current.left,\n y: initial.top - current.top,\n scaleX: initial.width / current.width,\n scaleY: initial.height / current.height\n };\n\n if (delta.x || delta.y) {\n setDerivedtransform(delta);\n }\n }\n }\n\n if (index !== previousIndex.current) {\n previousIndex.current = index;\n }\n }, [disabled, index, node, rect]);\n useEffect(() => {\n if (derivedTransform) {\n setDerivedtransform(null);\n }\n }, [derivedTransform]);\n return derivedTransform;\n}\n\nfunction useSortable(_ref) {\n let {\n animateLayoutChanges = defaultAnimateLayoutChanges,\n attributes: userDefinedAttributes,\n disabled: localDisabled,\n data: customData,\n getNewIndex = defaultNewIndexGetter,\n id,\n strategy: localStrategy,\n resizeObserverConfig,\n transition = defaultTransition\n } = _ref;\n const {\n items,\n containerId,\n activeIndex,\n disabled: globalDisabled,\n disableTransforms,\n sortedRects,\n overIndex,\n useDragOverlay,\n strategy: globalStrategy\n } = useContext(Context);\n const disabled = normalizeLocalDisabled(localDisabled, globalDisabled);\n const index = items.indexOf(id);\n const data = useMemo(() => ({\n sortable: {\n containerId,\n index,\n items\n },\n ...customData\n }), [containerId, customData, index, items]);\n const itemsAfterCurrentSortable = useMemo(() => items.slice(items.indexOf(id)), [items, id]);\n const {\n rect,\n node,\n isOver,\n setNodeRef: setDroppableNodeRef\n } = useDroppable({\n id,\n data,\n disabled: disabled.droppable,\n resizeObserverConfig: {\n updateMeasurementsFor: itemsAfterCurrentSortable,\n ...resizeObserverConfig\n }\n });\n const {\n active,\n activatorEvent,\n activeNodeRect,\n attributes,\n setNodeRef: setDraggableNodeRef,\n listeners,\n isDragging,\n over,\n setActivatorNodeRef,\n transform\n } = useDraggable({\n id,\n data,\n attributes: { ...defaultAttributes,\n ...userDefinedAttributes\n },\n disabled: disabled.draggable\n });\n const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef);\n const isSorting = Boolean(active);\n const displaceItem = isSorting && !disableTransforms && isValidIndex(activeIndex) && isValidIndex(overIndex);\n const shouldDisplaceDragSource = !useDragOverlay && isDragging;\n const dragSourceDisplacement = shouldDisplaceDragSource && displaceItem ? transform : null;\n const strategy = localStrategy != null ? localStrategy : globalStrategy;\n const finalTransform = displaceItem ? dragSourceDisplacement != null ? dragSourceDisplacement : strategy({\n rects: sortedRects,\n activeNodeRect,\n activeIndex,\n overIndex,\n index\n }) : null;\n const newIndex = isValidIndex(activeIndex) && isValidIndex(overIndex) ? getNewIndex({\n id,\n items,\n activeIndex,\n overIndex\n }) : index;\n const activeId = active == null ? void 0 : active.id;\n const previous = useRef({\n activeId,\n items,\n newIndex,\n containerId\n });\n const itemsHaveChanged = items !== previous.current.items;\n const shouldAnimateLayoutChanges = animateLayoutChanges({\n active,\n containerId,\n isDragging,\n isSorting,\n id,\n index,\n items,\n newIndex: previous.current.newIndex,\n previousItems: previous.current.items,\n previousContainerId: previous.current.containerId,\n transition,\n wasDragging: previous.current.activeId != null\n });\n const derivedTransform = useDerivedTransform({\n disabled: !shouldAnimateLayoutChanges,\n index,\n node,\n rect\n });\n useEffect(() => {\n if (isSorting && previous.current.newIndex !== newIndex) {\n previous.current.newIndex = newIndex;\n }\n\n if (containerId !== previous.current.containerId) {\n previous.current.containerId = containerId;\n }\n\n if (items !== previous.current.items) {\n previous.current.items = items;\n }\n }, [isSorting, newIndex, containerId, items]);\n useEffect(() => {\n if (activeId === previous.current.activeId) {\n return;\n }\n\n if (activeId != null && previous.current.activeId == null) {\n previous.current.activeId = activeId;\n return;\n }\n\n const timeoutId = setTimeout(() => {\n previous.current.activeId = activeId;\n }, 50);\n return () => clearTimeout(timeoutId);\n }, [activeId]);\n return {\n active,\n activeIndex,\n attributes,\n data,\n rect,\n index,\n newIndex,\n items,\n isOver,\n isSorting,\n isDragging,\n listeners,\n node,\n overIndex,\n over,\n setNodeRef,\n setActivatorNodeRef,\n setDroppableNodeRef,\n setDraggableNodeRef,\n transform: derivedTransform != null ? derivedTransform : finalTransform,\n transition: getTransition()\n };\n\n function getTransition() {\n if ( // Temporarily disable transitions for a single frame to set up derived transforms\n derivedTransform || // Or to prevent items jumping to back to their \"new\" position when items change\n itemsHaveChanged && previous.current.newIndex === index) {\n return disabledTransition;\n }\n\n if (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent) || !transition) {\n return undefined;\n }\n\n if (isSorting || shouldAnimateLayoutChanges) {\n return CSS.Transition.toString({ ...transition,\n property: transitionProperty\n });\n }\n\n return undefined;\n }\n}\n\nfunction normalizeLocalDisabled(localDisabled, globalDisabled) {\n var _localDisabled$dragga, _localDisabled$droppa;\n\n if (typeof localDisabled === 'boolean') {\n return {\n draggable: localDisabled,\n // Backwards compatibility\n droppable: false\n };\n }\n\n return {\n draggable: (_localDisabled$dragga = localDisabled == null ? void 0 : localDisabled.draggable) != null ? _localDisabled$dragga : globalDisabled.draggable,\n droppable: (_localDisabled$droppa = localDisabled == null ? void 0 : localDisabled.droppable) != null ? _localDisabled$droppa : globalDisabled.droppable\n };\n}\n\nfunction hasSortableData(entry) {\n if (!entry) {\n return false;\n }\n\n const data = entry.data.current;\n\n if (data && 'sortable' in data && typeof data.sortable === 'object' && 'containerId' in data.sortable && 'items' in data.sortable && 'index' in data.sortable) {\n return true;\n }\n\n return false;\n}\n\nconst directions = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left];\nconst sortableKeyboardCoordinates = (event, _ref) => {\n let {\n context: {\n active,\n collisionRect,\n droppableRects,\n droppableContainers,\n over,\n scrollableAncestors\n }\n } = _ref;\n\n if (directions.includes(event.code)) {\n event.preventDefault();\n\n if (!active || !collisionRect) {\n return;\n }\n\n const filteredContainers = [];\n droppableContainers.getEnabled().forEach(entry => {\n if (!entry || entry != null && entry.disabled) {\n return;\n }\n\n const rect = droppableRects.get(entry.id);\n\n if (!rect) {\n return;\n }\n\n switch (event.code) {\n case KeyboardCode.Down:\n if (collisionRect.top < rect.top) {\n filteredContainers.push(entry);\n }\n\n break;\n\n case KeyboardCode.Up:\n if (collisionRect.top > rect.top) {\n filteredContainers.push(entry);\n }\n\n break;\n\n case KeyboardCode.Left:\n if (collisionRect.left > rect.left) {\n filteredContainers.push(entry);\n }\n\n break;\n\n case KeyboardCode.Right:\n if (collisionRect.left < rect.left) {\n filteredContainers.push(entry);\n }\n\n break;\n }\n });\n const collisions = closestCorners({\n active,\n collisionRect: collisionRect,\n droppableRects,\n droppableContainers: filteredContainers,\n pointerCoordinates: null\n });\n let closestId = getFirstCollision(collisions, 'id');\n\n if (closestId === (over == null ? void 0 : over.id) && collisions.length > 1) {\n closestId = collisions[1].id;\n }\n\n if (closestId != null) {\n const activeDroppable = droppableContainers.get(active.id);\n const newDroppable = droppableContainers.get(closestId);\n const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null;\n const newNode = newDroppable == null ? void 0 : newDroppable.node.current;\n\n if (newNode && newRect && activeDroppable && newDroppable) {\n const newScrollAncestors = getScrollableAncestors(newNode);\n const hasDifferentScrollAncestors = newScrollAncestors.some((element, index) => scrollableAncestors[index] !== element);\n const hasSameContainer = isSameContainer(activeDroppable, newDroppable);\n const isAfterActive = isAfter(activeDroppable, newDroppable);\n const offset = hasDifferentScrollAncestors || !hasSameContainer ? {\n x: 0,\n y: 0\n } : {\n x: isAfterActive ? collisionRect.width - newRect.width : 0,\n y: isAfterActive ? collisionRect.height - newRect.height : 0\n };\n const rectCoordinates = {\n x: newRect.left,\n y: newRect.top\n };\n const newCoordinates = offset.x && offset.y ? rectCoordinates : subtract(rectCoordinates, offset);\n return newCoordinates;\n }\n }\n }\n\n return undefined;\n};\n\nfunction isSameContainer(a, b) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n return a.data.current.sortable.containerId === b.data.current.sortable.containerId;\n}\n\nfunction isAfter(a, b) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n if (!isSameContainer(a, b)) {\n return false;\n }\n\n return a.data.current.sortable.index < b.data.current.sortable.index;\n}\n\nexport { SortableContext, arrayMove, arraySwap, defaultAnimateLayoutChanges, defaultNewIndexGetter, hasSortableData, horizontalListSortingStrategy, rectSortingStrategy, rectSwappingStrategy, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy };\n//# sourceMappingURL=sortable.esm.js.map\n","/**\n * SortableThumbnailItem 컴포넌트\n *\n * 드래그 앤 드롭이 가능한 파일 썸네일 아이템입니다.\n *\n * @module composite/FileUploader/SortableThumbnailItem\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nimport { Div } from '../../basic/Div';\nimport { Button } from '../../basic/Button';\nimport { Span } from '../../basic/Span';\nimport { P } from '../../basic/P';\nimport { I } from '../../basic/I';\nimport { Img } from '../../basic/Img';\n\nimport type { Attachment, PendingFile } from './types';\nimport { getFileIcon, t } from './utils';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\nexport interface SortableThumbnailItemProps {\n file: PendingFile | (Attachment & { status?: string });\n onRemove: () => void;\n onRetry?: () => void;\n /** 이미지 클릭 시 갤러리 열기 */\n onImageClick?: () => void;\n /** 비이미지 파일 클릭/다운로드 시 호출 */\n onDownload?: () => void;\n /** 대표 이미지 여부 */\n isPrimary?: boolean;\n /** 대표 이미지 설정 클릭 핸들러 */\n onPrimaryClick?: () => void;\n}\n\nexport const SortableThumbnailItem: React.FC = ({\n file,\n onRemove,\n onRetry,\n onImageClick,\n onDownload,\n isPrimary,\n onPrimaryClick,\n}) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: 'hash' in file ? file.hash : file.id,\n });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n const isPending = 'status' in file && file.status !== undefined;\n const status = isPending ? (file as PendingFile).status : 'done';\n const isUploading = status === 'uploading';\n const isCompressing = status === 'compressing';\n const hasError = status === 'error';\n const progress = isPending ? (file as PendingFile).progress : 100;\n const preview = isPending ? (file as PendingFile).preview : undefined;\n // 기존 첨부파일: is_image 필드 우선 사용, 대기 파일: mime_type 확인\n const isImage = !isPending\n ? (file as Attachment).is_image\n : (file.mime_type?.startsWith('image/') ?? false);\n\n // 인증된 이미지 로딩을 위한 상태\n const [authenticatedImageUrl, setAuthenticatedImageUrl] = useState(undefined);\n const downloadUrl = !isPending && isImage ? (file as Attachment).download_url : undefined;\n\n // 기존 첨부파일의 경우 인증된 요청으로 이미지 로드\n useEffect(() => {\n if (!downloadUrl) {\n setAuthenticatedImageUrl(undefined);\n return;\n }\n\n let isMounted = true;\n let objectUrl: string | undefined;\n\n const loadAuthenticatedImage = async () => {\n try {\n const blob = await G7Core.api.get(downloadUrl, {\n responseType: 'blob',\n });\n if (isMounted && blob) {\n objectUrl = URL.createObjectURL(blob);\n setAuthenticatedImageUrl(objectUrl);\n }\n } catch (error) {\n console.error('Failed to load authenticated image:', error);\n }\n };\n\n loadAuthenticatedImage();\n\n return () => {\n isMounted = false;\n if (objectUrl) {\n URL.revokeObjectURL(objectUrl);\n }\n };\n }, [downloadUrl]);\n\n // 기존 첨부파일의 경우 인증된 URL 사용\n const existingImageUrl = authenticatedImageUrl;\n\n return (\n \n {/* 썸네일 영역 */}\n {\n // 업로드 중/압축 중이면 클릭 무시\n if (isUploading || isCompressing) return;\n\n if (isImage && onImageClick) {\n // 이미지는 갤러리 열기\n onImageClick();\n } else if (!isPending && onDownload) {\n // 비이미지 기존 파일은 다운로드\n onDownload();\n }\n }}\n >\n {/* 이미지 미리보기 */}\n {(preview || existingImageUrl) ? (\n \n ) : (\n /* 파일 아이콘 */\n \n )}\n\n {/* 업로드/압축 진행률 오버레이 */}\n {(isUploading || isCompressing) && (\n
\n
\n \n
\n {progress}%\n
\n )}\n\n {/* 에러 오버레이 */}\n {hasError && (\n
\n \n
\n )}\n\n {/* 대표 이미지 뱃지 */}\n {onPrimaryClick && (\n {\n e.stopPropagation();\n onPrimaryClick();\n }}\n className={`absolute top-1.5 left-1.5 z-10 p-1 rounded-full transition-colors ${\n isPrimary\n ? 'bg-yellow-500 text-white'\n : 'bg-gray-800/50 text-gray-300 hover:bg-yellow-500 hover:text-white opacity-0 group-hover:opacity-100'\n }`}\n title={isPrimary ? t('attachment.primary_image') : t('attachment.set_as_primary')}\n >\n \n \n )}\n\n {/* 호버 시 액션 버튼들 */}\n
\n {/* 드래그 핸들 */}\n e.stopPropagation()}\n >\n \n \n\n {/* 다운로드 버튼 (기존 첨부파일만) */}\n {!isPending && onDownload && (\n {\n e.stopPropagation();\n onDownload();\n }}\n className=\"p-1.5 bg-white/90 dark:bg-gray-800/90 rounded text-blue-500 hover:bg-white\"\n title={t('common.download')}\n >\n \n \n )}\n\n {/* 재시도 버튼 */}\n {hasError && onRetry && (\n {\n e.stopPropagation();\n onRetry();\n }}\n className=\"p-1.5 bg-white/90 dark:bg-gray-800/90 rounded text-orange-500 hover:bg-white\"\n title={t('common.retry')}\n >\n \n \n )}\n\n {/* 삭제 버튼 */}\n {\n e.stopPropagation();\n onRemove();\n }}\n disabled={isUploading || isCompressing}\n className=\"p-1.5 bg-white/90 dark:bg-gray-800/90 rounded text-red-500 hover:bg-white disabled:opacity-50\"\n title={t('common.delete')}\n >\n \n \n
\n \n\n {/* 파일 정보 */}\n {\n // 기존 첨부파일만 클릭 시 다운로드\n if (!isPending && onDownload) {\n onDownload();\n }\n }}\n >\n

\n {file.original_filename}\n

\n

\n {isPending ? (file as PendingFile).size_formatted : (file as Attachment).size_formatted}\n

\n \n \n );\n};\n\nexport default SortableThumbnailItem;","/**\n * FileList 컴포넌트\n *\n * 파일 목록을 정렬 가능한 그리드 형태로 표시합니다.\n *\n * @module composite/FileUploader/FileList\n */\n\nimport React from 'react';\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n sortableKeyboardCoordinates,\n rectSortingStrategy,\n} from '@dnd-kit/sortable';\n\nimport { Div } from '../../basic/Div';\nimport { Span } from '../../basic/Span';\nimport { I } from '../../basic/I';\n\nimport { SortableThumbnailItem } from './SortableThumbnailItem';\nimport type { Attachment, PendingFile } from './types';\nimport { t } from './utils';\n\nexport interface FileListProps {\n /** 모든 파일 목록 (기존 + 대기) */\n allItems: (Attachment | PendingFile)[];\n /** 더 추가 가능 여부 */\n canAddMore: boolean;\n /** 총 파일 수 */\n totalCount: number;\n /** 최대 파일 수 */\n maxFiles: number;\n /** 최대 파일 크기 (MB) */\n maxSize: number;\n /** 허용 확장자 */\n accept?: string;\n /** 파일 삭제 핸들러 */\n onRemove: (item: PendingFile | Attachment) => void;\n /** 재시도 핸들러 */\n onRetry: (pendingFile: PendingFile) => void;\n /** 이미지 클릭 핸들러 */\n onImageClick: (item: PendingFile | Attachment) => void;\n /** 다운로드 핸들러 */\n onDownload: (item: Attachment) => void;\n /** 드래그 종료 핸들러 */\n onDragEnd: (event: DragEndEvent) => void;\n /** 추가 버튼 클릭 핸들러 */\n onAddClick: () => void;\n /** 대표 이미지 선택 기능 활성화 */\n enablePrimarySelection?: boolean;\n /** 현재 대표 이미지 식별자 (ID 또는 hash) */\n primaryFileId?: number | string | null;\n /** 대표 이미지 변경 핸들러 */\n onPrimaryChange?: (id: number | string | null) => void;\n}\n\nexport const FileList: React.FC = ({\n allItems,\n canAddMore,\n totalCount,\n maxFiles,\n maxSize,\n accept,\n onRemove,\n onRetry,\n onImageClick,\n onDownload,\n onDragEnd,\n onAddClick,\n enablePrimarySelection,\n primaryFileId,\n onPrimaryChange,\n}) => {\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })\n );\n\n return (\n
\n \n ('hash' in item ? item.hash : item.id))}\n strategy={rectSortingStrategy}\n >\n
\n {/* 파일 썸네일들 */}\n {allItems.map((item) => {\n const isExisting = 'hash' in item;\n // 기존 첨부파일: is_image 필드 우선 사용, 대기 파일: mime_type 확인\n const isImage = isExisting\n ? (item as Attachment).is_image\n : (item.mime_type?.startsWith('image/') ?? false);\n\n return (\n onRemove(item)}\n onRetry={\n 'status' in item && item.status === 'error'\n ? () => onRetry(item as PendingFile)\n : undefined\n }\n onImageClick={\n isImage ? () => onImageClick(item) : undefined\n }\n onDownload={\n isExisting ? () => onDownload(item as Attachment) : undefined\n }\n isPrimary={enablePrimarySelection && isExisting && ((item as Attachment).hash || (item as Attachment).id) === primaryFileId}\n onPrimaryClick={\n enablePrimarySelection && isExisting\n ? () => onPrimaryChange?.((item as Attachment).hash || (item as Attachment).id)\n : undefined\n }\n />\n );\n })}\n\n {/* 추가 버튼 (더 추가할 수 있을 때만) */}\n {canAddMore && (\n \n \n {t('common.add')}\n
\n )}\n
\n \n
\n\n {/* 하단 정보 */}\n
\n {t('attachment.attached_count', { count: totalCount, max: maxFiles })}\n {t('attachment.max_size', { size: maxSize })}{accept && ` (${accept})`}\n
\n \n );\n};\n\nexport default FileList;","/**\n * FileUploader 컴포넌트\n *\n * 파일 업로드를 위한 통합 컴포넌트입니다.\n * - 드래그 앤 드롭 지원\n * - 이미지 압축\n * - 병렬 업로드\n * - 순서 변경\n * - 이미지 갤러리\n *\n * @module composite/FileUploader\n */\n\nimport { forwardRef, useImperativeHandle, useMemo, useRef, useCallback } from 'react';\n\nimport { Div } from '../../basic/Div';\nimport { ConfirmDialog } from '../ConfirmDialog';\nimport { ImageGallery, GalleryImage } from '../ImageGallery';\n\nimport { FileUploaderProvider } from './FileUploaderContext';\nimport { useFileUploader } from './useFileUploader';\nimport { FileDropZone } from './FileDropZone';\nimport { FileList } from './FileList';\nimport type { FileUploaderProps, FileUploaderRef, Attachment, PendingFile } from './types';\nimport { t } from './utils';\n\n/** 안정적인 빈 배열 참조 — 매 렌더마다 새 [] 생성 방지 (useEffect 무한 루프 방지) */\nconst EMPTY_FILES: Attachment[] = [];\nconst EMPTY_ROLE_IDS: number[] = [];\n\n// ========== Main Component ==========\n\nexport const FileUploader = forwardRef(\n (\n {\n uploadTriggerEvent,\n attachmentableType,\n attachmentableId,\n collection = 'default',\n maxFiles = 10,\n maxSize = 10,\n maxConcurrentUploads = 3,\n accept,\n imageCompression: compressionOptions,\n roleIds = EMPTY_ROLE_IDS,\n autoUpload = true,\n onFilesChange,\n onChange,\n onUploadComplete,\n onUploadError,\n onRemove,\n onReorder,\n initialFiles = EMPTY_FILES,\n className = '',\n confirmBeforeRemove = false,\n confirmRemoveTitle,\n confirmRemoveMessage,\n apiEndpoints,\n uploadParams,\n enablePrimarySelection = false,\n primaryFileId,\n onPrimaryChange,\n id,\n editorAttrs,\n },\n ref\n ) => {\n // API 엔드포인트 기본값 설정 (User 템플릿용 기본 경로)\n const endpoints = {\n upload: apiEndpoints?.upload ?? '/api/attachments',\n delete: apiEndpoints?.delete ?? '/api/attachments/:id',\n reorder: apiEndpoints?.reorder ?? '/api/attachments/reorder',\n };\n\n // onFilesChange 래퍼: ActionDispatcher 호환 형태로 변환\n // ActionDispatcher는 type: \"change\" → onChange prop으로 매핑하므로,\n // onChange가 설정될 수 있음. onFilesChange는 직접 props 전달 시 사용.\n // ref로 안정화: ActionDispatcher가 매 렌더마다 새 함수를 바인딩하므로\n // 직접 의존하면 useMemo/useEffect 무한 루프 발생. ref로 최신 참조만 유지.\n const callbackRef = useRef(onChange ?? onFilesChange);\n callbackRef.current = onChange ?? onFilesChange;\n\n const wrappedOnFilesChange = useCallback(\n (files: import('./types').PendingFile[]) => {\n const cb = callbackRef.current;\n if (!cb) return;\n // ActionDispatcher 호환: { target: { value: files } } 형태로 전달\n const syntheticEvent = {\n target: { value: files, files },\n preventDefault: () => {},\n stopPropagation: () => {},\n };\n cb(syntheticEvent as any);\n },\n [] // ref 기반이므로 의존성 불필요 — 안정적인 단일 참조\n );\n\n // 핵심 로직 훅 사용\n const uploader = useFileUploader({\n attachmentableType,\n attachmentableId,\n collection,\n maxFiles,\n maxSize,\n maxConcurrentUploads,\n accept,\n imageCompression: compressionOptions,\n roleIds,\n autoUpload,\n initialFiles,\n endpoints,\n onFilesChange: wrappedOnFilesChange,\n onUploadComplete,\n onUploadError,\n onRemove,\n onReorder,\n uploadTriggerEvent,\n confirmBeforeRemove,\n uploadParams,\n });\n\n // 컴포넌트 외부에서 호출 가능한 메서드 노출\n useImperativeHandle(ref, () => ({\n uploadAll: uploader.handleUploadAll,\n clear: uploader.clear,\n getPendingFiles: uploader.getPendingFiles,\n }));\n\n // 갤러리용 이미지 목록 생성\n const galleryImages: GalleryImage[] = useMemo(() => {\n return uploader.imageFiles.map((item) => {\n const isPending = !('hash' in item);\n const pendingItem = item as PendingFile;\n const attachmentItem = item as Attachment;\n\n if (isPending) {\n // 대기 중인 파일은 로컬 미리보기 사용\n return {\n src: pendingItem.preview || '',\n filename: pendingItem.original_filename,\n title: pendingItem.original_filename,\n downloadRequiresAuth: false,\n };\n } else {\n // 기존 첨부파일은 인증된 URL 또는 다운로드 URL 사용\n const cachedUrl = uploader.authenticatedImageUrls.get(attachmentItem.id);\n return {\n src: cachedUrl || attachmentItem.download_url,\n downloadUrl: attachmentItem.download_url,\n filename: attachmentItem.original_filename,\n title: attachmentItem.original_filename,\n downloadRequiresAuth: true,\n };\n }\n });\n }, [uploader.imageFiles, uploader.authenticatedImageUrls]);\n\n // Context 값 생성\n const contextValue = useMemo(() => ({\n // 상태\n existingFiles: uploader.existingFiles,\n pendingFiles: uploader.pendingFiles,\n isDragOver: uploader.isDragOver,\n isDeleting: uploader.isDeleting,\n\n // 설정\n maxFiles,\n maxSize,\n accept,\n endpoints,\n confirmBeforeRemove,\n\n // 계산된 값\n totalCount: uploader.totalCount,\n hasFiles: uploader.hasFiles,\n canAddMore: uploader.canAddMore,\n allItems: uploader.allItems,\n imageFiles: uploader.imageFiles,\n\n // 액션\n handleFiles: uploader.handleFiles,\n handleRemove: uploader.handleRemove,\n handleRetry: uploader.handleRetry,\n handleUploadAll: uploader.handleUploadAll,\n handleOpenGallery: uploader.handleOpenGallery,\n handleDownload: uploader.handleDownload,\n handleDragEnd: uploader.handleDragEnd,\n\n // 드래그 상태 설정\n setIsDragOver: uploader.setIsDragOver,\n\n // Input ref\n inputRef: uploader.inputRef,\n\n // 갤러리 상태\n galleryOpen: uploader.galleryOpen,\n setGalleryOpen: uploader.setGalleryOpen,\n galleryStartIndex: uploader.galleryStartIndex,\n galleryKeyRef: uploader.galleryKeyRef,\n\n // 삭제 확인 모달 상태\n confirmDialogOpen: uploader.confirmDialogOpen,\n setConfirmDialogOpen: uploader.setConfirmDialogOpen,\n itemToDelete: uploader.itemToDelete,\n executeRemoveAttachment: uploader.executeRemoveAttachment,\n\n // 인증된 이미지 URL 캐시\n authenticatedImageUrls: uploader.authenticatedImageUrls,\n }), [uploader, maxFiles, maxSize, accept, endpoints, confirmBeforeRemove]);\n\n return (\n \n
\n {/* 드롭존 + 파일 목록 통합 영역 */}\n \n {/* 파일이 있을 때만 FileList 렌더링 */}\n {uploader.hasFiles && (\n uploader.inputRef.current?.click()}\n enablePrimarySelection={enablePrimarySelection}\n primaryFileId={primaryFileId}\n onPrimaryChange={onPrimaryChange}\n />\n )}\n \n\n {/* 삭제 확인 모달 */}\n {confirmBeforeRemove && (\n {\n if (!uploader.isDeleting) {\n uploader.setConfirmDialogOpen(false);\n }\n }}\n title={confirmRemoveTitle ?? t('attachment.delete_confirm_title')}\n message={confirmRemoveMessage ?? t('attachment.delete_confirm_message')}\n confirmText={t('common.delete')}\n confirmButtonVariant=\"danger\"\n onConfirm={() => {\n if (uploader.itemToDelete) {\n uploader.executeRemoveAttachment(uploader.itemToDelete);\n }\n }}\n isLoading={uploader.isDeleting}\n loadingText={t('attachment.deleting')}\n />\n )}\n\n {/* 이미지 갤러리 라이트박스 */}\n {galleryImages.length > 0 && uploader.galleryOpen && (\n uploader.setGalleryOpen(false)}\n startIndex={uploader.galleryStartIndex}\n showDownload={true}\n />\n )}\n
\n
\n );\n }\n);\n\nFileUploader.displayName = 'FileUploader';\n\nexport default FileUploader;","/**\n * SocialLoginButtons 컴포넌트\n *\n * 소셜 로그인(OAuth) 버튼 그룹입니다.\n * Google, Naver, Kakao 등의 소셜 로그인을 지원합니다.\n */\n\nimport React from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 소셜 로그인 아이콘 SVG 컴포넌트\n */\nconst SocialIcon: React.FC<{ provider: string; className?: string }> = ({ provider, className = 'w-5 h-5' }) => {\n switch (provider) {\n case 'google':\n return (\n \n \n \n \n \n \n );\n case 'naver':\n return (\n \n \n \n );\n case 'kakao':\n return (\n \n \n \n );\n case 'facebook':\n return (\n \n \n \n );\n case 'apple':\n return (\n \n \n \n );\n default:\n return null;\n }\n};\n\n/**\n * G7Core 번역 함수\n */\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\ntype SocialProvider = 'google' | 'naver' | 'kakao' | 'facebook' | 'apple';\n\ninterface SocialLoginButtonsProps {\n /** 표시할 소셜 로그인 제공자 목록 */\n providers?: SocialProvider[];\n /** 로그인/회원가입 모드 */\n mode?: 'login' | 'register';\n /** 버튼 스타일 */\n variant?: 'full' | 'icon';\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\ninterface ProviderConfig {\n id: SocialProvider;\n name: string;\n color: string;\n textColor: string;\n}\n\n/**\n * 소셜 로그인 제공자 설정\n */\nconst PROVIDER_CONFIGS: ProviderConfig[] = [\n {\n id: 'google',\n name: 'Google',\n color: 'bg-white dark:bg-gray-800',\n textColor: 'text-gray-700 dark:text-gray-300',\n },\n {\n id: 'naver',\n name: '네이버',\n color: 'bg-[#03C75A]',\n textColor: 'text-white',\n },\n {\n id: 'kakao',\n name: '카카오',\n color: 'bg-[#FEE500]',\n textColor: 'text-[#000000]/85',\n },\n {\n id: 'facebook',\n name: 'Facebook',\n color: 'bg-[#1877F2]',\n textColor: 'text-white',\n },\n {\n id: 'apple',\n name: 'Apple',\n color: 'bg-black dark:bg-white',\n textColor: 'text-white dark:text-black',\n },\n];\n\n/**\n * 소셜 로그인 버튼 그룹\n *\n * @example\n * ```tsx\n * \n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"SocialLoginButtons\",\n * \"props\": {\n * \"providers\": [\"google\", \"naver\", \"kakao\"],\n * \"mode\": \"register\"\n * }\n * }\n * ```\n */\nconst SocialLoginButtons: React.FC = ({\n providers = ['google', 'naver', 'kakao'],\n mode = 'login',\n variant = 'full',\n className = '',\n id,\n editorAttrs,\n}) => {\n const handleSocialLogin = (provider: SocialProvider) => {\n // OAuth 인증 URL로 리다이렉트\n const callbackUrl = encodeURIComponent(window.location.href);\n window.location.href = `/api/auth/${provider}?redirect=${callbackUrl}`;\n };\n\n const getButtonText = (providerName: string): string => {\n if (mode === 'register') {\n return t('auth.social.register_with', { provider: providerName });\n }\n return t('auth.social.login_with', { provider: providerName });\n };\n\n const filteredProviders = PROVIDER_CONFIGS.filter((config) =>\n providers.includes(config.id)\n );\n\n if (variant === 'icon') {\n return (\n
\n {filteredProviders.map((provider) => (\n handleSocialLogin(provider.id)}\n className={`w-12 h-12 flex items-center justify-center rounded-full ${provider.color} ${provider.textColor} border border-gray-200 dark:border-gray-700 hover:opacity-90 transition-opacity`}\n aria-label={getButtonText(provider.name)}\n >\n \n \n ))}\n
\n );\n }\n\n return (\n
\n {filteredProviders.map((provider) => (\n handleSocialLogin(provider.id)}\n className={`w-full flex items-center justify-center gap-3 px-4 py-3 rounded-lg font-medium border border-gray-200 dark:border-gray-700 ${provider.color} ${provider.textColor} hover:opacity-90 transition-opacity`}\n >\n \n {getButtonText(provider.name)}\n \n ))}\n
\n );\n};\n\nexport default SocialLoginButtons;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { Div } from '../basic/Div';\nimport { Span } from '../basic/Span';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\n\n/**\n * G7Core.t() 번역 함수 참조\n * 런타임에 G7Core.t를 접근하여 테스트 환경에서도 모킹이 적용되도록 함\n */\nconst getTranslation = (key: string, params?: Record) => {\n const G7Core = (window as any).G7Core;\n return G7Core?.t?.(key, params) ?? key;\n};\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\nexport interface ToastItem {\n id: string | number;\n type: ToastType;\n message: string;\n /** 커스텀 아이콘 이름 (지정하지 않으면 타입별 기본 아이콘 사용) */\n icon?: string;\n /** 개별 토스트 자동 닫힘 시간 (ms) */\n duration?: number;\n}\n\nexport interface ToastProps {\n /** 토스트 배열 (전역 상태 _global.toasts) */\n toasts?: ToastItem[] | null;\n /** 토스트 표시 위치 */\n position?: ToastPosition;\n /** 기본 자동 닫힘 시간 (ms, 기본 3000) */\n duration?: number;\n /** 토스트 제거 콜백 (전역 상태 업데이트용) */\n onRemove?: (id: string | number) => void;\n}\n\n// 타입별 기본 아이콘 매핑\nconst defaultIconMap: Record = {\n success: IconName.CheckCircle,\n error: IconName.XCircle,\n warning: IconName.ExclamationTriangle,\n info: IconName.InfoCircle,\n};\n\n// 타입별 스타일 매핑\nconst typeStyleMap: Record = {\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800',\n text: 'text-green-800 dark:text-green-300',\n },\n error: {\n bg: 'bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800',\n text: 'text-red-800 dark:text-red-300',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800',\n text: 'text-yellow-800 dark:text-yellow-300',\n },\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800',\n text: 'text-blue-800 dark:text-blue-300',\n },\n};\n\n// position별 스타일 매핑\nconst positionClassMap: Record = {\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'top-right': 'top-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n};\n\n/**\n * Toast 컴포넌트\n *\n * 전역 상태(_global.toasts)를 구독하여 토스트 알림을 스택으로 표시하는 컴포넌트.\n * ActionDispatcher의 toast 핸들러와 연동됩니다.\n *\n * 기능:\n * - 다중 토스트 스택 지원\n * - 타입별 스타일 (success, error, warning, info)\n * - 커스텀 아이콘 지정 가능\n * - 개별 토스트 자동 닫힘 시간 설정\n * - 수동 닫기 버튼\n *\n * @example\n * // 레이아웃 JSON 사용 예시 (_user_base.json)\n * {\n * \"id\": \"global_toast\",\n * \"type\": \"composite\",\n * \"name\": \"Toast\",\n * \"props\": {\n * \"toasts\": \"{{_global.toasts}}\",\n * \"position\": \"bottom-center\",\n * \"duration\": 3000\n * }\n * }\n *\n * @example\n * // toast 핸들러 호출 예시 (레이아웃 JSON)\n * {\n * \"handler\": \"toast\",\n * \"params\": {\n * \"type\": \"success\",\n * \"message\": \"$t:common.save_success\",\n * \"icon\": \"check\",\n * \"duration\": 5000\n * }\n * }\n */\nexport const Toast: React.FC = ({\n toasts,\n position = 'bottom-center',\n duration = 3000,\n onRemove,\n}) => {\n // 내부적으로 표시할 토스트 상태 관리 (애니메이션용)\n const [visibleToasts, setVisibleToasts] = useState>(new Map());\n\n // 토스트 제거 핸들러\n const handleRemove = useCallback((id: string | number) => {\n // 먼저 숨김 애니메이션 시작\n setVisibleToasts(prev => {\n const next = new Map(prev);\n next.set(id, false);\n return next;\n });\n\n // 애니메이션 후 실제 제거\n setTimeout(() => {\n if (onRemove) {\n onRemove(id);\n } else {\n // onRemove가 없으면 G7Core.state.update를 통해 전역 상태 업데이트\n const G7Core = (window as any).G7Core;\n if (G7Core?.state?.update) {\n G7Core.state.update((prevState: Record) => {\n const currentToasts = Array.isArray(prevState.toasts) ? prevState.toasts : [];\n return {\n toasts: currentToasts.filter((t: ToastItem) => t.id !== id),\n };\n });\n }\n }\n }, 300);\n }, [onRemove]);\n\n // 새 토스트가 추가되면 visible 상태 설정 및 자동 제거 타이머 설정\n useEffect(() => {\n if (!toasts || toasts.length === 0) return;\n\n toasts.forEach(toast => {\n // 이미 처리된 토스트는 건너뜀\n if (visibleToasts.has(toast.id)) return;\n\n // visible 상태 추가\n setVisibleToasts(prev => {\n const next = new Map(prev);\n next.set(toast.id, true);\n return next;\n });\n\n // 자동 제거 타이머 설정\n const effectiveDuration = toast.duration || duration;\n if (effectiveDuration > 0) {\n setTimeout(() => {\n handleRemove(toast.id);\n }, effectiveDuration);\n }\n });\n }, [toasts, duration, handleRemove, visibleToasts]);\n\n // 토스트가 없으면 렌더링하지 않음\n if (!toasts || toasts.length === 0) {\n return null;\n }\n\n return (\n \n {toasts.map((toast) => (\n handleRemove(toast.id)}\n />\n ))}\n \n );\n};\n\ninterface ToastItemComponentProps {\n toast: ToastItem;\n position: ToastPosition;\n isVisible: boolean;\n onClose: () => void;\n}\n\nconst ToastItemComponent: React.FC = ({ toast, position, isVisible, onClose }) => {\n const typeStyle = typeStyleMap[toast.type] || typeStyleMap.info;\n\n // 아이콘 결정: 커스텀 아이콘 > 타입별 기본 아이콘\n const iconName = toast.icon\n ? (toast.icon as IconName)\n : defaultIconMap[toast.type];\n\n // position에 따라 숨김 애니메이션 방향 결정 (top → 위로, bottom → 아래로)\n const hideTranslate = position.startsWith('bottom') ? 'translate-y-2' : '-translate-y-2';\n\n return (\n \n \n \n {toast.message}\n \n \n \n \n \n );\n};\n\nexport default Toast;\n","import React, { useState, useEffect } from 'react';\nimport { Div } from '../basic/Div';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:PageTransition')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:PageTransition]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:PageTransition]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:PageTransition]', ...args),\n};\n\nexport interface PageTransitionIndicatorProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * PageTransitionIndicator 컴포넌트\n *\n * TransitionManager의 isPending 상태를 구독하여 페이지 전환 시\n * 상단에 로딩 바를 표시합니다.\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"PageTransitionIndicator\"\n * }\n */\nexport const PageTransitionIndicator: React.FC = ({\n className = '',\n style,\n}) => {\n const [isPending, setIsPending] = useState(false);\n\n useEffect(() => {\n // G7Core.TransitionManager 접근\n const transitionManager = (window as any).G7Core?.TransitionManager;\n\n if (!transitionManager) {\n logger.warn('TransitionManager를 찾을 수 없습니다.');\n return;\n }\n\n // 구독 및 초기 상태 설정\n setIsPending(transitionManager.getIsPending());\n\n const unsubscribe = transitionManager.subscribe((newIsPending: boolean) => {\n setIsPending(newIsPending);\n });\n\n // 정리 함수\n return unsubscribe;\n }, []);\n\n if (!isPending) {\n return null;\n }\n\n return (\n \n
\n \n
\n\n \n \n );\n};\n\nexport default PageTransitionIndicator;\n","import React, { useState, useEffect } from 'react';\nimport { Div } from '../basic/Div';\n\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:PageTransitionBlur')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:PageTransitionBlur]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:PageTransitionBlur]', ...args),\n};\n\nexport interface PageTransitionBlurProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * PageTransitionBlur 컴포넌트\n *\n * TransitionManager의 isPending 상태를 구독하여 페이지 전환 시\n * 전체 콘텐츠에 블러 오버레이를 표시합니다.\n * PageTransitionIndicator(z-50)보다 아래 레이어(z-40)에 위치합니다.\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"PageTransitionBlur\"\n * }\n */\nexport const PageTransitionBlur: React.FC = ({\n className = '',\n style,\n}) => {\n const [isPending, setIsPending] = useState(false);\n\n useEffect(() => {\n const transitionManager = (window as any).G7Core?.TransitionManager;\n\n if (!transitionManager) {\n logger.warn('TransitionManager를 찾을 수 없습니다.');\n return;\n }\n\n setIsPending(transitionManager.getIsPending());\n\n const unsubscribe = transitionManager.subscribe((newIsPending: boolean) => {\n logger.log('isPending changed:', newIsPending);\n setIsPending(newIsPending);\n });\n\n return unsubscribe;\n }, []);\n\n if (!isPending) {\n return null;\n }\n\n return (\n \n );\n};\n\nexport default PageTransitionBlur;\n","import React from 'react';\n\n/**\n * 레이아웃 컴포넌트 정의 (엔진에서 전달하는 트리 구조)\n */\ninterface LayoutComponent {\n name?: string;\n type?: string;\n className?: string;\n props?: Record;\n children?: LayoutComponent[];\n iteration?: {\n source?: string;\n item_var?: string;\n index_var?: string;\n };\n if?: string;\n responsive?: {\n desktop?: { props?: Record };\n tablet?: { props?: Record };\n };\n}\n\n/**\n * 스켈레톤 컴포넌트 Props (엔진에서 전달)\n */\nexport interface PageSkeletonProps {\n /** 레이아웃 JSON의 components 배열 (전체 컴포넌트 트리) */\n components: LayoutComponent[];\n /** 스켈레톤 옵션 */\n options: {\n animation: 'pulse' | 'wave' | 'none';\n iteration_count: number;\n };\n}\n\n/** Tailwind 반응형 breakpoint (px) */\nconst TAILWIND_BREAKPOINTS: Record = {\n sm: 640, md: 768, lg: 1024, xl: 1280, '2xl': 1536,\n};\n\n/** CSS display 관련 클래스 (Tailwind) */\nconst DISPLAY_CLASSES = new Set([\n 'hidden', 'block', 'inline-block', 'inline', 'flex', 'inline-flex',\n 'grid', 'inline-grid', 'table', 'table-row', 'table-cell',\n 'contents', 'list-item', 'flow-root',\n]);\n\n/** 레이아웃 컨테이너 컴포넌트 이름 목록 (자식 순회) */\nconst LAYOUT_CONTAINERS = new Set([\n 'Div', 'Flex', 'Grid', 'Section', 'Article', 'Nav', 'Aside',\n 'Main', 'Header', 'Footer', 'Fragment', 'Form', 'Container',\n]);\n\n/** 텍스트 컴포넌트 → 스켈레톤 바로 치환 */\nconst TEXT_COMPONENTS = new Set([\n 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P', 'Span', 'Label', 'A',\n 'Strong', 'Em', 'Small', 'Badge',\n]);\n\n/** 인풋 컴포넌트 → 스켈레톤 사각형으로 치환 */\nconst INPUT_COMPONENTS = new Set([\n 'Input', 'Textarea', 'Select', 'Checkbox', 'Radio', 'Toggle',\n 'DatePicker', 'TagInput', 'SearchBar',\n]);\n\n/** 미디어 컴포넌트 → 큰 사각형 */\nconst MEDIA_COMPONENTS = new Set([\n 'Img', 'Image', 'Avatar', 'AvatarUploader', 'ImageGallery',\n 'ProductImageViewer', 'FileUploader',\n]);\n\n/** 복합 컴포넌트 → 특화된 스켈레톤 */\nconst COMPOSITE_SKELETONS: Record React.ReactElement> = {\n DataGrid: (animClass, iterCount) => (\n
\n\n {/* 파일 정보 */}\n {\n // 기존 첨부파일만 클릭 시 다운로드\n if (!isPending && onDownload) {\n onDownload();\n }\n }}\n >\n

\n {file.original_filename}\n

\n

\n {isPending ? (file as PendingFile).size_formatted : (file as Attachment).size_formatted}\n

\n \n \n );\n};\n\nexport default SortableThumbnailItem;","/**\n * FileList 컴포넌트\n *\n * 파일 목록을 정렬 가능한 그리드 형태로 표시합니다.\n *\n * @module composite/FileUploader/FileList\n */\n\nimport React from 'react';\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n sortableKeyboardCoordinates,\n rectSortingStrategy,\n} from '@dnd-kit/sortable';\n\nimport { Div } from '../../basic/Div';\nimport { Span } from '../../basic/Span';\nimport { I } from '../../basic/I';\n\nimport { SortableThumbnailItem } from './SortableThumbnailItem';\nimport type { Attachment, PendingFile } from './types';\nimport { t } from './utils';\n\nexport interface FileListProps {\n /** 모든 파일 목록 (기존 + 대기) */\n allItems: (Attachment | PendingFile)[];\n /** 더 추가 가능 여부 */\n canAddMore: boolean;\n /** 총 파일 수 */\n totalCount: number;\n /** 최대 파일 수 */\n maxFiles: number;\n /** 최대 파일 크기 (MB) */\n maxSize: number;\n /** 허용 확장자 */\n accept?: string;\n /** 파일 삭제 핸들러 */\n onRemove: (item: PendingFile | Attachment) => void;\n /** 재시도 핸들러 */\n onRetry: (pendingFile: PendingFile) => void;\n /** 이미지 클릭 핸들러 */\n onImageClick: (item: PendingFile | Attachment) => void;\n /** 다운로드 핸들러 */\n onDownload: (item: Attachment) => void;\n /** 드래그 종료 핸들러 */\n onDragEnd: (event: DragEndEvent) => void;\n /** 추가 버튼 클릭 핸들러 */\n onAddClick: () => void;\n /** 대표 이미지 선택 기능 활성화 */\n enablePrimarySelection?: boolean;\n /** 현재 대표 이미지 식별자 (ID 또는 hash) */\n primaryFileId?: number | string | null;\n /** 대표 이미지 변경 핸들러 */\n onPrimaryChange?: (id: number | string | null) => void;\n}\n\nexport const FileList: React.FC = ({\n allItems,\n canAddMore,\n totalCount,\n maxFiles,\n maxSize,\n accept,\n onRemove,\n onRetry,\n onImageClick,\n onDownload,\n onDragEnd,\n onAddClick,\n enablePrimarySelection,\n primaryFileId,\n onPrimaryChange,\n}) => {\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })\n );\n\n return (\n
\n \n ('hash' in item ? item.hash : item.id))}\n strategy={rectSortingStrategy}\n >\n
\n {/* 파일 썸네일들 */}\n {allItems.map((item) => {\n const isExisting = 'hash' in item;\n // 기존 첨부파일: is_image 필드 우선 사용, 대기 파일: mime_type 확인\n const isImage = isExisting\n ? (item as Attachment).is_image\n : (item.mime_type?.startsWith('image/') ?? false);\n\n return (\n onRemove(item)}\n onRetry={\n 'status' in item && item.status === 'error'\n ? () => onRetry(item as PendingFile)\n : undefined\n }\n onImageClick={\n isImage ? () => onImageClick(item) : undefined\n }\n onDownload={\n isExisting ? () => onDownload(item as Attachment) : undefined\n }\n isPrimary={enablePrimarySelection && isExisting && ((item as Attachment).hash || (item as Attachment).id) === primaryFileId}\n onPrimaryClick={\n enablePrimarySelection && isExisting\n ? () => onPrimaryChange?.((item as Attachment).hash || (item as Attachment).id)\n : undefined\n }\n />\n );\n })}\n\n {/* 추가 버튼 (더 추가할 수 있을 때만) */}\n {canAddMore && (\n \n \n {t('common.add')}\n
\n )}\n
\n \n \n\n {/* 하단 정보 */}\n
\n {t('attachment.attached_count', { count: totalCount, max: maxFiles })}\n {t('attachment.max_size', { size: maxSize })}{accept && ` (${accept})`}\n
\n \n );\n};\n\nexport default FileList;","/**\n * FileUploader 컴포넌트\n *\n * 파일 업로드를 위한 통합 컴포넌트입니다.\n * - 드래그 앤 드롭 지원\n * - 이미지 압축\n * - 병렬 업로드\n * - 순서 변경\n * - 이미지 갤러리\n *\n * @module composite/FileUploader\n */\n\nimport { forwardRef, useImperativeHandle, useMemo, useRef, useCallback } from 'react';\n\nimport { Div } from '../../basic/Div';\nimport { ConfirmDialog } from '../ConfirmDialog';\nimport { ImageGallery, GalleryImage } from '../ImageGallery';\n\nimport { FileUploaderProvider } from './FileUploaderContext';\nimport { useFileUploader } from './useFileUploader';\nimport { FileDropZone } from './FileDropZone';\nimport { FileList } from './FileList';\nimport type { FileUploaderProps, FileUploaderRef, Attachment, PendingFile } from './types';\nimport { t } from './utils';\n\n/** 안정적인 빈 배열 참조 — 매 렌더마다 새 [] 생성 방지 (useEffect 무한 루프 방지) */\nconst EMPTY_FILES: Attachment[] = [];\nconst EMPTY_ROLE_IDS: number[] = [];\n\n// ========== Main Component ==========\n\nexport const FileUploader = forwardRef(\n (\n {\n uploadTriggerEvent,\n attachmentableType,\n attachmentableId,\n collection = 'default',\n maxFiles = 10,\n maxSize = 10,\n maxConcurrentUploads = 3,\n accept,\n imageCompression: compressionOptions,\n roleIds = EMPTY_ROLE_IDS,\n autoUpload = true,\n onFilesChange,\n onChange,\n onUploadComplete,\n onUploadError,\n onRemove,\n onReorder,\n initialFiles = EMPTY_FILES,\n className = '',\n confirmBeforeRemove = false,\n confirmRemoveTitle,\n confirmRemoveMessage,\n apiEndpoints,\n uploadParams,\n enablePrimarySelection = false,\n primaryFileId,\n onPrimaryChange,\n id,\n editorAttrs,\n },\n ref\n ) => {\n // API 엔드포인트 기본값 설정 (User 템플릿용 기본 경로)\n const endpoints = {\n upload: apiEndpoints?.upload ?? '/api/attachments',\n delete: apiEndpoints?.delete ?? '/api/attachments/:id',\n reorder: apiEndpoints?.reorder ?? '/api/attachments/reorder',\n };\n\n // onFilesChange 래퍼: ActionDispatcher 호환 형태로 변환\n // ActionDispatcher는 type: \"change\" → onChange prop으로 매핑하므로,\n // onChange가 설정될 수 있음. onFilesChange는 직접 props 전달 시 사용.\n // ref로 안정화: ActionDispatcher가 매 렌더마다 새 함수를 바인딩하므로\n // 직접 의존하면 useMemo/useEffect 무한 루프 발생. ref로 최신 참조만 유지.\n const callbackRef = useRef(onChange ?? onFilesChange);\n callbackRef.current = onChange ?? onFilesChange;\n\n const wrappedOnFilesChange = useCallback(\n (files: import('./types').PendingFile[]) => {\n const cb = callbackRef.current;\n if (!cb) return;\n // ActionDispatcher 호환: { target: { value: files } } 형태로 전달\n const syntheticEvent = {\n target: { value: files, files },\n preventDefault: () => {},\n stopPropagation: () => {},\n };\n cb(syntheticEvent as any);\n },\n [] // ref 기반이므로 의존성 불필요 — 안정적인 단일 참조\n );\n\n // 핵심 로직 훅 사용\n const uploader = useFileUploader({\n attachmentableType,\n attachmentableId,\n collection,\n maxFiles,\n maxSize,\n maxConcurrentUploads,\n accept,\n imageCompression: compressionOptions,\n roleIds,\n autoUpload,\n initialFiles,\n endpoints,\n onFilesChange: wrappedOnFilesChange,\n onUploadComplete,\n onUploadError,\n onRemove,\n onReorder,\n uploadTriggerEvent,\n confirmBeforeRemove,\n uploadParams,\n });\n\n // 컴포넌트 외부에서 호출 가능한 메서드 노출\n useImperativeHandle(ref, () => ({\n uploadAll: uploader.handleUploadAll,\n clear: uploader.clear,\n getPendingFiles: uploader.getPendingFiles,\n }));\n\n // 갤러리용 이미지 목록 생성\n const galleryImages: GalleryImage[] = useMemo(() => {\n return uploader.imageFiles.map((item) => {\n const isPending = !('hash' in item);\n const pendingItem = item as PendingFile;\n const attachmentItem = item as Attachment;\n\n if (isPending) {\n // 대기 중인 파일은 로컬 미리보기 사용\n return {\n src: pendingItem.preview || '',\n filename: pendingItem.original_filename,\n title: pendingItem.original_filename,\n downloadRequiresAuth: false,\n };\n } else {\n // 기존 첨부파일은 인증된 URL 또는 다운로드 URL 사용\n const cachedUrl = uploader.authenticatedImageUrls.get(attachmentItem.id);\n return {\n src: cachedUrl || attachmentItem.download_url,\n downloadUrl: attachmentItem.download_url,\n filename: attachmentItem.original_filename,\n title: attachmentItem.original_filename,\n downloadRequiresAuth: true,\n };\n }\n });\n }, [uploader.imageFiles, uploader.authenticatedImageUrls]);\n\n // Context 값 생성\n const contextValue = useMemo(() => ({\n // 상태\n existingFiles: uploader.existingFiles,\n pendingFiles: uploader.pendingFiles,\n isDragOver: uploader.isDragOver,\n isDeleting: uploader.isDeleting,\n\n // 설정\n maxFiles,\n maxSize,\n accept,\n endpoints,\n confirmBeforeRemove,\n\n // 계산된 값\n totalCount: uploader.totalCount,\n hasFiles: uploader.hasFiles,\n canAddMore: uploader.canAddMore,\n allItems: uploader.allItems,\n imageFiles: uploader.imageFiles,\n\n // 액션\n handleFiles: uploader.handleFiles,\n handleRemove: uploader.handleRemove,\n handleRetry: uploader.handleRetry,\n handleUploadAll: uploader.handleUploadAll,\n handleOpenGallery: uploader.handleOpenGallery,\n handleDownload: uploader.handleDownload,\n handleDragEnd: uploader.handleDragEnd,\n\n // 드래그 상태 설정\n setIsDragOver: uploader.setIsDragOver,\n\n // Input ref\n inputRef: uploader.inputRef,\n\n // 갤러리 상태\n galleryOpen: uploader.galleryOpen,\n setGalleryOpen: uploader.setGalleryOpen,\n galleryStartIndex: uploader.galleryStartIndex,\n galleryKeyRef: uploader.galleryKeyRef,\n\n // 삭제 확인 모달 상태\n confirmDialogOpen: uploader.confirmDialogOpen,\n setConfirmDialogOpen: uploader.setConfirmDialogOpen,\n itemToDelete: uploader.itemToDelete,\n executeRemoveAttachment: uploader.executeRemoveAttachment,\n\n // 인증된 이미지 URL 캐시\n authenticatedImageUrls: uploader.authenticatedImageUrls,\n }), [uploader, maxFiles, maxSize, accept, endpoints, confirmBeforeRemove]);\n\n return (\n \n
\n {/* 드롭존 + 파일 목록 통합 영역 */}\n \n {/* 파일이 있을 때만 FileList 렌더링 */}\n {uploader.hasFiles && (\n uploader.inputRef.current?.click()}\n enablePrimarySelection={enablePrimarySelection}\n primaryFileId={primaryFileId}\n onPrimaryChange={onPrimaryChange}\n />\n )}\n \n\n {/* 삭제 확인 모달 */}\n {confirmBeforeRemove && (\n {\n if (!uploader.isDeleting) {\n uploader.setConfirmDialogOpen(false);\n }\n }}\n title={confirmRemoveTitle ?? t('attachment.delete_confirm_title')}\n message={confirmRemoveMessage ?? t('attachment.delete_confirm_message')}\n confirmText={t('common.delete')}\n confirmButtonVariant=\"danger\"\n onConfirm={() => {\n if (uploader.itemToDelete) {\n uploader.executeRemoveAttachment(uploader.itemToDelete);\n }\n }}\n isLoading={uploader.isDeleting}\n loadingText={t('attachment.deleting')}\n />\n )}\n\n {/* 이미지 갤러리 라이트박스 */}\n {galleryImages.length > 0 && uploader.galleryOpen && (\n uploader.setGalleryOpen(false)}\n startIndex={uploader.galleryStartIndex}\n showDownload={true}\n />\n )}\n
\n
\n );\n }\n);\n\nFileUploader.displayName = 'FileUploader';\n\nexport default FileUploader;","/**\n * SocialLoginButtons 컴포넌트\n *\n * 소셜 로그인(OAuth) 버튼 그룹입니다.\n * Google, Naver, Kakao 등의 소셜 로그인을 지원합니다.\n */\n\nimport React from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 소셜 로그인 아이콘 SVG 컴포넌트\n */\nconst SocialIcon: React.FC<{ provider: string; className?: string }> = ({ provider, className = 'w-5 h-5' }) => {\n switch (provider) {\n case 'google':\n return (\n \n \n \n \n \n \n );\n case 'naver':\n return (\n \n \n \n );\n case 'kakao':\n return (\n \n \n \n );\n case 'facebook':\n return (\n \n \n \n );\n case 'apple':\n return (\n \n \n \n );\n default:\n return null;\n }\n};\n\n/**\n * G7Core 번역 함수\n */\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\ntype SocialProvider = 'google' | 'naver' | 'kakao' | 'facebook' | 'apple';\n\ninterface SocialLoginButtonsProps {\n /** 표시할 소셜 로그인 제공자 목록 */\n providers?: SocialProvider[];\n /** 로그인/회원가입 모드 */\n mode?: 'login' | 'register';\n /** 버튼 스타일 */\n variant?: 'full' | 'icon';\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\ninterface ProviderConfig {\n id: SocialProvider;\n name: string;\n color: string;\n textColor: string;\n}\n\n/**\n * 소셜 로그인 제공자 설정\n */\nconst PROVIDER_CONFIGS: ProviderConfig[] = [\n {\n id: 'google',\n name: 'Google',\n color: 'bg-white dark:bg-gray-800',\n textColor: 'text-gray-700 dark:text-gray-300',\n },\n {\n id: 'naver',\n name: '네이버',\n color: 'bg-[#03C75A]',\n textColor: 'text-white',\n },\n {\n id: 'kakao',\n name: '카카오',\n color: 'bg-[#FEE500]',\n textColor: 'text-[#000000]/85',\n },\n {\n id: 'facebook',\n name: 'Facebook',\n color: 'bg-[#1877F2]',\n textColor: 'text-white',\n },\n {\n id: 'apple',\n name: 'Apple',\n color: 'bg-black dark:bg-white',\n textColor: 'text-white dark:text-black',\n },\n];\n\n/**\n * 소셜 로그인 버튼 그룹\n *\n * @example\n * ```tsx\n * \n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"SocialLoginButtons\",\n * \"props\": {\n * \"providers\": [\"google\", \"naver\", \"kakao\"],\n * \"mode\": \"register\"\n * }\n * }\n * ```\n */\nconst SocialLoginButtons: React.FC = ({\n providers = ['google', 'naver', 'kakao'],\n mode = 'login',\n variant = 'full',\n className = '',\n id,\n editorAttrs,\n}) => {\n const handleSocialLogin = (provider: SocialProvider) => {\n // OAuth 인증 URL로 리다이렉트\n const callbackUrl = encodeURIComponent(window.location.href);\n window.location.href = `/api/auth/${provider}?redirect=${callbackUrl}`;\n };\n\n const getButtonText = (providerName: string): string => {\n if (mode === 'register') {\n return t('auth.social.register_with', { provider: providerName });\n }\n return t('auth.social.login_with', { provider: providerName });\n };\n\n const filteredProviders = PROVIDER_CONFIGS.filter((config) =>\n providers.includes(config.id)\n );\n\n if (variant === 'icon') {\n return (\n
\n {filteredProviders.map((provider) => (\n handleSocialLogin(provider.id)}\n className={`w-12 h-12 flex items-center justify-center rounded-full ${provider.color} ${provider.textColor} border border-gray-200 dark:border-gray-700 hover:opacity-90 transition-opacity`}\n aria-label={getButtonText(provider.name)}\n >\n \n \n ))}\n
\n );\n }\n\n return (\n
\n {filteredProviders.map((provider) => (\n handleSocialLogin(provider.id)}\n className={`w-full flex items-center justify-center gap-3 px-4 py-3 rounded-lg font-medium border border-gray-200 dark:border-gray-700 ${provider.color} ${provider.textColor} hover:opacity-90 transition-opacity`}\n >\n \n {getButtonText(provider.name)}\n \n ))}\n
\n );\n};\n\nexport default SocialLoginButtons;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { Div } from '../basic/Div';\nimport { Span } from '../basic/Span';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\n\n/**\n * G7Core.t() 번역 함수 참조\n * 런타임에 G7Core.t를 접근하여 테스트 환경에서도 모킹이 적용되도록 함\n */\nconst getTranslation = (key: string, params?: Record) => {\n const G7Core = (window as any).G7Core;\n return G7Core?.t?.(key, params) ?? key;\n};\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\nexport interface ToastItem {\n id: string | number;\n type: ToastType;\n message: string;\n /** 커스텀 아이콘 이름 (지정하지 않으면 타입별 기본 아이콘 사용) */\n icon?: string;\n /** 개별 토스트 자동 닫힘 시간 (ms) */\n duration?: number;\n}\n\nexport interface ToastProps {\n /** 토스트 배열 (전역 상태 _global.toasts) */\n toasts?: ToastItem[] | null;\n /** 토스트 표시 위치 */\n position?: ToastPosition;\n /** 기본 자동 닫힘 시간 (ms, 기본 3000) */\n duration?: number;\n /** 토스트 제거 콜백 (전역 상태 업데이트용) */\n onRemove?: (id: string | number) => void;\n}\n\n// 타입별 기본 아이콘 매핑\nconst defaultIconMap: Record = {\n success: IconName.CheckCircle,\n error: IconName.XCircle,\n warning: IconName.ExclamationTriangle,\n info: IconName.InfoCircle,\n};\n\n// 타입별 스타일 매핑\nconst typeStyleMap: Record = {\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800',\n text: 'text-green-800 dark:text-green-300',\n },\n error: {\n bg: 'bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800',\n text: 'text-red-800 dark:text-red-300',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800',\n text: 'text-yellow-800 dark:text-yellow-300',\n },\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800',\n text: 'text-blue-800 dark:text-blue-300',\n },\n};\n\n// position별 스타일 매핑\nconst positionClassMap: Record = {\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'top-right': 'top-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n};\n\n/**\n * Toast 컴포넌트\n *\n * 전역 상태(_global.toasts)를 구독하여 토스트 알림을 스택으로 표시하는 컴포넌트.\n * ActionDispatcher의 toast 핸들러와 연동됩니다.\n *\n * 기능:\n * - 다중 토스트 스택 지원\n * - 타입별 스타일 (success, error, warning, info)\n * - 커스텀 아이콘 지정 가능\n * - 개별 토스트 자동 닫힘 시간 설정\n * - 수동 닫기 버튼\n *\n * @example\n * // 레이아웃 JSON 사용 예시 (_user_base.json)\n * {\n * \"id\": \"global_toast\",\n * \"type\": \"composite\",\n * \"name\": \"Toast\",\n * \"props\": {\n * \"toasts\": \"{{_global.toasts}}\",\n * \"position\": \"bottom-center\",\n * \"duration\": 3000\n * }\n * }\n *\n * @example\n * // toast 핸들러 호출 예시 (레이아웃 JSON)\n * {\n * \"handler\": \"toast\",\n * \"params\": {\n * \"type\": \"success\",\n * \"message\": \"$t:common.save_success\",\n * \"icon\": \"check\",\n * \"duration\": 5000\n * }\n * }\n */\nexport const Toast: React.FC = ({\n toasts,\n position = 'bottom-center',\n duration = 3000,\n onRemove,\n}) => {\n // 내부적으로 표시할 토스트 상태 관리 (애니메이션용)\n const [visibleToasts, setVisibleToasts] = useState>(new Map());\n\n // 토스트 제거 핸들러\n const handleRemove = useCallback((id: string | number) => {\n // 먼저 숨김 애니메이션 시작\n setVisibleToasts(prev => {\n const next = new Map(prev);\n next.set(id, false);\n return next;\n });\n\n // 애니메이션 후 실제 제거\n setTimeout(() => {\n if (onRemove) {\n onRemove(id);\n } else {\n // onRemove가 없으면 G7Core.state.update를 통해 전역 상태 업데이트\n const G7Core = (window as any).G7Core;\n if (G7Core?.state?.update) {\n G7Core.state.update((prevState: Record) => {\n const currentToasts = Array.isArray(prevState.toasts) ? prevState.toasts : [];\n return {\n toasts: currentToasts.filter((t: ToastItem) => t.id !== id),\n };\n });\n }\n }\n }, 300);\n }, [onRemove]);\n\n // 새 토스트가 추가되면 visible 상태 설정 및 자동 제거 타이머 설정\n useEffect(() => {\n if (!toasts || toasts.length === 0) return;\n\n toasts.forEach(toast => {\n // 이미 처리된 토스트는 건너뜀\n if (visibleToasts.has(toast.id)) return;\n\n // visible 상태 추가\n setVisibleToasts(prev => {\n const next = new Map(prev);\n next.set(toast.id, true);\n return next;\n });\n\n // 자동 제거 타이머 설정\n const effectiveDuration = toast.duration || duration;\n if (effectiveDuration > 0) {\n setTimeout(() => {\n handleRemove(toast.id);\n }, effectiveDuration);\n }\n });\n }, [toasts, duration, handleRemove, visibleToasts]);\n\n // 토스트가 없으면 렌더링하지 않음\n if (!toasts || toasts.length === 0) {\n return null;\n }\n\n return (\n \n {toasts.map((toast) => (\n handleRemove(toast.id)}\n />\n ))}\n \n );\n};\n\ninterface ToastItemComponentProps {\n toast: ToastItem;\n position: ToastPosition;\n isVisible: boolean;\n onClose: () => void;\n}\n\nconst ToastItemComponent: React.FC = ({ toast, position, isVisible, onClose }) => {\n const typeStyle = typeStyleMap[toast.type] || typeStyleMap.info;\n\n // 아이콘 결정: 커스텀 아이콘 > 타입별 기본 아이콘\n const iconName = toast.icon\n ? (toast.icon as IconName)\n : defaultIconMap[toast.type];\n\n // position에 따라 숨김 애니메이션 방향 결정 (top → 위로, bottom → 아래로)\n const hideTranslate = position.startsWith('bottom') ? 'translate-y-2' : '-translate-y-2';\n\n return (\n \n \n \n {toast.message}\n \n \n \n \n \n );\n};\n\nexport default Toast;\n","import React, { useState, useEffect } from 'react';\nimport { Div } from '../basic/Div';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:PageTransition')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:PageTransition]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:PageTransition]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:PageTransition]', ...args),\n};\n\nexport interface PageTransitionIndicatorProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * PageTransitionIndicator 컴포넌트\n *\n * TransitionManager의 isPending 상태를 구독하여 페이지 전환 시\n * 상단에 로딩 바를 표시합니다.\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"PageTransitionIndicator\"\n * }\n */\nexport const PageTransitionIndicator: React.FC = ({\n className = '',\n style,\n}) => {\n const [isPending, setIsPending] = useState(false);\n\n useEffect(() => {\n // G7Core.TransitionManager 접근\n const transitionManager = (window as any).G7Core?.TransitionManager;\n\n if (!transitionManager) {\n logger.warn('TransitionManager를 찾을 수 없습니다.');\n return;\n }\n\n // 구독 및 초기 상태 설정\n setIsPending(transitionManager.getIsPending());\n\n const unsubscribe = transitionManager.subscribe((newIsPending: boolean) => {\n setIsPending(newIsPending);\n });\n\n // 정리 함수\n return unsubscribe;\n }, []);\n\n if (!isPending) {\n return null;\n }\n\n return (\n \n
\n \n
\n\n \n \n );\n};\n\nexport default PageTransitionIndicator;\n","import React, { useState, useEffect } from 'react';\nimport { Div } from '../basic/Div';\n\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:PageTransitionBlur')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:PageTransitionBlur]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:PageTransitionBlur]', ...args),\n};\n\nexport interface PageTransitionBlurProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * PageTransitionBlur 컴포넌트\n *\n * TransitionManager의 isPending 상태를 구독하여 페이지 전환 시\n * 전체 콘텐츠에 블러 오버레이를 표시합니다.\n * PageTransitionIndicator(z-50)보다 아래 레이어(z-40)에 위치합니다.\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"PageTransitionBlur\"\n * }\n */\nexport const PageTransitionBlur: React.FC = ({\n className = '',\n style,\n}) => {\n const [isPending, setIsPending] = useState(false);\n\n useEffect(() => {\n const transitionManager = (window as any).G7Core?.TransitionManager;\n\n if (!transitionManager) {\n logger.warn('TransitionManager를 찾을 수 없습니다.');\n return;\n }\n\n setIsPending(transitionManager.getIsPending());\n\n const unsubscribe = transitionManager.subscribe((newIsPending: boolean) => {\n logger.log('isPending changed:', newIsPending);\n setIsPending(newIsPending);\n });\n\n return unsubscribe;\n }, []);\n\n if (!isPending) {\n return null;\n }\n\n return (\n \n );\n};\n\nexport default PageTransitionBlur;\n","import React from 'react';\n\n/**\n * 레이아웃 컴포넌트 정의 (엔진에서 전달하는 트리 구조)\n */\ninterface LayoutComponent {\n name?: string;\n type?: string;\n className?: string;\n props?: Record;\n children?: LayoutComponent[];\n iteration?: {\n source?: string;\n item_var?: string;\n index_var?: string;\n };\n if?: string;\n responsive?: {\n desktop?: { props?: Record };\n tablet?: { props?: Record };\n };\n}\n\n/**\n * 스켈레톤 컴포넌트 Props (엔진에서 전달)\n */\nexport interface PageSkeletonProps {\n /** 레이아웃 JSON의 components 배열 (전체 컴포넌트 트리) */\n components: LayoutComponent[];\n /** 스켈레톤 옵션 */\n options: {\n animation: 'pulse' | 'wave' | 'none';\n iteration_count: number;\n };\n}\n\n/** Tailwind 반응형 breakpoint (px) */\nconst TAILWIND_BREAKPOINTS: Record = {\n sm: 640, md: 768, lg: 1024, xl: 1280, '2xl': 1536,\n};\n\n/** CSS display 관련 클래스 (Tailwind) */\nconst DISPLAY_CLASSES = new Set([\n 'hidden', 'block', 'inline-block', 'inline', 'flex', 'inline-flex',\n 'grid', 'inline-grid', 'table', 'table-row', 'table-cell',\n 'contents', 'list-item', 'flow-root',\n]);\n\n/** 레이아웃 컨테이너 컴포넌트 이름 목록 (자식 순회) */\nconst LAYOUT_CONTAINERS = new Set([\n 'Div', 'Flex', 'Grid', 'Section', 'Article', 'Nav', 'Aside',\n 'Main', 'Header', 'Footer', 'Fragment', 'Form', 'Container',\n]);\n\n/** 텍스트 컴포넌트 → 스켈레톤 바로 치환 */\nconst TEXT_COMPONENTS = new Set([\n 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P', 'Span', 'Label', 'A',\n 'Strong', 'Em', 'Small', 'Badge',\n]);\n\n/** 인풋 컴포넌트 → 스켈레톤 사각형으로 치환 */\nconst INPUT_COMPONENTS = new Set([\n 'Input', 'Textarea', 'Select', 'Checkbox', 'Radio', 'Toggle',\n 'DatePicker', 'TagInput', 'SearchBar',\n]);\n\n/** 미디어 컴포넌트 → 큰 사각형 */\nconst MEDIA_COMPONENTS = new Set([\n 'Img', 'Image', 'Avatar', 'AvatarUploader', 'ImageGallery',\n 'ProductImageViewer', 'FileUploader',\n]);\n\n/** 복합 컴포넌트 → 특화된 스켈레톤 */\nconst COMPOSITE_SKELETONS: Record React.ReactElement> = {\n DataGrid: (animClass, iterCount) => (\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {Array.from({ length: iterCount }, (_, i) => (\n
\n
\n
\n
\n
\n
\n
\n
\n ))}\n
\n ),\n Pagination: (animClass) => (\n
\n {Array.from({ length: 5 }, (_, i) => (\n
\n ))}\n
\n ),\n Tabs: (animClass) => (\n
\n
\n {Array.from({ length: 3 }, (_, i) => (\n
\n ))}\n
\n
\n
\n ),\n TabNavigation: (animClass) => (\n
\n {Array.from({ length: 3 }, (_, i) => (\n
\n ))}\n
\n ),\n ProductCard: (animClass) => (\n
\n
\n
\n
\n
\n
\n
\n ),\n UserInfo: (animClass) => (\n
\n ),\n QuantitySelector: (animClass) => (\n
\n ),\n Header: (animClass) => (\n
\n
\n
\n
\n
\n
\n {Array.from({ length: 4 }, (_, i) => (\n
\n ))}\n
\n
\n
\n {Array.from({ length: 3 }, (_, i) => (\n
\n ))}\n
\n
\n
\n
\n ),\n Footer: (animClass) => (\n
\n
\n
\n
\n
\n
\n {Array.from({ length: 3 }, (_, i) => (\n
\n ))}\n
\n
\n
\n
\n
\n ),\n Modal: () => <>,\n Toast: () => <>,\n ConfirmDialog: () => <>,\n};\n\n/**\n * 조건부 분기 필터링 — 로딩/에러 상태 스킵, 콘텐츠 브랜치 선택\n *\n * 레이아웃 JSON에서 로딩/에러/콘텐츠 상태가 sibling으로 if 조건으로 분기되는 패턴이 일반적.\n * 스켈레톤은 \"데이터 로드 완료 후 실제 UI\" 형태를 보여줘야 하므로,\n * 로딩/에러 분기는 스킵하고 콘텐츠 분기(가장 풍부한 트리)만 렌더링.\n */\nfunction filterChildren(children: LayoutComponent[]): LayoutComponent[] {\n if (!children || children.length === 0) return [];\n\n const withIf = children.filter(c => c.if);\n const withoutIf = children.filter(c => !c.if);\n\n // if 조건 없는 컴포넌트가 있고, if 있는 것도 있는 경우\n // → if 없는 것은 항상 렌더, if 있는 것 중 부정 조건 스킵\n if (withoutIf.length > 0 && withIf.length > 0) {\n const positiveIf = withIf.filter(c => !isNegativeCondition(c.if!));\n // 긍정 조건 여러 개가 상호 배타적 값 분기(=== 'value')이면 richest만 선택\n // 예: type === 'basic', type === 'gallery', type === 'card'\n if (positiveIf.length > 1 && areMutuallyExclusiveBranches(positiveIf)) {\n return [...withoutIf, pickRichestBranch(positiveIf)];\n }\n return [...withoutIf, ...positiveIf];\n }\n\n // 모든 컴포넌트가 if 조건을 가진 경우 → 상호 배타적 분기\n // → 부정 조건 스킵 후, 나머지 중 가장 풍부한 브랜치 선택\n if (withIf.length > 1 && withoutIf.length === 0) {\n const positive = withIf.filter(c => !isNegativeCondition(c.if!));\n if (positive.length === 0) {\n // 모두 부정 조건 (로딩/에러 상태만) → 전체 스킵\n // 스켈레톤은 \"데이터 로드 완료 후 UI\"를 보여주므로 로딩/에러 분기 불필요\n return [];\n }\n if (positive.length === 1) return positive;\n // 긍정 조건 여러 개 → 가장 풍부한 것 선택\n return [pickRichestBranch(positive)];\n }\n\n return children;\n}\n\n/**\n * 부정 조건 판별 — 로딩/에러 상태를 나타내는 if 조건\n */\nfunction isNegativeCondition(ifExpr: string): boolean {\n const trimmed = ifExpr.replace(/^\\{\\{|\\}\\}$/g, '').trim();\n return trimmed.startsWith('!') ||\n /\\b(hasError|isError|isLoading|error|Error)\\b/.test(trimmed) ||\n // empty state 패턴: length === 0, total === 0, count === 0 등\n /===\\s*0\\s*(\\)|\\}|$)/.test(trimmed);\n}\n\n/**\n * 상호 배타적 값 분기 판별\n *\n * 여러 if 조건이 같은 변수에 대한 `=== 'value'` 패턴이면 상호 배타적.\n * 예: type === 'basic', type === 'gallery', type === 'card'\n * → 스켈레톤에서 하나만 선택해야 중복 렌더링 방지.\n */\nfunction areMutuallyExclusiveBranches(branches: LayoutComponent[]): boolean {\n if (branches.length < 2) return false;\n\n // 각 조건에서 \"expr === 'value'\" 패턴의 기본 표현식(expr) 추출\n const baseExpressions: string[] = [];\n for (const branch of branches) {\n const trimmed = (branch.if || '').replace(/^\\{\\{|\\}\\}$/g, '').trim();\n // === 'value' 또는 === \"value\" 패턴 찾기\n const match = trimmed.match(/^(.+?)\\s*===\\s*['\"]/);\n if (!match) {\n // || 로 연결된 복합 조건에서도 첫 번째 === 패턴 추출 (fallback 분기)\n const orMatch = trimmed.match(/(.+?)\\s*===\\s*['\"]/);\n if (!orMatch) return false;\n baseExpressions.push(orMatch[1].trim());\n } else {\n baseExpressions.push(match[1].trim());\n }\n }\n\n // 모든 분기가 같은 기본 표현식을 참조하면 상호 배타적\n const first = baseExpressions[0];\n return baseExpressions.every(expr => expr === first);\n}\n\n/**\n * 자손 수 기준 가장 풍부한 분기 선택\n */\nfunction pickRichestBranch(branches: LayoutComponent[]): LayoutComponent {\n return branches.reduce((best, curr) =>\n countDescendants(curr) > countDescendants(best) ? curr : best\n );\n}\n\n/**\n * 컴포넌트 트리의 총 자손 수 계산\n */\nfunction countDescendants(component: LayoutComponent): number {\n if (!component.children) return 0;\n return component.children.length +\n component.children.reduce((sum, child) => sum + countDescendants(child), 0);\n}\n\n/**\n * className 내 {{...}} 표현식 해석\n *\n * 레이아웃 JSON의 className에 {{expr ? 'classA' : 'classB'}} 같은 표현식이 포함될 수 있음.\n * 스켈레톤에서는 데이터가 없으므로 표현식을 평가할 수 없음.\n * → 삼항 연산자의 true 분기 값을 추출하여 적용 (기본값으로 사용).\n * → 단순 표현식(삼항 아닌 경우)은 제거.\n */\nfunction resolveExpressions(className: string): string {\n if (!className.includes('{{')) return className;\n\n return className.replace(/\\{\\{([^}]+)\\}\\}/g, (_, expr: string) => {\n // 삼항 연산자: condition ? 'value1' : 'value2' → value1 추출\n const ternaryMatch = expr.match(/\\?[\\s]*['\"]([^'\"]*)['\"]\\s*:\\s*['\"]/);\n if (ternaryMatch) {\n return ternaryMatch[1];\n }\n // 삼항 아닌 단순 표현식 → 제거\n return '';\n });\n}\n\n/**\n * 스켈레톤 렌더에 적합한 className 변환\n *\n * 1. {{...}} 표현식 해석 (삼항 → true 분기, 단순 표현식 → 제거)\n * 2. 레이아웃 구조 클래스(flex, grid, gap, padding, margin, max-width 등)는 원본 유지.\n * 3. 시각적 클래스(배경색, 텍스트색, 테두리, 그림자 등)는 제거.\n */\nfunction sanitizeClassName(className: string, name: string): string {\n if (!className) return '';\n\n // 시각적 클래스 제거 (표현식/반응형은 renderSkeletonNode에서 이미 해석됨)\n let sanitized = className;\n sanitized = sanitized\n .replace(/\\b(bg-\\S+|text-\\S+|border\\b|border-\\S+|shadow\\S*|ring-\\S+|outline-\\S+|divide-\\S+|opacity-\\S+|font-\\S+|tracking-\\S+|leading-\\S+|whitespace-\\S+|truncate|line-clamp-\\S+|underline|no-underline|decoration-\\S+|cursor-\\S+|hover:\\S+|focus:\\S+|active:\\S+|group-hover:\\S+|transition\\S*|duration-\\S+|ease-\\S+|animate-\\S+|dark:\\S+)\\b/g, '')\n .replace(/\\s{2,}/g, ' ')\n .trim();\n\n // Grid: 숫자 컬럼 수 유지 (arbitrary value [...]는 보존 — extractArbitraryGridCols에서 처리)\n if (name === 'Grid' || /\\bgrid-cols-\\d/.test(sanitized)) {\n sanitized = sanitized.replace(/\\bgrid-cols-(\\d+)/g, (_, val) => {\n const num = parseInt(val);\n return num > 4 ? `grid-cols-${Math.ceil(num / 2)}` : `grid-cols-${num}`;\n });\n }\n\n return sanitized;\n}\n\n/**\n * Flex/Grid 컴포넌트의 레이아웃 props를 Tailwind 클래스로 변환\n *\n * Flex, Grid 컴포넌트는 justify, align, gap 등을 별도 props로 받아\n * 실제 렌더 시 Tailwind 클래스로 변환한다.\n * 스켈레톤은 이 컴포넌트들을 plain
로 대체하므로,\n * props → Tailwind 변환을 여기서 수행하여 className에 병합해야 한다.\n *\n * @since engine-v1.17.0\n */\nfunction resolveLayoutProps(component: LayoutComponent): string {\n const { name, props } = component;\n if (!props || !name) return '';\n\n const classes: string[] = [];\n\n if (name === 'Flex') {\n classes.push('flex');\n\n const direction = props.direction || 'row';\n const directionMap: Record = {\n row: 'flex-row', 'row-reverse': 'flex-row-reverse',\n col: 'flex-col', 'col-reverse': 'flex-col-reverse',\n };\n if (directionMap[direction]) classes.push(directionMap[direction]);\n\n const justify = props.justify || 'start';\n const justifyMap: Record = {\n start: 'justify-start', end: 'justify-end', center: 'justify-center',\n between: 'justify-between', around: 'justify-around', evenly: 'justify-evenly',\n };\n if (justifyMap[justify]) classes.push(justifyMap[justify]);\n\n const align = props.align || 'stretch';\n const alignMap: Record = {\n start: 'items-start', end: 'items-end', center: 'items-center',\n baseline: 'items-baseline', stretch: 'items-stretch',\n };\n if (alignMap[align]) classes.push(alignMap[align]);\n\n const wrap = props.wrap || 'nowrap';\n const wrapMap: Record = {\n wrap: 'flex-wrap', nowrap: 'flex-nowrap', 'wrap-reverse': 'flex-wrap-reverse',\n };\n if (wrapMap[wrap]) classes.push(wrapMap[wrap]);\n\n if (props.gap && props.gap > 0) classes.push(`gap-${props.gap}`);\n }\n\n if (name === 'Grid') {\n classes.push('grid');\n\n const cols = props.cols || 1;\n classes.push(`grid-cols-${cols}`);\n\n if (props.responsive) {\n const r = props.responsive;\n if (r.sm) classes.push(`sm:grid-cols-${r.sm}`);\n if (r.md) classes.push(`md:grid-cols-${r.md}`);\n if (r.lg) classes.push(`lg:grid-cols-${r.lg}`);\n if (r.xl) classes.push(`xl:grid-cols-${r.xl}`);\n if (r['2xl']) classes.push(`2xl:grid-cols-${r['2xl']}`);\n }\n\n if (props.gap !== undefined && props.gap > 0) classes.push(`gap-${props.gap}`);\n if (props.rowGap !== undefined && props.rowGap > 0) classes.push(`gap-y-${props.rowGap}`);\n if (props.colGap !== undefined && props.colGap > 0) classes.push(`gap-x-${props.colGap}`);\n }\n\n return classes.join(' ');\n}\n\n/**\n * 애니메이션 클래스 결정\n */\nfunction getAnimationClass(animation: string): string {\n switch (animation) {\n case 'pulse':\n return 'animate-pulse';\n case 'wave':\n return 'animate-pulse'; // wave는 별도 CSS 필요, pulse로 폴백\n case 'none':\n return '';\n default:\n return 'animate-pulse';\n }\n}\n\n/**\n * 자식 컴포넌트 렌더링 (조건부 분기 필터링 적용)\n */\nfunction renderChildren(\n children: LayoutComponent[] | undefined,\n animClass: string,\n iterCount: number,\n width: number,\n): (React.ReactElement | null)[] {\n if (!children || children.length === 0) return [];\n const filtered = filterChildren(children);\n return filtered.map((child, i) =>\n renderSkeletonNode(child, animClass, iterCount, i, width)\n );\n}\n\n/**\n * 현재 뷰포트에 맞는 className 결정\n *\n * responsive 속성이 있으면 호출자가 전달한 viewport width 기준으로 적절한 className 선택.\n * - desktop (lg, 1024px+): responsive.desktop.props.className\n * - tablet (md, 768px+): responsive.tablet.props.className\n * - 기본: props.className\n *\n * @param width G7Core.useResponsive()로 구독한 viewport width (overrideWidth 반영)\n */\nfunction resolveClassName(component: LayoutComponent, width: number): string {\n const baseClassName = component.props?.className || component.className || '';\n\n if (!component.responsive) return baseClassName;\n\n if (width >= 1024 && component.responsive.desktop?.props?.className) {\n return component.responsive.desktop.props.className;\n }\n if (width >= 768 && component.responsive.tablet?.props?.className) {\n return component.responsive.tablet.props.className;\n }\n\n return baseClassName;\n}\n\n/**\n * Tailwind 반응형 display 클래스를 viewport 기준으로 해석\n *\n * 레이아웃 JSON의 className에 `hidden lg:grid`, `lg:hidden` 같은 Tailwind 반응형 패턴이 포함됨.\n * Tailwind은 빌드 시 CSS로 처리하지만, 스켈레톤은 런타임에서 JS로 해석해야 함.\n *\n * 동작:\n * 1. className에서 display 관련 클래스(hidden, flex, grid 등) + 반응형 접두사(lg:grid 등) 추출\n * 2. Tailwind cascade 규칙 적용: base → sm → md → lg → xl → 2xl 순서로 width에 맞는 display 결정\n * 3. hidden이면 컴포넌트 숨김, 아니면 해석된 display 클래스 + 나머지 클래스 반환\n *\n * @param width G7Core.useResponsive()로 구독한 viewport width (overrideWidth 반영)\n */\nfunction resolveResponsiveDisplay(className: string, width: number): { visible: boolean; className: string } {\n const tokens = className.split(/\\s+/).filter(Boolean);\n\n const displayEntries: Array<{ breakpoint: number; display: string }> = [];\n const otherClasses: string[] = [];\n\n for (const token of tokens) {\n // 반응형 접두사 + display 클래스: \"lg:grid\", \"sm:flex\", \"md:hidden\"\n const responsiveMatch = token.match(/^(sm|md|lg|xl|2xl):(.+)$/);\n if (responsiveMatch) {\n const [, prefix, cls] = responsiveMatch;\n if (DISPLAY_CLASSES.has(cls)) {\n displayEntries.push({\n breakpoint: TAILWIND_BREAKPOINTS[prefix] || 0,\n display: cls,\n });\n continue;\n }\n // 반응형 접두사지만 display가 아닌 클래스 (lg:gap-4 등) → 뷰포트 체크 후 포함\n if ((TAILWIND_BREAKPOINTS[prefix] || 0) <= width) {\n otherClasses.push(cls); // 접두사 제거하고 포함\n }\n continue;\n }\n\n // 기본(접두사 없는) display 클래스: \"hidden\", \"flex\", \"grid\"\n if (DISPLAY_CLASSES.has(token)) {\n displayEntries.push({ breakpoint: 0, display: token });\n continue;\n }\n\n otherClasses.push(token);\n }\n\n // display 클래스가 없으면 그대로 반환\n if (displayEntries.length === 0) {\n return { visible: true, className };\n }\n\n // breakpoint 오름차순 정렬 후 cascade 적용\n displayEntries.sort((a, b) => a.breakpoint - b.breakpoint);\n\n let effectiveDisplay = '';\n for (const entry of displayEntries) {\n if (entry.breakpoint <= width) {\n effectiveDisplay = entry.display;\n }\n }\n\n // 해당 뷰포트에 적용되는 display가 없으면 첫 번째(base) 사용\n if (!effectiveDisplay) {\n effectiveDisplay = displayEntries[0].display;\n }\n\n const visible = effectiveDisplay !== 'hidden';\n const resolvedClassName = visible\n ? [effectiveDisplay, ...otherClasses].join(' ')\n : '';\n\n return { visible, className: resolvedClassName };\n}\n\n/**\n * className에서 arbitrary grid-cols-[...] 값을 추출하여 inline style로 변환\n *\n * Tailwind의 arbitrary value `grid-cols-[60px_minmax(300px,1fr)_160px]`는\n * 빌드 시 동적 표현식({{...}}) 안에 있으면 purge되어 CSS에 포함되지 않음.\n * → inline style `gridTemplateColumns`로 변환하여 런타임에서 직접 적용.\n */\nfunction extractArbitraryGridCols(className: string): { className: string; style?: React.CSSProperties } {\n const match = className.match(/\\bgrid-cols-\\[([^\\]]+)\\]/);\n if (!match) return { className };\n\n const value = match[1].replace(/_/g, ' ');\n const cleanedClassName = className\n .replace(/\\bgrid-cols-\\[([^\\]]+)\\]/, '')\n .replace(/\\s{2,}/g, ' ')\n .trim();\n\n return {\n className: cleanedClassName,\n style: { gridTemplateColumns: value },\n };\n}\n\n/**\n * 단일 컴포넌트를 스켈레톤으로 변환\n */\nfunction renderSkeletonNode(\n component: LayoutComponent,\n animClass: string,\n iterCount: number,\n index: number,\n width: number,\n): React.ReactElement | null {\n const { name, children, iteration } = component;\n // 1. responsive 속성에서 뷰포트에 맞는 className 선택\n const rawClassName = resolveClassName(component, width);\n // 1.5. Flex/Grid 레이아웃 props → Tailwind 클래스 병합\n const layoutClasses = resolveLayoutProps(component);\n const mergedClassName = layoutClasses\n ? `${layoutClasses} ${rawClassName}`.trim()\n : rawClassName;\n // 2. {{...}} 표현식 해석 (삼항 → true 분기)\n const exprResolved = resolveExpressions(mergedClassName);\n // 3. Tailwind 반응형 display 클래스 해석 (hidden lg:grid → grid at desktop)\n const responsive = resolveResponsiveDisplay(exprResolved, width);\n\n if (!name) return null;\n\n // 현재 뷰포트에서 숨겨진 컴포넌트 → 스킵\n if (!responsive.visible) return null;\n\n const className = responsive.className;\n\n // iteration 블록: 기본 반복 횟수만큼 반복 생성\n if (iteration) {\n return (\n \n {Array.from({ length: iterCount }, (_, i) => (\n renderSkeletonNode(\n { ...component, iteration: undefined },\n animClass,\n iterCount,\n i,\n width,\n )\n ))}\n \n );\n }\n\n // 복합 컴포넌트 특화 스켈레톤\n if (COMPOSITE_SKELETONS[name]) {\n return (\n
\n {COMPOSITE_SKELETONS[name](animClass, iterCount)}\n
\n );\n }\n\n // 레이아웃 컨테이너: className 유지, 자식 재귀 순회\n if (LAYOUT_CONTAINERS.has(name)) {\n const sanitized = sanitizeClassName(className, name);\n\n // 자식 없는 leaf 컨테이너 → 스켈레톤 바로 표시\n if (!children || children.length === 0) {\n const hasDimension = /\\b(h-\\S|w-\\S)/.test(sanitized);\n const barClass = hasDimension\n ? `${sanitized} bg-gray-200 dark:bg-gray-700 rounded ${animClass}`\n : `${sanitized} h-3.5 w-full bg-gray-200 dark:bg-gray-700 rounded ${animClass}`.trim();\n return
;\n }\n\n // 자식 렌더링 (조건부 분기 필터링 적용)\n const renderedChildren = renderChildren(children, animClass, iterCount, width);\n const hasContent = renderedChildren.length > 0 && renderedChildren.some(c => c !== null);\n\n // 모든 자식이 필터링됨 (로딩/에러 wrapper 등) → 컨테이너 자체 스킵\n if (!hasContent) return null;\n\n // arbitrary grid-cols-[...] → inline style로 변환\n const gridResult = extractArbitraryGridCols(sanitized);\n\n return (\n
\n {renderedChildren}\n
\n );\n }\n\n // 비-컨테이너 컴포넌트: 원본 className에서 시각적 클래스(색상 등)를 제거\n // 스켈레톤 바의 색상은 고정(gray-200)이므로 원본 bg-red-500 등이 누출되면 안 됨\n const sanitizedLeafClass = sanitizeClassName(className, name);\n\n // 텍스트 컴포넌트: 회색 바\n if (TEXT_COMPONENTS.has(name)) {\n const heightMap: Record = {\n H1: 'h-7', H2: 'h-6', H3: 'h-5', H4: 'h-5', H5: 'h-4', H6: 'h-4',\n P: 'h-3.5', Span: 'h-3', Label: 'h-3', A: 'h-3.5',\n Badge: 'h-5 w-16',\n };\n const widthMap: Record = {\n H1: 'w-3/5', H2: 'w-2/5', H3: 'w-1/3', H4: 'w-1/3', H5: 'w-1/4', H6: 'w-1/4',\n P: 'w-full', Span: 'w-1/4', Label: 'w-1/4', A: 'w-1/3',\n Strong: 'w-1/5', Em: 'w-1/4', Small: 'w-1/5', Badge: 'w-16',\n };\n const height = heightMap[name] || 'h-3.5';\n const width = widthMap[name] || 'w-full';\n const spacing = name.startsWith('H') ? 'mb-2 mt-1' : 'mb-1.5';\n return (\n
\n );\n }\n\n // 인풋 컴포넌트: 사각형\n if (INPUT_COMPONENTS.has(name)) {\n if (name === 'Textarea') {\n return
;\n }\n if (name === 'Checkbox' || name === 'Radio' || name === 'Toggle') {\n return
;\n }\n return
;\n }\n\n // 미디어 컴포넌트: 큰 사각형\n if (MEDIA_COMPONENTS.has(name)) {\n if (name === 'Avatar' || name === 'AvatarUploader') {\n return
;\n }\n if (name === 'ProductImageViewer') {\n return
;\n }\n return
;\n }\n\n // Button: children이 있으면 래퍼(컨테이너)로 처리, 없으면 바\n if (name === 'Button') {\n if (children && children.length > 0) {\n const sanitized = sanitizeClassName(className, name);\n const renderedChildren = renderChildren(children, animClass, iterCount, width);\n const hasContent = renderedChildren.length > 0 && renderedChildren.some(c => c !== null);\n if (!hasContent) return null;\n // 원본 className에 border/rounded가 있으면 실제 버튼 형태 → 스켈레톤 경계 추가\n const hasBorderStyle = /\\b(border|rounded|px-\\d|py-\\d)/.test(rawClassName);\n const borderClass = hasBorderStyle\n ? 'border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 rounded-lg'\n : '';\n return (\n
\n {renderedChildren}\n
\n );\n }\n return
;\n }\n\n // Icon\n if (name === 'Icon') {\n return
;\n }\n\n // 기타: children이 있으면 컨테이너로, 없으면 범용 바\n if (children && children.length > 0) {\n return (\n
\n {renderChildren(children, animClass, iterCount, width)}\n
\n );\n }\n\n // 기본 폴백: 범용 스켈레톤 바\n return
;\n}\n\n/**\n * PageSkeleton — 단일 스켈레톤 렌더러 컴포넌트\n *\n * 엔진이 레이아웃 JSON의 컴포넌트 트리를 props로 전달하면,\n * 재귀적으로 순회하며 각 컴포넌트의 스켈레톤 플레이스홀더를 생성합니다.\n *\n * - 레이아웃 컨테이너(Div, Flex, Grid 등): className 유지, 자식 순회\n * - 텍스트 컴포넌트(H1~H6, P 등): 회색 바\n * - 인풋 컴포넌트(Input, Select 등): 사각형\n * - 미디어 컴포넌트(Img, Avatar 등): 큰 사각형\n * - 복합 컴포넌트(DataGrid, Tabs 등): 특화 스켈레톤\n * - iteration 블록: iteration_count 횟수만큼 반복\n * - 조건부 분기: 로딩/에러 상태 스킵, 콘텐츠 브랜치만 렌더\n *\n * @since engine-v1.24.0\n */\nexport const PageSkeleton: React.FC = ({ components, options }) => {\n const animClass = getAnimationClass(options.animation);\n\n // G7Core.useResponsive를 통해 viewport width 구독 (G7 표준 — 위지윅 overrideWidth 호환)\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive;\n const responsiveValue = useResponsive?.();\n const width = responsiveValue\n ? responsiveValue.width\n : (typeof window !== 'undefined' ? window.innerWidth : 1024);\n\n return (\n \n {renderChildren(components, animClass, options.iteration_count, width)}\n
\n );\n};\n\nexport default PageSkeleton;\n","import React from 'react';\n\n/**\n * 페이지 로딩 컴포넌트 Props (엔진에서 전달)\n *\n * @since engine-v1.29.0\n */\nexport interface PageLoadingProps {\n options?: {\n text?: string;\n };\n}\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n/**\n * 페이지 로딩 인디케이터 컴포넌트\n *\n * transition_overlay의 spinner 스타일에서 사용됩니다.\n * 엔진은 타겟 요소 내부에 빈 컨테이너만 삽입하며,\n * 포지셔닝/배경/z-index/다크모드 등 모든 비주얼 스타일은\n * 이 컴포넌트가 전적으로 결정합니다.\n *\n * React 트리 외부에 렌더링되므로 인라인 스타일 사용.\n *\n * @since engine-v1.29.0\n */\nconst PageLoading: React.FC = ({ options }) => {\n const isDark = document.documentElement.classList.contains('dark');\n\n const bgColor = isDark ? 'rgb(17,24,39)' : 'rgb(249,250,251)';\n const spinnerColor = isDark ? '#6b7280' : '#9ca3af';\n const textColor = isDark ? '#9ca3af' : '#6b7280';\n\n return (\n \n \n \n {options?.text || t('nav.loading')}\n \n
\n );\n};\n\nexport default PageLoading;\n","import React, { useMemo } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\nexport interface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n maxVisiblePages?: number;\n showFirstLast?: boolean;\n className?: string;\n style?: React.CSSProperties;\n prevText?: string;\n nextText?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Pagination 집합 컴포넌트\n *\n * Button + Span 기본 컴포넌트를 조합하여 페이지네이션 UI를 구성합니다.\n * 페이지 번호 생성 알고리즘을 포함하며, 많은 페이지 수에 대해 효율적으로 렌더링합니다.\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"Pagination\",\n * \"props\": {\n * \"currentPage\": \"{{pagination.current}}\",\n * \"totalPages\": \"{{pagination.total}}\",\n * \"maxVisiblePages\": 5,\n * \"showFirstLast\": true\n * }\n * }\n */\nexport const Pagination: React.FC = ({\n currentPage,\n totalPages,\n onPageChange,\n maxVisiblePages = 5,\n showFirstLast = true,\n className = '',\n style,\n prevText,\n nextText,\n id,\n editorAttrs,\n}) => {\n\n // 페이지 번호 생성 알고리즘\n const pageNumbers = useMemo(() => {\n const pages: (number | string)[] = [];\n\n if (totalPages <= maxVisiblePages + 2) {\n // 페이지가 적으면 모두 표시\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n // 페이지가 많으면 축약 표시\n const halfVisible = Math.floor(maxVisiblePages / 2);\n\n let startPage = Math.max(2, currentPage - halfVisible);\n let endPage = Math.min(totalPages - 1, currentPage + halfVisible);\n\n // 시작 또는 끝 근처일 때 조정\n if (currentPage <= halfVisible + 1) {\n endPage = maxVisiblePages;\n } else if (currentPage >= totalPages - halfVisible) {\n startPage = totalPages - maxVisiblePages + 1;\n }\n\n // 첫 페이지\n pages.push(1);\n\n // 시작 생략 부호\n if (startPage > 2) {\n pages.push('...');\n }\n\n // 중간 페이지들\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n\n // 끝 생략 부호\n if (endPage < totalPages - 1) {\n pages.push('...');\n }\n\n // 마지막 페이지\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n }\n\n return pages;\n }, [currentPage, totalPages, maxVisiblePages]);\n\n const handlePageClick = (page: number) => {\n if (page < 1 || page > totalPages || page === currentPage) return;\n onPageChange(page);\n };\n\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n return (\n \n {/* First Button */}\n {showFirstLast && (\n handlePageClick(1)}\n disabled={currentPage === 1}\n className=\"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800\"\n aria-label={t('common.first_page')}\n >\n «\n \n )}\n\n {/* Previous Button */}\n \n {prevText || <>‹}\n \n\n {/* Page Numbers */}\n
\n {pageNumbers.map((page, index) => {\n if (page === '...') {\n return (\n \n ...\n \n );\n }\n\n const pageNum = page as number;\n const isActive = pageNum === currentPage;\n\n return (\n handlePageClick(pageNum)}\n className={`px-3 py-1 text-sm border rounded ${\n isActive\n ? 'bg-blue-500 dark:bg-blue-600 text-white border-blue-500 dark:border-blue-600'\n : 'border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800'\n }`}\n aria-label={t('common.page_n', { n: pageNum })}\n aria-current={isActive ? 'page' : undefined}\n >\n {pageNum}\n \n );\n })}\n
\n\n {/* Next Button */}\n \n {nextText || <>›}\n \n\n {/* Last Button */}\n {showFirstLast && (\n handlePageClick(totalPages)}\n disabled={currentPage === totalPages}\n className=\"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800\"\n aria-label={t('common.last_page')}\n >\n »\n \n )}\n
\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Form } from '../basic/Form';\nimport { Input } from '../basic/Input';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\nimport { Div } from '../basic/Div';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\nexport interface SearchSuggestion {\n id: string | number;\n text: string;\n}\n\nexport interface SearchBarProps {\n name?: string;\n placeholder?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent) => void;\n onSubmit?: (e: React.FormEvent) => void;\n showButton?: boolean; // true: 검색 버튼 표시, false: 버튼 숨김 (기본값: false)\n suggestions?: SearchSuggestion[];\n onSuggestionClick?: (suggestion: SearchSuggestion) => void;\n showSuggestions?: boolean;\n className?: string;\n style?: React.CSSProperties;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * SearchBar 집합 컴포넌트\n *\n * 검색 입력 필드와 선택적 버튼을 제공하는 검색 바 컴포넌트입니다.\n * Enter 키를 누르면 항상 검색이 실행됩니다.\n *\n * 기본 컴포넌트 조합: Form + Input + Button + Icon + Div + Span\n *\n * @example\n * // 레이아웃 JSON 사용 예시 (버튼 없음)\n * {\n * \"name\": \"SearchBar\",\n * \"props\": {\n * \"placeholder\": \"검색어를 입력하세요\",\n * \"value\": \"{{query.search}}\",\n * \"showButton\": false\n * }\n * }\n *\n * @example\n * // 레이아웃 JSON 사용 예시 (버튼 있음)\n * {\n * \"name\": \"SearchBar\",\n * \"props\": {\n * \"placeholder\": \"검색어를 입력하세요\",\n * \"value\": \"{{query.search}}\",\n * \"showButton\": true\n * }\n * }\n */\nexport const SearchBar: React.FC = ({\n name = 'search',\n placeholder,\n value: controlledValue,\n onChange,\n onSubmit,\n showButton = false,\n suggestions = [],\n onSuggestionClick,\n showSuggestions = false,\n className = '',\n style,\n id,\n editorAttrs,\n}) => {\n // props로 전달된 값이 없으면 다국어 키 사용\n const resolvedPlaceholder = placeholder ?? t('common.search_placeholder');\n\n const [internalValue, setInternalValue] = useState('');\n const [isFocused, setIsFocused] = useState(false);\n const containerRef = React.useRef(null);\n const previousValueRef = React.useRef('');\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n const shouldShowSuggestions = showSuggestions && isFocused && suggestions.length > 0 && value.length > 0;\n\n // controlledValue가 변경될 때 previousValueRef 동기화\n useEffect(() => {\n if (controlledValue !== undefined) {\n previousValueRef.current = controlledValue;\n }\n }, [controlledValue]);\n\n const handleChange = (e: React.ChangeEvent) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n onChange?.(e);\n\n // X 버튼으로 검색어를 지운 경우 감지\n // 이전 값이 있었는데 새 값이 빈 문자열이고, nativeEvent가 없는 경우 = X 버튼 클릭\n if (previousValueRef.current !== '' && newValue === '' && !(e.nativeEvent as any).inputType) {\n // X 버튼 클릭: 자동으로 검색 초기화\n setTimeout(() => {\n const formElement = containerRef.current?.querySelector('form');\n if (formElement) {\n formElement.requestSubmit();\n }\n }, 0);\n }\n\n previousValueRef.current = newValue;\n };\n\n const handleSuggestionClick = (suggestion: SearchSuggestion) => {\n setInternalValue(suggestion.text);\n const syntheticEvent = {\n target: { value: suggestion.text, name },\n } as React.ChangeEvent;\n onChange?.(syntheticEvent);\n onSuggestionClick?.(suggestion);\n setIsFocused(false);\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit?.(e);\n };\n\n return (\n
\n
\n
\n {/* Input wrapper */}\n
\n {/* 검색 아이콘 */}\n
\n \n
\n\n {/* 검색 입력 */}\n setIsFocused(true)}\n onBlur={() => setTimeout(() => setIsFocused(false), 200)}\n placeholder={resolvedPlaceholder}\n className=\"w-full pl-10 pr-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white text-sm\"\n />\n
\n\n {/* 검색 버튼 (showButton=true일 때만 표시) */}\n {showButton && (\n \n {t('common.search')}\n \n )}\n
\n
\n\n {/* 자동완성 제안 목록 */}\n {shouldShowSuggestions && (\n
\n {suggestions.map((suggestion) => (\n handleSuggestionClick(suggestion)}\n >\n
\n \n {suggestion.text}\n
\n
\n ))}\n
\n )}\n
\n );\n};\n","/**\n * AvatarUploader 컴포넌트\n *\n * 프로필 아바타 이미지 업로드를 위한 컴포넌트입니다.\n * - 원형 아바타 UI\n * - 파일 선택 시 즉시 업로드\n * - 업로드/삭제 API 지원\n * - 업로드 오류 표시\n * - 삭제 확인 다이얼로그\n *\n * @module composite/AvatarUploader\n */\n\nimport { useRef, useState, useCallback, useEffect } from 'react';\n\nimport { Div } from '../basic/Div';\nimport { Span } from '../basic/Span';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { Label } from '../basic/Label';\nimport { Input } from '../basic/Input';\nimport { Img } from '../basic/Img';\nimport { Avatar } from './Avatar';\nimport type { EditorAttrs } from '../../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\nexport interface AvatarUploaderProps {\n /** 현재 아바타 URL */\n src?: string;\n /** 이미지 없을 때 표시할 텍스트 (이니셜) */\n fallbackText?: string;\n /** 아바타 크기 */\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** 업로드 API 엔드포인트 (기본: /api/me/avatar) */\n uploadEndpoint?: string;\n /** 삭제 API 엔드포인트 (기본: /api/me/avatar) */\n deleteEndpoint?: string;\n /** 업로드 성공 콜백 */\n onUploadSuccess?: (data: { avatar: string; attachment_id: number }) => void;\n /** 업로드 에러 콜백 */\n onUploadError?: (error: Error) => void;\n /** 삭제 성공 콜백 */\n onDeleteSuccess?: () => void;\n /** 삭제 에러 콜백 */\n onDeleteError?: (error: Error) => void;\n /** 삭제 버튼 표시 여부 */\n showDeleteButton?: boolean;\n /** 허용 파일 타입 (기본: image/*) */\n accept?: string;\n /** 최대 파일 크기 (MB, 기본: 5) */\n maxSize?: number;\n /** 추가 CSS 클래스 */\n className?: string;\n /** 업로드 버튼 텍스트 */\n uploadButtonText?: string;\n /** 삭제 버튼 텍스트 */\n deleteButtonText?: string;\n /** 읽기 전용 모드 */\n readOnly?: boolean;\n /** 삭제 확인 다이얼로그 표시 여부 (기본: true) */\n confirmDelete?: boolean;\n /** 삭제 확인 메시지 */\n deleteConfirmMessage?: string;\n /** 업로드 확인 다이얼로그 표시 여부 (기본: true) */\n confirmUpload?: boolean;\n /** 업로드 확인 메시지 */\n uploadConfirmMessage?: string;\n /** 업로드 성공 시 실행할 액션 배열 (G7Core.dispatch) */\n uploadSuccessActions?: Array>;\n /** 업로드 실패 시 실행할 액션 배열 */\n uploadErrorActions?: Array>;\n /** 삭제 성공 시 실행할 액션 배열 */\n deleteSuccessActions?: Array>;\n /** 삭제 실패 시 실행할 액션 배열 */\n deleteErrorActions?: Array>;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\n// AvatarUploader size를 Avatar size로 매핑\n// AvatarUploader는 프로필 편집용으로 더 큰 사이즈 사용\nconst avatarSizeMap: Record = {\n sm: 'md', // AvatarUploader sm → Avatar md (w-10, 40px)\n md: 'lg', // AvatarUploader md → Avatar lg (w-12, 48px)\n lg: 'xl', // AvatarUploader lg → Avatar xl (w-16, 64px)\n xl: '2xl', // AvatarUploader xl → Avatar 2xl (w-24, 96px)\n '2xl': '3xl', // AvatarUploader 2xl → Avatar 3xl (w-32, 128px)\n};\n\nexport function AvatarUploader({\n src,\n fallbackText = 'U',\n size = 'lg',\n uploadEndpoint = '/api/me/avatar',\n deleteEndpoint = '/api/me/avatar',\n onUploadSuccess,\n onUploadError,\n onDeleteSuccess,\n onDeleteError,\n showDeleteButton = true,\n accept = 'image/*',\n maxSize = 5,\n className = '',\n uploadButtonText,\n deleteButtonText,\n readOnly = false,\n confirmDelete = true,\n deleteConfirmMessage,\n confirmUpload = true,\n uploadConfirmMessage,\n uploadSuccessActions,\n uploadErrorActions,\n deleteSuccessActions,\n deleteErrorActions,\n id,\n editorAttrs,\n}: AvatarUploaderProps) {\n const inputRef = useRef(null);\n const [isUploading, setIsUploading] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n // undefined: 초기 상태(props 사용), null: 삭제됨, string: 새 이미지 URL\n const [localAvatarUrl, setLocalAvatarUrl] = useState(undefined);\n const [errorMessage, setErrorMessage] = useState(null);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [showUploadConfirm, setShowUploadConfirm] = useState(false);\n const [pendingFile, setPendingFile] = useState(null);\n const [previewUrl, setPreviewUrl] = useState(null);\n const inputId = useRef(`avatar-upload-${Math.random().toString(36).slice(2, 11)}`).current;\n\n // 파일 선택 시 미리보기 URL 생성\n useEffect(() => {\n if (pendingFile) {\n const url = URL.createObjectURL(pendingFile);\n setPreviewUrl(url);\n return () => URL.revokeObjectURL(url);\n } else {\n setPreviewUrl(null);\n }\n }, [pendingFile]);\n\n // 다국어 텍스트 가져오기\n const t = useCallback((key: string): string => {\n return G7Core?.t?.(key) ?? key;\n }, []);\n\n // CSRF 토큰 가져오기\n const getCsrfToken = useCallback((): string | null => {\n const match = document.cookie.match(/XSRF-TOKEN=([^;]+)/);\n if (match) {\n return decodeURIComponent(match[1]);\n }\n return null;\n }, []);\n\n // 인증 토큰 가져오기 (ApiClient에서 토큰 조회)\n const getAuthToken = useCallback((): string | null => {\n return G7Core?.api?.getToken?.() ?? null;\n }, []);\n\n // 실제 업로드 실행 함수\n const executeUpload = useCallback(async (file: File) => {\n setShowUploadConfirm(false);\n setPendingFile(null);\n setIsUploading(true);\n setErrorMessage(null);\n\n try {\n // FormData 생성\n const formData = new FormData();\n formData.append('avatar', file);\n\n // API 호출\n const csrfToken = getCsrfToken();\n const authToken = getAuthToken();\n const response = await fetch(uploadEndpoint, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n ...(csrfToken && { 'X-XSRF-TOKEN': csrfToken }),\n ...(authToken && { Authorization: `Bearer ${authToken}` }),\n },\n credentials: 'include',\n body: formData,\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.message || t('attachment.upload_failed'));\n }\n\n const data = await response.json();\n const result = data.data || data;\n\n // 로컬 상태 즉시 업데이트 (빠른 피드백)\n if (result.avatar) {\n setLocalAvatarUrl(result.avatar);\n }\n\n onUploadSuccess?.(result);\n G7Core?.toast?.success?.(t('mypage.profile.avatar_uploaded'));\n\n // 액션 props가 있으면 dispatch, 없으면 기본 동작(user 리패치)\n if (uploadSuccessActions?.length) {\n uploadSuccessActions.forEach(action => G7Core?.dispatch?.(action));\n } else {\n G7Core?.refetchDataSource?.('user');\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setErrorMessage(err.message);\n onUploadError?.(err);\n G7Core?.toast?.error?.(err.message);\n\n if (uploadErrorActions?.length) {\n uploadErrorActions.forEach(action => G7Core?.dispatch?.(action));\n }\n } finally {\n setIsUploading(false);\n // 입력 초기화 (같은 파일 재선택 가능)\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n }\n }, [uploadEndpoint, onUploadSuccess, onUploadError, getCsrfToken, getAuthToken, t]);\n\n // 파일 선택 핸들러\n const handleFileChange = useCallback(\n async (event: React.ChangeEvent) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n // 오류 상태 초기화\n setErrorMessage(null);\n\n // 파일 크기 검증\n const maxBytes = maxSize * 1024 * 1024;\n if (file.size > maxBytes) {\n const error = new Error(t('attachment.file_too_large').replace(':max', `${maxSize}MB`));\n setErrorMessage(error.message);\n onUploadError?.(error);\n G7Core?.toast?.error?.(error.message);\n return;\n }\n\n // 파일 타입 검증\n if (accept && !file.type.match(accept.replace('*', '.*'))) {\n const error = new Error(t('attachment.invalid_file_type'));\n setErrorMessage(error.message);\n onUploadError?.(error);\n G7Core?.toast?.error?.(error.message);\n return;\n }\n\n // 확인 다이얼로그 표시 또는 즉시 업로드\n if (confirmUpload) {\n setPendingFile(file);\n setShowUploadConfirm(true);\n } else {\n executeUpload(file);\n }\n },\n [maxSize, accept, onUploadError, confirmUpload, executeUpload, t]\n );\n\n // 삭제 실행 함수\n const executeDelete = useCallback(async () => {\n setShowDeleteConfirm(false);\n setIsDeleting(true);\n setErrorMessage(null);\n\n try {\n const csrfToken = getCsrfToken();\n const authToken = getAuthToken();\n const response = await fetch(deleteEndpoint, {\n method: 'DELETE',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'X-XSRF-TOKEN': csrfToken }),\n ...(authToken && { Authorization: `Bearer ${authToken}` }),\n },\n credentials: 'include',\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.message || t('attachment.delete_failed'));\n }\n\n // 로컬 상태 즉시 업데이트 (빠른 피드백)\n setLocalAvatarUrl(null);\n\n onDeleteSuccess?.();\n G7Core?.toast?.success?.(t('mypage.profile.avatar_deleted'));\n\n // 액션 props가 있으면 dispatch, 없으면 기본 동작(user 리패치)\n if (deleteSuccessActions?.length) {\n deleteSuccessActions.forEach(action => G7Core?.dispatch?.(action));\n } else {\n G7Core?.refetchDataSource?.('user');\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setErrorMessage(err.message);\n onDeleteError?.(err);\n G7Core?.toast?.error?.(err.message);\n\n if (deleteErrorActions?.length) {\n deleteErrorActions.forEach(action => G7Core?.dispatch?.(action));\n }\n } finally {\n setIsDeleting(false);\n }\n }, [deleteEndpoint, onDeleteSuccess, onDeleteError, getCsrfToken, getAuthToken, t]);\n\n // 삭제 버튼 클릭 핸들러 (확인 다이얼로그 표시 또는 즉시 삭제)\n const handleDeleteClick = useCallback(() => {\n if (confirmDelete) {\n setShowDeleteConfirm(true);\n } else {\n executeDelete();\n }\n }, [confirmDelete, executeDelete]);\n\n // 삭제 취소\n const handleDeleteCancel = useCallback(() => {\n setShowDeleteConfirm(false);\n }, []);\n\n // 업로드 취소\n const handleUploadCancel = useCallback(() => {\n setShowUploadConfirm(false);\n setPendingFile(null);\n // 입력 초기화 (같은 파일 재선택 가능)\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n }, []);\n\n // 업로드 확인\n const handleUploadConfirm = useCallback(() => {\n if (pendingFile) {\n executeUpload(pendingFile);\n }\n }, [pendingFile, executeUpload]);\n\n // 로컬 상태 우선 사용: undefined면 props 사용, null이면 삭제됨, string이면 새 이미지\n const currentAvatarUrl = localAvatarUrl === undefined ? src : localAvatarUrl;\n const hasAvatar = !!currentAvatarUrl;\n\n // Avatar 컴포넌트에 전달할 사이즈\n const avatarSize = avatarSizeMap[size] || 'lg';\n\n // 현재 표시 모드 결정\n const isConfirmMode = showDeleteConfirm || showUploadConfirm;\n\n // 버튼 영역 렌더링\n const renderButtons = () => (\n
\n {/* 숨겨진 파일 입력 */}\n \n\n {/* 이미지 없을 때: 이미지 등록 버튼 */}\n {!hasAvatar && (\n \n {isUploading ? (\n \n ) : (\n \n )}\n {uploadButtonText || t('mypage.profile.register_avatar')}\n \n )}\n\n {/* 이미지 있을 때: 변경 + 삭제 버튼 */}\n {hasAvatar && (\n <>\n \n {isUploading ? (\n \n ) : (\n \n )}\n {uploadButtonText || t('common.change')}\n \n\n {showDeleteButton && (\n \n {isDeleting ? (\n \n ) : (\n \n )}\n {deleteButtonText || t('common.delete')}\n \n )}\n \n )}\n
\n );\n\n return (\n
\n {/* 아바타 이미지 - 업로드 확인 시 미리보기 표시 */}\n {showUploadConfirm && previewUrl ? (\n
\n \n
\n
\n ) : (\n \n )}\n\n {/* 버튼/확인 영역 */}\n {!readOnly && (\n
\n {/* 업로드 확인 박스 */}\n {showUploadConfirm && pendingFile && (\n
\n
\n \n \n {uploadConfirmMessage || t('mypage.profile.upload_avatar_confirm')}\n \n
\n
\n {pendingFile.name} ({(pendingFile.size / 1024 / 1024).toFixed(2)}MB)\n
\n
\n \n {isUploading ? (\n \n ) : (\n \n )}\n {t('common.confirm')}\n \n \n {t('common.cancel')}\n \n
\n
\n )}\n\n {/* 삭제 확인 박스 */}\n {showDeleteConfirm && (\n
\n
\n \n \n {deleteConfirmMessage || t('mypage.profile.delete_avatar_confirm')}\n \n
\n
\n \n {isDeleting ? (\n \n ) : (\n \n )}\n {t('common.delete')}\n \n \n {t('common.cancel')}\n \n
\n
\n )}\n\n {/* 기본 모드 - 버튼들 */}\n {!isConfirmMode && renderButtons()}\n
\n )}\n\n {/* 오류 메시지 표시 */}\n {errorMessage && !isConfirmMode && (\n
\n \n {errorMessage}\n
\n )}\n
\n );\n}\n\nexport default AvatarUploader;\n","/**\n * UserInfo 컴포넌트\n *\n * 게시글 작성자 정보를 표시하고 드롭다운 메뉴를 제공하는 통합 컴포넌트입니다.\n * - 작성자 이름, 서브텍스트 표시\n * - 클릭 시 드롭다운 메뉴 (회원인 경우)\n * - 비회원인 경우 배지 표시\n * - 탈퇴한 사용자인 경우 \"탈퇴한 사용자\" 텍스트 표시\n *\n * ## Props 우선순위\n * 명시적으로 전달한 props가 author에서 추출한 값보다 우선합니다.\n * - 이름: text > name > author.name\n * - 사용자 ID: userId > author.id\n * - 비회원 여부: isGuest > author.is_guest\n * - 탈퇴 여부: isWithdrawn || author.status === 'withdrawn'\n *\n * @example\n * // 레이아웃 JSON에서 사용 (author 객체 전달 - 권장)\n * {\n * \"type\": \"composite\",\n * \"name\": \"UserInfo\",\n * \"props\": {\n * \"author\": \"{{post.author}}\",\n * \"subText\": \"{{post.created_at | datetime}}\"\n * }\n * }\n *\n * @example\n * // author와 개별 props 혼합 사용 (개별 props가 우선)\n * {\n * \"type\": \"composite\",\n * \"name\": \"UserInfo\",\n * \"props\": {\n * \"author\": \"{{post.author}}\",\n * \"name\": \"관리자\",\n * \"subText\": \"{{post.created_at | datetime}}\"\n * }\n * }\n * // author.name이 \"홍길동\"이어도 \"관리자\"가 표시됨\n */\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { Icon } from '../basic/Icon';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core 참조\nconst getG7Core = () => (window as any).G7Core;\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n/**\n * 메뉴 항목 설정 인터페이스\n */\nexport interface MenuItemConfig {\n /** 메뉴 항목 식별자 */\n key: string;\n /** 표시 텍스트 */\n label: string;\n /** 아이콘 이름 (선택) */\n icon?: string;\n /** 이동 경로 ({{userId}} 치환 지원) */\n path?: string;\n /** 커스텀 클릭 핸들러 (선택) */\n onClick?: () => void;\n /** 표시 여부 (기본: true) */\n show?: boolean;\n}\n\n/**\n * Author 객체 인터페이스\n */\nexport interface AuthorInfo {\n /** 사용자 ID */\n id?: string | number;\n /** 사용자 UUID */\n uuid?: string;\n /** 사용자 이름 */\n name?: string;\n /** 아바타 URL */\n avatar?: string;\n /** 사용자 상태 */\n status?: 'active' | 'inactive' | 'blocked' | 'withdrawn';\n /** 비회원 여부 */\n is_guest?: boolean;\n}\n\nexport interface UserInfoProps {\n /**\n * 작성자 객체 (권장)\n * API 응답의 author 객체를 그대로 전달하면 됩니다.\n * 개별 props(name, userId 등)가 함께 전달되면 개별 props가 우선합니다.\n */\n author?: AuthorInfo;\n\n /**\n * 사용자 이름 (author.name보다 우선)\n */\n name?: string;\n\n /**\n * 사용자 ID (author.id보다 우선)\n */\n userId?: string | number;\n\n /**\n * 표시할 서브 텍스트 (날짜, 시간 등)\n */\n subText?: string;\n\n /**\n * 서브 텍스트의 title 속성 (tooltip용 원본 datetime)\n */\n subTextTitle?: string;\n\n /**\n * 비회원 여부 (author.is_guest보다 우선)\n * @default false\n */\n isGuest?: boolean;\n\n /**\n * 탈퇴한 사용자 여부 (author.status === 'withdrawn'과 OR 조건)\n * @default false\n */\n isWithdrawn?: boolean;\n\n /**\n * 드롭다운 표시 여부\n * @default true\n */\n showDropdown?: boolean;\n\n /**\n * 프로필 클릭 가능 여부 (드롭다운이 없을 때)\n * @default true\n */\n clickable?: boolean;\n\n /**\n * 사용자 프로필 경로 패턴\n * @default '/users/{userId}'\n */\n profilePath?: string;\n\n /**\n * 추가 className\n */\n className?: string;\n\n /**\n * 레이아웃 방향\n * @default 'vertical'\n */\n layout?: 'vertical' | 'horizontal';\n\n /**\n * 레이아웃 JSON에서 text 속성으로 전달되는 이름\n * name보다 우선순위가 높음\n */\n text?: string;\n\n /**\n * 이벤트 버블링 방지 여부\n * @default false\n */\n stopPropagation?: boolean;\n\n // 메뉴 커스터마이징\n /** 커스텀 메뉴 항목 (지정 시 기본 메뉴 대체) */\n menuItems?: MenuItemConfig[];\n /** 숨길 기본 메뉴 항목 키 배열 */\n hideMenuItems?: string[];\n /** 기본 메뉴에 추가할 항목 */\n appendMenuItems?: MenuItemConfig[];\n\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n// 레이아웃별 컨테이너 클래스\nconst LAYOUT_CLASSES = {\n horizontal: 'flex items-center gap-1.5',\n vertical: 'flex flex-col items-start',\n} as const;\n\n// 기본 메뉴 항목 생성\nconst createDefaultMenuItems = (): MenuItemConfig[] => [\n {\n key: 'view_profile',\n label: t('userinfo.view_profile'),\n icon: 'user',\n path: '/users/{{userId}}',\n },\n {\n key: 'view_posts',\n label: t('userinfo.view_posts'),\n icon: 'file-lines',\n path: '/users/{{userId}}/posts',\n },\n];\n\n/**\n * 서브텍스트 렌더링 컴포넌트\n */\nconst SubText: React.FC<{ text?: string; title?: string }> = ({ text, title }) => {\n if (!text) return null;\n return (\n \n {text}\n \n );\n};\n\n/**\n * UserInfo 컴포넌트\n */\nexport const UserInfo: React.FC = ({\n author,\n name,\n userId,\n subText,\n subTextTitle,\n isGuest = false,\n isWithdrawn = false,\n showDropdown = true,\n clickable = true,\n profilePath = '/users/{userId}',\n className = '',\n layout = 'vertical',\n text,\n stopPropagation = false,\n menuItems,\n hideMenuItems = [],\n appendMenuItems = [],\n id,\n editorAttrs,\n}) => {\n // 명시적 props > author 추출값 순서로 결정\n const actualUserId = userId ?? author?.uuid;\n const actualIsGuest = isGuest || author?.is_guest || false;\n const actualIsWithdrawn = isWithdrawn || author?.status === 'withdrawn';\n\n // 이름 우선순위: text > name > author.name\n // 탈퇴한 사용자는 \"탈퇴한 사용자\" 텍스트 표시\n const actualName = actualIsWithdrawn\n ? t('userinfo.withdrawn_user')\n : (text ?? name ?? author?.name ?? '');\n\n // 드롭다운 상태\n const [showMenu, setShowMenu] = useState(false);\n const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 });\n const containerRef = useRef(null);\n const dropdownRef = useRef(null);\n const buttonRef = useRef(null);\n\n // 프로필 경로 생성\n const actualProfilePath = profilePath.replace('{userId}', String(actualUserId ?? ''));\n\n // 컨테이너 클래스\n const containerClass = `${LAYOUT_CLASSES[layout]} ${className}`;\n\n // 메뉴 외부 클릭 시 닫기 + 스크롤/리사이즈 시 닫기\n useEffect(() => {\n if (!showMenu) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n const isInsideContainer = containerRef.current?.contains(target);\n const isInsideDropdown = dropdownRef.current?.contains(target);\n\n if (!isInsideContainer && !isInsideDropdown) {\n setShowMenu(false);\n }\n };\n\n const handleScrollOrResize = () => setShowMenu(false);\n\n document.addEventListener('mousedown', handleClickOutside);\n window.addEventListener('scroll', handleScrollOrResize, true);\n window.addEventListener('resize', handleScrollOrResize);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n window.removeEventListener('scroll', handleScrollOrResize, true);\n window.removeEventListener('resize', handleScrollOrResize);\n };\n }, [showMenu]);\n\n // 최종 메뉴 항목 계산\n const getMenuItems = useCallback((): MenuItemConfig[] => {\n // 커스텀 메뉴가 지정된 경우 그대로 사용\n if (menuItems && menuItems.length > 0) {\n return menuItems.filter((item) => item.show !== false);\n }\n\n // 기본 메뉴에서 숨길 항목 제거\n const defaultItems = createDefaultMenuItems();\n let items = defaultItems.filter(\n (item) => !hideMenuItems.includes(item.key) && item.show !== false\n );\n\n // 추가 항목 병합\n if (appendMenuItems && appendMenuItems.length > 0) {\n items = [...items, ...appendMenuItems.filter((item) => item.show !== false)];\n }\n\n return items;\n }, [menuItems, hideMenuItems, appendMenuItems]);\n\n // 드롭다운 위치 계산 (뷰포트 기준 fixed 위치 — Portal 사용)\n const updateMenuPosition = useCallback(() => {\n if (buttonRef.current) {\n const buttonRect = buttonRef.current.getBoundingClientRect();\n setMenuPosition({\n top: buttonRect.bottom + 4,\n left: buttonRect.left,\n });\n }\n }, []);\n\n // 메뉴 항목 클릭 핸들러\n const handleMenuItemClick = useCallback((item: MenuItemConfig, e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n setShowMenu(false);\n\n if (item.onClick) {\n item.onClick();\n } else if (item.path) {\n const path = item.path.replace(/\\{\\{userId\\}\\}/g, String(actualUserId ?? ''));\n const g7Core = getG7Core();\n if (g7Core?.navigate) {\n g7Core.navigate(path);\n } else {\n window.location.href = path;\n }\n }\n }, [actualUserId]);\n\n // 클릭 핸들러 (드롭다운 또는 프로필 이동)\n const handleClick = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n\n if (stopPropagation) {\n e.stopPropagation();\n }\n\n // 비회원이거나 userId가 없으면 아무 동작 안 함\n if (actualIsGuest || !actualUserId) {\n return;\n }\n\n // 드롭다운이 활성화된 경우\n if (showDropdown) {\n if (!showMenu) {\n updateMenuPosition();\n }\n setShowMenu((prev) => !prev);\n }\n // 드롭다운이 비활성화되고 클릭 가능한 경우\n else if (clickable) {\n getG7Core()?.navigate?.(actualProfilePath);\n }\n }, [stopPropagation, actualIsGuest, actualUserId, showDropdown, showMenu, updateMenuPosition, clickable, actualProfilePath]);\n\n // 비회원인 경우\n if (actualIsGuest || !actualUserId) {\n return (\n
\n
\n {actualName}\n \n {t('userinfo.guest_badge')}\n \n
\n \n
\n );\n }\n\n // 탈퇴한 사용자인 경우\n if (actualIsWithdrawn) {\n return (\n
\n \n {actualName}\n \n \n
\n );\n }\n\n // 회원인 경우\n const finalMenuItems = getMenuItems();\n // className에 text- 색상 클래스가 있으면 nameButtonClass의 기본 색상을 대체\n const hasCustomColor = /\\btext-\\S+/.test(className);\n const defaultColorClass = hasCustomColor ? '' : 'text-gray-900 dark:text-white';\n const nameButtonClass = (showDropdown || clickable)\n ? `${defaultColorClass} hover:text-blue-600 dark:hover:text-blue-400 cursor-pointer font-medium`.trim()\n : `${defaultColorClass} font-medium`.trim();\n\n return (\n
\n
\n \n {actualName}\n \n \n
\n\n {/* 드롭다운 메뉴 - Portal로 document.body에 fixed 배치 (overflow-hidden 부모 회피) */}\n {showDropdown && showMenu && finalMenuItems.length > 0 && createPortal(\n \n {finalMenuItems.map((item) => (\n handleMenuItemClick(item, e)}\n className=\"flex items-center justify-start gap-2 w-full text-left px-3 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer\"\n data-testid={`menu-item-${item.key}`}\n >\n {item.icon && }\n {item.label}\n \n ))}\n
,\n document.body\n )}\n
\n );\n};\n","import React from 'react';\nimport { Nav } from '../basic/Nav';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\nimport { Div } from '../basic/Div';\nimport { Span } from '../basic/Span';\nimport { Select } from '../basic/Select';\nimport type { EditorAttrs } from '../../types';\n\nexport interface Tab {\n id: string | number;\n label: string;\n iconName?: IconName;\n disabled?: boolean;\n badge?: string | number;\n}\n\nexport interface TabNavigationProps {\n tabs: Tab[];\n activeTabId?: string | number;\n onTabChange?: (tabId: string | number) => void;\n variant?: 'default' | 'pills' | 'underline';\n className?: string;\n style?: React.CSSProperties;\n /** 숨길 탭 ID 목록 (동적 조건부 탭 노출용) */\n hiddenTabIds?: (string | number)[];\n /** 모바일 전환 임계값 (px). 기본값 768 — G7 ResponsiveContext mobile 프리셋과 동일 */\n mobileBreakpoint?: number;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * TabNavigation 집합 컴포넌트\n *\n * 탭 네비게이션을 제공하는 컴포넌트입니다.\n * 여러 탭을 전환할 수 있으며, 아이콘과 뱃지를 지원합니다.\n *\n * 반응형: G7Core.useResponsive() hook으로 화면 너비를 구독하여\n * mobileBreakpoint(기본 768px) 미만일 때 Select 드롭다운으로 자동 전환됩니다.\n * Tailwind hidden md:flex 분기를 사용하지 않으므로 위지윅 편집기의 디바이스 미리보기와도 호환됩니다.\n *\n * **주의**: 이 컴포넌트는 순수 네비게이션 UI만 제공하며,\n * 실제 탭 컨텐츠는 부모 컴포넌트에서 activeTabId를 기반으로 조건부 렌더링해야 합니다.\n *\n * 기본 컴포넌트 조합: Nav + Button + Icon + Div + Span + Select\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"TabNavigation\",\n * \"props\": {\n * \"activeTabId\": 1,\n * \"tabs\": [\n * {\"id\": 1, \"label\": \"프로필\", \"iconName\": \"user\"},\n * {\"id\": 2, \"label\": \"설정\", \"iconName\": \"cog\", \"badge\": 3},\n * {\"id\": 3, \"label\": \"문의내역\", \"iconName\": \"comment\"}\n * ],\n * \"hiddenTabIds\": \"{{_global.modules?.['sirsoft-ecommerce']?.inquiry?.board_slug ? [] : ['inquiries']}}\"\n * }\n * }\n */\nexport const TabNavigation: React.FC = ({\n tabs,\n activeTabId,\n onTabChange,\n variant = 'underline',\n className = '',\n style,\n hiddenTabIds = [],\n mobileBreakpoint = 768,\n id,\n editorAttrs,\n}) => {\n // G7Core.useResponsive를 통해 반응형 상태 구독 (G7 표준)\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive;\n const responsiveValue = useResponsive?.();\n const isMobile = responsiveValue\n ? responsiveValue.width < mobileBreakpoint\n : typeof window !== 'undefined' && window.innerWidth < mobileBreakpoint;\n\n const handleTabClick = (tab: Tab) => {\n if (!tab.disabled && tab.id !== activeTabId) {\n onTabChange?.(tab.id);\n }\n };\n\n const handleSelectChange = (\n e: React.ChangeEvent | { target: { value: string | number } }\n ) => {\n const selectedId = e.target.value;\n const numericId = Number(selectedId);\n const finalId =\n typeof selectedId === 'string' && selectedId !== '' && !Number.isNaN(numericId)\n ? numericId\n : selectedId;\n const selectedTab = tabs.find((tab) => String(tab.id) === String(finalId));\n if (selectedTab) {\n handleTabClick(selectedTab);\n }\n };\n\n const visibleTabs = hiddenTabIds.length > 0\n ? tabs.filter((tab) => !hiddenTabIds.includes(tab.id))\n : tabs;\n\n // 모바일: Select 드롭다운 단일 렌더\n // 데스크톱 분기와 동일하게 id/editorAttrs 를 루트에 spread 해야 레이아웃 편집기가\n // 모바일 디바이스 미리보기에서도 이 노드를 선택/측정할 수 있다(모든 렌더 분기 패리티 —\n // 누락 시 모바일 프리뷰에서 data-editor-* 가 사라져 캔버스에서 선택 불가).\n if (isMobile) {\n return (\n
\n ({\n value: String(tab.id),\n label: tab.badge !== undefined ? `${tab.label} (${tab.badge})` : tab.label,\n disabled: tab.disabled,\n }))}\n className=\"w-full\"\n />\n
\n );\n }\n\n const getTabClasses = (tab: Tab) => {\n const isActive = tab.id === activeTabId;\n const baseClasses =\n 'flex items-center gap-2 px-3 py-2 font-medium text-sm transition-all shrink-0 whitespace-nowrap';\n\n if (tab.disabled) {\n return `${baseClasses} opacity-50 cursor-not-allowed text-gray-400 dark:text-gray-600`;\n }\n\n switch (variant) {\n case 'pills':\n return isActive\n ? `${baseClasses} bg-blue-600 dark:bg-blue-500 text-white rounded-lg`\n : `${baseClasses} text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg`;\n\n case 'underline':\n return isActive\n ? `${baseClasses} text-gray-900 dark:text-white border-b-2 border-gray-900 dark:border-white`\n : `${baseClasses} text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 border-b-2 border-transparent hover:border-gray-300 dark:hover:border-gray-600`;\n\n case 'default':\n default:\n return isActive\n ? `${baseClasses} text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20 border-b-2 border-blue-600 dark:border-blue-400`\n : `${baseClasses} text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 border-b-2 border-transparent`;\n }\n };\n\n const navClasses =\n variant === 'underline'\n ? 'flex gap-0 border-b border-gray-200 dark:border-gray-700'\n : 'flex gap-2';\n\n // 데스크톱: 탭 버튼 단일 렌더\n return (\n
\n \n
\n );\n};\n","// e2e:allow 편집기 ComponentRegistry 등록맵에 SlotContainer 추가(편집기 IIFE 번들 포함 — 헤더 통화 슬롯 렌더). 편집기 캔버스 렌더는 Chrome MCP 라이브 실측 + Vitest 로 검증. 사용자 사이트 런타임 무변경.\n/**\n * sirsoft-basic 템플릿 Composite 컴포넌트 등록\n *\n * 이 파일에서 모든 Composite 컴포넌트를 export합니다.\n * G7Core에서 자동으로 로드하여 레이아웃 JSON에서 사용할 수 있습니다.\n */\n\n// 레이아웃 컴포넌트\nexport { default as Header } from './Header';\nexport { default as Footer } from './Footer';\nexport { default as MobileNav } from './MobileNav';\nexport { NotificationCenter } from './NotificationCenter';\nexport type { NotificationCenterProps, NotificationItem } from './NotificationCenter';\n\n// 상품 관련 컴포넌트\nexport { default as ProductCard } from './ProductCard';\nexport { default as ImageGallery } from './ImageGallery';\nexport { default as ProductImageViewer } from './ProductImageViewer';\nexport { default as QuantitySelector } from './QuantitySelector';\n\n// 게시판 관련 컴포넌트\nexport { default as PostReactions } from './PostReactions';\nexport { default as RichTextEditor } from './RichTextEditor';\nexport { HtmlContent } from './HtmlContent';\nexport { HtmlEditor } from './HtmlEditor';\n\n// 콘텐츠 유틸리티\nexport { ExpandableContent } from './ExpandableContent';\n\n// 공통 컴포넌트\nexport { default as FileUploader } from './FileUploader';\nexport { ConfirmDialog } from './ConfirmDialog';\nexport { default as SocialLoginButtons } from './SocialLoginButtons';\nexport { default as Toast } from './Toast';\nexport { default as PageTransitionIndicator } from './PageTransitionIndicator';\nexport { default as PageTransitionBlur } from './PageTransitionBlur';\nexport { default as PageSkeleton } from './PageSkeleton';\nexport { default as PageLoading } from './PageLoading';\nexport { default as ThemeToggle } from './ThemeToggle';\nexport { Pagination } from './Pagination';\nexport { SearchBar } from './SearchBar';\nexport { Avatar } from './Avatar';\nexport { AvatarUploader } from './AvatarUploader';\nexport { UserInfo } from './UserInfo';\nexport { Modal } from './Modal';\nexport { TabNavigation } from './TabNavigation';\nexport { SlotContainer } from './SlotContainer';\n// AddressSearch는 별도 컴포넌트가 아닌 sirsoft-daum_postcode 플러그인의 extension_point 방식 사용\n\n/**\n * 컴포넌트 등록 맵\n *\n * G7Core 템플릿 엔진에서 레이아웃 JSON의 컴포넌트 이름을\n * 실제 컴포넌트로 매핑할 때 사용합니다.\n *\n * @example\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"Header\",\n * \"props\": { ... }\n * }\n */\nexport const compositeComponents = {\n // 레이아웃\n Header: () => import('./Header'),\n Footer: () => import('./Footer'),\n MobileNav: () => import('./MobileNav'),\n // 슬롯 컨테이너 — 모듈 주입 UI(헤더 통화 셀렉터 등)를 떙겨 렌더. 등록맵 누락 시\n // 편집기 캔버스 IIFE 번들에 포함되지 않아 \"Component not found in bundle\" 로 렌더 실패한다\n // (운영 사이트는 별도 등록 경로라 정상이나 편집기 미리보기에서만 슬롯이 통째로 비는 회귀).\n SlotContainer: () => import('./SlotContainer'),\n NotificationCenter: () => import('./NotificationCenter'),\n\n // 상품\n ProductCard: () => import('./ProductCard'),\n ImageGallery: () => import('./ImageGallery'),\n ProductImageViewer: () => import('./ProductImageViewer'),\n QuantitySelector: () => import('./QuantitySelector'),\n\n // 게시판\n PostReactions: () => import('./PostReactions'),\n RichTextEditor: () => import('./RichTextEditor'),\n HtmlContent: () => import('./HtmlContent'),\n HtmlEditor: () => import('./HtmlEditor'),\n\n // 콘텐츠 유틸리티\n ExpandableContent: () => import('./ExpandableContent'),\n\n // 공통\n FileUploader: () => import('./FileUploader'),\n ConfirmDialog: () => import('./ConfirmDialog'),\n SocialLoginButtons: () => import('./SocialLoginButtons'),\n Toast: () => import('./Toast'),\n PageTransitionIndicator: () => import('./PageTransitionIndicator'),\n PageTransitionBlur: () => import('./PageTransitionBlur'),\n PageSkeleton: () => import('./PageSkeleton'),\n PageLoading: () => import('./PageLoading'),\n ThemeToggle: () => import('./ThemeToggle'),\n Pagination: () => import('./Pagination'),\n SearchBar: () => import('./SearchBar'),\n Avatar: () => import('./Avatar'),\n AvatarUploader: () => import('./AvatarUploader'),\n UserInfo: () => import('./UserInfo'),\n Modal: () => import('./Modal'),\n TabNavigation: () => import('./TabNavigation'),\n // AddressSearch는 sirsoft-daum_postcode 플러그인의 extension_point 방식 사용\n};\n\n/**\n * 컴포넌트 타입 정의 (TypeScript 자동완성용)\n */\nexport type CompositeComponentName = keyof typeof compositeComponents;\n","import React from 'react';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface ContainerProps {\n /**\n * DOM id 속성\n */\n id?: string;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 자식 요소\n */\n children?: React.ReactNode;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Container 컴포넌트\n *\n * 단순한 div 래퍼입니다. id와 className을 지정할 수 있습니다.\n */\nexport const Container: React.FC = ({\n id,\n className,\n style,\n children,\n editorAttrs,\n}) => {\n return (\n
\n {children}\n
\n );\n};\n","import React from 'react';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface GridProps {\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n\n /**\n * Grid 열 개수\n */\n cols?: number;\n\n /**\n * 반응형 열 개수 (브레이크포인트별)\n */\n responsive?: {\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n '2xl'?: number;\n };\n\n /**\n * Gap 크기 (Tailwind 스케일: 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24)\n */\n gap?: number;\n\n /**\n * Row gap (행 간격)\n */\n rowGap?: number;\n\n /**\n * Column gap (열 간격)\n */\n colGap?: number;\n\n /**\n * 자동 행 크기 조정\n */\n autoRows?: 'auto' | 'min' | 'max' | 'fr';\n\n /**\n * 자동 열 크기 조정\n */\n autoCols?: 'auto' | 'min' | 'max' | 'fr';\n\n /**\n * Grid auto-flow 설정\n */\n flow?: 'row' | 'col' | 'dense' | 'row-dense' | 'col-dense';\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 자식 요소\n */\n children?: React.ReactNode;\n\n /**\n * 클릭 이벤트 핸들러\n */\n onClick?: () => void;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Grid 레이아웃 컴포넌트\n *\n * CSS Grid를 활용한 반응형 그리드 시스템을 제공합니다.\n * gap, span, auto-flow 등의 그리드 속성을 제어할 수 있습니다.\n *\n * @example\n * // 기본 3열 그리드\n * \n *
Item 1
\n *
Item 2
\n *
Item 3
\n *
\n *\n * @example\n * // 반응형 그리드\n * \n *
Item 1
\n *
Item 2
\n * \n */\nexport const Grid: React.FC = ({\n id,\n children,\n cols = 1,\n responsive,\n gap,\n rowGap,\n colGap,\n autoRows,\n autoCols,\n flow = 'row',\n className = '',\n style,\n onClick,\n editorAttrs,\n}) => {\n // Tailwind CSS 클래스 생성\n const classes: string[] = ['grid'];\n\n // Grid 열 개수\n if (cols) {\n classes.push(`grid-cols-${cols}`);\n }\n\n // 반응형 그리드\n if (responsive) {\n if (responsive.sm) classes.push(`sm:grid-cols-${responsive.sm}`);\n if (responsive.md) classes.push(`md:grid-cols-${responsive.md}`);\n if (responsive.lg) classes.push(`lg:grid-cols-${responsive.lg}`);\n if (responsive.xl) classes.push(`xl:grid-cols-${responsive.xl}`);\n if (responsive['2xl']) classes.push(`2xl:grid-cols-${responsive['2xl']}`);\n }\n\n // Gap\n if (gap !== undefined && gap > 0) {\n classes.push(`gap-${gap}`);\n }\n\n // Row gap\n if (rowGap !== undefined && rowGap > 0) {\n classes.push(`gap-y-${rowGap}`);\n }\n\n // Column gap\n if (colGap !== undefined && colGap > 0) {\n classes.push(`gap-x-${colGap}`);\n }\n\n // Auto rows\n if (autoRows) {\n const autoRowsMap: Record = {\n auto: 'auto-rows-auto',\n min: 'auto-rows-min',\n max: 'auto-rows-max',\n fr: 'auto-rows-fr',\n };\n classes.push(autoRowsMap[autoRows]);\n }\n\n // Auto columns\n if (autoCols) {\n const autoColsMap: Record = {\n auto: 'auto-cols-auto',\n min: 'auto-cols-min',\n max: 'auto-cols-max',\n fr: 'auto-cols-fr',\n };\n classes.push(autoColsMap[autoCols]);\n }\n\n // Grid flow\n const flowMap: Record = {\n row: 'grid-flow-row',\n col: 'grid-flow-col',\n dense: 'grid-flow-dense',\n 'row-dense': 'grid-flow-row-dense',\n 'col-dense': 'grid-flow-col-dense',\n };\n classes.push(flowMap[flow]);\n\n // 사용자 정의 클래스 추가\n if (className) {\n classes.push(className);\n }\n\n return (\n
\n {children}\n
\n );\n};\n","import React from 'react';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface FlexProps {\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n\n /**\n * Flex 방향\n */\n direction?: 'row' | 'row-reverse' | 'col' | 'col-reverse';\n\n /**\n * Justify content (주축 정렬)\n */\n justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly';\n\n /**\n * Align items (교차축 정렬)\n */\n align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\n\n /**\n * Flex wrap 설정\n */\n wrap?: 'wrap' | 'nowrap' | 'wrap-reverse';\n\n /**\n * Gap 크기 (Tailwind 스케일: 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24)\n */\n gap?: number;\n\n /**\n * Flex grow (자식 요소 확장)\n */\n grow?: boolean | number;\n\n /**\n * Flex shrink (자식 요소 축소)\n */\n shrink?: boolean | number;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 자식 요소\n */\n children?: React.ReactNode;\n\n /**\n * 클릭 이벤트 핸들러\n */\n onClick?: () => void;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Flex 레이아웃 컴포넌트\n *\n * Flexbox를 활용한 유연한 레이아웃을 제공합니다.\n * justify, align, wrap 등의 옵션을 통해 다양한 정렬을 구현할 수 있습니다.\n *\n * @example\n * // 가로 정렬 (가운데 정렬)\n * \n *
Item 1
\n *
Item 2
\n *
\n *\n * @example\n * // 세로 정렬 (양 끝 정렬)\n * \n *
Top
\n *
Bottom
\n *
\n */\nexport const Flex: React.FC = ({\n id,\n children,\n direction = 'row',\n justify = 'start',\n align = 'stretch',\n wrap = 'nowrap',\n gap = 0,\n grow = false,\n shrink = true,\n className = '',\n style,\n onClick,\n editorAttrs,\n}) => {\n // Tailwind CSS 클래스 생성\n const classes: string[] = ['flex'];\n\n // Flex direction\n const directionMap: Record = {\n row: 'flex-row',\n 'row-reverse': 'flex-row-reverse',\n col: 'flex-col',\n 'col-reverse': 'flex-col-reverse',\n };\n classes.push(directionMap[direction]);\n\n // Flex wrap\n const wrapMap: Record = {\n wrap: 'flex-wrap',\n nowrap: 'flex-nowrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n };\n classes.push(wrapMap[wrap]);\n\n // Justify content\n const justifyMap: Record = {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n };\n classes.push(justifyMap[justify]);\n\n // Align items\n const alignMap: Record = {\n start: 'items-start',\n end: 'items-end',\n center: 'items-center',\n baseline: 'items-baseline',\n stretch: 'items-stretch',\n };\n classes.push(alignMap[align]);\n\n // Gap\n if (gap > 0) {\n classes.push(`gap-${gap}`);\n }\n\n // Flex grow\n if (grow === true) {\n classes.push('flex-grow');\n } else if (typeof grow === 'number' && grow > 0) {\n classes.push(`flex-grow-${grow}`);\n }\n\n // Flex shrink\n if (shrink === false) {\n classes.push('shrink-0');\n } else if (shrink === true) {\n classes.push('flex-shrink');\n } else if (typeof shrink === 'number' && shrink > 0) {\n classes.push(`flex-shrink-${shrink}`);\n }\n\n // 사용자 정의 클래스 추가\n if (className) {\n classes.push(className);\n }\n\n return (\n
\n {children}\n
\n );\n};\n","import React from 'react';\nimport { Section as BaseSection } from '../basic/Section';\nimport { Div } from '../basic/Div';\nimport { H2 } from '../basic/H2';\nimport { P } from '../basic/P';\nimport type { EditorAttrs } from '../../types';\n\nexport interface SectionLayoutProps {\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n\n /**\n * 섹션 제목\n */\n title?: string;\n\n /**\n * 섹션 부제목\n */\n subtitle?: string;\n\n /**\n * 패딩 적용\n */\n padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n /**\n * 배경색\n */\n background?: 'none' | 'white' | 'gray' | 'primary' | 'secondary';\n\n /**\n * 최대 너비 제한\n */\n maxWidth?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '4xl' | '6xl' | '7xl' | 'full';\n\n /**\n * 중앙 정렬 여부\n */\n centered?: boolean;\n\n /**\n * 경계선 표시\n */\n border?: boolean;\n\n /**\n * 그림자 효과\n */\n shadow?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n /**\n * 둥근 모서리\n */\n rounded?: boolean;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 자식 요소\n */\n children?: React.ReactNode;\n\n /**\n * 클릭 이벤트 핸들러\n */\n onClick?: () => void;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Section 레이아웃 컴포넌트\n *\n * 시맨틱 구역 분할을 위한 섹션 컴포넌트입니다.\n * 제목, 패딩, 배경색 등 다양한 옵션을 제공합니다.\n *\n * @example\n * // 기본 섹션\n *
\n *

Content here

\n *
\n *\n * @example\n * // 제목이 있는 섹션\n * \n *

User details

\n * \n */\nexport const SectionLayout: React.FC = ({\n id,\n title,\n subtitle,\n children,\n padding = 'md',\n background = 'none',\n maxWidth,\n centered = false,\n border = false,\n shadow = 'none',\n rounded = false,\n className = '',\n style,\n onClick,\n editorAttrs,\n}) => {\n // Tailwind CSS 클래스 생성\n const classes: string[] = [];\n\n // 패딩\n const paddingMap: Record = {\n none: 'p-0',\n sm: 'p-2',\n md: 'p-4',\n lg: 'p-6',\n xl: 'p-8',\n }; \n classes.push(paddingMap[padding]);\n\n // 배경색\n const backgroundMap: Record = {\n none: '',\n white: 'bg-white dark:bg-gray-700',\n gray: 'bg-gray-50 dark:bg-gray-800',\n primary: 'bg-blue-50 dark:bg-blue-900/20',\n secondary: 'bg-gray-50 dark:bg-gray-800',\n };\n if (background !== 'none') {\n classes.push(backgroundMap[background]);\n }\n\n // 최대 너비\n if (maxWidth) {\n const maxWidthMap: Record = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n '2xl': 'max-w-2xl',\n '4xl': 'max-w-4xl',\n '6xl': 'max-w-6xl',\n '7xl': 'max-w-7xl',\n full: 'max-w-full',\n };\n classes.push(maxWidthMap[maxWidth]);\n }\n\n // 중앙 정렬\n if (centered) {\n classes.push('mx-auto');\n }\n\n // 경계선\n if (border) {\n classes.push('border', 'border-gray-200', 'dark:border-gray-700');\n }\n\n // 그림자\n const shadowMap: Record = {\n none: '',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n };\n if (shadow !== 'none') {\n classes.push(shadowMap[shadow]);\n }\n\n // 둥근 모서리\n if (rounded) {\n classes.push('rounded-lg');\n }\n\n // 사용자 정의 클래스 추가\n if (className) {\n classes.push(className);\n }\n\n return (\n \n {/* 제목 영역 */}\n {(title || subtitle) && (\n
\n {title &&

{title}

}\n {subtitle &&

{subtitle}

}\n
\n )}\n\n {/* 콘텐츠 영역 */}\n {children}\n
\n );\n};\n","import React from 'react';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface ThreeColumnLayoutProps {\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n\n /**\n * 왼쪽 영역 너비\n */\n leftWidth?: string;\n\n /**\n * 오른쪽 영역 너비\n */\n rightWidth?: string;\n\n /**\n * 왼쪽 슬롯 컨텐츠\n */\n leftSlot?: React.ReactNode;\n\n /**\n * 가운데 슬롯 컨텐츠\n */\n centerSlot?: React.ReactNode;\n\n /**\n * 오른쪽 슬롯 컨텐츠\n */\n rightSlot?: React.ReactNode;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * ThreeColumnLayout 레이아웃 컴포넌트\n *\n * 3단 레이아웃 구조를 제공하는 기본 layout 컴포넌트입니다.\n * leftWidth, rightWidth를 조절할 수 있으며 각 영역에 슬롯을 제공합니다.\n *\n * @example\n * Left Content
}\n * centerSlot={
Center Content
}\n * rightSlot={
Right Content
}\n * />\n */\nexport const ThreeColumnLayout: React.FC = ({\n id,\n leftWidth = '250px',\n rightWidth = '300px',\n leftSlot,\n centerSlot,\n rightSlot,\n className = '',\n style,\n editorAttrs,\n}) => {\n // 컨테이너 스타일\n const containerClasses = `flex flex-row w-full h-full ${className}`.trim();\n\n // 왼쪽 영역 스타일\n const leftStyle: React.CSSProperties = {\n width: leftWidth,\n flexShrink: 0,\n };\n\n // 가운데 영역 스타일 (남은 공간 차지)\n const centerStyle: React.CSSProperties = {\n flex: 1,\n minWidth: 0, // flex 아이템 오버플로우 방지\n };\n\n // 오른쪽 영역 스타일\n const rightStyle: React.CSSProperties = {\n width: rightWidth,\n flexShrink: 0,\n };\n\n return (\n
\n {/* 왼쪽 영역 */}\n
\n {leftSlot}\n
\n\n {/* 가운데 영역 */}\n
\n {centerSlot}\n
\n\n {/* 오른쪽 영역 */}\n
\n {rightSlot}\n
\n
\n );\n};\n","/**\n * 상품 옵션 선택 관련 핸들러\n *\n * 상품 상세 페이지에서 옵션 선택 및 수량 변경을 처리합니다.\n * DB의 option_groups (문자열 값 배열)과 options (ProductOption 레코드)를 사용합니다.\n *\n * G7Core ActionDispatcher는 커스텀 핸들러를 (action, context) 시그니처로 호출합니다.\n * - action.params: 레이아웃 JSON에서 정의한 params (resolveParams로 이미 해석됨)\n * - context.setState: 컴포넌트 상태 업데이트 함수\n *\n * ⚠️ sequence 내에서 setState 후 다음 액션의 context.data._local은 갱신되지 않음\n * (ActionDispatcher.handleSequence는 state만 동기화, data._local은 미갱신)\n * 따라서 이 핸들러는 newGroupName+newValue를 직접 받아서 currentSelection을 자체 구성합니다.\n */\n\n/**\n * 옵션 그룹 구조 (다국어 지원)\n * API 응답: { name: {ko: \"색상\", en: \"Color\"}, name_localized: \"색상\", values: [...], values_localized: [...] }\n */\ninterface OptionGroup {\n name: string | Record;\n name_localized?: string;\n values: string[] | Array>;\n values_localized?: string[];\n}\n\n/**\n * 옵션 값 항목 (다국어 지원 배열 형식)\n */\ninterface OptionValueItem {\n key: string | Record;\n value: string | Record;\n}\n\n/**\n * ProductOption 레코드\n * option_values: 배열 형식 (신규) 또는 객체 형식 (레거시)\n * option_values_localized: 현재 로케일 값 객체 (신규)\n */\ninterface ProductOptionRecord {\n id: number;\n option_code: string;\n option_values: OptionValueItem[] | Record;\n option_values_localized?: Record;\n option_name: string | Record;\n option_name_localized?: string;\n price_adjustment: number;\n selling_price: number;\n selling_price_formatted: string;\n list_price: number;\n list_price_formatted: string;\n multi_currency_selling_price?: Record;\n multi_currency_list_price?: Record;\n stock_quantity: number;\n is_active: boolean;\n}\n\n/**\n * 추가옵션 선택지 (PublicProductResource.additional_options[].values[])\n */\ninterface AdditionalOptionValue {\n id: number;\n name: string;\n price_adjustment: number;\n is_default: boolean;\n /** 직접입력 허용 — 이 선택지 선택 시 자유 텍스트 입력칸 노출(입력 필수) */\n allow_custom_text?: boolean;\n}\n\n/**\n * 추가옵션 그룹 (PublicProductResource.additional_options[])\n */\ninterface AdditionalOptionGroup {\n id: number;\n name: string;\n is_required: boolean;\n values: AdditionalOptionValue[];\n}\n\n/**\n * 블럭별 추가옵션 선택 상태 (additional_option_id → value_id)\n */\ntype AdditionalOptionSelections = Record;\n\ninterface SelectedItem {\n id: string;\n optionId: number;\n options: Record;\n optionValues: Record;\n quantity: number;\n stock: number;\n unitPrice: number;\n unitPriceFormatted: string;\n totalPrice: number;\n totalPriceFormatted: string;\n multiCurrencyUnitPrice?: Record;\n multiCurrencyTotalPrice?: Record;\n /** 블럭별 추가옵션 선택 (그룹ID → 선택지ID) */\n additionalOptionSelections?: AdditionalOptionSelections;\n /** 블럭별 추가옵션 직접입력 텍스트 (그룹ID → custom_text). allow_custom_text 선택지 한정 */\n additionalOptionCustomTexts?: Record;\n /** 블럭별 추가옵션 추가금 합계 (KRW 기준, 단위당) */\n additionalOptionsTotal?: number;\n}\n\ninterface AddSelectedItemParams {\n productId: number;\n optionGroups: OptionGroup[];\n options: ProductOptionRecord[];\n currentSelection: Record;\n selectedOptionItems: SelectedItem[];\n preferredCurrency: string;\n /** 상품 추가옵션 카탈로그 (기본 선택지 자동 적용용) */\n additionalOptionGroups?: AdditionalOptionGroup[];\n /** sequence 상태 동기화 우회: 방금 선택한 그룹명 */\n newGroupName?: string;\n /** sequence 상태 동기화 우회: 방금 선택한 값 */\n newValue?: string;\n}\n\ninterface UpdateQuantityParams {\n itemIndex: number;\n newQuantity: number;\n selectedOptionItems: SelectedItem[];\n preferredCurrency: string;\n}\n\ninterface SetBlockAdditionalOptionParams {\n itemIndex: number;\n additionalOptionId: number;\n valueId: number | string;\n /** 직접입력 텍스트 입력 시 전달 (value 선택 변경 시에는 미전달) */\n customText?: string;\n selectedOptionItems: SelectedItem[];\n additionalOptionGroups: AdditionalOptionGroup[];\n preferredCurrency: string;\n}\n\n/**\n * G7Core ActionContext (ActionDispatcher에서 전달)\n */\ninterface ActionContext {\n data?: any;\n event?: Event;\n state?: any;\n setState?: (updates: any) => void;\n}\n\n/**\n * G7Core ActionDefinition (커스텀 핸들러 첫 번째 인자)\n */\ninterface ActionDefinition {\n handler: string;\n params?: Record;\n target?: string;\n [key: string]: any;\n}\n\n/**\n * 통화별 포맷팅 설정\n */\nconst CURRENCY_CONFIGS: Record = {\n KRW: { locale: 'ko-KR', decimals: 0 },\n USD: { locale: 'en-US', decimals: 2 },\n JPY: { locale: 'ja-JP', decimals: 0 },\n CNY: { locale: 'zh-CN', decimals: 2 },\n EUR: { locale: 'de-DE', decimals: 2 },\n};\n\n/**\n * 숫자를 통화 형식으로 포맷팅\n */\nfunction formatPrice(amount: number, currencyCode: string = 'KRW'): string {\n if (!Number.isFinite(amount)) return '0';\n const config = CURRENCY_CONFIGS[currencyCode] || CURRENCY_CONFIGS.KRW;\n try {\n return new Intl.NumberFormat(config.locale, {\n style: 'currency',\n currency: currencyCode,\n minimumFractionDigits: config.decimals,\n maximumFractionDigits: config.decimals,\n }).format(amount);\n } catch {\n return amount.toLocaleString() + (currencyCode === 'KRW' ? '원' : '');\n }\n}\n\n/**\n * 다중 통화 총 가격 재계산\n *\n * 추가옵션 추가금(additionalUnitKrw)이 있으면 KRW 환율 기준으로 환산해 각 통화 단가에 가산한다.\n * 추가옵션은 공개 응답에 다통화 컬럼이 없으므로(plan §245) 기본통화(KRW) 단가 비율로 환산한다.\n *\n * @param unitPriceMap 옵션 단가 다통화 맵\n * @param quantity 수량\n * @param additionalUnitKrw 추가옵션 추가금 합계 (KRW 기준, 단위당). 기본 0.\n */\nfunction recalcMultiCurrencyTotal(\n unitPriceMap: Record | undefined,\n quantity: number,\n additionalUnitKrw: number = 0\n): Record | undefined {\n if (!unitPriceMap) return undefined;\n\n // KRW 단가를 환산 기준으로 사용 (옵션의 KRW 단가 대비 타통화 비율)\n const krwUnit = (unitPriceMap.KRW as any)?.value ?? (unitPriceMap.KRW as any)?.price ?? 0;\n\n const result: Record = {};\n for (const [code, data] of Object.entries(unitPriceMap)) {\n // API는 { price, formatted } 형태, 내부는 { value, formatted } 형태 — 둘 다 지원\n const unitValue = (data as any)?.value ?? (data as any)?.price ?? 0;\n // 추가금 통화 환산: KRW 기준 추가금 × (해당통화 단가 / KRW 단가). KRW 자신은 그대로.\n let additionalConverted = 0;\n if (additionalUnitKrw > 0) {\n if (code === 'KRW') {\n additionalConverted = additionalUnitKrw;\n } else if (krwUnit > 0) {\n additionalConverted = (additionalUnitKrw * unitValue) / krwUnit;\n }\n }\n const total = (unitValue + additionalConverted) * quantity;\n result[code] = {\n value: total,\n formatted: formatPrice(total, code),\n };\n }\n return result;\n}\n\n/**\n * 선택된 옵션 항목들의 통화별 합계 포맷 맵을 계산합니다.\n *\n * 레이아웃 \"총 금액\"은 표현식 컨텍스트에서 핸들러를 호출할 수 없으므로(엔진 제약),\n * 합계 금액을 통화별로 미리 포맷해 _local 에 노출한다 → 레이아웃은 단순 조회만 한다.\n * (선택 통화 KRW 고정 결함 D2 해소)\n *\n * @param items 선택된 옵션 항목 목록\n * @returns 통화코드 => { value, formatted } 합계 맵\n */\nfunction buildSelectedTotalMultiCurrency(\n items: SelectedItem[]\n): Record {\n const totals: Record = {};\n for (const item of items) {\n const mc = item?.multiCurrencyTotalPrice;\n if (mc) {\n for (const [code, data] of Object.entries(mc)) {\n const v = (data as any)?.value ?? (data as any)?.price ?? 0;\n totals[code] = (totals[code] ?? 0) + v;\n }\n }\n }\n const result: Record = {};\n for (const [code, value] of Object.entries(totals)) {\n result[code] = { value, formatted: formatPrice(value, code) };\n }\n return result;\n}\n\n/**\n * 블럭의 추가옵션 선택으로부터 추가금 합계(KRW, 단위당)를 계산한다.\n *\n * @param selections 블럭별 추가옵션 선택 (그룹ID → 선택지ID)\n * @param groups 상품 추가옵션 카탈로그\n * @returns 추가금 합계 (KRW)\n */\nfunction computeAdditionalOptionsTotal(\n selections: AdditionalOptionSelections | undefined,\n groups: AdditionalOptionGroup[] | undefined\n): number {\n if (!selections || !groups?.length) return 0;\n let total = 0;\n for (const group of groups) {\n const valueId = selections[group.id];\n if (valueId == null) continue;\n const value = group.values?.find(v => v.id === Number(valueId));\n if (value) total += value.price_adjustment ?? 0;\n }\n return total;\n}\n\n/**\n * 추가옵션 선택을 백엔드 입력 형식으로 변환한다.\n * additional_option_selections: [{ additional_option_id, value_id }]\n *\n * @param selections 블럭별 추가옵션 선택 (그룹ID → 선택지ID)\n * @param customTexts 블럭별 직접입력 텍스트 (그룹ID → custom_text)\n * @returns 백엔드 입력 배열\n */\nexport function toAdditionalOptionSelectionsPayload(\n selections: AdditionalOptionSelections | undefined,\n customTexts?: Record\n): Array<{ additional_option_id: number; value_id: number; custom_text?: string }> {\n if (!selections) return [];\n return Object.entries(selections)\n .filter(([, valueId]) => valueId != null)\n .map(([groupId, valueId]) => {\n const entry: { additional_option_id: number; value_id: number; custom_text?: string } = {\n additional_option_id: Number(groupId),\n value_id: Number(valueId),\n };\n const customText = customTexts?.[Number(groupId)];\n if (typeof customText === 'string' && customText.trim() !== '') {\n entry.custom_text = customText.trim();\n }\n return entry;\n });\n}\n\n/**\n * 옵션 그룹의 키 (name_localized 우선, 폴백으로 name)\n */\nfunction getGroupKey(group: OptionGroup): string {\n if (group.name_localized) return group.name_localized;\n if (typeof group.name === 'string') return group.name;\n return (group.name as Record)?.ko ?? '';\n}\n\n/**\n * option_values에서 특정 그룹 키의 값 추출\n * 배열 형식(신규)과 객체 형식(레거시) 모두 지원\n */\nfunction getOptionValueByGroupKey(\n optionValues: OptionValueItem[] | Record,\n optionValuesLocalized: Record | undefined,\n groupKey: string\n): string | undefined {\n // option_values_localized가 있으면 우선 사용\n if (optionValuesLocalized && groupKey in optionValuesLocalized) {\n return optionValuesLocalized[groupKey];\n }\n\n // 배열 형식 (신규)\n if (Array.isArray(optionValues)) {\n const item = optionValues.find(v => {\n if (typeof v.key === 'string') return v.key === groupKey;\n return (v.key as Record)?.ko === groupKey || Object.values(v.key).includes(groupKey);\n });\n if (item) {\n if (typeof item.value === 'string') return item.value;\n return (item.value as Record)?.ko ?? Object.values(item.value)[0];\n }\n return undefined;\n }\n\n // 객체 형식 (레거시)\n return optionValues[groupKey];\n}\n\n/**\n * option_values를 Record 형식으로 변환\n * SelectedItem.optionValues 저장용 (현재 로케일 값으로 변환)\n */\nfunction convertOptionValuesToRecord(\n optionValues: OptionValueItem[] | Record,\n optionValuesLocalized?: Record\n): Record {\n // option_values_localized가 있으면 우선 사용\n if (optionValuesLocalized) {\n return optionValuesLocalized;\n }\n\n // 이미 객체 형식이면 그대로 반환\n if (!Array.isArray(optionValues)) {\n return optionValues;\n }\n\n // 배열 형식을 객체로 변환\n const result: Record = {};\n for (const item of optionValues) {\n const key = typeof item.key === 'string'\n ? item.key\n : (item.key as Record)?.ko ?? Object.values(item.key)[0] ?? '';\n const value = typeof item.value === 'string'\n ? item.value\n : (item.value as Record)?.ko ?? Object.values(item.value)[0] ?? '';\n if (key) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * 현재 선택된 값으로 매칭되는 ProductOption 찾기\n * name_localized를 키로 사용하여 선택값과 비교\n */\nfunction findMatchingOption(\n optionGroups: OptionGroup[],\n currentSelection: Record,\n options: ProductOptionRecord[]\n): ProductOptionRecord | undefined {\n return options.find(opt => {\n if (!opt?.option_values || !opt?.is_active) return false;\n return optionGroups.every(group => {\n const groupKey = getGroupKey(group);\n const selectedValue = currentSelection?.[groupKey];\n const optValue = getOptionValueByGroupKey(\n opt.option_values,\n opt.option_values_localized,\n groupKey\n );\n return optValue === selectedValue;\n });\n });\n}\n\n/**\n * 옵션 선택 완료 시 selectedItems에 추가\n *\n * 모든 옵션 그룹이 선택되면 매칭되는 ProductOption을 찾아 선택 목록에 추가합니다.\n * 동일한 옵션 조합이 이미 있으면 토스트 알림 + 선택 초기화합니다.\n *\n * ⚠️ sequence 내 setState 후 context.data._local이 갱신되지 않는 G7Core 한계 때문에\n * newGroupName + newValue를 직접 받아서 currentSelection을 자체 병합합니다.\n *\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function addSelectedItemIfCompleteHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as AddSelectedItemParams;\n if (!params) return;\n\n const { optionGroups, options, selectedOptionItems, preferredCurrency } = params;\n\n // sequence 내 setState 미반영 대응: newGroupName/newValue가 있으면 직접 병합\n let currentSelection: Record;\n if (params.newGroupName && params.newValue) {\n currentSelection = {\n ...(params.currentSelection ?? {}),\n [params.newGroupName]: params.newValue,\n };\n } else {\n currentSelection = params.currentSelection ?? {};\n }\n\n // 모든 옵션 그룹이 선택되었는지 확인 (name_localized 키 사용)\n const allSelected = optionGroups?.every(group => {\n const groupKey = getGroupKey(group);\n return currentSelection?.[groupKey];\n });\n if (!allSelected) return;\n\n // 매칭되는 ProductOption 찾기\n const matchedOption = findMatchingOption(optionGroups, currentSelection, options ?? []);\n if (!matchedOption) {\n context.setState?.({ currentSelection: {}, __mergeMode: 'shallow' });\n return;\n }\n\n // 옵션 키 (중복 확인용) - name_localized 키 사용\n const optionKey = optionGroups.map(g => currentSelection[getGroupKey(g)]).join('_');\n const items = selectedOptionItems ?? [];\n const existing = items.find(item => item.id === optionKey);\n\n if (existing) {\n // 이미 추가된 옵션 → 토스트 알림 + 선택 초기화\n const G7Core = (window as any).G7Core;\n G7Core?.toast?.warning?.(G7Core?.t?.('sirsoft-ecommerce.shop.already_added_option') ?? '이미 추가된 옵션입니다.');\n context.setState?.({ currentSelection: {}, __mergeMode: 'shallow' });\n return;\n }\n\n // 새 옵션 조합 추가\n const unitPrice = matchedOption.selling_price ?? 0;\n const optionLabels: Record = {};\n optionGroups.forEach(group => {\n const groupKey = getGroupKey(group);\n optionLabels[groupKey] = currentSelection[groupKey];\n });\n\n // 추가옵션 초기 선택: 필수(is_required) 그룹에 한해 기본 선택지(is_default)를 자동 적용한다.\n // 비필수 그룹은 \"선택하세요\" 미선택 상태를 유지해야 한다 — 추가옵션 선택지는 라디오 방식이라\n // 그룹당 1개가 항상 is_default 로 마킹되므로(관리자 폼이 첫 선택지를 기본으로 시드), 비필수까지\n // 자동 적용하면 사용자가 원치 않은 추가금/선택이 강제로 붙는다.\n const additionalOptionGroups = params.additionalOptionGroups ?? [];\n const additionalOptionSelections: AdditionalOptionSelections = {};\n for (const group of additionalOptionGroups) {\n if (!group.is_required) continue;\n const defaultValue = group.values?.find(v => v.is_default);\n if (defaultValue) additionalOptionSelections[group.id] = defaultValue.id;\n }\n const additionalOptionsTotal = computeAdditionalOptionsTotal(\n additionalOptionSelections,\n additionalOptionGroups\n );\n\n const blockUnitTotal = unitPrice + additionalOptionsTotal;\n\n const newItem: SelectedItem = {\n id: optionKey,\n optionId: matchedOption.id,\n options: optionLabels,\n optionValues: convertOptionValuesToRecord(\n matchedOption.option_values,\n matchedOption.option_values_localized\n ),\n quantity: 1,\n stock: matchedOption.stock_quantity ?? 999,\n unitPrice,\n unitPriceFormatted: formatPrice(unitPrice, preferredCurrency),\n totalPrice: blockUnitTotal,\n totalPriceFormatted: formatPrice(blockUnitTotal, preferredCurrency),\n multiCurrencyUnitPrice: matchedOption.multi_currency_selling_price,\n multiCurrencyTotalPrice: recalcMultiCurrencyTotal(\n matchedOption.multi_currency_selling_price as any,\n 1,\n additionalOptionsTotal\n ),\n additionalOptionSelections,\n additionalOptionsTotal,\n };\n\n const nextItems = [...items, newItem];\n context.setState?.({\n selectedOptionItems: nextItems,\n selectedTotalMultiCurrency: buildSelectedTotalMultiCurrency(nextItems),\n currentSelection: {},\n __mergeMode: 'shallow',\n });\n}\n\n/**\n * 선택된 상품의 수량 변경 및 가격 재계산\n *\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function updateSelectedItemQuantityHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as UpdateQuantityParams;\n if (!params) return;\n\n const { selectedOptionItems, preferredCurrency } = params;\n // $args[0]이 문자열로 전달될 수 있으므로 Number 변환\n const itemIndex = Number(params.itemIndex) || 0;\n const newQuantity = Number(params.newQuantity) || 1;\n\n const updatedItems = (selectedOptionItems ?? []).map((item, idx) => {\n if (idx !== itemIndex) return item;\n\n const unitPrice = item?.unitPrice ?? 0;\n const additionalOptionsTotal = item?.additionalOptionsTotal ?? 0;\n const totalPrice = (unitPrice + additionalOptionsTotal) * newQuantity;\n return {\n ...item,\n quantity: newQuantity,\n totalPrice,\n totalPriceFormatted: formatPrice(totalPrice, preferredCurrency),\n multiCurrencyTotalPrice: recalcMultiCurrencyTotal(\n item?.multiCurrencyUnitPrice,\n newQuantity,\n additionalOptionsTotal\n ),\n };\n });\n\n context.setState?.({\n selectedOptionItems: updatedItems,\n selectedTotalMultiCurrency: buildSelectedTotalMultiCurrency(updatedItems),\n });\n}\n\n/**\n * 블럭별 추가옵션 선택 변경 및 가격 재계산\n *\n * 특정 옵션 블럭의 추가옵션 그룹 선택을 갱신하고, 추가금 합계·소계·다통화를 재계산한다.\n * 가격 표시는 클라이언트 계산이며 결제금액 SSoT 는 서버(plan D13).\n *\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function setBlockAdditionalOptionHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as SetBlockAdditionalOptionParams;\n if (!params) return;\n\n const { selectedOptionItems, additionalOptionGroups, preferredCurrency } = params;\n const itemIndex = Number(params.itemIndex) || 0;\n const additionalOptionId = Number(params.additionalOptionId);\n // customText 키가 params 에 존재하면 직접입력 모드 (value 선택 변경 아님)\n const isCustomTextMode = Object.prototype.hasOwnProperty.call(params, 'customText');\n // 빈 문자열(플레이스홀더) 선택 시 해당 그룹 선택 해제\n const valueId = params.valueId === '' || params.valueId == null ? null : Number(params.valueId);\n\n const updatedItems = (selectedOptionItems ?? []).map((item, idx) => {\n if (idx !== itemIndex) return item;\n\n const selections: AdditionalOptionSelections = { ...(item.additionalOptionSelections ?? {}) };\n const customTexts: Record = { ...(item.additionalOptionCustomTexts ?? {}) };\n\n if (isCustomTextMode) {\n // 직접입력 모드: 텍스트만 갱신 (선택 value 는 유지)\n const text = String(params.customText ?? '');\n if (text.trim() === '') {\n delete customTexts[additionalOptionId];\n } else {\n customTexts[additionalOptionId] = text;\n }\n } else if (valueId == null) {\n // 그룹 선택 해제 → 선택·직접입력 모두 정리\n delete selections[additionalOptionId];\n delete customTexts[additionalOptionId];\n } else {\n selections[additionalOptionId] = valueId;\n // 새 선택지가 직접입력을 허용하지 않으면 기존 직접입력 텍스트 정리\n const group = (additionalOptionGroups ?? []).find((g) => g.id === additionalOptionId);\n const value = group?.values?.find((v) => v.id === valueId);\n if (!value?.allow_custom_text) {\n delete customTexts[additionalOptionId];\n }\n }\n\n const additionalOptionsTotal = computeAdditionalOptionsTotal(selections, additionalOptionGroups);\n const unitPrice = item?.unitPrice ?? 0;\n const quantity = item?.quantity ?? 1;\n const totalPrice = (unitPrice + additionalOptionsTotal) * quantity;\n\n return {\n ...item,\n additionalOptionSelections: selections,\n additionalOptionCustomTexts: customTexts,\n additionalOptionsTotal,\n totalPrice,\n totalPriceFormatted: formatPrice(totalPrice, preferredCurrency),\n multiCurrencyTotalPrice: recalcMultiCurrencyTotal(\n item?.multiCurrencyUnitPrice,\n quantity,\n additionalOptionsTotal\n ),\n };\n });\n\n context.setState?.({\n selectedOptionItems: updatedItems,\n selectedTotalMultiCurrency: buildSelectedTotalMultiCurrency(updatedItems),\n });\n}\n\n/**\n * 선택된 옵션 항목을 제거하고 통화별 합계를 재계산합니다.\n *\n * 레이아웃에서 filter 로 직접 제거하면 selectedTotalMultiCurrency(통화별 합계 포맷)를\n * 갱신할 수 없어(표현식은 핸들러 호출 불가) stale 합계가 남는다. 제거도 핸들러로 처리해\n * 합계 맵을 함께 재계산한다(D2).\n *\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function removeSelectedItemHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as { itemIndex?: number | string; selectedOptionItems?: SelectedItem[] };\n if (!params) return;\n\n const itemIndex = Number(params.itemIndex) || 0;\n const nextItems = (params.selectedOptionItems ?? []).filter((_, idx) => idx !== itemIndex);\n\n context.setState?.({\n selectedOptionItems: nextItems,\n selectedTotalMultiCurrency: buildSelectedTotalMultiCurrency(nextItems),\n });\n}\n\n/**\n * 옵션 없는 상품의 수량을 변경하고 통화별 총액 포맷 맵을 재계산합니다.\n *\n * 옵션 없는 상품 총액 = 단가 × 수량. 레이아웃 표현식은 핸들러를 호출할 수 없어\n * 통화별 포맷(소수점/기호)을 만들 수 없으므로, 수량 변경 시 통화별 총액 formatted 를\n * noOptionTotalMultiCurrency 에 미리 계산해 노출한다(KRW 고정 결함 D3 해소).\n *\n * @param action.params.newQuantity 변경 수량\n * @param action.params.multiCurrencyUnitPrice 단가 통화맵(product.multi_currency_selling_price)\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function updateNoOptionQuantityHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as {\n newQuantity?: number | string;\n multiCurrencyUnitPrice?: Record;\n };\n if (!params) return;\n\n const quantity = Math.max(1, Number(params.newQuantity) || 1);\n\n context.setState?.({\n noOptionQuantity: quantity,\n noOptionTotalMultiCurrency: recalcMultiCurrencyTotal(\n params.multiCurrencyUnitPrice as Record | undefined,\n quantity\n ),\n });\n}","/**\n * 장바구니 관련 핸들러\n *\n * 장바구니 페이지에서 상품 선택, 옵션 변경, 삭제 등을 처리합니다.\n *\n * 핸들러 시그니처: ActionDispatcher의 ActionHandler 형식을 따름\n * (action: ActionDefinition, context: ActionContext) => void | Promise\n *\n * G7Core API 사용:\n * - G7Core.state.setLocal() - 로컬 상태 설정\n * - G7Core.state.getLocal() - 로컬 상태 조회\n * - G7Core.toast?.show() - 토스트 표시\n * - G7Core.t() - 번역\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:Cart')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:Cart]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:Cart]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:Cart]', ...args),\n};\n\n/**\n * 로컬 상태 설정 헬퍼\n */\nfunction setLocalState(updates: Record): void {\n const G7Core = (window as any).G7Core;\n if (G7Core?.state?.setLocal) {\n G7Core.state.setLocal(updates);\n logger.log('Local state updated:', updates);\n } else {\n logger.warn('G7Core.state.setLocal not available');\n }\n}\n\n/**\n * 로컬 상태 조회 헬퍼\n */\nfunction getLocalState(): Record {\n const G7Core = (window as any).G7Core;\n return G7Core?.state?.getLocal?.() || {};\n}\n\n/**\n * 전역 상태 조회 헬퍼\n */\nfunction getGlobalState(): Record {\n const G7Core = (window as any).G7Core;\n return G7Core?.state?.get?.() || {};\n}\n\n/**\n * 토스트 표시 헬퍼\n */\nfunction showToast(message: string, type: 'success' | 'error' | 'warning' | 'info' = 'info'): void {\n const G7Core = (window as any).G7Core;\n if (G7Core?.toast?.show) {\n G7Core.toast.show(message, type);\n } else {\n logger.warn('G7Core.toast.show not available, message:', message);\n }\n}\n\n/**\n * 번역 헬퍼\n */\nfunction t(key: string): string {\n const G7Core = (window as any).G7Core;\n if (G7Core?.t) {\n return G7Core.t(key);\n }\n return key;\n}\n\n/**\n * 장바구니 데이터소스 재조회 헬퍼\n *\n * 선택된 상품 기준으로 계산 결과를 갱신합니다.\n * selected_ids 파라미터를 전달하여 선택된 아이템만 계산합니다.\n */\nfunction refetchCartItems(): void {\n const G7Core = (window as any).G7Core;\n if (G7Core?.dispatch) {\n const localState = getLocalState();\n const selectedItems = localState.selectedItems || [];\n\n G7Core.dispatch({\n handler: 'refetchDataSource',\n params: {\n dataSourceId: 'cartItems',\n },\n });\n logger.log('Refetching cartItems with selected_ids:', selectedItems);\n } else {\n logger.warn('G7Core.dispatch not available');\n }\n}\n\n/**\n * 장바구니 개별 상품 선택/해제\n *\n * 체크박스 상태 변경 시 selectedItems 배열을 업데이트하고,\n * 선택된 상품 기준으로 주문 계산을 다시 요청합니다.\n *\n * @param action 액션 정의 (params에 itemId, selectedItems 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function toggleCartItemSelectionHandler(\n action?: any,\n _context?: any\n): void {\n const { itemId, selectedItems } = action?.params || {};\n const currentSelected = selectedItems || [];\n\n let newSelected: number[];\n if (currentSelected.includes(itemId)) {\n // 이미 선택되어 있으면 제거\n newSelected = currentSelected.filter((id: number) => id !== itemId);\n } else {\n // 선택되어 있지 않으면 추가\n newSelected = [...currentSelected, itemId];\n }\n\n // 전체 선택 상태도 업데이트\n const globalState = getGlobalState();\n const allItems = globalState.cartItems?.data?.items || [];\n const allSelected = allItems.length > 0 && newSelected.length === allItems.length;\n\n setLocalState({\n selectedItems: newSelected,\n allSelected,\n selectedCount: newSelected.length,\n });\n\n // 선택 변경 후 계산 결과 갱신을 위해 데이터소스 재조회\n refetchCartItems();\n}\n\n/**\n * 장바구니 전체 선택/해제\n *\n * 전체 선택 체크박스 상태 변경 시 모든 상품을 선택하거나 해제하고,\n * 선택된 상품 기준으로 주문 계산을 다시 요청합니다.\n *\n * @param action 액션 정의 (params에 allItemIds, isSelected 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function selectAllCartItemsHandler(\n action?: any,\n _context?: any\n): void {\n const { allItemIds, isSelected } = action?.params || {};\n\n setLocalState({\n selectedItems: isSelected ? allItemIds : [],\n allSelected: isSelected,\n selectedCount: isSelected ? allItemIds.length : 0,\n });\n\n // 선택 변경 후 계산 결과 갱신을 위해 데이터소스 재조회\n refetchCartItems();\n}\n\n/**\n * 옵션 변경 모달에서 옵션 값 설정\n *\n * 옵션 선택 시 selectedOptions 상태를 업데이트합니다.\n *\n * @param action 액션 정의 (params에 optionName, optionValue 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function setCartOptionHandler(\n action?: any,\n _context?: any\n): void {\n const { optionName, optionValue } = action?.params || {};\n const localState = getLocalState();\n const currentOptions = localState.selectedOptions || {};\n\n setLocalState({\n selectedOptions: {\n ...currentOptions,\n [optionName]: optionValue,\n },\n });\n}\n\n/**\n * 삭제 확인 모달 열기\n *\n * 선택된 상품 삭제 버튼 클릭 시 삭제 확인 모달을 엽니다.\n *\n * @param action 액션 정의 (params에 targetIds 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function openCartDeleteModalHandler(\n action?: any,\n _context?: any\n): void {\n const { targetIds } = action?.params || {};\n\n if (!targetIds || targetIds.length === 0) {\n showToast(t('shop.cart.select_items_to_delete'), 'warning');\n return;\n }\n\n setLocalState({\n deleteModal: {\n visible: true,\n targetIds,\n },\n });\n}\n\n/**\n * 옵션 변경 모달 열기\n *\n * 상품 옵션 변경 버튼 클릭 시 옵션 변경 모달을 엽니다.\n *\n * @param action 액션 정의 (params에 targetItem 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function openCartOptionModalHandler(\n action?: any,\n _context?: any\n): void {\n const { targetItem } = action?.params || {};\n\n setLocalState({\n optionModal: {\n visible: true,\n targetItem,\n },\n selectedOptions: targetItem?.options || {},\n selectedQuantity: targetItem?.quantity,\n });\n}\n\n/**\n * 장바구니 아이템 선택 후 계산 갱신 요청\n *\n * 선택된 아이템이 변경되면 서버에 계산 요청을 보냅니다.\n *\n * @param action 액션 정의 (params에 selectedItems 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function recalculateCartHandler(\n action?: any,\n _context?: any\n): void {\n const { selectedItems } = action?.params || {};\n\n if (!selectedItems || selectedItems.length === 0) {\n setLocalState({ isCalculating: false });\n return;\n }\n\n setLocalState({ isCalculating: true });\n\n // 계산은 cartItems 데이터 소스 refetch로 처리됨\n // 추가 API 호출이 필요한 경우 여기서 처리\n}\n","/**\n * 장바구니 옵션 변경 관련 핸들러\n *\n * 장바구니 옵션 변경 모달에서 옵션 선택 및 매칭을 처리합니다.\n *\n * 핸들러 시그니처: ActionDispatcher의 ActionHandler 형식을 따름\n * (action: ActionDefinition, context: ActionContext) => void | Promise | any\n *\n * ⚠️ 중요: 커스텀 핸들러에서 dispatch({ target: 'local' })를 사용하면\n * 핸들러 실행 컨텍스트의 _local에 저장됩니다. iteration 내부에서 호출되면\n * 페이지 레벨 _local과 다른 스코프에 저장됩니다.\n *\n * 해결책: 핸들러가 결과를 반환하고, 레이아웃의 onSuccess에서 setState 실행\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:CartOptionChange')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:CartOptionChange]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:CartOptionChange]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:CartOptionChange]', ...args),\n};\n\n/**\n * 옵션 그룹 구조 (다국어 지원)\n * API 응답: { name: {ko: \"색상\", en: \"Color\"}, name_localized: \"색상\", values: [...], values_localized: [...] }\n */\ninterface OptionGroup {\n name: string | Record;\n name_localized?: string;\n values: string[] | Array>;\n values_localized?: string[];\n}\n\n/**\n * 옵션 값 항목 (다국어 지원 배열 형식)\n */\ninterface OptionValueItem {\n key: string | Record;\n value: string | Record;\n}\n\ninterface ProductOption {\n id: number;\n option_values: OptionValueItem[] | Record;\n option_values_localized?: Record;\n option_name: string | Record;\n option_name_localized?: string;\n selling_price_formatted: string;\n stock_quantity: number;\n}\n\ninterface InitCartOptionResult {\n selectedOptions: Record;\n matchedOption: ProductOption | null;\n}\n\n/**\n * 옵션 그룹의 키 (name_localized 우선, 폴백으로 name)\n */\nfunction getGroupKey(group: OptionGroup): string {\n if (group.name_localized) return group.name_localized;\n if (typeof group.name === 'string') return group.name;\n return (group.name as Record)?.ko ?? '';\n}\n\n/**\n * option_values에서 특정 그룹 키의 값 추출\n * 배열 형식(신규)과 객체 형식(레거시) 모두 지원\n */\nfunction getOptionValueByGroupKey(\n optionValues: OptionValueItem[] | Record,\n optionValuesLocalized: Record | undefined,\n groupKey: string\n): string | undefined {\n // option_values_localized가 있으면 우선 사용\n if (optionValuesLocalized && groupKey in optionValuesLocalized) {\n return optionValuesLocalized[groupKey];\n }\n\n // 배열 형식 (신규)\n if (Array.isArray(optionValues)) {\n const item = optionValues.find(v => {\n if (typeof v.key === 'string') return v.key === groupKey;\n return (v.key as Record)?.ko === groupKey || Object.values(v.key).includes(groupKey);\n });\n if (item) {\n if (typeof item.value === 'string') return item.value;\n return (item.value as Record)?.ko ?? Object.values(item.value)[0];\n }\n return undefined;\n }\n\n // 객체 형식 (레거시)\n return optionValues[groupKey];\n}\n\n/**\n * 선택된 옵션 조합에 맞는 product_option 찾기 (내부 함수)\n * name_localized를 키로 사용하여 선택값과 비교\n */\nfunction findMatchingOption(\n selectedOptions: Record,\n optionGroups: OptionGroup[],\n options: ProductOption[]\n): ProductOption | null {\n if (!selectedOptions || !optionGroups?.length) {\n return null;\n }\n\n // 모든 옵션 그룹이 선택되었는지 확인 (name_localized 키 사용)\n const allSelected = optionGroups.every((group) => {\n const groupKey = getGroupKey(group);\n return selectedOptions[groupKey];\n });\n if (!allSelected) {\n logger.log('Not all options selected yet');\n return null;\n }\n\n // 일치하는 옵션 조합 찾기\n const matched = options?.find((opt) =>\n optionGroups.every((group) => {\n const groupKey = getGroupKey(group);\n const optValue = getOptionValueByGroupKey(\n opt.option_values,\n opt.option_values_localized,\n groupKey\n );\n return optValue === selectedOptions[groupKey];\n })\n );\n\n return matched || null;\n}\n\n/**\n * 선택된 옵션 조합에 맞는 product_option 찾기\n *\n * 모든 옵션 그룹이 선택되면 일치하는 옵션 조합을 찾아 반환합니다.\n * selectedOptions 구조: { \"색상\": \"화이트\", \"사이즈\": \"S\" }\n *\n * @param action 액션 정의 (params에 selectedOptions, optionGroups, options 포함)\n * @returns { matchedOption: ProductOption | null }\n */\nexport function findMatchingOptionHandler(\n action?: any,\n _context?: any\n): { matchedOption: ProductOption | null } {\n const { selectedOptions, optionGroups, options } = action?.params || {};\n\n logger.log('findMatchingOption called:', { selectedOptions, optionGroups, optionsCount: options?.length });\n\n const matchedOption = findMatchingOption(selectedOptions, optionGroups, options);\n\n logger.log('Matched option:', matchedOption);\n\n // 결과 반환 - 레이아웃의 onSuccess에서 {{response.matchedOption}}으로 접근\n return { matchedOption };\n}\n\n/**\n * 현재 장바구니 아이템의 옵션을 초기 선택값으로 설정\n *\n * 모달이 열릴 때 현재 아이템의 옵션을 선택 상태로 초기화합니다.\n * currentOptionValues 구조: { \"색상\": \"블랙\", \"사이즈\": \"S\" }\n *\n * @param action 액션 정의 (params에 currentOptionValues, optionGroups, options 포함)\n * @returns { selectedOptions: Record, matchedOption: ProductOption | null }\n */\nexport function initCartOptionSelectionHandler(\n action?: any,\n _context?: any\n): InitCartOptionResult {\n const { currentOptionValues, optionGroups, options } = action?.params || {};\n\n logger.log('initCartOptionSelection called:', { currentOptionValues, optionGroups, optionsCount: options?.length });\n\n if (!optionGroups?.length || !currentOptionValues) {\n logger.log('No option groups or current values, returning empty');\n return { selectedOptions: {}, matchedOption: null };\n }\n\n // currentOptionValues를 그대로 selectedOptions로 사용\n // 둘 다 { \"색상\": \"블랙\", \"사이즈\": \"S\" } 형식 (name_localized 키 사용)\n const selectedOptions: Record = {};\n for (const group of optionGroups) {\n const groupKey = getGroupKey(group);\n const currentValue = currentOptionValues[groupKey];\n // values_localized가 있으면 우선 사용, 없으면 values 사용\n const valuesArray = group.values_localized ?? (\n Array.isArray(group.values)\n ? group.values.map((v: string | Record) => typeof v === 'string' ? v : (v as Record)?.ko ?? '')\n : []\n );\n if (currentValue && valuesArray.includes(currentValue)) {\n selectedOptions[groupKey] = currentValue;\n }\n }\n\n logger.log('Initial selectedOptions:', selectedOptions);\n\n // 매칭 옵션도 즉시 찾기\n const matchedOption = findMatchingOption(selectedOptions, optionGroups, options || []);\n\n logger.log('Matched option:', matchedOption);\n\n // 결과 반환 - 레이아웃의 onSuccess에서 {{response.selectedOptions}}, {{response.matchedOption}}으로 접근\n return { selectedOptions, matchedOption };\n}\n","/**\n * 로컬 스토리지 관련 핸들러\n *\n * 비로그인 사용자의 장바구니 키 등 클라이언트 스토리지 관리를 처리합니다.\n *\n * 핸들러 시그니처: ActionDispatcher의 ActionHandler 형식을 따름\n * (action: ActionDefinition, context: ActionContext) => void | Promise\n *\n * G7Core API 사용:\n * - G7Core.state.set() - 전역 상태 설정\n * - G7Core.state.get()._global?.currentUser - 현재 사용자 확인\n */\n\nconst CART_KEY_STORAGE_NAME = 'g7_cart_key';\nconst CART_KEY_API_ENDPOINT = '/api/modules/sirsoft-ecommerce/cart/key';\nconst GUEST_ORDER_TOKEN_STORAGE_NAME = 'g7_guest_order_token';\nconst GUEST_ORDER_NUMBER_STORAGE_NAME = 'g7_guest_order_number';\nconst GUEST_ORDER_EXPIRES_AT_STORAGE_NAME = 'g7_guest_order_expires_at';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:Storage')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:Storage]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:Storage]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:Storage]', ...args),\n};\n\n/**\n * 백엔드 API를 통해 Cart Key 발급\n *\n * @returns 발급된 cart_key 또는 null (실패 시)\n */\nasync function issueCartKeyFromApi(): Promise {\n try {\n const response = await fetch(CART_KEY_API_ENDPOINT, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n });\n\n if (!response.ok) {\n logger.error('Failed to issue cartKey from API:', response.status);\n return null;\n }\n\n const data = await response.json();\n return data.data?.cart_key || null;\n } catch (error) {\n logger.error('Error issuing cartKey from API:', error);\n return null;\n }\n}\n\n/**\n * 전역 상태 설정 헬퍼\n */\nfunction setGlobalState(updates: Record): void {\n const G7Core = (window as any).G7Core;\n if (G7Core?.state?.set) {\n G7Core.state.set(updates);\n logger.log('Global state updated:', updates);\n } else {\n logger.warn('G7Core.state.set not available');\n }\n}\n\n/**\n * 현재 로그인 사용자 확인 헬퍼\n *\n * G7Config.user 또는 전역 상태에서 currentUser를 확인합니다.\n */\nfunction getCurrentUser(): any {\n try {\n // G7Config에서 사용자 정보 확인 (서버에서 주입)\n const g7Config = (window as any).G7Config;\n if (g7Config?.user) {\n return g7Config.user;\n }\n\n // 전역 상태에서 확인\n const G7Core = (window as any).G7Core;\n const globalState = G7Core?.state?.get?.() || {};\n return globalState.currentUser || null;\n } catch {\n return null;\n }\n}\n\n/**\n * 장바구니 키 초기화\n *\n * 비로그인 사용자의 장바구니를 식별하기 위한 키를 생성/로드합니다.\n * 이미 저장된 키가 있으면 로드하고, 없으면 백엔드 API를 통해 새로 발급합니다.\n *\n * ActionDispatcher 핸들러 형식: (action, context) => void | Promise\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport async function initCartKeyHandler(\n _action?: any,\n _context?: any\n): Promise {\n // 로그인/비로그인 사용자 모두 cartKey 필요 (API 헤더에 포함)\n // localStorage에서 기존 cartKey 확인\n let cartKey: string | null = null;\n try {\n cartKey = localStorage.getItem(CART_KEY_STORAGE_NAME);\n } catch {\n // localStorage 접근 불가 시 무시\n }\n\n // 없으면 백엔드 API를 통해 새로 발급\n if (!cartKey) {\n cartKey = await issueCartKeyFromApi();\n\n if (cartKey) {\n try {\n localStorage.setItem(CART_KEY_STORAGE_NAME, cartKey);\n logger.log('New cartKey issued from API:', cartKey);\n } catch {\n // localStorage 저장 실패 시 무시\n }\n } else {\n logger.error('Failed to issue cartKey from API');\n }\n } else {\n logger.log('Existing cartKey loaded:', cartKey);\n }\n\n setGlobalState({ cartKey });\n}\n\n/**\n * 장바구니 키 가져오기\n *\n * 현재 저장된 장바구니 키를 반환합니다.\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function getCartKeyHandler(\n _action?: any,\n _context?: any\n): string | null {\n try {\n return localStorage.getItem(CART_KEY_STORAGE_NAME);\n } catch {\n return null;\n }\n}\n\n/**\n * 장바구니 키 삭제\n *\n * 로그인 시 게스트 장바구니 키를 삭제합니다 (서버에서 병합 후).\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function clearCartKeyHandler(\n _action?: any,\n _context?: any\n): void {\n try {\n localStorage.removeItem(CART_KEY_STORAGE_NAME);\n logger.log('cartKey removed from localStorage');\n } catch {\n // localStorage 접근 불가 시 무시\n }\n\n setGlobalState({ cartKey: null });\n}\n\n/**\n * 장바구니 키 새로 생성\n *\n * 기존 키를 삭제하고 백엔드 API를 통해 새로운 키를 발급합니다.\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport async function regenerateCartKeyHandler(\n _action?: any,\n _context?: any\n): Promise {\n // 로그인된 사용자는 cartKey 불필요\n const currentUser = getCurrentUser();\n if (currentUser) {\n clearCartKeyHandler();\n return;\n }\n\n const newCartKey = await issueCartKeyFromApi();\n\n if (newCartKey) {\n try {\n localStorage.setItem(CART_KEY_STORAGE_NAME, newCartKey);\n logger.log('New cartKey regenerated from API:', newCartKey);\n } catch {\n // localStorage 저장 실패 시 무시\n }\n\n setGlobalState({ cartKey: newCartKey });\n } else {\n logger.error('Failed to regenerate cartKey from API');\n }\n}\n\n/**\n * 선호 통화 저장 (기존 loadPreferredCurrency.ts와 통합)\n *\n * @param action 액션 정의 (params에 key, value 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function saveToStorageHandler(\n action?: any,\n _context?: any\n): void {\n const { key, value } = action?.params || {};\n if (!key) {\n logger.warn('saveToStorage: key is required');\n return;\n }\n try {\n localStorage.setItem(key, value);\n logger.log('Saved to storage:', key, value);\n } catch {\n // localStorage 저장 실패 시 무시\n }\n}\n\n/**\n * 스토리지에서 값 로드\n *\n * @param action 액션 정의 (params에 key, defaultValue 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function loadFromStorageHandler(\n action?: any,\n _context?: any\n): string | null {\n const { key, defaultValue } = action?.params || {};\n if (!key) {\n logger.warn('loadFromStorage: key is required');\n return defaultValue || null;\n }\n try {\n return localStorage.getItem(key) || defaultValue || null;\n } catch {\n return defaultValue || null;\n }\n}\n\n/**\n * sessionStorage 의 비회원 주문 토큰을 모두 삭제합니다 (내부 헬퍼).\n *\n * 토큰/주문번호/만료시각 3개 키를 함께 비웁니다.\n */\nfunction clearGuestOrderTokenInternal(): void {\n try {\n sessionStorage.removeItem(GUEST_ORDER_TOKEN_STORAGE_NAME);\n sessionStorage.removeItem(GUEST_ORDER_NUMBER_STORAGE_NAME);\n sessionStorage.removeItem(GUEST_ORDER_EXPIRES_AT_STORAGE_NAME);\n } catch {\n // sessionStorage 접근 불가 시 무시\n }\n}\n\n/**\n * 비회원 주문 조회 토큰 초기화 (init_actions 전용)\n *\n * sessionStorage 의 g7_guest_order_token 을 읽어 `_global.guestOrderToken` 에 설정한다.\n * 표준 loadFromSessionStorage 핸들러는 `context.setState`(React 컴포넌트 state)를 호출해\n * `_local` 에만 영향을 주므로, `_global` 에 토큰을 설정하려면 `G7Core.state.set` 직접 호출이 필요하다.\n * `initCartKey` 와 동일한 패턴.\n *\n * 동작:\n * 1. sessionStorage 에서 토큰/만료시각 로드 (탭 종료 시 자동 소실 — 공유 PC 안전)\n * 2. 만료된 토큰은 자동 폐기 (3개 키 모두 제거)\n * 3. `_global.guestOrderToken` 에 토큰 또는 null 설정\n * 4. `_user_base.globalHeaders` 의 `X-Guest-Order-Token: {{_global.guestOrderToken}}` 패턴이\n * 토큰 있을 때만 `guest/orders/*` 호출에 헤더 자동 주입 (엔진이 null/빈값 자동 제외)\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function initGuestOrderTokenHandler(\n _action?: any,\n _context?: any\n): void {\n let token: string | null = null;\n let expiresAt: string | null = null;\n try {\n token = sessionStorage.getItem(GUEST_ORDER_TOKEN_STORAGE_NAME);\n expiresAt = sessionStorage.getItem(GUEST_ORDER_EXPIRES_AT_STORAGE_NAME);\n } catch {\n // sessionStorage 접근 불가 시 무시\n }\n\n // 만료된 토큰 자동 폐기 (백엔드도 동일 시각 기준으로 거부하지만 로컬에서 미리 정리)\n // expiresAt 이 invalid 포맷이면 getTime() 이 NaN → NaN <= now 비교가 false 라\n // 만료 인식이 안 되는 회귀를 방어한다. invalid 토큰도 명시적으로 폐기.\n let expired = false;\n if (token) {\n const expiryTs = expiresAt ? new Date(expiresAt).getTime() : NaN;\n if (isNaN(expiryTs) || expiryTs <= Date.now()) {\n clearGuestOrderTokenInternal();\n token = null;\n expired = true;\n }\n }\n\n if (token) {\n // sessionStorage 에 유효 토큰이 있으면 그 값으로 _global 동기화 (새로고침/재방문 경로)\n setGlobalState({ guestOrderToken: token });\n logger.log('Guest order token loaded from sessionStorage');\n return;\n }\n\n // sessionStorage 에 토큰이 없을 때, 직전 단계(verify onSuccess saveGuestOrderToken)가\n // 이미 _global.guestOrderToken 에 동기 set 해 둔 in-memory 토큰을 보존한다.\n // 조회 폼 verify→상세 SPA 전이에서 sessionStorage 쓰기가 제때 반영되지 않거나\n // (브라우저/프라이버시 모드) 비활성인 환경에서도, navigate 로 살아남은 _global 토큰으로\n // 상세 데이터소스가 X-Guest-Order-Token 을 주입할 수 있게 한다.\n // 단, 만료로 명시 폐기된 경우(expired)는 in-memory 토큰도 비운다.\n if (!expired) {\n const G7Core = (window as any).G7Core;\n const existing = G7Core?.state?.get?.('_global')?.guestOrderToken;\n if (typeof existing === 'string' && existing !== '') {\n logger.log('Guest order token preserved from in-memory _global (sessionStorage empty)');\n return;\n }\n }\n\n setGlobalState({ guestOrderToken: null });\n logger.log('No guest order token (visitor not authenticated)');\n}\n\n// 표시 통화(preferredCurrency) 초기화 핸들러는 이커머스 모듈로 이전되었다\n// (modules/_bundled/sirsoft-ecommerce/resources/js/handlers/initPreferredCurrency.ts).\n// \"통화 = 커머스 책임\" 원칙 — 레이아웃은 `sirsoft-ecommerce.initPreferredCurrency` 로 호출한다.\n\n/**\n * 비회원 주문 토큰을 sessionStorage 에 저장하고 _global 에 동기 set 합니다.\n *\n * 토큰/주문번호/만료시각 3개 키를 함께 저장하며, _global.guestOrderToken 도 즉시 갱신해\n * 직후 호출되는 navigate 의 globalHeaders 자동 주입이 동작하도록 한다.\n *\n * @param action params.token, params.orderNumber, params.expiresAt 필수\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function saveGuestOrderTokenHandler(\n action?: any,\n _context?: any\n): void {\n const { token, orderNumber, expiresAt } = action?.params || {};\n if (!token || !orderNumber || !expiresAt) {\n logger.warn('saveGuestOrderToken: token, orderNumber, expiresAt are required');\n return;\n }\n try {\n sessionStorage.setItem(GUEST_ORDER_TOKEN_STORAGE_NAME, token);\n sessionStorage.setItem(GUEST_ORDER_NUMBER_STORAGE_NAME, orderNumber);\n sessionStorage.setItem(GUEST_ORDER_EXPIRES_AT_STORAGE_NAME, expiresAt);\n } catch {\n // sessionStorage 접근 불가 시 무시 (private 모드 등) — _global 만 set 되어 현재 페이지는 동작\n }\n setGlobalState({ guestOrderToken: token });\n}\n\n/**\n * 비회원 주문 토큰을 sessionStorage 에서 삭제하고 _global 도 비웁니다.\n *\n * 비회원 주문 취소/구매확정/명시적 로그아웃 등 토큰 무효화 시점에서 호출.\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function clearGuestOrderTokenHandler(\n _action?: any,\n _context?: any\n): void {\n clearGuestOrderTokenInternal();\n setGlobalState({ guestOrderToken: null });\n}\n\n/**\n * 비회원 주문 조회 폼(guest_order_form) 진입 시 sessionStorage 의 비회원 주문 토큰을 초기화한다.\n *\n * 비회원 주문 조회 폼은 매번 새로 본인 확인을 거치는 게 표준 패턴(eBay/Best Buy/카페24/\n * 11번가/G마켓 등). 결제 직후 자동 verify 로 받은 토큰은 완료/상세 화면에서는 유효하지만,\n * 사용자가 헤더 '비회원 주문 조회' 메뉴 등을 통해 조회 폼에 도달했을 때는 의도가\n * \"다시 조회\" 이므로 토큰을 비워 폼이 정상 노출되도록 한다.\n *\n * 만료된 토큰도 같은 경로로 자연스럽게 정리된다.\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function clearGuestTokenOnEntryHandler(\n _action?: any,\n _context?: any\n): void {\n clearGuestOrderTokenInternal();\n setGlobalState({ guestOrderToken: null });\n}\n","/**\n * 다중 통화 가격 표시 핸들러\n *\n * 사용자가 선택한 통화에 맞는 가격 문자열을 반환합니다.\n */\n\nimport { HandlerContext } from '../types';\n\ninterface CurrencyPrice {\n value: number;\n formatted: string;\n}\n\ninterface Product {\n selling_price: number;\n selling_price_formatted: string;\n list_price?: number;\n list_price_formatted?: string;\n multi_currency_selling_price?: Record;\n multi_currency_list_price?: Record;\n [key: string]: unknown;\n}\n\ninterface GetDisplayPriceParams {\n product: Product;\n priceField: 'selling_price' | 'list_price';\n currencyCode?: string;\n}\n\n/**\n * 선호 통화에 맞는 가격을 반환합니다.\n *\n * @param params.product - 상품 객체\n * @param params.priceField - 가격 필드 ('selling_price' | 'list_price')\n * @param params.currencyCode - 통화 코드 (선택, 미지정 시 전역 설정 사용)\n * @param context - 핸들러 컨텍스트\n * @returns 포맷팅된 가격 문자열\n *\n * @example\n * // 레이아웃 JSON에서 사용\n * {\n * \"text\": \"{{handler('getDisplayPrice', { product: product.data, priceField: 'selling_price' })}}\"\n * }\n */\nexport function getDisplayPriceHandler(\n params: GetDisplayPriceParams,\n context: HandlerContext\n): string {\n const { product, priceField, currencyCode } = params;\n const preferredCurrency = currencyCode || context.getState('_global.preferredCurrency') || 'KRW';\n\n const multiCurrencyField = `multi_currency_${priceField}` as keyof Product;\n const multiCurrencyData = product[multiCurrencyField] as Record | undefined;\n\n if (multiCurrencyData && multiCurrencyData[preferredCurrency]) {\n return multiCurrencyData[preferredCurrency].formatted;\n }\n\n // 폴백: 기본 통화\n const formattedField = `${priceField}_formatted` as keyof Product;\n return (product[formattedField] as string) || String(product[priceField]);\n}\n","/**\n * 통화 포맷팅 핸들러\n *\n * 숫자 값을 통화 형식 문자열로 변환합니다.\n */\n\nimport { HandlerContext } from '../types';\n\ninterface FormatCurrencyParams {\n value: number;\n currencyCode?: string;\n locale?: string;\n}\n\ninterface CurrencyConfig {\n code: string;\n symbol: string;\n locale: string;\n decimals: number;\n}\n\n/**\n * 통화별 기본 설정\n */\nconst CURRENCY_CONFIGS: Record = {\n KRW: { code: 'KRW', symbol: '₩', locale: 'ko-KR', decimals: 0 },\n USD: { code: 'USD', symbol: '$', locale: 'en-US', decimals: 2 },\n JPY: { code: 'JPY', symbol: '¥', locale: 'ja-JP', decimals: 0 },\n CNY: { code: 'CNY', symbol: '¥', locale: 'zh-CN', decimals: 2 },\n EUR: { code: 'EUR', symbol: '€', locale: 'de-DE', decimals: 2 },\n};\n\n/**\n * 숫자 값을 통화 형식으로 포맷팅합니다.\n *\n * @param params.value - 포맷팅할 숫자 값\n * @param params.currencyCode - 통화 코드 (KRW, USD, JPY 등)\n * @param params.locale - 로케일 (선택, 미지정 시 통화 기본 로케일 사용)\n * @param context - 핸들러 컨텍스트\n * @returns 포맷팅된 통화 문자열\n *\n * @example\n * formatCurrencyHandler({ value: 10000, currencyCode: 'KRW' }, context)\n * // => \"₩10,000\" 또는 \"10,000원\"\n *\n * formatCurrencyHandler({ value: 99.99, currencyCode: 'USD' }, context)\n * // => \"$99.99\"\n */\nexport function formatCurrencyHandler(\n params: FormatCurrencyParams,\n context: HandlerContext\n): string {\n const { value, currencyCode, locale: customLocale } = params;\n const currency = currencyCode || context.getState('_global.preferredCurrency') || 'KRW';\n\n const config = CURRENCY_CONFIGS[currency] || CURRENCY_CONFIGS.KRW;\n const locale = customLocale || config.locale;\n\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: config.code,\n minimumFractionDigits: config.decimals,\n maximumFractionDigits: config.decimals,\n }).format(value);\n } catch {\n // Intl 지원 안 되는 환경 폴백\n const formatted = value.toLocaleString(undefined, {\n minimumFractionDigits: config.decimals,\n maximumFractionDigits: config.decimals,\n });\n return `${config.symbol}${formatted}`;\n }\n}\n\n/**\n * 통화 심볼만 반환합니다.\n *\n * @param currencyCode - 통화 코드\n * @returns 통화 심볼\n */\nexport function getCurrencySymbol(currencyCode: string): string {\n return CURRENCY_CONFIGS[currencyCode]?.symbol || currencyCode;\n}\n","/**\n * 선호 통화 로드 핸들러\n *\n * localStorage에서 사용자가 선택한 통화 설정을 로드합니다.\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:Currency')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:Currency]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:Currency]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:Currency]', ...args),\n};\n\nimport { HandlerContext } from '../types';\n\nconst STORAGE_KEY = 'g7_preferred_currency';\nconst DEFAULT_CURRENCY = 'KRW';\n\ninterface LoadPreferredCurrencyParams {\n defaultCurrency?: string;\n}\n\n/**\n * localStorage에서 선호 통화를 로드하여 전역 상태에 설정합니다.\n *\n * @param params.defaultCurrency - 기본 통화 (선택, 기본값: 'KRW')\n * @param context - 핸들러 컨텍스트\n * @returns 로드된 통화 코드\n *\n * @example\n * // _user_base.json의 init_actions에서 사용\n * {\n * \"init_actions\": [\n * {\n * \"handler\": \"loadPreferredCurrency\",\n * \"params\": { \"defaultCurrency\": \"KRW\" }\n * }\n * ]\n * }\n */\nexport function loadPreferredCurrencyHandler(\n params: LoadPreferredCurrencyParams,\n context: HandlerContext\n): string {\n const { defaultCurrency = DEFAULT_CURRENCY } = params;\n\n let currency = defaultCurrency;\n\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored && isValidCurrency(stored)) {\n currency = stored;\n }\n }\n } catch {\n // localStorage 접근 불가 시 기본값 사용\n logger.warn('localStorage 접근 불가, 기본 통화 사용:', defaultCurrency);\n }\n\n // 전역 상태에 설정\n context.setState('global', { preferredCurrency: currency });\n\n return currency;\n}\n\n/**\n * 선호 통화를 localStorage에 저장합니다.\n *\n * @param currencyCode - 저장할 통화 코드\n * @param context - 핸들러 컨텍스트\n *\n * @example\n * // 통화 선택 드롭다운에서 사용\n * {\n * \"actions\": [\n * {\n * \"type\": \"click\",\n * \"handler\": \"savePreferredCurrency\",\n * \"params\": { \"currencyCode\": \"{{currency.code}}\" }\n * }\n * ]\n * }\n */\nexport function savePreferredCurrencyHandler(\n params: { currencyCode: string },\n context: HandlerContext\n): void {\n const { currencyCode } = params;\n\n if (!isValidCurrency(currencyCode)) {\n logger.warn('유효하지 않은 통화 코드:', currencyCode);\n return;\n }\n\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(STORAGE_KEY, currencyCode);\n }\n } catch {\n logger.warn('localStorage 저장 실패');\n }\n\n // 전역 상태 업데이트\n context.setState('global', { preferredCurrency: currencyCode });\n}\n\n/**\n * 유효한 통화 코드 형식인지 확인합니다.\n *\n * 관리자가 추가/삭제하는 통화를 하드코딩 목록이 막지 않도록(A1-⑥), 고정 화이트리스트가 아니라\n * ISO 4217 형식(영문 대문자 3자리)으로 검증한다. 실제 노출 통화 제한은 셀렉터가 표시하는\n * _global.availableCurrencies(is_default || exchange_rate>0)가 담당한다.\n */\nfunction isValidCurrency(code: string): boolean {\n return typeof code === 'string' && /^[A-Z]{3}$/.test(code);\n}\n","/**\n * setTheme 핸들러\n *\n * 사용자가 선택한 테마(auto/light/dark)로 변경합니다.\n * localStorage에 g7_color_scheme 값을 저장하고 즉시 적용합니다.\n *\n * sirsoft-admin_basic 템플릿과 동일한 키를 사용하여 테마 설정을 공유합니다.\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:SetTheme')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:SetTheme]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:SetTheme]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:SetTheme]', ...args),\n};\n\n/**\n * 테마 모드 타입\n */\nexport type ThemeMode = 'auto' | 'light' | 'dark';\n\n/**\n * 유효한 테마 목록\n */\nconst VALID_THEMES: ThemeMode[] = ['auto', 'light', 'dark'];\n\n/**\n * localStorage 키 (admin 템플릿과 동일)\n */\nconst STORAGE_KEY = 'g7_color_scheme';\n\n/**\n * 실제 적용될 테마 결정 (auto인 경우 시스템 설정 반영)\n */\nconst getEffectiveTheme = (mode: ThemeMode): 'light' | 'dark' => {\n if (mode === 'auto') {\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n }\n return mode;\n};\n\n/**\n * 테마 적용\n *\n * document.documentElement에 data-theme 속성과 dark 클래스를 설정합니다.\n */\nconst applyTheme = (mode: ThemeMode): void => {\n const effectiveTheme = getEffectiveTheme(mode);\n document.documentElement.setAttribute('data-theme', effectiveTheme);\n\n // dark 클래스 토글 (Tailwind CSS dark: 모드 지원)\n if (effectiveTheme === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n};\n\n/**\n * 저장된 테마를 로드하여 적용합니다.\n *\n * 템플릿 초기화 시 호출되어 localStorage에 저장된 테마를 즉시 적용합니다.\n */\nexport function initTheme(): void {\n try {\n const savedTheme = localStorage.getItem(STORAGE_KEY) as ThemeMode | null;\n const theme = savedTheme && VALID_THEMES.includes(savedTheme) ? savedTheme : 'auto';\n applyTheme(theme);\n logger.log('Initial theme applied:', theme);\n } catch (error) {\n logger.warn('Failed to load initial theme:', error);\n applyTheme('auto');\n }\n}\n\n/**\n * initTheme 핸들러\n *\n * 레이아웃의 init_actions에서 호출되어 초기 테마를 적용합니다.\n * ActionDispatcher의 커스텀 핸들러 형식을 따릅니다.\n *\n * target 파라미터가 전달되면 해당 테마로 초기화합니다.\n * target이 없거나 유효하지 않으면 localStorage 또는 'auto'를 사용합니다.\n *\n * @param action 액션 정의 (target에 테마 값 포함 가능)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport async function initThemeHandler(\n action: any,\n _context?: any\n): Promise {\n // action.target이 바인딩 해결된 값으로 전달됨 (ActionDispatcher에서 resolveValue 호출)\n const targetTheme = action?.target;\n\n // target이 유효한 테마 값인 경우 해당 테마 적용\n if (targetTheme && typeof targetTheme === 'string' && VALID_THEMES.includes(targetTheme as ThemeMode)) {\n applyTheme(targetTheme as ThemeMode);\n return;\n }\n\n // target이 없거나 유효하지 않으면 기존 로직 (localStorage 또는 auto)\n initTheme();\n}\n\n/**\n * 테마 변경 핸들러\n *\n * ActionDispatcher는 handler(action, context) 형태로 호출합니다.\n * context 객체에는 { data, event, props, state, setState, navigate } 등이 포함됩니다.\n *\n * @param action 액션 정의\n * @param context 액션 컨텍스트 (ActionContext 타입)\n */\nexport async function setThemeHandler(\n action: any,\n _context?: any\n): Promise {\n // 1. 테마 값 추출\n let theme: string | undefined;\n\n // action.target이 바인딩 해결된 값으로 전달됨 (ActionDispatcher에서 resolveValue 호출)\n if (action?.target && typeof action.target === 'string' && !action.target.includes('{{')) {\n theme = action.target;\n }\n\n // 2. 유효성 검증\n if (!theme || typeof theme !== 'string') {\n logger.warn('Invalid theme:', theme);\n return;\n }\n\n if (!VALID_THEMES.includes(theme as ThemeMode)) {\n logger.warn('Unsupported theme:', theme);\n return;\n }\n\n const validTheme = theme as ThemeMode;\n\n // 3. localStorage에 저장\n try {\n localStorage.setItem(STORAGE_KEY, validTheme);\n } catch (error) {\n logger.error('Failed to save theme to localStorage:', error);\n return;\n }\n\n // 4. 테마 즉시 적용 (페이지 새로고침 없이)\n applyTheme(validTheme);\n\n logger.log('Theme changed to:', validTheme);\n}\n","/**\n * redirectToLoginWithReturn 핸들러\n *\n * 비로그인 회원전용 게시판/비밀글 진입 시 로그인 페이지로 보내되,\n * 현재 경로(pathname + querystring)를 redirect 파라미터로 보존한다.\n * 로그인 폼은 {{query.redirect ?? '/'}} 로 복원하므로(_login_form.json:155),\n * 로그인 성공 후 원래 위치로 복귀한다.\n *\n * 배경: 게시판 목록/상세 데이터소스 401(auth_mode: optional + 토큰 없음)은\n * 코어 ApiClient 자동가드를 우회하고 errorHandling 경로로 진입하는데,\n * 그 context 에는 route/query 가 없다(TemplateApp.ts setDefaultContext 는 navigate 만 주입).\n * 따라서 레이아웃 표현식으로는 현재 경로를 캡처할 수 없으므로, 핸들러가 window.location 을\n * 직접 읽어 우회한다(identityLauncher.ts 의 window.location.href 선례와 동일 패턴).\n *\n * window.location.pathname 은 항상 '/' 로 시작하는 same-origin path 이므로 외부 URL 주입이\n * 불가능하다(open redirect 안전).\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:RedirectToLoginWithReturn')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:RedirectToLoginWithReturn]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:RedirectToLoginWithReturn]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:RedirectToLoginWithReturn]', ...args),\n};\n\n/**\n * 로그인 페이지로 이동하되 현재 경로를 redirect 로 보존하는 핸들러\n *\n * ActionDispatcher 는 handler(action, context) 형태로 호출하지만(ActionDispatcher.ts),\n * 이 핸들러는 action/context 를 사용하지 않는다 — 현재 경로는 window.location 에서 직접 읽는다.\n *\n * @param _action 액션 정의 (미사용)\n * @param _context 액션 컨텍스트 (미사용)\n * @return Promise\n */\nexport async function redirectToLoginWithReturnHandler(\n _action?: any,\n _context?: any\n): Promise {\n const G7Core = (window as any).G7Core;\n\n if (!G7Core?.dispatch) {\n logger.error('G7Core.dispatch 가 초기화되지 않아 로그인 리다이렉트를 실행할 수 없습니다.');\n return;\n }\n\n // 핸들러는 표현식 화이트리스트 제약 밖 — window.location 직접 접근 가능.\n // pathname + search 로 현재 경로(쿼리스트링 포함)를 보존한다.\n const returnUrl = window.location.pathname + window.location.search;\n\n await G7Core.dispatch({\n handler: 'navigate',\n params: {\n path: '/login',\n // navigate 가 params.query 를 URLSearchParams 로 인코딩(ActionDispatcher.ts handleNavigate).\n // 로그인 폼은 {{query.redirect ?? '/'}} 로 복원(_login_form.json).\n query: { redirect: returnUrl },\n },\n });\n}\n","/**\n * downloadAttachment 핸들러\n *\n * 게시판 첨부파일을 토큰 동반 요청으로 다운로드한다 (이슈 #413 item 58b).\n *\n * 배경: 기존 다운로드는 레이아웃의 브라우저 직접 링크(GET)였다.\n * G7 은 Sanctum 토큰 전용 인증인데 네비게이션에는 Authorization 헤더(토큰)가 실리지 않아,\n * download_url 이 가리키는 optional.sanctum 라우트가 요청을 guest 로 통과시켰다.\n * 그 결과 회원이 받아도 서버의 Auth::id() 가 NULL 이 되어 활동이력(attachment.download)의\n * 행위자(user_id)가 비어 있었다(upload/board.update 는 정상이었다).\n *\n * 해소: 코어 ApiClient(G7Core.api.get)로 blob 요청을 보내면 Authorization 헤더가 자동 첨부되어\n * 토큰이 실린다. 받은 blob 을 objectURL 로 변환해 클릭으로 저장한다\n * (composite/ImageGallery.tsx 의 downloadAuthenticatedFile 과 동일 패턴).\n *\n * 비회원: 토큰이 없으므로 종전과 동일하게 user_id 가 NULL 로 남는다(현행 정책 유지).\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = (window as any).G7Core?.createLogger?.('Handler:DownloadAttachment') ?? {\n log: (...args: unknown[]) => console.log('[Handler:DownloadAttachment]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:DownloadAttachment]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:DownloadAttachment]', ...args),\n};\n\n/**\n * 첨부파일을 토큰 동반 요청으로 다운로드하는 핸들러\n *\n * ActionDispatcher 는 handler(action, context) 형태로 호출한다.\n * params 는 resolveParams 로 이미 표현식이 해석된 값을 받는다.\n *\n * @param action 액션 정의 (params.url=다운로드 URL, params.filename=저장 파일명)\n * @param _context 액션 컨텍스트 (미사용)\n * @return Promise\n */\nexport async function downloadAttachmentHandler(action?: any, _context?: any): Promise {\n const G7Core = (window as any).G7Core;\n const { url, filename } = action?.params || {};\n\n if (!url) {\n logger.warn('다운로드 URL 이 없어 요청을 건너뜁니다.');\n return;\n }\n\n if (!G7Core?.api?.get) {\n logger.error('G7Core.api.get 이 초기화되지 않아 다운로드를 실행할 수 없습니다.');\n return;\n }\n\n try {\n // 코어 ApiClient 경로 → Authorization(Bearer) 헤더 자동 첨부 → 회원 토큰이 실린다.\n const blob = await G7Core.api.get(url, { responseType: 'blob' });\n\n if (blob) {\n const objectUrl = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = objectUrl;\n link.download = filename || '';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(objectUrl);\n }\n } catch (error) {\n logger.error('첨부파일 다운로드 실패', error);\n G7Core?.toast?.error?.(G7Core?.t?.('common.download_failed') ?? 'Download failed');\n }\n}\n","/**\n * sirsoft-basic 템플릿 핸들러 등록\n *\n * 이 파일에서 모든 커스텀 핸들러를 export합니다.\n * G7Core에서 자동으로 로드하여 사용할 수 있습니다.\n */\n\n// 상품 옵션 관련 핸들러\nimport {\n addSelectedItemIfCompleteHandler,\n updateSelectedItemQuantityHandler,\n removeSelectedItemHandler,\n updateNoOptionQuantityHandler,\n setBlockAdditionalOptionHandler,\n} from './productOptions';\n\n// 장바구니 관련 핸들러\nimport {\n toggleCartItemSelectionHandler,\n selectAllCartItemsHandler,\n setCartOptionHandler,\n openCartDeleteModalHandler,\n openCartOptionModalHandler,\n recalculateCartHandler,\n} from './cartHandlers';\n\n// 장바구니 옵션 변경 관련 핸들러\nimport {\n findMatchingOptionHandler,\n initCartOptionSelectionHandler,\n} from './cartOptionChange';\n\n// 스토리지 관련 핸들러\nimport {\n initCartKeyHandler,\n getCartKeyHandler,\n clearCartKeyHandler,\n regenerateCartKeyHandler,\n saveToStorageHandler,\n loadFromStorageHandler,\n initGuestOrderTokenHandler,\n saveGuestOrderTokenHandler,\n clearGuestOrderTokenHandler,\n clearGuestTokenOnEntryHandler,\n} from './storageHandlers';\n\n// 다중 통화 관련 핸들러\nimport { getDisplayPriceHandler } from './getDisplayPrice';\nimport { formatCurrencyHandler, getCurrencySymbol } from './formatCurrency';\nimport {\n loadPreferredCurrencyHandler,\n savePreferredCurrencyHandler,\n} from './loadPreferredCurrency';\n\n// 테마 관련 핸들러\nimport { setThemeHandler, initThemeHandler } from './setThemeHandler';\n\n// 인증 리다이렉트 관련 핸들러\nimport { redirectToLoginWithReturnHandler } from './redirectToLoginWithReturn';\n\n// 게시판 첨부 다운로드 핸들러 (토큰 동반 → 활동이력 행위자 기록)\nimport { downloadAttachmentHandler } from './downloadAttachment';\n\n// 언어 관련 핸들러는 엔진 레벨(ActionDispatcher)에서 처리\n// setLocale 핸들러는 ActionDispatcher에 빌트인으로 등록되어 있음\n\n/**\n * sirsoft-basic 템플릿의 모든 커스텀 핸들러\n *\n * 네이밍 규칙: 'sirsoft-basic.[핸들러명]'\n *\n * @example\n * // 레이아웃 JSON에서 사용\n * {\n * \"handler\": \"custom\",\n * \"name\": \"addSelectedItemIfComplete\",\n * \"params\": { ... }\n * }\n *\n * // 또는 풀네임으로\n * {\n * \"handler\": \"sirsoft-basic.addSelectedItemIfComplete\",\n * \"params\": { ... }\n * }\n */\nexport const handlers = {\n // 상품 옵션\n 'sirsoft-basic.addSelectedItemIfComplete': addSelectedItemIfCompleteHandler,\n 'sirsoft-basic.updateSelectedItemQuantity': updateSelectedItemQuantityHandler,\n 'sirsoft-basic.removeSelectedItem': removeSelectedItemHandler,\n 'sirsoft-basic.updateNoOptionQuantity': updateNoOptionQuantityHandler,\n 'sirsoft-basic.setBlockAdditionalOption': setBlockAdditionalOptionHandler,\n\n // 다중 통화\n 'sirsoft-basic.getDisplayPrice': getDisplayPriceHandler,\n 'sirsoft-basic.formatCurrency': formatCurrencyHandler,\n 'sirsoft-basic.getCurrencySymbol': getCurrencySymbol,\n 'sirsoft-basic.loadPreferredCurrency': loadPreferredCurrencyHandler,\n 'sirsoft-basic.savePreferredCurrency': savePreferredCurrencyHandler,\n\n // 테마\n setTheme: setThemeHandler,\n initTheme: initThemeHandler,\n\n // 인증 리다이렉트 (비로그인 게시판/비밀글 진입 → /login?redirect=현재경로)\n redirectToLoginWithReturn: redirectToLoginWithReturnHandler,\n\n // 게시판 첨부 다운로드 (토큰 동반 → 활동이력 행위자 기록)\n downloadAttachment: downloadAttachmentHandler,\n\n // 언어: setLocale은 엔진 레벨(ActionDispatcher)에서 빌트인으로 처리\n\n // 장바구니\n toggleCartItemSelection: toggleCartItemSelectionHandler,\n selectAllCartItems: selectAllCartItemsHandler,\n setCartOption: setCartOptionHandler,\n openCartDeleteModal: openCartDeleteModalHandler,\n openCartOptionModal: openCartOptionModalHandler,\n recalculateCart: recalculateCartHandler,\n\n // 장바구니 옵션 변경\n findMatchingOption: findMatchingOptionHandler,\n initCartOptionSelection: initCartOptionSelectionHandler,\n\n // 스토리지\n initCartKey: initCartKeyHandler,\n getCartKey: getCartKeyHandler,\n clearCartKey: clearCartKeyHandler,\n regenerateCartKey: regenerateCartKeyHandler,\n saveToStorage: saveToStorageHandler,\n loadFromStorage: loadFromStorageHandler,\n initGuestOrderToken: initGuestOrderTokenHandler,\n saveGuestOrderToken: saveGuestOrderTokenHandler,\n clearGuestOrderToken: clearGuestOrderTokenHandler,\n clearGuestTokenOnEntry: clearGuestTokenOnEntryHandler,\n};\n\n/**\n * 핸들러 맵 (handlerMap alias)\n *\n * index.ts에서 import할 때 사용\n */\nexport const handlerMap = handlers;\n\n/**\n * 핸들러 타입 정의 (TypeScript 자동완성용)\n */\nexport type SirsoftBasicHandlers = typeof handlers;\n\n// 개별 핸들러 export (직접 import용)\nexport {\n addSelectedItemIfCompleteHandler,\n updateSelectedItemQuantityHandler,\n removeSelectedItemHandler,\n updateNoOptionQuantityHandler,\n setBlockAdditionalOptionHandler,\n getDisplayPriceHandler,\n formatCurrencyHandler,\n getCurrencySymbol,\n loadPreferredCurrencyHandler,\n savePreferredCurrencyHandler,\n setThemeHandler,\n initThemeHandler,\n // 인증 리다이렉트\n redirectToLoginWithReturnHandler,\n // 게시판 첨부 다운로드\n downloadAttachmentHandler,\n // setLocaleHandler는 엔진 레벨에서 처리하므로 제거됨\n // 장바구니\n toggleCartItemSelectionHandler,\n selectAllCartItemsHandler,\n setCartOptionHandler,\n openCartDeleteModalHandler,\n openCartOptionModalHandler,\n recalculateCartHandler,\n // 장바구니 옵션 변경\n findMatchingOptionHandler,\n initCartOptionSelectionHandler,\n // 스토리지\n initCartKeyHandler,\n getCartKeyHandler,\n clearCartKeyHandler,\n regenerateCartKeyHandler,\n saveToStorageHandler,\n loadFromStorageHandler,\n initGuestOrderTokenHandler,\n saveGuestOrderTokenHandler,\n clearGuestOrderTokenHandler,\n clearGuestTokenOnEntryHandler,\n};\n","/**\n * IDV Modal Launcher (sirsoft-basic)\n *\n * 코어 `IdentityGuardInterceptor` 가 428 응답을 가로채면 호출하는 launcher 입니다.\n *\n * 코어 진입점은 `window.G7Core.identity.*` 를 통해 사용 — 템플릿 IIFE 번들이 코어 모듈을\n * 중복 포함하면서 정적 클래스 상태가 분리되는 사고를 방지합니다 (다음 우편번호 / CKEditor5 와 동일 패턴).\n *\n * 동작 순서:\n * 1. `external_redirect` 분기 — 코어 helper `redirectExternally` 로 위임.\n * 2. `POST /api/identity/challenges` 로 challenge 시작 → `id, expires_at, render_hint, public_payload` 획득.\n * 3. `_global.identityChallenge` 네임스페이스에 verification payload + challenge 응답 병합.\n * 4. 카운트다운 `startInterval` 등록.\n * 5. `openModal: identity-challenge-modal` 디스패치.\n * 6. `createDeferred()` Promise 반환 — 모달이 `resolveIdentityChallenge` 핸들러로 결과 통보 시 resolve.\n *\n * 외부 IDV 플러그인(KCP/PortOne 등) 은 모달 파셜의 `identity_provider_ui:*` Extension Point 슬롯에\n * 자기 컴포넌트 + scripts 를 주입하여 launcher 변경 없이 자기 SDK 를 띄울 수 있습니다.\n */\n\nconst logger = ((window as any).G7Core?.createLogger?.('Template:sirsoft-basic:IdentityLauncher')) ?? {\n log: (...args: unknown[]) => console.log('[Template:sirsoft-basic:IdentityLauncher]', ...args),\n warn: (...args: unknown[]) => console.warn('[Template:sirsoft-basic:IdentityLauncher]', ...args),\n error: (...args: unknown[]) => console.error('[Template:sirsoft-basic:IdentityLauncher]', ...args),\n};\n\n/**\n * 코어가 launcher 에 전달하는 verification payload (런타임 형태).\n * 코어 타입 import 를 피하려고 로컬에 정의 — 실제 형식은 `resources/js/core/identity/types.ts` 와 동일.\n */\ninterface IdentityVerificationTarget {\n email?: string;\n phone?: string;\n}\n\ninterface VerificationPayload {\n policy_key: string;\n purpose: string;\n provider_id?: string | null;\n render_hint?: string | null;\n challenge_start_url?: string;\n redirect_url?: string;\n return_request?: { method: string; url: string; headers_echo?: string[] } | null;\n /** 흐름이 apiCall identity_target 으로 선언한 인증 대상 — 코어 인터셉터가 병합해 전달. */\n target?: IdentityVerificationTarget | null;\n}\n\n/**\n * launcher 가 코어에 돌려주는 결과 타입 (런타임 형태).\n */\ntype VerificationResult =\n | { status: 'verified'; token: string; providerData?: Record }\n | { status: 'pending'; pollUrl: string; pollIntervalMs?: number; expiresAt: string }\n | { status: 'cancelled' }\n | { status: 'failed'; failureCode: string; reason?: string };\n\n/**\n * 인증 대상(이메일·전화)을 결정합니다.\n *\n * 우선순위 (필드별 보충 머지 — email/phone 각각 첫 비어있지 않은 값 채택):\n * 1. `payload.target` — 흐름이 apiCall `identity_target` 으로 선언한 값 (범용 진입점, 비로그인 흐름의 핵심)\n * 2. 로그인 사용자 세션 (`currentUser` / `user` / `auth.user` 의 email·phone)\n * 3. (하위호환) signup/password_reset 폼 — `identity_target` 미선언 기존 레이아웃 대비\n *\n * 흐름별 폼 경로 하드코딩을 폐기하고 선언값을 1순위로 둠으로써, 주문/게시판/임의 액션 어떤 흐름이든\n * 레이아웃이 `identity_target` 만 선언하면 launcher 변경 없이 동작한다.\n *\n * 반환값은 launcher 에서 두 곳에 사용:\n * 1) 첫 POST /api/identity/challenges body 에 동봉\n * 2) `_global.identityChallenge.target` 에 저장 — 모달 재전송 액션이 같은 target 을 재사용\n *\n * @param payload 코어 인터셉터가 전달한 verification payload (target 병합 포함)\n * @returns 인증 대상 또는 null (email·phone 둘 다 없으면 — 로그인 사용자는 서버 세션 도출)\n */\nfunction resolveTarget(payload: VerificationPayload): IdentityVerificationTarget | null {\n const G7Core = (window as any).G7Core;\n const local = G7Core?.state?.getLocal?.() ?? {};\n const global = G7Core?.state?.getGlobal?.() ?? G7Core?.state?.get?.() ?? {};\n\n const pick = (...candidates: Array): string | undefined =>\n candidates.find((v): v is string => typeof v === 'string' && v.length > 0);\n\n const email = pick(\n payload.target?.email,\n global?.currentUser?.email,\n global?.user?.email,\n global?.auth?.user?.email,\n payload.purpose === 'signup' ? local?.registerForm?.email : undefined,\n payload.purpose === 'password_reset' ? local?.passwordResetForm?.email : undefined,\n payload.purpose === 'password_reset' ? local?.email : undefined,\n );\n\n const phone = pick(\n payload.target?.phone,\n global?.currentUser?.phone,\n global?.user?.phone,\n global?.auth?.user?.phone,\n );\n\n if (!email && !phone) {\n return null;\n }\n\n const target: IdentityVerificationTarget = {};\n if (email) target.email = email;\n if (phone) target.phone = phone;\n return target;\n}\n\n/**\n * Bearer 토큰을 안전하게 추출합니다 (있으면).\n */\nfunction getAuthHeader(): Record {\n const G7Core = (window as any).G7Core;\n const token = G7Core?.api?.getToken?.() ?? null;\n return token ? { Authorization: `Bearer ${token}` } : {};\n}\n\n/**\n * 현재 앱 언어를 Accept-Language 헤더로 추출합니다 (있으면).\n *\n * challenge POST 는 ApiClient 를 우회하는 raw fetch 라, ApiClient 가 모든 요청에\n * 부착하는 `Accept-Language: g7_locale`(ApiClient.ts) 을 여기서 동일하게 부착해야\n * 서버 SetLocale 이 사용자 화면 언어로 IDV 메일을 렌더한다. 누락 시 challenge 요청이\n * 브라우저 기본 언어로 전송되어 메일이 주문 화면 언어와 달라진다(비회원 결제 등).\n */\nfunction getLocaleHeader(): Record {\n try {\n const locale =\n typeof window !== 'undefined' ? window.localStorage?.getItem('g7_locale') : null;\n return locale ? { 'Accept-Language': locale } : {};\n } catch {\n return {};\n }\n}\n\ninterface ChallengeResponseData {\n id: string;\n expires_at: string;\n render_hint: string;\n public_payload?: Record;\n redirect_url?: string;\n /** 허용 최대 시도 횟수 — 0 은 무제한 (popup/SDK 형 provider). 코어 mail provider 는 환경설정값을 반영. */\n max_attempts?: number;\n}\n\n/**\n * `POST /api/identity/challenges` 로 challenge 를 시작합니다.\n *\n * @param payload verification payload\n * @param target launcher 본체에서 1회 계산한 인증 대상 (startChallenge 와 _global 저장이 동일 값 공유)\n */\nasync function startChallenge(\n payload: VerificationPayload,\n target: IdentityVerificationTarget | null,\n): Promise {\n const body: Record = { purpose: payload.purpose };\n if (payload.provider_id) body.provider_id = payload.provider_id;\n if (target) body.target = target;\n\n const url = payload.challenge_start_url || '/api/identity/challenges';\n const res = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...getLocaleHeader(),\n ...getAuthHeader(),\n },\n body: JSON.stringify(body),\n });\n\n const json = await res.json().catch(() => null);\n if (!res.ok || !json?.success) {\n const msg = json?.message ?? `Challenge 시작 실패 (HTTP ${res.status})`;\n throw new Error(msg);\n }\n\n const data = json.data ?? json;\n return {\n id: data.id,\n expires_at: data.expires_at,\n render_hint: data.render_hint ?? payload.render_hint ?? 'text_code',\n public_payload: data.public_payload,\n redirect_url: data.redirect_url,\n max_attempts: typeof data.max_attempts === 'number' ? data.max_attempts : undefined,\n };\n}\n\n/**\n * sirsoft-basic 의 IDV launcher 본체.\n *\n * 테스트에서 직접 호출할 수 있도록 export (런타임 진입점은 registerSirsoftBasicIdentityLauncher).\n */\nexport async function sirsoftBasicIdentityLauncher(payload: VerificationPayload): Promise {\n const G7Core = (window as any).G7Core;\n const identity = G7Core?.identity;\n\n if (!G7Core?.dispatch || !G7Core?.state || !identity) {\n logger.error('G7Core 또는 G7Core.identity 가 초기화되지 않아 launcher 를 실행할 수 없습니다.');\n return { status: 'failed', failureCode: 'G7_NOT_READY' };\n }\n\n // (1) external_redirect 분기 — 모달 안 띄움\n if (payload.render_hint === 'external_redirect' || payload.redirect_url) {\n return identity.redirectExternally(payload);\n }\n\n // 인증 대상을 1회 계산 — startChallenge body 와 _global.identityChallenge.target 저장이 동일 값 공유\n // (모달 재전송이 같은 target 으로 challenge 재요청). 흐름 선언값(payload.target) 우선.\n const target = resolveTarget(payload);\n\n // (2) Challenge 시작\n let challenge: ChallengeResponseData;\n try {\n challenge = await startChallenge(payload, target);\n } catch (err) {\n logger.error('Challenge 시작 실패:', err);\n try {\n await G7Core.dispatch({\n handler: 'toast',\n params: {\n type: 'error',\n message: err instanceof Error ? err.message : '본인인증 시작에 실패했습니다.',\n },\n });\n } catch {\n /* ignore */\n }\n return {\n status: 'failed',\n failureCode: 'CHALLENGE_START_FAILED',\n reason: err instanceof Error ? err.message : String(err),\n };\n }\n\n // 응답에 redirect_url 이 있으면 외부 redirect 로 분기 (provider 가 link 대신 redirect 결정)\n if (challenge.redirect_url) {\n return identity.redirectExternally({\n ...payload,\n render_hint: 'external_redirect',\n redirect_url: challenge.redirect_url,\n });\n }\n\n // (3) _global.identityChallenge 네임스페이스 setup\n // 위에서 1회 계산한 target 을 재사용 — 모달 재전송 액션이 같은 target 으로 challenge 재요청 가능하게\n const expiresMs = challenge.expires_at ? new Date(challenge.expires_at).getTime() : 0;\n const remainingSeconds = expiresMs > 0 ? Math.max(0, Math.floor((expiresMs - Date.now()) / 1000)) : 0;\n\n // maxAttempts: 백엔드 응답값이 있으면 사용, 없으면 0(무제한 — popup/SDK 형 provider 의 기본).\n // 코어 mail provider 응답에는 환경설정의 max_attempts 가 정확히 반영되므로 화면 카운트도 정합.\n const maxAttempts = typeof challenge.max_attempts === 'number' ? challenge.max_attempts : 0;\n\n G7Core.state.set({\n identityChallenge: {\n policy_key: payload.policy_key,\n purpose: payload.purpose,\n provider_id: payload.provider_id ?? null,\n render_hint: challenge.render_hint,\n challenge_id: challenge.id,\n expires_at: challenge.expires_at,\n public_payload: challenge.public_payload ?? {},\n target: target ?? null,\n code: '',\n error: null,\n attempts: 0,\n maxAttempts,\n remainingSeconds,\n resendCooldown: 0,\n },\n });\n\n // (4) 카운트다운 타이머 — launcher 자체 setInterval 사용\n // startInterval 핸들러는 등록 시점의 dispatch context 를 클로저로 캡처하는데,\n // 직전의 G7Core.state.set 가 React 비동기 setState 라서 캡처된 context 의 _global 에는\n // identityChallenge 가 아직 없을 수 있음(stale). 그러면 매 tick 표현식에서 expires_at 가\n // undefined 로 평가되어 remainingSeconds 가 영원히 0 으로 남음. launcher 클로저에서\n // expiresMs 를 직접 보유하고 G7Core.state.set 만 매 초 호출하면 stale 경로를 우회.\n let currentExpiresMs = expiresMs;\n let resendCooldown = 0;\n const tickHandle = window.setInterval(() => {\n const remaining = currentExpiresMs > 0\n ? Math.max(0, Math.floor((currentExpiresMs - Date.now()) / 1000))\n : 0;\n resendCooldown = Math.max(0, resendCooldown - 1);\n G7Core.state.set({\n identityChallenge: {\n remainingSeconds: remaining,\n resendCooldown,\n },\n });\n }, 1000);\n\n // 모달 재전송 액션이 새 challenge 를 발급하면 expires_at 이 갱신되는데,\n // 그 시점에는 launcher 클로저의 currentExpiresMs 를 동기화해야 카운트다운이 새 만료시각을 따름.\n // G7Core.state.subscribe 로 _global.identityChallenge.expires_at 변경을 감지.\n let unsubscribe: (() => void) | null = null;\n try {\n unsubscribe = G7Core.state.subscribe?.((next: any) => {\n const updated = next?.identityChallenge?.expires_at;\n if (typeof updated === 'string') {\n const ms = new Date(updated).getTime();\n if (Number.isFinite(ms) && ms !== currentExpiresMs) {\n currentExpiresMs = ms;\n }\n }\n const cd = next?.identityChallenge?.resendCooldown;\n if (typeof cd === 'number' && cd > resendCooldown) {\n // 재전송 액션이 _global.identityChallenge.resendCooldown 을 30 으로 set 한 직후 동기화\n resendCooldown = cd;\n }\n }) ?? null;\n } catch {\n /* subscribe 미지원 환경 — 첫 만료시각 기준으로만 카운트다운 */\n }\n\n // (5) deferred Promise 생성 → 모달 open\n const deferred = identity.createDeferred() as Promise;\n try {\n await G7Core.dispatch({\n handler: 'openModal',\n target: 'identity-challenge-modal',\n });\n } catch (e) {\n logger.error('openModal 실패 — 풀페이지로 폴백:', e);\n window.clearInterval(tickHandle);\n unsubscribe?.();\n return identity.redirectExternally({\n ...payload,\n render_hint: 'external_redirect',\n redirect_url: `/identity/challenge?challenge_id=${encodeURIComponent(challenge.id)}&return=${encodeURIComponent(window.location.href)}`,\n });\n }\n\n // (6) 모달이 resolveIdentityChallenge 호출하면 deferred 가 resolve\n const result = await deferred;\n\n // 정리 — 카운트다운 중단 + subscribe 해제\n window.clearInterval(tickHandle);\n unsubscribe?.();\n\n return result;\n}\n\n/**\n * 부트스트랩 시 코어 인터셉터에 launcher 를 등록합니다.\n *\n * `initTemplate()` 의 핸들러 등록 직후에 호출 — `window.G7Core.identity.setLauncher` 를 사용해\n * 코어의 단일 IdentityGuardInterceptor 정적 클래스에 launcher 를 주입합니다.\n */\nexport function registerSirsoftBasicIdentityLauncher(): void {\n const identity = (window as any).G7Core?.identity;\n if (!identity?.setLauncher) {\n logger.warn(\n 'G7Core.identity 가 아직 초기화되지 않아 launcher 등록을 건너뜁니다. 코어 부트스트랩 순서를 확인하세요.'\n );\n return;\n }\n identity.setLauncher(sirsoftBasicIdentityLauncher);\n logger.log('IDV launcher registered (sirsoft-basic)');\n}\n","/**\n * IconPickerWidget.tsx — sirsoft-basic 템플릿 소유 아이콘 피커 위젯\n *\n * 레이아웃 편집기 [속성] 탭에서 아이콘명 prop(`Icon.name`/`IconButton.iconName` 등)을\n * **검색 가능한 그리드 드롭다운**으로 고른다. 값은 아이콘명 문자열(propValue 로\n * `node.props[propKey]` 기록).\n *\n * **소유 경계**: 아이콘 검색 그리드 UI 는 라이브러리(Font Awesome) 종속\n * 지식이므로 **템플릿이 소유**한다. 코어는 icon-picker 위젯을 제공하지 않으며, 본 위젯을\n * `G7Core.layoutEditor.registerWidget('icon-picker', ...)` 로 등록해 사용한다(코어 예약\n * 접수함이 편집기 로드 전 등록도 큐로 보존 → 편집기 로드 시 flush). 카탈로그(`control.icons`)\n * 도 템플릿 editor-spec 이 공급한다. 본 위젯은 Font Awesome 클래스(`fas fa-{value}`)로\n * 프리뷰를 직접 렌더한다(템플릿이 자기 라이브러리를 알기 때문).\n *\n * 카탈로그 미공급 시 자유입력(text) 폴백.\n */\n\nimport React from 'react';\n\n/** 코어 WidgetProps 와 호환되는 최소 형태 — 코어 타입 import 회피(IIFE 번들 분리 안전) */\ninterface IconCatalogEntry {\n value: string;\n label?: string;\n keywords?: string[];\n group?: string;\n preview?: { html?: string; className?: string };\n}\ninterface IconPickerWidgetProps {\n control: { icons?: unknown; iconColumns?: number; iconSearchPlaceholder?: string } & Record<\n string,\n unknown\n >;\n value: unknown;\n onChange: (value: unknown) => void;\n t: (key: string, params?: Record) => string;\n}\n\nfunction readCatalog(control: IconPickerWidgetProps['control']): IconCatalogEntry[] {\n const icons = control.icons;\n if (!Array.isArray(icons)) return [];\n return icons.filter(\n (e): e is IconCatalogEntry =>\n !!e && typeof e === 'object' && typeof (e as IconCatalogEntry).value === 'string',\n );\n}\n\nfunction entryLabel(entry: IconCatalogEntry, t: IconPickerWidgetProps['t']): string {\n const label = entry.label;\n if (typeof label === 'string') return label.startsWith('$t:') ? t(label.slice(3)) : label;\n return entry.value;\n}\n\nfunction matchesQuery(entry: IconCatalogEntry, label: string, q: string): boolean {\n if (q === '') return true;\n const needle = q.toLowerCase();\n if (entry.value.toLowerCase().includes(needle)) return true;\n if (label.toLowerCase().includes(needle)) return true;\n return (entry.keywords ?? []).some((k) => k.toLowerCase().includes(needle));\n}\n\n/** FA 프리뷰 — preview.html → preview.className → `fas fa-{value}` (FA 직접 렌더) → 텍스트 */\nfunction IconPreview({ entry }: { entry: IconCatalogEntry }): React.ReactElement {\n const preview = entry.preview;\n if (preview?.html) {\n return (\n \n );\n }\n if (preview?.className) {\n return ;\n }\n // 템플릿은 자기 라이브러리(Font Awesome)를 알므로 클래스 직접 합성.\n return ;\n}\n\nexport function IconPickerWidget({\n control,\n value,\n onChange,\n t,\n}: IconPickerWidgetProps): React.ReactElement {\n const catalog = readCatalog(control);\n const current = value === undefined || value === null ? '' : String(value);\n const columns = typeof control.iconColumns === 'number' ? control.iconColumns : 6;\n const searchPlaceholderKey = control.iconSearchPlaceholder;\n const searchPlaceholder =\n typeof searchPlaceholderKey === 'string' && searchPlaceholderKey.startsWith('$t:')\n ? t(searchPlaceholderKey.slice(3))\n : t('layout_editor.icon_picker.search_placeholder');\n\n const [query, setQuery] = React.useState('');\n\n // 카탈로그 미공급 → 자유입력 폴백.\n if (catalog.length === 0) {\n return (\n \n onChange(e.target.value === '' ? undefined : e.target.value)}\n style={inputStyle}\n />\n
\n );\n }\n\n const labelOf = (e: IconCatalogEntry): string => entryLabel(e, t);\n const filtered = catalog.filter((e) => matchesQuery(e, labelOf(e), query));\n\n return (\n \n setQuery(e.target.value)}\n style={inputStyle}\n />\n \n onChange(undefined)}\n aria-pressed={current === ''}\n style={current === '' ? cellSelected : cell}\n >\n —\n \n {filtered.map((entry) => {\n const selected = entry.value === current;\n return (\n onChange(entry.value)}\n style={selected ? cellSelected : cell}\n >\n \n \n );\n })}\n
\n {filtered.length === 0 && (\n
\n {t('layout_editor.icon_picker.no_results')}\n
\n )}\n
\n );\n}\n\nconst wrap: React.CSSProperties = { display: 'flex', flexDirection: 'column', gap: 6, width: '100%' };\nconst inputStyle: React.CSSProperties = { padding: '5px 8px', fontSize: 12, border: '1px solid #cbd5e1', borderRadius: 6, width: '100%' };\nconst grid: React.CSSProperties = { display: 'grid', gap: 4, maxHeight: 220, overflowY: 'auto', padding: 2 };\nconst cell: React.CSSProperties = { display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: 34, padding: 4, border: '1px solid #e2e8f0', borderRadius: 6, background: '#fff', cursor: 'pointer' };\nconst cellSelected: React.CSSProperties = { ...cell, border: '2px solid #2563eb', background: '#eff6ff' };\nconst previewBox: React.CSSProperties = { display: 'inline-flex', alignItems: 'center', justifyContent: 'center', fontSize: 16, lineHeight: 1 };\nconst previewText: React.CSSProperties = { fontSize: 10, color: '#475569', fontFamily: 'monospace', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: '100%' };\nconst emptyHint: React.CSSProperties = { fontSize: 11, color: '#94a3b8', fontStyle: 'italic', padding: '4px 2px' };\n","/**\n * registerEditorWidgets.ts — sirsoft-basic 편집기 커스텀 위젯 등록\n *\n * 템플릿 부트스트랩(initTemplate)에서 호출. `G7Core.layoutEditor` 는 코어 예약 접수함\n * (stub)이 메인 번들에서 항상 노출하므로, 편집기 셸 로드 전에 호출해도 등록이 큐에\n * 보존되었다가 편집기 로드 시 flush 된다(타이밍 안전).\n *\n * 등록 위젯:\n * - `icon-picker` — Font Awesome 검색 그리드(템플릿 소유 UI, 라이브러리 종속).\n */\n\nimport React from 'react';\nimport { IconPickerWidget } from './IconPickerWidget';\n\nconst logger = (window as any).G7Core?.createLogger?.('Template:sirsoft-basic:EditorWidgets') ?? {\n log: (...a: unknown[]) => console.log('[Template:sirsoft-basic:EditorWidgets]', ...a),\n warn: (...a: unknown[]) => console.warn('[Template:sirsoft-basic:EditorWidgets]', ...a),\n};\n\n/**\n * 편집기 커스텀 위젯을 코어 레지스트리에 등록한다. 멱등 — `G7Core.layoutEditor` 부재(코어\n * 미초기화)면 no-op(다음 호출에서 재시도하거나 stub 이 보존).\n */\nexport function registerSirsoftBasicEditorWidgets(): void {\n if (typeof window === 'undefined') return;\n const layoutEditor = (window as any).G7Core?.layoutEditor;\n if (!layoutEditor?.registerWidget) {\n logger.warn('G7Core.layoutEditor 미노출 — icon-picker 위젯 등록 보류');\n return;\n }\n // 코어 위젯 레지스트리는 React 컴포넌트를 받는다. WidgetProps 형태로 호출됨.\n layoutEditor.registerWidget('icon-picker', IconPickerWidget as React.ComponentType);\n logger.log(\"편집기 위젯 'icon-picker' 등록됨(Font Awesome 검색 그리드)\");\n}\n","// e2e:allow편집기 위젯(icon-picker) 등록을 module-load 시점으로 이동(결함#3, admin 동기 — 직접 하드로드 시 위젯 누락 해소). 단위 회귀는 registerEditorWidgets.test.ts(module-load 등록 + index.ts 최상위 호출 정적 가드).\n/**\n * Sirsoft Basic User Template\n *\n * 그누보드7 템플릿 엔진용 사용자 템플릿 컴포넌트 패키지\n * Nexibase 스타일 기반\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Template:sirsoft-basic')) ?? {\n log: (...args: unknown[]) => console.log('[Template:sirsoft-basic]', ...args),\n warn: (...args: unknown[]) => console.warn('[Template:sirsoft-basic]', ...args),\n error: (...args: unknown[]) => console.error('[Template:sirsoft-basic]', ...args),\n};\n\n// Styles\nimport './styles/main.css';\n\n// Basic Components (Header, Footer는 composite에서 사용하므로 여기서는 별도 이름으로 export)\nexport {\n Button,\n type ButtonProps,\n FileInput,\n type FileInputProps,\n Input,\n type InputProps,\n PasswordInput,\n type PasswordInputProps,\n type PasswordRule,\n defaultPasswordRules,\n availablePasswordRules,\n Textarea,\n type TextareaProps,\n Label,\n type LabelProps,\n Div,\n type DivProps,\n Span,\n type SpanProps,\n P,\n type PProps,\n Img,\n type ImgProps,\n H1,\n type H1Props,\n H2,\n type H2Props,\n H3,\n type H3Props,\n H4,\n type H4Props,\n Ul,\n type UlProps,\n Ol,\n type OlProps,\n Li,\n type LiProps,\n A,\n type AProps,\n Form,\n type FormProps,\n Select,\n type SelectProps,\n Option,\n type OptionProps,\n Optgroup,\n type OptgroupProps,\n Checkbox,\n type CheckboxProps,\n Table,\n type TableProps,\n Thead,\n type TheadProps,\n Tbody,\n type TbodyProps,\n Tr,\n type TrProps,\n Th,\n type ThProps,\n Td,\n type TdProps,\n Nav,\n type NavProps,\n Section,\n type SectionProps,\n Svg,\n type SvgProps,\n Icon,\n type IconProps,\n Code,\n type CodeProps,\n Hr,\n type HrProps,\n IconName,\n type IconStyle,\n type IconSize,\n} from './components/basic';\n\n// Composite Components\nexport * from './components/composite';\n\n// Layout Components\nexport * from './components/layout';\n\n// Template Metadata\nimport templateMetadata from '../template.json';\n\n// Handlers\nimport { handlerMap } from './handlers';\n\n// IDV Modal Launcher (engine-v1.46.0+)\nimport { registerSirsoftBasicIdentityLauncher } from './handlers/identityLauncher';\n\n// 레이아웃 편집기 커스텀 위젯(icon-picker 등) 등록\nimport { registerSirsoftBasicEditorWidgets } from './layout-editor/registerEditorWidgets';\n\n// handlerMap을 전역으로 노출 (로케일 변경 시 재등록용)\nif (typeof window !== 'undefined') {\n (window as any).G7TemplateHandlers = handlerMap;\n}\n\n/**\n * 템플릿 메타데이터 export\n *\n * template.json 파일의 내용을 번들에 포함시켜 API 호출 없이\n * 코어 엔진에서 직접 접근 가능하도록 합니다.\n */\nexport { templateMetadata };\n\n/**\n * 템플릿 초기화 함수\n *\n * 코어 엔진에 커스텀 핸들러를 등록합니다.\n */\nexport function initTemplate(): void {\n // ActionDispatcher가 로드될 때까지 대기 후 핸들러 등록\n if (typeof window !== 'undefined') {\n let retryCount = 0;\n const maxRetries = 50; // 최대 5초 대기 (50 * 100ms)\n\n const registerHandlers = () => {\n const actionDispatcher = (window as any).G7Core?.getActionDispatcher?.();\n\n if (actionDispatcher) {\n // handlerMap의 모든 핸들러를 자동으로 등록\n Object.entries(handlerMap).forEach(([name, handler]) => {\n actionDispatcher.registerHandler(name, handler);\n });\n\n logger.log(`${Object.keys(handlerMap).length} custom handler(s) registered:`, Object.keys(handlerMap));\n\n // IDV Modal Launcher 등록 (window.G7Core.identity.setLauncher 사용)\n registerSirsoftBasicIdentityLauncher();\n } else {\n retryCount++;\n if (retryCount <= maxRetries) {\n logger.warn(`ActionDispatcher not found, retrying... (${retryCount}/${maxRetries})`);\n setTimeout(registerHandlers, 100);\n } else {\n logger.error('Failed to register handlers: ActionDispatcher not available after maximum retries');\n }\n }\n };\n\n // window.load 이벤트 사용 (모든 리소스 로드 완료 후)\n if (document.readyState === 'complete') {\n registerHandlers();\n } else {\n window.addEventListener('load', registerHandlers);\n }\n }\n}\n\n// 레이아웃 편집기 커스텀 위젯(icon-picker) 등록 — 모듈 로드 시점에 즉시 실행한다.\n// ActionDispatcher 가용을 기다리는 `registerHandlers`(window.load\n// 게이트) 안에서 등록하면, 편집기 URL 을 직접 하드로드한 경로에서 등록이 편집기 셸 마운트보다\n// 늦어 icon-picker 위젯이 누락된다(\"Unsupported control\"). `G7Core.layoutEditor` 예약 접수함\n// (ready 큐 stub)은 편집기 로드 전 등록도 큐로 보존했다가 flush 하므로, 핸들러 등록 타이밍과\n// 무관하게 모듈 로드 시 즉시 등록하는 것이 진입 경로(SPA 전환 / 직접 로드)와 무관하게 결정적이다.\nregisterSirsoftBasicEditorWidgets();\n\n// 템플릿 초기화 자동 실행\ninitTemplate();\n"],"names":["G7Core","Button","forwardRef","children","variant","size","className","props","ref","baseClasses","mergedClassName","jsx","Div","React","Span","Svg","Input","label","error","onChange","onKeyPress","value","defaultValue","type","checked","defaultChecked","isCheckableType","isComposingRef","useRef","internalRef","useImperativeHandle","localValue","setLocalValue","useState","useEffect","handleCompositionStart","useCallback","handleCompositionEnd","e","currentValue","changeEvent","handleChange","newValue","handleKeyPress","loadingactions","formdata","validProps","inputProps","FileInput","accept","maxSize","onError","buttonText","placeholder","disabled","inputRef","fileName","setFileName","rootEditorProps","key","val","handleClick","file","errorMsg","handleClear","IconName","iconNameMap","Icon","name","iconStyle","color","spin","pulse","fixedWidth","ariaLabel","style","styleClassMap","rawName","mappedName","iconName","classes","accessibilityLabel","t","params","availablePasswordRules","param","types","defaultPasswordRules","parseRuleString","ruleString","paramStr","rule","PasswordInput","showToggle","showValidation","isConfirmField","confirmTarget","onMatchChange","onValidityChange","rules","enableRules","showRules","wrapperClassName","validationClassName","showPassword","setShowPassword","capsLockOn","setCapsLockOn","internalValue","setInternalValue","parsedRules","useMemo","ruleStr","parsed","displayRules","validationResults","acc","isMatch","isAllValid","v","failedRules","passed","handleToggle","prev","handleKeyEvent","editorRootProps","inputRestProps","k","jsxs","labelParams","Textarea","textareaRef","textareaValueProps","Label","P","Img","alt","H1","H2","H3","H4","Ul","Ol","Li","A","Form","logger","args","getLocaleName","locale","fromAppConfig","Select","options","searchable","searchPlaceholder","editorAttrs","isOpen","setIsOpen","searchTerm","setSearchTerm","dropdownPos","setDropdownPos","containerRef","buttonRef","searchInputRef","dropdownRef","normalizedOptions","selectedLabel","opt","visibleOptions","needle","timer","updateDropdownPos","rect","spaceBelow","openUpward","handleClickOutside","event","target","handleKeyDown","handleSelect","optionValue","hasCustomStyle","hasTextColor","baseButtonClass","rootDomProps","createPortal","option","isSelected","Option","Optgroup","Checkbox","Table","Thead","Tbody","Tr","Th","Td","Nav","Section","Code","Hr","Header","getEffectiveTheme","mode","applyTheme","effectiveTheme","getInitialTheme","savedTheme","ThemeToggle","onThemeChange","autoText","lightText","darkText","id","initialTheme","currentMode","setCurrentMode","showMenu","setShowMenu","menuRef","mediaQuery","handleThemeChange","getCurrentIcon","SIZE_CLASSES","BASE_CONTAINER_CLASSES","WITHDRAWN_CLASSES","INITIAL_BG_CLASSES","Avatar","author","avatar","text","isWithdrawn","isGuest","actualAvatar","actualName","actualIsWithdrawn","actualIsGuest","containerClasses","initialBgClass","renderContent","scopeSlotChildDef","componentDef","containerId","SlotContainer","slotId","emptyContent","slotComponents","setSlotComponents","forceUpdate","getSlotContext","directSlotContext","g7Core","updateSlotComponents","slotContext","getDynamicRenderer","DynamicRenderer","registration","dataContext","parentFormContext","getParentComponentContext","translationContext","scopedDef","NotificationCenter","notifications","unreadCount","hasMore","loading","titleText","emptyText","markAllReadText","deleteAllText","unreadOnlyText","unreadOnly","onNotificationClick","onClose","onLoadMore","onMarkAllRead","onDeleteAll","onDelete","onUnreadOnlyToggle","dropdownAlign","showNotifications","setShowNotifications","notificationRef","scrollRef","sentinelRef","visibleUnreadIdsRef","onLoadMoreRef","hasMoreRef","loadingRef","notificationsCountRef","lastRequestedCountRef","observer","entry","entries","isUnread","item","displayCount","n","handleClose","unreadIds","useLayoutEffect","dropdown","vw","margin","shift","Fragment","notification","navigate","path","logo","siteName","user","cartCount","notificationCount","boards","maxVisibleBoards","onMobileMenuOpen","availableLocales","currentLocale","shopBase","notificationHasMore","notificationLoading","notificationUnreadOnly","notificationTitleText","notificationEmptyText","notificationMarkAllReadText","notificationDeleteAllText","notificationUnreadOnlyText","onNotificationClose","onNotificationLoadMore","onNotificationMarkAllRead","onNotificationDeleteAll","onNotificationDelete","onNotificationUnreadOnlyToggle","searchQuery","setSearchQuery","showUserMenu","setShowUserMenu","showMoreBoards","setShowMoreBoards","showLangMenu","setShowLangMenu","dropdownPosition","setDropdownPosition","currentPath","setCurrentPath","userMenuRef","moreButtonRef","langMenuRef","useResponsive","responsiveValue","isMobile","handlePopState","originalPushState","isActiveRoute","exact","isShopActive","base","getNavButtonClass","isActive","baseClass","visibleBoards","hiddenBoards","handleSearch","handleLogout","handleLocaleChange","HeaderBasic","board","Footer","TABLET_BREAKPOINT","DESKTOP_BREAKPOINT","siteDescription","copyrightText","socialLinks","linkGroups","currentYear","width","isDesktop","gridColumns","defaultLinkGroups","groups","socialIconMap","FooterBasic","url","group","index","link","linkIndex","MobileNav","drawerRef","isPortable","handleEscape","handleOverlayClick","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","apply","construct","x","func","thisArg","_len","_key","Func","_len2","_key2","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","_len3","_key3","_len4","_key4","addToSet","set","array","transformCaseFunc","l","element","lcElement","cleanArray","clone","object","newObject","property","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","suffix","ATTR_NAME","policyName","scriptUrl","_createHooksMap","createDOMPurify","window","DOMPurify","root","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","parentTagName","_forceRemove","node","_removeAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","body","_createNodeIterator","_isClobbered","_isNode","_executeHooks","currentNode","data","hook","_sanitizeElements","content","_isBasicCustomElement","parentNode","childNodes","childCount","i","childClone","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attributes","hookEvent","attr","namespaceURI","attrValue","initValue","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","tag","entryPoint","hookFunction","purify","usePreferredCurrency","read","state","currency","setCurrency","subscribe","unsubscribe","getStarTypes","avg","rounded","pos","ProductCard","product","onClick","preferredCurrency","getPrice","field","multiCurrencyField","multiCurrencyData","formattedField","displayName","sellingPrice","listPrice","hasDiscount","isNotOnSale","labels","sanitizeHighlight","nameHighlighted","descriptionHtml","identifier","idx","MODULE_CAROUSEL","MODULE_CONTROLLER","MODULE_NAVIGATION","MODULE_NO_SCROLL","MODULE_PORTAL","MODULE_ROOT","MODULE_TOOLBAR","PLUGIN_COUNTER","PLUGIN_FULLSCREEN","PLUGIN_SLIDESHOW","PLUGIN_THUMBNAILS","PLUGIN_ZOOM","SLIDE_STATUS_LOADING","SLIDE_STATUS_PLAYING","SLIDE_STATUS_ERROR","SLIDE_STATUS_COMPLETE","SLIDE_STATUS_PLACEHOLDER","activeSlideStatus","status","ACTIVE_SLIDE_LOADING","ACTIVE_SLIDE_PLAYING","ACTIVE_SLIDE_ERROR","ACTIVE_SLIDE_COMPLETE","CLASS_FULLSIZE","CLASS_FLEX_CENTER","CLASS_NO_SCROLL","CLASS_NO_SCROLL_PADDING","CLASS_SLIDE","CLASS_SLIDE_WRAPPER","CLASS_SLIDE_WRAPPER_INTERACTIVE","ACTION_PREV","ACTION_NEXT","ACTION_SWIPE","ACTION_CLOSE","EVENT_ON_POINTER_DOWN","EVENT_ON_POINTER_MOVE","EVENT_ON_POINTER_UP","EVENT_ON_POINTER_LEAVE","EVENT_ON_POINTER_CANCEL","EVENT_ON_KEY_DOWN","EVENT_ON_KEY_UP","EVENT_ON_WHEEL","VK_ESCAPE","VK_ARROW_LEFT","VK_ARROW_RIGHT","ELEMENT_BUTTON","ELEMENT_ICON","IMAGE_FIT_CONTAIN","IMAGE_FIT_COVER","UNKNOWN_ACTION_TYPE","cssPrefix$3","clsx","cssClass","cssVar","composePrefix","prefix","makeComposePrefix","translateLabel","defaultLabel","_a","translateSlideCounter","slides","getSlideIndex","cleanup","cleaners","cleaner","makeUseContext","contextName","context","ctx","hasWindow","round","decimals","factor","isImageSlide","slide","isImageFitCover","image","imageFit","parseInt","parseLengthPercentage","input","computeSlideRect","containerRect","padding","paddingValue","paddingPixels","devicePixelRatio","slidesCount","hasSlides","getSlide","getSlideIfPresent","getSlideKey","addToolbarButton","toolbar","button","buttons","restToolbar","buttonWithKey","result","calculatePreload","carousel","minimum","isReact19","makeInertWhen","condition","reflow","LightboxDefaultProps","createModule","component","createNode","module","traverseNode","traverse","nodes","withPlugins","plugins","augmentations","config","contains","addParent","append","addChild","precede","addSibling","addModule","replace","augment","augmentation","plugin","A11yContext","useA11yContext","A11yContextProvider","focusWithin","setFocusWithin","autoPlaying","setAutoPlaying","onFocus","onBlur","trackAndDelegate","focusWithinValue","DocumentContext","useDocumentContext","DocumentContextProvider","nodeRef","getOwnerDocument","EventsContext","useEvents","EventsProvider","subscriptions","topic","callback","cb","LightboxPropsContext","useLightboxProps","LightboxPropsProvider","LightboxStateContext","useLightboxState","LightboxDispatchContext","useLightboxDispatch","reducer","action","increment","globalIndex","currentIndex","currentSlide","animation","LightboxStateProvider","dispatch","TimeoutsContext","useTimeouts","TimeoutsProvider","timeouts","tid","removeTimeout","fn","delay","IconButton","renderIcon","rest","styles","buttonLabel","svgIcon","icon","createIcon","glyph","createIconDisabled","CloseIcon","PreviousIcon","NextIcon","LoadingIcon","_","ErrorIcon","useMotionPreference","reduceMotion","setReduceMotion","_b","listener","currentTransformation","y","z","matcher","values","useAnimation","computeAnimation","snapshot","_c","keyframes","duration","easing","onfinish","err","currentSnapshot","useContainerRect","observerRef","setContainerRect","updateContainerRect","parse","useDelay","timeoutId","setTimeout","clearTimeout","useEventCallback","setRef","useForkRef","refA","refB","refValue","useLoseFocus","focus","focused","useRTL","isRTL","setIsRTL","useSensors","subscribers","notifySubscribers","registerSensors","subscribeSensors","listeners","el","useThrottle","lastCallbackTime","delayCallback","executeCallback","slidePrefix","slideImagePrefix","ImageSlide","offset","render","imageProps","onLoad","_d","_e","_f","_g","_h","setStatus","publish","imageRef","handleLoading","img","setImageRef","handleOnLoad","handleOnError","cover","nonInfinite","fallback","maxWidth","maxHeight","defaultStyle","srcSet","a","b","estimateActualWidth","sizes","imagePropsStyle","imagePropsClassName","restImageProps","LightboxRoot","trackFocusWithin","SwipeState","usePointerEvents","onPointerDown","onPointerMove","onPointerUp","Gesture","SWIPE_THRESHOLD","usePointerSwipe","disableSwipeNavigation","closeOnBackdropClick","isSwipeValid","containerWidth","swipeAnimationDuration","onSwipeStart","onSwipeProgress","onSwipeFinish","onSwipeCancel","pullUpEnabled","pullDownEnabled","onPullStart","onPullProgress","onPullFinish","onPullCancel","pointers","activePointer","startTime","gesture","clearPointer","currentPointers","p","addPointer","lookupPointer","pointerId","exceedsPullThreshold","threshold","pointer","currentOffset","isCurrentPointer","deltaX","deltaY","startGesture","newGesture","usePreventWheelDefaults","preventDefaultWheelX","preventDefaultWheelY","horizontal","useWheelSwipe","swipeState","intent","intentCleanup","resetCleanup","wheelInertia","wheelInertiaCleanup","cancelSwipeIntentCleanup","cancelSwipeResetCleanup","handleCleanup","handleCancelSwipe","currentSwipeOffset","onWheel","setWheelInertia","inertia","currentSwipeIntent","newSwipeOffset","cssContainerPrefix","ControllerContext","useController","Controller","controller","on","closeOnPullUp","closeOnPullDown","toolbarWidth","setToolbarWidth","setSwipeState","swipeOffset","pullOffset","pullOpacity","cleanupAnimationIncrement","cleanupSwipeOffset","cleanupPullOffset","setContainerRef","handleContainerRef","carouselRef","setCarouselRef","rtl","getLightboxProps","getLightboxState","next","close","setSwipeOffset","setPullOffset","offsetValue","preparePullAnimation","translate","pull","cancel","prepareAnimation","isAnimationPlaying","parsedSpacing","spacingValue","swipe","swipeDuration","swipeEasing","direction","count","newSwipeState","newSwipeAnimationDuration","elapsedTime","expectedTime","swipeParams","pullParams","focusOnMount","onViewCallback","ControllerModule","cssPrefix$2","cssSlidePrefix","CarouselSlide","slideRect","offscreen","renderSlide","rendered","Placeholder","Carousel","preload","items","CarouselModule","useNavigationState","prevDisabled","nextDisabled","useKeyboardNavigation","throttle","NavigationButton","Navigation","buttonPrev","buttonNext","iconPrev","iconNext","NavigationModule","noScroll","noScrollPadding","isHTMLElement","padScrollbar","computedValue","originalValue","NoScroll","getOwnerWindow","ownerWindow","documentElement","scrollbar","elements","clean","NoScrollModule","cssPrefix$1","setAttribute","attribute","previousValue","Portal","portal","mounted","setMounted","visible","setVisible","restoreFocus","animationDuration","handleEnter","handleRef","PortalModule","Root","RootModule","cssPrefix","Toolbar","buttonClose","iconClose","renderCloseButton","ToolbarModule","renderNode","child","mergeAnimation","defaultAnimation","defaultAnimationEasing","restDefaultAnimation","restAnimation","Lightbox","restProps","defaultCarousel","defaultRender","defaultToolbar","defaultController","defaultNoScroll","defaultOn","defaultSlides","defaultIndex","defaultPlugins","restDefaultProps","defaultZoomProps","validateMinZoom","minZoom","resolveZoomProps","zoom","useZoomAnimation","offsetX","offsetY","zoomWrapperRef","zoomAnimation","zoomAnimationStart","zoomAnimationDuration","playZoomAnimation","useZoomCallback","onZoomCallback","useZoomProps","useZoomImageRect","imageDimensions","imageRect","maxImageRect","maxZoomPixelRatio","height","maxZoom","distance","pointerA","pointerB","scaleZoom","delta","clamp","useZoomSensors","zoomIn","zoomOut","changeZoom","changeOffsets","activePointers","lastPointerDown","pinchZoom","keyboardMoveDistance","zoomInMultiplier","wheelZoomDistanceFactor","scrollToZoom","doubleTapDelay","doubleClickDelay","doubleClickMaxStops","pinchZoomDistanceFactor","pinchZoomV4","translateCoordinates","pageX","pageY","scrollX","scrollY","left","top","onKeyDown","metaKey","ctrlKey","meta","preventDefault","move","replacePointer","timeStamp","targetZoom","initialDistance","currentDistance","coordinate","cleanupSensors","useZoomState","setZoom","setOffsetX","setOffsetY","animate","currentSource","dx","dy","newZoom","newOffsetX","newOffsetY","maxOffsetX","maxOffsetY","rapid","handleControllerRectChange","ZoomControllerContext","useZoom","ZoomContextProvider","zoomWrapper","setZoomWrapper","zoomRef","ZoomInIcon","ZoomOutIcon","ZoomButton","onLoseFocus","wasEnabled","wasFocused","zoomInCallback","zoomOutCallback","zoomDisabled","ZoomButtonsGroup","zoomInRef","zoomOutRef","focusSibling","sibling","focusZoomIn","focusZoomOut","ZoomToolbarControl","isResponsiveImageSlide","current","source","ResponsiveImage","interactive","targetWidth","pixelDensity","handleResize","targetSource","handlePreload","currentPreload","ZoomWrapper","setImageDimensions","slideProps","Zoom","zoomProps","defaultCounterProps","resolveCounterProps","counter","CounterComponent","separator","legacyClassName","legacyRest","Counter","defaultSlideshowProps","resolveSlideshowProps","slideshow","SlideshowContext","useSlideshow","SlideshowContextProvider","finite","autoplay","wasPlaying","playing","setPlaying","scheduler","slideStatus","play","pause","cancelScheduler","scheduleNextSlide","onSlideshowStart","onSlideshowStop","PlayIcon","PauseIcon","SlideshowButton","focusListeners","Slideshow","defaultFullscreenProps","resolveFullscreenProps","fullscreen","FullscreenContext","useFullscreen","FullscreenContextProvider","fullscreenProps","auto","setDisabled","setFullscreen","wasFullscreen","ownerDocument","getFullscreenElement","fullscreenElement","enter","container","exit","onEnterFullscreen","onExitFullscreen","handleAutoFullscreen","EnterFullscreenIcon","ExitFullscreenIcon","FullscreenButton","Fullscreen","defaultThumbnailsProps","resolveThumbnailsProps","thumbnails","useThumbnailsProps","cssThumbnailPrefix","VideoThumbnailIcon","UnknownThumbnailIcon","renderThumbnail","customThumbnail","imageSlideProps","thumbnailIconClass","activePrefix","fadeInPrefix","fadeOutPrefix","placeholderPrefix","DELAY","DURATION","Thumbnail","fadeIn","fadeOut","active","onLoseFocusCallback","isHorizontal","position","boxSize","dimension","getThumbnailKey","thumbnail","poster","ThumbnailsTrack","track","border","borderStyle","borderColor","borderRadius","gap","vignette","handleControllerSwipe","animationOffset","trackRect","slideIndex","fadeAnimationDuration","ThumbnailsContext","useThumbnails","ThumbnailsContextProvider","hidden","thumbnailsIcon","ThumbnailsVisible","ThumbnailsHidden","ThumbnailsButton","show","hide","Thumbnails","thumbnailsProps","I","downloadAuthenticatedFile","filename","blob","objectUrl","downloadFile","executeImageDownload","downloadUrl","DownloadButton","onDownload","isDownloading","setIsDownloading","handleDownload","ImageGallery","images","startIndex","enableZoom","enableSlideshow","enableFullscreen","showCounter","showDownload","showThumbnails","setCurrentIndex","currentIndexRef","currentImage","previewImages","useImageGallery","setImages","setStartIndex","openGallery","galleryImages","closeGallery","getImageSrc","ProductImageViewer","selectedIndex","setSelectedIndex","galleryProps","QuantitySelector","min","max","handleDecrease","handleIncrease","handleInputChange","clampedValue","handleInputBlur","isMinDisabled","isMaxDisabled","REACTION_CONFIGS","PostReactions","reactions","userReaction","postId","onReact","sizeClasses","emojiSizes","getReactionCount","r","RichTextEditor","initialValue","imageUploadUrl","minHeight","editorRef","setContent","showCodeView","setShowCodeView","showLinkModal","setShowLinkModal","linkUrl","setLinkUrl","applyFormat","format","handleImageUpload","formData","response","handleFileSelect","insertLink","toolbarButtons","headingButtons","listButtons","btn","HtmlContent","isHtml","purifyConfig","actualContent","textClasses","defaultConfig","sanitizedHtml","match","before","href","after","HtmlEditor","isHtmlProp","onIsHtmlChange","rows","showHtmlModeToggle","contentClassName","htmlFieldName","readOnly","setIsHtml","localContent","setLocalContent","previewMode","setPreviewMode","handleContentChange","newContent","handleHtmlModeChange","isHtmlMode","handlePreviewModeToggle","ExpandableContent","expandText","collapseText","isExpanded","setIsExpanded","needsExpand","setNeedsExpand","contentRef","checkHeight","scrollHeight","toggleExpand","resolvedExpandText","resolvedCollapseText","Modal","title","iconClassName","closeOnOverlayClick","showCloseButton","closeOnEscape","shouldCloseOnBackdrop","modalRef","previousFocusRef","focusableElements","firstElement","lastElement","handleTab","zIndex","ConfirmDialog","message","confirmText","cancelText","onConfirm","onCancel","confirmButtonVariant","_cancelButtonVariant","_closeOnOverlay","isLoading","loadingText","resolvedConfirmText","resolvedCancelText","resolvedLoadingText","handleConfirm","handleCancel","confirmVariantClassMap","FileUploaderContext","createContext","FileUploaderProvider","useFileUploaderContext","useContext","_mergeNamespaces","copyExifWithoutOrientation","getApp1Segment","o","s","f","c","UZIP","u","h","d","g","m","w","E","F","B","U","C","Q","M","S","R","T","O","H","L","pushV","UPNG","decodeImage","_getBPP","_decompress","_inflate","_filterZero","_paeth","_IHDR","_copyTile","addErr","N","D","dither","_main","compressPNG","compress","_prepareDiff","_updateFrame","quantize","_filterLine","getKDtree","getNearest","planeDst","stats","estats","splitPixels","vecDot","set16","set32","seek","convert","CustomFile","CustomFileReader","getFilefromDataUrl","getDataUrlFromFile","loadImage","getBrowserName","approximateBelowMaximumCanvasSizeOfBrowser","getNewCanvasAndCtx","drawImageInCanvas","isIOS","drawFileInCanvas","$Try_2_Post","$Try_2_Catch","$Try_3_Catch","canvasToFile","$If_4","$If_5","$If_6","cleanupCanvasMemory","isAutoOrientationInBrowser","getExifOrientation","handleMaxWidthOrHeight","followExifOrientation","incProgress","setProgress","$If_2","$Loop_3","$Loop_3_exit","compressOnWebWorker","imageCompression","$Try_1_Catch","formatFileSize","bytes","units","extractErrorMessage","axiosError","firstError","getFileIcon","mimeType","useFileUploader","attachmentableType","attachmentableId","collection","maxFiles","maxConcurrentUploads","compressionOptions","roleIds","autoUpload","initialFiles","endpoints","onFilesChange","onUploadComplete","onUploadError","onRemove","onReorder","uploadTriggerEvent","confirmBeforeRemove","uploadParams","existingFiles","setExistingFiles","pendingFiles","setPendingFiles","isDragOver","setIsDragOver","activeUploadsRef","deletedIdsRef","uploadedFilesRef","confirmDialogOpen","setConfirmDialogOpen","itemToDelete","setItemToDelete","isDeleting","setIsDeleting","hasReorderedRef","customOrder","setCustomOrder","prevInitialFilesRef","galleryOpen","setGalleryOpen","galleryStartIndex","setGalleryStartIndex","galleryKeyRef","authenticatedImageUrls","setAuthenticatedImageUrls","authenticatedImageUrlsRef","stableInitialFiles","filteredFiles","initialIds","sessionUploaded","compressImage","compressionOpts","handleFiles","selectedFiles","totalCount","remainingSlots","filesToAdd","overflow","ext","accepted","mimePrefix","pendingFile","compressedBlob","uploadSingleFile","fileToUpload","roleId","progressEvent","progress","errorMessage","handleUploadAll","filesToUpload","uploadedAttachments","pendingToHashMap","uploadQueue","processQueue","attachment","pendingId","invalidMsg","workers","allExisting","updatedOrder","orderMap","ordered","aOrder","bOrder","executeRemoveAttachment","deleteUrl","itemKey","handleRemove","handleRetry","handleDragEnd","arrayMove","sortable_esm","over","combined","orderedItems","aKey","bKey","oldIndex","newIndex","reordered","newExisting","newPending","reorderedFiles","orderData","imageFiles","handleOpenGallery","imageIndex","cancelled","existingImageFiles","currentIds","ImageGallery$1","allItems","hasFiles","canAddMore","clear","getPendingFiles","FileDropZone","onFiles","useCombinedRefs","refs","canUseDOM","isWindow","elementString","isNode","getWindow","_target$ownerDocument","_target$ownerDocument2","isDocument","Document","isSVGElement","useIsomorphicLayoutEffect","useEvent","handler","handlerRef","useInterval","intervalRef","useLatestValue","dependencies","valueRef","useLazyMemo","useNodeRef","onChangeHandler","setNodeRef","usePrevious","ids","useUniqueId","createAdjustmentFn","modifier","adjustments","accumulator","adjustment","valueAdjustment","add","subtract","hasViewportRelativeCoordinates","isKeyboardEvent","KeyboardEvent","isTouchEvent","TouchEvent","getEventCoordinates","CSS","transform","scaleX","scaleY","_ref","SELECTOR","findFirstFocusableNode","hiddenStyles","HiddenText","LiveRegion","announcement","ariaLiveType","visuallyHidden","useAnnouncement","setAnnouncement","DndMonitorContext","useDndMonitor","registerListener","useDndMonitorProvider","_listener$type","defaultScreenReaderInstructions","defaultAnnouncements","_ref2","_ref3","_ref4","Accessibility","announcements","hiddenTextDescribedById","screenReaderInstructions","announce","liveRegionId","_ref5","_ref6","markup","Action","noop","useSensor","sensor","sensors","defaultCoordinates","distanceBetween","p1","p2","sortCollisionsAsc","sortCollisionsDesc","cornersOfRectangle","getFirstCollision","collisions","firstCollision","centerOfRectangle","closestCenter","collisionRect","droppableRects","droppableContainers","centerRect","droppableContainer","distBetween","closestCorners","corners","rectCorners","distances","corner","effectiveDistance","getIntersectionRatio","right","bottom","targetArea","entryArea","intersectionArea","intersectionRatio","rectIntersection","adjustScale","rect1","rect2","getRectDelta","createRectAdjustmentFn","getAdjustedRect","parseTransform","transformArray","inverseTransform","transformOrigin","parsedTransform","translateX","translateY","defaultOptions","getClientRect","getTransformAgnosticClientRect","getWindowClientRect","isFixed","computedStyle","isScrollable","overflowRegex","getScrollableAncestors","limit","scrollParents","findScrollableAncestors","getFirstScrollableAncestor","firstScrollableAncestor","getScrollableElement","getScrollXCoordinate","getScrollYCoordinate","getScrollCoordinates","Direction","isDocumentScrollingElement","getScrollPosition","scrollingContainer","minScroll","dimensions","maxScroll","isTop","isLeft","isBottom","isRight","defaultThreshold","getScrollDirectionAndSpeed","scrollContainer","scrollContainerRect","acceleration","thresholdPercentage","speed","getScrollElementRect","innerWidth","innerHeight","getScrollOffsets","scrollableAncestors","getScrollXOffset","getScrollYOffset","scrollIntoViewIfNeeded","measure","properties","Rect","scrollOffsets","axis","keys","getScrollOffset","currentOffsets","scrollOffsetsDeltla","Listeners","_this$target","eventName","_this$target2","getEventListenerTarget","EventTarget","hasExceededDistance","measurement","EventName","stopPropagation","KeyboardCode","defaultKeyboardCodes","defaultKeyboardCoordinateGetter","currentCoordinates","KeyboardSensor","activeNode","onStart","keyboardCodes","coordinateGetter","scrollBehavior","code","newCoordinates","coordinatesDelta","scrollDelta","scrollElementRect","clampedCoordinates","canScrollX","canScrollY","newScrollCoordinates","canScrollToNewCoordinates","coordinates","onMove","onEnd","onActivation","activator","isDistanceConstraint","constraint","isDelayConstraint","AbstractPointerSensor","events","listenerTarget","_getEventCoordinates","activationConstraint","bypassActivationConstraint","onPending","initialCoordinates","_getEventCoordinates2","activated","onAbort","_this$document$getSel","PointerSensor","events$1","MouseButton","MouseSensor","events$2","TouchSensor","touches","AutoScrollActivator","TraversalOrder","useAutoScroller","canScroll","draggingRect","enabled","interval","order","pointerCoordinates","scrollableAncestorRects","scrollIntent","useScrollIntent","setAutoScrollInterval","clearAutoScrollInterval","scrollSpeed","scrollDirection","scrollContainerRef","autoScroll","scrollLeft","scrollTop","sortedScrollableAncestors","defaultScrollIntent","previousDelta","previousIntent","useCachedNode","draggableNodes","draggableNode","cachedNode","useCombineActivators","getSyntheticHandler","Sensor","sensorActivators","MeasuringStrategy","MeasuringFrequency","useDroppableMeasuring","containers","dragging","queue","setQueue","frequency","strategy","containersRef","isDisabled","disabledRef","measureDroppableContainers","map","useInitialValue","computeFn","useInitialRect","useMutationObserver","handleMutations","mutationObserver","MutationObserver","useResizeObserver","resizeObserver","ResizeObserver","defaultMeasure","useRect","fallbackRect","setRect","measureRect","currentRect","newRect","records","record","useRectDelta","initialRect","defaultValue$1","useScrollableAncestors","previousNode","ancestors","useScrollOffsets","scrollCoordinates","setScrollCoordinates","prevElements","handleScroll","scrollingElement","previousElements","scrollableElement","useScrollOffsetsDelta","initialScrollOffsets","hasScrollOffsets","useSensorSetup","teardownFns","teardown","useSyntheticListeners","useWindowRect","defaultValue$2","useRects","windowRect","rects","setRects","measureRects","getMeasurableNode","firstChild","useDragOverlayMeasuring","handleNodeChange","defaultSensors","defaultData","defaultMeasuringConfiguration","DroppableContainersMap","_super$get","_this$get$node$curren","_this$get","defaultPublicContext","defaultInternalContext","InternalContext","PublicContext","getInitialState","RestoreFocus","activatorEvent","previousActivatorEvent","previousActiveId","activatorNode","focusableNode","applyModifiers","modifiers","useMeasuringConfiguration","useLayoutShiftScrollCompensation","initialized","rectDelta","ActiveDraggableContext","Status","DndContext","memo","_sensorContext$curren","_dragOverlay$nodeRef$","_dragOverlay$rect","_over$rect","accessibility","collisionDetection","measuring","store","useReducer","dispatchMonitorEvent","registerMonitorListener","isInitialized","activeId","activeRects","_node$data","activeRef","activeSensor","setActiveSensor","setActivatorEvent","latestProps","draggableDescribedById","enabledDroppableContainers","measuringConfiguration","measuringScheduled","activationCoordinates","autoScrollOptions","getAutoScrollerOptions","initialActiveNodeRect","activeNodeRect","containerNodeRect","sensorContext","overNode","dragOverlay","draggingNode","draggingNodeRect","usesDragOverlay","nodeRectDelta","modifiedTranslate","scrollAdjustment","activeNodeScrollDelta","scrollAdjustedTranslate","overId","setOver","appliedTranslate","activeSensorRef","instantiateSensor","sensorInstance","onDragAbort","onDragPending","onDragStart","unstable_batchedUpdates","createHandler","cancelDrop","bindActivatorToSensorInstantiator","nativeEvent","activeDraggableNode","activationContext","activators","onDragMove","onDragOver","overContainer","publicContext","internalContext","activeSensorDisablesAutoscroll","autoScrollGloballyDisabled","NullContext","defaultRole","ID_PREFIX","useDraggable","ariaDescribedById","role","roleDescription","tabIndex","isDragging","setActivatorNodeRef","dataRef","memoizedAttributes","useDndContext","ID_PREFIX$1","defaultResizeObserverConfig","useDroppable","resizeObserverConfig","previous","resizeObserverConnected","callbackId","resizeObserverDisabled","updateMeasurementsFor","resizeObserverTimeout","newElement","previousElement","from","to","newArray","getSortedRects","isValidIndex","itemsEqual","normalizeDisabled","rectSortingStrategy","activeIndex","overIndex","newRects","oldRect","Context","SortableContext","userDefinedItems","disabledProp","useDragOverlay","previousItemsRef","itemsHaveChanged","disableTransforms","contextValue","defaultNewIndexGetter","defaultAnimateLayoutChanges","isSorting","wasDragging","previousItems","previousContainerId","transition","defaultTransition","transitionProperty","disabledTransition","defaultAttributes","useDerivedTransform","derivedTransform","setDerivedtransform","previousIndex","initial","useSortable","animateLayoutChanges","userDefinedAttributes","localDisabled","customData","getNewIndex","localStrategy","globalDisabled","sortedRects","globalStrategy","normalizeLocalDisabled","itemsAfterCurrentSortable","isOver","setDroppableNodeRef","setDraggableNodeRef","displaceItem","shouldDisplaceDragSource","dragSourceDisplacement","finalTransform","shouldAnimateLayoutChanges","getTransition","_localDisabled$dragga","_localDisabled$droppa","hasSortableData","directions","sortableKeyboardCoordinates","filteredContainers","closestId","activeDroppable","newDroppable","newNode","hasDifferentScrollAncestors","hasSameContainer","isSameContainer","isAfterActive","isAfter","rectCoordinates","SortableThumbnailItem","onRetry","onImageClick","isPrimary","onPrimaryClick","isPending","isUploading","isCompressing","hasError","preview","isImage","authenticatedImageUrl","setAuthenticatedImageUrl","isMounted","existingImageUrl","FileList","onDragEnd","onAddClick","enablePrimarySelection","primaryFileId","onPrimaryChange","isExisting","EMPTY_FILES","EMPTY_ROLE_IDS","FileUploader","confirmRemoveTitle","confirmRemoveMessage","apiEndpoints","callbackRef","wrappedOnFilesChange","files","uploader","pendingItem","attachmentItem","SocialIcon","provider","PROVIDER_CONFIGS","SocialLoginButtons","providers","handleSocialLogin","callbackUrl","getButtonText","providerName","filteredProviders","getTranslation","defaultIconMap","typeStyleMap","positionClassMap","Toast","toasts","visibleToasts","setVisibleToasts","prevState","toast","effectiveDuration","ToastItemComponent","isVisible","typeStyle","hideTranslate","PageTransitionIndicator","setIsPending","transitionManager","newIsPending","PageTransitionBlur","TAILWIND_BREAKPOINTS","DISPLAY_CLASSES","LAYOUT_CONTAINERS","TEXT_COMPONENTS","INPUT_COMPONENTS","MEDIA_COMPONENTS","COMPOSITE_SKELETONS","animClass","iterCount","filterChildren","withIf","withoutIf","positiveIf","isNegativeCondition","areMutuallyExclusiveBranches","pickRichestBranch","positive","ifExpr","trimmed","branches","baseExpressions","branch","orMatch","first","best","curr","countDescendants","sum","resolveExpressions","ternaryMatch","sanitizeClassName","sanitized","num","resolveLayoutProps","directionMap","justify","justifyMap","align","alignMap","wrap","wrapMap","cols","getAnimationClass","renderChildren","renderSkeletonNode","resolveClassName","baseClassName","resolveResponsiveDisplay","tokens","displayEntries","otherClasses","token","responsiveMatch","cls","effectiveDisplay","resolvedClassName","extractArbitraryGridCols","iteration","rawClassName","layoutClasses","exprResolved","responsive","barClass","renderedChildren","gridResult","sanitizedLeafClass","heightMap","widthMap","spacing","borderClass","PageSkeleton","components","PageLoading","isDark","bgColor","spinnerColor","textColor","Pagination","currentPage","totalPages","onPageChange","maxVisiblePages","showFirstLast","prevText","nextText","pageNumbers","pages","halfVisible","startPage","endPage","handlePageClick","page","handlePrevious","handleNext","pageNum","SearchBar","controlledValue","onSubmit","showButton","suggestions","onSuggestionClick","showSuggestions","resolvedPlaceholder","isFocused","setIsFocused","previousValueRef","shouldShowSuggestions","handleSuggestionClick","suggestion","syntheticEvent","handleSubmit","avatarSizeMap","AvatarUploader","src","fallbackText","uploadEndpoint","deleteEndpoint","onUploadSuccess","onDeleteSuccess","onDeleteError","showDeleteButton","uploadButtonText","deleteButtonText","confirmDelete","deleteConfirmMessage","confirmUpload","uploadConfirmMessage","uploadSuccessActions","uploadErrorActions","deleteSuccessActions","deleteErrorActions","setIsUploading","localAvatarUrl","setLocalAvatarUrl","setErrorMessage","showDeleteConfirm","setShowDeleteConfirm","showUploadConfirm","setShowUploadConfirm","setPendingFile","previewUrl","setPreviewUrl","inputId","getCsrfToken","getAuthToken","executeUpload","csrfToken","authToken","errorData","handleFileChange","maxBytes","executeDelete","handleDeleteClick","handleDeleteCancel","handleUploadCancel","handleUploadConfirm","currentAvatarUrl","hasAvatar","avatarSize","isConfirmMode","renderButtons","getG7Core","LAYOUT_CLASSES","createDefaultMenuItems","SubText","UserInfo","userId","subText","subTextTitle","showDropdown","clickable","profilePath","layout","menuItems","hideMenuItems","appendMenuItems","actualUserId","menuPosition","setMenuPosition","actualProfilePath","containerClass","isInsideContainer","isInsideDropdown","handleScrollOrResize","getMenuItems","updateMenuPosition","buttonRect","handleMenuItemClick","finalMenuItems","defaultColorClass","nameButtonClass","TabNavigation","tabs","activeTabId","onTabChange","hiddenTabIds","mobileBreakpoint","handleTabClick","tab","handleSelectChange","selectedId","numericId","finalId","selectedTab","visibleTabs","getTabClasses","navClasses","compositeComponents","Header$1","Footer$1","MobileNav$1","SlotContainer$1","NotificationCenter$1","ProductCard$1","ProductImageViewer$1","QuantitySelector$1","PostReactions$1","RichTextEditor$1","HtmlContent$1","HtmlEditor$1","ExpandableContent$1","ConfirmDialog$1","SocialLoginButtons$1","Toast$1","PageTransitionIndicator$1","PageTransitionBlur$1","PageSkeleton$1","PageLoading$1","ThemeToggle$1","Pagination$1","SearchBar$1","Avatar$1","AvatarUploader$1","UserInfo$1","Modal$1","TabNavigation$1","Container","Grid","rowGap","colGap","autoRows","autoCols","flow","autoRowsMap","autoColsMap","flowMap","Flex","grow","shrink","SectionLayout","subtitle","background","centered","shadow","paddingMap","backgroundMap","maxWidthMap","shadowMap","BaseSection","ThreeColumnLayout","leftWidth","rightWidth","leftSlot","centerSlot","rightSlot","leftStyle","centerStyle","rightStyle","CURRENCY_CONFIGS","formatPrice","amount","currencyCode","recalcMultiCurrencyTotal","unitPriceMap","quantity","additionalUnitKrw","krwUnit","unitValue","additionalConverted","total","buildSelectedTotalMultiCurrency","totals","mc","computeAdditionalOptionsTotal","selections","valueId","getGroupKey","getOptionValueByGroupKey","optionValues","optionValuesLocalized","groupKey","convertOptionValuesToRecord","findMatchingOption","optionGroups","currentSelection","selectedValue","addSelectedItemIfCompleteHandler","selectedOptionItems","matchedOption","optionKey","unitPrice","optionLabels","additionalOptionGroups","additionalOptionSelections","additionalOptionsTotal","blockUnitTotal","newItem","nextItems","updateSelectedItemQuantityHandler","itemIndex","newQuantity","updatedItems","totalPrice","setBlockAdditionalOptionHandler","additionalOptionId","isCustomTextMode","customTexts","removeSelectedItemHandler","updateNoOptionQuantityHandler","setLocalState","updates","getLocalState","getGlobalState","showToast","refetchCartItems","selectedItems","toggleCartItemSelectionHandler","_context","itemId","currentSelected","newSelected","allSelected","selectAllCartItemsHandler","allItemIds","setCartOptionHandler","optionName","currentOptions","openCartDeleteModalHandler","targetIds","openCartOptionModalHandler","targetItem","recalculateCartHandler","selectedOptions","findMatchingOptionHandler","initCartOptionSelectionHandler","currentOptionValues","valuesArray","CART_KEY_STORAGE_NAME","CART_KEY_API_ENDPOINT","GUEST_ORDER_TOKEN_STORAGE_NAME","GUEST_ORDER_NUMBER_STORAGE_NAME","GUEST_ORDER_EXPIRES_AT_STORAGE_NAME","issueCartKeyFromApi","setGlobalState","getCurrentUser","g7Config","initCartKeyHandler","_action","cartKey","getCartKeyHandler","clearCartKeyHandler","regenerateCartKeyHandler","newCartKey","saveToStorageHandler","loadFromStorageHandler","clearGuestOrderTokenInternal","initGuestOrderTokenHandler","expiresAt","expired","expiryTs","existing","saveGuestOrderTokenHandler","orderNumber","clearGuestOrderTokenHandler","clearGuestTokenOnEntryHandler","getDisplayPriceHandler","priceField","formatCurrencyHandler","customLocale","formatted","getCurrencySymbol","STORAGE_KEY","DEFAULT_CURRENCY","loadPreferredCurrencyHandler","defaultCurrency","stored","isValidCurrency","savePreferredCurrencyHandler","VALID_THEMES","initTheme","theme","initThemeHandler","targetTheme","setThemeHandler","validTheme","redirectToLoginWithReturnHandler","returnUrl","downloadAttachmentHandler","handlerMap","resolveTarget","payload","local","global","pick","candidates","email","phone","getAuthHeader","getLocaleHeader","startChallenge","res","json","msg","sirsoftBasicIdentityLauncher","identity","challenge","expiresMs","remainingSeconds","maxAttempts","currentExpiresMs","resendCooldown","tickHandle","remaining","updated","ms","cd","deferred","registerSirsoftBasicIdentityLauncher","readCatalog","control","icons","entryLabel","matchesQuery","q","IconPreview","previewBox","IconPickerWidget","catalog","columns","searchPlaceholderKey","query","setQuery","inputStyle","labelOf","filtered","grid","cellSelected","cell","previewText","selected","emptyHint","registerSirsoftBasicEditorWidgets","layoutEditor","initTemplate","retryCount","maxRetries","registerHandlers","actionDispatcher"],"mappings":"8UAGMA,GAAS,IAAO,OAAe,OAUxBC,EAASC,EAAAA,WAA2C,CAAC,CAChE,SAAAC,EACA,QAAAC,EAAU,UACV,KAAAC,EAAO,KACP,UAAAC,EAAY,GACZ,GAAGC,CACL,EAAGC,IAAQ,CACT,MAAMC,EAAc,0CAGdC,EAAkBV,MAAU,OAAO,eAAeS,EAAaH,CAAS,GACzE,GAAGG,CAAW,IAAIH,CAAS,GAEhC,OACEK,EAAAA,IAAC,SAAA,CACC,IAAAH,EACA,UAAWE,EACV,GAAGH,EAEH,SAAAJ,CAAA,CAAA,CAGP,CAAC,EAEDF,EAAO,YAAc,SC5Bd,MAAMW,EAAMC,EAAM,WAAqC,CAAC,CAC7D,SAAAV,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,EAAGC,IAECG,EAAAA,IAAC,MAAA,CACC,IAAAH,EACA,UAAAF,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,CAGN,EChBYW,GAA4B,CAAC,CACxC,SAAAX,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,OAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMY,GAA0B,CAAC,CACtC,SAAAZ,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,MAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECDMa,GAAQd,EAAAA,WAAyC,CAAC,CAC7D,MAAAe,EACA,MAAAC,EACA,UAAAZ,EAAY,GACZ,SAAAa,EACA,WAAAC,EACA,MAAAC,EACA,aAAAC,EACA,KAAAC,EAAO,OACP,QAAAC,EACA,eAAAC,EACA,GAAGlB,CACL,EAAGC,IAAQ,CAET,MAAMkB,EAAkBH,IAAS,SAAWA,IAAS,WAG/CI,EAAiBC,EAAAA,OAAO,EAAK,EAE7BC,EAAcD,EAAAA,OAAyB,IAAI,EAGjDE,EAAAA,oBAAoBtB,EAAK,IAAMqB,EAAY,OAA2B,EAGtE,KAAM,CAACE,EAAYC,CAAa,EAAIC,EAAAA,SACjCZ,GAAqBC,GAA2B,EAAA,EAInDY,EAAAA,UAAU,IAAM,CACV,CAACR,GAAmB,CAACC,EAAe,SAAWN,IAAU,QAC3DW,EAAcX,CAAe,CAEjC,EAAG,CAACA,EAAOK,CAAe,CAAC,EAE3B,MAAMS,EAAyBC,EAAAA,YAAY,IAAM,CAC/CT,EAAe,QAAU,EAC3B,EAAG,CAAA,CAAE,EAECU,EAAuBD,EAAAA,YAC1BE,GAAgD,CAG/C,GAFAX,EAAe,QAAU,GAErBR,EAAU,CAEZ,MAAMoB,EAAgBD,EAAE,OAA4B,MACpDN,EAAcO,CAAY,EAG1B,MAAMC,EAAc,IAAI,MAAM,SAAU,CAAE,QAAS,GAAM,EACzD,OAAO,eAAeA,EAAa,SAAU,CAC3C,SAAU,GACV,MAAO,CAAE,MAAOD,CAAA,CAAa,CAC9B,EACD,OAAO,eAAeC,EAAa,gBAAiB,CAClD,SAAU,GACV,MAAO,CAAE,MAAOD,CAAA,CAAa,CAC9B,EAEDpB,EAASqB,CAAW,CACtB,CACF,EACA,CAACrB,CAAQ,CAAA,EAGLsB,EAAeL,EAAAA,YAClBE,GAA2C,CAC1C,MAAMI,EAAWJ,EAAE,OAAO,MAE1BN,EAAcU,CAAQ,EAGlB,CAAAf,EAAe,SAGfR,GACFA,EAASmB,CAAC,CAEd,EACA,CAACnB,CAAQ,CAAA,EAGLwB,EAAiBP,EAAAA,YACpBE,GAA6C,CAExCX,EAAe,SAGfP,GACFA,EAAWkB,CAAC,CAEhB,EACA,CAAClB,CAAU,CAAA,EAIP,CAAE,eAAAwB,EAAgB,SAAAC,EAAU,GAAGC,GAAevC,EAIpD,GAAImB,EACF,OACEf,EAAAA,IAAC,QAAA,CACC,IAAKkB,EACL,KAAAN,EACA,UAAAjB,EACA,SAAAa,EACA,QAAAK,EACA,eAAAC,EACA,MAAAJ,EACC,GAAGyB,CAAA,CAAA,EAMV,MAAMC,EAAa1B,IAAU,OACzB,CAAE,MAAOU,CAAA,EACT,CAAE,aAAAT,CAAA,EAEN,OACEX,EAAAA,IAAC,QAAA,CACC,IAAKkB,EACL,KAAAN,EACA,UAAAjB,EACA,SAAUmC,EACV,WAAYE,EACZ,mBAAoBR,EACpB,iBAAkBE,EACjB,GAAGU,EACH,GAAGD,CAAA,CAAA,CAGV,CAAC,EAGD9B,GAAM,YAAc,QC7Hb,MAAMgC,GAAY9C,EAAAA,WAA6C,CAAC,CACrE,OAAA+C,EACA,QAAAC,EACA,SAAA/B,EACA,QAAAgC,EACA,WAAAC,EAAa,SACb,YAAAC,EAAc,mBACd,UAAA/C,EAAY,GACZ,SAAAgD,EACA,GAAG/C,CACL,EAAGC,IAAQ,CACT,MAAMqB,EAAcD,EAAAA,OAAyB,IAAI,EAC3C2B,EAAY/C,GAA6CqB,EACzD,CAAC2B,EAAUC,CAAW,EAAIxB,EAAAA,SAAiB,EAAE,EAM7CyB,EAA2C,CAAA,EAC3CX,EAAsC,CAAA,EAC5C,OAAO,QAAQxC,CAAgC,EAAE,QAAQ,CAAC,CAACoD,EAAKC,CAAG,IAAM,CACnED,EAAI,WAAW,cAAc,GAAKA,IAAQ,MAAQA,IAAQ,eAAiBA,IAAQ,eACrFD,EAAgBC,CAAG,EAAIC,EAEvBb,EAAWY,CAAG,EAAIC,CAEtB,CAAC,EAED,MAAMC,EAAczB,EAAAA,YAAY,IAAM,CAChC,CAACkB,GAAYC,EAAS,SACxBA,EAAS,QAAQ,MAAA,CAErB,EAAG,CAACD,EAAUC,CAAQ,CAAC,EAEjBd,EAAeL,cAAaE,GAA2C,CAC3E,MAAMwB,EAAOxB,EAAE,OAAO,QAAQ,CAAC,GAAK,KAEpC,GAAI,CAACwB,EAAM,CACTL,EAAY,EAAE,EACdtC,IAAW,IAAI,EACf,MACF,CAGA,GAAI+B,GAAWY,EAAK,KAAOZ,EAAU,KAAO,KAAM,CAChD,MAAMa,EAAW,qBAAqBb,CAAO,WAC7CC,IAAUY,CAAQ,EAEdR,EAAS,UACXA,EAAS,QAAQ,MAAQ,IAE3BE,EAAY,EAAE,EACd,MACF,CAEAA,EAAYK,EAAK,IAAI,EACrB3C,IAAW2C,CAAI,CACjB,EAAG,CAACZ,EAAS/B,EAAUgC,EAASI,CAAQ,CAAC,EAEnCS,EAAc5B,cAAaE,GAAwB,CACvDA,EAAE,gBAAA,EACEiB,EAAS,UACXA,EAAS,QAAQ,MAAQ,IAE3BE,EAAY,EAAE,EACdtC,IAAW,IAAI,CACjB,EAAG,CAACA,EAAUoC,CAAQ,CAAC,EAEvB,cACG3C,EAAA,CAAI,UAAW,2BAA2BN,CAAS,GAAK,GAAGoD,EAC1D,SAAA,CAAA/C,EAAAA,IAACK,GAAA,CACC,IAAKuC,EACL,KAAK,OACL,OAAAN,EACA,SAAUR,EACV,SAAAa,EACA,UAAU,SACT,GAAGP,CAAA,CAAA,EAENpC,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAS4D,EACT,SAAAP,EACA,UAAU,sTAET,SAAAF,CAAA,CAAA,EAEHzC,EAAAA,IAACG,GAAA,CAAK,UAAU,2DACb,YAAYuC,EACf,EACCG,GAAY,CAACF,GACZ3C,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAS+D,EACT,UAAU,iEACV,aAAW,aAEX,SAAArD,EAAAA,IAACI,IAAI,UAAU,UAAU,KAAK,OAAO,OAAO,eAAe,QAAQ,YACjE,eAAC,OAAA,CAAK,cAAc,QAAQ,eAAe,QAAQ,YAAa,EAAG,EAAE,uBAAuB,CAAA,CAC9F,CAAA,CAAA,CACF,EAEJ,CAEJ,CAAC,EAEDiC,GAAU,YAAc,YCpHjB,IAAKiB,IAAAA,IAEVA,EAAA,KAAO,UACPA,EAAA,MAAQ,WACRA,EAAA,WAAa,iBACbA,EAAA,SAAW,eACXA,EAAA,UAAY,gBACZA,EAAA,WAAa,iBAGbA,EAAA,OAAS,YACTA,EAAA,KAAO,UACPA,EAAA,OAAS,gBACTA,EAAA,MAAQ,WACRA,EAAA,KAAO,UACPA,EAAA,KAAO,UACPA,EAAA,MAAQ,WACRA,EAAA,MAAQ,WACRA,EAAA,MAAQ,WACRA,EAAA,SAAW,cACXA,EAAA,OAAS,YACTA,EAAA,KAAO,UACPA,EAAA,aAAe,uBAGfA,EAAA,KAAO,UACPA,EAAA,YAAc,kBACdA,EAAA,aAAe,mBACfA,EAAA,UAAY,gBACZA,EAAA,YAAc,kBACdA,EAAA,UAAY,gBACZA,EAAA,WAAa,iBACbA,EAAA,QAAU,cACVA,EAAA,UAAY,gBACZA,EAAA,QAAU,cACVA,EAAA,UAAY,gBACZA,EAAA,UAAY,gBACZA,EAAA,WAAa,iBACbA,EAAA,KAAO,UACPA,EAAA,iBAAmB,gBACnBA,EAAA,mBAAqB,gBAGrBA,EAAA,YAAc,kBACdA,EAAA,YAAc,kBACdA,EAAA,kBAAoB,wBACpBA,EAAA,oBAAsB,0BACtBA,EAAA,WAAa,iBACbA,EAAA,eAAiB,qBACjBA,EAAA,QAAU,kBAGVA,EAAA,aAAe,mBACfA,EAAA,YAAc,kBACdA,EAAA,WAAa,iBACbA,EAAA,IAAM,SACNA,EAAA,KAAO,UAGPA,EAAA,KAAO,UACPA,EAAA,QAAU,cACVA,EAAA,OAAS,YACTA,EAAA,WAAa,iBAGbA,EAAA,SAAW,cACXA,EAAA,MAAQ,WACRA,EAAA,QAAU,aACVA,EAAA,SAAW,cAGXA,EAAA,IAAM,SACNA,EAAA,KAAO,UACPA,EAAA,SAAW,SACXA,EAAA,OAAS,YACTA,EAAA,QAAU,eAGVA,EAAA,MAAQ,WACRA,EAAA,OAAS,YACTA,EAAA,MAAQ,WACRA,EAAA,OAAS,YAGTA,EAAA,MAAQ,WACRA,EAAA,KAAO,UACPA,EAAA,SAAW,eACXA,EAAA,WAAa,iBACbA,EAAA,MAAQ,WAGRA,EAAA,MAAQ,WACRA,EAAA,SAAW,cACXA,EAAA,YAAc,kBAGdA,EAAA,KAAO,UACPA,EAAA,OAAS,YACTA,EAAA,IAAM,SACNA,EAAA,SAAW,eACXA,EAAA,KAAO,UACPA,EAAA,KAAO,UACPA,EAAA,IAAM,SACNA,EAAA,UAAY,oBACZA,EAAA,MAAQ,WACRA,EAAA,KAAO,UACPA,EAAA,OAAS,YACTA,EAAA,IAAM,SACNA,EAAA,KAAO,UAGPA,EAAA,SAAW,eACXA,EAAA,UAAY,gBACZA,EAAA,SAAW,eACXA,EAAA,UAAY,gBAGZA,EAAA,QAAU,aACVA,EAAA,YAAc,kBAGdA,EAAA,WAAa,iBAGbA,EAAA,UAAY,gBAGZA,EAAA,SAAW,eAGXA,EAAA,SAAW,cAGXA,EAAA,gBAAkB,uBAGlBA,EAAA,kBAAoB,yBAGpBA,EAAA,UAAY,gBAGZA,EAAA,KAAO,UACPA,EAAA,MAAQ,WACRA,EAAA,KAAO,UACPA,EAAA,YAAc,kBAGdA,EAAA,KAAO,UACPA,EAAA,YAAc,kBACdA,EAAA,WAAa,iBACbA,EAAA,MAAQ,UACRA,EAAA,EAAI,WACJA,EAAA,KAAO,UACPA,EAAA,QAAU,cACVA,EAAA,MAAQ,WACRA,EAAA,IAAM,SACNA,EAAA,WAAa,iBACbA,EAAA,SAAW,cACXA,EAAA,UAAY,eACZA,EAAA,MAAQ,WACRA,EAAA,KAAO,UACPA,EAAA,WAAa,iBACbA,EAAA,OAAS,oBACTA,EAAA,WAAa,qBApKHA,IAAAA,IAAA,CAAA,CAAA,EA2KL,MAAMC,GAAwC,CAEnD,KAAQ,UACR,MAAS,WACT,cAAe,iBACf,YAAa,eACb,aAAc,gBACd,cAAe,iBAGf,OAAU,YACV,KAAQ,UACR,OAAU,gBACV,MAAS,WACT,KAAQ,UACR,KAAQ,UACR,MAAS,WACT,MAAS,WACT,MAAS,WACT,SAAY,cACZ,OAAU,YACV,KAAQ,UACR,gBAAiB,uBAGjB,KAAQ,UACR,eAAgB,kBAChB,gBAAiB,mBACjB,aAAc,gBACd,eAAgB,kBAChB,aAAc,gBACd,cAAe,iBACf,WAAY,cACZ,aAAc,gBACd,WAAY,cACZ,aAAc,gBACd,aAAc,gBACd,cAAe,iBACf,KAAQ,UACR,oBAAqB,gBACrB,aAAc,gBACd,sBAAuB,gBACvB,aAAc,gBAGd,eAAgB,kBAChB,eAAgB,kBAChB,WAAY,kBACZ,qBAAsB,wBACtB,uBAAwB,0BACxB,cAAe,iBACf,kBAAmB,qBAGnB,gBAAiB,mBACjB,eAAgB,kBAChB,cAAe,iBACf,IAAO,SACP,KAAQ,UAGR,KAAQ,UACR,WAAY,cACZ,OAAU,YACV,cAAe,iBAGf,SAAY,cACZ,MAAS,WACT,QAAW,aACX,SAAY,cAGZ,IAAO,SACP,KAAQ,UACR,SAAY,SACZ,OAAU,YACV,QAAW,eAGX,MAAS,WACT,OAAU,YACV,MAAS,WACT,OAAU,YAGV,MAAS,WACT,KAAQ,UACR,YAAa,eACb,cAAe,iBACf,MAAS,WAGT,MAAS,WACT,SAAY,cACZ,eAAgB,kBAGhB,KAAQ,UACR,OAAU,YACV,IAAO,SACP,YAAa,eACb,KAAQ,UACR,KAAQ,UACR,IAAO,SACP,aAAc,oBACd,MAAS,WACT,KAAQ,UACR,OAAU,YACV,IAAO,SACP,KAAQ,UAGR,YAAa,eACb,aAAc,gBACd,YAAa,eACb,aAAc,gBAGd,QAAW,aACX,eAAgB,kBAGhB,cAAe,iBACf,cAAe,iBAGf,KAAQ,UACR,MAAS,WACT,KAAQ,UACR,eAAgB,kBAGhB,MAAS,UACT,KAAQ,UACR,iBAAkB,kBAClB,cAAe,iBACf,KAAQ,UACR,EAAK,WACL,KAAQ,UACR,cAAe,cACf,WAAY,cACZ,KAAQ,cACR,MAAS,WACT,QAAW,SACX,IAAO,SACP,KAAQ,iBACR,cAAe,iBACf,YAAa,cACb,UAAa,eACb,MAAS,WACT,aAAc,UACd,KAAQ,UACR,SAAU,iBACV,cAAe,iBACf,UAAW,oBACX,cAAe,qBAGf,iBAAkB,0BAClB,WAAY,gBACZ,YAAa,eACb,SAAY,cACZ,SAAU,UACV,SAAU,UACV,aAAc,uBACd,KAAQ,cACR,SAAY,yBACZ,UAAW,WACX,SAAU,eACZ,EC9QaC,GAA4B,CAAC,CACxC,KAAAC,EACA,UAAAC,EAAY,QACZ,KAAAhE,EACA,MAAAiE,EACA,KAAAC,EAAO,GACP,MAAAC,EAAQ,GACR,WAAAC,EAAa,GACb,UAAAC,EACA,UAAApE,EAAY,GACZ,MAAAqE,EACA,GAAGpE,CACL,IAAM,CAEJ,MAAMqE,EAA2C,CAC/C,MAAO,MACP,QAAS,MACT,MAAO,MACP,QAAS,MACT,OAAQ,KAAA,EAIJC,EAAU,OAAOT,GAAS,SAAWA,EAAO,OAAOA,CAAI,EACvDU,EAAaZ,GAAYW,CAAO,EAEhCE,EAAWD,EACb,OAAOA,CAAU,EAAE,QAAQ,OAAQ,EAAE,EACrCD,EAAQ,QAAQ,OAAQ,EAAE,EAGxBG,EAAU,CACdJ,EAAcP,CAAS,EACvB,MAAMU,CAAQ,GACd1E,GAAQ,MAAMA,CAAI,GAClBkE,GAAQ,UACRC,GAAS,WACTC,GAAc,QACdH,EACAhE,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAGL2E,EAAqBP,GAAaK,EAAS,QAAQ,KAAM,GAAG,EAElE,OACEpE,EAAAA,IAAC,IAAA,CACC,UAAWqE,EACX,MAAAL,EACA,aAAYM,EACZ,KAAK,MACJ,GAAG1E,CAAA,CAAA,CAGV,EC9IM2E,GAAI,CAACvB,EAAawB,IACrB,OACE,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EAsBpByB,GAAuD,CAClE,UAAW,CACT,IAAK,YACL,SAAU,sCACV,aAAc,EACd,SAAU,CAAC/D,EAAegE,EAAQ,IAAMhE,EAAM,QAAUgE,CAAA,EAE1D,UAAW,CACT,IAAK,YACL,SAAU,sCACV,aAAc,GACd,SAAU,CAAChE,EAAegE,EAAQ,KAAOhE,EAAM,QAAUgE,CAAA,EAE3D,aAAc,CACZ,IAAK,eACL,SAAU,yCACV,SAAWhE,GAAkB,QAAQ,KAAKA,CAAK,CAAA,EAEjD,aAAc,CACZ,IAAK,eACL,SAAU,yCACV,SAAWA,GAAkB,QAAQ,KAAKA,CAAK,CAAA,EAEjD,UAAW,CACT,IAAK,YACL,SAAU,sCACV,SAAWA,GAAkB,QAAQ,KAAKA,CAAK,CAAA,EAEjD,WAAY,CACV,IAAK,aACL,SAAU,uCACV,SAAWA,GAAkB,yBAAyB,KAAKA,CAAK,CAAA,EAElE,SAAU,CACR,IAAK,WACL,SAAU,qCACV,SAAWA,GAAkB,CAAC,KAAK,KAAKA,CAAK,CAAA,EAE/C,SAAU,CACR,IAAK,WACL,SAAU,qCACV,aAAc,EACd,SAAU,CAACA,EAAegE,EAAQ,IAAM,CACtC,IAAIC,EAAQ,EACZ,MAAI,QAAQ,KAAKjE,CAAK,GAAGiE,IACrB,QAAQ,KAAKjE,CAAK,GAAGiE,IACrB,QAAQ,KAAKjE,CAAK,GAAGiE,IACrB,yBAAyB,KAAKjE,CAAK,GAAGiE,IACnCA,GAASD,CAClB,CAAA,CAEJ,EAQaE,GAAuC,CAClDH,GAAuB,SACzB,EAkBA,SAASI,GAAgBC,EAAuC,CAC9D,KAAM,CAAC9B,EAAK+B,CAAQ,EAAID,EAAW,MAAM,GAAG,EACtCE,EAAOP,GAAuBzB,CAAG,EACvC,GAAI,CAACgC,EAAM,OAAO,KAElB,MAAMN,EAAQK,EAAW,SAASA,EAAU,EAAE,EAAIC,EAAK,aACvD,MAAO,CAAE,KAAAA,EAAM,MAAO,MAAMN,CAAe,EAAIM,EAAK,aAAeN,CAAA,CACrE,CAwEO,MAAMO,GAAgB1F,EAAAA,WAC3B,CACE,CACE,MAAAe,EACA,MAAAC,EACA,WAAA2E,EAAa,GACb,eAAAC,EAAiB,GACjB,eAAAC,EAAiB,GACjB,cAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,MAAAC,EACA,YAAAC,EACA,UAAAC,EACA,iBAAAC,EAAmB,GACnB,oBAAAC,EAAsB,GACtB,UAAAjG,EAAY,GACZ,SAAAa,EACA,MAAAE,EACA,aAAAC,EACA,SAAAgC,EACA,GAAG/C,CAAA,EAELC,IACG,CACH,MAAMqB,EAAcD,EAAAA,OAAyB,IAAI,EACjDE,EAAAA,oBAAoBtB,EAAK,IAAMqB,EAAY,OAA2B,EAGtE,KAAM,CAAC2E,EAAcC,CAAe,EAAIxE,EAAAA,SAAS,EAAK,EAGhD,CAACyE,EAAYC,CAAa,EAAI1E,EAAAA,SAAS,EAAK,EAG5C,CAAC2E,EAAeC,CAAgB,EAAI5E,EAAAA,SACvCZ,GAAqBC,GAA2B,EAAA,EAInDY,EAAAA,UAAU,IAAM,CACVb,IAAU,QACZwF,EAAiBxF,CAAe,CAEpC,EAAG,CAACA,CAAK,CAAC,EAGV,MAAMyF,EAAcC,EAAAA,QAAQ,IAEtBZ,GAASA,EAAM,OAAS,EACnBA,EAAM,IAAKR,IAAU,CAAE,KAAAA,EAAM,MAAOA,EAAK,YAAA,EAAe,EAI7DS,GAAeA,EAAY,OAAS,EAC/BA,EACJ,IAAKY,GAAYxB,GAAgBwB,CAAO,CAAC,EACzC,OAAQC,GAAiCA,IAAW,IAAI,EAItD1B,GAAqB,IAAKI,IAAU,CAAE,KAAAA,EAAM,MAAOA,EAAK,YAAA,EAAe,EAC7E,CAACQ,EAAOC,CAAW,CAAC,EAGjBc,EAAeH,EAAAA,QAAQ,IACvB,CAACV,GAAaA,EAAU,SAAW,EAAUS,EAC1CA,EAAY,OAAQG,GAAWZ,EAAU,SAASY,EAAO,KAAK,GAAG,CAAC,EACxE,CAACH,EAAaT,CAAS,CAAC,EAGrBc,EAAoBJ,EAAAA,QAAQ,IAC5B,CAACjB,GAAkBC,EAAuB,CAAA,EACvCmB,EAAa,OAAO,CAACE,EAAK,CAAE,KAAAzB,EAAM,MAAAN,MACvC+B,EAAIzB,EAAK,GAAG,EAAIA,EAAK,SAASiB,EAAevB,CAAK,EAC3C+B,GACN,CAAA,CAA6B,EAC/B,CAACR,EAAeM,EAAcpB,EAAgBC,CAAc,CAAC,EAG1DsB,EAAUN,EAAAA,QAAQ,IAClB,CAAChB,GAAkBC,IAAkB,OAAkB,GACpDY,IAAkBZ,GAAiBY,EAAc,OAAS,EAChE,CAACb,EAAgBa,EAAeZ,CAAa,CAAC,EAG3CsB,EAAaP,EAAAA,QAAQ,IACpBjB,EACE,OAAO,OAAOqB,CAAiB,EAAE,MAAOI,GAAMA,CAAC,EAD1B,GAE3B,CAACJ,EAAmBrB,CAAc,CAAC,EAGtC5D,EAAAA,UAAU,IAAM,CACd,GAAIgE,GAAoBJ,GAAkB,CAACC,EAAgB,CACzD,MAAMyB,EAAc,OAAO,QAAQL,CAAiB,EACjD,OAAO,CAAC,CAAA,CAAGM,CAAM,IAAM,CAACA,CAAM,EAC9B,IAAI,CAAC,CAAC9D,CAAG,IAAMA,CAAG,EACrBuC,EAAiBoB,EAAYE,CAAW,CAC1C,CACF,EAAG,CAACF,EAAYH,EAAmBjB,EAAkBJ,EAAgBC,CAAc,CAAC,EAGpF7D,EAAAA,UAAU,IAAM,CACV+D,GAAiBF,GACnBE,EAAcoB,CAAO,CAEzB,EAAG,CAACA,EAASpB,EAAeF,CAAc,CAAC,EAG3C,MAAM2B,EAAetF,EAAAA,YAAY,IAAM,CACrCqE,EAAiBkB,GAAS,CAACA,CAAI,CACjC,EAAG,CAAA,CAAE,EAGClF,EAAeL,EAAAA,YAClBE,GAA2C,CAC1C,MAAMI,EAAWJ,EAAE,OAAO,MAC1BuE,EAAiBnE,CAAQ,EACrBvB,GACFA,EAASmB,CAAC,CAEd,EACA,CAACnB,CAAQ,CAAA,EAILyG,EAAiBxF,EAAAA,YACpBE,GAA6C,CAC5CqE,EAAcrE,EAAE,iBAAiB,UAAU,CAAC,CAC9C,EACA,CAAA,CAAC,EAIG,CAAE,eAAAM,EAAgB,SAAAC,EAAU,GAAGC,GAAevC,EAM9CsH,EAA2C,CAAA,EAC3CC,EAA0C,CAAA,EAChD,SAAW,CAACC,EAAGR,CAAC,IAAK,OAAO,QAAQzE,CAAqC,EACnEiF,EAAE,WAAW,cAAc,GAAKA,IAAM,eAAiBA,IAAM,eAC/DF,EAAgBE,CAAC,EAAIR,EAErBO,EAAeC,CAAC,EAAIR,EAIxB,cACG,MAAA,CAAI,UAAW,YAAYjB,CAAgB,GAAK,GAAGuB,EAElD,SAAA,CAAAG,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAArH,EAAAA,IAAC,QAAA,CACC,IAAKkB,EACL,KAAM2E,EAAe,OAAS,WAC9B,UAAW,GAAGlG,CAAS,IAAIuF,EAAa,QAAU,EAAE,GACpD,MAAOxE,IAAU,OAAaA,EAAmB,OACjD,aAAcA,IAAU,OAAYC,EAAe,OACnD,SAAUmB,EACV,UAAWmF,EACX,QAASA,EACT,SAAAtE,EACC,GAAGwE,CAAA,CAAA,EAILjC,GACClF,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS+G,EACT,SAAApE,EACA,UAAU,uMACV,aAA2B4B,GAAfsB,EAAiB,2BAAgC,0BAAN,EAEvD,SAAA7F,EAAAA,IAACwD,GAAA,CACC,KAAMqC,EAAe,YAAc,MACnC,UAAU,SAAA,CAAA,CACZ,CAAA,CACF,EAEJ,EAGCE,GAAc,CAACF,GACdwB,EAAAA,KAAC,MAAA,CAAI,UAAU,8EACb,SAAA,CAAArH,EAAAA,IAACwD,GAAA,CAAK,KAAK,uBAAuB,UAAU,UAAU,EACtDxD,EAAAA,IAAC,OAAA,CAAM,SAAAuE,GAAE,kCAAkC,CAAA,CAAE,CAAA,EAC/C,EAIDa,GAAkBC,IAAkB,QAAaY,EAAc,OAAS,GACvEoB,EAAAA,KAAC,MAAA,CACC,UAAW,0CACTX,EACI,qCACA,gCACN,GAEA,SAAA,CAAA1G,EAAAA,IAACwD,GAAA,CACC,KAAMkD,EAAU,eAAiB,eACjC,UAAU,SAAA,CAAA,EAEZ1G,MAAC,QAAM,SAAUuE,GAAVmC,EAAY,4BAAiC,8BAAN,CAAoC,CAAE,CAAA,CAAA,CAAA,EAKvFvB,GAAkB,CAACC,GAAkBa,EAAc,OAAS,SAC1D,MAAA,CAAI,UAAW,kBAAkBL,CAAmB,GAClD,SAAAW,EAAa,IAAI,CAAC,CAAE,KAAAvB,EAAM,MAAAN,KAAY,CACrC,MAAMoC,EAASN,EAAkBxB,EAAK,GAAG,EAEnCsC,GAAc5C,IAAU,OAAY,CAAE,MAAOA,GAAU,OAC7D,OACE2C,EAAAA,KAAC,MAAA,CAEC,UAAW,qCACTP,EACI,qCACA,kCACN,GAEA,SAAA,CAAA9G,EAAAA,IAACwD,GAAA,CACC,KAAMsD,EAAS,eAAiB,SAChC,UAAU,SAAA,CAAA,QAEX,OAAA,CAAM,SAAAvC,GAAES,EAAK,SAAUsC,EAAW,CAAA,CAAE,CAAA,CAAA,EAXhCtC,EAAK,GAAA,CAchB,CAAC,CAAA,CACH,EAIDzE,GACCP,EAAAA,IAAC,IAAA,CAAE,UAAU,8CAA+C,SAAAO,CAAA,CAAM,CAAA,EAEtE,CAEJ,CACF,EAEA0E,GAAc,YAAc,gBClarB,MAAMsC,GAAoC,CAAC,CAChD,MAAAjH,EACA,MAAAC,EACA,UAAAZ,EAAY,GACZ,SAAAa,EACA,MAAAE,EACA,aAAAC,EACA,GAAGf,CACL,IAAM,CAEJ,MAAMoB,EAAiBC,EAAAA,OAAO,EAAK,EAE7BuG,EAAcvG,EAAAA,OAA4B,IAAI,EAG9C,CAACG,EAAYC,CAAa,EAAIC,EAAAA,SACjCZ,GAAqBC,GAA2B,EAAA,EAInDY,EAAAA,UAAU,IAAM,CACV,CAACP,EAAe,SAAWN,IAAU,QACvCW,EAAcX,CAAe,CAEjC,EAAG,CAACA,CAAK,CAAC,EAEV,MAAMc,EAAyBC,EAAAA,YAAY,IAAM,CAC/CT,EAAe,QAAU,EAC3B,EAAG,CAAA,CAAE,EAECU,EAAuBD,EAAAA,YAC1BE,GAAmD,CAGlD,GAFAX,EAAe,QAAU,GAErBR,EAAU,CAEZ,MAAMoB,EAAgBD,EAAE,OAA+B,MACvDN,EAAcO,CAAY,EAG1B,MAAMC,EAAc,IAAI,MAAM,SAAU,CAAE,QAAS,GAAM,EACzD,OAAO,eAAeA,EAAa,SAAU,CAC3C,SAAU,GACV,MAAO,CAAE,MAAOD,CAAA,CAAa,CAC9B,EACD,OAAO,eAAeC,EAAa,gBAAiB,CAClD,SAAU,GACV,MAAO,CAAE,MAAOD,CAAA,CAAa,CAC9B,EAEDpB,EAASqB,CAAW,CACtB,CACF,EACA,CAACrB,CAAQ,CAAA,EAGLsB,EAAeL,EAAAA,YAClBE,GAA8C,CAC7C,MAAMI,EAAWJ,EAAE,OAAO,MAE1BN,EAAcU,CAAQ,EAGlB,CAAAf,EAAe,SAGfR,GACFA,EAASmB,CAAC,CAEd,EACA,CAACnB,CAAQ,CAAA,EAIL,CAAE,eAAAyB,EAAgB,SAAAC,EAAU,GAAGC,GAAevC,EAG9C6H,EAAqB/G,IAAU,OACjC,CAAE,MAAOU,CAAA,EACT,CAAE,aAAAT,CAAA,EAEN,OACEX,EAAAA,IAAC,WAAA,CACC,IAAKwH,EACL,UAAA7H,EACA,SAAUmC,EACV,mBAAoBN,EACpB,iBAAkBE,EACjB,GAAG+F,EACH,GAAGtF,CAAA,CAAA,CAGV,EClGauF,GAA8B,CAAC,CAC1C,SAAAlI,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,QAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMmI,GAAsB,CAAC,CAClC,SAAAnI,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,IAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMoI,GAA0B,CAAC,CACtC,UAAAjI,EAAY,GACZ,IAAAkI,EAAM,GACN,GAAGjI,CACL,IAEII,EAAAA,IAAC,MAAA,CACC,UAAAL,EACA,IAAAkI,EACC,GAAGjI,CAAA,CAAA,ECTGkI,GAAwB,CAAC,CACpC,SAAAtI,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMuI,GAAwB,CAAC,CACpC,SAAAvI,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMwI,GAAwB,CAAC,CACpC,SAAAxI,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMyI,GAAwB,CAAC,CACpC,SAAAzI,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVM0I,GAAwB,CAAC,CACpC,SAAA1I,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVM2I,GAAwB,CAAC,CACpC,SAAA3I,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVM4I,GAAwB,CAAC,CACpC,SAAA5I,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVM6I,GAAsB,CAAC,CAClC,SAAA7I,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,IAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVM8I,GAA4B,CAAC,CACxC,SAAA9I,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,OAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECPD+I,GAAW,OAAe,QAAQ,eAAe,aAAa,GAAM,CACtE,IAAK,IAAIC,IAAoB,QAAQ,IAAI,gBAAiB,GAAGA,CAAI,EACjE,KAAM,IAAIA,IAAoB,QAAQ,KAAK,gBAAiB,GAAGA,CAAI,EACnE,MAAO,IAAIA,IAAoB,QAAQ,MAAM,gBAAiB,GAAGA,CAAI,CACzE,EA4BA,SAASC,GAAcC,EAAwB,CAC7C,MAAMC,EAAiB,OAAe,QAAQ,OAAO,MAAM,+BAA+B,IAAID,CAAM,EACpG,OAAIC,GAGqC,CACvC,GAAI,MACJ,GAAI,UACJ,GAAI,MACJ,GAAI,KACJ,GAAI,UACJ,GAAI,WACJ,GAAI,SAAA,EAEUD,CAAM,GAAKA,CAC7B,CAQO,MAAME,GAAgC,CAAC,CAC5C,SAAApJ,EACA,MAAAc,EACA,MAAAC,EACA,QAAAsI,EACA,UAAAlJ,EAAY,GACZ,MAAAe,EACA,SAAAF,EACA,SAAAmC,EACA,WAAAmG,EAAa,GACb,kBAAAC,EACA,YAAAC,EACA,GAAGpJ,CACL,IAAM,CACJ,KAAM,CAACqJ,EAAQC,CAAS,EAAI5H,EAAAA,SAAS,EAAK,EACpC,CAAC6H,EAAYC,CAAa,EAAI9H,EAAAA,SAAS,EAAE,EACzC,CAAC+H,EAAaC,CAAc,EAAIhI,EAAAA,SAAgF,IAAI,EACpHiI,EAAetI,EAAAA,OAAuB,IAAI,EAC1CuI,EAAYvI,EAAAA,OAA0B,IAAI,EAC1CwI,EAAiBxI,EAAAA,OAAyB,IAAI,EAC9CyI,EAAczI,EAAAA,OAAuB,IAAI,EAGzC0I,EAAoBvD,EAAAA,QAAQ,IAC3ByC,EAGA,MAAM,QAAQA,CAAO,EAMtBA,EAAQ,SAAW,EAAU,CAAA,EAG7B,OAAOA,EAAQ,CAAC,GAAM,SAChBA,EAAqB,IAAKH,IAA0B,CAC1D,MAAOA,EACP,MAAOD,GAAcC,CAAM,CAAA,EAC3B,EAIGG,GAhBLN,GAAO,KAAK,gCAAiCM,CAAO,EAC7C,MALY,KAqBpB,CAACA,CAAO,CAAC,EAGNe,EAAgBxD,EAAAA,QAAQ,IACvBuD,GACYA,EAAkB,KAAKE,GAAO,OAAOA,EAAI,KAAK,IAAM,OAAOnJ,CAAK,CAAC,GACjE,OAAS,GACzB,CAACiJ,EAAmBjJ,CAAK,CAAC,EAGvBoJ,EAAiB1D,EAAAA,QAAQ,IAA6B,CAC1D,GAAI,CAACuD,EAAmB,OAAO,KAC/B,GAAI,CAACb,GAAcK,EAAW,KAAA,IAAW,GAAI,OAAOQ,EACpD,MAAMI,EAASZ,EAAW,KAAA,EAAO,YAAA,EACjC,OAAOQ,EAAkB,OAAOE,GAC9BA,EAAI,MAAM,YAAA,EAAc,SAASE,CAAM,GACvC,OAAOF,EAAI,KAAK,EAAE,YAAA,EAAc,SAASE,CAAM,CAAA,CAEnD,EAAG,CAACJ,EAAmBb,EAAYK,CAAU,CAAC,EAG9C5H,EAAAA,UAAU,IAAM,CACd,GAAI0H,GAAUH,EAAY,CACxBM,EAAc,EAAE,EAEhB,MAAMY,EAAQ,WAAW,IAAMP,EAAe,SAAS,MAAA,EAAS,CAAC,EACjE,MAAO,IAAM,aAAaO,CAAK,CACjC,CACKf,GACHG,EAAc,EAAE,CAEpB,EAAG,CAACH,EAAQH,CAAU,CAAC,EAMvB,MAAMmB,EAAoBxI,EAAAA,YAAY,IAAM,CAC1C,GAAI,CAAC+H,EAAU,QAAS,OACxB,MAAMU,EAAOV,EAAU,QAAQ,sBAAA,EACzBW,EAAa,OAAO,YAAcD,EAAK,OAGvCE,EAAaD,EAFE,KAE2BD,EAAK,IAAMC,EAEzDb,EADEc,EACa,CACb,OAAQ,OAAO,YAAcF,EAAK,IAAM,EACxC,KAAMA,EAAK,KACX,MAAOA,EAAK,KAAA,EAGC,CACb,IAAKA,EAAK,OAAS,EACnB,KAAMA,EAAK,KACX,MAAOA,EAAK,KAAA,CALb,CAQL,EAAG,CAAA,CAAE,EAGL3I,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC0H,EAAQ,CACXK,EAAe,IAAI,EACnB,MACF,CACA,OAAAW,EAAA,EACA,OAAO,iBAAiB,SAAUA,EAAmB,EAAI,EACzD,OAAO,iBAAiB,SAAUA,CAAiB,EAC5C,IAAM,CACX,OAAO,oBAAoB,SAAUA,EAAmB,EAAI,EAC5D,OAAO,oBAAoB,SAAUA,CAAiB,CACxD,CACF,EAAG,CAAChB,EAAQgB,CAAiB,CAAC,EAG9B1I,EAAAA,UAAU,IAAM,CACd,MAAM8I,EAAsBC,GAAsB,CAChD,MAAMC,EAASD,EAAM,OAEnBf,EAAa,SAAW,CAACA,EAAa,QAAQ,SAASgB,CAAM,IAC5D,CAACb,EAAY,SAAW,CAACA,EAAY,QAAQ,SAASa,CAAM,IAE7DrB,EAAU,EAAK,CAEnB,EAEA,OAAID,GACF,SAAS,iBAAiB,YAAaoB,CAAkB,EAGpD,IAAM,CACX,SAAS,oBAAoB,YAAaA,CAAkB,CAC9D,CACF,EAAG,CAACpB,CAAM,CAAC,EAGX1H,EAAAA,UAAU,IAAM,CACd,MAAMiJ,EAAiBF,GAAyB,CAC1CA,EAAM,MAAQ,UAAYrB,IAC5BC,EAAU,EAAK,EACfM,EAAU,SAAS,MAAA,EAEvB,EAEA,gBAAS,iBAAiB,UAAWgB,CAAa,EAC3C,IAAM,SAAS,oBAAoB,UAAWA,CAAa,CACpE,EAAG,CAACvB,CAAM,CAAC,EAEX,MAAMlC,EAAe,IAAM,CACpBpE,GACHuG,EAAU,CAACD,CAAM,CAErB,EAEMwB,EAAgBC,GAAiC,CACjDlK,GAQFA,EANuB,CACrB,OAAQ,CAAE,MAAOkK,CAAA,EACjB,eAAgB,IAAM,CAAC,EACvB,gBAAiB,IAAM,CAAC,EACxB,KAAM,QAAA,CAEsB,EAEhCxB,EAAU,EAAK,EACfM,EAAU,SAAS,MAAA,CACrB,EAGA,GAAI,CAACG,EACH,OACE3J,EAAAA,IAAC,SAAA,CACC,UAAAL,EACA,MAAAe,EACA,SAAAF,EACA,SAAAmC,EACC,GAAGqG,EACH,GAAGpJ,EAEH,SAAAJ,CAAA,CAAA,EAMP,MAAMmL,EAAiBhL,GAAaA,EAAU,SAAS,KAAK,EAEtDiL,EAAejL,GAAa,kIAAkI,KAAKA,CAAS,EAC5KkL,EAAkBF,EACpB,GAAGhL,CAAS,GAAGiL,EAAe,GAAK,mCAAmC,GACtE,wKAAwKjL,CAAS,GAK/KmL,EAAe,CAAE,GAAG9B,EAAa,GAAGpJ,CAAA,EAE1C,cACGK,EAAA,CAAI,IAAKsJ,EAAc,UAAU,WAAY,GAAGuB,EAC/C,SAAA,CAAAzD,EAAAA,KAAC/H,EAAA,CACC,IAAKkK,EACL,KAAK,SACL,QAASzC,EACT,SAAApE,EACA,UAAW,GAAGkI,CAAe,oHAC7B,gBAAc,UACd,gBAAe5B,EAEf,SAAA,CAAAjJ,EAAAA,IAACG,GAAA,CAAK,UAAU,WAAY,SAAAyJ,GAAiB,IAAS,EACtD5J,EAAAA,IAACI,GAAA,CACC,UAAW,2DAA2D6I,EAAS,aAAe,EAAE,GAChG,KAAK,OACL,OAAO,eACP,QAAQ,YAER,SAAAjJ,EAAAA,IAAC,QAAK,cAAc,QAAQ,eAAe,QAAQ,YAAa,EAAG,EAAE,gBAAA,CAAiB,CAAA,CAAA,CACxF,CAAA,CAAA,EAGDiJ,GAAUI,GAAe0B,GAAAA,aACxB1D,EAAAA,KAACpH,EAAA,CACC,IAAKyJ,EACL,UAAU,6HACV,MAAO,CAAE,IAAKL,EAAY,IAAK,OAAQA,EAAY,OAAQ,KAAMA,EAAY,KAAM,MAAOA,EAAY,KAAA,EACtG,KAAK,UAEJ,SAAA,CAAAP,GACC9I,EAAAA,IAACC,EAAA,CAAI,UAAU,oDACb,SAAAD,EAAAA,IAACK,GAAA,CACC,IAAKoJ,EACL,KAAK,OACL,MAAON,EACP,SAAWxH,GAA2CyH,EAAczH,EAAE,OAAO,KAAK,EAClF,YAAaoH,GAAqB,YAClC,UAAU,gNACV,KAAK,YACL,aAAYA,GAAqB,QAAA,CAAA,EAErC,EAEF1B,EAAAA,KAACpH,EAAA,CAAI,UAAU,8BACZ,SAAA,CAAA6J,GAAkBA,EAAe,SAAW,GAC3C9J,EAAAA,IAACC,GAAI,UAAU,iEACZ,SAAAkJ,EAAa,aAAe,EAAA,CAC/B,GAEAW,GAAkB,CAAA,GAAI,IAAKkB,GAAW,CACtC,MAAMC,EAAa,OAAOD,EAAO,KAAK,IAAM,OAAOtK,CAAK,EACxD,OACE2G,EAAAA,KAAC/H,EAAA,CAEC,KAAK,SACL,QAAS,IAAM,CAAC0L,EAAO,UAAYP,EAAaO,EAAO,KAAK,EAC5D,SAAUA,EAAO,SACjB,UAAW,2HACTC,EAAa,+CAAiD,kCAChE,IAAID,EAAO,SAAW,gCAAkC,gBAAgB,GACxE,KAAK,SACL,gBAAeC,EAEf,SAAA,CAAAjL,EAAAA,IAACG,GAAA,CAAM,WAAO,KAAA,CAAM,EACnB8K,GACCjL,EAAAA,IAACI,GAAA,CACC,UAAU,2CACV,KAAK,OACL,OAAO,eACP,QAAQ,YAER,SAAAJ,EAAAA,IAAC,QAAK,cAAc,QAAQ,eAAe,QAAQ,YAAa,EAAG,EAAE,gBAAA,CAAiB,CAAA,CAAA,CACxF,CAAA,EAnBGgL,EAAO,KAAA,CAuBlB,CAAC,CAAA,CAAA,CACH,CAAA,CAAA,CAAA,EAEF,SAAS,IAAA,CACX,EACF,CAEJ,ECxVaE,GAAgC,CAAC,CAC5C,SAAA1L,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,SAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVM2L,GAAoC,CAAC,CAChD,SAAA3L,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,WAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECLM4L,GAAW7L,EAAAA,WACtB,CAAC,CAAE,MAAAe,EAAO,UAAAX,EAAY,GAAI,GAAGC,CAAA,EAASC,IAElCG,EAAAA,IAAC,QAAA,CACC,IAAAH,EACA,KAAK,WACL,UAAAF,EACC,GAAGC,CAAA,CAAA,CAIZ,EAEAwL,GAAS,YAAc,WClBhB,MAAMC,GAA8B,CAAC,CAC1C,SAAA7L,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,QAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVM8L,GAA8B,CAAC,CAC1C,SAAA9L,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,QAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVM+L,GAA8B,CAAC,CAC1C,SAAA/L,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,QAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMgM,GAAwB,CAAC,CACpC,SAAAhM,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMiM,GAAwB,CAAC,CACpC,SAAAjM,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMkM,GAAwB,CAAC,CACpC,SAAAlM,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,KAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECVMmM,GAAMpM,EAAAA,WACjB,CAAC,CAAE,SAAAC,EAAU,UAAAG,EAAY,GAAI,GAAGC,CAAA,EAASC,IAErCG,EAAAA,IAAC,MAAA,CACC,IAAAH,EACA,UAAAF,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,CAIT,EAEAmM,GAAI,YAAc,MCdX,MAAMC,GAAkC,CAAC,CAC9C,SAAApM,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,UAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECPMqM,GAA4B,CAAC,CACxC,SAAArM,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,IAEII,EAAAA,IAAC,OAAA,CACC,UAAAL,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,ECXMsM,GAAK5L,EAAM,WAAmC,CAAC,CAC1D,UAAAP,EAAY,GACZ,GAAGC,CACL,EAAGC,IAECG,EAAAA,IAAC,KAAA,CACC,IAAAH,EACA,UAAAF,EACC,GAAGC,CAAA,CAAA,CAGT,ECXYmM,GAAS7L,EAAM,WAAqC,CAAC,CAChE,SAAAV,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,EAAGC,IAECG,EAAAA,IAAC,SAAA,CACC,IAAAH,EACA,UAAAF,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,CAGN,ECmCKwM,GAAqBC,GACrBA,IAAS,OACJ,OAAO,WAAW,8BAA8B,EAAE,QACrD,OACA,QAECA,EAMHC,GAAcD,GAAoB,CACtC,MAAME,EAAiBH,GAAkBC,CAAI,EAC7C,SAAS,gBAAgB,aAAa,aAAcE,CAAc,EAG9DA,IAAmB,OACrB,SAAS,gBAAgB,UAAU,IAAI,MAAM,EAE7C,SAAS,gBAAgB,UAAU,OAAO,MAAM,CAEpD,EAMMC,GAAkB,IAAiB,CACvC,MAAMC,EAAa,aAAa,QAAQ,iBAAiB,EACzD,OAAIA,GAAc,CAAC,OAAQ,QAAS,MAAM,EAAE,SAASA,CAAU,EACtDA,EAEF,MACT,EAEaC,GAA0C,CAAC,CACtD,cAAAC,EACA,UAAA5M,EAAY,GACZ,SAAA6M,EAAW,SACX,UAAAC,EAAY,QACZ,SAAAC,EAAW,OACX,GAAAC,EACA,YAAA3D,CACF,IAAM,CAEJ,MAAM4D,EAAeR,GAAA,EACf,CAACS,EAAaC,CAAc,EAAIxL,EAAAA,SAAoBsL,CAAY,EAChE,CAACG,EAAUC,CAAW,EAAI1L,EAAAA,SAAS,EAAK,EACxC2L,EAAUhM,EAAAA,OAAuB,IAAI,EAK3CM,EAAAA,UAAU,IAAM,CACd2K,GAAWW,CAAW,CACxB,EAAG,CAAA,CAAE,EAKLtL,EAAAA,UAAU,IAAM,CACd,GAAIsL,IAAgB,OAAQ,OAE5B,MAAMK,EAAa,OAAO,WAAW,8BAA8B,EAC7DpL,EAAe,IAAM,CACzBoK,GAAW,MAAM,CACnB,EAEA,OAAAgB,EAAW,iBAAiB,SAAUpL,CAAY,EAC3C,IAAMoL,EAAW,oBAAoB,SAAUpL,CAAY,CACpE,EAAG,CAAC+K,CAAW,CAAC,EAKhBtL,EAAAA,UAAU,IAAM,CACd,MAAM8I,EAAsBC,GAAsB,CAC5C2C,EAAQ,SAAW,CAACA,EAAQ,QAAQ,SAAS3C,EAAM,MAAc,GACnE0C,EAAY,EAAK,CAErB,EAEA,gBAAS,iBAAiB,YAAa3C,CAAkB,EAClD,IAAM,SAAS,oBAAoB,YAAaA,CAAkB,CAC3E,EAAG,CAAA,CAAE,EAML,MAAM8C,EAAqBlB,GAAoB,CAC7Ca,EAAeb,CAAI,EACnB,aAAa,QAAQ,kBAAmBA,CAAI,EAC5CC,GAAWD,CAAI,EACfe,EAAY,EAAK,EACjBT,IAAgBN,CAAI,CACtB,EAKMmB,EAAiB,IACEpB,GAAkBa,CAAW,IAC1B,OAASvJ,GAAS,KAAOA,GAAS,IAG9D,OACE+D,EAAAA,KAACpH,EAAA,CAAI,IAAKgN,EAAS,UAAW,YAAYtN,CAAS,GAAI,GAAAgN,EAAS,GAAG3D,EAEjE,SAAA,CAAAhJ,EAAAA,IAACV,EAAA,CACC,QAAS,IAAM0N,EAAY,CAACD,CAAQ,EACpC,UAAU,6GACV,aAAW,eAEX,SAAA/M,EAAAA,IAACwD,GAAA,CACC,KAAM4J,EAAA,EACN,UAAU,SAAA,CAAA,CACZ,CAAA,EAIDL,SACE9M,EAAA,CAAI,UAAU,6HACb,SAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,OAEb,SAAA,CAAAoH,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAM6N,EAAkB,MAAM,EACvC,UAAW;AAAA;AAAA,kBAEPN,IAAgB,OAAS,8BAAgC,EAAE;AAAA,gBAG/D,SAAA,CAAA7M,EAAAA,IAACwD,GAAA,CACC,KAAMF,GAAS,SACf,UAAU,0CAAA,CAAA,EAEZtD,EAAAA,IAACG,GAAA,CAAK,UAAU,iDAAkD,SAAAqM,EAAS,EAC1EK,IAAgB,QACf7M,EAAAA,IAACwD,GAAA,CACC,KAAMF,GAAS,MACf,UAAU,kDAAA,CAAA,CACZ,CAAA,CAAA,EAKJ+D,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAM6N,EAAkB,OAAO,EACxC,UAAW;AAAA;AAAA,kBAEPN,IAAgB,QAAU,8BAAgC,EAAE;AAAA,gBAGhE,SAAA,CAAA7M,EAAAA,IAACwD,GAAA,CACC,KAAMF,GAAS,IACf,UAAU,0CAAA,CAAA,EAEZtD,EAAAA,IAACG,GAAA,CAAK,UAAU,iDAAkD,SAAAsM,EAAU,EAC3EI,IAAgB,SACf7M,EAAAA,IAACwD,GAAA,CACC,KAAMF,GAAS,MACf,UAAU,kDAAA,CAAA,CACZ,CAAA,CAAA,EAKJ+D,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAM6N,EAAkB,MAAM,EACvC,UAAW;AAAA;AAAA,kBAEPN,IAAgB,OAAS,8BAAgC,EAAE;AAAA,gBAG/D,SAAA,CAAA7M,EAAAA,IAACwD,GAAA,CACC,KAAMF,GAAS,KACf,UAAU,0CAAA,CAAA,EAEZtD,EAAAA,IAACG,GAAA,CAAK,UAAU,iDAAkD,SAAAuM,EAAS,EAC1EG,IAAgB,QACf7M,EAAAA,IAACwD,GAAA,CACC,KAAMF,GAAS,MACf,UAAU,kDAAA,CAAA,CACZ,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,CACF,CAAA,EAEJ,CAEJ,0HC3OM+J,GAA2C,CAC/C,GAAI,kBACJ,GAAI,kBACJ,GAAI,sBACJ,GAAI,oBACJ,GAAI,oBACJ,MAAO,qBACP,MAAO,qBACP,MAAO,qBACP,MAAO,oBACT,EAKMC,GAAyB,yFAKzBC,GAAoB,uBAKpBC,GAAqB,CACzB,OAAQ,gDACR,UAAW,+BACX,MAAO,8BACT,EAyFaC,GAAgC,CAAC,CAC5C,OAAAC,EACA,KAAAjK,EACA,OAAAkK,EACA,KAAAjO,EAAO,KACP,UAAAC,EAAY,GACZ,KAAAiO,EACA,YAAAC,EAAc,GACd,QAAAC,EAAU,GACV,GAAAnB,EACA,YAAA3D,CACF,IAAM,CAEJ,MAAM+E,EAAeJ,GAAUD,GAAQ,OACjCM,EAAaJ,GAAQnK,GAAQiK,GAAQ,MAAQ,IAC7CO,EAAoBJ,GAAeH,GAAQ,SAAW,YACtDQ,EAAgBJ,GAAWJ,GAAQ,UAAY,GAG/CS,EAAmB/H,EAAAA,QAAQ,IAIxB,CAHWiH,GAAa3N,CAAI,GAAK2N,GAAa,GAGlCC,GAFIW,EAAoBV,GAAoB,GAEJ5N,CAAS,EACjE,OAAO,OAAO,EACd,KAAK,GAAG,EACV,CAACD,EAAMuO,EAAmBtO,CAAS,CAAC,EAGjCyO,EAAiBF,EACnBV,GAAmB,MACnBS,EACET,GAAmB,UACnBA,GAAmB,OAGnBa,EAAgB,IAChBH,EAEAlO,EAAAA,IAACC,EAAA,CAAI,UAAW,kDAAkDmO,CAAc,GAC9E,SAAApO,EAAAA,IAACwD,GAAA,CAAK,KAAK,OAAO,UAAU,kCAAA,CAAmC,EACjE,EAGAyK,EAEAjO,EAAAA,IAACC,EAAA,CAAI,UAAW,kDAAkDmO,CAAc,GAC9E,SAAApO,EAAAA,IAACwD,GAAA,CAAK,KAAK,OAAO,UAAU,kCAAA,CAAmC,EACjE,EAIFxD,EAAAA,IAACC,EAAA,CAAI,UAAW,2EAA2EmO,CAAc,GACtG,SAAAJ,EAAW,OAAO,CAAC,EAAE,YAAA,CAAY,CACpC,EAIJ,OACEhO,EAAAA,IAACC,EAAA,CAAI,UAAWkO,EAAkB,GAAAxB,EAAS,GAAG3D,EAC3C,SAAA+E,GAAgB,CAACG,GAAiB,CAACD,EAClCjO,EAAAA,IAAC4H,GAAA,CACC,IAAKmG,EACL,IAAKC,EACL,UAAU,4BAAA,CAAA,EAGZK,GAAc,CAElB,CAEJ,0GC7KM9F,GAAW,OAAe,QAAQ,eAAe,oBAAoB,GAAM,CAC7E,IAAK,IAAIC,IAAoB,QAAQ,IAAI,uBAAwB,GAAGA,CAAI,EACxE,KAAM,IAAIA,IAAoB,QAAQ,KAAK,uBAAwB,GAAGA,CAAI,EAC1E,MAAO,IAAIA,IAAoB,QAAQ,MAAM,uBAAwB,GAAGA,CAAI,CAChF,EAcO,SAAS8F,GACdC,EACAC,EACG,CACH,OACEA,GACAD,GACA,OAAOA,EAAa,IAAO,UAC3BA,EAAa,GAAG,OAAS,EAElB,CAAE,GAAGA,EAAc,GAAI,GAAGA,EAAa,EAAE,KAAKC,CAAW,EAAA,EAE3DD,CACT,CAwEO,MAAME,GAA8C,CAAC,CAC1D,OAAAC,EACA,UAAA/O,EAAY,GACZ,aAAAgP,EACA,MAAA3K,EACA,GAAA2I,EACA,SAAAnN,CACF,IAAM,CACJ,KAAM,CAACoP,EAAgBC,CAAiB,EAAIvN,EAAAA,SAA6B,CAAA,CAAE,EACrE,EAAGwN,CAAW,EAAIxN,EAAAA,SAAS,EAAE,EAG7ByN,EAAiBtN,EAAAA,YAAY,IAA+B,CAChE,MAAMuN,EAAqB,OAAe,mBAC1C,GAAIA,EACF,OAAOA,EAGT,MAAMC,EAAU,OAAe,OAC/B,OAAKA,GAEeA,EAAO,iBAAA,GACL,IACxB,EAAG,CAAA,CAAE,EAGCC,EAAuBzN,EAAAA,YAAY,IAAM,CAC7C,MAAM0N,EAAcJ,EAAA,EAChBI,GAAeA,EAAY,WAC7BN,EAAkBM,EAAY,kBAAkBT,CAAM,CAAC,CAE3D,EAAG,CAACA,EAAQK,CAAc,CAAC,EAG3BxN,EAAAA,UAAU,IAAM,CACd,MAAM4N,EAAcJ,EAAA,EAEpB,MAAI,CAACI,GAAe,CAACA,EAAY,UAC/B,QAGFD,EAAA,EAEoBC,EAAY,gBAAgBT,EAAQ,IAAM,CAC5DQ,EAAA,EACAJ,EAAY,CAAA,CAAE,CAChB,CAAC,EAGH,EAAG,CAACJ,EAAQK,EAAgBG,CAAoB,CAAC,EAGjD,MAAME,EAAqB3N,EAAAA,YAAY,IAAM,CAC3C,MAAMwN,EAAU,OAAe,OAC/B,OAAKA,EAEEA,EAAO,qBAAA,EAFM,IAGtB,EAAG,CAAA,CAAE,EAGL,GAAIL,EAAe,SAAW,EAC5B,OAAID,EAEA3O,EAAAA,IAACC,EAAA,CAAI,UAAAN,EAAsB,MAAAqE,EAAc,GAAA2I,EACtC,SAAAgC,EACH,EAIAnP,EAEAQ,EAAAA,IAACC,EAAA,CAAI,UAAAN,EAAsB,MAAAqE,EAAc,GAAA2I,EACtC,SAAAnN,EACH,EAIG,KAGT,MAAM6P,EAAkBD,EAAA,EAClBH,EAAU,OAAe,OAE/B,MAAI,CAACI,GAAmB,CAACJ,GACvB1G,GAAO,MAAM,yCAAyC,EAC/C,MAIPlB,EAAAA,KAACpH,EAAA,CAAI,UAAAN,EAAsB,MAAAqE,EAAc,GAAA2I,EACtC,SAAA,CAAAiC,EAAe,IAAKU,GAAiB,CACpC,KAAM,CACJ,aAAAf,EACA,YAAAgB,EACA,kBAAAC,EACA,0BAAAC,EACA,mBAAAC,CAAA,EACEJ,EAIEK,EAAYrB,GAAkBC,EAAc5B,CAAE,EAEpD,OACE3M,EAAAA,IAACqP,EAAA,CAEC,aAAcM,EACd,YAAAJ,EACA,mBAAAG,EACA,SAAUT,EAAO,qBAAA,EACjB,cAAeA,EAAO,qBAAA,EACtB,kBAAmBA,EAAO,qBAAA,EAC1B,iBAAkBA,EAAO,oBAAA,EACzB,uBAAwBQ,IAAA,EACxB,sBAAuBD,EACvB,eAAgB,EAAA,EAVXG,EAAU,IAAM,QAAQjB,CAAM,IAAIY,EAAa,KAAK,EAAA,CAa/D,CAAC,EACA9P,CAAA,EACH,CAEJ,iJCvKaoQ,GAAwD,CAAC,CACpE,cAAAC,EAAgB,CAAA,EAChB,YAAAC,EAAc,EACd,QAAAC,EAAU,GACV,QAAAC,EAAU,GACV,UAAAC,EAAY,KACZ,UAAAC,EAAY,YACZ,gBAAAC,EAAkB,QAClB,cAAAC,EAAgB,QAChB,eAAAC,EAAiB,WACjB,WAAAC,EAAa,GACb,oBAAAC,EACA,QAAAC,EACA,WAAAC,EACA,cAAAC,EACA,YAAAC,EACA,SAAAC,EACA,mBAAAC,EACA,cAAAC,EAAgB,QAChB,UAAAnR,EAAY,GACZ,GAAAgN,EACA,YAAA3D,CACF,IAAM,CACJ,KAAM,CAAC+H,EAAmBC,CAAoB,EAAI1P,EAAAA,SAAS,EAAK,EAC1D2P,EAAkBhQ,EAAAA,OAAuB,IAAI,EAC7CyI,EAAczI,EAAAA,OAAuB,IAAI,EACzCiQ,EAAYjQ,EAAAA,OAAuB,IAAI,EACvCkQ,EAAclQ,EAAAA,OAAuB,IAAI,EACzCmQ,EAAsBnQ,EAAAA,OAA6B,IAAI,GAAK,EAG5DoQ,EAAgBpQ,EAAAA,OAAOwP,CAAU,EACjCa,EAAarQ,EAAAA,OAAO8O,CAAO,EAC3BwB,EAAatQ,EAAAA,OAAO+O,CAAO,EAC3BwB,EAAwBvQ,EAAAA,OAAO4O,EAAc,MAAM,EAEnD4B,EAAwBxQ,EAAAA,OAAe,EAAE,EAE/CM,EAAAA,UAAU,IAAM,CACd8P,EAAc,QAAUZ,EACxBa,EAAW,QAAUvB,EACrBwB,EAAW,QAAUvB,EACrBwB,EAAsB,QAAU3B,EAAc,MAChD,CAAC,EAUDtO,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC4P,EAAY,SAAW,CAACD,EAAU,SAAW,CAACH,EAAmB,OAGtEU,EAAsB,QAAU,GAEhC,MAAMC,EAAW,IAAI,qBACnB,CAAC,CAACC,CAAK,IAAM,CACNA,EAAM,iBACPJ,EAAW,SAAW,CAACD,EAAW,SAElCG,EAAsB,UAAYD,EAAsB,UAC5DC,EAAsB,QAAUD,EAAsB,QACtDH,EAAc,UAAA,GAChB,EACA,CAAE,KAAMH,EAAU,QAAS,UAAW,EAAA,CAAI,EAG5C,OAAAQ,EAAS,QAAQP,EAAY,OAAO,EAC7B,IAAMO,EAAS,WAAA,CACxB,EAAG,CAACX,CAAiB,CAAC,EAKtBxP,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC2P,EAAU,SAAW,CAACH,EAAmB,OAE9C,MAAMW,EAAW,IAAI,qBAClBE,GAAY,CACXA,EAAQ,QAASD,GAAU,CACzB,MAAMhF,EAAKgF,EAAM,OAAO,aAAa,sBAAsB,EACrDE,EAAWF,EAAM,OAAO,aAAa,aAAa,IAAM,OAC1DhF,GAAMkF,GAAYF,EAAM,gBAC1BP,EAAoB,QAAQ,IAAIzE,CAAE,CAEtC,CAAC,CACH,EACA,CACE,KAAMuE,EAAU,QAChB,UAAW,EAAA,CACb,EAIF,OADcA,EAAU,QAAQ,iBAAiB,wBAAwB,EACnE,QAASY,GAASJ,EAAS,QAAQI,CAAI,CAAC,EAEvC,IAAMJ,EAAS,WAAA,CACxB,EAAG,CAACX,EAAmBlB,CAAa,CAAC,EAKrC,MAAMkC,EAAejC,EAAc,EAAIA,EAAcD,EAAc,OAAQmC,GAAM,CAACA,EAAE,IAAI,EAAE,OAUpFC,EAAcxQ,EAAAA,YAAY,IAAM,CACpC,GAAIsP,EAAmB,CACrB,GAAIgB,EAAe,EAAG,CACpB,MAAMG,EAAY,MAAM,KAAKd,EAAoB,OAAO,EAAE,OAAQzE,GAAO,CACvE,MAAMqF,EAAInC,EAAc,KAAMiC,GAAS,OAAOA,EAAK,EAAE,IAAM,OAAOnF,CAAE,CAAC,EACrE,OAAOqF,GAAK,CAACA,EAAE,IACjB,CAAC,EACGE,EAAU,OAAS,GACrB1B,IAAU0B,CAAS,CAEvB,CACAd,EAAoB,QAAQ,MAAA,EAC5BJ,EAAqB,EAAK,CAC5B,CACF,EAAG,CAACD,EAAmBP,EAASuB,EAAclC,CAAa,CAAC,EAO5DtO,EAAAA,UAAU,IAAM,CACd,GAAI,CAACwP,EAAmB,OAExB,MAAM1G,EAAsBC,GAAsB,CAE9C2G,EAAgB,SAChB,CAACA,EAAgB,QAAQ,SAAS3G,EAAM,MAAc,GAEtD2H,EAAA,CAEJ,EAEA,gBAAS,iBAAiB,YAAa5H,CAAkB,EAClD,IAAM,SAAS,oBAAoB,YAAaA,CAAkB,CAC3E,EAAG,CAAC0G,EAAmBkB,CAAW,CAAC,EAKnC,MAAMlL,EAAetF,EAAAA,YAAY,IAAM,CACjCsP,EACFkB,EAAA,EAEAjB,EAAqB,EAAI,CAE7B,EAAG,CAACD,EAAmBkB,CAAW,CAAC,EASnCE,OAAAA,EAAAA,gBAAgB,IAAM,CACpB,MAAMC,EAAW1I,EAAY,QAC7B,GAAI,CAACqH,GAAqB,CAACqB,EAAU,OAGrCA,EAAS,MAAM,UAAY,GAC3B,MAAMlI,EAAOkI,EAAS,sBAAA,EAChBC,EAAK,OAAO,OAAW,IAAc,OAAO,WAAa,EAG/D,GAAInI,EAAK,QAAU,GAAKA,EAAK,SAAW,EAAG,OAE3C,MAAMoI,EAAS,EACf,IAAIC,EAAQ,EACRrI,EAAK,MAAQmI,EAAKC,EACpBC,EAAQ,EAAErI,EAAK,OAASmI,EAAKC,IACpBpI,EAAK,KAAOoI,IACrBC,EAAQD,EAASpI,EAAK,MAGpBqI,IAAU,IACZH,EAAS,MAAM,UAAY,cAAcG,CAAK,MAElD,EAAG,CAACxB,EAAmBD,EAAejB,EAAc,MAAM,CAAC,EAGzDxI,EAAAA,KAACpH,EAAA,CAAI,IAAKgR,EAAiB,UAAW,YAAYtR,CAAS,GAAI,GAAAgN,EAAS,GAAG3D,EACzE,SAAA,CAAA3B,EAAAA,KAAC/H,EAAA,CACC,QAASyH,EACT,UAAU,+KACV,aAAYkJ,EAEZ,SAAA,CAAAjQ,EAAAA,IAACwD,GAAA,CAAK,KAAMF,GAAS,KAAM,UAAU,UAAU,EAC9CyO,EAAe,GACd/R,MAACG,GAAA,CAAK,UAAU,yIACb,SAAA4R,EAAe,GAAK,MAAQA,CAAA,CAC/B,CAAA,CAAA,CAAA,EAKHhB,GACC1J,EAAAA,KAACpH,EAAA,CAAI,IAAKyJ,EAAa,UAAW,YAAYoH,IAAkB,OAAS,SAAW,SAAS,sIAC3F,SAAA,CAAAzJ,EAAAA,KAACpH,EAAA,CAAI,UAAU,kGACb,SAAA,CAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,kCACb,SAAA,CAAAD,EAAAA,IAACG,GAAA,CAAK,UAAU,8CAA+C,SAAA8P,EAAU,EACxEY,GACCxJ,EAAAA,KAACpH,EAAA,CACC,UAAU,uDACV,QAAS,IAAM4Q,EAAmB,CAACP,CAAU,EAE7C,SAAA,CAAAtQ,EAAAA,IAACK,GAAA,CACC,KAAK,WACL,QAASiQ,EACT,SAAW3O,GAA2C,CACpDA,EAAE,gBAAA,EACFkP,EAAmBlP,EAAE,OAAO,OAAO,CACrC,EACA,QAAUA,GAAwBA,EAAE,gBAAA,EACpC,UAAU,uJAAA,CAAA,EAEZ3B,EAAAA,IAACG,GAAA,CAAK,UAAU,2CAA4C,SAAAkQ,CAAA,CAAe,CAAA,CAAA,CAAA,CAC7E,EAEJ,EACAhJ,EAAAA,KAACpH,EAAA,CAAI,UAAU,wCACZ,SAAA,CAAAyQ,GAAiBqB,EAAe,GAC/B/R,EAAAA,IAACV,EAAA,CACC,QAAS,IAAM,CACboR,EAAA,EACAU,EAAoB,QAAQ,MAAA,CAC9B,EACA,UAAU,uHAET,SAAAjB,CAAA,CAAA,EAGJQ,GAAed,EAAc,OAAS,GACrC7P,EAAAA,IAACV,EAAA,CACC,QAAS,IAAM,CAGbqR,EAAA,CACF,EACA,UAAU,mHAET,SAAAP,CAAA,CAAA,CACH,CAAA,CAEJ,CAAA,EACF,EACApQ,EAAAA,IAACC,GAAI,IAAKiR,EAAW,UAAU,2BAC5B,SAAArB,EAAc,SAAW,GAAK,CAACG,EAC9BhQ,EAAAA,IAACC,EAAA,CAAI,UAAU,yDACb,SAAAD,EAAAA,IAACG,IAAM,SAAA+P,CAAA,CAAU,CAAA,CACnB,EAEA7I,EAAAA,KAAAmL,EAAAA,SAAA,CACG,SAAA,CAAA3C,EAAc,IAAK4C,GAAiB,CACnC,MAAMZ,EAAW,CAACY,EAAa,KAC/B,OACEpL,EAAAA,KAACpH,EAAA,CAEC,uBAAsBwS,EAAa,GACnC,cAAaZ,EAAW,OAAS,QACjC,QAAS,IAAM,CACbY,EAAa,UAAA,EACblC,IAAsBkC,CAAY,EAClCzB,EAAqB,EAAK,CAC5B,EACA,UAAW,mIACTa,EACI,+EACA,iFACN,GAEC,SAAA,CAAAY,EAAa,UACZzS,EAAAA,IAACwD,GAAA,CACC,KAAMiP,EAAa,SACnB,UAAW,gCACTZ,EAAW,mCAAqC,kCAClD,EAAA,CAAA,EAGJxK,EAAAA,KAACpH,EAAA,CAAI,UAAU,iBACb,SAAA,CAAAD,EAAAA,IAACC,EAAA,CACC,UAAW,oBACT4R,EACI,8CACA,8CACN,GAEC,SAAAY,EAAa,KAAA,CAAA,EAEhBzS,EAAAA,IAACC,EAAA,CACC,UAAW,6BACT4R,EAAW,mCAAqC,kCAClD,GAEC,SAAAY,EAAa,OAAA,CAAA,EAEhBzS,EAAAA,IAACC,EAAA,CAAI,UAAU,0DACZ,WAAa,IAAA,CAChB,CAAA,EACF,EACAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,iDACZ,SAAA,CAAA4R,GACC7R,EAAAA,IAACG,GAAA,CAAK,UAAU,0DAAA,CAA2D,EAE5EyQ,GACC5Q,EAAAA,IAACV,EAAA,CACC,QAAUqC,GAAM,CACdA,EAAE,gBAAA,EACFiP,EAAS6B,CAAY,CACvB,EACA,UAAU,uMACV,aAAW,sBAEX,eAACjP,GAAA,CAAK,KAAMF,GAAS,MAAO,UAAU,SAAA,CAAU,CAAA,CAAA,CAClD,CAAA,CAEJ,CAAA,CAAA,EA3DKmP,EAAa,EAAA,CA8DxB,CAAC,EAEA1C,GACC/P,EAAAA,IAACC,EAAA,CAAI,IAAKkR,EAAa,UAAU,wBAC9B,SAAAnB,EACChQ,MAACG,GAAA,CAAK,UAAU,2CAA2C,SAAA,MAAG,QAE7DA,GAAA,CAAK,UAAU,2CAA2C,CAAA,CAE/D,EAED6P,GAAW,CAACD,GAAWF,EAAc,OAAS,GAC7C7P,EAAAA,IAACC,EAAA,CAAI,UAAU,wBACb,SAAAD,EAAAA,IAACG,GAAA,CAAK,UAAU,2CAA2C,eAAG,CAAA,CAChE,CAAA,CAAA,CAEJ,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,EAEJ,CAEJ,iICrZMoE,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EAGxC0P,GAAYC,GAAiB,CAChC,OAAe,QAAQ,WAAW,CACjC,QAAS,WACT,OAAQ,CAAE,KAAAA,CAAA,CAAK,CAChB,CACH,EAoGM5G,GAAgC,CAAC,CACrC,KAAA6G,EACA,SAAAC,EAAW,QACX,KAAAC,EACA,UAAAC,EAAY,EACZ,kBAAAC,EAAoB,EACpB,OAAAC,EAAS,CAAA,EACT,iBAAAC,EAAmB,EACnB,iBAAAC,EACA,iBAAAC,EAAmB,CAAA,EACnB,cAAAC,EAAgB,KAChB,SAAAC,EAAW,QACX,UAAA3T,EAAY,GACZ,YAAAqJ,EAEA,cAAA6G,EAAgB,CAAA,EAChB,oBAAA0D,EAAsB,GACtB,oBAAAC,EAAsB,GACtB,uBAAAC,EAAyB,GACzB,sBAAAC,EACA,sBAAAC,EACA,4BAAAC,EACA,0BAAAC,EACA,2BAAAC,EACA,oBAAAC,EACA,oBAAAxD,EACA,uBAAAyD,EACA,0BAAAC,EACA,wBAAAC,EACA,qBAAAC,EACA,+BAAAC,CACF,IAAM,CACJ,KAAM,CAACC,EAAaC,CAAc,EAAIhT,EAAAA,SAAS,EAAE,EAC3C,CAACiT,EAAcC,CAAe,EAAIlT,EAAAA,SAAS,EAAK,EAChD,CAACmT,EAAgBC,CAAiB,EAAIpT,EAAAA,SAAS,EAAK,EACpD,CAACqT,EAAcC,CAAe,EAAItT,EAAAA,SAAS,EAAK,EAChD,CAACuT,EAAkBC,CAAmB,EAAIxT,EAAAA,SAAwC,CAAE,IAAK,EAAG,KAAM,EAAG,EACrG,CAACyT,EAAaC,CAAc,EAAI1T,EAAAA,SAAS,OAAO,SAAS,QAAQ,EACjE2T,EAAchU,EAAAA,OAAuB,IAAI,EACzCiU,EAAgBjU,EAAAA,OAAuB,IAAI,EAC3CkU,GAAclU,EAAAA,OAAuB,IAAI,EAIzCmU,GADU,OAAe,QACD,cACxBC,EAAkBD,KAAA,EAClBE,GAAWD,EACbA,EAAgB,MAAQ,IACxB,OAAO,OAAW,KAAe,OAAO,WAAa,IAGzD9T,EAAAA,UAAU,IAAM,CACd,MAAMgU,EAAiB,IAAMP,EAAe,OAAO,SAAS,QAAQ,EACpE,OAAO,iBAAiB,WAAYO,CAAc,EAGlD,MAAMC,GAAoB,QAAQ,UAClC,eAAQ,UAAY,YAAYhN,GAAM,CACpCgN,GAAkB,MAAM,KAAMhN,EAAI,EAClCwM,EAAe,OAAO,SAAS,QAAQ,CACzC,EAEO,IAAM,CACX,OAAO,oBAAoB,WAAYO,CAAc,EACrD,QAAQ,UAAYC,EACtB,CACF,EAAG,CAAA,CAAE,EAGL,MAAMC,GAAgB,CAAC9C,EAAc+C,GAAQ,KACvCA,GACKX,IAAgBpC,EAElBoC,IAAgBpC,GAAQoC,EAAY,WAAWpC,EAAO,GAAG,EAI5DgD,GAAe,IAAe,CAClC,MAAMC,EAAOtC,IAAa,IAAM,GAAKA,EACrC,OAAOyB,EAAY,WAAW,GAAGa,CAAI,WAAW,GACzCb,EAAY,WAAW,GAAGa,CAAI,OAAO,GACrCb,EAAY,WAAW,GAAGa,CAAI,WAAW,GACzCb,EAAY,WAAW,GAAGa,CAAI,WAAW,CAClD,EAGMC,GAAqBC,GAA8B,CACvD,MAAMC,GAAY,8FAClB,OAAID,EACK,GAAGC,EAAS,2DAEd,GAAGA,EAAS,sHACrB,EAGAxU,EAAAA,UAAU,IAAM,CACd,MAAM8I,EAAsBC,IAAsB,CAC5C2K,EAAY,SAAW,CAACA,EAAY,QAAQ,SAAS3K,GAAM,MAAc,GAC3EkK,EAAgB,EAAK,EAEnBU,EAAc,SAAW,CAACA,EAAc,QAAQ,SAAS5K,GAAM,MAAc,GAC/EoK,EAAkB,EAAK,EAErBS,GAAY,SAAW,CAACA,GAAY,QAAQ,SAAS7K,GAAM,MAAc,GAC3EsK,EAAgB,EAAK,CAEzB,EACA,gBAAS,iBAAiB,YAAavK,CAAkB,EAClD,IAAM,SAAS,oBAAoB,YAAaA,CAAkB,CAC3E,EAAG,CAAA,CAAE,EAEL,MAAM2L,GAAgB/C,EAAO,MAAM,EAAGC,CAAgB,EAChD+C,GAAehD,EAAO,MAAMC,CAAgB,EAE5CgD,GAAgBvU,GAAuB,CAC3CA,EAAE,eAAA,EACE0S,EAAY,QACd3B,GAAS,aAAa,mBAAmB2B,CAAW,CAAC,EAAE,CAE3D,EAEM8B,GAAe,SAAY,CAG9B,OAAe,QAAQ,WAAW,CACjC,QAAS,QAAA,CACV,CACH,EAGMC,GAAsB1N,GAAmB,CAC5C,OAAe,QAAQ,WAAW,CACjC,QAAS,YACT,OAAQA,CAAA,CACT,EACDkM,EAAgB,EAAK,CACvB,EAGMnM,GAAiBC,GACpB,OAAe,QAAQ,OAAO,MAAM,+BAA+B,IAAIA,CAAM,IAC7EA,IAAW,KAAO,MAAQA,IAAW,KAAO,UAAYA,IAAW,KAAO,MAAQA,IAAW,KAAO,KAAOA,IAAW,KAAO,UAAYA,IAAW,KAAO,WAAaA,IAAW,KAAO,UAAYA,EAAO,eAEhN,OACErB,EAAAA,KAACgP,GAAA,CACE,GAAKrN,GAAe,CAAA,EACrB,UAAW,6FAA6FrJ,CAAS,GAGjH,SAAA,CAAAK,EAAAA,IAACC,GAAI,UAAU,yCACb,SAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,yCAEb,SAAA,CAAAD,EAAAA,IAACV,EAAA,CAAO,QAAS,IAAMoT,GAAS,GAAG,EAAG,UAAU,uDAC7C,SAAAE,EACC5S,EAAAA,IAAC4H,GAAA,CAAI,IAAKgL,EAAM,IAAKC,EAAU,UAAU,KAAA,CAAM,QAE9C1S,GAAA,CAAK,UAAU,kDAAmD,SAAA0S,CAAA,CAAS,CAAA,CAEhF,EAGC,CAACyC,IACAtV,EAAAA,IAACsI,GAAA,CAAK,SAAU4N,GAAc,UAAU,4BACtC,SAAA7O,EAAAA,KAACpH,EAAA,CAAI,UAAU,kBACb,SAAA,CAAAD,EAAAA,IAACK,GAAA,CACC,KAAK,OACL,MAAOgU,EACP,SAAW1S,GAAM2S,EAAe3S,EAAE,OAAO,KAAK,EAC9C,YAAa4C,GAAE,2BAA2B,EAC1C,UAAU,8LAAA,CAAA,EAEZvE,EAAAA,IAACwD,GAAA,CACC,KAAK,SACL,UAAU,mFAAA,CAAA,CACZ,CAAA,CACF,CAAA,CACF,EAIF6D,EAAAA,KAACpH,EAAA,CAAI,UAAU,0BAEb,SAAA,CAAAD,EAAAA,IAACsM,GAAA,CACC,SAAU/H,GAAE,mBAAmB,EAC/B,UAAWA,GAAE,oBAAoB,EACjC,SAAUA,GAAE,mBAAmB,CAAA,CAAA,EAIhCuO,GAAM,MACL9S,EAAAA,IAAC4P,GAAA,CACC,cAAAC,EACA,YAAamD,EACb,QAASO,EACT,QAASC,EACT,WAAYC,EACZ,UAAWC,GAAyBnP,GAAE,4BAA4B,EAClE,UAAWoP,GAAyBpP,GAAE,4BAA4B,EAClE,gBAAiBqP,GAA+BrP,GAAE,oCAAoC,EACtF,cAAesP,GAA6BtP,GAAE,iCAAiC,EAC/E,eAAgBuP,GAA8BvP,GAAE,kCAAkC,EAClF,QAASwP,EACT,oBAAAxD,EACA,WAAYyD,EACZ,cAAeC,EACf,YAAaC,EACb,SAAUC,EACV,mBAAoBC,EACpB,cAAc,OAAA,CAAA,EAKlB/M,EAAAA,KAAC/H,EAAA,CAAO,QAAS,IAAMoT,GAAS,GAAGY,CAAQ,OAAO,EAAG,UAAU,yGAC7D,SAAA,CAAAtT,EAAAA,IAACwD,GAAA,CAAK,KAAK,gBAAgB,UAAU,UAAU,EAC9CuP,EAAY,GACX/S,MAACG,GAAA,CAAK,UAAU,gHACb,SAAA4S,EAAY,GAAK,MAAQA,CAAA,CAC5B,CAAA,EAEJ,EAICK,GAAoBA,EAAiB,OAAS,UAC5CnT,EAAA,CAAI,IAAKkV,GAAa,UAAU,WAC/B,SAAA,CAAA9N,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAMsV,EAAgB,CAACD,CAAY,EAC5C,UAAU,sKACV,gBAAc,UACd,gBAAeA,EACf,aAAYpQ,GAAE,iBAAiB,EAE/B,SAAA,CAAAvE,EAAAA,IAACwD,GAAA,CAAK,KAAK,QAAQ,UAAU,UAAU,EACvCxD,EAAAA,IAACG,GAAA,CAAK,UAAU,wBAAyB,SAAAkT,EAAc,EACvDrT,EAAAA,IAACwD,GAAA,CAAK,KAAK,eAAe,UAAU,SAAA,CAAU,CAAA,CAAA,CAAA,EAE/CmR,GACC3U,EAAAA,IAACC,EAAA,CACC,KAAK,UACL,UAAU,kJAET,SAAAmT,EAAiB,IAAK1K,GAAW,CAChC,MAAMoN,GAAWpN,IAAW2K,EAC5B,OACEhM,EAAAA,KAAC/H,EAAA,CAEC,KAAK,SACL,gBAAewW,GACf,QAAS,IAAMM,GAAmB1N,CAAM,EACxC,UAAW,iGACToN,GACI,kEACA,2EACN,GAEA,SAAA,CAAA9V,EAAAA,IAACwD,GAAA,CAAK,KAAK,QAAQ,UAAU,UAAU,QACtCrD,GAAA,CAAK,UAAU,qBAAsB,SAAAsI,GAAcC,CAAM,EAAE,EAC3DoN,IAAY9V,EAAAA,IAACwD,GAAA,CAAK,KAAK,QAAQ,UAAU,SAAA,CAAU,CAAA,CAAA,EAZ/CkF,CAAA,CAeX,CAAC,CAAA,CAAA,CACH,EAEJ,QAOD+F,GAAA,CAAc,OAAO,kBAAkB,GAAG,+BAA+B,UAAU,oBAAoB,EAGvGqE,GAAM,KACLzL,EAAAA,KAACpH,GAAI,IAAKgV,EAAa,UAAU,WAC/B,SAAA,CAAA5N,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAMkV,EAAgB,CAACD,CAAY,EAC5C,UAAU,yGAEV,SAAA,CAAAvU,EAAAA,IAACyN,GAAA,CACC,OAAQqF,EAAK,OACb,KAAMA,EAAK,KACX,KAAK,IAAA,CAAA,EAEP9S,EAAAA,IAACG,GAAA,CAAK,UAAU,uCAAwC,WAAK,KAAK,EAClEH,EAAAA,IAACwD,GAAA,CAAK,KAAK,eAAe,UAAU,SAAA,CAAU,CAAA,CAAA,CAAA,EAI/C+Q,GACClN,EAAAA,KAACpH,EAAA,CAAI,UAAU,kIAEb,SAAA,CAAAD,EAAAA,IAACC,GAAI,UAAU,0DACb,SAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,0BACb,SAAA,CAAAD,EAAAA,IAACyN,GAAA,CACC,OAAQqF,EAAK,OACb,KAAMA,EAAK,KACX,KAAK,IAAA,CAAA,SAEN7S,EAAA,CACC,SAAA,CAAAD,EAAAA,IAACC,EAAA,CAAI,UAAU,oDAAqD,SAAA6S,EAAK,KAAK,QAC7E7S,EAAA,CAAI,UAAU,2CAA4C,SAAAsE,GAAE,eAAe,CAAA,CAAE,CAAA,CAAA,CAChF,CAAA,CAAA,CACF,CAAA,CACF,EAGA8C,EAAAA,KAACpH,EAAA,CAAI,UAAU,OAEZ,SAAA,CAAA6S,EAAK,UACJzL,EAAAA,KAAAmL,EAAAA,SAAA,CACE,SAAA,CAAAnL,EAAAA,KAACgB,GAAA,CACC,KAAK,SACL,UAAU,gJAEV,SAAA,CAAArI,EAAAA,IAACwD,GAAA,CAAK,KAAK,WAAW,UAAU,sBAAsB,EACrDe,GAAE,mBAAmB,CAAA,CAAA,CAAA,EAExBvE,EAAAA,IAAC8L,GAAA,CAAG,UAAU,2CAAA,CAA4C,CAAA,EAC5D,EAEFzE,OAAC/H,EAAA,CAAO,QAAS,IAAM,CAAEoT,GAAS,SAAS,EAAG8B,EAAgB,EAAK,CAAG,EAAG,UAAU,oIACjF,SAAA,CAAAxU,EAAAA,IAACwD,GAAA,CAAK,KAAK,OAAO,UAAU,sBAAsB,EACjDe,GAAE,eAAe,CAAA,EACpB,EACA8C,OAAC/H,EAAA,CAAO,QAAS,IAAM,CAAEoT,GAAS,gBAAgB,EAAG8B,EAAgB,EAAK,CAAG,EAAG,UAAU,oIACxF,SAAA,CAAAxU,EAAAA,IAACwD,GAAA,CAAK,KAAK,eAAe,UAAU,sBAAsB,EACzDe,GAAE,oBAAoB,CAAA,EACzB,EACA8C,OAAC/H,EAAA,CAAO,QAAS,IAAM,CAAEoT,GAAS,kBAAkB,EAAG8B,EAAgB,EAAK,CAAG,EAAG,UAAU,oIAC1F,SAAA,CAAAxU,EAAAA,IAACwD,GAAA,CAAK,KAAK,QAAQ,UAAU,sBAAsB,EAClDe,GAAE,sBAAsB,CAAA,CAAA,CAC3B,CAAA,EACF,EAIAvE,EAAAA,IAAC8L,GAAA,CAAG,UAAU,2CAAA,CAA4C,EAC1DzE,EAAAA,KAAC/H,EAAA,CACC,QAAS6W,GACT,UAAU,kIAEV,SAAA,CAAAnW,EAAAA,IAACwD,GAAA,CAAK,KAAK,UAAU,UAAU,sBAAsB,EACpDe,GAAE,aAAa,CAAA,CAAA,CAAA,CAClB,CAAA,CACF,CAAA,CAAA,CAEJ,EAEA8C,EAAAA,KAACpH,EAAA,CAAI,UAAU,4BAEb,SAAA,CAAAD,EAAAA,IAACV,EAAA,CACC,QAAS,IAAMoT,GAAS,gCAAgC,EACxD,UAAU,4HAET,YAAE,gCAAgC,CAAA,CAAA,EAErC1S,EAAAA,IAACV,EAAA,CACC,QAAS,IAAMoT,GAAS,QAAQ,EAChC,UAAU,4HAET,YAAE,YAAY,CAAA,CAAA,EAEjB1S,EAAAA,IAACV,EAAA,CACC,QAAS,IAAMoT,GAAS,WAAW,EACnC,UAAU,8GAET,YAAE,oBAAoB,CAAA,CAAA,CACzB,EACF,EAID4C,IACCtV,EAAAA,IAACV,EAAA,CACC,QAAS6T,EACT,UAAU,uCAEV,SAAAnT,EAAAA,IAACwD,GAAA,CAAK,KAAK,OAAO,UAAU,SAAA,CAAU,CAAA,CAAA,CACxC,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CACF,EAGC,CAAC8R,IACFtV,EAAAA,IAAC2L,GAAA,CAAI,UAAU,gDACb,SAAA3L,MAACC,EAAA,CAAI,UAAU,yCACb,SAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,+CACb,SAAA,CAAAD,MAACV,GAAO,QAAS,IAAMoT,GAAS,GAAG,EAAG,UAAWmD,GAAkBJ,GAAc,IAAK,EAAI,CAAC,EAAG,cAAY,WACvG,SAAAlR,GAAE,UAAU,EACf,SACCjF,EAAA,CAAO,QAAS,IAAMoT,GAAS,iBAAiB,EAAG,UAAW,2BAA2BmD,GAAkBJ,GAAc,iBAAiB,CAAC,CAAC,GAAI,cAAY,cAC3J,SAAA,CAAAzV,EAAAA,IAACG,GAAA,CAAK,UAAU,kBAAkB,SAAA,KAAE,EACnCoE,GAAE,aAAa,CAAA,EAClB,EACA8C,OAAC/H,GAAO,QAAS,IAAMoT,GAAS,GAAGY,IAAa,IAAM,GAAKA,CAAQ,WAAW,EAAG,UAAW,2BAA2BuC,GAAkBF,IAAc,CAAC,GAAI,cAAY,WACtK,SAAA,CAAA3V,EAAAA,IAACG,IAAK,SAAA,IAAA,CAAE,EACPoE,GAAE,UAAU,CAAA,EACf,EAGCyR,GAAc,IAAKM,GAClBjP,EAAAA,KAAC/H,EAAA,CAEC,QAAS,IAAMoT,GAAS,UAAU4D,EAAM,IAAI,EAAE,EAC9C,UAAWT,GAAkBJ,GAAc,UAAUa,EAAM,IAAI,EAAE,CAAC,EAEjE,SAAA,CAAAA,EAAM,MAAQtW,EAAAA,IAACG,GAAA,CAAK,UAAU,OAAQ,WAAM,KAAK,EACjDmW,EAAM,IAAA,CAAA,EALFA,EAAM,EAAA,CAOd,EAGAL,GAAa,OAAS,GACrB5O,EAAAA,KAACpH,GAAI,IAAKiV,EAAe,UAAU,WACjC,SAAA,CAAA7N,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAM,CACb,GAAI,CAACmV,GAAkBS,EAAc,QAAS,CAC5C,MAAMhL,EAAOgL,EAAc,QAAQ,sBAAA,EACnCJ,EAAoB,CAClB,IAAK5K,EAAK,OAAS,EACnB,KAAMA,EAAK,IAAA,CACZ,CACH,CACAwK,EAAkB,CAACD,CAAc,CACnC,EACA,UAAU,mIAET,SAAA,CAAAlQ,GAAE,UAAU,EACbvE,EAAAA,IAACwD,GAAA,CAAK,KAAK,eAAe,UAAU,SAAA,CAAU,CAAA,CAAA,CAAA,EAE/CiR,GACCzU,EAAAA,IAACC,EAAA,CACC,UAAU,kHACV,MAAO,CAAE,IAAK,GAAG4U,EAAiB,GAAG,KAAM,KAAM,GAAGA,EAAiB,IAAI,IAAA,EAExE,SAAAoB,GAAa,IAAKK,GAAU,CAC3B,MAAMR,GAAWL,GAAc,UAAUa,EAAM,IAAI,EAAE,EACrD,OACEjP,EAAAA,KAAC/H,EAAA,CAEC,QAAS,IAAM,CACboT,GAAS,UAAU4D,EAAM,IAAI,EAAE,EAC/B5B,EAAkB,EAAK,CACzB,EACA,UAAW,2DACToB,GACI,0DACA,2EACN,GAEC,SAAA,CAAAQ,EAAM,MAAQtW,EAAAA,IAACG,GAAA,CAAK,UAAU,OAAQ,WAAM,KAAK,EACjDmW,EAAM,IAAA,CAAA,EAZFA,EAAM,EAAA,CAejB,CAAC,CAAA,CAAA,CACH,CAAA,CAEJ,CAAA,CAAA,CAEJ,EACF,CAAA,CACF,CAAA,CAAA,CAAA,CAIN,2GCnmBaC,GAASrW,EAAM,WAAqC,CAAC,CAChE,SAAAV,EACA,UAAAG,EAAY,GACZ,GAAGC,CACL,EAAGC,IAECG,EAAAA,IAAC,SAAA,CACC,IAAAH,EACA,UAAAF,EACC,GAAGC,EAEH,SAAAJ,CAAA,CAAA,CAGN,ECSK+E,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EAMxCwT,GAAoB,IACpBC,GAAqB,KAGrB/D,GAAYC,GAAiB,CAChC,OAAe,QAAQ,WAAW,CACjC,QAAS,WACT,OAAQ,CAAE,KAAAA,CAAA,CAAK,CAChB,CACH,EA2DM4D,GAAgC,CAAC,CACrC,SAAA1D,EAAW,QACX,gBAAA6D,EACA,cAAAC,EACA,YAAAC,EAAc,CAAA,EACd,WAAAC,EACA,UAAAlX,EAAY,GACZ,YAAAqJ,CACF,IAAM,CACJ,MAAM8N,EAAc,IAAI,KAAA,EAAO,YAAA,EAKzB1B,EADU,OAAe,QACD,cAExB2B,EADkB3B,IAAA,GAEL,QAChB,OAAO,OAAW,IAAc,OAAO,WAAaqB,IACjDnB,EAAWyB,EAAQP,GACnBQ,EAAYD,GAASN,GAErBQ,EAAc3B,EAAW,EAAI0B,EAAY,EAAI,EAG7CE,EAAuC,CAC3C,CACE,MAAO3S,GAAE,kBAAkB,EAC3B,MAAO,CACL,CAAE,MAAOA,GAAE,UAAU,EAAG,KAAM,GAAA,EAC9B,CAAE,MAAOA,GAAE,aAAa,EAAG,KAAM,iBAAA,EACjC,CAAE,MAAOA,GAAE,mBAAmB,EAAG,KAAM,SAAA,CAAU,CACnD,EAEF,CACE,MAAOA,GAAE,aAAa,EACtB,MAAO,CACL,CAAE,MAAOA,GAAE,cAAc,EAAG,KAAM,aAAA,EAClC,CAAE,MAAOA,GAAE,YAAY,EAAG,KAAM,WAAA,EAChC,CAAE,MAAOA,GAAE,gBAAgB,EAAG,KAAM,eAAA,CAAgB,CACtD,EAEF,CACE,MAAOA,GAAE,eAAe,EACxB,MAAO,CACL,CAAE,MAAOA,GAAE,cAAc,EAAG,KAAM,aAAA,EAClC,CAAE,MAAOA,GAAE,gBAAgB,EAAG,KAAM,eAAA,EACpC,CAAE,MAAOA,GAAE,eAAe,EAAG,KAAM,cAAA,CAAe,CACpD,CACF,EAGI4S,EAASN,GAAcK,EAGvBE,EAAmD,CACvD,OAAQ,SACR,QAAS,UACT,QAAS,UACT,SAAU,WACV,UAAW,WAAA,EAGb,OACEpX,EAAAA,IAACqX,GAAA,CACE,GAAKrO,GAAe,CAAA,EACrB,UAAW,6EAA6ErJ,CAAS,GAEjG,SAAA0H,EAAAA,KAACpH,EAAA,CAAI,UAAU,+CACb,SAAA,CAAAoH,EAAAA,KAACpH,EAAA,CACC,UAAU,aACV,MAAO,CAAE,oBAAqB,UAAUgX,CAAW,mBAAA,EAGnD,SAAA,CAAA5P,OAACpH,GAAI,MAAO+W,EAAY,CAAE,WAAY,iBAAA,EAAsB,OAC1D,SAAA,CAAAhX,EAAAA,IAACgI,GAAA,CAAG,UAAU,kDAAmD,SAAA6K,EAAS,EACzE6D,GACC1W,EAAAA,IAAC2H,GAAA,CAAE,UAAU,gDAAiD,SAAA+O,EAAgB,QAI/EzW,EAAA,CAAI,UAAU,+BACZ,SAAA,OAAO,QAAQ2W,CAAW,EAAE,IAAI,CAAC,CAAChW,EAAM0W,CAAG,IAC1CA,EACEtX,EAAAA,IAACqI,GAAA,CAEC,KAAMiP,EACN,OAAO,SACP,IAAI,sBACJ,UAAU,gFACV,aAAY1W,EAEZ,eAAC4C,GAAA,CAAK,KAAM4T,EAAcxW,CAAyB,EAAG,UAAU,SAAA,CAAU,CAAA,EAPrEA,CAAA,EASL,IAAA,CACN,CACF,CAAA,EACF,EAGCuW,EAAO,IAAI,CAACI,EAAOC,WACjBvX,EAAA,CACC,SAAA,CAAAD,EAAAA,IAACiI,GAAA,CAAG,UAAU,+EACX,SAAAsP,EAAM,MACT,EACAvX,EAAAA,IAACkI,GAAA,CAAG,UAAU,iBACX,SAAAqP,EAAM,MAAM,IAAI,CAACE,EAAMC,IACtB1X,EAAAA,IAACoI,GAAA,CACC,SAAApI,EAAAA,IAACV,EAAA,CACC,QAAS,IAAMoT,GAAS+E,EAAK,IAAI,EACjC,UAAU,oGAET,SAAAA,EAAK,KAAA,CAAA,CACR,EANOC,CAOT,CACD,CAAA,CACH,CAAA,CAAA,EAfQF,CAgBV,CACD,CAAA,CAAA,CAAA,EAIHnQ,EAAAA,KAACpH,EAAA,CACC,UAAU,kGACV,MAAO,CAAE,cAAeqV,EAAW,SAAW,KAAA,EAE9C,SAAA,CAAAtV,EAAAA,IAAC2H,GAAA,CAAE,UAAU,2CACV,SAAAgP,GAAiB,KAAKG,CAAW,IAAIjE,CAAQ,wBAAA,CAChD,QACClL,GAAA,CAAE,UAAU,2CACV,SAAApD,GAAE,mBAAmB,CAAA,CACxB,CAAA,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAGN,2GC9NMA,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EAKxC0P,GAAYC,GAAiB,CAChC,OAAe,QAAQ,WAAW,CACjC,QAAS,WACT,OAAQ,CAAE,KAAAA,CAAA,CAAK,CAChB,CACH,EA+CMgF,GAAsC,CAAC,CAC3C,OAAA1O,EACA,QAAAuH,EACA,KAAAoC,EACA,SAAAC,EAAW,QACX,KAAAC,EACA,OAAAG,EAAS,CAAA,EACT,UAAAF,EAAY,CACd,IAAM,CACJ,MAAM6E,EAAY3W,EAAAA,OAAuB,IAAI,EAIvCmU,EADU,OAAe,QACD,cACxBC,EAAkBD,IAAA,EAElByC,EAAaxC,EACfA,EAAgB,MAAQ,KACxB,OAAO,OAAW,KAAe,OAAO,WAAa,KAGzD9T,EAAAA,UAAU,IAAM,CACd,MAAMuW,EAAgBnW,GAAqB,CACrCA,EAAE,MAAQ,UACZ6O,EAAA,CAEJ,EAEA,OAAIvH,IACF,SAAS,iBAAiB,UAAW6O,CAAY,EACjD,SAAS,KAAK,MAAM,SAAW,UAG1B,IAAM,CACX,SAAS,oBAAoB,UAAWA,CAAY,EACpD,SAAS,KAAK,MAAM,SAAW,EACjC,CACF,EAAG,CAAC7O,EAAQuH,CAAO,CAAC,EAGpB,MAAMuH,EAAsBpW,GAAwB,CAC9CA,EAAE,SAAWA,EAAE,eACjB6O,EAAA,CAEJ,EAIA,MAFI,CAACvH,GAED,CAAC4O,EAAmB,KAGtBxQ,EAAAA,KAACpH,EAAA,CACC,UAAU,qBACV,QAAS8X,EAGT,SAAA,CAAA/X,EAAAA,IAACC,EAAA,CAAI,UAAU,8CAAA,CAA+C,EAG9DoH,EAAAA,KAACpH,EAAA,CACC,IAAK2X,EACL,UAAW,4HAA4H3O,EAAS,gBAAkB,mBAAmB,GAGrL,SAAA,CAAA5B,EAAAA,KAACpH,EAAA,CAAI,UAAU,sFACb,SAAA,CAAAD,MAACV,EAAA,CAAO,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,GAAG,CAAG,EAAG,UAAU,yCAC7D,WACC1S,MAAC4H,GAAA,CAAI,IAAKgL,EAAM,IAAKC,EAAU,UAAU,MAAM,EAE/C7S,EAAAA,IAACG,IAAK,UAAU,kDAAmD,WAAS,EAEhF,EACAH,EAAAA,IAACV,EAAA,CACC,QAASkR,EACT,UAAU,oFACV,aAAW,QAEX,SAAAxQ,EAAAA,IAACwD,GAAA,CAAK,KAAK,IAAI,UAAU,SAAA,CAAU,CAAA,CAAA,CACrC,EACF,EAGCsP,QACE7S,EAAA,CAAI,UAAU,oDACb,SAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,0BACZ,SAAA,CAAA6S,EAAK,aACHlL,GAAA,CAAI,IAAKkL,EAAK,OAAQ,IAAKA,EAAK,KAAM,UAAU,wBAAA,CAAyB,EAE1E9S,EAAAA,IAACC,EAAA,CAAI,UAAU,qGACX,UAAA6S,EAAK,MAAQ,KAAK,OAAO,CAAC,EAAE,YAAA,CAAY,CAC5C,SAED7S,EAAA,CACC,SAAA,CAAAD,EAAAA,IAAC2H,GAAA,CAAE,UAAU,4CAA6C,SAAAmL,EAAK,KAAK,EACpE9S,MAACV,EAAA,CAAO,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,SAAS,CAAG,EAAG,UAAU,0EACnE,SAAAnO,GAAE,eAAe,CAAA,CACpB,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,EAEAvE,EAAAA,IAACC,EAAA,CAAI,UAAU,oDACb,SAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,aACb,SAAA,CAAAD,EAAAA,IAACV,EAAA,CACC,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,QAAQ,CAAG,EAChD,UAAU,gIAET,YAAE,YAAY,CAAA,CAAA,EAEjB1S,EAAAA,IAACV,EAAA,CACC,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,WAAW,CAAG,EACnD,UAAU,qJAET,YAAE,eAAe,CAAA,CAAA,CACpB,CAAA,CACF,CAAA,CACF,QAID/G,GAAA,CAAI,UAAU,gDACb,SAAAtE,EAAAA,KAACa,GAAA,CAAG,UAAU,YAEZ,SAAA,CAAAlI,MAACoI,GAAA,CACC,SAAAf,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,GAAG,CAAG,EAC3C,UAAU,yJAEV,SAAA,CAAA1S,EAAAA,IAACwD,GAAA,CAAK,KAAK,OAAO,UAAU,UAAU,EACrCe,GAAE,UAAU,CAAA,CAAA,CAAA,EAEjB,QACC6D,GAAA,CACC,SAAAf,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,UAAU,CAAG,EAClD,UAAU,yJAEV,SAAA,CAAA1S,EAAAA,IAACG,GAAA,CAAK,UAAU,kBAAkB,SAAA,KAAE,EACnCoE,GAAE,aAAa,CAAA,CAAA,CAAA,EAEpB,QACC6D,GAAA,CACC,SAAAf,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,OAAO,CAAG,EAC/C,UAAU,yJAEV,SAAA,CAAA1S,EAAAA,IAACG,IAAK,SAAA,IAAA,CAAE,EACPoE,GAAE,UAAU,CAAA,CAAA,CAAA,EAEjB,QACC6D,GAAA,CACC,SAAAf,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,OAAO,CAAG,EAC/C,UAAU,yJAEV,SAAA,CAAA1S,EAAAA,IAACwD,GAAA,CAAK,KAAK,gBAAgB,UAAU,UAAU,EAC9Ce,GAAE,UAAU,EACZwO,EAAY,GACX/S,EAAAA,IAACG,GAAA,CAAK,UAAU,kEACb,SAAA4S,CAAA,CACH,CAAA,CAAA,CAAA,EAGN,EAGA/S,EAAAA,IAACoI,GAAA,CAAG,UAAU,oDAAA,CAAqD,QAGlEA,GAAA,CAAG,UAAU,4FACX,SAAA7D,GAAE,YAAY,EACjB,EACC0O,EAAO,IAAKqD,SACVlO,GAAA,CACC,SAAAf,EAAAA,KAAC/H,EAAA,CACC,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,UAAU4D,EAAM,IAAI,EAAE,CAAG,EAC9D,UAAU,yJAET,SAAA,CAAAA,EAAM,MAAQtW,MAACG,GAAA,CAAM,SAAAmW,EAAM,KAAK,EAChCA,EAAM,IAAA,CAAA,CAAA,CACT,EAPOA,EAAM,EAQf,CACD,CAAA,CAAA,CACH,CAAA,CACF,QAGCrW,EAAA,CAAI,UAAU,+GACb,SAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,6EACb,SAAA,CAAAD,MAACV,EAAA,CAAO,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,QAAQ,CAAG,EAAG,UAAU,8DAClE,SAAAnO,GAAE,cAAc,EACnB,EACAvE,MAACV,EAAA,CAAO,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,QAAQ,CAAG,EAAG,UAAU,8DAClE,SAAAnO,GAAE,cAAc,EACnB,EACAvE,MAACV,EAAA,CAAO,QAAS,IAAM,CAAEkR,EAAA,EAAWkC,GAAS,UAAU,CAAG,EAAG,UAAU,8DACpE,SAAAnO,GAAE,gBAAgB,CAAA,CACrB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,2GCxRA,KAAM,CACJ,QAAAqN,GACA,eAAAoG,GACA,SAAAC,GACA,eAAAC,GACA,yBAAAC,EACF,EAAI,OACJ,GAAI,CACF,OAAAC,GACA,KAAAC,GACA,OAAAC,EACF,EAAI,OACA,CACF,MAAAC,GACA,UAAAC,EACF,EAAI,OAAO,QAAY,KAAe,QACjCJ,KACHA,GAAS,SAAgBK,EAAG,CAC1B,OAAOA,CACT,GAEGJ,KACHA,GAAO,SAAcI,EAAG,CACtB,OAAOA,CACT,GAEGF,KACHA,GAAQ,SAAeG,EAAMC,EAAS,CACpC,QAASC,EAAO,UAAU,OAAQpQ,EAAO,IAAI,MAAMoQ,EAAO,EAAIA,EAAO,EAAI,CAAC,EAAGC,EAAO,EAAGA,EAAOD,EAAMC,IAClGrQ,EAAKqQ,EAAO,CAAC,EAAI,UAAUA,CAAI,EAEjC,OAAOH,EAAK,MAAMC,EAASnQ,CAAI,CACjC,GAEGgQ,KACHA,GAAY,SAAmBM,EAAM,CACnC,QAASC,EAAQ,UAAU,OAAQvQ,EAAO,IAAI,MAAMuQ,EAAQ,EAAIA,EAAQ,EAAI,CAAC,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACxGxQ,EAAKwQ,EAAQ,CAAC,EAAI,UAAUA,CAAK,EAEnC,OAAO,IAAIF,EAAK,GAAGtQ,CAAI,CACzB,GAEF,MAAMyQ,GAAeC,GAAQ,MAAM,UAAU,OAAO,EAC9CC,GAAmBD,GAAQ,MAAM,UAAU,WAAW,EACtDE,GAAWF,GAAQ,MAAM,UAAU,GAAG,EACtCG,GAAYH,GAAQ,MAAM,UAAU,IAAI,EACxCI,GAAcJ,GAAQ,MAAM,UAAU,MAAM,EAC5CK,GAAoBL,GAAQ,OAAO,UAAU,WAAW,EACxDM,GAAiBN,GAAQ,OAAO,UAAU,QAAQ,EAClDO,GAAcP,GAAQ,OAAO,UAAU,KAAK,EAC5CQ,GAAgBR,GAAQ,OAAO,UAAU,OAAO,EAChDS,GAAgBT,GAAQ,OAAO,UAAU,OAAO,EAChDU,GAAaV,GAAQ,OAAO,UAAU,IAAI,EAC1CW,GAAuBX,GAAQ,OAAO,UAAU,cAAc,EAC9DY,GAAaZ,GAAQ,OAAO,UAAU,IAAI,EAC1Ca,GAAkBC,GAAY,SAAS,EAO7C,SAASd,GAAQR,EAAM,CACrB,OAAO,SAAUC,EAAS,CACpBA,aAAmB,SACrBA,EAAQ,UAAY,GAEtB,QAASsB,EAAQ,UAAU,OAAQzR,EAAO,IAAI,MAAMyR,EAAQ,EAAIA,EAAQ,EAAI,CAAC,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACxG1R,EAAK0R,EAAQ,CAAC,EAAI,UAAUA,CAAK,EAEnC,OAAO3B,GAAMG,EAAMC,EAASnQ,CAAI,CAClC,CACF,CAOA,SAASwR,GAAYlB,EAAM,CACzB,OAAO,UAAY,CACjB,QAASqB,EAAQ,UAAU,OAAQ3R,EAAO,IAAI,MAAM2R,CAAK,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF5R,EAAK4R,CAAK,EAAI,UAAUA,CAAK,EAE/B,OAAO5B,GAAUM,EAAMtQ,CAAI,CAC7B,CACF,CASA,SAAS6R,GAASC,EAAKC,EAAO,CAC5B,IAAIC,EAAoB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIjB,GACxFvB,IAIFA,GAAesC,EAAK,IAAI,EAE1B,IAAIG,EAAIF,EAAM,OACd,KAAOE,KAAK,CACV,IAAIC,EAAUH,EAAME,CAAC,EACrB,GAAI,OAAOC,GAAY,SAAU,CAC/B,MAAMC,EAAYH,EAAkBE,CAAO,EACvCC,IAAcD,IAEXzC,GAASsC,CAAK,IACjBA,EAAME,CAAC,EAAIE,GAEbD,EAAUC,EAEd,CACAL,EAAII,CAAO,EAAI,EACjB,CACA,OAAOJ,CACT,CAOA,SAASM,GAAWL,EAAO,CACzB,QAAS/C,EAAQ,EAAGA,EAAQ+C,EAAM,OAAQ/C,IAChBqC,GAAqBU,EAAO/C,CAAK,IAEvD+C,EAAM/C,CAAK,EAAI,MAGnB,OAAO+C,CACT,CAOA,SAASM,GAAMC,EAAQ,CACrB,MAAMC,EAAYzC,GAAO,IAAI,EAC7B,SAAW,CAAC0C,EAAUta,CAAK,IAAKkR,GAAQkJ,CAAM,EACpBjB,GAAqBiB,EAAQE,CAAQ,IAEvD,MAAM,QAAQta,CAAK,EACrBqa,EAAUC,CAAQ,EAAIJ,GAAWla,CAAK,EAC7BA,GAAS,OAAOA,GAAU,UAAYA,EAAM,cAAgB,OACrEqa,EAAUC,CAAQ,EAAIH,GAAMna,CAAK,EAEjCqa,EAAUC,CAAQ,EAAIta,GAI5B,OAAOqa,CACT,CAQA,SAASE,GAAaH,EAAQI,EAAM,CAClC,KAAOJ,IAAW,MAAM,CACtB,MAAMK,EAAOhD,GAAyB2C,EAAQI,CAAI,EAClD,GAAIC,EAAM,CACR,GAAIA,EAAK,IACP,OAAOjC,GAAQiC,EAAK,GAAG,EAEzB,GAAI,OAAOA,EAAK,OAAU,WACxB,OAAOjC,GAAQiC,EAAK,KAAK,CAE7B,CACAL,EAAS5C,GAAe4C,CAAM,CAChC,CACA,SAASM,GAAgB,CACvB,OAAO,IACT,CACA,OAAOA,CACT,CAEA,MAAMC,GAASjD,GAAO,CAAC,IAAK,OAAQ,UAAW,UAAW,OAAQ,UAAW,QAAS,QAAS,IAAK,MAAO,MAAO,MAAO,QAAS,aAAc,OAAQ,KAAM,SAAU,SAAU,UAAW,SAAU,OAAQ,OAAQ,MAAO,WAAY,UAAW,OAAQ,WAAY,KAAM,YAAa,MAAO,UAAW,MAAO,SAAU,MAAO,MAAO,KAAM,KAAM,UAAW,KAAM,WAAY,aAAc,SAAU,OAAQ,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,SAAU,SAAU,KAAM,OAAQ,IAAK,MAAO,QAAS,MAAO,MAAO,QAAS,SAAU,KAAM,OAAQ,MAAO,OAAQ,UAAW,OAAQ,WAAY,QAAS,MAAO,OAAQ,KAAM,WAAY,SAAU,SAAU,IAAK,UAAW,MAAO,WAAY,IAAK,KAAM,KAAM,OAAQ,IAAK,OAAQ,SAAU,UAAW,SAAU,SAAU,OAAQ,QAAS,SAAU,SAAU,OAAQ,SAAU,SAAU,QAAS,MAAO,UAAW,MAAO,QAAS,QAAS,KAAM,WAAY,WAAY,QAAS,KAAM,QAAS,OAAQ,KAAM,QAAS,KAAM,IAAK,KAAM,MAAO,QAAS,KAAK,CAAC,EAC3/BkD,GAAQlD,GAAO,CAAC,MAAO,IAAK,WAAY,cAAe,eAAgB,eAAgB,gBAAiB,mBAAoB,SAAU,WAAY,OAAQ,OAAQ,UAAW,eAAgB,cAAe,SAAU,OAAQ,IAAK,QAAS,WAAY,QAAS,QAAS,YAAa,OAAQ,iBAAkB,SAAU,OAAQ,WAAY,QAAS,OAAQ,OAAQ,UAAW,UAAW,WAAY,iBAAkB,OAAQ,OAAQ,QAAS,SAAU,SAAU,OAAQ,WAAY,QAAS,OAAQ,QAAS,OAAQ,OAAO,CAAC,EACvgBmD,GAAanD,GAAO,CAAC,UAAW,gBAAiB,sBAAuB,cAAe,mBAAoB,oBAAqB,oBAAqB,iBAAkB,eAAgB,UAAW,UAAW,UAAW,UAAW,UAAW,iBAAkB,UAAW,UAAW,cAAe,eAAgB,WAAY,eAAgB,qBAAsB,cAAe,SAAU,cAAc,CAAC,EAK/YoD,GAAgBpD,GAAO,CAAC,UAAW,gBAAiB,SAAU,UAAW,YAAa,mBAAoB,iBAAkB,gBAAiB,gBAAiB,gBAAiB,QAAS,YAAa,OAAQ,eAAgB,YAAa,UAAW,gBAAiB,SAAU,MAAO,aAAc,UAAW,KAAK,CAAC,EACtTqD,GAAWrD,GAAO,CAAC,OAAQ,WAAY,SAAU,UAAW,QAAS,SAAU,KAAM,aAAc,gBAAiB,KAAM,KAAM,QAAS,UAAW,WAAY,QAAS,OAAQ,KAAM,SAAU,QAAS,SAAU,OAAQ,OAAQ,UAAW,SAAU,MAAO,QAAS,MAAO,SAAU,aAAc,aAAa,CAAC,EAGtTsD,GAAmBtD,GAAO,CAAC,UAAW,cAAe,aAAc,WAAY,YAAa,UAAW,UAAW,SAAU,SAAU,QAAS,YAAa,aAAc,iBAAkB,cAAe,MAAM,CAAC,EAClNxK,GAAOwK,GAAO,CAAC,OAAO,CAAC,EAEvBuD,GAAOvD,GAAO,CAAC,SAAU,SAAU,QAAS,MAAO,iBAAkB,eAAgB,uBAAwB,WAAY,aAAc,UAAW,SAAU,UAAW,cAAe,cAAe,UAAW,OAAQ,QAAS,QAAS,QAAS,OAAQ,UAAW,WAAY,eAAgB,SAAU,cAAe,WAAY,WAAY,UAAW,MAAO,WAAY,0BAA2B,wBAAyB,WAAY,YAAa,UAAW,eAAgB,cAAe,OAAQ,MAAO,UAAW,SAAU,SAAU,OAAQ,OAAQ,WAAY,KAAM,QAAS,YAAa,YAAa,QAAS,OAAQ,QAAS,OAAQ,OAAQ,UAAW,OAAQ,MAAO,MAAO,YAAa,QAAS,SAAU,MAAO,YAAa,WAAY,QAAS,OAAQ,QAAS,UAAW,aAAc,SAAU,OAAQ,UAAW,OAAQ,UAAW,cAAe,cAAe,UAAW,gBAAiB,sBAAuB,SAAU,UAAW,UAAW,aAAc,WAAY,MAAO,WAAY,MAAO,WAAY,OAAQ,OAAQ,UAAW,aAAc,QAAS,WAAY,QAAS,OAAQ,QAAS,OAAQ,OAAQ,UAAW,QAAS,MAAO,SAAU,OAAQ,QAAS,UAAW,WAAY,QAAS,YAAa,OAAQ,SAAU,SAAU,QAAS,QAAS,OAAQ,QAAS,MAAM,CAAC,EAC3wCwD,GAAMxD,GAAO,CAAC,gBAAiB,aAAc,WAAY,qBAAsB,YAAa,SAAU,gBAAiB,gBAAiB,UAAW,gBAAiB,iBAAkB,QAAS,OAAQ,KAAM,QAAS,OAAQ,gBAAiB,YAAa,YAAa,QAAS,sBAAuB,8BAA+B,gBAAiB,kBAAmB,KAAM,KAAM,IAAK,KAAM,KAAM,kBAAmB,YAAa,UAAW,UAAW,MAAO,WAAY,YAAa,MAAO,WAAY,OAAQ,eAAgB,YAAa,SAAU,cAAe,cAAe,gBAAiB,cAAe,YAAa,mBAAoB,eAAgB,aAAc,eAAgB,cAAe,KAAM,KAAM,KAAM,KAAM,aAAc,WAAY,gBAAiB,oBAAqB,SAAU,OAAQ,KAAM,kBAAmB,KAAM,MAAO,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,UAAW,YAAa,aAAc,WAAY,OAAQ,eAAgB,iBAAkB,eAAgB,mBAAoB,iBAAkB,QAAS,aAAc,aAAc,eAAgB,eAAgB,cAAe,cAAe,mBAAoB,YAAa,MAAO,OAAQ,YAAa,QAAS,SAAU,OAAQ,MAAO,OAAQ,aAAc,SAAU,WAAY,UAAW,QAAS,SAAU,cAAe,SAAU,WAAY,cAAe,OAAQ,aAAc,sBAAuB,mBAAoB,eAAgB,SAAU,gBAAiB,sBAAuB,iBAAkB,IAAK,KAAM,KAAM,SAAU,OAAQ,OAAQ,cAAe,YAAa,UAAW,SAAU,SAAU,QAAS,OAAQ,kBAAmB,QAAS,mBAAoB,mBAAoB,eAAgB,cAAe,eAAgB,cAAe,aAAc,eAAgB,mBAAoB,oBAAqB,iBAAkB,kBAAmB,oBAAqB,iBAAkB,SAAU,eAAgB,QAAS,eAAgB,iBAAkB,WAAY,cAAe,UAAW,UAAW,YAAa,mBAAoB,cAAe,kBAAmB,iBAAkB,aAAc,OAAQ,KAAM,KAAM,UAAW,SAAU,UAAW,aAAc,UAAW,aAAc,gBAAiB,gBAAiB,QAAS,eAAgB,OAAQ,eAAgB,mBAAoB,mBAAoB,IAAK,KAAM,KAAM,QAAS,IAAK,KAAM,KAAM,IAAK,YAAY,CAAC,EACt1EyD,GAASzD,GAAO,CAAC,SAAU,cAAe,QAAS,WAAY,QAAS,eAAgB,cAAe,aAAc,aAAc,QAAS,MAAO,UAAW,eAAgB,WAAY,QAAS,QAAS,SAAU,OAAQ,KAAM,UAAW,SAAU,gBAAiB,SAAU,SAAU,iBAAkB,YAAa,WAAY,cAAe,UAAW,UAAW,gBAAiB,WAAY,WAAY,OAAQ,WAAY,WAAY,aAAc,UAAW,SAAU,SAAU,cAAe,gBAAiB,uBAAwB,YAAa,YAAa,aAAc,WAAY,iBAAkB,iBAAkB,YAAa,UAAW,QAAS,OAAO,CAAC,EAC7pB0D,GAAM1D,GAAO,CAAC,aAAc,SAAU,cAAe,YAAa,aAAa,CAAC,EAGhF2D,GAAgB1D,GAAK,2BAA2B,EAChD2D,GAAW3D,GAAK,uBAAuB,EACvC4D,GAAc5D,GAAK,eAAe,EAClC6D,GAAY7D,GAAK,8BAA8B,EAC/C8D,GAAY9D,GAAK,gBAAgB,EACjC+D,GAAiB/D,GAAK,kGAC5B,EACMgE,GAAoBhE,GAAK,uBAAuB,EAChDiE,GAAkBjE,GAAK,6DAC7B,EACMkE,GAAelE,GAAK,SAAS,EAC7BmE,GAAiBnE,GAAK,0BAA0B,EAEtD,IAAIoE,GAA2B,OAAO,OAAO,CAC3C,UAAW,KACX,UAAWN,GACX,gBAAiBG,GACjB,eAAgBE,GAChB,UAAWN,GACX,aAAcK,GACd,SAAUP,GACV,eAAgBI,GAChB,kBAAmBC,GACnB,cAAeN,GACf,YAAaE,EACf,CAAC,EAID,MAAMS,GAAY,CAChB,QAAS,EAET,KAAM,EAMN,uBAAwB,EACxB,QAAS,EACT,SAAU,CAIZ,EACMC,GAAY,UAAqB,CACrC,OAAO,OAAO,OAAW,IAAc,KAAO,MAChD,EASMC,GAA4B,SAAmCC,EAAcC,EAAmB,CACpG,GAAI,OAAOD,GAAiB,UAAY,OAAOA,EAAa,cAAiB,WAC3E,OAAO,KAKT,IAAIE,EAAS,KACb,MAAMC,EAAY,wBACdF,GAAqBA,EAAkB,aAAaE,CAAS,IAC/DD,EAASD,EAAkB,aAAaE,CAAS,GAEnD,MAAMC,EAAa,aAAeF,EAAS,IAAMA,EAAS,IAC1D,GAAI,CACF,OAAOF,EAAa,aAAaI,EAAY,CAC3C,WAAWtB,EAAM,CACf,OAAOA,CACT,EACA,gBAAgBuB,EAAW,CACzB,OAAOA,CACT,CACN,CAAK,CACH,MAAY,CAIV,eAAQ,KAAK,uBAAyBD,EAAa,wBAAwB,EACpE,IACT,CACF,EACME,GAAkB,UAA2B,CACjD,MAAO,CACL,wBAAyB,CAAA,EACzB,sBAAuB,CAAA,EACvB,uBAAwB,CAAA,EACxB,yBAA0B,CAAA,EAC1B,uBAAwB,CAAA,EACxB,wBAAyB,CAAA,EACzB,sBAAuB,CAAA,EACvB,oBAAqB,CAAA,EACrB,uBAAwB,CAAA,CAC5B,CACA,EACA,SAASC,IAAkB,CACzB,IAAIC,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIV,GAAS,EAC1F,MAAMW,EAAYC,IAAQH,GAAgBG,EAAI,EAG9C,GAFAD,EAAU,QAAU,QACpBA,EAAU,QAAU,CAAA,EAChB,CAACD,GAAU,CAACA,EAAO,UAAYA,EAAO,SAAS,WAAaX,GAAU,UAAY,CAACW,EAAO,QAG5F,OAAAC,EAAU,YAAc,GACjBA,EAET,GAAI,CACF,SAAAE,CACJ,EAAMH,EACJ,MAAMI,EAAmBD,EACnBE,EAAgBD,EAAiB,cACjC,CACJ,iBAAAE,EACA,oBAAAC,EACA,KAAAC,EACA,QAAAC,EACA,WAAAC,EACA,aAAAC,EAAeX,EAAO,cAAgBA,EAAO,gBAC7C,gBAAAY,EACA,UAAAC,EACA,aAAArB,CACJ,EAAMQ,EACEc,EAAmBL,EAAQ,UAC3BM,EAAYnD,GAAakD,EAAkB,WAAW,EACtDE,EAASpD,GAAakD,EAAkB,QAAQ,EAChDG,EAAiBrD,GAAakD,EAAkB,aAAa,EAC7DI,EAAgBtD,GAAakD,EAAkB,YAAY,EAC3DK,EAAgBvD,GAAakD,EAAkB,YAAY,EAOjE,GAAI,OAAOP,GAAwB,WAAY,CAC7C,MAAMa,GAAWjB,EAAS,cAAc,UAAU,EAC9CiB,GAAS,SAAWA,GAAS,QAAQ,gBACvCjB,EAAWiB,GAAS,QAAQ,cAEhC,CACA,IAAIC,EACAC,EAAY,GAChB,KAAM,CACJ,eAAAC,EACA,mBAAAC,EACA,uBAAAC,EACA,qBAAAC,CACJ,EAAMvB,EACE,CACJ,WAAAwB,CACJ,EAAMvB,EACJ,IAAIwB,EAAQ9B,GAAe,EAI3BG,EAAU,YAAc,OAAO1L,IAAY,YAAc,OAAO4M,GAAkB,YAAcI,GAAkBA,EAAe,qBAAuB,OACxJ,KAAM,CACJ,cAAA7C,EACA,SAAAC,EACA,YAAAC,EACA,UAAAC,EACA,UAAAC,EACA,kBAAAE,EACA,gBAAAC,EACA,eAAAE,CACJ,EAAMC,GACJ,GAAI,CACF,eAAgByC,CACpB,EAAMzC,GAMA0C,EAAe,KACnB,MAAMC,EAAuB/E,GAAS,CAAA,EAAI,CAAC,GAAGgB,GAAQ,GAAGC,GAAO,GAAGC,GAAY,GAAGE,GAAU,GAAG7N,EAAI,CAAC,EAEpG,IAAIyR,EAAe,KACnB,MAAMC,EAAuBjF,GAAS,CAAA,EAAI,CAAC,GAAGsB,GAAM,GAAGC,GAAK,GAAGC,GAAQ,GAAGC,EAAG,CAAC,EAO9E,IAAIyD,EAA0B,OAAO,KAAKjH,GAAO,KAAM,CACrD,aAAc,CACZ,SAAU,GACV,aAAc,GACd,WAAY,GACZ,MAAO,IACb,EACI,mBAAoB,CAClB,SAAU,GACV,aAAc,GACd,WAAY,GACZ,MAAO,IACb,EACI,+BAAgC,CAC9B,SAAU,GACV,aAAc,GACd,WAAY,GACZ,MAAO,EACb,CACA,CAAG,CAAC,EAEEkH,EAAc,KAEdC,GAAc,KAElB,MAAMC,GAAyB,OAAO,KAAKpH,GAAO,KAAM,CACtD,SAAU,CACR,SAAU,GACV,aAAc,GACd,WAAY,GACZ,MAAO,IACb,EACI,eAAgB,CACd,SAAU,GACV,aAAc,GACd,WAAY,GACZ,MAAO,IACb,CACA,CAAG,CAAC,EAEF,IAAIqH,GAAkB,GAElBC,EAAkB,GAElBC,GAA0B,GAG1BC,GAA2B,GAI3BC,GAAqB,GAIrBC,GAAe,GAEfC,GAAiB,GAEjBC,GAAa,GAGbC,GAAa,GAKbC,GAAa,GAGbC,GAAsB,GAGtBC,GAAsB,GAItBC,EAAe,GAcfC,GAAuB,GAC3B,MAAMC,GAA8B,gBAEpC,IAAIC,GAAe,GAGfC,GAAW,GAEXC,GAAe,CAAA,EAEfC,GAAkB,KACtB,MAAMC,GAA0BzG,GAAS,CAAA,EAAI,CAAC,iBAAkB,QAAS,WAAY,OAAQ,gBAAiB,OAAQ,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,QAAS,UAAW,WAAY,WAAY,YAAa,SAAU,QAAS,MAAO,WAAY,QAAS,QAAS,QAAS,KAAK,CAAC,EAEhS,IAAI0G,GAAgB,KACpB,MAAMC,GAAwB3G,GAAS,CAAA,EAAI,CAAC,QAAS,QAAS,MAAO,SAAU,QAAS,OAAO,CAAC,EAEhG,IAAI4G,EAAsB,KAC1B,MAAMC,GAA8B7G,GAAS,GAAI,CAAC,MAAO,QAAS,MAAO,KAAM,QAAS,OAAQ,UAAW,cAAe,OAAQ,UAAW,QAAS,QAAS,QAAS,OAAO,CAAC,EAC1K8G,GAAmB,qCACnBC,GAAgB,6BAChBC,GAAiB,+BAEvB,IAAIC,GAAYD,GACZE,GAAiB,GAEjBC,GAAqB,KACzB,MAAMC,GAA6BpH,GAAS,GAAI,CAAC8G,GAAkBC,GAAeC,EAAc,EAAG7H,EAAc,EACjH,IAAIkI,GAAiCrH,GAAS,CAAA,EAAI,CAAC,KAAM,KAAM,KAAM,KAAM,OAAO,CAAC,EAC/EsH,GAA0BtH,GAAS,GAAI,CAAC,gBAAgB,CAAC,EAK7D,MAAMuH,GAA+BvH,GAAS,CAAA,EAAI,CAAC,QAAS,QAAS,OAAQ,IAAK,QAAQ,CAAC,EAE3F,IAAIwH,GAAoB,KACxB,MAAMC,GAA+B,CAAC,wBAAyB,WAAW,EACpEC,GAA4B,YAClC,IAAIvH,GAAoB,KAEpBwH,GAAS,KAGb,MAAMC,GAAczE,EAAS,cAAc,MAAM,EAC3C0E,GAAoB,SAA2BC,EAAW,CAC9D,OAAOA,aAAqB,QAAUA,aAAqB,QAC7D,EAOMC,GAAe,UAAwB,CAC3C,IAAIC,EAAM,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAA,EAC9E,GAAI,EAAAL,IAAUA,KAAWK,GAoIzB,KAhII,CAACA,GAAO,OAAOA,GAAQ,YACzBA,EAAM,CAAA,GAGRA,EAAMxH,GAAMwH,CAAG,EACfR,GAEAC,GAA6B,QAAQO,EAAI,iBAAiB,IAAM,GAAKN,GAA4BM,EAAI,kBAErG7H,GAAoBqH,KAAsB,wBAA0BrI,GAAiBD,GAErF4F,EAAetF,GAAqBwI,EAAK,cAAc,EAAIhI,GAAS,CAAA,EAAIgI,EAAI,aAAc7H,EAAiB,EAAI4E,EAC/GC,EAAexF,GAAqBwI,EAAK,cAAc,EAAIhI,GAAS,CAAA,EAAIgI,EAAI,aAAc7H,EAAiB,EAAI8E,EAC/GkC,GAAqB3H,GAAqBwI,EAAK,oBAAoB,EAAIhI,GAAS,CAAA,EAAIgI,EAAI,mBAAoB7I,EAAc,EAAIiI,GAC9HR,EAAsBpH,GAAqBwI,EAAK,mBAAmB,EAAIhI,GAASQ,GAAMqG,EAA2B,EAAGmB,EAAI,kBAAmB7H,EAAiB,EAAI0G,GAChKH,GAAgBlH,GAAqBwI,EAAK,mBAAmB,EAAIhI,GAASQ,GAAMmG,EAAqB,EAAGqB,EAAI,kBAAmB7H,EAAiB,EAAIwG,GACpJH,GAAkBhH,GAAqBwI,EAAK,iBAAiB,EAAIhI,GAAS,CAAA,EAAIgI,EAAI,gBAAiB7H,EAAiB,EAAIsG,GACxHtB,EAAc3F,GAAqBwI,EAAK,aAAa,EAAIhI,GAAS,GAAIgI,EAAI,YAAa7H,EAAiB,EAAIK,GAAM,CAAA,CAAE,EACpH4E,GAAc5F,GAAqBwI,EAAK,aAAa,EAAIhI,GAAS,GAAIgI,EAAI,YAAa7H,EAAiB,EAAIK,GAAM,CAAA,CAAE,EACpH+F,GAAe/G,GAAqBwI,EAAK,cAAc,EAAIA,EAAI,aAAe,GAC9E1C,GAAkB0C,EAAI,kBAAoB,GAC1CzC,EAAkByC,EAAI,kBAAoB,GAC1CxC,GAA0BwC,EAAI,yBAA2B,GACzDvC,GAA2BuC,EAAI,2BAA6B,GAC5DtC,GAAqBsC,EAAI,oBAAsB,GAC/CrC,GAAeqC,EAAI,eAAiB,GACpCpC,GAAiBoC,EAAI,gBAAkB,GACvCjC,GAAaiC,EAAI,YAAc,GAC/BhC,GAAsBgC,EAAI,qBAAuB,GACjD/B,GAAsB+B,EAAI,qBAAuB,GACjDlC,GAAakC,EAAI,YAAc,GAC/B9B,EAAe8B,EAAI,eAAiB,GACpC7B,GAAuB6B,EAAI,sBAAwB,GACnD3B,GAAe2B,EAAI,eAAiB,GACpC1B,GAAW0B,EAAI,UAAY,GAC3BnD,EAAmBmD,EAAI,oBAAsBjG,GAC7CkF,GAAYe,EAAI,WAAahB,GAC7BK,GAAiCW,EAAI,gCAAkCX,GACvEC,GAA0BU,EAAI,yBAA2BV,GACzDpC,EAA0B8C,EAAI,yBAA2B,CAAA,EACrDA,EAAI,yBAA2BH,GAAkBG,EAAI,wBAAwB,YAAY,IAC3F9C,EAAwB,aAAe8C,EAAI,wBAAwB,cAEjEA,EAAI,yBAA2BH,GAAkBG,EAAI,wBAAwB,kBAAkB,IACjG9C,EAAwB,mBAAqB8C,EAAI,wBAAwB,oBAEvEA,EAAI,yBAA2B,OAAOA,EAAI,wBAAwB,gCAAmC,YACvG9C,EAAwB,+BAAiC8C,EAAI,wBAAwB,gCAEnFtC,KACFH,EAAkB,IAEhBS,KACFD,GAAa,IAGXQ,KACFzB,EAAe9E,GAAS,CAAA,EAAIzM,EAAI,EAChCyR,EAAe,CAAA,EACXuB,GAAa,OAAS,KACxBvG,GAAS8E,EAAc9D,EAAM,EAC7BhB,GAASgF,EAAc1D,EAAI,GAEzBiF,GAAa,MAAQ,KACvBvG,GAAS8E,EAAc7D,EAAK,EAC5BjB,GAASgF,EAAczD,EAAG,EAC1BvB,GAASgF,EAAcvD,EAAG,GAExB8E,GAAa,aAAe,KAC9BvG,GAAS8E,EAAc5D,EAAU,EACjClB,GAASgF,EAAczD,EAAG,EAC1BvB,GAASgF,EAAcvD,EAAG,GAExB8E,GAAa,SAAW,KAC1BvG,GAAS8E,EAAc1D,EAAQ,EAC/BpB,GAASgF,EAAcxD,EAAM,EAC7BxB,GAASgF,EAAcvD,EAAG,IAI1BuG,EAAI,WACF,OAAOA,EAAI,UAAa,WAC1B3C,GAAuB,SAAW2C,EAAI,UAElClD,IAAiBC,IACnBD,EAAetE,GAAMsE,CAAY,GAEnC9E,GAAS8E,EAAckD,EAAI,SAAU7H,EAAiB,IAGtD6H,EAAI,WACF,OAAOA,EAAI,UAAa,WAC1B3C,GAAuB,eAAiB2C,EAAI,UAExChD,IAAiBC,IACnBD,EAAexE,GAAMwE,CAAY,GAEnChF,GAASgF,EAAcgD,EAAI,SAAU7H,EAAiB,IAGtD6H,EAAI,mBACNhI,GAAS4G,EAAqBoB,EAAI,kBAAmB7H,EAAiB,EAEpE6H,EAAI,kBACFxB,KAAoBC,KACtBD,GAAkBhG,GAAMgG,EAAe,GAEzCxG,GAASwG,GAAiBwB,EAAI,gBAAiB7H,EAAiB,GAE9D6H,EAAI,sBACFxB,KAAoBC,KACtBD,GAAkBhG,GAAMgG,EAAe,GAEzCxG,GAASwG,GAAiBwB,EAAI,oBAAqB7H,EAAiB,GAGlEkG,KACFvB,EAAa,OAAO,EAAI,IAGtBc,IACF5F,GAAS8E,EAAc,CAAC,OAAQ,OAAQ,MAAM,CAAC,EAG7CA,EAAa,QACf9E,GAAS8E,EAAc,CAAC,OAAO,CAAC,EAChC,OAAOK,EAAY,OAEjB6C,EAAI,qBAAsB,CAC5B,GAAI,OAAOA,EAAI,qBAAqB,YAAe,WACjD,MAAMtI,GAAgB,6EAA6E,EAErG,GAAI,OAAOsI,EAAI,qBAAqB,iBAAoB,WACtD,MAAMtI,GAAgB,kFAAkF,EAG1G2E,EAAqB2D,EAAI,qBAEzB1D,EAAYD,EAAmB,WAAW,EAAE,CAC9C,MAEMA,IAAuB,SACzBA,EAAqB9B,GAA0BC,EAAca,CAAa,GAGxEgB,IAAuB,MAAQ,OAAOC,GAAc,WACtDA,EAAYD,EAAmB,WAAW,EAAE,GAK5CtG,IACFA,GAAOiK,CAAG,EAEZL,GAASK,EACX,EAIMC,GAAejI,GAAS,GAAI,CAAC,GAAGiB,GAAO,GAAGC,GAAY,GAAGC,EAAa,CAAC,EACvE+G,GAAkBlI,GAAS,CAAA,EAAI,CAAC,GAAGoB,GAAU,GAAGC,EAAgB,CAAC,EAOjE8G,GAAuB,SAA8B9H,EAAS,CAClE,IAAI+H,EAASjE,EAAc9D,CAAO,GAG9B,CAAC+H,GAAU,CAACA,EAAO,WACrBA,EAAS,CACP,aAAcnB,GACd,QAAS,UACjB,GAEI,MAAMoB,GAAUnJ,GAAkBmB,EAAQ,OAAO,EAC3CiI,GAAgBpJ,GAAkBkJ,EAAO,OAAO,EACtD,OAAKjB,GAAmB9G,EAAQ,YAAY,EAGxCA,EAAQ,eAAiB0G,GAIvBqB,EAAO,eAAiBpB,GACnBqB,KAAY,MAKjBD,EAAO,eAAiBtB,GACnBuB,KAAY,QAAUC,KAAkB,kBAAoBjB,GAA+BiB,EAAa,GAI1G,EAAQL,GAAaI,EAAO,EAEjChI,EAAQ,eAAiByG,GAIvBsB,EAAO,eAAiBpB,GACnBqB,KAAY,OAIjBD,EAAO,eAAiBrB,GACnBsB,KAAY,QAAUf,GAAwBgB,EAAa,EAI7D,EAAQJ,GAAgBG,EAAO,EAEpChI,EAAQ,eAAiB2G,GAIvBoB,EAAO,eAAiBrB,IAAiB,CAACO,GAAwBgB,EAAa,GAG/EF,EAAO,eAAiBtB,IAAoB,CAACO,GAA+BiB,EAAa,EACpF,GAIF,CAACJ,GAAgBG,EAAO,IAAMd,GAA6Bc,EAAO,GAAK,CAACJ,GAAaI,EAAO,GAGjG,GAAAb,KAAsB,yBAA2BL,GAAmB9G,EAAQ,YAAY,GAlDnF,EA0DX,EAMMkI,GAAe,SAAsBC,EAAM,CAC/CxJ,GAAUiE,EAAU,QAAS,CAC3B,QAASuF,CACf,CAAK,EACD,GAAI,CAEFrE,EAAcqE,CAAI,EAAE,YAAYA,CAAI,CACtC,MAAY,CACVxE,EAAOwE,CAAI,CACb,CACF,EAOMC,GAAmB,SAA0Brf,EAAMiX,EAAS,CAChE,GAAI,CACFrB,GAAUiE,EAAU,QAAS,CAC3B,UAAW5C,EAAQ,iBAAiBjX,CAAI,EACxC,KAAMiX,CACd,CAAO,CACH,MAAY,CACVrB,GAAUiE,EAAU,QAAS,CAC3B,UAAW,KACX,KAAM5C,CACd,CAAO,CACH,CAGA,GAFAA,EAAQ,gBAAgBjX,CAAI,EAExBA,IAAS,KACX,GAAI2c,IAAcC,GAChB,GAAI,CACFuC,GAAalI,CAAO,CACtB,MAAY,CAAC,KAEb,IAAI,CACFA,EAAQ,aAAajX,EAAM,EAAE,CAC/B,MAAY,CAAC,CAGnB,EAOMsf,GAAgB,SAAuBC,EAAO,CAElD,IAAIC,EAAM,KACNC,GAAoB,KACxB,GAAI/C,GACF6C,EAAQ,oBAAsBA,MACzB,CAEL,MAAMG,GAAU1J,GAAYuJ,EAAO,aAAa,EAChDE,GAAoBC,IAAWA,GAAQ,CAAC,CAC1C,CACItB,KAAsB,yBAA2BP,KAAcD,KAEjE2B,EAAQ,iEAAmEA,EAAQ,kBAErF,MAAMI,GAAe1E,EAAqBA,EAAmB,WAAWsE,CAAK,EAAIA,EAKjF,GAAI1B,KAAcD,GAChB,GAAI,CACF4B,EAAM,IAAI/E,EAAS,EAAG,gBAAgBkF,GAAcvB,EAAiB,CACvE,MAAY,CAAC,CAGf,GAAI,CAACoB,GAAO,CAACA,EAAI,gBAAiB,CAChCA,EAAMrE,EAAe,eAAe0C,GAAW,WAAY,IAAI,EAC/D,GAAI,CACF2B,EAAI,gBAAgB,UAAY1B,GAAiB5C,EAAYyE,EAC/D,MAAY,CAEZ,CACF,CACA,MAAMC,GAAOJ,EAAI,MAAQA,EAAI,gBAK7B,OAJID,GAASE,IACXG,GAAK,aAAa7F,EAAS,eAAe0F,EAAiB,EAAGG,GAAK,WAAW,CAAC,GAAK,IAAI,EAGtF/B,KAAcD,GACTtC,EAAqB,KAAKkE,EAAKhD,GAAiB,OAAS,MAAM,EAAE,CAAC,EAEpEA,GAAiBgD,EAAI,gBAAkBI,EAChD,EAOMC,GAAsB,SAA6B/F,EAAM,CAC7D,OAAOsB,EAAmB,KAAKtB,EAAK,eAAiBA,EAAMA,EAE3DQ,EAAW,aAAeA,EAAW,aAAeA,EAAW,UAAYA,EAAW,4BAA8BA,EAAW,mBAAoB,IAAI,CACzJ,EAOMwF,GAAe,SAAsB7I,EAAS,CAClD,OAAOA,aAAmBuD,IAAoB,OAAOvD,EAAQ,UAAa,UAAY,OAAOA,EAAQ,aAAgB,UAAY,OAAOA,EAAQ,aAAgB,YAAc,EAAEA,EAAQ,sBAAsBsD,IAAiB,OAAOtD,EAAQ,iBAAoB,YAAc,OAAOA,EAAQ,cAAiB,YAAc,OAAOA,EAAQ,cAAiB,UAAY,OAAOA,EAAQ,cAAiB,YAAc,OAAOA,EAAQ,eAAkB,WAC3b,EAOM8I,GAAU,SAAiB9iB,EAAO,CACtC,OAAO,OAAOmd,GAAS,YAAcnd,aAAiBmd,CACxD,EACA,SAAS4F,GAAcxE,GAAOyE,EAAaC,EAAM,CAC/C1K,GAAagG,GAAO2E,IAAQ,CAC1BA,GAAK,KAAKtG,EAAWoG,EAAaC,EAAM3B,EAAM,CAChD,CAAC,CACH,CAUA,MAAM6B,GAAoB,SAA2BH,EAAa,CAChE,IAAII,EAAU,KAId,GAFAL,GAAcxE,EAAM,uBAAwByE,EAAa,IAAI,EAEzDH,GAAaG,CAAW,EAC1B,OAAAd,GAAac,CAAW,EACjB,GAGT,MAAMhB,GAAUlI,GAAkBkJ,EAAY,QAAQ,EAiBtD,GAfAD,GAAcxE,EAAM,oBAAqByE,EAAa,CACpD,QAAAhB,GACA,YAAavD,CACnB,CAAK,EAEGa,IAAgB0D,EAAY,cAAa,GAAM,CAACF,GAAQE,EAAY,iBAAiB,GAAK5J,GAAW,WAAY4J,EAAY,SAAS,GAAK5J,GAAW,WAAY4J,EAAY,WAAW,GAKzLA,EAAY,WAAahH,GAAU,wBAKnCsD,IAAgB0D,EAAY,WAAahH,GAAU,SAAW5C,GAAW,UAAW4J,EAAY,IAAI,EACtG,OAAAd,GAAac,CAAW,EACjB,GAGT,GAAI,EAAEhE,GAAuB,oBAAoB,UAAYA,GAAuB,SAASgD,EAAO,KAAO,CAACvD,EAAauD,EAAO,GAAKlD,EAAYkD,EAAO,GAAI,CAE1J,GAAI,CAAClD,EAAYkD,EAAO,GAAKqB,GAAsBrB,EAAO,IACpDnD,EAAwB,wBAAwB,QAAUzF,GAAWyF,EAAwB,aAAcmD,EAAO,GAGlHnD,EAAwB,wBAAwB,UAAYA,EAAwB,aAAamD,EAAO,GAC1G,MAAO,GAIX,GAAIhC,IAAgB,CAACG,GAAgB6B,EAAO,EAAG,CAC7C,MAAMsB,GAAaxF,EAAckF,CAAW,GAAKA,EAAY,WACvDO,GAAa1F,EAAcmF,CAAW,GAAKA,EAAY,WAC7D,GAAIO,IAAcD,GAAY,CAC5B,MAAME,GAAaD,GAAW,OAC9B,QAASE,GAAID,GAAa,EAAGC,IAAK,EAAG,EAAEA,GAAG,CACxC,MAAMC,GAAahG,EAAU6F,GAAWE,EAAC,EAAG,EAAI,EAChDC,GAAW,gBAAkBV,EAAY,gBAAkB,GAAK,EAChEM,GAAW,aAAaI,GAAY9F,EAAeoF,CAAW,CAAC,CACjE,CACF,CACF,CACA,OAAAd,GAAac,CAAW,EACjB,EACT,CAOA,OALIA,aAAuB5F,GAAW,CAAC0E,GAAqBkB,CAAW,IAKlEhB,KAAY,YAAcA,KAAY,WAAaA,KAAY,aAAe5I,GAAW,8BAA+B4J,EAAY,SAAS,GAChJd,GAAac,CAAW,EACjB,KAGL3D,IAAsB2D,EAAY,WAAahH,GAAU,OAE3DoH,EAAUJ,EAAY,YACtBzK,GAAa,CAAC8C,EAAeC,EAAUC,CAAW,EAAGoI,IAAQ,CAC3DP,EAAUpK,GAAcoK,EAASO,GAAM,GAAG,CAC5C,CAAC,EACGX,EAAY,cAAgBI,IAC9BzK,GAAUiE,EAAU,QAAS,CAC3B,QAASoG,EAAY,UAAS,CACxC,CAAS,EACDA,EAAY,YAAcI,IAI9BL,GAAcxE,EAAM,sBAAuByE,EAAa,IAAI,EACrD,GACT,EAUMY,GAAoB,SAA2BC,EAAOC,EAAQ9jB,GAAO,CAEzE,GAAI6f,IAAiBiE,IAAW,MAAQA,IAAW,UAAY9jB,MAAS8c,GAAY9c,MAASuhB,IAC3F,MAAO,GAMT,GAAI,EAAArC,GAAmB,CAACH,GAAY+E,CAAM,GAAK1K,GAAWoC,EAAWsI,CAAM,IAAU,GAAI,EAAA7E,IAAmB7F,GAAWqC,EAAWqI,CAAM,IAAU,GAAI,EAAA9E,GAAuB,0BAA0B,UAAYA,GAAuB,eAAe8E,EAAQD,CAAK,IAAU,GAAI,CAAClF,EAAamF,CAAM,GAAK/E,GAAY+E,CAAM,GAC7T,GAIA,EAAAT,GAAsBQ,CAAK,IAAMhF,EAAwB,wBAAwB,QAAUzF,GAAWyF,EAAwB,aAAcgF,CAAK,GAAKhF,EAAwB,wBAAwB,UAAYA,EAAwB,aAAagF,CAAK,KAAOhF,EAAwB,8BAA8B,QAAUzF,GAAWyF,EAAwB,mBAAoBiF,CAAM,GAAKjF,EAAwB,8BAA8B,UAAYA,EAAwB,mBAAmBiF,EAAQD,CAAK,IAG/fC,IAAW,MAAQjF,EAAwB,iCAAmCA,EAAwB,wBAAwB,QAAUzF,GAAWyF,EAAwB,aAAc7e,EAAK,GAAK6e,EAAwB,wBAAwB,UAAYA,EAAwB,aAAa7e,EAAK,IACvS,MAAO,WAGA,CAAAugB,EAAoBuD,CAAM,GAAU,GAAI,CAAA1K,GAAWoF,EAAkBxF,GAAchZ,GAAO4b,EAAiB,EAAE,CAAC,GAAU,GAAK,GAAAkI,IAAW,OAASA,IAAW,cAAgBA,IAAW,SAAWD,IAAU,UAAY5K,GAAcjZ,GAAO,OAAO,IAAM,GAAKqgB,GAAcwD,CAAK,IAAU,GAAI,EAAA1E,IAA2B,CAAC/F,GAAWuC,EAAmB3C,GAAchZ,GAAO4b,EAAiB,EAAE,CAAC,IAAU,GAAI5b,GAC1Z,MAAO,SAET,MAAO,EACT,EASMqjB,GAAwB,SAA+BrB,EAAS,CACpE,OAAOA,IAAY,kBAAoBjJ,GAAYiJ,EAASlG,CAAc,CAC5E,EAWMiI,GAAsB,SAA6Bf,EAAa,CAEpED,GAAcxE,EAAM,yBAA0ByE,EAAa,IAAI,EAC/D,KAAM,CACJ,WAAAgB,CACN,EAAQhB,EAEJ,GAAI,CAACgB,GAAcnB,GAAaG,CAAW,EACzC,OAEF,MAAMiB,GAAY,CAChB,SAAU,GACV,UAAW,GACX,SAAU,GACV,kBAAmBtF,EACnB,cAAe,MACrB,EACI,IAAI5E,GAAIiK,EAAW,OAEnB,KAAOjK,MAAK,CACV,MAAMmK,GAAOF,EAAWjK,EAAC,EACnB,CACJ,KAAAhX,GACA,aAAAohB,GACA,MAAOC,EACf,EAAUF,GACEJ,GAAShK,GAAkB/W,EAAI,EAC/BshB,GAAYD,GAClB,IAAIpkB,GAAQ+C,KAAS,QAAUshB,GAAYnL,GAAWmL,EAAS,EAkB/D,GAhBAJ,GAAU,SAAWH,GACrBG,GAAU,UAAYjkB,GACtBikB,GAAU,SAAW,GACrBA,GAAU,cAAgB,OAC1BlB,GAAcxE,EAAM,sBAAuByE,EAAaiB,EAAS,EACjEjkB,GAAQikB,GAAU,UAIdnE,KAAyBgE,KAAW,MAAQA,KAAW,UAEzD1B,GAAiBrf,GAAMigB,CAAW,EAElChjB,GAAQ+f,GAA8B/f,IAGpCsf,IAAgBlG,GAAW,yCAA0CpZ,EAAK,EAAG,CAC/EoiB,GAAiBrf,GAAMigB,CAAW,EAClC,QACF,CAEA,GAAIc,KAAW,iBAAmB/K,GAAY/Y,GAAO,MAAM,EAAG,CAC5DoiB,GAAiBrf,GAAMigB,CAAW,EAClC,QACF,CAEA,GAAIiB,GAAU,cACZ,SAGF,GAAI,CAACA,GAAU,SAAU,CACvB7B,GAAiBrf,GAAMigB,CAAW,EAClC,QACF,CAEA,GAAI,CAAC5D,IAA4BhG,GAAW,OAAQpZ,EAAK,EAAG,CAC1DoiB,GAAiBrf,GAAMigB,CAAW,EAClC,QACF,CAEI3D,IACF9G,GAAa,CAAC8C,EAAeC,EAAUC,CAAW,EAAGoI,IAAQ,CAC3D3jB,GAAQgZ,GAAchZ,GAAO2jB,GAAM,GAAG,CACxC,CAAC,EAGH,MAAME,GAAQ/J,GAAkBkJ,EAAY,QAAQ,EACpD,GAAI,CAACY,GAAkBC,GAAOC,GAAQ9jB,EAAK,EAAG,CAC5CoiB,GAAiBrf,GAAMigB,CAAW,EAClC,QACF,CAEA,GAAIhF,GAAsB,OAAO7B,GAAiB,UAAY,OAAOA,EAAa,kBAAqB,YACjG,CAAAgI,GACF,OAAQhI,EAAa,iBAAiB0H,GAAOC,EAAM,EAAC,CAClD,IAAK,cACH,CACE9jB,GAAQge,EAAmB,WAAWhe,EAAK,EAC3C,KACF,CACF,IAAK,mBACH,CACEA,GAAQge,EAAmB,gBAAgBhe,EAAK,EAChD,KACF,CACd,CAIM,GAAIA,KAAUqkB,GACZ,GAAI,CACEF,GACFnB,EAAY,eAAemB,GAAcphB,GAAM/C,EAAK,EAGpDgjB,EAAY,aAAajgB,GAAM/C,EAAK,EAElC6iB,GAAaG,CAAW,EAC1Bd,GAAac,CAAW,EAExBtK,GAASkE,EAAU,OAAO,CAE9B,MAAY,CACVwF,GAAiBrf,GAAMigB,CAAW,CACpC,CAEJ,CAEAD,GAAcxE,EAAM,wBAAyByE,EAAa,IAAI,CAChE,EAMMsB,GAAqB,SAASA,GAAmBC,EAAU,CAC/D,IAAIC,EAAa,KACjB,MAAMC,GAAiB7B,GAAoB2B,CAAQ,EAGnD,IADAxB,GAAcxE,EAAM,wBAAyBgG,EAAU,IAAI,EACpDC,EAAaC,GAAe,YAEjC1B,GAAcxE,EAAM,uBAAwBiG,EAAY,IAAI,EAE5DrB,GAAkBqB,CAAU,EAE5BT,GAAoBS,CAAU,EAE1BA,EAAW,mBAAmBvH,GAChCqH,GAAmBE,EAAW,OAAO,EAIzCzB,GAAcxE,EAAM,uBAAwBgG,EAAU,IAAI,CAC5D,EAEA,OAAA3H,EAAU,SAAW,SAAU0F,GAAO,CACpC,IAAIX,EAAM,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAA,EAC1EgB,EAAO,KACP+B,GAAe,KACf1B,GAAc,KACd2B,GAAa,KASjB,GALA9D,GAAiB,CAACyB,GACdzB,KACFyB,GAAQ,SAGN,OAAOA,IAAU,UAAY,CAACQ,GAAQR,EAAK,EAC7C,GAAI,OAAOA,GAAM,UAAa,YAE5B,GADAA,GAAQA,GAAM,SAAQ,EAClB,OAAOA,IAAU,SACnB,MAAMjJ,GAAgB,iCAAiC,MAGzD,OAAMA,GAAgB,4BAA4B,EAItD,GAAI,CAACuD,EAAU,YACb,OAAO0F,GAYT,GATK9C,IACHkC,GAAaC,CAAG,EAGlB/E,EAAU,QAAU,CAAA,EAEhB,OAAO0F,IAAU,WACnBrC,GAAW,IAETA,IAEF,GAAIqC,GAAM,SAAU,CAClB,MAAMN,GAAUlI,GAAkBwI,GAAM,QAAQ,EAChD,GAAI,CAAC7D,EAAauD,EAAO,GAAKlD,EAAYkD,EAAO,EAC/C,MAAM3I,GAAgB,yDAAyD,CAEnF,UACSiJ,cAAiBnF,EAG1BwF,EAAON,GAAc,SAAS,EAC9BqC,GAAe/B,EAAK,cAAc,WAAWL,GAAO,EAAI,EACpDoC,GAAa,WAAa1I,GAAU,SAAW0I,GAAa,WAAa,QAGlEA,GAAa,WAAa,OADnC/B,EAAO+B,GAKP/B,EAAK,YAAY+B,EAAY,MAE1B,CAEL,GAAI,CAAChF,IAAc,CAACL,IAAsB,CAACE,IAE3C+C,GAAM,QAAQ,GAAG,IAAM,GACrB,OAAOtE,GAAsB4B,GAAsB5B,EAAmB,WAAWsE,EAAK,EAAIA,GAK5F,GAFAK,EAAON,GAAcC,EAAK,EAEtB,CAACK,EACH,OAAOjD,GAAa,KAAOE,GAAsB3B,EAAY,EAEjE,CAEI0E,GAAQlD,IACVyC,GAAaS,EAAK,UAAU,EAG9B,MAAMiC,GAAehC,GAAoB3C,GAAWqC,GAAQK,CAAI,EAEhE,KAAOK,GAAc4B,GAAa,YAEhCzB,GAAkBH,EAAW,EAE7Be,GAAoBf,EAAW,EAE3BA,GAAY,mBAAmB/F,GACjCqH,GAAmBtB,GAAY,OAAO,EAI1C,GAAI/C,GACF,OAAOqC,GAGT,GAAI5C,GAAY,CACd,GAAIC,GAEF,IADAgF,GAAavG,EAAuB,KAAKuE,EAAK,aAAa,EACpDA,EAAK,YAEVgC,GAAW,YAAYhC,EAAK,UAAU,OAGxCgC,GAAahC,EAEf,OAAIhE,EAAa,YAAcA,EAAa,kBAQ1CgG,GAAarG,EAAW,KAAKvB,EAAkB4H,GAAY,EAAI,GAE1DA,EACT,CACA,IAAIE,GAAiBtF,GAAiBoD,EAAK,UAAYA,EAAK,UAE5D,OAAIpD,IAAkBd,EAAa,UAAU,GAAKkE,EAAK,eAAiBA,EAAK,cAAc,SAAWA,EAAK,cAAc,QAAQ,MAAQvJ,GAAWyC,GAAc8G,EAAK,cAAc,QAAQ,IAAI,IAC/LkC,GAAiB,aAAelC,EAAK,cAAc,QAAQ,KAAO;AAAA,EAAQkC,IAGxExF,IACF9G,GAAa,CAAC8C,EAAeC,EAAUC,CAAW,EAAGoI,IAAQ,CAC3DkB,GAAiB7L,GAAc6L,GAAgBlB,GAAM,GAAG,CAC1D,CAAC,EAEI3F,GAAsB4B,GAAsB5B,EAAmB,WAAW6G,EAAc,EAAIA,EACrG,EACAjI,EAAU,UAAY,UAAY,CAChC,IAAI+E,GAAM,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAA,EAC9ED,GAAaC,EAAG,EAChBnC,GAAa,EACf,EACA5C,EAAU,YAAc,UAAY,CAClC0E,GAAS,KACT9B,GAAa,EACf,EACA5C,EAAU,iBAAmB,SAAUkI,GAAKZ,EAAMlkB,EAAO,CAElDshB,IACHI,GAAa,CAAA,CAAE,EAEjB,MAAMmC,GAAQ/J,GAAkBgL,EAAG,EAC7BhB,GAAShK,GAAkBoK,CAAI,EACrC,OAAON,GAAkBC,GAAOC,GAAQ9jB,CAAK,CAC/C,EACA4c,EAAU,QAAU,SAAUmI,GAAYC,EAAc,CAClD,OAAOA,GAAiB,YAG5BrM,GAAU4F,EAAMwG,EAAU,EAAGC,CAAY,CAC3C,EACApI,EAAU,WAAa,SAAUmI,GAAYC,EAAc,CACzD,GAAIA,IAAiB,OAAW,CAC9B,MAAMlO,EAAQ2B,GAAiB8F,EAAMwG,EAAU,EAAGC,CAAY,EAC9D,OAAOlO,IAAU,GAAK,OAAY8B,GAAY2F,EAAMwG,EAAU,EAAGjO,EAAO,CAAC,EAAE,CAAC,CAC9E,CACA,OAAO4B,GAAS6F,EAAMwG,EAAU,CAAC,CACnC,EACAnI,EAAU,YAAc,SAAUmI,GAAY,CAC5CxG,EAAMwG,EAAU,EAAI,CAAA,CACtB,EACAnI,EAAU,eAAiB,UAAY,CACrC2B,EAAQ9B,GAAe,CACzB,EACOG,CACT,CACA,IAAIqI,GAASvI,GAAe,ECv0C5B,MAAMwI,GAAuB,IAAc,CACzC,MAAMC,EAAO,IAAc,CACzB,MAAMC,EAAS,OAAe,QAAQ,OAAO,MAAA,EAC7C,OAAQA,GAASA,EAAM,mBAAsB,KAC/C,EACM,CAACC,EAAUC,CAAW,EAAI1kB,EAAAA,SAAiBukB,CAAI,EAErDtkB,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAM0kB,EAAa,OAAe,QAAQ,OAAO,UAGjD,GADAD,EAAYH,GAAM,EACd,OAAOI,GAAc,WAAY,OACrC,MAAMC,EAAcD,EAAWH,GAA+B,CAC5DE,EAAaF,GAASA,EAAM,mBAAsB,KAAK,CACzD,CAAC,EACD,OAAO,OAAOI,GAAgB,WAAaA,EAAc,MAC3D,EAAG,CAAA,CAAE,EAEEH,CACT,EAGMrT,GAAYC,GAAiB,CAChC,OAAe,QAAQ,WAAW,CACjC,QAAS,WACT,OAAQ,CAAE,KAAAA,CAAA,CAAK,CAChB,CACH,EAqGMwT,GAAgBC,GAAkD,CACtE,MAAMC,EAAU,KAAK,MAAMD,EAAM,CAAC,EAAI,EACtC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,CAAC,EAAE,IAAKE,GACtBD,GAAWC,EAAY,OACvBD,GAAWC,EAAM,GAAY,OAC1B,OACR,CACH,EAEMC,GAA0C,CAAC,CAC/C,QAAAC,EACA,QAAAC,EACA,SAAAnT,EAAW,QACX,UAAA3T,EAAY,GACZ,GAAAgN,EACA,YAAA3D,CACF,IAAM,CACJ,MAAM0d,EAAoBd,GAAA,EAMpBe,EAAYC,GAA8D,CAC9E,MAAMC,EAAqB,kBAAkBD,CAAK,GAC5CE,EAAoBN,EAAQK,CAAkB,EAEpD,GAAIC,GAAqBA,EAAkBJ,CAAiB,EAC1D,OAAOI,EAAkBJ,CAAiB,EAAE,UAG9C,MAAMK,EAAiB,GAAGH,CAAK,aAC/B,OAAOJ,EAAQO,CAAc,CAC/B,EAEMC,EAAcR,EAAQ,iBACtB,OAAOA,EAAQ,MAAS,SAAWA,EAAQ,KAAO,KACnD,GACCS,EAAeN,EAAS,eAAe,EACvCO,EAAYP,EAAS,YAAY,EACjCQ,EAAcX,EAAQ,eAAiBA,EAAQ,cAAgB,EAC/DY,EAAcZ,EAAQ,cAAgBA,EAAQ,eAAiB,UAC/Da,EAASb,EAAQ,QAAU,CAAA,EAM3Bc,EAAqB3L,GAClB2B,GAAU,SAAS3B,EAAM,CAC9B,aAAc,CAAC,MAAM,EACrB,aAAc,CAAA,CAAC,CAChB,EAGG4L,EAAkBf,EAAQ,iBAC1BgB,EAAkBhB,EAAQ,yBAA2BA,EAAQ,kBAE7DtjB,EAAc,IAAM,CACxB,GAAIujB,EACFA,EAAQD,EAAQ,EAAE,MACb,CACL,MAAM5Q,EAAOtC,IAAa,IAAM,GAAKA,EAE/BmU,EAAajB,EAAQ,cAAgBA,EAAQ,GACnD9T,GAAS,GAAGkD,CAAI,aAAa6R,CAAU,EAAE,CAC3C,CACF,EAEA,OACEpgB,EAAAA,KAAC/H,EAAA,CACC,QAAS4D,EACT,UAAW,kLAAkLvD,CAAS,GACtM,GAAAgN,EAAS,GAAG3D,EAGZ,SAAA,CAAA3B,EAAAA,KAACpH,EAAA,CAAI,UAAU,sEAEb,SAAA,CAAAD,EAAAA,IAAC4H,GAAA,CACC,IAAK4e,EAAQ,cACb,IAAKQ,EACL,UAAU,qFACV,QAAQ,MAAA,CAAA,EAITI,GACCpnB,EAAAA,IAACC,EAAA,CAAI,UAAU,gEACb,SAAAD,EAAAA,IAACG,GAAA,CAAK,UAAW,qBACfqmB,EAAQ,eAAiB,WAAa,eACtCA,EAAQ,eAAiB,YAAc,iBACvC,eACF,GAAI,MAAO,CAAE,WAAY,2BAAA,EACtB,SAAAA,EAAQ,oBAAsBA,EAAQ,YAAA,CACzC,EACF,EAIDW,GAAeX,EAAQ,eAAiB,YAAcA,EAAQ,eAAiB,aAC9Enf,EAAAA,KAAClH,GAAA,CAAK,UAAU,kFACb,SAAA,CAAAqmB,EAAQ,cAAc,GAAA,EACzB,EAIDa,EAAO,OAAS,GACfrnB,EAAAA,IAACC,EAAA,CAAI,UAAU,6DACZ,SAAAonB,EAAO,IAAI,CAAC/mB,EAAOonB,IAClB1nB,EAAAA,IAACG,GAAA,CAEC,UAAU,uDACV,MAAO,CAAE,gBAAiBG,EAAM,OAAS,SAAA,EAExC,SAAAA,EAAM,IAAA,EAJFonB,CAAA,CAMR,CAAA,CACH,CAAA,EAEJ,EAGArgB,EAAAA,KAACpH,EAAA,CAAI,UAAU,MAEb,SAAA,CAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,sCACZ,SAAA,CAAAumB,EAAQ,kBACPxmB,EAAAA,IAACG,GAAA,CAAK,UAAU,uHACb,WAAQ,iBACX,EAEDqmB,EAAQ,YACPxmB,EAAAA,IAACG,IAAK,UAAU,2CACb,WAAQ,UAAA,CACX,CAAA,EAEJ,EAGConB,EACCvnB,EAAAA,IAACC,EAAA,CACC,UAAU,qJACV,wBAAyB,CAAE,OAAQqnB,EAAkBC,CAAe,CAAA,CAAE,CAAA,EAGxEvnB,EAAAA,IAACgI,GAAA,CAAG,UAAU,8DACX,SAAAgf,EACH,EAIDQ,GACCxnB,EAAAA,IAACC,EAAA,CACC,UAAU,oJACV,wBAAyB,CAAE,OAAQqnB,EAAkBE,CAAe,CAAA,CAAE,CAAA,EAK1EngB,EAAAA,KAACpH,EAAA,CAAI,UAAU,iCACZ,SAAA,CAAAkmB,GAAaK,EAAQ,YAAc,CAAC,EAAE,IAAI,CAAC5lB,EAAM8mB,IAChDrgB,EAAAA,KAAClH,GAAA,CAEC,UAAW,WAAWS,IAAS,QAAU,mCAAqC,iBAAiB,GAE9F,SAAA,CAAAA,IAAS,QAAUZ,EAAAA,IAAC,IAAA,CAAE,UAAU,mBAAmB,EACnDY,IAAS,QAAUZ,EAAAA,IAAC,IAAA,CAAE,UAAU,+BAA+B,EAC/DY,IAAS,SAAWZ,EAAAA,IAAC,IAAA,CAAE,UAAU,oBAAA,CAAqB,CAAA,CAAA,EALlD0nB,CAAA,CAOR,EACD1nB,EAAAA,IAACG,IAAK,UAAU,kDACZ,YAAQ,YAAc,GAAG,QAAQ,CAAC,CAAA,CACtC,EACAkH,EAAAA,KAAClH,GAAA,CAAK,UAAU,2CAA2C,SAAA,CAAA,IACvDqmB,EAAQ,cAAgB,EAAE,GAAA,CAAA,CAC9B,CAAA,EACF,EAGAnf,EAAAA,KAACpH,EAAA,CAAI,UAAU,iCACb,SAAA,CAAAD,EAAAA,IAACG,GAAA,CAAK,UAAU,0CACb,SAAA8mB,EACH,EACCC,GAAaC,GACZnnB,EAAAA,IAACG,GAAA,CAAK,UAAU,wDACb,SAAA+mB,CAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CAGN,2GC9VMS,GAAkB,WAClBC,GAAoB,aACpBC,GAAoB,aACpBC,GAAmB,YACnBC,GAAgB,SAChBC,GAAc,OACdC,GAAiB,UAEjBC,GAAiB,UAEjBC,GAAoB,aAGpBC,GAAmB,YACnBC,GAAoB,aACpBC,GAAc,OACdC,GAAuB,UACvBC,GAAuB,UACvBC,GAAqB,QACrBC,GAAwB,WACxBC,GAA2B,cAC3BC,GAAqBC,GAAW,gBAAgBA,CAAM,GACtDC,GAAuBF,GAAkBL,EAAoB,EAC7DQ,GAAuBH,GAAkBJ,EAAoB,EAC7DQ,GAAqBJ,GAAkBH,EAAkB,EACzDQ,GAAwBL,GAAkBF,EAAqB,EAC/DQ,GAAiB,WACjBC,GAAoB,cACpBC,GAAkB,YAClBC,GAA0B,oBAC1BC,GAAc,QACdC,GAAsB,gBACtBC,GAAkC,4BAClCC,GAAc,OACdC,GAAc,OACdC,GAAe,QACfC,GAAe,QACfC,GAAwB,gBACxBC,GAAwB,gBACxBC,GAAsB,cACtBC,GAAyB,iBACzBC,GAA0B,kBAC1BC,GAAoB,YACpBC,GAAkB,UAClBC,GAAiB,UACjBC,GAAY,SACZC,GAAgB,YAChBC,GAAiB,aACjBC,GAAiB,SACjBC,GAAe,OACfC,GAAoB,UACpBC,GAAkB,QAClBC,GAAsB,sBC9CtBC,GAAc,SACpB,SAASC,MAAQzmB,EAAS,CACtB,MAAO,CAAC,GAAGA,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAChD,CACA,SAAS0mB,GAAStnB,EAAM,CACpB,MAAO,GAAGonB,EAAW,GAAGpnB,CAAI,EAChC,CACA,SAASunB,GAAOvnB,EAAM,CAClB,MAAO,KAAKonB,EAAW,GAAGpnB,CAAI,EAClC,CACA,SAASwnB,GAAcrV,EAAMsV,EAAQ,CACjC,MAAO,GAAGtV,CAAI,GAAGsV,EAAS,IAAIA,CAAM,GAAK,EAAE,EAC/C,CACA,SAASC,GAAkBvV,EAAM,CAC7B,OAAQsV,GAAWD,GAAcrV,EAAMsV,CAAM,CACjD,CACA,SAASE,GAAe/D,EAAQgE,EAAc,CAC1C,IAAIC,EACJ,OAAQA,EAAqDjE,IAAOgE,CAAY,KAAO,MAAQC,IAAO,OAASA,EAAKD,CACxH,CAIA,SAASE,GAAsBlE,EAAQmE,EAAQhU,EAAO,CAClD,OAAO4T,GAAe/D,EAAQ,oBAAoB,EAC7C,QAAQ,YAAa,GAAGoE,GAAcjU,EAAOgU,EAAO,MAAM,EAAI,CAAC,EAAE,EACjE,QAAQ,YAAa,GAAGA,EAAO,MAAM,EAAE,CAChD,CACA,SAASE,MAAWC,EAAU,CAC1B,MAAO,IAAM,CACTA,EAAS,QAASC,GAAY,CAC1BA,EAAO,CACX,CAAC,CACL,CACJ,CACA,SAASC,GAAepoB,EAAMqoB,EAAaC,EAAS,CAChD,MAAO,IAAM,CACT,MAAMC,EAAM9rB,EAAM,WAAW6rB,CAAO,EACpC,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,GAAGvoB,CAAI,0BAA0BqoB,CAAW,WAAW,EAE3E,OAAOE,CACX,CACJ,CACA,SAASC,IAAY,CACjB,OAAO,OAAO,OAAW,GAC7B,CACA,SAASC,GAAMxrB,EAAOyrB,EAAW,EAAG,CAChC,MAAMC,EAAS,IAAMD,EACrB,OAAO,KAAK,OAAOzrB,EAAQ,OAAO,SAAW0rB,CAAM,EAAIA,CAC3D,CACA,SAASC,GAAaC,EAAO,CACzB,OAAOA,EAAM,OAAS,QAAaA,EAAM,OAAS,OACtD,CACA,SAASC,GAAgBC,EAAOC,EAAU,CACtC,OAAOD,EAAM,WAAa7B,IAAoB6B,EAAM,WAAa9B,IAAqB+B,IAAa9B,EACvG,CACA,SAAS+B,GAAShsB,EAAO,CACrB,OAAO,OAAOA,GAAU,SAAW,OAAO,SAASA,EAAO,EAAE,EAAIA,CACpE,CACA,SAASisB,GAAsBC,EAAO,CAClC,GAAI,OAAOA,GAAU,SACjB,MAAO,CAAE,MAAOA,CAAK,EAEzB,GAAI,OAAOA,GAAU,SAAU,CAC3B,MAAMlsB,EAAQgsB,GAASE,CAAK,EAC5B,OAAOA,EAAM,SAAS,GAAG,EAAI,CAAE,QAASlsB,CAAK,EAAK,CAAE,MAAOA,CAAK,CACpE,CACA,MAAO,CAAE,MAAO,CAAC,CACrB,CACA,SAASmsB,GAAiBC,EAAeC,EAAS,CAC9C,MAAMC,EAAeL,GAAsBI,CAAO,EAC5CE,EAAgBD,EAAa,UAAY,OAAaF,EAAc,MAAQ,IAAOE,EAAa,QAAUA,EAAa,MAC7H,MAAO,CACH,MAAO,KAAK,IAAIF,EAAc,MAAQ,EAAIG,EAAe,CAAC,EAC1D,OAAQ,KAAK,IAAIH,EAAc,OAAS,EAAIG,EAAe,CAAC,CACpE,CACA,CACA,SAASC,IAAmB,CACxB,OAAQjB,GAAS,EAAqD,QAAO,iBAAmB,SAAc,CAClH,CACA,SAASR,GAAcjU,EAAO2V,EAAa,CACvC,OAAOA,EAAc,GAAM3V,EAAQ2V,EAAeA,GAAeA,EAAc,CACnF,CACA,SAASC,GAAU5B,EAAQ,CACvB,OAAOA,EAAO,OAAS,CAC3B,CACA,SAAS6B,GAAS7B,EAAQhU,EAAO,CAC7B,OAAOgU,EAAOC,GAAcjU,EAAOgU,EAAO,MAAM,CAAC,CACrD,CACA,SAAS8B,GAAkB9B,EAAQhU,EAAO,CACtC,OAAO4V,GAAU5B,CAAM,EAAI6B,GAAS7B,EAAQhU,CAAK,EAAI,MACzD,CACA,SAAS+V,GAAYjB,EAAO,CACxB,OAAOD,GAAaC,CAAK,EAAIA,EAAM,IAAM,MAC7C,CACA,SAASkB,GAAiBC,EAASzqB,EAAK0qB,EAAQ,CAC5C,GAAI,CAACA,EACD,OAAOD,EACX,KAAM,CAAE,QAAAE,EAAS,GAAGC,CAAW,EAAKH,EAC9BjW,EAAQmW,EAAQ,UAAW7b,GAASA,IAAS9O,CAAG,EAChD6qB,EAAgB3tB,EAAM,eAAewtB,CAAM,EAAIxtB,EAAM,aAAawtB,EAAQ,CAAE,IAAA1qB,GAAO,IAAI,EAAI0qB,EACjG,GAAIlW,GAAS,EAAG,CACZ,MAAMsW,EAAS,CAAC,GAAGH,CAAO,EAC1B,OAAAG,EAAO,OAAOtW,EAAO,EAAGqW,CAAa,EAC9B,CAAE,QAASC,EAAQ,GAAGF,CAAW,CAC5C,CACA,MAAO,CAAE,QAAS,CAACC,EAAe,GAAGF,CAAO,EAAG,GAAGC,CAAW,CACjE,CAOA,SAASG,GAAiBC,EAAUxC,EAAQyC,EAAU,EAAG,CACrD,OAAO,KAAK,IAAID,EAAS,QAAS,KAAK,IAAIA,EAAS,OAASxC,EAAO,OAAS,EAAI,KAAK,MAAMA,EAAO,OAAS,CAAC,EAAGyC,CAAO,CAAC,CAC5H,CACA,MAAMC,GAAY,OAAOhuB,EAAM,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,GAAK,GACzD,SAASiuB,GAAcC,EAAW,CAE9B,MAAO,CAAE,MAAOF,GAAYE,EADRA,EAAY,GAAK,MACc,CACvD,CACA,SAASC,GAAOxL,EAAM,CAClBA,EAAK,SACT,CAEA,MAAMyL,GAAuB,CACzB,KAAM,GACN,MAAO,IAAM,CAAE,EACf,MAAO,EACP,OAAQ,CAAA,EACR,OAAQ,CAAA,EACR,QAAS,CAAA,EACT,QAAS,CAAE,QAAS,CAAC1E,EAAY,CAAC,EAClC,OAAQ,CAAA,EACR,UAAW,CACP,KAAM,IACN,MAAO,IACP,OAAQ,CACJ,KAAM,OACN,MAAO,WACP,WAAY,aACxB,CACA,EACI,SAAU,CACN,OAAQ,GACR,QAAS,EACT,QAAS,OACT,QAAS,MACT,SAAUc,GACV,WAAY,CAAA,CACpB,EACI,WAAY,CACR,IAAK,KACL,MAAO,GACP,KAAM,GACN,YAAa,OACb,cAAe,GACf,gBAAiB,GACjB,qBAAsB,GACtB,qBAAsB,GACtB,qBAAsB,GACtB,uBAAwB,EAChC,EACI,OAAQ,CAAA,EACR,SAAU,CACN,SAAU,EAClB,EACI,GAAI,CAAA,EACJ,OAAQ,CAAA,EACR,UAAW,EACf,EAEA,SAAS6D,GAAa9qB,EAAM+qB,EAAW,CACnC,MAAO,CAAE,KAAA/qB,EAAM,UAAA+qB,CAAS,CAC5B,CACA,SAASC,GAAWC,EAAQlvB,EAAU,CAClC,MAAO,CAAE,OAAAkvB,EAAQ,SAAAlvB,CAAQ,CAC7B,CACA,SAASmvB,GAAa9L,EAAMtY,EAAQgO,EAAO,CACvC,OAAIsK,EAAK,OAAO,OAAStY,EACdgO,EAAMsK,CAAI,EAEjBA,EAAK,SACE,CACH4L,GAAW5L,EAAK,OAAQA,EAAK,SAAS,QAAS,GAAM,CAAE,IAAIyI,EAAI,OAAQA,EAAKqD,GAAa,EAAGpkB,EAAQgO,CAAK,KAAO,MAAQ+S,IAAO,OAASA,EAAK,EAAI,CAAC,CAAC,CAC/J,EAEW,CAACzI,CAAI,CAChB,CACA,SAAS+L,GAASC,EAAOtkB,EAAQgO,EAAO,CACpC,OAAOsW,EAAM,QAAShM,GAAS,CAAE,IAAIyI,EAAI,OAAQA,EAAKqD,GAAa9L,EAAMtY,EAAQgO,CAAK,KAAO,MAAQ+S,IAAO,OAASA,EAAK,EAAI,CAAC,CACnI,CACA,SAASwD,GAAYvR,EAAMwR,EAAU,CAAA,EAAIC,EAAgB,CAAA,EAAI,CACzD,IAAIC,EAAS1R,EACb,MAAM2R,EAAY3kB,GAAW,CACzB,MAAMskB,EAAQ,CAAC,GAAGI,CAAM,EACxB,KAAOJ,EAAM,OAAS,GAAG,CACrB,MAAMhM,EAAOgM,EAAM,IAAG,EACtB,GAAiDhM,GAAK,OAAO,OAAUtY,EACnE,MAAO,GACqCsY,GAAK,UACjDgM,EAAM,KAAK,GAAGhM,EAAK,QAAQ,CACnC,CACA,MAAO,EACX,EACMsM,EAAY,CAAC5kB,EAAQmkB,IAAW,CAClC,GAAInkB,IAAW,GAAI,CACf0kB,EAAS,CAACR,GAAWC,EAAQO,CAAM,CAAC,EACpC,MACJ,CACAA,EAASL,GAASK,EAAQ1kB,EAASsY,GAAS,CAAC4L,GAAWC,EAAQ,CAAC7L,CAAI,CAAC,CAAC,CAAC,CAC5E,EACMuM,EAAS,CAAC7kB,EAAQmkB,IAAW,CAC/BO,EAASL,GAASK,EAAQ1kB,EAASsY,GAAS,CAAC4L,GAAW5L,EAAK,OAAQ,CAAC4L,GAAWC,EAAQ7L,EAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC9G,EACMwM,EAAW,CAAC9kB,EAAQmkB,EAAQY,IAAY,CAC1CL,EAASL,GAASK,EAAQ1kB,EAASsY,GAAS,CACxC,IAAIyI,EACJ,MAAO,CACHmD,GAAW5L,EAAK,OAAQ,CACpB,GAAIyM,EAAU,CAACb,GAAWC,CAAM,CAAC,EAAI,CAAA,EACrC,IAAKpD,EAAKzI,EAAK,YAAc,MAAQyI,IAAO,OAASA,EAAK,GAC1D,GAAKgE,EAAiC,CAAA,EAAvB,CAACb,GAAWC,CAAM,CAAC,CACtD,CAAiB,CACjB,CACQ,CAAC,CACL,EACMa,EAAa,CAAChlB,EAAQmkB,EAAQY,IAAY,CAC5CL,EAASL,GAASK,EAAQ1kB,EAASsY,GAAS,CACxC,GAAIyM,EAAU,CAACb,GAAWC,CAAM,CAAC,EAAI,CAAA,EACrC7L,EACA,GAAKyM,EAAiC,CAAA,EAAvB,CAACb,GAAWC,CAAM,CAAC,CAC9C,CAAS,CACL,EACMc,EAAad,GAAW,CAC1BU,EAAOxH,GAAmB8G,CAAM,CACpC,EACMe,EAAU,CAACllB,EAAQmkB,IAAW,CAChCO,EAASL,GAASK,EAAQ1kB,EAASsY,GAAS,CAAC4L,GAAWC,EAAQ7L,EAAK,QAAQ,CAAC,CAAC,CACnF,EACMxE,EAAU9T,GAAW,CACvB0kB,EAASL,GAASK,EAAQ1kB,EAASsY,GAASA,EAAK,QAAQ,CAC7D,EACM6M,EAAWC,GAAiB,CAC9BX,EAAc,KAAKW,CAAY,CACnC,EACA,OAAAZ,EAAQ,QAASa,GAAW,CACxBA,EAAO,CACH,SAAAV,EACA,UAAAC,EACA,OAAAC,EACA,SAAAC,EACA,WAAAE,EACA,UAAAC,EACA,QAAAC,EACA,OAAApR,EACA,QAAAqR,CACZ,CAAS,CACL,CAAC,EACM,CACH,OAAAT,EACA,aAAervB,GAAUovB,EAAc,OAAO,CAACvoB,EAAKkpB,IAAiBA,EAAalpB,CAAG,EAAG7G,CAAK,CACrG,CACA,CAEA,MAAMiwB,GAAc3vB,EAAM,cAAc,IAAI,EACtC4vB,GAAiBjE,GAAe,iBAAkB,cAAegE,EAAW,EAClF,SAASE,GAAoB,CAAE,SAAAvwB,GAAY,CACvC,KAAM,CAACwwB,EAAaC,CAAc,EAAI/vB,EAAM,SAAS,EAAK,EACpD,CAACgwB,EAAaC,CAAc,EAAIjwB,EAAM,SAAS,EAAK,EACpD6rB,EAAU7rB,EAAM,QAAQ,KAcnB,CAAE,YAAA8vB,EAAa,iBAbG,CAACI,EAASC,IAAW,CAC1C,MAAMC,EAAoBC,GAAsBjmB,GAAU,CACtD,IAAIghB,EACChhB,EAAM,cAAc,SAASA,EAAM,aAAa,GACjD2lB,EAAeM,CAAgB,GAElCjF,EAAMiF,EAAmBH,EAAUC,KAAa,MAAQ/E,IAAO,QAAkBA,EAAGhhB,CAAK,CAC9F,EACA,MAAO,CACH,QAASgmB,EAAiB,EAAI,EAC9B,OAAQA,EAAiB,EAAK,CAC9C,CACQ,EACwC,YAAAJ,EAAa,eAAAC,CAAc,GACpE,CAACH,EAAaE,CAAW,CAAC,EAC7B,OAAOhwB,EAAM,cAAc2vB,GAAY,SAAU,CAAE,MAAO9D,CAAO,EAAIvsB,CAAQ,CACjF,CAEA,MAAMgxB,GAAkBtwB,EAAM,cAAc,IAAI,EAC1CuwB,GAAqB5E,GAAe,cAAe,kBAAmB2E,EAAe,EAC3F,SAASE,GAAwB,CAAE,QAAAC,EAAS,SAAAnxB,GAAY,CACpD,MAAMusB,EAAU7rB,EAAM,QAAQ,IAAM,CAChC,MAAM0wB,EAAoB/N,GAAS,CAAE,IAAIyI,EAAI,QAASA,EAAMzI,GAAQ8N,EAAQ,WAAc,MAAQrF,IAAO,OAAS,OAASA,EAAG,gBAAkB,QAAU,EAE1J,MAAO,CAAE,iBAAAsF,EAAkB,eADH/N,GAAS,CAAE,IAAIyI,EAAI,QAASA,EAAKsF,EAAiB/N,CAAI,KAAO,MAAQyI,IAAO,OAAS,OAASA,EAAG,cAAgB,MAAQ,CACxG,CAC7C,EAAG,CAACqF,CAAO,CAAC,EACZ,OAAOzwB,EAAM,cAAcswB,GAAgB,SAAU,CAAE,MAAOzE,CAAO,EAAIvsB,CAAQ,CACrF,CAEA,MAAMqxB,GAAgB3wB,EAAM,cAAc,IAAI,EACxC4wB,GAAYjF,GAAe,YAAa,gBAAiBgF,EAAa,EAC5E,SAASE,GAAe,CAAE,SAAAvxB,GAAY,CAClC,KAAM,CAACwxB,CAAa,EAAI9wB,EAAM,SAAS,CAAA,CAAE,EACzCA,EAAM,UAAU,IAAM,IAAM,CACxB,OAAO,KAAK8wB,CAAa,EAAE,QAASC,GAAU,OAAOD,EAAcC,CAAK,CAAC,CAC7E,EAAG,CAACD,CAAa,CAAC,EAClB,MAAMjF,EAAU7rB,EAAM,QAAQ,IAAM,CAChC,MAAMgmB,EAAc,CAAC+K,EAAOC,IAAa,CACrC,IAAI5F,GACHA,EAAK0F,EAAcC,CAAK,KAAO,MAAQ3F,IAAO,QAAkBA,EAAG,OAAO,EAAG0F,EAAcC,CAAK,EAAE,OAAQ,GAAGD,EAAcC,CAAK,EAAE,OAAQE,GAAOA,IAAOD,CAAQ,CAAC,CACtK,EAYA,MAAO,CAAE,QAJO,IAAI,CAACD,EAAO3mB,CAAK,IAAM,CACnC,IAAIghB,GACHA,EAAK0F,EAAcC,CAAK,KAAO,MAAQ3F,IAAO,QAAkBA,EAAG,QAAS4F,GAAaA,EAAS5mB,CAAK,CAAC,CAC7G,EACkB,UAXA,CAAC2mB,EAAOC,KACjBF,EAAcC,CAAK,IACpBD,EAAcC,CAAK,EAAI,CAAA,GAE3BD,EAAcC,CAAK,EAAE,KAAKC,CAAQ,EAC3B,IAAMhL,EAAY+K,EAAOC,CAAQ,GAMf,YAAAhL,CAAW,CAC5C,EAAG,CAAC8K,CAAa,CAAC,EAClB,OAAO9wB,EAAM,cAAc2wB,GAAc,SAAU,CAAE,MAAO9E,CAAO,EAAIvsB,CAAQ,CACnF,CAEA,MAAM4xB,GAAuBlxB,EAAM,cAAc,IAAI,EAC/CmxB,GAAmBxF,GAAe,mBAAoB,uBAAwBuF,EAAoB,EACxG,SAASE,GAAsB,CAAE,SAAA9xB,EAAU,GAAGI,GAAS,CACnD,OAAOM,EAAM,cAAckxB,GAAqB,SAAU,CAAE,MAAOxxB,CAAK,EAAIJ,CAAQ,CACxF,CAEA,MAAM+xB,GAAuBrxB,EAAM,cAAc,IAAI,EAC/CsxB,GAAmB3F,GAAe,mBAAoB,uBAAwB0F,EAAoB,EAClGE,GAA0BvxB,EAAM,cAAc,IAAI,EAClDwxB,GAAsB7F,GAAe,sBAAuB,0BAA2B4F,EAAuB,EACpH,SAASE,GAAQ7L,EAAO8L,EAAQ,CAC5B,OAAQA,EAAO,KAAI,CACf,IAAK,QAAS,CACV,KAAM,CAAE,OAAApG,CAAM,EAAK1F,EACb+L,EAA6DD,GAAO,WAAc,EAClFE,EAAchM,EAAM,YAAc+L,EAClCE,EAAetG,GAAcqG,EAAatG,EAAO,MAAM,EACvDwG,EAAe1E,GAAkB9B,EAAQuG,CAAY,EACrDE,EAAYJ,GAAaD,EAAO,WAAa,OAC7C,CACE,UAAAC,EACA,SAAUD,EAAO,SACjB,OAAQA,EAAO,MACnC,EACkB,OACN,MAAO,CAAE,OAAApG,EAAQ,aAAAuG,EAAc,YAAAD,EAAa,aAAAE,EAAc,UAAAC,CAAS,CACvE,CACA,IAAK,SACD,OAAIL,EAAO,SAAW9L,EAAM,QAAU8L,EAAO,QAAU9L,EAAM,aAClD,CACH,OAAQ8L,EAAO,OACf,aAAcA,EAAO,MACrB,YAAaA,EAAO,MACpB,aAActE,GAAkBsE,EAAO,OAAQA,EAAO,KAAK,CAC/E,EAEmB9L,EACX,QACI,MAAM,IAAI,MAAM8E,EAAmB,CAC/C,CACA,CACA,SAASsH,GAAsB,CAAE,OAAA1G,EAAQ,MAAAhU,EAAO,SAAAhY,CAAQ,EAAI,CACxD,KAAM,CAACsmB,EAAOqM,CAAQ,EAAIjyB,EAAM,WAAWyxB,GAAS,CAChD,OAAAnG,EACA,aAAchU,EACd,YAAaA,EACb,aAAc8V,GAAkB9B,EAAQhU,CAAK,CACrD,CAAK,EACDtX,EAAM,UAAU,IAAM,CAClBiyB,EAAS,CAAE,KAAM,SAAU,OAAA3G,EAAQ,MAAAhU,CAAK,CAAE,CAC9C,EAAG,CAACgU,EAAQhU,CAAK,CAAC,EAClB,MAAMuU,EAAU7rB,EAAM,QAAQ,KAAO,CAAE,GAAG4lB,EAAO,MAAAA,EAAO,SAAAqM,CAAQ,GAAK,CAACrM,EAAOqM,CAAQ,CAAC,EACtF,OAAQjyB,EAAM,cAAcuxB,GAAwB,SAAU,CAAE,MAAOU,CAAQ,EAC3EjyB,EAAM,cAAcqxB,GAAqB,SAAU,CAAE,MAAOxF,CAAO,EAAIvsB,CAAQ,CAAC,CACxF,CAEA,MAAM4yB,GAAkBlyB,EAAM,cAAc,IAAI,EAC1CmyB,GAAcxG,GAAe,cAAe,kBAAmBuG,EAAe,EACpF,SAASE,GAAiB,CAAE,SAAA9yB,GAAY,CACpC,KAAM,CAAC+yB,CAAQ,EAAIryB,EAAM,SAAS,CAAA,CAAE,EACpCA,EAAM,UAAU,IAAM,IAAM,CACxBqyB,EAAS,QAASC,GAAQ,OAAO,aAAaA,CAAG,CAAC,EAClDD,EAAS,OAAO,EAAGA,EAAS,MAAM,CACtC,EAAG,CAACA,CAAQ,CAAC,EACb,MAAMxG,EAAU7rB,EAAM,QAAQ,IAAM,CAChC,MAAMuyB,EAAiB9lB,GAAO,CAC1B4lB,EAAS,OAAO,EAAGA,EAAS,OAAQ,GAAGA,EAAS,OAAQC,GAAQA,IAAQ7lB,CAAE,CAAC,CAC/E,EAeA,MAAO,CAAE,WAdU,CAAC+lB,EAAIC,IAAU,CAC9B,MAAMhmB,EAAK,OAAO,WAAW,IAAM,CAC/B8lB,EAAc9lB,CAAE,EAChB+lB,EAAE,CACN,EAAGC,CAAK,EACR,OAAAJ,EAAS,KAAK5lB,CAAE,EACTA,CACX,EAOqB,aANCA,GAAO,CACrBA,IAAO,SACP8lB,EAAc9lB,CAAE,EAChB,OAAO,aAAaA,CAAE,EAE9B,CACiC,CACrC,EAAG,CAAC4lB,CAAQ,CAAC,EACb,OAAOryB,EAAM,cAAckyB,GAAgB,SAAU,CAAE,MAAOrG,CAAO,EAAIvsB,CAAQ,CACrF,CAEA,MAAMozB,GAAa1yB,EAAM,WAAW,SAAoB,CAAE,MAAAI,EAAO,UAAAX,EAAW,KAAM6D,EAAM,WAAAqvB,EAAY,QAAApM,EAAS,MAAAziB,EAAO,GAAG8uB,CAAI,EAAIjzB,EAAK,CAChI,KAAM,CAAE,OAAAkzB,EAAQ,OAAA1L,CAAM,EAAKgK,GAAgB,EACrC2B,EAAc5H,GAAe/D,EAAQ/mB,CAAK,EAChD,OAAQJ,EAAM,cAAc,SAAU,CAAE,IAAKL,EAAK,KAAM,SAAU,MAAOmzB,EAAa,aAAcA,EAAa,UAAWlI,GAAKC,GAASP,EAAc,EAAG7qB,CAAS,EAAG,QAAS8mB,EAAS,MAAO,CAAE,GAAGziB,EAAO,GAAG+uB,EAAO,MAAM,EAAI,GAAGD,CAAI,EAAID,EAAaA,IAAe3yB,EAAM,cAAcsD,EAAM,CAAE,UAAWunB,GAASN,EAAY,EAAG,MAAOsI,EAAO,IAAI,CAAE,CAAC,CAC/V,CAAC,EAED,SAASE,GAAQxvB,EAAMjE,EAAU,CAC7B,MAAM0zB,EAAQtzB,GAAWM,EAAM,cAAc,MAAO,CAAE,MAAO,6BAA8B,QAAS,YAAa,MAAO,KAAM,OAAQ,KAAM,cAAe,OAAQ,UAAW,QAAS,GAAGN,GAASJ,CAAQ,EAC3M,OAAA0zB,EAAK,YAAczvB,EACZyvB,CACX,CACA,SAASC,GAAW1vB,EAAM2vB,EAAO,CAC7B,OAAOH,GAAQxvB,EAAMvD,EAAM,cAAc,IAAK,CAAE,KAAM,cAAc,EAChEA,EAAM,cAAc,OAAQ,CAAE,EAAG,gBAAiB,KAAM,OAAQ,EAChEkzB,CAAK,CAAC,CACd,CACA,SAASC,GAAmB5vB,EAAM2vB,EAAO,CACrC,OAAOH,GAAQxvB,EAAMvD,EAAM,cAAcA,EAAM,SAAU,KACrDA,EAAM,cAAc,OAAQ,KACxBA,EAAM,cAAc,OAAQ,CAAE,GAAI,QAAQ,EACtCA,EAAM,cAAc,OAAQ,CAAE,EAAG,gBAAiB,KAAM,QAAS,EACjEA,EAAM,cAAc,OAAQ,CAAE,EAAG,aAAc,OAAQ,QAAS,YAAa,CAAC,CAAE,CAAC,CAAC,EAC1FA,EAAM,cAAc,OAAQ,CAAE,EAAG,wCAAyC,OAAQ,eAAgB,YAAa,EAAG,EAClHA,EAAM,cAAc,IAAK,CAAE,KAAM,eAAgB,KAAM,cAAc,EACjEA,EAAM,cAAc,OAAQ,CAAE,EAAG,gBAAiB,KAAM,OAAQ,EAChEkzB,CAAK,CAAC,CAAC,CACnB,CACA,MAAME,GAAYH,GAAW,QAASjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,uGAAuG,CAAE,CAAC,EAC3KqzB,GAAeJ,GAAW,WAAYjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,+CAA+C,CAAE,CAAC,EACzHszB,GAAWL,GAAW,OAAQjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,gDAAgD,CAAE,CAAC,EAClHuzB,GAAcN,GAAW,UAAWjzB,EAAM,cAAcA,EAAM,SAAU,KAAM,MAAM,KAAK,CAAE,OAAQ,CAAC,CAAE,EAAE,IAAI,CAACwzB,EAAGlc,EAAO+C,IAAWra,EAAM,cAAc,OAAQ,CAAE,IAAKsX,EAAO,GAAI,KAAM,GAAI,MAAO,GAAI,KAAM,GAAI,MAAO,cAAe,QAAS,YAAa,MAAO,OAAQ,eAAgB,cAAgB,EAAI+C,EAAM,QAAW/C,EAAQ,GAAI,UAAW,UAAW,IAAM+C,EAAM,OAAU/C,CAAK,WAAW,CAAE,CAAE,CAAC,CAAC,EAC7Ymc,GAAYR,GAAW,QAASjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,mMAAmM,CAAE,CAAC,EAEvQiS,GAAkB8Z,GAAS,EAAK/rB,EAAM,gBAAkBA,EAAM,UAEpE,SAAS0zB,IAAsB,CAC3B,KAAM,CAACC,EAAcC,CAAe,EAAI5zB,EAAM,SAAS,EAAK,EAC5DA,OAAAA,EAAM,UAAU,IAAM,CAClB,IAAIorB,EAAIyI,EACR,MAAM7mB,GAAcoe,EAAK,OAAO,cAAgB,MAAQA,IAAO,OAAS,OAASA,EAAG,KAAK,OAAQ,kCAAkC,EACnIwI,EAAwE5mB,GAAW,OAAO,EAC1F,MAAM8mB,EAAY1pB,GAAUwpB,EAAgBxpB,EAAM,OAAO,EACzD,OAACypB,EAA6D7mB,GAAW,oBAAsB,MAAQ6mB,IAAO,QAAkBA,EAAG,KAAK7mB,EAAY,SAAU8mB,CAAQ,EAC/J,IAAM,CAAE,IAAI1I,EAAI,OAAQA,EAA6Dpe,GAAW,uBAAyB,MAAQoe,IAAO,OAAS,OAASA,EAAG,KAAKpe,EAAY,SAAU8mB,CAAQ,CAAG,CAC9M,EAAG,CAAA,CAAE,EACEH,CACX,CAEA,SAASI,GAAsBpR,EAAM,CACjC,IAAIpK,EAAI,EACJyb,EAAI,EACJC,EAAI,EAER,MAAMC,EADS,OAAO,iBAAiBvR,CAAI,EAAE,UACtB,MAAM,kBAAkB,EAC/C,GAAIuR,EAAS,CACT,MAAMC,EAASD,EAAQ,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI1H,EAAQ,EAC7C2H,EAAO,SAAW,GAClB5b,EAAI4b,EAAO,CAAC,EACZH,EAAIG,EAAO,CAAC,GAEPA,EAAO,SAAW,KACvB5b,EAAI4b,EAAO,EAAE,EACbH,EAAIG,EAAO,EAAE,EACbF,EAAIE,EAAO,EAAE,EAErB,CACA,MAAO,CAAE,EAAA5b,EAAG,EAAAyb,EAAG,EAAAC,CAAC,CACpB,CACA,SAASG,GAAa3D,EAAS4D,EAAkB,CAC7C,MAAMC,EAAWt0B,EAAM,OAAO,MAAS,EACjC+xB,EAAY/xB,EAAM,OAAO,MAAS,EAClC2zB,EAAeD,GAAmB,EACxC,OAAAzhB,GAAgB,IAAM,CAClB,IAAImZ,EAAIyI,EAAIU,EACZ,GAAI9D,EAAQ,SAAW6D,EAAS,UAAY,QAAa,CAACX,EAAc,CACpE,KAAM,CAAE,UAAAa,EAAW,SAAAC,EAAU,OAAAC,EAAQ,SAAAC,CAAQ,EAAKN,EAAiBC,EAAS,QAAS7D,EAAQ,QAAQ,wBAAyBsD,GAAsBtD,EAAQ,OAAO,CAAC,GAAK,CAAA,EACzK,GAAI+D,GAAaC,EAAU,EACtBrJ,EAAK2G,EAAU,WAAa,MAAQ3G,IAAO,QAAkBA,EAAG,OAAM,EACvE2G,EAAU,QAAU,OACpB,GAAI,CACAA,EAAU,SAAWwC,GAAMV,EAAKpD,EAAQ,SAAS,WAAa,MAAQ8D,IAAO,OAAS,OAASA,EAAG,KAAKV,EAAIW,EAAW,CAAE,SAAAC,EAAU,OAAAC,EAAQ,CAC9I,OACOE,EAAK,CACR,QAAQ,MAAMA,CAAG,CACrB,CACI7C,EAAU,UACVA,EAAU,QAAQ,SAAW,IAAM,CAC/BA,EAAU,QAAU,OACgC4C,IAAQ,CAChE,EAER,CACJ,CACAL,EAAS,QAAU,MACvB,CAAC,EACM,CACH,iBAAmBO,GAAoB,CACnCP,EAAS,QAAUO,CACvB,EACA,mBAAoB,IAAM,CAAE,IAAIzJ,EAAI,QAASA,EAAK2G,EAAU,WAAa,MAAQ3G,IAAO,OAAS,OAASA,EAAG,aAAe,SAAW,CAC/I,CACA,CAEA,SAAS0J,IAAmB,CACxB,MAAMzrB,EAAerJ,EAAM,OAAO,IAAI,EAChC+0B,EAAc/0B,EAAM,OAAO,MAAS,EACpC,CAAC4sB,EAAeoI,CAAgB,EAAIh1B,EAAM,SAAQ,EA0BxD,MAAO,CAAE,gBAzBeA,EAAM,YAAa2iB,GAAS,CAChDtZ,EAAa,QAAUsZ,EACnBoS,EAAY,UACZA,EAAY,QAAQ,WAAU,EAC9BA,EAAY,QAAU,QAE1B,MAAME,EAAsB,IAAM,CAC9B,GAAItS,EAAM,CACN,MAAMkQ,EAAS,OAAO,iBAAiBlQ,CAAI,EACrCuS,EAAS10B,GAAU,WAAWA,CAAK,GAAK,EAC9Cw0B,EAAiB,CACb,MAAO,KAAK,MAAMrS,EAAK,YAAcuS,EAAMrC,EAAO,WAAW,EAAIqC,EAAMrC,EAAO,YAAY,CAAC,EAC3F,OAAQ,KAAK,MAAMlQ,EAAK,aAAeuS,EAAMrC,EAAO,UAAU,EAAIqC,EAAMrC,EAAO,aAAa,CAAC,CACjH,CAAiB,CACL,MAEImC,EAAiB,MAAS,CAElC,EACAC,EAAmB,EACftS,GAAQ,OAAO,eAAmB,MAClCoS,EAAY,QAAU,IAAI,eAAeE,CAAmB,EAC5DF,EAAY,QAAQ,QAAQpS,CAAI,EAExC,EAAG,CAAA,CAAE,EACqB,aAAAtZ,EAAc,cAAAujB,CAAa,CACzD,CAEA,SAASuI,IAAW,CAChB,MAAMC,EAAYp1B,EAAM,OAAO,MAAS,EAClC,CAAE,WAAAq1B,EAAY,aAAAC,CAAY,EAAKnD,GAAW,EAChD,OAAOnyB,EAAM,YAAY,CAACgxB,EAAUyB,IAAU,CAC1C6C,EAAaF,EAAU,OAAO,EAC9BA,EAAU,QAAUC,EAAWrE,EAAUyB,EAAQ,EAAIA,EAAQ,CAAC,CAClE,EAAG,CAAC4C,EAAYC,CAAY,CAAC,CACjC,CAEA,SAASC,GAAiB/C,EAAI,CAC1B,MAAM7yB,EAAMK,EAAM,OAAOwyB,CAAE,EAC3B,OAAAvgB,GAAgB,IAAM,CAClBtS,EAAI,QAAU6yB,CAClB,CAAC,EACMxyB,EAAM,YAAY,IAAIsI,IAAS,CAAE,IAAI8iB,EAAI,OAAQA,EAAKzrB,EAAI,WAAa,MAAQyrB,IAAO,OAAS,OAASA,EAAG,KAAKzrB,EAAK,GAAG2I,CAAI,CAAG,EAAG,EAAE,CAC/I,CAEA,SAASktB,GAAO71B,EAAKa,EAAO,CACpB,OAAOb,GAAQ,WACfA,EAAIa,CAAK,EAEJb,IACLA,EAAI,QAAUa,EAEtB,CACA,SAASi1B,GAAWC,EAAMC,EAAM,CAC5B,OAAO31B,EAAM,QAAQ,IAAM01B,GAAQ,MAAQC,GAAQ,KAC7C,KACCC,GAAa,CACZJ,GAAOE,EAAME,CAAQ,EACrBJ,GAAOG,EAAMC,CAAQ,CACzB,EAAG,CAACF,EAAMC,CAAI,CAAC,CACvB,CAEA,SAASE,GAAaC,EAAOrzB,EAAW,GAAO,CAC3C,MAAMszB,EAAU/1B,EAAM,OAAO,EAAK,EAClCiS,GAAgB,IAAM,CACdxP,GAAYszB,EAAQ,UACpBA,EAAQ,QAAU,GAClBD,EAAK,EAEb,EAAG,CAACrzB,EAAUqzB,CAAK,CAAC,EACpB,MAAM5F,EAAUlwB,EAAM,YAAY,IAAM,CACpC+1B,EAAQ,QAAU,EACtB,EAAG,CAAA,CAAE,EACC5F,EAASnwB,EAAM,YAAY,IAAM,CACnC+1B,EAAQ,QAAU,EACtB,EAAG,CAAA,CAAE,EACL,MAAO,CAAE,QAAA7F,EAAS,OAAAC,CAAM,CAC5B,CAEA,SAAS6F,IAAS,CACd,KAAM,CAACC,EAAOC,CAAQ,EAAIl2B,EAAM,SAAS,EAAK,EAC9C,OAAAiS,GAAgB,IAAM,CAClBikB,EAAS,OAAO,iBAAiB,OAAO,SAAS,eAAe,EAAE,YAAc,KAAK,CACzF,EAAG,CAAA,CAAE,EACED,CACX,CAEA,SAASE,IAAa,CAClB,KAAM,CAACC,CAAW,EAAIp2B,EAAM,SAAS,CAAA,CAAE,EACjCq2B,EAAoBr2B,EAAM,YAAY,CAACU,EAAM0J,IAAU,CACzD,IAAIghB,GACHA,EAAKgL,EAAY11B,CAAI,KAAO,MAAQ0qB,IAAO,QAAkBA,EAAG,QAAS0I,GAAa,CAC9E1pB,EAAM,qBAAoB,GAC3B0pB,EAAS1pB,CAAK,CACtB,CAAC,CACL,EAAG,CAACgsB,CAAW,CAAC,EACVE,EAAkBt2B,EAAM,QAAQ,KAAO,CACzC,cAAgBoK,GAAUisB,EAAkB1M,GAAuBvf,CAAK,EACxE,cAAgBA,GAAUisB,EAAkBzM,GAAuBxf,CAAK,EACxE,YAAcA,GAAUisB,EAAkBxM,GAAqBzf,CAAK,EACpE,eAAiBA,GAAUisB,EAAkBvM,GAAwB1f,CAAK,EAC1E,gBAAkBA,GAAUisB,EAAkBtM,GAAyB3f,CAAK,EAC5E,UAAYA,GAAUisB,EAAkBrM,GAAmB5f,CAAK,EAChE,QAAUA,GAAUisB,EAAkBpM,GAAiB7f,CAAK,EAC5D,QAAUA,GAAUisB,EAAkBnM,GAAgB9f,CAAK,CACnE,GAAQ,CAACisB,CAAiB,CAAC,EACjBE,EAAmBv2B,EAAM,YAAY,CAACU,EAAMswB,KACzCoF,EAAY11B,CAAI,IACjB01B,EAAY11B,CAAI,EAAI,CAAA,GAExB01B,EAAY11B,CAAI,EAAE,QAAQswB,CAAQ,EAC3B,IAAM,CACT,MAAMwF,EAAYJ,EAAY11B,CAAI,EAC9B81B,GACAA,EAAU,OAAO,EAAGA,EAAU,OAAQ,GAAGA,EAAU,OAAQC,GAAOA,IAAOzF,CAAQ,CAAC,CAE1F,GACD,CAACoF,CAAW,CAAC,EAChB,MAAO,CAAE,gBAAAE,EAAiB,iBAAAC,CAAgB,CAC9C,CAEA,SAASG,GAAY1F,EAAUyB,EAAO,CAClC,MAAMkE,EAAmB32B,EAAM,OAAO,CAAC,EACjC42B,EAAgBzB,GAAQ,EACxB0B,EAAkBtB,GAAiB,IAAIjtB,IAAS,CAClDquB,EAAiB,QAAU,KAAK,IAAG,EACnC3F,EAAS1oB,CAAI,CACjB,CAAC,EACD,OAAOtI,EAAM,YAAY,IAAIsI,IAAS,CAClCsuB,EAAc,IAAM,CAChBC,EAAgBvuB,CAAI,CACxB,EAAGmqB,GAAS,KAAK,IAAG,EAAKkE,EAAiB,QAAQ,CACtD,EAAG,CAAClE,EAAOoE,EAAiBD,CAAa,CAAC,CAC9C,CAEA,MAAME,GAAc7L,GAAkB,OAAO,EACvC8L,GAAmB9L,GAAkB,aAAa,EACxD,SAAS+L,GAAW,CAAE,MAAO1K,EAAO,OAAA2K,EAAQ,OAAAC,EAAQ,KAAAltB,EAAM,SAAAuiB,EAAU,WAAA4K,EAAY,QAAA5Q,EAAS,OAAA6Q,EAAQ,QAAA90B,EAAS,MAAAwB,CAAK,EAAK,CAChH,IAAIsnB,EAAIyI,EAAIU,EAAI8C,EAAIC,EAAIC,EAAIC,EAAIC,EAChC,KAAM,CAAC9O,EAAQ+O,CAAS,EAAI13B,EAAM,SAASqoB,EAAoB,EACzD,CAAE,QAAAsP,CAAO,EAAK/G,GAAS,EACvB,CAAE,WAAAyE,CAAU,EAAKlD,GAAW,EAC5ByF,EAAW53B,EAAM,OAAO,IAAI,EAClCA,EAAM,UAAU,IAAM,CACdi3B,IAAW,GACXU,EAAQjP,GAAkBC,CAAM,CAAC,CAEzC,EAAG,CAACsO,EAAQtO,EAAQgP,CAAO,CAAC,EAC5B,MAAME,EAAgBtC,GAAkBuC,GAAQ,EAC3C,WAAYA,EAAMA,EAAI,OAAM,EAAK,QAAQ,QAAO,GAC5C,MAAM,IAAM,CAAE,CAAC,EACf,KAAK,IAAM,CACPA,EAAI,aAGTJ,EAAUlP,EAAqB,EAC/B6M,EAAW,IAAM,CACmC+B,IAAOU,CAAG,CAC9D,EAAG,CAAC,EACR,CAAC,CACL,CAAC,EACKC,EAAc/3B,EAAM,YAAa83B,GAAQ,CAC3CF,EAAS,QAAUE,EAC2BA,GAAI,UAC9CD,EAAcC,CAAG,CAEzB,EAAG,CAACD,CAAa,CAAC,EACZG,EAAeh4B,EAAM,YAAaoK,GAAU,CAC9CytB,EAAcztB,EAAM,aAAa,CACrC,EAAG,CAACytB,CAAa,CAAC,EACZI,EAAgB1C,GAAiB,IAAM,CACzCmC,EAAUnP,EAAkB,EACsBjmB,IAAO,CAC7D,CAAC,EACK41B,EAAQ7L,GAAgBC,EAAOC,CAAQ,EACvC4L,EAAc,CAAC33B,EAAO43B,IAAc,OAAO,SAAS53B,CAAK,EAAIA,EAAQ43B,EACrEC,EAAWF,EAAY,KAAK,IAAI,KAAKtE,GAAMzI,EAAKkB,EAAM,UAAY,MAAQlB,IAAO,OAAS,OAASA,EAAG,IAAK7S,GAAMA,EAAE,KAAK,KAAO,MAAQsb,IAAO,OAASA,EAAK,IAAI,OAAOvH,EAAM,MAAQ,CAACA,EAAM,KAAK,EAAI,CAAA,CAAE,EAAE,OAAO,OAAO,CAAC,IAAKiI,EAAKqD,EAAS,WAAa,MAAQrD,IAAO,OAAS,OAASA,EAAG,eAAiB,CAAC,EAC9S+D,EAAYH,EAAY,KAAK,IAAI,KAAKb,GAAMD,EAAK/K,EAAM,UAAY,MAAQ+K,IAAO,OAAS,OAASA,EAAG,IAAK9e,GAAMA,EAAE,MAAM,KAAO,MAAQ+e,IAAO,OAASA,EAAK,IAAI,OAAOhL,EAAM,OAAS,CAACA,EAAM,MAAM,EAAI,CAAA,CAAE,EAAE,OAAO,OAAO,CAAC,IAAKiL,EAAKK,EAAS,WAAa,MAAQL,IAAO,OAAS,OAASA,EAAG,gBAAkB,CAAC,EACnTgB,EAAeF,GAAYC,EAC3B,CACE,SAAU,OAAOD,CAAQ,YACzB,UAAW,OAAOC,CAAS,WACvC,EACU,CACE,SAAU,OACV,UAAW,MACvB,EACUE,GAAUhB,EAAKlL,EAAM,UAAY,MAAQkL,IAAO,OAAS,OAASA,EAAG,KAAK,CAACiB,EAAGC,IAAMD,EAAE,MAAQC,EAAE,KAAK,EAAE,IAAK9mB,GAAS,GAAGA,EAAK,GAAG,IAAIA,EAAK,KAAK,GAAG,EAAE,KAAK,IAAI,EAC5J+mB,EAAsB,IAAM3uB,GAAQ,CAACkuB,GAAS5L,EAAM,OAASA,EAAM,OAAUtiB,EAAK,OAASsiB,EAAM,OAAUA,EAAM,MAAQ,OAAO,UAChIsM,EAAQJ,GAAUxuB,GAAQ+hB,GAAS,EAAK,GAAG,KAAK,MAAM,KAAK,IAAI4M,EAAmB,EAAI3uB,EAAK,KAAK,CAAC,CAAC,KAAO,OACzG,CAAE,MAAO6uB,EAAiB,UAAWC,EAAqB,GAAGC,CAAc,EAAK5B,GAAc,CAAA,EACpG,OAAQn3B,EAAM,cAAcA,EAAM,SAAU,KACxCA,EAAM,cAAc,MAAO,CAAE,IAAK+3B,EAAa,OAAQC,EAAc,QAASC,EAAe,QAAS1R,EAAS,UAAW,GAAO,UAAWqE,GAAKC,GAASkM,GAAgB,CAAE,EAAGmB,GAASrN,GAASkM,GAAiB,OAAO,CAAC,EAAGpO,IAAWH,IAAyBqC,GAASkM,GAAiB,SAAS,CAAC,EAAG+B,CAAmB,EAAG,MAAO,CAAE,GAAGP,EAAc,GAAGz0B,EAAO,GAAG+0B,CAAe,EAAI,GAAGE,EAAgB,KAAMtB,EAAKnL,EAAM,OAAS,MAAQmL,IAAO,OAASA,EAAK,GAAI,MAAOmB,EAAO,OAAQJ,EAAQ,IAAKlM,EAAM,GAAG,CAAE,EACpf3D,IAAWH,IAA0BxoB,EAAM,cAAc,MAAO,CAAE,UAAW6qB,GAASiM,GAAYrO,EAAwB,CAAC,CAAC,EACxHE,IAAWN,KAC2C6O,GAAO,YAAgBA,EAAO,YAAW,EAAOl3B,EAAM,cAAcuzB,GAAa,CAAE,UAAW3I,GAAKC,GAASN,EAAY,EAAGM,GAASiM,GAAYzO,EAAoB,CAAC,CAAC,CAAC,CAAE,GAC/NM,IAAWJ,KAC2C2O,GAAO,UAAcA,EAAO,YAAgBl3B,EAAM,cAAcyzB,GAAW,CAAE,UAAW7I,GAAKC,GAASN,EAAY,EAAGM,GAASiM,GAAYvO,EAAkB,CAAC,CAAC,CAAC,CAAE,EAAG,CAAE,CACxO,CAEA,MAAMyQ,GAAeh5B,EAAM,WAAW,SAAsB,CAAE,UAAAP,EAAW,SAAAH,EAAU,QAAA4wB,EAAS,OAAAC,EAAQ,GAAGyC,CAAI,EAAIjzB,EAAK,CAChH,MAAM8wB,EAAUzwB,EAAM,OAAO,IAAI,EAC3B,CAAE,iBAAAi5B,CAAgB,EAAKrJ,GAAc,EAC3C,OAAQ5vB,EAAM,cAAcwwB,GAAyB,CAAE,QAASC,CAAO,EACnEzwB,EAAM,cAAc,MAAO,CAAE,IAAKy1B,GAAW91B,EAAK8wB,CAAO,EAAG,UAAW7F,GAAKC,GAAS,MAAM,EAAGprB,CAAS,EAAG,GAAGw5B,EAAiB/I,EAASC,CAAM,EAAG,GAAGyC,GAAQtzB,CAAQ,CAAC,CAC5K,CAAC,EAED,IAAI45B,IACH,SAAUA,EAAY,CACnBA,EAAWA,EAAW,KAAU,CAAC,EAAI,OACrCA,EAAWA,EAAW,MAAW,CAAC,EAAI,QACtCA,EAAWA,EAAW,KAAU,CAAC,EAAI,OACrCA,EAAWA,EAAW,UAAe,CAAC,EAAI,WAC9C,GAAGA,KAAeA,GAAa,CAAA,EAAG,EAElC,SAASC,GAAiB5C,EAAkB6C,EAAeC,EAAeC,EAAa72B,EAAU,CAC7FzC,EAAM,UAAU,IAAOyC,EAEjB,IAAM,CAAE,EADR+oB,GAAQ+K,EAAiB5M,GAAuByP,CAAa,EAAG7C,EAAiB3M,GAAuByP,CAAa,EAAG9C,EAAiB1M,GAAqByP,CAAW,EAAG/C,EAAiBzM,GAAwBwP,CAAW,EAAG/C,EAAiBxM,GAAyBuP,CAAW,CAAC,EAC9Q,CAAC/C,EAAkB6C,EAAeC,EAAeC,EAAa72B,CAAQ,CAAC,CAC5F,CAEA,IAAI82B,IACH,SAAUA,EAAS,CAChBA,EAAQA,EAAQ,KAAU,CAAC,EAAI,OAC/BA,EAAQA,EAAQ,MAAW,CAAC,EAAI,QAChCA,EAAQA,EAAQ,KAAU,CAAC,EAAI,MACnC,GAAGA,KAAYA,GAAU,CAAA,EAAG,EAC5B,MAAMC,GAAkB,GACxB,SAASC,GAAgB,CAAE,uBAAAC,EAAwB,qBAAAC,CAAoB,EAAIpD,EAAkBqD,EAAcC,EAAgBC,EAAwBC,EAAcC,EAAiBC,EAAeC,EAAeC,EAAeC,EAAiBC,EAAaC,EAAgBC,EAAcC,EAAclqB,EAAS,CAC9S,MAAM2mB,EAASj3B,EAAM,OAAO,CAAC,EACvBy6B,EAAWz6B,EAAM,OAAO,EAAE,EAC1B06B,EAAgB16B,EAAM,OAAO,MAAS,EACtC26B,EAAY36B,EAAM,OAAO,CAAC,EAC1B46B,EAAU56B,EAAM,OAAOu5B,GAAQ,IAAI,EACnCsB,EAAe76B,EAAM,YAAaoK,GAAU,CAC1CswB,EAAc,UAAYtwB,EAAM,YAChCswB,EAAc,QAAU,OACxBE,EAAQ,QAAUrB,GAAQ,MAE9B,MAAMuB,EAAkBL,EAAS,QACjCK,EAAgB,OAAO,EAAGA,EAAgB,OAAQ,GAAGA,EAAgB,OAAQC,GAAMA,EAAE,YAAc3wB,EAAM,SAAS,CAAC,CACvH,EAAG,CAAA,CAAE,EACC4wB,EAAah7B,EAAM,YAAaoK,GAAU,CAC5CywB,EAAazwB,CAAK,EAClBA,EAAM,QAAO,EACbqwB,EAAS,QAAQ,KAAKrwB,CAAK,CAC/B,EAAG,CAACywB,CAAY,CAAC,EACXI,EAAgBj7B,EAAM,YAAaoK,GAAUqwB,EAAS,QAAQ,KAAK,CAAC,CAAE,UAAAS,CAAS,IAAO9wB,EAAM,YAAc8wB,CAAS,EAAG,EAAE,EACxH9B,EAAgB7D,GAAkBnrB,GAAU,CAC9C4wB,EAAW5wB,CAAK,CACpB,CAAC,EACK+wB,EAAuB,CAAC36B,EAAO46B,IAAehB,GAAmB55B,EAAQ46B,GAAejB,GAAiB35B,EAAQ,CAAC46B,EAClH9B,EAAc/D,GAAkBnrB,GAAU,CAC5C,MAAMixB,EAAUJ,EAAc7wB,CAAK,EACnC,GAAIixB,EACA,GAAIX,EAAc,UAAYtwB,EAAM,UAAW,CAC3C,MAAMqqB,EAAW,KAAK,IAAG,EAAKkG,EAAU,QAClCW,EAAgBrE,EAAO,QACzB2D,EAAQ,UAAYrB,GAAQ,MACxB,KAAK,IAAI+B,CAAa,EAAI,GAAMzB,GAC/B,KAAK,IAAIyB,CAAa,EAAI,GAAK7G,EAAWqF,EAC3CG,EAAcqB,EAAe7G,CAAQ,EAGrCyF,EAAcoB,CAAa,EAG1BV,EAAQ,UAAYrB,GAAQ,OAC7B4B,EAAqBG,EAAe,EAAI9B,EAAe,EACvDe,EAAae,EAAe7G,CAAQ,EAGpC+F,EAAac,CAAa,GAGlCrE,EAAO,QAAU,EACjB2D,EAAQ,QAAUrB,GAAQ,IAC9B,KACK,CACD,KAAM,CAAE,OAAAlvB,CAAM,EAAKD,EACfuvB,GACAtvB,aAAkB,aAClBA,IAAWgxB,EAAQ,SAClBhxB,EAAO,UAAU,SAASwgB,GAASzB,EAAW,CAAC,GAAK/e,EAAO,UAAU,SAASwgB,GAASxB,EAAmB,CAAC,IAC5G/Y,EAAO,CAEf,CAEJuqB,EAAazwB,CAAK,CACtB,CAAC,EACKivB,EAAgB9D,GAAkBnrB,GAAU,CAC9C,MAAMixB,EAAUJ,EAAc7wB,CAAK,EACnC,GAAIixB,EAAS,CACT,MAAME,EAAmBb,EAAc,UAAYtwB,EAAM,UACzD,GAAIA,EAAM,UAAY,EAAG,CACjBmxB,GAAoBtE,EAAO,UAAY,EACvCqC,EAAYlvB,CAAK,EAGjBywB,EAAaQ,CAAO,EAExB,MACJ,CACA,MAAMG,EAASpxB,EAAM,QAAUixB,EAAQ,QACjCI,EAASrxB,EAAM,QAAUixB,EAAQ,QACvC,GAAIX,EAAc,UAAY,OAAW,CACrC,MAAMgB,EAAgBC,GAAe,CACjCX,EAAW5wB,CAAK,EAChBswB,EAAc,QAAUtwB,EAAM,UAC9BuwB,EAAU,QAAU,KAAK,IAAG,EAC5BC,EAAQ,QAAUe,CACtB,EACI,KAAK,IAAIH,CAAM,EAAI,KAAK,IAAIC,CAAM,GAAK,KAAK,IAAID,CAAM,EAAIhC,IAAmBI,EAAa4B,CAAM,EAC3F9B,IACDgC,EAAanC,GAAQ,KAAK,EAC1BQ,EAAY,GAGX,KAAK,IAAI0B,CAAM,EAAI,KAAK,IAAID,CAAM,GAAKL,EAAqBM,EAAQjC,EAAe,IACxFkC,EAAanC,GAAQ,IAAI,EACzBc,EAAW,EAEnB,MACSkB,IACDX,EAAQ,UAAYrB,GAAQ,OAC5BtC,EAAO,QAAUuE,EACjBxB,EAAgBwB,CAAM,GAEjBZ,EAAQ,UAAYrB,GAAQ,OACjCtC,EAAO,QAAUwE,EACjBnB,EAAemB,CAAM,GAGjC,CACJ,CAAC,EACDtC,GAAiB5C,EAAkB6C,EAAeC,EAAeC,CAAW,CAChF,CAEA,SAASsC,GAAwB,CAAE,qBAAAC,EAAsB,qBAAAC,GAAyB,CAC9E,MAAMn8B,EAAMK,EAAM,OAAO,IAAI,EACvB8zB,EAAWyB,GAAkBnrB,GAAU,CACzC,MAAM2xB,EAAa,KAAK,IAAI3xB,EAAM,MAAM,EAAI,KAAK,IAAIA,EAAM,MAAM,GAC5D2xB,GAAcF,GAA0B,CAACE,GAAcD,GAAyB1xB,EAAM,UACvFA,EAAM,eAAc,CAE5B,CAAC,EACD,OAAOpK,EAAM,YAAa2iB,GAAS,CAC/B,IAAIyI,EACAzI,EACAA,EAAK,iBAAiB,QAASmR,EAAU,CAAE,QAAS,GAAO,GAG1D1I,EAAKzrB,EAAI,WAAa,MAAQyrB,IAAO,QAAkBA,EAAG,oBAAoB,QAAS0I,CAAQ,EAEpGn0B,EAAI,QAAUgjB,CAClB,EAAG,CAACmR,CAAQ,CAAC,CACjB,CAEA,SAASkI,GAAcC,EAAY1F,EAAkBqD,EAAcC,EAAgBC,EAAwBC,EAAcC,EAAiBC,EAAeC,EAAe,CACpK,MAAMjD,EAASj3B,EAAM,OAAO,CAAC,EACvBk8B,EAASl8B,EAAM,OAAO,CAAC,EACvBm8B,EAAgBn8B,EAAM,OAAO,MAAS,EACtCo8B,EAAep8B,EAAM,OAAO,MAAS,EACrCq8B,EAAer8B,EAAM,OAAO,CAAC,EAC7Bs8B,EAAsBt8B,EAAM,OAAO,MAAS,EAC5C26B,EAAY36B,EAAM,OAAO,CAAC,EAC1B,CAAE,WAAAq1B,EAAY,aAAAC,CAAY,EAAKnD,GAAW,EAC1CoK,EAA2Bv8B,EAAM,YAAY,IAAM,CACjDm8B,EAAc,UACd7G,EAAa6G,EAAc,OAAO,EAClCA,EAAc,QAAU,OAEhC,EAAG,CAAC7G,CAAY,CAAC,EACXkH,EAA0Bx8B,EAAM,YAAY,IAAM,CAChDo8B,EAAa,UACb9G,EAAa8G,EAAa,OAAO,EACjCA,EAAa,QAAU,OAE/B,EAAG,CAAC9G,CAAY,CAAC,EACXmH,EAAgBlH,GAAiB,IAAM,CACrC0G,IAAe/C,GAAW,QAC1BjC,EAAO,QAAU,EACjB0D,EAAU,QAAU,EACpB4B,EAAwB,EACxBC,EAAuB,EAE/B,CAAC,EACDx8B,EAAM,UAAUy8B,EAAe,CAACR,EAAYQ,CAAa,CAAC,EAC1D,MAAMC,EAAoBnH,GAAkBoH,GAAuB,CAC/DP,EAAa,QAAU,OACnBnF,EAAO,UAAY0F,GACnBzC,EAAcjD,EAAO,OAAO,CAEpC,CAAC,EACK2F,EAAUrH,GAAkBnrB,GAAU,CAIxC,GAHIA,EAAM,SAGN,KAAK,IAAIA,EAAM,MAAM,EAAI,KAAK,IAAIA,EAAM,MAAM,EAC9C,OAEJ,MAAMyyB,EAAmBC,GAAY,CACjCT,EAAa,QAAUS,EACvBxH,EAAagH,EAAoB,OAAO,EACxCA,EAAoB,QAChBQ,EAAU,EACJzH,EAAW,IAAM,CACfgH,EAAa,QAAU,EACvBC,EAAoB,QAAU,MAClC,EAAG,GAAG,EACJ,MACd,EACA,GAAIL,IAAe/C,GAAW,KAAM,CAChC,GAAI,KAAK,IAAI9uB,EAAM,MAAM,GAAK,IAAM,KAAK,IAAIiyB,EAAa,OAAO,EAAG,CAChEQ,EAAgBzyB,EAAM,MAAM,EAC5B,MACJ,CACA,GAAI,CAACwvB,EAAa,CAACxvB,EAAM,MAAM,EAC3B,OAIJ,GAFA8xB,EAAO,SAAW9xB,EAAM,OACxBmyB,EAAwB,EACpB,KAAK,IAAIL,EAAO,OAAO,EAAI,GAC3BA,EAAO,QAAU,EACjBW,EAAgB,CAAC,EACjBlC,EAAU,QAAU,KAAK,IAAG,EAC5BZ,EAAY,MAEX,CACD,MAAMgD,EAAqBb,EAAO,QAClCC,EAAc,QAAU9G,EAAW,IAAM,CACrC8G,EAAc,QAAU,OACpBY,IAAuBb,EAAO,UAC9BA,EAAO,QAAU,EAEzB,EAAGpC,CAAsB,CAC7B,CACJ,SACSmC,IAAe/C,GAAW,MAAO,CACtC,IAAI8D,EAAiB/F,EAAO,QAAU7sB,EAAM,OAK5C,GAJA4yB,EAAiB,KAAK,IAAI,KAAK,IAAIA,CAAc,EAAGnD,CAAc,EAAI,KAAK,KAAKmD,CAAc,EAC9F/F,EAAO,QAAU+F,EACjBhD,EAAgBgD,CAAc,EAC9BR,EAAuB,EACnB,KAAK,IAAIQ,CAAc,EAAI,GAAMnD,EAAgB,CACjDgD,EAAgBzyB,EAAM,MAAM,EAC5B6vB,EAAc+C,EAAgB,KAAK,IAAG,EAAKrC,EAAU,OAAO,EAC5D,MACJ,CACAyB,EAAa,QAAU/G,EAAW,IAAMqH,EAAkBM,CAAc,EAAG,EAAIlD,CAAsB,CACzG,MAEI+C,EAAgBzyB,EAAM,MAAM,CAEpC,CAAC,EACDpK,EAAM,UAAU,IAAMu2B,EAAiBrM,GAAgB0S,CAAO,EAAG,CAACrG,EAAkBqG,CAAO,CAAC,CAChG,CAEA,MAAMK,GAAqBhS,GAAkB,WAAW,EAClDiS,GAAoBl9B,EAAM,cAAc,IAAI,EAC5Cm9B,GAAgBxR,GAAe,gBAAiB,oBAAqBuR,EAAiB,EAC5F,SAASE,GAAW,CAAE,SAAA99B,EAAU,GAAGI,GAAS,CACxC,IAAI0rB,EACJ,KAAM,CAAE,SAAA0C,EAAU,UAAAiE,EAAW,WAAAsL,EAAY,GAAAC,EAAI,OAAAzK,EAAQ,OAAAqE,CAAM,EAAKx3B,EAC1D,CAAE,cAAA69B,EAAe,gBAAAC,EAAiB,qBAAA3B,EAAsB,qBAAAC,CAAoB,EAAKuB,EACjF,CAACI,EAAcC,CAAe,EAAI19B,EAAM,SAAQ,EAChD4lB,EAAQ0L,GAAgB,EACxBW,EAAWT,GAAmB,EAC9B,CAACyK,EAAY0B,CAAa,EAAI39B,EAAM,SAASk5B,GAAW,IAAI,EAC5D0E,EAAc59B,EAAM,OAAO,CAAC,EAC5B69B,EAAa79B,EAAM,OAAO,CAAC,EAC3B89B,EAAc99B,EAAM,OAAO,CAAC,EAC5B,CAAE,gBAAAs2B,EAAiB,iBAAAC,CAAgB,EAAKJ,GAAU,EAClD,CAAE,UAAApQ,EAAW,QAAA4R,CAAO,EAAK/G,GAAS,EAClCmN,EAA4B5I,GAAQ,EACpC6I,EAAqB7I,GAAQ,EAC7B8I,EAAoB9I,GAAQ,EAC5B,CAAE,aAAA9rB,EAAc,gBAAA60B,EAAiB,cAAAtR,CAAa,EAAKkI,GAAgB,EACnEqJ,EAAqB1I,GAAWmG,GAAwB,CAAE,qBAAAC,EAAsB,qBAAAC,CAAoB,CAAE,EAAGoC,CAAe,EACxHE,EAAcp+B,EAAM,OAAO,IAAI,EAC/Bq+B,EAAiB5I,GAAW2I,EAAa,MAAS,EAClD,CAAE,iBAAA1N,CAAgB,EAAKH,GAAkB,EACzC0F,EAAQD,GAAM,EACdsI,EAAO99B,IAAWy1B,EAAQ,GAAK,IAAM,OAAOz1B,GAAU,SAAWA,EAAQ,GACzEs1B,EAAQP,GAAiB,IAAM,CAAE,IAAInK,EAAI,OAAQA,EAAK/hB,EAAa,WAAa,MAAQ+hB,IAAO,OAAS,OAASA,EAAG,MAAK,CAAI,CAAC,EAC9HmT,EAAmBhJ,GAAiB,IAAM71B,CAAK,EAC/C8+B,EAAmBjJ,GAAiB,IAAM3P,CAAK,EAC/C9e,EAAO9G,EAAM,YAAasE,GAAWqzB,EAAQpO,GAAajlB,CAAM,EAAG,CAACqzB,CAAO,CAAC,EAC5E8G,EAAOz+B,EAAM,YAAasE,GAAWqzB,EAAQnO,GAAallB,CAAM,EAAG,CAACqzB,CAAO,CAAC,EAC5E+G,GAAQ1+B,EAAM,YAAY,IAAM23B,EAAQjO,EAAY,EAAG,CAACiO,CAAO,CAAC,EAChEiC,GAAgB3C,GAAW,EAAEnJ,EAAS,SACtCwQ,EAAIrH,CAAM,EAAI,GAAKrR,EAAM,eAAiB,GACvC0Y,EAAIrH,CAAM,EAAI,GAAKrR,EAAM,eAAiBA,EAAM,OAAO,OAAS,IACnE+Y,GAAkB1H,GAAW,CAC/B,IAAI7L,GACJwS,EAAY,QAAU3G,GACrB7L,GAAK/hB,EAAa,WAAa,MAAQ+hB,KAAO,QAAkBA,GAAG,MAAM,YAAYN,GAAO,cAAc,EAAG,GAAG,KAAK,MAAMmM,CAAM,CAAC,IAAI,CAC3I,EACM2H,EAAiB3H,GAAW,CAC9B,IAAI7L,GAAIyI,GACRgK,EAAW,QAAU5G,EACrB6G,EAAY,SAAW,IAAM,CAGzB,MAAMe,GACErB,GAAmBvG,EAAS,EACrBA,EACPsG,GAAiBtG,EAAS,EACnB,CAACA,EACL,EAEX,OAAO,KAAK,IAAI,KAAK,IAAIjL,GAAM,EAAK6S,GAAc,IAAc,EAAI,IAAa,CAAC,EAAG,EAAU,EAAG,CAAC,CACvG,GAAC,GACAzT,GAAK/hB,EAAa,WAAa,MAAQ+hB,KAAO,QAAkBA,GAAG,MAAM,YAAYN,GAAO,aAAa,EAAG,GAAG,KAAK,MAAMmM,CAAM,CAAC,IAAI,GACrIpD,GAAKxqB,EAAa,WAAa,MAAQwqB,KAAO,QAAkBA,GAAG,MAAM,YAAY/I,GAAO,cAAc,EAAG,GAAGgT,EAAY,OAAO,EAAE,CAC1I,EACM,CAAE,iBAAkBgB,IAAyB1K,GAAagK,EAAa,CAAC9J,EAAUtqB,GAAM+0B,KAAc,CACxG,GAAIX,EAAY,SAAWxR,EACvB,MAAO,CACH,UAAW,CACP,CACI,UAAW,gBAAgB0H,EAAS,KAAK,EAAItqB,GAAK,EAAI+0B,GAAU,CAAC,MACjE,QAASzK,EAAS,OAC1C,EACoB,CAAE,UAAW,kBAAmB,QAAS,CAAC,CAC9D,EACgB,SAAUA,EAAS,SACnB,OAAQvC,EAAU,OAAO,IACzC,CAGI,CAAC,EACKiN,GAAO,CAAC/H,EAAQgI,KAAW,CAC7B,GAAI1B,GAAiBC,EAAiB,CAClCoB,EAAc3H,CAAM,EACpB,IAAIxC,GAAW,EACX2J,EAAY,UACZ3J,GAAW1C,EAAU,MAAQkN,GAAS,EAAI,GAC1CH,GAAqB,CACjB,KAAMV,EAAY,QAAQ,sBAAqB,EAC/C,QAASN,EAAY,QACrB,SAAArJ,EACpB,CAAiB,GAELwJ,EAAkB,IAAM,CACpBW,EAAc,CAAC,EACfjB,EAAczE,GAAW,IAAI,CACjC,EAAGzE,EAAQ,EACXkJ,EAAczE,GAAW,SAAS,EAC7B+F,IACDP,GAAK,CAEb,CACJ,EACM,CAAE,iBAAAQ,GAAkB,mBAAAC,IAAuB/K,GAAagK,EAAa,CAAC9J,EAAUtqB,GAAM+0B,KAAc,CACtG,IAAI3T,GACJ,GAAIgT,EAAY,SAAWxR,IAAmB,GAAAxB,GAAKxF,EAAM,aAAe,MAAQwF,KAAO,SAAkBA,GAAG,UAAW,CACnH,MAAMgU,GAAgB3S,GAAsBqB,EAAS,OAAO,EACtDuR,IAAgBD,GAAc,QAAWA,GAAc,QAAUxS,EAAc,MAAS,IAAMwS,GAAc,QAAU,EAC5H,MAAO,CACH,UAAW,CACP,CACI,UAAW,aAAad,EAAI1Y,EAAM,YAAc0O,EAAS,KAAK,GAAK1H,EAAc,MAAQyS,IACrF/K,EAAS,KAAK,EACdtqB,GAAK,EACL+0B,GAAU,CAAC,QACvC,EACoB,CAAE,UAAW,iBAAiB,CAClD,EACgB,SAAUnZ,EAAM,UAAU,SAC1B,OAAQA,EAAM,UAAU,MACxC,CACQ,CAEJ,CAAC,EACK0Z,GAAQ/J,GAAkB7D,GAAW,CACvC,IAAItG,GAAIyI,GACR,MAAM8I,GAAqBjL,EAAO,QAAU,EACtC6N,GAAiB5C,GAAsG5K,EAAU,OAAzF3G,GAAK2G,EAAU,cAAgB,MAAQ3G,KAAO,OAASA,GAAK2G,EAAU,MAC9GyN,GAAc,CAAC7C,IAAsB,CAACwC,GAAkB,EAAKpN,EAAU,OAAO,WAAaA,EAAU,OAAO,MAClH,GAAI,CAAE,UAAA0N,EAAS,EAAK/N,EACpB,MAAMgO,IAAS7L,GAAKnC,EAAO,SAAW,MAAQmC,KAAO,OAASA,GAAK,EACnE,IAAI8L,GAAgBzG,GAAW,UAC3B0G,GAA4BL,GAAgBG,GAChD,GAAI,CAACD,GAAW,CACZ,MAAM5F,GAA+EjN,GAAc,MAC7FiT,GAAcnO,EAAO,UAAY,EACjCoO,GAAejG,GACd0F,GAAgB1F,GAAkB,KAAK,IAAI8C,EAAkB,EAC9D4C,GACFG,KAAU,GACNG,GAAcC,GACdF,GACKA,GAA4BE,GAAgB,KAAK,IAAID,GAAaC,GAAe,CAAC,EAElFjG,KACL+F,GACKL,GAAgB1F,IAAmBA,GAAiB,KAAK,IAAI8C,EAAkB,IAExF8C,GAAYnB,EAAI3B,EAAkB,EAAI,EAAIpT,GAAcC,IAGxDoW,GAA4BL,GAAgB,CAEpD,CACA,IAAI5N,EAAY,EACZ8N,KAAclW,GACVqQ,GAAa0E,EAAI,CAAC,CAAC,EACnB3M,EAAY,CAAC+N,IAGbC,GAAgBzG,GAAW,KAC3B0G,GAA4BL,IAG3BE,KAAcjW,KACfoQ,GAAa0E,EAAI,EAAE,CAAC,EACpB3M,EAAY+N,IAGZC,GAAgBzG,GAAW,KAC3B0G,GAA4BL,KAGpCK,GAA4B,KAAK,MAAMA,EAAyB,EAChE5B,EAAmB,IAAM,CACrBW,GAAe,CAAC,EAChBhB,EAAczE,GAAW,IAAI,CACjC,EAAG0G,EAAyB,EACxBxB,EAAY,SACZc,GAAiB,CACb,KAAMd,EAAY,QAAQ,sBAAqB,EAC/C,MAAOxY,EAAM,WAC7B,CAAa,EAEL+X,EAAcgC,EAAa,EAC3BhI,EAAQlO,GAAc,CAClB,KAAM,QACN,UAAAkI,EACA,SAAUiO,GACV,OAAQJ,EACpB,CAAS,CACL,CAAC,EACDx/B,EAAM,UAAU,IAAM,CAClB,IAAIorB,EAAIyI,GACF,GAAAzI,EAAKxF,EAAM,aAAe,MAAQwF,IAAO,SAAkBA,EAAG,YAAgB,GAAAyI,GAAKjO,EAAM,aAAe,MAAQiO,KAAO,SAAkBA,GAAG,WAC9IkK,EAA0B,IAAM9L,EAAS,CAAE,KAAM,QAAS,UAAW,EAAG,EAAGrM,EAAM,UAAU,QAAQ,CAE3G,EAAG,CAACA,EAAM,UAAWqM,EAAU8L,CAAyB,CAAC,EACzD,MAAMgC,GAAc,CAChBxJ,EACAqD,GAC+DhN,GAAc,OAAU,EACvFmF,EAAU,MACV,IAAM4L,EAAczE,GAAW,KAAK,EACnCjC,GAAW0H,GAAe1H,CAAM,EACjC,CAACA,EAAQxC,KAAa6K,GAAM,CAAE,OAAArI,EAAQ,SAAAxC,GAAU,MAAO,EAAG,EACzDwC,GAAWqI,GAAM,CAAE,OAAArI,EAAQ,MAAO,CAAC,CAAE,CAC9C,EACU+I,GAAa,CACf,IAAM,CACExC,GACAG,EAAczE,GAAW,IAAI,CAErC,EACCjC,GAAW2H,EAAc3H,CAAM,EAC/BA,GAAW+H,GAAK/H,CAAM,EACtBA,GAAW+H,GAAK/H,EAAQ,EAAI,CACrC,EACIwC,GAAgB4D,EAAY,GAAG0C,GAAaxC,EAAeC,EAAiB,GAAGwC,GAAYtB,EAAK,EAChG1C,GAAcC,EAAY,GAAG8D,EAAW,EACxC,MAAME,GAAe1K,GAAiB,IAAM,CACpC8H,EAAW,OACX3M,IAAmB,cAAc,IAAI7F,GAAShD,EAAa,CAAC,KAAKgD,GAASoS,IAAoB,CAAC,EAAE,GACjGnH,EAAK,CAEb,CAAC,EACD91B,EAAM,UAAUigC,GAAc,CAACA,EAAY,CAAC,EAC5C,MAAMC,GAAiB3K,GAAiB,IAAM,CAC1C,IAAInK,GACHA,EAAKkS,EAAG,QAAU,MAAQlS,IAAO,QAAkBA,EAAG,KAAKkS,EAAI,CAAE,MAAO1X,EAAM,YAAY,CAAE,CACjG,CAAC,EACD5lB,EAAM,UAAUkgC,GAAgB,CAACta,EAAM,YAAasa,EAAc,CAAC,EACnElgC,EAAM,UAAU,IAAMwrB,GAAQzF,EAAUwD,GAAcmI,GAAW4N,GAAM,CAAE,UAAW/V,GAAa,GAAGmI,CAAM,CAAE,CAAC,EAAG3L,EAAUyD,GAAckI,GAAW4N,GAAM,CAAE,UAAW9V,GAAa,GAAGkI,CAAM,CAAE,CAAC,EAAG3L,EAAU0D,GAAeiI,GAAWO,EAASP,CAAM,CAAC,CAAC,EAAG,CAAC3L,EAAWuZ,GAAOrN,CAAQ,CAAC,EACtR,MAAMpG,GAAU7rB,EAAM,QAAQ,KAAO,CACjC,KAAA8G,EACA,KAAA23B,EACA,MAAAC,GACA,MAAA5I,EACA,UAAWlJ,EAAgBD,GAAiBC,EAAekB,EAAS,OAAO,EAAI,CAAE,MAAO,EAAG,OAAQ,CAAC,EACpG,cAAelB,GAAiB,CAAE,MAAO,EAAG,OAAQ,CAAC,EACrD,iBAAA2J,EACA,aAAAltB,EACA,eAAAg1B,EACA,aAAAZ,EACA,gBAAAC,CACR,GAAQ,CACA52B,EACA23B,EACAC,GACA5I,EACAS,EACA3J,EACAvjB,EACAg1B,EACAZ,EACAC,EACA5P,EAAS,OACjB,CAAK,EACD9tB,OAAAA,EAAM,oBAAoBq9B,EAAW,IAAK,KAAO,CAC7C,KAAAv2B,EACA,KAAA23B,EACA,MAAAC,GACA,MAAA5I,EACA,iBAAAyI,EACA,iBAAAC,CACR,GAAQ,CAAC13B,EAAM23B,EAAMC,GAAO5I,EAAOyI,EAAkBC,CAAgB,CAAC,EAC1Dx+B,EAAM,cAAc,MAAO,CAAE,IAAKm+B,EAAoB,UAAWvT,GAAKC,GAASoS,GAAkB,CAAE,EAAGpS,GAAS5B,EAAiB,CAAC,EAAG,MAAO,CAC3I,GAAIgT,IAAe/C,GAAW,MACxB,CAAE,CAACpO,GAAO,cAAc,CAAC,EAAG,GAAG,KAAK,MAAM8S,EAAY,OAAO,CAAC,IAAI,EAClE,KACN,GAAI3B,IAAe/C,GAAW,KACxB,CACE,CAACpO,GAAO,aAAa,CAAC,EAAG,GAAG,KAAK,MAAM+S,EAAW,OAAO,CAAC,KAC1D,CAAC/S,GAAO,cAAc,CAAC,EAAG,GAAGgT,EAAY,OAAO,EACpE,EACkB,KACN,GAAIT,EAAW,cAAgB,OAAS,CAAE,CAACvS,GAAO,yBAAyB,CAAC,EAAGuS,EAAW,WAAW,EAAK,KAC1G,GAAGxK,EAAO,SACtB,EAAW,SAAU,GAAI,GAAGyD,CAAe,EAAI1J,GAAkB5sB,EAAM,cAAck9B,GAAkB,SAAU,CAAE,MAAOrR,EAAO,EACzHvsB,GAAW8rB,EAAK8L,EAAO,YAAc,MAAQ9L,IAAO,OAAS,OAC7DA,EAAG,KAAK8L,CAAM,CAAC,CAAE,CACzB,CACA,MAAMiJ,GAAmB9R,GAAa3G,GAAmB0V,EAAU,EAEnE,SAASgD,GAAY5/B,EAAO,CACxB,OAAOuqB,GAActD,GAAiBjnB,CAAK,CAC/C,CACA,SAAS6/B,GAAe7/B,EAAO,CAC3B,OAAOuqB,GAAc3B,GAAa5oB,CAAK,CAC3C,CACA,SAAS8/B,GAAc,CAAE,MAAAlU,EAAO,OAAA6K,GAAU,CACtC,MAAM5tB,EAAerJ,EAAM,OAAO,IAAI,EAChC,CAAE,aAAA6xB,EAAc,OAAAvG,CAAM,EAAKgG,GAAgB,EAC3C,CAAE,UAAAiP,EAAW,MAAAzK,CAAK,EAAKqH,GAAa,EACpC,CAAE,OAAAjG,EAAQ,SAAU,CAAE,SAAA3K,EAAU,WAAA4K,CAAU,EAAI,GAAI,CAAE,MAAO5Q,CAAO,EAAI,OAAQ,CAAE,MAAOziB,CAAK,EAAI,OAAAqjB,CAAM,EAAMgK,GAAgB,EAC5H,CAAE,iBAAAT,CAAgB,EAAKH,GAAkB,EACzCiQ,EAAYvJ,IAAW,EAC7Bj3B,EAAM,UAAU,IAAM,CAClB,IAAIorB,EACAoV,IAAe,GAAApV,EAAK/hB,EAAa,WAAa,MAAQ+hB,IAAO,SAAkBA,EAAG,SAASsF,EAAgB,EAAG,aAAa,IAC3HoF,EAAK,CAEb,EAAG,CAAC0K,EAAW1K,EAAOpF,CAAgB,CAAC,EACvC,MAAM+P,EAAc,IAAM,CACtB,IAAIrV,EAAIyI,EAAIU,EAAI8C,EAChB,IAAIqJ,GAAYtV,EAAK8L,EAAO,SAAW,MAAQ9L,IAAO,OAAS,OAASA,EAAG,KAAK8L,EAAQ,CAAE,MAAA9K,EAAO,OAAA6K,EAAQ,KAAMsJ,EAAW,EAC1H,MAAI,CAACG,GAAYvU,GAAaC,CAAK,IAC/BsU,EAAY1gC,EAAM,cAAcg3B,GAAY,CAAE,MAAO5K,EAAO,OAAQ6K,EAAQ,OAAQC,EAAQ,KAAMqJ,EAAW,SAAUhU,EAAU,WAAY4K,EAAY,QAAUqJ,EAAuG,OAA3F,IAAwDja,IAAQ,CAAE,MAAOsL,CAAY,CAAE,CAAa,CAAE,GAElR6O,EAAY1gC,EAAM,cAAcA,EAAM,SAAU,MAAO6zB,EAAKqD,EAAO,eAAiB,MAAQrD,IAAO,OAAS,OAC/GA,EAAG,KAAKqD,EAAQ,CAAE,MAAA9K,CAAK,CAAE,IACvBmI,EAAK2C,EAAO,kBAAoB,MAAQ3C,IAAO,OAASA,GAAM,CAAC,CAAE,SAAAj1B,CAAQ,IAAOA,IAAW,CAAE,MAAA8sB,EAAO,SAAUsU,CAAQ,CAAE,GAAIrJ,EAAKH,EAAO,eAAiB,MAAQG,IAAO,OAAS,OACnLA,EAAG,KAAKH,EAAQ,CAAE,MAAA9K,CAAK,CAAE,CAAC,EAAK,IACvC,EACA,OAAQpsB,EAAM,cAAc,MAAO,CAAE,IAAKqJ,EAAc,UAAWuhB,GAAKC,GAASwV,GAAc,CAAE,EAAG,CAACG,GAAa3V,GAASwV,GAAe,SAAS,CAAC,EAAGxV,GAAS5B,EAAiB,CAAC,EAAG,GAAGgF,GAAcuS,CAAS,EAAG,MAAO18B,EAAO,KAAM,QAAS,uBAAwBonB,GAAe/D,EAAQ,OAAO,EAAG,aAAckE,GAAsBlE,EAAQmE,EAAQuG,EAAeoF,CAAM,GAAKwJ,GAAa,CACvY,CACA,SAASE,IAAc,CACnB,MAAM78B,EAAQqtB,KAAmB,OAAO,MACxC,OAAOnxB,EAAM,cAAc,MAAO,CAAE,UAAW6qB,GAASzB,EAAW,EAAG,MAAOtlB,EAAO,CACxF,CACA,SAAS88B,GAAS,CAAE,SAAA9S,EAAU,OAAA3G,GAAU,CACpC,KAAM,CAAE,OAAAmE,EAAQ,aAAAuG,EAAc,YAAAD,CAAW,EAAKN,GAAgB,EACxD,CAAE,eAAA+M,CAAc,EAAKlB,GAAa,EAClC,CAAE,YAAAnN,EAAa,YAAAF,CAAW,EAAKF,GAAc,EAC7CyP,EAAe5S,GAAsBqB,EAAS,OAAO,EACrDhB,EAAeL,GAAsBqB,EAAS,OAAO,EACrD+S,EAAUhT,GAAiBC,EAAUxC,EAAQ,CAAC,EAC9CwV,EAAQ,CAAA,EACd,GAAI5T,GAAU5B,CAAM,EAChB,QAAShU,EAAQua,EAAegP,EAASvpB,GAASua,EAAegP,EAASvpB,GAAS,EAAG,CAClF,MAAM8U,EAAQe,GAAS7B,EAAQhU,CAAK,EAC9BxU,EAAM8uB,EAAcC,EAAeva,EACnC9U,EAAcsrB,EAAS,SAAWxW,EAAQ,GAAKA,EAAQgU,EAAO,OAAS,GAC7EwV,EAAM,KAAMt+B,EAMN,CAAE,IAAAM,CAAG,EALL,CACE,IAAK,CAAC,GAAGA,CAAG,GAAIuqB,GAAYjB,CAAK,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC5D,OAAQ9U,EAAQua,EAChB,MAAAzF,CACpB,CACyB,CACjB,CAEJ,OAAQpsB,EAAM,cAAc,MAAO,CAAE,IAAKq+B,EAAgB,UAAWzT,GAAKC,GAASuV,GAAW,CAAE,EAAGU,EAAM,OAAS,GAAKjW,GAASuV,GAAY,aAAa,CAAC,CAAC,EAAG,MAAO,CAC7J,CAAC,GAAGtV,GAAOsV,GAAY,cAAc,CAAC,CAAC,EAAE,EAAGU,EAAM,OAClD,CAAC,GAAGhW,GAAOsV,GAAY,YAAY,CAAC,CAAC,EAAE,EAAGf,EAAa,OAAS,EAChE,CAAC,GAAGvU,GAAOsV,GAAY,iBAAiB,CAAC,CAAC,EAAE,EAAGf,EAAa,SAAW,EACvE,CAAC,GAAGvU,GAAOsV,GAAY,YAAY,CAAC,CAAC,EAAE,EAAGtT,EAAa,OAAS,EAChE,CAAC,GAAGhC,GAAOsV,GAAY,iBAAiB,CAAC,CAAC,EAAE,EAAGtT,EAAa,SAAW,CACnF,EAAW,KAAM,SAAU,YAAakD,GAAe,CAACF,EAAc,MAAQ,SAAU,uBAAwB5E,GAAe/D,EAAQ,UAAU,EAAG,aAAc+D,GAAe/D,EAAQ,eAAe,GAAK2Z,EAAM,IAAI,CAAC,CAAE,IAAAh+B,EAAK,MAAAspB,EAAO,OAAA6K,CAAM,IAAO7K,EAAQpsB,EAAM,cAAcsgC,GAAe,CAAE,IAAKx9B,EAAK,MAAOspB,EAAO,OAAQ6K,CAAM,CAAE,EAAIj3B,EAAM,cAAc2gC,GAAa,CAAE,IAAK79B,CAAG,CAAE,CAAC,CAAC,CAC3X,CACA,MAAMi+B,GAAiB1S,GAAa5G,GAAiBmZ,EAAQ,EAE7D,SAASI,IAAqB,CAC1B,KAAM,CAAE,SAAAlT,CAAQ,EAAKqD,GAAgB,EAC/B,CAAE,OAAA7F,EAAQ,aAAAuG,CAAY,EAAKP,GAAgB,EAC3C2P,EAAe3V,EAAO,SAAW,GAAMwC,EAAS,QAAU+D,IAAiB,EAC3EqP,EAAe5V,EAAO,SAAW,GAAMwC,EAAS,QAAU+D,IAAiBvG,EAAO,OAAS,EACjG,MAAO,CAAE,aAAA2V,EAAc,aAAAC,CAAY,CACvC,CAEA,SAASC,GAAsB5K,EAAkB,CAC7C,IAAInL,EACJ,MAAM6K,EAAQD,GAAM,EACd,CAAE,QAAA2B,CAAO,EAAK/G,GAAS,EACvB,CAAE,UAAAmB,CAAS,EAAKZ,GAAgB,EAChC,CAAE,aAAA8P,EAAc,aAAAC,CAAY,EAAKF,GAAkB,EACnDI,IAAahW,EAAK2G,EAAU,cAAgB,MAAQ3G,IAAO,OAASA,EAAK2G,EAAU,OAAS,EAC5FjrB,EAAO4vB,GAAY,IAAMiB,EAAQpO,EAAW,EAAG6X,CAAQ,EACvD3C,EAAO/H,GAAY,IAAMiB,EAAQnO,EAAW,EAAG4X,CAAQ,EACvD92B,EAAgBirB,GAAkBnrB,GAAU,CAC9C,OAAQA,EAAM,IAAG,CACb,KAAK+f,GACDwN,EAAQjO,EAAY,EACpB,MACJ,KAAKU,IACK6L,EAAQiL,EAAeD,KACxBhL,EAAQwI,EAAO33B,GAAI,EACxB,MACJ,KAAKujB,IACK4L,EAAQgL,EAAeC,KACxBjL,EAAQnvB,EAAO23B,GAAI,EACxB,KAEhB,CACI,CAAC,EACDz+B,EAAM,UAAU,IAAMu2B,EAAiBvM,GAAmB1f,CAAa,EAAG,CAACisB,EAAkBjsB,CAAa,CAAC,CAC/G,CAEA,SAAS+2B,GAAiB,CAAE,MAAAjhC,EAAO,KAAA4yB,EAAM,WAAAL,EAAY,OAAAjB,EAAQ,QAAAnL,EAAS,SAAA9jB,EAAU,MAAAqB,GAAS,CACrF,OAAQ9D,EAAM,cAAc0yB,GAAY,CAAE,MAAOtyB,EAAO,KAAM4yB,EAAM,WAAYL,EAAY,UAAW9H,GAAS,cAAc6G,CAAM,EAAE,EAAG,SAAUjvB,EAAU,QAAS8jB,EAAS,MAAOziB,EAAO,GAAG+xB,GAAasH,GAAa,EAAG,MAAO16B,CAAQ,CAAC,CAAE,CACnP,CACA,SAAS6+B,GAAW,CAAE,OAAQ,CAAE,WAAAC,EAAY,WAAAC,EAAY,SAAAC,EAAU,SAAAC,GAAY,OAAA7O,GAAU,CACpF,KAAM,CAAE,KAAA/rB,EAAM,KAAA23B,EAAM,iBAAAlI,CAAgB,EAAK4G,GAAa,EAChD,CAAE,aAAA8D,EAAc,aAAAC,CAAY,EAAKF,GAAkB,EACzD,OAAAG,GAAsB5K,CAAgB,EAC9Bv2B,EAAM,cAAcA,EAAM,SAAU,KACxCuhC,EAAcA,IAAiBvhC,EAAM,cAAcqhC,GAAkB,CAAE,MAAO,WAAY,OAAQ9X,GAAa,KAAM8J,GAAc,WAAYoO,EAAU,MAAO5O,EAAO,eAAgB,SAAUoO,EAAc,QAASn6B,CAAI,CAAE,EAC9N06B,EAAcA,EAAU,EAAOxhC,EAAM,cAAcqhC,GAAkB,CAAE,MAAO,OAAQ,OAAQ7X,GAAa,KAAM8J,GAAU,WAAYoO,EAAU,MAAO7O,EAAO,eAAgB,SAAUqO,EAAc,QAASzC,CAAI,CAAE,CAAE,CAChO,CACA,MAAMkD,GAAmBtT,GAAa1G,GAAmB2Z,EAAU,EAE7DM,GAAW/W,GAAS3B,EAAe,EACnC2Y,GAAkBhX,GAAS1B,EAAuB,EACxD,SAAS2Y,GAActnB,EAAS,CAC5B,MAAO,UAAWA,CACtB,CACA,SAASunB,GAAavnB,EAASqS,EAASyR,EAAK,CACzC,MAAMzL,EAAS,OAAO,iBAAiBrY,CAAO,EACxCM,EAAWwjB,EAAM,eAAiB,gBAClC0D,EAAgB1D,EAAMzL,EAAO,YAAcA,EAAO,aAClDoP,EAAgBznB,EAAQ,MAAM,iBAAiBM,CAAQ,EAC7D,OAAAN,EAAQ,MAAM,YAAYM,EAAU,IAAI0R,GAASwV,CAAa,GAAK,GAAKnV,CAAO,IAAI,EAC5E,IAAM,CACLoV,EACAznB,EAAQ,MAAM,YAAYM,EAAUmnB,CAAa,EAGjDznB,EAAQ,MAAM,eAAeM,CAAQ,CAE7C,CACJ,CACA,SAASonB,GAAS,CAAE,SAAU,CAAE,SAAAz/B,CAAQ,EAAI,SAAAnD,CAAQ,EAAI,CACpD,MAAMg/B,EAAMtI,GAAM,EACZ,CAAE,iBAAAtF,EAAkB,eAAAyR,CAAc,EAAK5R,GAAkB,EAC/DvwB,OAAAA,EAAM,UAAU,IAAM,CAClB,GAAIyC,EACA,MAAO,IAAM,CAAE,EACnB,MAAM+oB,EAAU,CAAA,EACV4W,EAAcD,EAAc,EAC5B,CAAE,KAAAhf,EAAM,gBAAAkf,CAAe,EAAK3R,EAAgB,EAC5C4R,EAAY,KAAK,MAAMF,EAAY,WAAaC,EAAgB,WAAW,EACjF,GAAIC,EAAY,EAAG,CACf9W,EAAQ,KAAKuW,GAAa5e,EAAMmf,EAAWhE,CAAG,CAAC,EAC/C,MAAMiE,EAAWpf,EAAK,qBAAqB,GAAG,EAC9C,QAAS,EAAI,EAAG,EAAIof,EAAS,OAAQ,GAAK,EAAG,CACzC,MAAM/nB,EAAU+nB,EAAS,CAAC,EACtBT,GAActnB,CAAO,GACrB4nB,EAAY,iBAAiB5nB,CAAO,EAAE,iBAAiB,UAAU,IAAM,SACvE,CAACA,EAAQ,UAAU,SAASqnB,EAAe,GAC3CrW,EAAQ,KAAKuW,GAAavnB,EAAS8nB,EAAWhE,CAAG,CAAC,CAE1D,CACJ,CACA,OAAAnb,EAAK,UAAU,IAAIye,EAAQ,EACpB,IAAM,CACTze,EAAK,UAAU,OAAOye,EAAQ,EAC9BpW,EAAQ,QAASgX,GAAUA,EAAK,CAAE,CACtC,CACJ,EAAG,CAAClE,EAAK77B,EAAUiuB,EAAkByR,CAAc,CAAC,EAC7CniC,EAAM,cAAcA,EAAM,SAAU,KAAMV,CAAQ,CAC7D,CACA,MAAMmjC,GAAiBpU,GAAazG,GAAkBsa,EAAQ,EAE9D,SAASQ,GAAYliC,EAAO,CACxB,OAAOuqB,GAAclD,GAAernB,CAAK,CAC7C,CACA,SAASmiC,GAAanoB,EAASooB,EAAWpiC,EAAO,CAC7C,MAAMqiC,EAAgBroB,EAAQ,aAAaooB,CAAS,EACpD,OAAApoB,EAAQ,aAAaooB,EAAWpiC,CAAK,EAC9B,IAAM,CACLqiC,EACAroB,EAAQ,aAAaooB,EAAWC,CAAa,EAG7CroB,EAAQ,gBAAgBooB,CAAS,CAEzC,CACJ,CACA,SAASE,GAAO,CAAE,SAAAxjC,EAAU,UAAAyyB,EAAW,OAAAc,EAAQ,UAAApzB,EAAW,GAAA69B,EAAI,OAAAyF,EAAQ,MAAArE,EAAO,OAAAvX,GAAU,CACnF,KAAM,CAAC6b,EAASC,CAAU,EAAIjjC,EAAM,SAAS,EAAK,EAC5C,CAACkjC,EAASC,CAAU,EAAInjC,EAAM,SAAS,EAAK,EAC5CwrB,EAAUxrB,EAAM,OAAO,EAAE,EACzBojC,EAAepjC,EAAM,OAAO,IAAI,EAChC,CAAE,WAAAq1B,CAAU,EAAKlD,GAAW,EAC5B,CAAE,UAAApM,CAAS,EAAK6K,GAAS,EAEzByS,EADe3P,GAAmB,EACmB,EAAjB3B,EAAU,KACpD/xB,EAAM,UAAU,KACZijC,EAAW,EAAI,EACR,IAAM,CACTA,EAAW,EAAK,EAChBE,EAAW,EAAK,CACpB,GACD,CAAA,CAAE,EACL,MAAM1G,EAAgBlH,GAAiB,IAAM,CACzC/J,EAAQ,QAAQ,QAASgX,GAAUA,EAAK,CAAE,EAC1ChX,EAAQ,QAAU,CAAA,CACtB,CAAC,EACKzZ,EAAcwjB,GAAiB,IAAM,CACvC,IAAInK,EACJ+X,EAAW,EAAK,EAChB1G,EAAa,GACZrR,EAAKkS,EAAG,WAAa,MAAQlS,IAAO,QAAkBA,EAAG,KAAKkS,CAAE,EACjEjI,EAAW,IAAM,CACb,IAAIjK,GACHA,EAAKkS,EAAG,UAAY,MAAQlS,IAAO,QAAkBA,EAAG,KAAKkS,CAAE,EAChEoB,EAAK,CACT,EAAG2E,CAAiB,CACxB,CAAC,EACDrjC,EAAM,UAAU,IAAM+lB,EAAU2D,GAAc3X,CAAW,EAAG,CAACgU,EAAWhU,CAAW,CAAC,EACpF,MAAMuxB,EAAc/N,GAAkB5S,GAAS,CAC3C,IAAIyI,EAAIyI,EAAIU,EACZpG,GAAOxL,CAAI,EACXwgB,EAAW,EAAI,GACd/X,EAAKkS,EAAG,YAAc,MAAQlS,IAAO,QAAkBA,EAAG,KAAKkS,CAAE,EAClE,MAAMiF,GAAYhO,GAAMV,EAAKlR,EAAK,cAAgB,MAAQkR,IAAO,OAAS,OAASA,EAAG,YAAc,MAAQU,IAAO,OAASA,EAAK,CAAA,EACjI,QAAStQ,EAAI,EAAGA,EAAIse,EAAS,OAAQte,GAAK,EAAG,CACzC,MAAMzJ,EAAU+nB,EAASte,CAAC,EACtB,CAAC,WAAY,SAAU,OAAO,EAAE,QAAQzJ,EAAQ,OAAO,IAAM,IAAMA,IAAYmI,IAC/E6I,EAAQ,QAAQ,KAAKmX,GAAanoB,EAAS,QAAS,EAAE,CAAC,EACvDgR,EAAQ,QAAQ,KAAKmX,GAAanoB,EAAS,cAAe,MAAM,CAAC,EAEzE,CACAgR,EAAQ,QAAQ,KAAK,IAAM,CACvB,IAAIJ,EAAIyI,GACPA,GAAMzI,EAAKgY,EAAa,WAAa,MAAQhY,IAAO,OAAS,OAASA,EAAG,SAAW,MAAQyI,IAAO,QAAkBA,EAAG,KAAKzI,CAAE,CACpI,CAAC,EACDiK,EAAW,IAAM,CACb,IAAIjK,GACHA,EAAKkS,EAAG,WAAa,MAAQlS,IAAO,QAAkBA,EAAG,KAAKkS,CAAE,CACrE,EAAG+F,CAAiB,CACxB,CAAC,EACKE,EAAYvjC,EAAM,YAAa2iB,GAAS,CACtCA,EACA2gB,EAAY3gB,CAAI,EAGhB8Z,EAAa,CAErB,EAAG,CAAC6G,EAAa7G,CAAa,CAAC,EAC/B,OAAOuG,EACDn4B,GAAAA,aAAa7K,EAAM,cAAcg5B,GAAc,CAAE,IAAKuK,EAAW,UAAW3Y,GAAKnrB,EAAWorB,GAAS6X,GAAW,CAAE,EAAG7X,GAAS1B,EAAuB,EAAG+Z,GAAWrY,GAAS6X,GAAY,MAAM,CAAC,CAAC,EAAG,aAAc,GAAM,KAAM,SAAU,aAAcxX,GAAe/D,EAAQ,UAAU,EAAG,MAAO,CAC1R,GAAI4K,EAAU,OAAS3D,GAAqB,UAAU,KAChD,CAAE,CAACtD,GAAO,yBAAyB,CAAC,EAAG,GAAGuY,CAAiB,IAAI,EAC/D,KACN,GAAItR,EAAU,OAAO,OAAS3D,GAAqB,UAAU,OAAO,KAC9D,CAAE,CAACtD,GAAO,gCAAgC,CAAC,EAAGiH,EAAU,OAAO,IAAI,EACnE,KACN,GAAGc,EAAO,IAC1B,EAAe,QAAUzoB,GAAU,CACdg5B,EAAa,UACdA,EAAa,QAAUh5B,EAAM,cAErC,CAAC,EAAI9K,CAAQ,EAAGyjC,EAAO,MAAQ,SAAS,IAAI,EAC9C,IACV,CACA,MAAMS,GAAenV,GAAaxG,GAAeib,EAAM,EAEvD,SAASW,GAAK,CAAE,SAAAnkC,GAAY,CACxB,OAAOU,EAAM,cAAcA,EAAM,SAAU,KAAMV,CAAQ,CAC7D,CACA,MAAMokC,GAAarV,GAAavG,GAAa2b,EAAI,EAEjD,SAASE,GAAUnjC,EAAO,CACtB,OAAOuqB,GAAchD,GAAgBvnB,CAAK,CAC9C,CACA,SAASojC,GAAQ,CAAE,QAAS,CAAE,QAAAnW,CAAO,EAAI,OAAQ,CAAE,YAAAoW,EAAa,UAAAC,GAAa,OAAAjR,GAAU,CACnF,KAAM,CAAE,MAAA6L,EAAO,gBAAAhB,CAAe,EAAKP,GAAa,EAC1C,CAAE,gBAAAe,EAAiB,cAAAtR,CAAa,EAAKkI,GAAgB,EAC3D7iB,GAAgB,IAAM,CAClByrB,EAA8E9Q,GAAc,KAAK,CACrG,EAAG,CAAC8Q,EAA+E9Q,GAAc,KAAK,CAAC,EACvG,MAAMmX,EAAoB,IAClBF,EACOA,EAAW,EACf7jC,EAAM,cAAc0yB,GAAY,CAAE,IAAKhJ,GAAc,MAAO,QAAS,KAAM0J,GAAW,WAAY0Q,EAAW,QAASpF,CAAK,CAAE,EAExI,OAAQ1+B,EAAM,cAAc,MAAO,CAAE,IAAKk+B,EAAiB,MAAOrL,EAAO,QAAS,UAAWhI,GAAS8Y,GAAS,CAAE,CAAC,EAAsDlW,GAAQ,IAAKD,GAAYA,IAAW9D,GAAeqa,EAAiB,EAAKvW,CAAO,CAAC,CAC7P,CACA,MAAMwW,GAAgB3V,GAAatG,GAAgB6b,EAAO,EAE1D,SAASK,GAAWthB,EAAMjjB,EAAO,CAC7B,IAAI0rB,EACJ,OAAOprB,EAAM,cAAc2iB,EAAK,OAAO,UAAW,CAAE,IAAKA,EAAK,OAAO,KAAM,GAAGjjB,CAAK,GAAK0rB,EAAKzI,EAAK,YAAc,MAAQyI,IAAO,OAAS,OAASA,EAAG,IAAK8Y,GAAUD,GAAWC,EAAOxkC,CAAK,CAAC,CAAC,CAChM,CACA,SAASykC,GAAeC,EAAkBrS,EAAY,GAAI,CACtD,KAAM,CAAE,OAAQsS,EAAwB,GAAGC,CAAoB,EAAKF,EAC9D,CAAE,OAAA1P,EAAQ,GAAG6P,CAAa,EAAKxS,EACrC,MAAO,CACH,OAAQ,CAAE,GAAGsS,EAAwB,GAAG3P,CAAM,EAC9C,GAAG4P,EACH,GAAGC,CACX,CACA,CACA,SAASC,GAAS,CAAE,SAAA1W,EAAU,UAAAiE,EAAW,OAAAmF,EAAQ,QAAA3J,EAAS,WAAA8P,EAAY,SAAAuE,EAAU,GAAAtE,EAAI,QAAAzO,EAAS,OAAAvD,EAAQ,MAAAhU,EAAO,GAAGmtB,CAAS,EAAI,CACxH,KAAM,CAAE,UAAWL,EAAkB,SAAUM,EAAiB,OAAQC,EAAe,QAASC,EAAgB,WAAYC,EAAmB,SAAUC,EAAiB,GAAIC,EAAW,OAAQC,EAAe,MAAOC,EAAc,QAASC,EAAgB,GAAGC,CAAgB,EAAK/W,GAChR,CAAE,OAAAW,EAAQ,aAAAU,CAAY,EAAKb,GAAY,CACzCL,GAAWiV,GAAc,CACrBjV,GAAWkU,GAAgB,CACvBlU,GAAW4R,GAAkB,CACzB5R,GAAWwS,EAAc,EACzBxS,GAAWyV,EAAa,EACxBzV,GAAWoT,EAAgB,CAC/C,CAAiB,CACjB,CAAa,CACb,CAAS,CACT,EAAO9S,GAAWqW,CAAc,EACtBxlC,EAAQ+vB,EAAa,CACvB,UAAW0U,GAAeC,EAAkBrS,CAAS,EACrD,SAAU,CAAE,GAAG2S,EAAiB,GAAG5W,CAAQ,EAC3C,OAAQ,CAAE,GAAG6W,EAAe,GAAGzN,CAAM,EACrC,QAAS,CAAE,GAAG0N,EAAgB,GAAGrX,CAAO,EACxC,WAAY,CAAE,GAAGsX,EAAmB,GAAGxH,CAAU,EACjD,SAAU,CAAE,GAAGyH,EAAiB,GAAGlD,CAAQ,EAC3C,GAAI,CAAE,GAAGmD,EAAW,GAAGzH,CAAE,EACzB,GAAG6H,EACH,GAAGV,CACX,CAAK,EACD,OAAK/kC,EAAM,KAEHM,EAAM,cAAcoxB,GAAuB,CAAE,GAAG1xB,CAAK,EACzDM,EAAM,cAAcgyB,GAAuB,CAAE,OAAQ1G,GAAU0Z,EAAe,MAAOxY,GAASlV,GAAS2tB,CAAY,CAAC,EAChHjlC,EAAM,cAAcoyB,GAAkB,KAClCpyB,EAAM,cAAc6wB,GAAgB,KAChC7wB,EAAM,cAAc6vB,GAAqB,KAAMoU,GAAW1V,GAAWmV,GAAY3U,CAAM,EAAGrvB,CAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EALzG,IAMf,CCxjDA,MAAM0lC,GAAmB,CACrB,QAAS,EACT,kBAAmB,EACnB,iBAAkB,EAClB,eAAgB,IAChB,iBAAkB,IAClB,oBAAqB,EACrB,qBAAsB,GACtB,wBAAyB,IACzB,wBAAyB,IACzB,YAAa,GACb,aAAc,EAClB,EACA,SAASC,GAAgBC,EAAS,CAC9B,OAAO,KAAK,IAAI,KAAK,IAAIA,EAAS,OAAO,OAAO,EAAG,CAAC,CACxD,CACA,SAASC,GAAiBC,EAAM,CAC5B,KAAM,CAAE,QAAAF,EAAS,GAAG1S,CAAI,EAAK,CAAE,GAAGwS,GAAkB,GAAGI,CAAI,EAC3D,MAAO,CAAE,QAASH,GAAgBC,CAAO,EAAG,GAAG1S,CAAI,CACvD,CAEA,SAAS6S,GAAiBD,EAAME,EAASC,EAASC,EAAgB,CAC9D,MAAMC,EAAgB7lC,EAAM,OAAO,MAAS,EACtC8lC,EAAqB9lC,EAAM,OAAO,MAAS,EAC3C,CAAE,KAAM+lC,GAA0B5U,GAAgB,EAAG,UACrDwC,EAAeD,GAAmB,EAClCsS,EAAoBzQ,GAAiB,IAAM,CAC7C,IAAInK,EAAIyI,EAAIU,EAGZ,IAFCnJ,EAAKya,EAAc,WAAa,MAAQza,IAAO,QAAkBA,EAAG,OAAM,EAC3Eya,EAAc,QAAU,OACpBC,EAAmB,SAA4EF,GAAe,QAAU,CACxH,GAAI,CACAC,EAAc,SAAWtR,GAAMV,EAAK+R,EAAe,SAAS,WAAa,MAAQrR,IAAO,OAAS,OAASA,EAAG,KAAKV,EAAI,CAClH,CAAE,UAAWiS,EAAmB,OAAO,EACvC,CAAE,UAAW,SAASN,CAAI,gBAAgBE,CAAO,kBAAkBC,CAAO,KAAK,CACnG,EAAmB,CACC,SAAWhS,EAAoH,EAApGoS,GAA6F,IACxH,OAAQF,EAAc,QAAU,WAAa,aACjE,CAAiB,CACL,OACOjR,EAAK,CACR,QAAQ,MAAMA,CAAG,CACrB,CACAkR,EAAmB,QAAU,OACzBD,EAAc,UACdA,EAAc,QAAQ,SAAW,IAAM,CACnCA,EAAc,QAAU,MAC5B,EAER,CACJ,CAAC,EACD,OAAA5zB,GAAgB+zB,EAAmB,CAACR,EAAME,EAASC,EAASK,CAAiB,CAAC,EACvEhmC,EAAM,YAAY,IAAM,CAC3B8lC,EAAmB,QAA2EF,GAAe,QACvG,OAAO,iBAAiBA,EAAe,OAAO,EAAE,UAChD,MACV,EAAG,CAACA,CAAc,CAAC,CACvB,CAEA,SAASK,GAAgBT,EAAM/iC,EAAU,CACrC,KAAM,CAAE,GAAA66B,CAAE,EAAKnM,GAAgB,EACzB+U,EAAiB3Q,GAAiB,IAAM,CAC1C,IAAInK,EACC3oB,IACA2oB,EAAKkS,EAAG,QAAU,MAAQlS,IAAO,QAAkBA,EAAG,KAAKkS,EAAI,CAAE,KAAAkI,CAAI,CAAE,CAEhF,CAAC,EACDxlC,EAAM,UAAUkmC,EAAgB,CAACV,EAAMU,CAAc,CAAC,CAC1D,CAEA,SAASC,IAAe,CACpB,KAAM,CAAE,KAAAX,CAAI,EAAKrU,GAAgB,EACjC,OAAOoU,GAAiBC,CAAI,CAChC,CAEA,SAASY,GAAiB7F,EAAW8F,EAAiB,CAClD,IAAIjb,EAAIyI,EACR,IAAIyS,EAAY,CAAE,MAAO,EAAG,OAAQ,CAAC,EACjCC,EAAe,CAAE,MAAO,EAAG,OAAQ,CAAC,EACxC,KAAM,CAAE,aAAAzU,CAAY,EAAKR,GAAgB,EACnC,CAAE,SAAA/E,CAAQ,EAAK4E,GAAgB,EAAG,SAClC,CAAE,kBAAAqV,CAAiB,EAAKL,GAAY,EAC1C,GAAI5F,GAAazO,EAAc,CAC3B,MAAM1F,EAAQ,CAAE,GAAG0F,EAAc,GAAGuU,CAAe,EACnD,GAAIla,GAAaC,CAAK,EAAG,CACrB,MAAM8L,EAAQ7L,GAAgBD,EAAOG,CAAQ,EACvC1V,EAAQ,KAAK,IAAI,MAAMuU,EAAKgB,EAAM,UAAY,MAAQhB,IAAO,OAAS,OAASA,EAAG,IAAK7S,GAAMA,EAAE,KAAK,IAAM,CAAA,GAAI,OAAO6T,EAAM,MAAQ,CAACA,EAAM,KAAK,EAAI,CAAA,CAAE,CAAC,EACtJqa,EAAS,KAAK,IAAI,MAAM5S,EAAKzH,EAAM,UAAY,MAAQyH,IAAO,OAAS,OAASA,EAAG,IAAKtb,GAAMA,EAAE,MAAM,IAAM,CAAA,GAAI,OAAO6T,EAAM,OAAS,CAACA,EAAM,MAAM,EAAI,CAAA,CAAE,CAAC,EAC5JvV,EAAQ,GAAK4vB,EAAS,GAAKlG,EAAU,MAAQ,GAAKA,EAAU,OAAS,IACrEgG,EAAerO,EACT,CACE,MAAO,KAAK,MAAM,KAAK,IAAIrhB,EAAQ0pB,EAAU,MAAQA,EAAU,OAAUkG,CAAM,CAAC,EAChF,OAAQ,KAAK,MAAM,KAAK,IAAIA,EAASlG,EAAU,OAASA,EAAU,MAAS1pB,CAAK,CAAC,CACzG,EACsB,CAAE,MAAAA,EAAO,OAAA4vB,CAAM,EACrBF,EAAe,CACX,MAAOA,EAAa,MAAQC,EAC5B,OAAQD,EAAa,OAASC,CAClD,EACgBF,EAAYpO,EACN,CACE,MAAO,KAAK,IAAIqI,EAAU,MAAOgG,EAAa,MAAO1vB,CAAK,EAC1D,OAAQ,KAAK,IAAI0pB,EAAU,OAAQgG,EAAa,OAAQE,CAAM,CACtF,EACsB,CACE,MAAO,KAAK,MAAM,KAAK,IAAIlG,EAAU,MAAQA,EAAU,OAASkG,EAAU5vB,EAAOA,CAAK,CAAC,EACvF,OAAQ,KAAK,MAAM,KAAK,IAAI0pB,EAAU,OAASA,EAAU,MAAQ1pB,EAAS4vB,EAAQA,CAAM,CAAC,CACjH,EAEQ,CACJ,CACA,MAAMC,EAAUJ,EAAU,MAAQ,KAAK,IAAIta,GAAMua,EAAa,MAAQD,EAAU,MAAO,CAAC,EAAG,CAAC,EAAI,EAChG,MAAO,CAAE,UAAAA,EAAW,QAAAI,CAAO,CAC/B,CAEA,SAASC,GAASC,EAAUC,EAAU,CAClC,OAAO,KAAK,MAAMD,EAAS,QAAUC,EAAS,QAASD,EAAS,QAAUC,EAAS,OAAO,CAC9F,CACA,SAASC,GAAUtmC,EAAOumC,EAAO7a,EAAS,IAAK8a,EAAQ,EAAG,CACtD,OAAOxmC,EAAQ,KAAK,IAAI,EAAI,KAAK,IAAIumC,EAAQ7a,CAAM,EAAG8a,CAAK,GAAK,KAAK,KAAKD,CAAK,CACnF,CACA,SAASE,GAAezB,EAAMF,EAASoB,EAASjkC,EAAUykC,EAAQC,EAASC,EAAYC,EAAezB,EAAgB,CAClH,MAAM0B,EAAiBtnC,EAAM,OAAO,EAAE,EAChCunC,EAAkBvnC,EAAM,OAAO,CAAC,EAChCwnC,EAAYxnC,EAAM,OAAO,MAAS,EAClC,CAAE,YAAA4xB,CAAW,EAAKN,GAAgB,EAClC,CAAE,eAAA6Q,CAAc,EAAK5R,GAAkB,EACvC,CAAE,aAAAlnB,EAAc,iBAAAktB,CAAgB,EAAK4G,GAAa,EAClD,CAAE,qBAAAsK,EAAsB,iBAAAC,EAAkB,wBAAAC,EAAyB,aAAAC,EAAc,eAAAC,EAAgB,iBAAAC,EAAkB,oBAAAC,EAAqB,wBAAAC,EAAyB,YAAAC,CAAW,EAAM9B,GAAY,EAC9L+B,EAAuBloC,EAAM,YAAaoK,GAAU,CACtD,GAAIf,EAAa,QAAS,CACtB,KAAM,CAAE,MAAA8+B,EAAO,MAAAC,CAAK,EAAKh+B,EACnB,CAAE,QAAAi+B,EAAS,QAAAC,CAAO,EAAKnG,EAAc,EACrC,CAAE,KAAAoG,EAAM,IAAAC,EAAK,MAAA3xB,EAAO,OAAA4vB,CAAM,EAAKp9B,EAAa,QAAQ,sBAAqB,EAC/E,MAAO,CAAC8+B,EAAQI,EAAOF,EAAUxxB,EAAQ,EAAGuxB,EAAQI,EAAMF,EAAU7B,EAAS,CAAC,CAClF,CACA,MAAO,CAAA,CACX,EAAG,CAACp9B,EAAc84B,CAAc,CAAC,EAC3BsG,EAAYlT,GAAkBnrB,GAAU,CAC1C,KAAM,CAAE,IAAAtH,EAAK,QAAA4lC,EAAS,QAAAC,CAAO,EAAKv+B,EAC5Bw+B,EAAOF,GAAWC,EAClBE,EAAiB,IAAM,CACzBz+B,EAAM,eAAc,EACpBA,EAAM,gBAAe,CACzB,EACA,GAAIo7B,EAAO,EAAG,CACV,MAAMsD,EAAO,CAACtN,EAAQC,IAAW,CAC7BoN,EAAc,EACdxB,EAAc7L,EAAQC,CAAM,CAChC,EACI34B,IAAQ,YACRgmC,EAAK,EAAGrB,CAAoB,EAEvB3kC,IAAQ,UACbgmC,EAAK,EAAG,CAACrB,CAAoB,EAExB3kC,IAAQ,YACbgmC,EAAK,CAACrB,EAAsB,CAAC,EAExB3kC,IAAQ,cACbgmC,EAAKrB,EAAsB,CAAC,CAEpC,CACI3kC,IAAQ,KAAQ8lC,GAAQ9lC,IAAQ,KAChC+lC,EAAc,EACd3B,EAAM,GAEDpkC,IAAQ,KAAQ8lC,GAAQ9lC,IAAQ,KACrC+lC,EAAc,EACd1B,EAAO,GAEFyB,GAAQ9lC,IAAQ,MACrB+lC,EAAc,EACdzB,EAAW,CAAC,EAEpB,CAAC,EACKxK,EAAUrH,GAAkBnrB,GAAU,CACxC,IAAIA,EAAM,SAAWw9B,IACb,KAAK,IAAIx9B,EAAM,MAAM,EAAI,KAAK,IAAIA,EAAM,MAAM,EAAG,CACjDA,EAAM,gBAAe,EACrBg9B,EAAWN,GAAUtB,EAAM,CAACp7B,EAAM,OAAQu9B,CAAuB,EAAG,GAAM,GAAGO,EAAqB99B,CAAK,CAAC,EACxG,MACJ,CAEAo7B,EAAO,IACPp7B,EAAM,gBAAe,EAChBw9B,GACDP,EAAcj9B,EAAM,OAAQA,EAAM,MAAM,EAGpD,CAAC,EACKywB,EAAe76B,EAAM,YAAaoK,GAAU,CAC9C,MAAMqwB,EAAW6M,EAAe,QAChC7M,EAAS,OAAO,EAAGA,EAAS,OAAQ,GAAGA,EAAS,OAAQM,GAAMA,EAAE,YAAc3wB,EAAM,SAAS,CAAC,CAClG,EAAG,CAAA,CAAE,EACC2+B,EAAiB/oC,EAAM,YAAaoK,GAAU,CAChDywB,EAAazwB,CAAK,EAClBA,EAAM,QAAO,EACbk9B,EAAe,QAAQ,KAAKl9B,CAAK,CACrC,EAAG,CAACywB,CAAY,CAAC,EACXzB,EAAgB7D,GAAkBnrB,GAAU,CAC9C,IAAIghB,EACJ,MAAMqP,EAAW6M,EAAe,QAChC,GAAKl9B,EAAM,cAAgB,SAAWA,EAAM,QAAU,GAClD,EAAG,GAAAghB,EAAqEwa,GAAe,WAAa,MAAQxa,IAAO,SAAkBA,EAAG,SAAShhB,EAAM,MAAM,GAC7J,OAEAo7B,EAAO,GACPp7B,EAAM,gBAAe,EAEzB,KAAM,CAAE,UAAA4+B,CAAS,EAAK5+B,EACtB,GAAIqwB,EAAS,SAAW,GACpBuO,EAAYzB,EAAgB,SAAWn9B,EAAM,cAAgB,QAAUy9B,EAAiBC,GAAmB,CAC3GP,EAAgB,QAAU,EAC1B,MAAM0B,EAAazD,GAAQ,EACrBA,IAASkB,EACLlB,EAAO,KAAK,IAAIkB,IAAY,EAAIqB,GAAsBL,CAAgB,EACtE,EACJlC,IAASF,EACLE,EAAO,KAAK,IAAIF,IAAY,GAAKyC,GAAsBL,CAAgB,EACvE,EACVN,EAAW6B,EAAY,GAAO,GAAGf,EAAqB99B,CAAK,CAAC,CAChE,MAEIm9B,EAAgB,QAAUyB,EAG9B,GADAD,EAAe3+B,CAAK,EAChBqwB,EAAS,SAAW,EAAG,CACvB,MAAMyO,EAAkBvC,GAASlM,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,EACzD+M,EAAU,QAAU,CAChB,iBAAkB0B,EAClB,gBAAiB,KAAK,IAAIA,EAAiB,CAAC,EAC5C,YAAa1D,CAC7B,CACQ,CACJ,CAAC,EACKnM,EAAgB9D,GAAkBnrB,GAAU,CAC9C,MAAMqwB,EAAW6M,EAAe,QAC1B5M,EAAgBD,EAAS,KAAMM,GAAMA,EAAE,YAAc3wB,EAAM,SAAS,EAC1E,GAAIqwB,EAAS,SAAW,GAAK+M,EAAU,QAAS,CAC5Cp9B,EAAM,gBAAe,EACrB2+B,EAAe3+B,CAAK,EACpB,MAAM++B,EAAkBxC,GAASlM,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,EACnDwO,EAAahB,EACZT,EAAU,QAAQ,YAAcA,EAAU,QAAQ,gBAAmB2B,EACtErC,GAAUtB,EAAM2D,EAAkB3B,EAAU,QAAQ,iBAAkBQ,CAAuB,EACnGZ,EAAW6B,EAAY,GAAM,GAAGxO,EAC3B,IAAKliB,GAAM2vB,EAAqB3vB,CAAC,CAAC,EAClC,OAAO,CAAChS,EAAK6iC,IAAeA,EAAW,IAAI,CAAC7wB,EAAG0L,IAAM1d,EAAI0d,CAAC,EAAI1L,EAAI,CAAC,CAAC,CAAC,EAC1EivB,EAAU,QAAQ,iBAAmB2B,EACrC,MACJ,CACI3D,EAAO,IACPp7B,EAAM,gBAAe,EACjBswB,IACID,EAAS,SAAW,GACpB4M,GAAe3M,EAAc,QAAUtwB,EAAM,SAAWo7B,GAAO9K,EAAc,QAAUtwB,EAAM,SAAWo7B,CAAI,EAEhHuD,EAAe3+B,CAAK,GAGhC,CAAC,EACKkvB,EAAct5B,EAAM,YAAaoK,GAAU,CAC7C,MAAMqwB,EAAW6M,EAAe,QAC5B7M,EAAS,SAAW,GAAKA,EAAS,KAAMM,GAAMA,EAAE,YAAc3wB,EAAM,SAAS,IAC7Eo9B,EAAU,QAAU,QAExB3M,EAAazwB,CAAK,CACtB,EAAG,CAACywB,CAAY,CAAC,EACXwO,EAAiBrpC,EAAM,YAAY,IAAM,CAC3C,MAAMy6B,EAAW6M,EAAe,QAChC7M,EAAS,OAAO,EAAGA,EAAS,MAAM,EAClC8M,EAAgB,QAAU,EAC1BC,EAAU,QAAU,MACxB,EAAG,CAAA,CAAE,EACLrO,GAAiB5C,EAAkB6C,EAAeC,EAAeC,EAAa72B,CAAQ,EACtFzC,EAAM,UAAUqpC,EAAgB,CAACzX,EAAayX,CAAc,CAAC,EAC7DrpC,EAAM,UAAU,IACPyC,EAGE,IAAM,CAAE,EAFJ+oB,GAAQ6d,EAAgB9S,EAAiBvM,GAAmBye,CAAS,EAAGlS,EAAiBrM,GAAgB0S,CAAO,CAAC,EAG7H,CAACn6B,EAAU8zB,EAAkB8S,EAAgBZ,EAAW7L,CAAO,CAAC,CACvE,CAEA,SAAS0M,GAAahD,EAAWI,EAASd,EAAgB,CACtD,KAAM,CAACJ,EAAM+D,CAAO,EAAIvpC,EAAM,SAAS,CAAC,EAClC,CAAC0lC,EAAS8D,CAAU,EAAIxpC,EAAM,SAAS,CAAC,EACxC,CAAC2lC,EAAS8D,CAAU,EAAIzpC,EAAM,SAAS,CAAC,EACxC0pC,EAAUjE,GAAiBD,EAAME,EAASC,EAASC,CAAc,EACjE,CAAE,aAAA9T,EAAc,YAAAF,CAAW,EAAKN,GAAgB,EAChD,CAAE,cAAA1E,EAAe,UAAA2T,CAAS,EAAKpD,GAAa,EAC5C,CAAE,QAAAmI,EAAS,iBAAAoC,CAAgB,EAAKvB,GAAY,EAC5CwD,EAAgB7X,GAAgB3F,GAAa2F,CAAY,EAAIA,EAAa,IAAM,OAChFrvB,EAAW,CAACknC,GAAiB,CAAkE/D,GAAe,QACpH3zB,GAAgB,IAAM,CAClBs3B,EAAQ,CAAC,EACTC,EAAW,CAAC,EACZC,EAAW,CAAC,CAChB,EAAG,CAAC7X,EAAa+X,CAAa,CAAC,EAC/B,MAAMtC,EAAgBrnC,EAAM,YAAY,CAAC4pC,EAAIC,EAAIZ,IAAe,CAC5D,MAAMa,EAAUb,GAAczD,EACxBuE,EAAarE,GAAWkE,GAAM,GAC9BI,EAAarE,GAAWkE,GAAM,GAC9BI,GAAc3D,EAAU,MAAQwD,EAAUvJ,EAAU,OAAS,EAAIuJ,EACjEI,GAAc5D,EAAU,OAASwD,EAAUvJ,EAAU,QAAU,EAAIuJ,EACzEN,EAAW,KAAK,IAAI,KAAK,IAAIO,CAAU,EAAG,KAAK,IAAIE,EAAY,CAAC,CAAC,EAAI,KAAK,KAAKF,CAAU,CAAC,EAC1FN,EAAW,KAAK,IAAI,KAAK,IAAIO,CAAU,EAAG,KAAK,IAAIE,EAAY,CAAC,CAAC,EAAI,KAAK,KAAKF,CAAU,CAAC,CAC9F,EAAG,CAACxE,EAAME,EAASC,EAASpF,EAAW+F,EAAU,MAAOA,EAAU,MAAM,CAAC,EACnEc,EAAapnC,EAAM,YAAY,CAACipC,EAAYkB,EAAOP,EAAIC,IAAO,CAChE,MAAMC,EAAU9d,GAAMid,EAAa,IAAOvC,EAAWuC,EAAa,IAAO3D,EAAU2D,EAAa3D,EAAWoB,EAAS,CAAC,EAChHyD,GACDT,EAAO,EAEXrC,EAAcuC,EAAKA,GAAM,EAAIpE,EAAO,EAAIsE,GAAW,EAAGD,EAAKA,GAAM,EAAIrE,EAAO,EAAIsE,GAAW,EAAGA,CAAO,EACrGP,EAAQO,CAAO,CACnB,EAAG,CAACtE,EAAMF,EAASoB,EAASW,EAAeqC,CAAO,CAAC,EAC7CU,EAA6B7U,GAAiB,IAAM,CAClDiQ,EAAO,IACHA,EAAOkB,GACPU,EAAWV,EAAS,EAAI,EAE5BW,EAAa,EAErB,CAAC,EACDp1B,GAAgBm4B,EAA4B,CAACxd,EAAc,MAAOA,EAAc,OAAQwd,CAA0B,CAAC,EACnH,MAAMlD,EAASlnC,EAAM,YAAY,IAAM,CACnC,MAAMipC,EAAazD,EAAOkC,EAC1BN,EAAW5B,EAAO,GAAKyD,EAAa,EAAI,EAAIA,CAAU,CAC1D,EAAG,CAACzD,EAAMkC,EAAkBN,CAAU,CAAC,EACjCD,EAAUnnC,EAAM,YAAY,IAAM,CACpC,MAAMipC,EAAazD,EAAOkC,EAC1BN,EAAW5B,EAAO,GAAKyD,EAAa,EAAI,EAAIA,CAAU,CAC1D,EAAG,CAACzD,EAAMkC,EAAkBN,CAAU,CAAC,EACvC,MAAO,CAAE,KAAA5B,EAAM,QAAAE,EAAS,QAAAC,EAAS,SAAAljC,EAAU,cAAA4kC,EAAe,WAAAD,EAAY,OAAAF,EAAQ,QAAAC,CAAO,CACzF,CAEA,MAAMkD,GAAwBrqC,EAAM,cAAc,IAAI,EAChDsqC,GAAU3e,GAAe,UAAW,wBAAyB0e,EAAqB,EACxF,SAASE,GAAoB,CAAE,SAAAjrC,GAAY,CACvC,KAAM,CAACkrC,EAAaC,CAAc,EAAIzqC,EAAM,SAAQ,EAC9C,CAAE,UAAAugC,CAAS,EAAKpD,GAAa,EAC7B,CAAE,IAAAx9B,EAAK,QAAA2lC,CAAO,EAAKa,GAAY,EAC/B,CAAE,UAAAG,EAAW,QAAAI,GAAYN,GAAiB7F,EAAqEiK,GAAY,eAAe,EAC1I,CAAE,KAAAhF,EAAM,QAAAE,EAAS,QAAAC,EAAS,SAAAljC,EAAU,WAAA2kC,EAAY,cAAAC,EAAe,OAAAH,EAAQ,QAAAC,CAAO,EAAKmC,GAAahD,EAAWI,EAAmE8D,GAAY,cAAc,EAC9MvE,GAAgBT,EAAM/iC,CAAQ,EAC9BwkC,GAAezB,EAAMF,EAASoB,EAASjkC,EAAUykC,EAAQC,EAASC,EAAYC,EAAyEmD,GAAY,cAAc,EACjL,MAAME,EAAU1qC,EAAM,QAAQ,KAAO,CAAE,KAAAwlC,EAAM,QAAAF,EAAS,QAAAoB,EAAS,QAAAhB,EAAS,QAAAC,EAAS,SAAAljC,EAAU,OAAAykC,EAAQ,QAAAC,EAAS,WAAAC,CAAU,GAAK,CAAC5B,EAAMF,EAASoB,EAAShB,EAASC,EAASljC,EAAUykC,EAAQC,EAASC,CAAU,CAAC,EAC5MpnC,EAAM,oBAAoBL,EAAK,IAAM+qC,EAAS,CAACA,CAAO,CAAC,EACvD,MAAM7e,EAAU7rB,EAAM,QAAQ,KAAO,CAAE,GAAG0qC,EAAS,eAAAD,IAAmB,CAACC,EAASD,CAAc,CAAC,EAC/F,OAAOzqC,EAAM,cAAcqqC,GAAsB,SAAU,CAAE,MAAOxe,CAAO,EAAIvsB,CAAQ,CAC3F,CAEA,MAAMqrC,GAAa1X,GAAW,SAAUjzB,EAAM,cAAcA,EAAM,SAAU,KACxEA,EAAM,cAAc,OAAQ,CAAE,EAAG,4OAA4O,CAAE,EAC/QA,EAAM,cAAc,OAAQ,CAAE,EAAG,mCAAmC,CAAE,CAAC,CAAC,EACtE4qC,GAAc3X,GAAW,UAAWjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,uPAAuP,CAAE,CAAC,EAC/T6qC,GAAa7qC,EAAM,WAAW,SAAoB,CAAE,OAAAknC,EAAQ,YAAA4D,CAAW,EAAInrC,EAAK,CAClF,MAAMorC,EAAa/qC,EAAM,OAAO,EAAK,EAC/BgrC,EAAahrC,EAAM,OAAO,EAAK,EAC/B,CAAE,KAAAwlC,EAAM,QAAAF,EAAS,QAAAoB,EAAS,OAAQuE,EAAgB,QAASC,EAAiB,SAAUC,CAAY,EAAMb,GAAO,EAC/G,CAAE,OAAApT,CAAM,EAAK/F,GAAgB,EAC7B1uB,EAAW0oC,IAAiBjE,EAAS1B,GAAQkB,EAAUlB,GAAQF,GACrEtlC,OAAAA,EAAM,UAAU,IAAM,CACdyC,GAAYsoC,EAAW,SAAWC,EAAW,SAC7CF,EAAW,EAEVroC,IACDsoC,EAAW,QAAU,GAE7B,EAAG,CAACtoC,EAAUqoC,CAAW,CAAC,EAClB9qC,EAAM,cAAc0yB,GAAY,CAAE,IAAK/yB,EAAK,SAAU8C,EAAU,MAAOykC,EAAS,UAAY,WAAY,KAAMA,EAASyD,GAAaC,GAAa,WAAY1D,EAAShQ,EAAO,WAAaA,EAAO,YAAa,QAASgQ,EAAS+D,EAAiBC,EAAiB,QAAS,IAAM,CACjRF,EAAW,QAAU,EACzB,EAAG,OAAQ,IAAM,CACbA,EAAW,QAAU,EACzB,EAAG,CACX,CAAC,EAED,SAASI,IAAmB,CACxB,MAAMC,EAAYrrC,EAAM,OAAO,IAAI,EAC7BsrC,EAAatrC,EAAM,OAAO,IAAI,EAC9B,CAAE,MAAA81B,CAAK,EAAKqH,GAAa,EACzBoO,EAAevrC,EAAM,YAAawrC,GAAY,CAChD,IAAIpgB,EAAIyI,EACD,GAAAzI,EAAKogB,EAAQ,WAAa,MAAQpgB,IAAO,SAAkBA,EAAG,SAIjE0K,EAAK,GAHJjC,EAAK2X,EAAQ,WAAa,MAAQ3X,IAAO,QAAkBA,EAAG,MAAK,CAK5E,EAAG,CAACiC,CAAK,CAAC,EACJ2V,EAAczrC,EAAM,YAAY,IAAMurC,EAAaF,CAAS,EAAG,CAACE,CAAY,CAAC,EAC7EG,EAAe1rC,EAAM,YAAY,IAAMurC,EAAaD,CAAU,EAAG,CAACC,CAAY,CAAC,EACrF,OAAQvrC,EAAM,cAAcA,EAAM,SAAU,KACxCA,EAAM,cAAc6qC,GAAY,CAAE,OAAQ,GAAM,IAAKQ,EAAW,YAAaK,EAAc,EAC3F1rC,EAAM,cAAc6qC,GAAY,CAAE,IAAKS,EAAY,YAAaG,CAAW,CAAE,CAAC,CACtF,CAEA,SAASE,IAAqB,CAC1B,KAAM,CAAE,OAAAzU,CAAM,EAAK/F,GAAgB,EAC7BuZ,EAAUJ,GAAO,EACvB,OAAIpT,EAAO,WACAl3B,EAAM,cAAcA,EAAM,SAAU,KAAMk3B,EAAO,WAAWwT,CAAO,CAAC,EAExE1qC,EAAM,cAAcorC,GAAkB,IAAI,CACrD,CAEA,SAASQ,GAAuBxf,EAAO,CACnC,IAAIhB,EACJ,SAAUA,EAAKgB,EAAM,UAAY,MAAQhB,IAAO,OAAS,OAASA,EAAG,SAAW,GAAK,CACzF,CACA,SAASqG,GAAQ,CAAE,QAAAoa,EAAS,QAAAhL,CAAO,EAAI,CAAE,KAAAngC,EAAM,OAAAorC,GAAU,CACrD,OAAQprC,EAAI,CACR,IAAK,QACD,OAAKmrC,EAGE,CAAE,QAAAA,EAAS,QAASC,CAAM,EAFtB,CAAE,QAASA,CAAM,EAGhC,IAAK,OACD,OAAIA,IAAWjL,EACJ,CAAE,QAASiL,CAAM,EAErB,CAAE,QAAAD,EAAS,QAAAhL,CAAO,EAC7B,QACI,MAAM,IAAI,MAAMnW,EAAmB,CAC/C,CACA,CACA,SAASqhB,GAAgBrsC,EAAO,CAC5B,IAAI0rB,EAAIyI,EACR,KAAM,CAAC,CAAE,QAAAgY,EAAS,QAAAhL,GAAW5O,CAAQ,EAAIjyB,EAAM,WAAWyxB,GAAS,EAAE,EAC/D,CAAE,MAAOnF,EAAO,KAAAtiB,EAAM,SAAAuiB,EAAU,OAAA2K,EAAQ,YAAA8U,CAAW,EAAKtsC,EACxD84B,EAASlM,EAAM,OAAO,KAAK,CAACmM,EAAGC,IAAMD,EAAE,MAAQC,EAAE,KAAK,EACtD7hB,GAASuU,EAAKkB,EAAM,SAAW,MAAQlB,IAAO,OAASA,EAAKoN,EAAOA,EAAO,OAAS,CAAC,EAAE,MACtFiO,GAAU5S,EAAKvH,EAAM,UAAY,MAAQuH,IAAO,OAASA,EAAK2E,EAAOA,EAAO,OAAS,CAAC,EAAE,OACxFN,EAAQ7L,GAAgBC,EAAOC,CAAQ,EACvC8L,EAAW,KAAK,IAAI,GAAGG,EAAO,IAAKjgB,GAAMA,EAAE,KAAK,CAAC,EACjD0zB,EAAc,KAAK,KAAK/T,EAAQ,KAAK,IAAM,KAAK,KAAKluB,EAAK,MAAO6M,GAAS7M,EAAK,OAASy8B,EAAO,EAAGpO,CAAQ,EAC1G6T,EAAelf,GAAgB,EAC/Bmf,EAAe5W,GAAiB,IAAM,CACxC,IAAInK,EACJ,MAAMghB,GAAgBhhB,EAAKoN,EAAO,KAAMjgB,GAAMA,EAAE,OAAS0zB,EAAcC,CAAY,KAAO,MAAQ9gB,IAAO,OAASA,EAAKoN,EAAOA,EAAO,OAAS,CAAC,GAC3I,CAACqT,GAAWrT,EAAO,UAAWjgB,GAAMA,EAAE,MAAQszB,CAAO,EAAIrT,EAAO,UAAWjgB,GAAMA,IAAM6zB,CAAY,IACnGna,EAAS,CAAE,KAAM,QAAS,OAAQma,EAAa,IAAK,CAE5D,CAAC,EACDn6B,GAAgBk6B,EAAc,CAACniC,EAAK,MAAOA,EAAK,OAAQkiC,EAAcC,CAAY,CAAC,EACnF,MAAME,EAAgB9W,GAAkB+W,GAAmBra,EAAS,CAAE,KAAM,OAAQ,OAAQqa,CAAc,CAAE,CAAC,EACvGxoC,EAAQ,CACV,gBAAkBkoC,EAAgC,UAAlB,eACxC,EACI,OAAK9T,GACD,OAAO,OAAOp0B,EAAOkG,EAAK,MAAQA,EAAK,OAAS6M,EAAQ4vB,EAAS,CAAE,MAAO,OAAQ,OAAQ,MAAM,EAAK,CAAE,MAAO,OAAQ,OAAQ,OAAQ,EAElIzmC,EAAM,cAAcA,EAAM,SAAU,KACxC6gC,GAAWA,IAAYgL,GAAY7rC,EAAM,cAAcg3B,GAAY,CAAE,IAAK,UAAW,GAAGt3B,EAAO,OAAQ,OAAW,MAAO,CAAE,GAAG4sB,EAAO,IAAKuU,EAAS,OAAQ,MAAS,EAAI,MAAO,CAAE,SAAU,WAAY,WAAY,SAAU,GAAG/8B,CAAK,EAAI,OAAQ,IAAMuoC,EAAcxL,CAAO,EAAG,OAAQ,CAC/Q,GAAG3J,EACH,YAAa,IAAM,KACnB,UAAW,IAAM,IACjC,CAAa,CAAE,EACP2U,GAAY7rC,EAAM,cAAcg3B,GAAY,CAAE,IAAK,UAAW,GAAGt3B,EAAO,MAAO,CAAE,GAAG4sB,EAAO,IAAKuf,EAAS,OAAQ,MAAS,EAAI,MAAO/nC,CAAK,CAAE,CAAE,CACtJ,CAEA,SAASyoC,GAAY,CAAE,OAAArV,EAAQ,MAAA9K,EAAO,OAAA6K,EAAQ,KAAAjtB,CAAI,EAAI,CAClD,IAAIohB,EACJ,KAAM,CAACib,EAAiBmG,CAAkB,EAAIxsC,EAAM,SAAQ,EACtD4lC,EAAiB5lC,EAAM,OAAO,IAAI,EAClC,CAAE,KAAAwlC,EAAM,QAAAkB,EAAS,QAAAhB,EAAS,QAAAC,EAAS,eAAA8E,CAAc,EAAKH,GAAO,EAC7D0B,EAAcxG,EAAO,EACrB,CAAE,SAAA1X,EAAU,GAAAwP,CAAE,EAAKnM,GAAgB,EACnC,CAAE,aAAAU,CAAY,EAAKP,GAAgB,EACzCrf,GAAgB,IACRglB,IAAW,GACXwT,EAAe,CAAE,eAAA7E,EAAgB,gBAAAS,EAAiB,EAC3C,IAAMoE,EAAe,MAAS,GAElC,IAAM,CAAE,EAChB,CAACxT,EAAQoP,EAAiBoE,CAAc,CAAC,EAC5C,IAAI/J,GAAYtV,EAAK8L,EAAO,SAAW,MAAQ9L,IAAO,OAAS,OAASA,EAAG,KAAK8L,EAAQ,CAAE,MAAA9K,EAAO,OAAA6K,EAAQ,KAAAjtB,EAAM,KAAAw7B,EAAM,QAAAkB,EAAS,EAC9H,GAAI,CAAChG,GAAYvU,GAAaC,CAAK,EAAG,CAClC,MAAMqgB,EAAa,CACf,MAAArgB,EACA,OAAA6K,EACA,KAAAjtB,EACA,OAAAktB,EACA,SAAUpJ,EAAS,SACnB,WAAYA,EAAS,WACrB,QAASmJ,IAAW,EAAI,IAAM,CAAE,IAAI7L,EAAI,OAAQA,EAAKkS,EAAG,SAAW,MAAQlS,IAAO,OAAS,OAASA,EAAG,KAAKkS,EAAI,CAAE,MAAOzL,CAAY,CAAE,CAAG,EAAI,MAC1J,EACQ6O,EAAWkL,GAAuBxf,CAAK,EAAKpsB,EAAM,cAAc+rC,GAAiB,CAAE,GAAGU,EAAY,MAAOrgB,EAAO,YAAa4f,EAAa,KAAM/U,IAAW,EAAI,CAAE,MAAOjtB,EAAK,MAAQw7B,EAAM,OAAQx7B,EAAK,OAASw7B,CAAI,EAAKx7B,CAAI,CAAE,EAAMhK,EAAM,cAAcg3B,GAAY,CAAE,OAASc,GAAQ0U,EAAmB,CAAE,MAAO1U,EAAI,aAAc,OAAQA,EAAI,cAAe,EAAG,GAAG2U,CAAU,CAAE,CACxX,CACA,OAAK/L,EAEG1gC,EAAM,cAAc,MAAO,CAAE,IAAK4lC,EAAgB,UAAWhb,GAAKC,GAAS7B,EAAc,EAAG6B,GAAS5B,EAAiB,EAAG4B,GAASxB,EAAmB,EAAG2iB,GAAenhB,GAASvB,EAA+B,CAAC,EAAG,MAAO2N,IAAW,EAAI,CAAE,UAAW,SAASuO,CAAI,gBAAgBE,CAAO,kBAAkBC,CAAO,OAAU,MAAS,EAAIjF,CAAQ,EAD/U,IAEf,CAEA,MAAMgM,GAAO,CAAC,CAAE,QAAAld,EAAS,UAAAF,KAAgB,CACrCE,EAAQ,CAAC,CAAE,KAAMmd,EAAW,QAAApf,EAAS,OAAA2J,EAAQ,WAAAmG,EAAY,GAAGoH,KAAgB,CACxE,MAAMe,EAAOD,GAAiBoH,CAAS,EACvC,MAAO,CACH,KAAAnH,EACA,QAASlY,GAAiBC,EAASnF,GAAapoB,EAAM,cAAc2rC,GAAoB,IAAI,CAAC,EAC7F,OAAQ,CACJ,GAAGzU,EACH,MAAQx3B,GAAU,CAAE,IAAI0rB,EAAI,OAAOe,GAAazsB,EAAM,KAAK,EAAIM,EAAM,cAAcusC,GAAa,CAAE,OAAQrV,EAAQ,GAAGx3B,CAAK,CAAE,GAAK0rB,EAAK8L,EAAO,SAAW,MAAQ9L,IAAO,OAAS,OAASA,EAAG,KAAK8L,EAAQx3B,CAAK,CAAG,CACjO,EACY,WAAY,CAAE,GAAG29B,EAAY,qBAAsBmI,EAAK,YAAY,EACpE,GAAGf,CACf,CACI,CAAC,EACDnV,EAAUjB,GAAajG,GAAamiB,EAAmB,CAAC,CAC5D,EC9fMqC,GAAsB,CACxB,UAAW,IACX,UAAW,CAAA,CACf,EACMC,GAAuBC,IAAa,CACtC,GAAGF,GACH,GAAGE,CACP,GAEA,SAASC,GAAiB,CAAE,QAAAD,GAAW,CACnC,KAAM,CAAE,OAAAxhB,EAAQ,aAAAuG,CAAY,EAAKP,GAAgB,EAC3C,CAAE,UAAA0b,EAAW,UAAW,CAAE,UAAAvtC,EAAW,GAAGmzB,CAAI,EAAI,UAAWqa,EAAiB,GAAGC,GAAeL,GAAoBC,CAAO,EAC/H,OAAIxhB,EAAO,SAAW,EACX,KACHtrB,EAAM,cAAc,MAAO,CAAE,UAAW4qB,GAAKC,GAAS,SAAS,EAAGprB,GAAawtC,CAAe,EAAG,GAAGC,EAAY,GAAGta,EAAM,cAAe,EAAI,EAChJf,EAAe,EACf,IACAmb,EACA,IACA1hB,EAAO,MAAM,CACrB,CACA,SAAS6hB,GAAQ,CAAE,QAAA3d,EAAS,SAAAL,GAAY,CACpCK,EAAQ,CAAC,CAAE,QAAAsd,EAAS,GAAGrI,CAAS,KAAQ,CACpC,QAASoI,GAAoBC,CAAO,EACpC,GAAGrI,CACX,EAAM,EACFtV,EAASzH,GAAmB2G,GAAarG,GAAgB+kB,EAAgB,CAAC,CAC9E,CC3BA,MAAMK,GAAwB,CAC1B,SAAU,GACV,MAAO,IACP,IAAK,IACT,EACMC,GAAyBC,IAAe,CAC1C,GAAGF,GACH,GAAGE,CACP,GAEMC,GAAmBvtC,EAAM,cAAc,IAAI,EAC3CwtC,GAAe7hB,GAAe,eAAgB,mBAAoB4hB,EAAgB,EACxF,SAASE,GAAyB,CAAE,UAAAH,EAAW,SAAU,CAAE,OAAAI,GAAU,GAAApQ,EAAI,SAAAh+B,GAAY,CACjF,KAAM,CAAE,SAAAquC,EAAU,MAAAlb,EAAO,IAAA9yB,CAAG,EAAK0tC,GAAsBC,CAAS,EAC1DM,EAAa5tC,EAAM,OAAO2tC,CAAQ,EAClC,CAACE,EAASC,CAAU,EAAI9tC,EAAM,SAAS2tC,CAAQ,EAC/CI,EAAY/tC,EAAM,OAAO,MAAS,EAClCguC,EAAchuC,EAAM,OAAO,MAAS,EACpC,CAAE,OAAAsrB,EAAQ,aAAAuG,CAAY,EAAKP,GAAgB,EAC3C,CAAE,WAAA+D,EAAY,aAAAC,CAAY,EAAKnD,GAAW,EAC1C,CAAE,UAAApM,CAAS,EAAK6K,GAAS,EACzB,CAAE,KAAA6N,CAAI,EAAKtB,GAAa,EACxB,CAAE,eAAAlN,CAAc,EAAKL,GAAc,EACzC5vB,EAAM,UAAU,IAAMiwB,EAAe4d,CAAO,EAAG,CAACA,EAAS5d,CAAc,CAAC,EACxE,MAAMxtB,EAAW6oB,EAAO,SAAW,GAAMoiB,GAAU7b,IAAiBvG,EAAO,OAAS,EAC9E2iB,EAAOjuC,EAAM,YAAY,IAAM,CAC7B,CAAC6tC,GAAW,CAACprC,GACbqrC,EAAW,EAAI,CAEvB,EAAG,CAACD,EAASprC,CAAQ,CAAC,EAChByrC,EAAQluC,EAAM,YAAY,IAAM,CAC9B6tC,GACAC,EAAW,EAAK,CAExB,EAAG,CAACD,CAAO,CAAC,EACNM,EAAkBnuC,EAAM,YAAY,IAAM,CAC5Cs1B,EAAayY,EAAU,OAAO,EAC9BA,EAAU,QAAU,MACxB,EAAG,CAACzY,CAAY,CAAC,EACX8Y,EAAoB7Y,GAAiB,IAAM,CAC7C4Y,EAAe,EACX,GAACN,GACDprC,GACAurC,EAAY,UAAY3lB,IACxB2lB,EAAY,UAAY1lB,MAG5BylB,EAAU,QAAU1Y,EAAW,IAAM,CAC7BwY,IACAG,EAAY,QAAU,OACtBvP,EAAI,EAEZ,EAAGhM,CAAK,EACZ,CAAC,EACDzyB,EAAM,UAAUouC,EAAmB,CAACvc,EAAcgc,EAASO,CAAiB,CAAC,EAC7EpuC,EAAM,UAAU,IAAM,CACd6tC,GAAWprC,GACXqrC,EAAW,EAAK,CAExB,EAAG,CAACjc,EAAcgc,EAASprC,CAAQ,CAAC,EACpC,MAAM4rC,EAAmB9Y,GAAiB,IAAM,CAAE,IAAInK,EAAI,OAAQA,EAAKkS,EAAG,kBAAoB,MAAQlS,IAAO,OAAS,OAASA,EAAG,KAAKkS,CAAE,CAAG,CAAC,EACvIgR,EAAkB/Y,GAAiB,IAAM,CAAE,IAAInK,EAAI,OAAQA,EAAKkS,EAAG,iBAAmB,MAAQlS,IAAO,OAAS,OAASA,EAAG,KAAKkS,CAAE,CAAG,CAAC,EAC3It9B,EAAM,UAAU,IAAM,CACd6tC,EACAQ,EAAgB,EAEXT,EAAW,SAChBU,EAAe,EAEnBV,EAAW,QAAUC,CACzB,EAAG,CAACA,EAASQ,EAAkBC,CAAe,CAAC,EAC/CtuC,EAAM,UAAU,IAAMwrB,GAAQ2iB,EAAiBpoB,EAAU6C,GAAsB,IAAM,CACjFolB,EAAY,QAAU3lB,GACtB8lB,EAAe,CACnB,CAAC,EAAGpoB,EAAU8C,GAAsB,IAAM,CACtCmlB,EAAY,QAAU1lB,GACtB6lB,EAAe,CACnB,CAAC,EAAGpoB,EAAU+C,GAAoB,IAAM,CACpCklB,EAAY,QAAUzlB,GACtB6lB,EAAiB,CACrB,CAAC,EAAGroB,EAAUgD,GAAuB,IAAM,CACvCilB,EAAY,QAAUxlB,GACtB4lB,EAAiB,CACrB,CAAC,CAAC,EAAG,CAACroB,EAAWooB,EAAiBC,CAAiB,CAAC,EACpD,MAAMviB,EAAU7rB,EAAM,QAAQ,KAAO,CAAE,QAAA6tC,EAAS,SAAAprC,EAAU,KAAAwrC,EAAM,MAAAC,CAAK,GAAK,CAACL,EAASprC,EAAUwrC,EAAMC,CAAK,CAAC,EAC1GluC,OAAAA,EAAM,oBAAoBL,EAAK,IAAMksB,EAAS,CAACA,CAAO,CAAC,EAChD7rB,EAAM,cAAcutC,GAAiB,SAAU,CAAE,MAAO1hB,CAAO,EAAIvsB,CAAQ,CACtF,CAEA,MAAMivC,GAAWtb,GAAW,OAAQjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,eAAe,CAAE,CAAC,EACjFwuC,GAAYvb,GAAW,QAASjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,iCAAiC,CAAE,CAAC,EAC3G,SAASyuC,IAAkB,CACvB,KAAM,CAAE,QAAAZ,EAAS,SAAAprC,EAAU,KAAAwrC,EAAM,MAAAC,CAAK,EAAKV,GAAY,EACjD,CAAE,OAAAtW,CAAM,EAAK/F,GAAgB,EAC7Bud,EAAiB7Y,GAAasH,GAAa,EAAG,MAAO16B,CAAQ,EACnE,OAAIy0B,EAAO,gBACAl3B,EAAM,cAAcA,EAAM,SAAU,KAAMk3B,EAAO,gBAAgB,CAAE,QAAA2W,EAAS,SAAAprC,EAAU,KAAAwrC,EAAM,MAAAC,CAAK,CAAE,CAAC,EAEvGluC,EAAM,cAAc0yB,GAAY,CAAE,MAAOmb,EAAU,QAAU,OAAQ,KAAMA,EAAUW,GAAYD,GAAU,WAAYV,EAAU3W,EAAO,mBAAqBA,EAAO,kBAAmB,QAAS2W,EAAUK,EAAQD,EAAM,SAAUxrC,EAAU,GAAGisC,CAAc,CAAE,CAC3Q,CAEA,SAASC,GAAU,CAAE,QAAAnf,EAAS,UAAAF,GAAa,CACvCE,EAAQ,CAAC,CAAE,UAAA8d,EAAW,QAAA/f,EAAS,GAAGkX,CAAS,KAAQ,CAC/C,QAASnX,GAAiBC,EAASrF,GAAkBloB,EAAM,cAAcyuC,GAAiB,IAAI,CAAC,EAC/F,UAAWpB,GAAsBC,CAAS,EAC1C,GAAG7I,CACX,EAAM,EACFnV,EAAUjB,GAAanG,GAAkBulB,EAAwB,CAAC,CACtE,CC5GA,MAAMmB,GAAyB,CAC3B,KAAM,GACN,IAAK,IACT,EACMC,GAA0BC,IAAgB,CAC5C,GAAGF,GACH,GAAGE,CACP,GAEMC,GAAoB/uC,EAAM,cAAc,IAAI,EAC5CgvC,GAAgBrjB,GAAe,gBAAiB,oBAAqBojB,EAAiB,EAC5F,SAASE,GAA0B,CAAE,WAAYC,EAAiB,GAAA5R,EAAI,SAAAh+B,CAAQ,EAAI,CAC9E,KAAM,CAAE,KAAA6vC,EAAM,IAAAxvC,GAAQkvC,GAAuBK,CAAe,EACtD7lC,EAAerJ,EAAM,OAAO,IAAI,EAChC,CAACyC,EAAU2sC,CAAW,EAAIpvC,EAAM,SAAQ,EACxC,CAAC8uC,EAAYO,CAAa,EAAIrvC,EAAM,SAAS,EAAK,EAClDsvC,EAAgBtvC,EAAM,OAAO,EAAK,EAClC,CAAE,iBAAA0wB,CAAgB,EAAKH,GAAkB,EAC/Cte,GAAgB,IAAM,CAClB,IAAImZ,EAAIyI,EAAIU,EAAI8C,EAChB,MAAMkY,EAAgB7e,EAAgB,EACtC0e,EAAY,GAAG/X,GAAM9C,GAAMV,GAAMzI,EAAKmkB,EAAc,qBAAuB,MAAQnkB,IAAO,OAASA,EAAKmkB,EAAc,2BAA6B,MAAQ1b,IAAO,OAASA,EAAK0b,EAAc,wBAA0B,MAAQhb,IAAO,OAASA,EAAKgb,EAAc,uBAAyB,MAAQlY,IAAO,QAASA,EAAW,CACnU,EAAG,CAAC3G,CAAgB,CAAC,EACrB,MAAM8e,EAAuBxvC,EAAM,YAAY,IAAM,CACjD,IAAIorB,EACJ,MAAMmkB,EAAgB7e,EAAgB,EAChC+e,EAAoBF,EAAc,mBACpCA,EAAc,yBACdA,EAAc,sBACdA,EAAc,oBAClB,QAASnkB,EAA2EqkB,GAAkB,cAAgB,MAAQrkB,IAAO,OAAS,OAASA,EAAG,oBAAsBqkB,CACpL,EAAG,CAAC/e,CAAgB,CAAC,EACfgf,EAAQ1vC,EAAM,YAAY,IAAM,CAClC,MAAM2vC,EAAYtmC,EAAa,QAC/B,GAAI,CACIsmC,EAAU,kBACVA,EAAU,kBAAiB,EAAG,MAAM,IAAM,CAAE,CAAC,EAExCA,EAAU,wBACfA,EAAU,wBAAuB,EAE5BA,EAAU,qBACfA,EAAU,qBAAoB,EAEzBA,EAAU,qBACfA,EAAU,oBAAmB,CAErC,MACU,CACV,CACJ,EAAG,CAAA,CAAE,EACCC,EAAO5vC,EAAM,YAAY,IAAM,CACjC,GAAI,CAACwvC,EAAoB,EACrB,OACJ,MAAMD,EAAgB7e,EAAgB,EACtC,GAAI,CACI6e,EAAc,eACdA,EAAc,eAAc,EAAG,MAAM,IAAM,CAAE,CAAC,EAEzCA,EAAc,qBACnBA,EAAc,qBAAoB,EAE7BA,EAAc,oBACnBA,EAAc,oBAAmB,EAE5BA,EAAc,kBACnBA,EAAc,iBAAgB,CAEtC,MACU,CACV,CACJ,EAAG,CAACC,EAAsB9e,CAAgB,CAAC,EAC3C1wB,EAAM,UAAU,IAAM,CAClB,MAAMuvC,EAAgB7e,EAAgB,EAChCoD,EAAW,IAAM,CACnBub,EAAcG,EAAoB,IAAOnmC,EAAa,OAAO,CACjE,EACA,OAAOmiB,GAAQ,GAAG,CAAC,mBAAoB,yBAA0B,sBAAuB,oBAAoB,EAAE,IAAKphB,IAC/GmlC,EAAc,iBAAiBnlC,EAAO0pB,CAAQ,EACvC,IAAMyb,EAAc,oBAAoBnlC,EAAO0pB,CAAQ,EACjE,CAAC,CACN,EAAG,CAAC0b,EAAsB9e,CAAgB,CAAC,EAC3C,MAAMmf,EAAoBta,GAAiB,IAAM,CAAE,IAAInK,EAAI,OAAQA,EAAKkS,EAAG,mBAAqB,MAAQlS,IAAO,OAAS,OAASA,EAAG,KAAKkS,CAAE,CAAG,CAAC,EACzIwS,EAAmBva,GAAiB,IAAM,CAAE,IAAInK,EAAI,OAAQA,EAAKkS,EAAG,kBAAoB,MAAQlS,IAAO,OAAS,OAASA,EAAG,KAAKkS,CAAE,CAAG,CAAC,EAC7It9B,EAAM,UAAU,IAAM,CACd8uC,IACAQ,EAAc,QAAU,IAExBA,EAAc,UACbR,EAAae,EAAoBC,GAAgB,CAE1D,EAAG,CAAChB,EAAYe,EAAmBC,CAAgB,CAAC,EACpD,MAAMC,EAAuBxa,GAAiB,IAAM,CAChD,IAAInK,EACJ,OAACA,EAAM+jB,EAAOO,EAAQ,QAAW,MAAQtkB,IAAO,QAAkBA,EAAE,EAC7DwkB,CACX,CAAC,EACD5vC,EAAM,UAAU+vC,EAAsB,CAACA,CAAoB,CAAC,EAC5D,MAAMlkB,EAAU7rB,EAAM,QAAQ,KAAO,CAAE,WAAA8uC,EAAY,SAAArsC,EAAU,MAAAitC,EAAO,KAAAE,CAAI,GAAK,CAACd,EAAYrsC,EAAUitC,EAAOE,CAAI,CAAC,EAChH5vC,OAAAA,EAAM,oBAAoBL,EAAK,IAAMksB,EAAS,CAACA,CAAO,CAAC,EAC/C7rB,EAAM,cAAc,MAAO,CAAE,IAAKqJ,EAAc,UAAWuhB,GAAKC,GAAS5C,EAAiB,EAAG4C,GAAS7B,EAAc,CAAC,CAAC,EAC1HhpB,EAAM,cAAc+uC,GAAkB,SAAU,CAAE,MAAOljB,CAAO,EAAIvsB,CAAQ,CAAC,CACrF,CAEA,MAAM0wC,GAAsB/c,GAAW,kBAAmBjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,gFAAgF,CAAE,CAAC,EACxKiwC,GAAqBhd,GAAW,iBAAkBjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,+EAA+E,CAAE,CAAC,EAC3K,SAASkwC,IAAmB,CACxB,IAAI9kB,EACJ,KAAM,CAAE,WAAA0jB,EAAY,SAAArsC,EAAU,MAAAitC,EAAO,KAAAE,CAAI,EAAKZ,GAAa,EACrD,CAAE,OAAA9X,CAAM,EAAK/F,GAAgB,EACnC,OAAI1uB,EACO,KACPy0B,EAAO,iBACAl3B,EAAM,cAAcA,EAAM,SAAU,MAAOorB,EAAK8L,EAAO,oBAAsB,MAAQ9L,IAAO,OAAS,OAASA,EAAG,KAAK8L,EAAQ,CAAE,WAAA4X,EAAY,SAAArsC,EAAU,MAAAitC,EAAO,KAAAE,CAAI,CAAE,CAAC,EAEvK5vC,EAAM,cAAc0yB,GAAY,CAAE,SAAUjwB,EAAU,MAAOqsC,EAAa,kBAAoB,mBAAoB,KAAMA,EAAamB,GAAqBD,GAAqB,WAAYlB,EAAa5X,EAAO,mBAAqBA,EAAO,oBAAqB,QAAS4X,EAAac,EAAOF,CAAK,CAAE,CAChT,CAEA,SAASS,GAAW,CAAE,QAAA3gB,EAAS,SAAAR,EAAU,UAAAC,CAAS,EAAI,CAClDO,EAAQ,CAAC,CAAE,WAAAsf,EAAY,QAAAvhB,EAAS,GAAGkX,CAAS,KAAQ,CAChD,QAASnX,GAAiBC,EAAStF,GAAmBjoB,EAAM,cAAckwC,GAAkB,IAAI,CAAC,EACjG,WAAYrB,GAAuBC,CAAU,EAC7C,GAAGrK,CACX,EAAM,EACFxV,EAAUD,EAAS7G,EAAiB,EAAIA,GAAoBT,GAAmB2G,GAAapG,GAAmBgnB,EAAyB,CAAC,CAC7I,CC7HA,MAAMmB,GAAyB,CAC3B,IAAK,KACL,SAAU,SACV,MAAO,IACP,OAAQ,GACR,OAAQ,EACR,aAAc,EACd,QAAS,EACT,IAAK,GACL,SAAU,UACV,SAAU,GACV,OAAQ,GACR,WAAY,EAChB,EACMC,GAA0BC,IAAgB,CAC5C,GAAGF,GACH,GAAGE,CACP,GACA,SAASC,IAAqB,CAC1B,KAAM,CAAE,WAAAD,CAAU,EAAKnf,GAAgB,EACvC,OAAOkf,GAAuBC,CAAU,CAC5C,CAEA,MAAM3M,GAAanjC,GAAUuqB,GAAc5C,GAAmB3nB,CAAK,EAC7DgwC,GAAsBhwC,GAAUmjC,GAAU5Y,GAAc,YAAavqB,CAAK,CAAC,EAE3EiwC,GAAqBxd,GAAW,iBAAkBjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,qJAAqJ,CAAE,CAAC,EAC3O0wC,GAAuBzd,GAAW,mBAAoBjzB,EAAM,cAAc,OAAQ,CAAE,EAAG,0HAA0H,CAAE,CAAC,EAC1N,SAAS2wC,GAAgB,CAAE,MAAAvkB,EAAO,OAAA8K,EAAQ,KAAAltB,EAAM,SAAAuiB,CAAQ,EAAI,CACxD,IAAInB,EACJ,MAAMwlB,GAAmBxlB,EAAK8L,EAAO,aAAe,MAAQ9L,IAAO,OAAS,OAASA,EAAG,KAAK8L,EAAQ,CAAE,MAAA9K,EAAO,OAAA8K,EAAQ,KAAAltB,EAAM,SAAAuiB,EAAU,EACtI,GAAIqkB,EACA,OAAOA,EAEX,MAAMC,EAAkB,CAAE,OAAA3Z,EAAQ,KAAAltB,EAAM,SAAAuiB,CAAQ,EAChD,GAAIH,EAAM,UACN,OAAOpsB,EAAM,cAAcg3B,GAAY,CAAE,MAAO,CAAE,IAAK5K,EAAM,WAAa,GAAGykB,CAAe,CAAE,EAElG,GAAI1kB,GAAaC,CAAK,EAClB,OAAOpsB,EAAM,cAAcg3B,GAAY,CAAE,MAAO5K,EAAO,GAAGykB,EAAiB,EAE/E,MAAMC,EAAqBjmB,GAAS2lB,GAAmBjmB,EAAY,CAAC,EACpE,OAAI6B,EAAM,OAAS,QACPpsB,EAAM,cAAcA,EAAM,SAAU,KACxCosB,EAAM,QAAUpsB,EAAM,cAAcg3B,GAAY,CAAE,MAAO,CAAE,IAAK5K,EAAM,QAAU,GAAGykB,CAAe,CAAE,EACpG7wC,EAAM,cAAcywC,GAAoB,CAAE,UAAWK,CAAkB,CAAE,CAAC,EAE3E9wC,EAAM,cAAc0wC,GAAsB,CAAE,UAAWI,CAAkB,CAAE,CACtF,CACA,MAAMC,GAAe9lB,GAAkB,QAAQ,EACzC+lB,GAAe/lB,GAAkB,QAAQ,EACzCgmB,GAAgBhmB,GAAkB,SAAS,EAC3CimB,GAAoBjmB,GAAkB,aAAa,EACnDkmB,GAAQ,QACRC,GAAW,WACjB,SAASC,GAAU,CAAE,MAAAjlB,EAAO,MAAA9U,EAAO,QAAAiP,EAAS,OAAA+qB,EAAQ,QAAAC,EAAS,YAAA/uC,EAAa,YAAAsoC,GAAe,CACrF,MAAMnrC,EAAMK,EAAM,OAAO,IAAI,EACvB,CAAE,OAAAk3B,EAAQ,OAAArE,EAAQ,OAAA1L,CAAM,EAAKgK,GAAgB,EAC7C,CAAE,OAAA7F,EAAQ,YAAAsG,CAAW,EAAKN,GAAgB,EAC1C,CAAE,iBAAAZ,CAAgB,EAAKH,GAAkB,EACzC,CAAE,MAAA1Z,EAAO,OAAA4vB,EAAQ,SAAAla,CAAQ,EAAKgkB,GAAkB,EAChDvmC,EAAO,CAAE,MAAA6M,EAAO,OAAA4vB,CAAM,EACtB+K,EAASl6B,IAAUsa,EACnB6f,EAAsBlc,GAAiBuV,CAAW,EACxD9qC,OAAAA,EAAM,UAAU,IAAM,CACduxC,GAAW7gB,EAAgB,EAAG,gBAAkB/wB,EAAI,SACpD8xC,EAAmB,CAE3B,EAAG,CAACF,EAASE,EAAqB/gB,CAAgB,CAAC,EAC3C1wB,EAAM,cAAc,SAAU,CAAE,IAAKL,EAAK,KAAM,SAAU,UAAWirB,GAAKC,GAAS5B,EAAiB,EAAG4B,GAAS2lB,GAAkB,CAAE,EAAGgB,GAAU3mB,GAAS2lB,GAAmBO,GAAY,CAAE,CAAC,EAAGO,GAAUzmB,GAAS2lB,GAAmBQ,GAAY,CAAE,CAAC,EAAGO,GAAW1mB,GAAS2lB,GAAmBS,IAAe,CAAC,EAAGzuC,GAAeqoB,GAAS2lB,GAAmBU,GAAiB,CAAE,CAAC,CAAC,EAAG,MAAO,CAC3X,GAAII,EACE,CACE,CAACxmB,GAAO0lB,GAAmBQ,GAAaI,EAAQ,CAAC,CAAC,CAAC,EAAG,GAAGE,EAAO,QAAQ,KACxE,CAACxmB,GAAO0lB,GAAmBQ,GAAaG,EAAK,CAAC,CAAC,CAAC,EAAG,GAAGG,EAAO,KAAK,IACtF,EACkB,KACN,GAAIC,EACE,CACE,CAACzmB,GAAO0lB,GAAmBS,GAAcG,EAAQ,CAAC,CAAC,CAAC,EAAG,GAAGG,EAAQ,QAAQ,KAC1E,CAACzmB,GAAO0lB,GAAmBS,GAAcE,EAAK,CAAC,CAAC,CAAC,EAAG,GAAGI,EAAQ,KAAK,IACxF,EACkB,KACN,GAAG1e,EAAO,SACtB,EAAW,QAAStM,EAAS,eAAgBirB,EAAS,GAAO,OAAW,aAAcnmB,GAAsBlE,EAAQmE,EAAQhU,CAAK,CAAC,EAAI8U,GAASukB,GAAgB,CAAE,MAAAvkB,EAAO,OAAA8K,EAAQ,KAAAltB,EAAM,SAAAuiB,CAAQ,CAAE,CAAC,CACjM,CAEA,SAASmlB,GAAaC,EAAU,CAC5B,MAAO,CAAC,MAAO,QAAQ,EAAE,SAASA,CAAQ,CAC9C,CACA,SAASC,GAAQtB,EAAYuB,EAAW,CACpC,OAAOA,EAAY,GAAKvB,EAAW,OAASA,EAAW,SAAWA,EAAW,GACjF,CACA,SAASwB,GAAgB1lB,EAAO,CAC5B,KAAM,CAAE,UAAA2lB,EAAW,OAAAC,CAAM,EAAK5lB,GAAS,CAAE,UAAW,aAAa,EACjE,OAAS,OAAO2lB,GAAc,UAAYA,GACrC,OAAOC,GAAW,UAAYA,GAC9B5lB,GAASiB,GAAYjB,CAAK,GAC3B,MACR,CACA,SAAS6lB,GAAgB,CAAE,QAAA/O,EAAS,aAAA75B,GAAgB,CAChD,MAAM6oC,EAAQlyC,EAAM,OAAO,IAAI,EACzBi2B,EAAQD,GAAM,EACd,CAAE,QAAA2B,EAAS,UAAA5R,CAAS,EAAK6K,GAAS,EAClC,CAAE,SAAA9C,EAAU,OAAA+E,EAAQ,OAAA1L,CAAM,EAAKgK,GAAgB,EAC/C,CAAE,OAAA7F,EAAQ,YAAAsG,EAAa,UAAAG,CAAS,EAAKT,GAAgB,EACrD,CAAE,gBAAAgF,EAAiB,iBAAAC,CAAgB,EAAKJ,GAAU,EACxDgL,GAAsB5K,CAAgB,EACtC,MAAM+Z,EAAaC,GAAkB,EAC/B,CAAE,SAAAoB,EAAU,MAAA96B,EAAO,OAAA4vB,EAAQ,OAAA0L,EAAQ,YAAAC,EAAa,YAAAC,EAAa,aAAAC,EAAc,QAAAzlB,EAAS,IAAA0lB,EAAK,SAAAC,CAAQ,EAAKlC,EACtGrZ,EAAiElF,GAAU,WAAc,QAAoEA,GAAU,WAAe,EACtLsR,EAA2EtR,GAAU,UAAa,EAClG,CAAE,iBAAAmN,CAAgB,EAAK9K,GAAa8d,EAAQ5d,IAAc,CAC5D,UAAWod,GAAaC,CAAQ,EAC1B,CACE,CACI,UAAW,eAAe1b,EAAQ,GAAK,GAAK2b,GAAQtB,EAAYz5B,CAAK,EAAIogB,EAAS3C,CAAQ,KAC9G,EACgB,CAAE,UAAW,eAAe,CAC5C,EACc,CACE,CACI,UAAW,cAAcsd,GAAQtB,EAAY7J,CAAM,EAAIxP,EAAS3C,CAAQ,KAC5F,EACgB,CAAE,UAAW,eAAe,CAC5C,EACQ,SAAU+O,EACV,OAA8DtR,GAAU,MAChF,EAAM,EACI0gB,EAAwBld,GAAiB,IAAM,CACjD,IAAImd,EAAkB,EACtB,GAAIrpC,EAAa,SAAW6oC,EAAM,QAAS,CACvC,MAAMtlB,EAAgBvjB,EAAa,QAAQ,sBAAqB,EAC1DspC,EAAYT,EAAM,QAAQ,sBAAqB,EACrDQ,EAAkBhB,GAAaC,CAAQ,EACjCgB,EAAU,KAAO/lB,EAAc,MAAQA,EAAc,MAAQ+lB,EAAU,OAAS,EAChFA,EAAU,IAAM/lB,EAAc,KAAOA,EAAc,OAAS+lB,EAAU,QAAU,CAC1F,CACAzT,EAAiBwT,CAAe,CACpC,CAAC,EACD1yC,EAAM,UAAU,IAAMwrB,GAAQzF,EAAU0D,GAAcgpB,CAAqB,CAAC,EAAG,CAAC1sB,EAAW0sB,CAAqB,CAAC,EACjH,MAAM5R,EAAUhT,GAAiBC,EAAUxC,CAAM,EAC3CwV,EAAQ,CAAA,EACd,GAAI5T,GAAU5B,CAAM,EAChB,QAAShU,EAAQsa,EAAciP,EAAU,KAAK,IAAI5J,CAAM,EAAG3f,GAASsa,EAAciP,EAAU,KAAK,IAAI5J,CAAM,EAAG3f,GAAS,EAAG,CAItH,MAAM8U,EAHe0B,EAAS,SAAWxW,EAAQ,GAAKA,EAAQgU,EAAO,OAAS,IACzE2L,EAAS,GAAK3f,EAAQsa,EAAciP,GACpC5J,EAAS,GAAK3f,EAAQsa,EAAciP,EACc,KAA1B1T,GAAS7B,EAAQhU,CAAK,EAC7CxU,EAAM,CAAC,GAAGwU,CAAK,GAAIw6B,GAAgB1lB,CAAK,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EACzE0U,EAAM,KAAK,CAAE,IAAAh+B,EAAK,MAAAwU,EAAO,MAAA8U,CAAK,CAAE,CACpC,CAEJ,MAAMppB,EAAe4vC,GAAe,IAAM,CAClCA,EAAahhB,EACb+F,EAAQnO,GAAa,CAAE,MAAOopB,EAAahhB,CAAW,CAAE,EAEnDghB,EAAahhB,GAClB+F,EAAQpO,GAAa,CAAE,MAAOqI,EAAcghB,CAAU,CAAE,CAEhE,EACA,OAAQ5yC,EAAM,cAAc,MAAO,CAAE,UAAW4qB,GAAKC,GAAS8Y,GAAU,WAAW,CAAC,EAAG9Y,GAAS5B,EAAiB,CAAC,EAAG,MAAO,CACpH,GAAKia,EAAgC,KAAtB,CAAE,QAAS,MAAM,EAChC,GAAIrsB,IAAUu5B,GAAuB,MAAQ,CAAE,CAACtlB,GAAO0lB,GAAmB,OAAO,CAAC,CAAC,EAAG,GAAG35B,CAAK,IAAI,EAAK,KACvG,GAAI4vB,IAAW2J,GAAuB,OAChC,CAAE,CAACtlB,GAAO0lB,GAAmB,QAAQ,CAAC,CAAC,EAAG,GAAG/J,CAAM,IAAI,EACvD,KACN,GAAI0L,IAAW/B,GAAuB,OAChC,CAAE,CAACtlB,GAAO0lB,GAAmB,QAAQ,CAAC,CAAC,EAAG,GAAG2B,CAAM,IAAI,EACvD,KACN,GAAIC,EAAc,CAAE,CAACtnB,GAAO0lB,GAAmB,cAAc,CAAC,CAAC,EAAG4B,CAAW,EAAK,KAClF,GAAIC,EAAc,CAAE,CAACvnB,GAAO0lB,GAAmB,cAAc,CAAC,CAAC,EAAG6B,CAAW,EAAK,KAClF,GAAIC,IAAiBlC,GAAuB,aACtC,CAAE,CAACtlB,GAAO0lB,GAAmB,eAAe,CAAC,CAAC,EAAG,GAAG8B,CAAY,IAAI,EACpE,KACN,GAAIzlB,IAAYujB,GAAuB,QACjC,CAAE,CAACtlB,GAAO0lB,GAAmB,SAAS,CAAC,CAAC,EAAG,GAAG3jB,CAAO,IAAI,EACzD,KACN,GAAI0lB,IAAQnC,GAAuB,IAAM,CAAE,CAACtlB,GAAO0lB,GAAmB,KAAK,CAAC,CAAC,EAAG,GAAG+B,CAAG,IAAI,EAAK,KAC/F,GAAG1f,EAAO,mBACtB,CAAS,EACD7yB,EAAM,cAAc,MAAO,CAAE,IAAKkyC,EAAO,MAAOrf,EAAO,gBAAiB,UAAWjI,GAAKC,GAAS8Y,GAAU,OAAO,CAAC,EAAG9Y,GAAS5B,EAAiB,CAAC,EAAG,aAAciC,GAAe/D,EAAQ,YAAY,EAAG,SAAU,GAAI,GAAGmP,CAAe,EAAIwK,EAAM,IAAI,CAAC,CAAE,IAAAh+B,EAAK,MAAAwU,EAAO,MAAA8U,KAAY,CAC7Q,MAAMymB,EAAwBxP,EAAoB,KAAK,IAAIpM,GAAU,CAAC,EAChEqa,EAAUra,EAAS,GAAK3f,EAAQsa,EAAciP,EAAU5J,GAAU3f,GAASsa,EAAciP,GAC1F5J,EAAS,GAAK3f,EAAQsa,EAAciP,EAAU5J,GAAU3f,GAASsa,EAAciP,EAC9E,CACE,SAAUgS,EACV,QAAS5b,EAAS,EAAI3f,GAASsa,EAAciP,EAAU5J,GAAUrF,EAAciP,EAAU5J,EAAS3f,GAC9F,GACAu7B,CACxB,EACkB,OACAtB,EAAWta,EAAS,GAAK3f,EAAQsa,EAAciP,GAAa5J,EAAS,GAAK3f,EAAQsa,EAAciP,EAChG,CACE,SAAUgS,EACV,OAAQ5b,EAAS,EACXA,GAAUrF,EAAciP,EAAUvpB,GAClC,CAAC2f,GAAU3f,GAASsa,EAAciP,KAAagS,CACzE,EACkB,OACN,OAAQ7yC,EAAM,cAAcqxC,GAAW,CAAE,IAAKvuC,EAAK,MAAOwU,EAAO,MAAO8U,EAAO,OAAQklB,EAAQ,QAASC,EAAS,YAAa,CAACnlB,EAAO,QAASppB,EAAYsU,CAAK,EAAG,YAAa,IAAM,CAAE,IAAI8T,EAAI,OAAQA,EAAK8mB,EAAM,WAAa,MAAQ9mB,IAAO,OAAS,OAASA,EAAG,MAAK,CAAI,EAAG,CACpR,CAAC,CAAC,EACFonB,GAAYxyC,EAAM,cAAc,MAAO,CAAE,UAAW6qB,GAAS8Y,GAAU,UAAU,CAAC,CAAC,CAAE,CAAC,CAC9F,CAEA,MAAMmP,GAAoB9yC,EAAM,cAAc,IAAI,EAC5C+yC,GAAgBpnB,GAAe,gBAAiB,oBAAqBmnB,EAAiB,EAC5F,SAASE,GAA0B,CAAE,SAAA1zC,EAAU,GAAGI,GAAS,CACvD,KAAM,CAAE,IAAAC,EAAK,SAAAgyC,EAAU,OAAAsB,CAAM,EAAK5C,GAAuB3wC,EAAM,UAAU,EACnE,CAACwjC,EAASC,CAAU,EAAInjC,EAAM,SAAS,CAACizC,CAAM,EAC9C5pC,EAAerJ,EAAM,OAAO,IAAI,EAChC6rB,EAAU7rB,EAAM,QAAQ,KAAO,CACjC,QAAAkjC,EACA,KAAM,IAAMC,EAAW,EAAI,EAC3B,KAAM,IAAMA,EAAW,EAAK,CACpC,GAAQ,CAACD,CAAO,CAAC,EACbljC,OAAAA,EAAM,oBAAoBL,EAAK,IAAMksB,EAAS,CAACA,CAAO,CAAC,EAC/C7rB,EAAM,cAAcoxB,GAAuB,CAAE,GAAG1xB,CAAK,EACzDM,EAAM,cAAc8yC,GAAkB,SAAU,CAAE,MAAOjnB,CAAO,EAC5D7rB,EAAM,cAAc,MAAO,CAAE,IAAKqJ,EAAc,UAAWuhB,GAAKC,GAAS8Y,GAAS,CAAE,EAAG9Y,GAAS8Y,GAAU,GAAGgO,CAAQ,EAAE,CAAC,CAAC,CAAC,EACtH,CAAC,QAAS,KAAK,EAAE,SAASA,CAAQ,GAAK3xC,EAAM,cAAciyC,GAAiB,CAAE,aAAc5oC,EAAc,QAAS65B,CAAO,CAAE,EAC5HljC,EAAM,cAAc,MAAO,CAAE,UAAW6qB,GAAS8Y,GAAU,SAAS,CAAC,CAAC,EAAIrkC,CAAQ,EAClF,CAAC,MAAO,QAAQ,EAAE,SAASqyC,CAAQ,GAAK3xC,EAAM,cAAciyC,GAAiB,CAAE,aAAc5oC,EAAc,QAAS65B,CAAO,CAAE,CAAC,CAAC,CAAC,CAChJ,CAEA,MAAMgQ,GAAiB,IAAOlzC,EAAM,cAAcA,EAAM,SAAU,KAC9DA,EAAM,cAAc,OAAQ,CAAE,YAAa,EAAG,OAAQ,eAAgB,eAAgB,QAAS,KAAM,OAAQ,EAAG,4BAA4B,CAAE,EAC9IA,EAAM,cAAc,OAAQ,CAAE,EAAG,2CAA2C,CAAE,CAAC,EAC7EmzC,GAAoBlgB,GAAW,oBAAqBigB,IAAgB,EACpEE,GAAmBjgB,GAAmB,mBAAoB+f,IAAgB,EAChF,SAASG,IAAmB,CACxB,KAAM,CAAE,QAAAnQ,EAAS,KAAAoQ,EAAM,KAAAC,CAAI,EAAKR,GAAa,EACvC,CAAE,OAAA7b,CAAM,EAAK/F,GAAgB,EACnC,OAAI+F,EAAO,iBACAl3B,EAAM,cAAcA,EAAM,SAAU,KAAMk3B,EAAO,iBAAiB,CAAE,QAAAgM,EAAS,KAAAoQ,EAAM,KAAAC,CAAI,CAAE,CAAC,EAE7FvzC,EAAM,cAAc0yB,GAAY,CAAE,MAAOwQ,EAAU,kBAAoB,kBAAmB,KAAMA,EAAUiQ,GAAoBC,GAAkB,WAAYlQ,EAAUhM,EAAO,sBAAwBA,EAAO,qBAAsB,QAASgM,EAAUqQ,EAAOD,EAAM,CAC9Q,CAEA,SAASE,GAAW,CAAE,QAAAhkB,EAAS,SAAAR,EAAU,OAAAE,EAAQ,UAAAD,CAAS,EAAI,CAC1DO,EAAQ,CAAC,CAAE,WAAYikB,EAAiB,QAAAlmB,EAAS,GAAGkX,KAAgB,CAChE,MAAM6L,EAAaD,GAAuBoD,CAAe,EACzD,MAAO,CACH,QAASnmB,GAAiBC,EAASpF,GAAmBmoB,EAAW,WAAatwC,EAAM,cAAcqzC,GAAkB,IAAI,EAAI,IAAI,EAChI,WAAA/C,EACA,GAAG7L,CACf,CACI,CAAC,EACD,MAAMjW,EAASH,GAAalG,GAAmB6qB,EAAyB,EACpEhkB,EAAS/G,EAAiB,EAC1BiH,EAAOjH,GAAmBuG,CAAM,EAGhCS,EAAUvH,GAAmB8G,CAAM,CAE3C,CC9OO,MAAMklB,GAAsB,CAAC,CAAE,UAAAj0C,EAAY,GAAI,SAAAH,EAAU,MAAAwE,EAAO,GAAGpE,WAErE,IAAA,CAAE,UAAAD,EAAsB,MAAAqE,EAAe,GAAGpE,EACxC,SAAAJ,EACH,ECGEH,GAAU,OAAe,OAGzBkF,GAAI,CAACvB,EAAawB,IACtBnF,IAAQ,IAAI2D,EAAKwB,CAAM,GAAKxB,EA+DxB6wC,GAA4B,MAAOv8B,EAAaw8B,IAAoC,CACxF,GAAI,CACF,MAAMC,EAAO,MAAM10C,GAAO,IAAI,IAAIiY,EAAK,CACrC,aAAc,MAAA,CACf,EAED,GAAIy8B,EAAM,CACR,MAAMC,EAAY,IAAI,gBAAgBD,CAAI,EACpCt8B,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAOu8B,EACZv8B,EAAK,SAAWq8B,EAChB,SAAS,KAAK,YAAYr8B,CAAI,EAC9BA,EAAK,MAAA,EACL,SAAS,KAAK,YAAYA,CAAI,EAC9B,IAAI,gBAAgBu8B,CAAS,CAC/B,CACF,OAASzzC,EAAO,CACd,QAAQ,MAAM,2BAA4BA,CAAK,EAC/ClB,IAAQ,OAAO,QAAQkF,GAAE,wBAAwB,CAAC,CACpD,CACF,EAKM0vC,GAAe,CAAC38B,EAAaw8B,IAA2B,CAC5D,MAAMr8B,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAOH,EACZG,EAAK,SAAWq8B,EAChBr8B,EAAK,OAAS,SACd,SAAS,KAAK,YAAYA,CAAI,EAC9BA,EAAK,MAAA,EACL,SAAS,KAAK,YAAYA,CAAI,CAChC,EAKay8B,GAAuB,MAAO1nB,GAAuC,CAChF,MAAM2nB,EAAc3nB,EAAM,aAAeA,EAAM,IACzCsnB,EAAWtnB,EAAM,UAAYA,EAAM,OAAS,QAE9CA,EAAM,qBACR,MAAMqnB,GAA0BM,EAAaL,CAAQ,EAErDG,GAAaE,EAAaL,CAAQ,CAEtC,EAUMM,GAAgD,CAAC,CAAE,MAAA5nB,EAAO,MAAAhV,EAAO,WAAA68B,KAAiB,CACtF,KAAM,CAACC,EAAeC,CAAgB,EAAIjzC,EAAAA,SAAS,EAAK,EAElDkzC,EAAiB,MAAO7yC,GAAwB,CAGpD,GAFAA,EAAE,gBAAA,EAEE0yC,EAAY,CACdA,EAAW7nB,EAAOhV,CAAK,EACvB,MACF,CAEA+8B,EAAiB,EAAI,EACrB,GAAI,CACF,MAAML,GAAqB1nB,CAAK,CAClC,QAAA,CACE+nB,EAAiB,EAAK,CACxB,CACF,EAEA,OACEv0C,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAASk1C,EACT,SAAUF,EACV,UAAU,gDACV,aAAY/vC,GAAE,iBAAiB,EAC/B,MAAOA,GAAE,iBAAiB,EAEzB,SAAA+vC,QACEV,GAAA,CAAE,UAAU,yCAAyC,EAEtD5zC,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,iCAAA,CAAkC,CAAA,CAAA,CAIvD,EAIaa,GAA4C,CAAC,CACxD,OAAAC,EACA,OAAAzrC,EACA,QAAAuH,EACA,WAAAmkC,EAAa,EACb,WAAAC,EAAa,GACb,gBAAAC,EAAkB,GAClB,iBAAAC,EAAmB,GACnB,YAAAC,EAAc,GACd,aAAAC,EAAe,GACf,eAAAC,EAAiB,GACjB,WAAAZ,EACA,YAAArrC,EACA,GAAA2D,CACF,IAAM,CAEJ,KAAM,CAAColB,EAAcmjB,CAAe,EAAI5zC,EAAAA,SAASqzC,CAAU,EAErDQ,EAAkBl0C,EAAAA,OAAO0zC,CAAU,EAGnCnpB,EAAkBkpB,EAAO,IAAKloB,IAAW,CAC7C,IAAKA,EAAM,IACX,MAAOA,EAAM,MACb,YAAaA,EAAM,WAAA,EACnB,EAGIuC,EAAU,CAAA,EACZ6lB,GAAY7lB,EAAQ,KAAK6d,EAAI,EAC7BiI,GAAiB9lB,EAAQ,KAAK8f,EAAS,EACvCiG,GAAkB/lB,EAAQ,KAAKshB,EAAU,EACzC0E,GAAahmB,EAAQ,KAAKse,EAAO,EACjC4H,GAAgBlmB,EAAQ,KAAK2kB,EAAU,EAG3C,MAAM0B,EAAeV,EAAO3iB,CAAY,EAWxC,GARAxwB,EAAAA,UAAU,IAAM,CACd4zC,EAAgB,QAAUpjB,CAC5B,EAAG,CAACA,CAAY,CAAC,EAMb/oB,EAAa,CACf,MAAMqsC,GAAiBX,GAAU,CAAA,GAAI,MAAM,EAAG,CAAC,EAC/C,OACE10C,EAAAA,IAACC,EAAA,CACC,GAAA0M,EACA,UAAU,8HACT,GAAG3D,EAEH,WAAc,OAAS,EACtBqsC,EAAc,IAAI,CAAC7oB,EAAOhV,IACxBxX,EAAAA,IAAC4H,GAAA,CAEC,IAAK4kB,EAAM,WAAaA,EAAM,IAC9B,IAAKA,EAAM,OAAS,GACpB,UAAU,wEAAA,EAHLhV,CAAA,CAKR,EAEDnQ,EAAAA,KAACpH,EAAA,CAAI,UAAU,4FACb,SAAA,CAAAD,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,2BAAA,CAA4B,EACxCrvC,GAAE,gCAAgC,CAAA,CAAA,CACrC,CAAA,CAAA,CAIR,CAEA,OACEvE,EAAAA,IAAC0kC,GAAA,CACC,KAAMz7B,EACN,MAAOuH,EACP,OAAAgb,EACA,MAAOuG,EACP,QAAAhD,EACA,GAAI,CACF,KAAM,CAAC,CAAE,MAAAvX,KAAY,CACfA,IAAU29B,EAAgB,SAC5BD,EAAgB19B,CAAK,CAEzB,CAAA,EAEF,KAAM,CACJ,kBAAmB,EACnB,iBAAkB,EAClB,eAAgB,IAChB,iBAAkB,IAClB,oBAAqB,EACrB,qBAAsB,GACtB,wBAAyB,IACzB,wBAAyB,IACzB,aAAc,EAAA,EAEhB,SAAU,CACR,OAAQ,GACR,QAAS,EACT,QAAS,OACT,QAAS,KAAA,EAEX,UAAW,CACT,KAAM,IACN,MAAO,IACP,OAAQ,CACN,KAAM,OACN,MAAO,WACP,WAAY,aAAA,CACd,EAEF,WAAY,CACV,qBAAsB,GACtB,gBAAiB,GACjB,cAAe,EAAA,EAEjB,WAAY,CACV,SAAU,SACV,MAAO,IACP,OAAQ,GACR,OAAQ,EACR,aAAc,EACd,QAAS,EACT,IAAK,GACL,WAAY,GACZ,SAAU,EAAA,EAEZ,QAAS,CACP,QAAS,CACPw9B,GAAgBI,GACdp1C,EAAAA,IAACo0C,GAAA,CAEC,MAAOgB,EACP,MAAOrjB,EACP,WAAAsiB,CAAA,EAHI,UAAA,EAMR,OAAA,EACA,OAAO,OAAO,CAAA,EAElB,OAAQ,CACN,UAAW,CACT,gBAAiB,oBAAA,CACnB,CACF,CAAA,CAGN,EAgBaiB,GAAkB,IAAM,CACnC,KAAM,CAACrsC,EAAQC,CAAS,EAAI5H,EAAAA,SAAS,EAAK,EACpC,CAACozC,EAAQa,CAAS,EAAIj0C,EAAAA,SAAyB,CAAA,CAAE,EACjD,CAACqzC,EAAYa,CAAa,EAAIl0C,EAAAA,SAAS,CAAC,EAExCm0C,EAAch0C,EAAAA,YAAY,CAACi0C,EAA+Bl+B,EAAQ,IAAM,CAC5E+9B,EAAUG,CAAa,EACvBF,EAAch+B,CAAK,EACnBtO,EAAU,EAAI,CAChB,EAAG,CAAA,CAAE,EAECysC,EAAel0C,EAAAA,YAAY,IAAM,CACrCyH,EAAU,EAAK,CACjB,EAAG,CAAA,CAAE,EAEL,MAAO,CACL,OAAAD,EACA,YAAAwsC,EACA,aAAAE,EACA,aAAc,CACZ,OAAAjB,EACA,OAAAzrC,EACA,QAAS0sC,EACT,WAAAhB,CAAA,CACF,CAEJ,EAEAF,GAAa,YAAc,yLC9WrBp1C,GAAU,OAAe,OAEzBkF,GAAI,CAACvB,EAAawB,IACtBnF,IAAQ,IAAI2D,EAAKwB,CAAM,GAAKxB,EAqCxB4yC,GAAeppB,GACZA,EAAM,KAAOA,EAAM,aAKfqpB,GAAwD,CAAC,CACpE,OAAAnB,EAAS,CAAA,EACT,UAAA/0C,EAAY,GACZ,GAAAgN,EACA,YAAA3D,CACF,IAAM,CACJ,KAAM,CAAC8sC,EAAeC,CAAgB,EAAIz0C,EAAAA,SAAS,CAAC,EAC9C,CAAE,YAAAm0C,EAAa,aAAAO,CAAA,EAAiBV,GAAA,EAGhCI,EAAgCtvC,EAAAA,QACpC,IACEsuC,EAAO,IAAK1c,IAAS,CACnB,IAAK4d,GAAY5d,CAAG,EACpB,MAAOA,EAAI,kBAAoB,GAC/B,UAAW4d,GAAY5d,CAAG,EAC1B,YAAaA,EAAI,aACjB,SAAUA,EAAI,kBAAoB,SAASA,EAAI,EAAE,EAAA,EACjD,EACJ,CAAC0c,CAAM,CAAA,EAIT,GAAI,CAACA,GAAUA,EAAO,SAAW,EAC/B,OACE10C,EAAAA,IAACC,EAAA,CACC,UAAW,0FAA0FN,CAAS,GAC9G,GAAAgN,EAAS,GAAG3D,EAEZ,SAAA3B,EAAAA,KAACpH,EAAA,CAAI,UAAU,+CACb,SAAA,CAAAD,MAACwD,IAAK,KAAK,QAAQ,KAAK,KAAK,UAAU,kBAAkB,QACxDvD,EAAA,CAAI,UAAU,UAAW,SAAAsE,GAAE,eAAe,CAAA,CAAE,CAAA,CAAA,CAC/C,CAAA,CAAA,EAKN,MAAM6wC,EAAeV,EAAOoB,CAAa,GAAKpB,EAAO,CAAC,EAEtD,OACErtC,EAAAA,KAACpH,EAAA,CAAI,GAAA0M,EAAQ,UAAAhN,EAAuB,GAAGqJ,EAErC,SAAA,CAAAhJ,EAAAA,IAACC,EAAA,CAAI,UAAU,sFACb,SAAAD,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,UAAU,qCACV,QAAS,IAAMm2C,EAAYC,EAAeI,CAAa,EACvD,aAAYvxC,GAAE,iBAAiB,EAE/B,SAAAvE,EAAAA,IAAC4H,GAAA,CACC,IAAKguC,GAAYR,CAAY,EAC7B,IAAKA,EAAa,kBAAoB,GACtC,UAAU,8BAAA,CAAA,CACZ,CAAA,EAEJ,EAGCV,EAAO,OAAS,GACf10C,EAAAA,IAACC,EAAA,CAAI,UAAU,kCACZ,SAAAy0C,EAAO,IAAI,CAAC1c,EAAKxgB,IAChBxX,EAAAA,IAACV,EAAA,CAEC,KAAK,SACL,UAAW,gGACTkY,IAAUs+B,EACN,oCACA,uFACN,GACA,QAAS,IAAMC,EAAiBv+B,CAAK,EACrC,aAAYwgB,EAAI,kBAAoB,GAAGzzB,GAAE,YAAY,CAAC,IAAIiT,EAAQ,CAAC,GAEnE,SAAAxX,EAAAA,IAAC4H,GAAA,CACC,IAAKguC,GAAY5d,CAAG,EACpB,IAAKA,EAAI,kBAAoB,GAC7B,UAAU,4BAAA,CAAA,CACZ,EAdKA,EAAI,EAAA,CAgBZ,EACH,EAIFh4B,MAACy0C,GAAA,CAAc,GAAGuB,CAAA,CAAc,CAAA,EAClC,CAEJ,EAEAH,GAAmB,YAAc,0JC7E3BI,GAAoD,CAAC,CACzD,MAAAv1C,EACA,IAAAw1C,EAAM,EACN,IAAAC,EAAM,IACN,SAAA31C,EACA,KAAAd,EAAO,KACP,SAAAiD,EAAW,GACX,UAAAhD,EAAY,GACZ,GAAAgN,EACA,YAAA3D,CACF,IAAM,CAmBJ,MAAM3E,EAlBc,CAClB,GAAI,CACF,UAAW,MACX,OAAQ,kBACR,MAAO,cAAA,EAET,GAAI,CACF,UAAW,OACX,OAAQ,YACR,MAAO,MAAA,EAET,GAAI,CACF,UAAW,OACX,OAAQ,oBACR,MAAO,cAAA,CACT,EAG0B3E,CAAI,EAE1B02C,EAAiB,IAAM,CACvB11C,EAAQw1C,GAAO,CAACvzC,GAClBnC,EAASE,EAAQ,CAAC,CAEtB,EAEM21C,EAAiB,IAAM,CACvB31C,EAAQy1C,GAAO,CAACxzC,GAClBnC,EAASE,EAAQ,CAAC,CAEtB,EAEM41C,EAAqB30C,GAA2C,CACpE,MAAMI,EAAW,SAASJ,EAAE,OAAO,MAAO,EAAE,EAC5C,GAAI,CAAC,MAAMI,CAAQ,EAAG,CACpB,MAAMw0C,EAAe,KAAK,IAAIL,EAAK,KAAK,IAAIC,EAAKp0C,CAAQ,CAAC,EAC1DvB,EAAS+1C,CAAY,CACvB,CACF,EAEMC,EAAmB70C,GAA0C,CACjE,MAAMI,EAAW,SAASJ,EAAE,OAAO,MAAO,EAAE,EACxC,MAAMI,CAAQ,GAAKA,EAAWm0C,EAChC11C,EAAS01C,CAAG,EACHn0C,EAAWo0C,GACpB31C,EAAS21C,CAAG,CAEhB,EAEMM,EAAgB9zC,GAAYjC,GAASw1C,EACrCQ,EAAgB/zC,GAAYjC,GAASy1C,EAE3C,OACE9uC,EAAAA,KAACpH,EAAA,CACC,UAAW,mFAAmFoE,EAAQ,SAAS,IAAI1E,CAAS,GAC5H,GAAAgN,EAAS,GAAG3D,EAGZ,SAAA,CAAAhJ,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAS82C,EACT,SAAUK,EACV,UAAW,GAAGpyC,EAAQ,MAAM,6LAC5B,aAAW,QAEX,SAAArE,EAAAA,IAACwD,GAAA,CAAK,KAAK,QAAQ,UAAU,SAAA,CAAU,CAAA,CAAA,EAIzCxD,EAAAA,IAACK,GAAA,CACC,KAAK,SACL,MAAAK,EACA,SAAU41C,EACV,OAAQE,EACR,IAAAN,EACA,IAAAC,EACA,SAAAxzC,EACA,UAAW,GAAG0B,EAAQ,KAAK,6SAC3B,aAAW,IAAA,CAAA,EAIbrE,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAS+2C,EACT,SAAUK,EACV,UAAW,GAAGryC,EAAQ,MAAM,6LAC5B,aAAW,QAEX,SAAArE,EAAAA,IAACwD,GAAA,CAAK,KAAK,OAAO,UAAU,SAAA,CAAU,CAAA,CAAA,CACxC,CAAA,CAAA,CAGN,2GCrKM+E,GAAW,OAAe,QAAQ,eAAe,oBAAoB,GAAM,CAC7E,IAAK,IAAIC,IAAoB,QAAQ,IAAI,uBAAwB,GAAGA,CAAI,EACxE,KAAM,IAAIA,IAAoB,QAAQ,KAAK,uBAAwB,GAAGA,CAAI,EAC1E,MAAO,IAAIA,IAAoB,QAAQ,MAAM,uBAAwB,GAAGA,CAAI,CAChF,EAKMjE,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EAwCxC2zC,GAAqC,CACzC,CAAE,KAAM,OAAQ,MAAO,KAAM,SAAU,uBAAwB,YAAa,kEAAA,EAC5E,CAAE,KAAM,QAAS,MAAO,KAAM,SAAU,wBAAyB,YAAa,0EAAA,EAC9E,CAAE,KAAM,QAAS,MAAO,KAAM,SAAU,wBAAyB,YAAa,sEAAA,EAC9E,CAAE,KAAM,SAAU,MAAO,KAAM,SAAU,yBAA0B,YAAa,0EAAA,EAChF,CAAE,KAAM,MAAO,MAAO,KAAM,SAAU,sBAAuB,YAAa,0EAAA,CAC5E,EAgCMC,GAA8C,CAAC,CACnD,UAAAC,EACA,aAAAC,EACA,OAAAC,EACA,QAAAC,EACA,KAAAt3C,EAAO,KACP,UAAAC,EAAY,GACZ,GAAAgN,EACA,YAAA3D,CACF,IAAM,CACJ,MAAMiuC,EAAc,CAClB,GAAI,0BACJ,GAAI,8BACJ,GAAI,2BAAA,EAGAC,EAAa,CACjB,GAAI,UACJ,GAAI,YACJ,GAAI,SAAA,EAGAC,EAAoBv2C,GACPi2C,EAAU,KAAMO,GAAMA,EAAE,OAASx2C,CAAI,GACrC,OAAS,EAGtBsC,EAAc,MAAOtC,GAAuB,CAChD,GAAIo2C,EAAS,CACXA,EAAQp2C,CAAI,EACZ,MACF,CAGA,GAAI,CAUF,GAAI,EATa,MAAM,MAAM,cAAcm2C,CAAM,aAAc,CAC7D,OAAQ,OACR,QAAS,CACP,eAAgB,kBAAA,EAElB,KAAM,KAAK,UAAU,CAAE,KAAAn2C,EAAM,EAC7B,YAAa,SAAA,CACd,GAEa,GACZ,MAAM,IAAI,MAAM,WAAW,EAI7B,OAAO,SAAS,OAAA,CAClB,OAASL,EAAO,CACdgI,GAAO,MAAM,UAAWhI,CAAK,CAC/B,CACF,EAEA,OACEP,EAAAA,IAACC,EAAA,CAAI,UAAW,wBAAwBN,CAAS,GAAI,GAAAgN,EAAS,GAAG3D,EAC9D,SAAA2tC,GAAiB,IAAK1nB,GAAW,CAChC,MAAM2Q,EAAQuX,EAAiBloB,EAAO,IAAI,EACpCnZ,EAAWghC,IAAiB7nB,EAAO,KAEzC,OACE5nB,EAAAA,KAAC/H,EAAA,CAEC,QAAS,IAAM4D,EAAY+rB,EAAO,IAAI,EACtC,UAAW;AAAA;AAAA,gBAEPgoB,EAAYv3C,CAAI,CAAC;AAAA,gBACjBoW,EACE,GAAGmZ,EAAO,WAAW,sBACrB,gHACJ;AAAA,cAEF,MAAO1qB,GAAE0qB,EAAO,QAAQ,EAExB,SAAA,CAAAjvB,MAACG,IAAK,UAAW+2C,EAAWx3C,CAAI,EAAI,WAAO,MAAM,EACjDM,EAAAA,IAACG,GAAA,CAAM,SAAAoE,GAAE0qB,EAAO,QAAQ,EAAE,EACzB2Q,EAAQ,GACP5/B,EAAAA,IAACG,GAAA,CAAK,UAAU,cAAe,SAAAy/B,CAAA,CAAM,CAAA,CAAA,EAflC3Q,EAAO,IAAA,CAmBlB,CAAC,CAAA,CACH,CAEJ,2GC9KM1mB,GAAW,OAAe,QAAQ,eAAe,qBAAqB,GAAM,CAC9E,IAAK,IAAIC,IAAoB,QAAQ,IAAI,wBAAyB,GAAGA,CAAI,EACzE,KAAM,IAAIA,IAAoB,QAAQ,KAAK,wBAAyB,GAAGA,CAAI,EAC3E,MAAO,IAAIA,IAAoB,QAAQ,MAAM,wBAAyB,GAAGA,CAAI,CACjF,EASMjE,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EAuExCq0C,GAAgD,CAAC,CACrD,KAAA5zC,EACA,aAAA6zC,EAAe,GACf,YAAA50C,EACA,SAAAlC,EACA,eAAA+2C,EAAiB,oBACjB,UAAAC,EAAY,QACZ,SAAA70C,EAAW,GACX,UAAAhD,EAAY,GACZ,GAAAgN,EACA,YAAA3D,CACF,IAAM,CACJ,MAAMyuC,EAAYx2C,EAAAA,OAAuB,IAAI,EACvC,CAAC6iB,EAAS4zB,CAAU,EAAIp2C,EAAAA,SAASg2C,CAAY,EAC7C,CAACK,EAAcC,CAAe,EAAIt2C,EAAAA,SAAS,EAAK,EAChD,CAACu2C,EAAeC,CAAgB,EAAIx2C,EAAAA,SAAS,EAAK,EAClD,CAACy2C,EAASC,CAAU,EAAI12C,EAAAA,SAAS,EAAE,EAGzCC,EAAAA,UAAU,IAAM,CAEVk2C,EAAU,SAAW,CAACA,EAAU,QAAQ,YAC1CA,EAAU,QAAQ,UAAYH,EAElC,EAAG,CAACA,CAAY,CAAC,EAGjB/1C,EAAAA,UAAU,IAAM,CACVf,GACFA,EAASsjB,CAAO,CAEpB,EAAG,CAACA,EAAStjB,CAAQ,CAAC,EAGtB,MAAMy3C,EAAeC,GAAuB,CAE1C3vC,GAAO,IAAI,gBAAiB2vC,CAAM,CACpC,EAGMC,EAAoB,MAAOh1C,GAAe,CAC9C,MAAMi1C,EAAW,IAAI,SACrBA,EAAS,OAAO,OAAQj1C,CAAI,EAE5B,GAAI,CACF,MAAMk1C,EAAW,MAAM,MAAMd,EAAgB,CAC3C,OAAQ,OACR,KAAMa,EACN,YAAa,SAAA,CACd,EAED,GAAI,CAACC,EAAS,GAAI,MAAM,IAAI,MAAM,QAAQ,EAE1C,MAAM10B,EAAO,MAAM00B,EAAS,KAAA,EAE5B9vC,GAAO,IAAI,kBAAmBob,EAAK,GAAG,CACxC,OAASpjB,EAAO,CACdgI,GAAO,MAAM,cAAehI,CAAK,CACnC,CACF,EAGM+3C,EAAoB32C,GAA2C,CACnE,MAAMwB,EAAOxB,EAAE,OAAO,QAAQ,CAAC,EAC3BwB,GACFg1C,EAAkBh1C,CAAI,CAE1B,EAGMo1C,EAAa,IAAM,CACnBR,IAEFxvC,GAAO,IAAI,eAAgBwvC,CAAO,EAClCD,EAAiB,EAAK,EACtBE,EAAW,EAAE,EAEjB,EAEMQ,EAAiF,CACrF,CAAE,OAAQ,OAAQ,KAAM,IAAK,MAAOj0C,GAAE,qBAAqB,CAAA,EAC3D,CAAE,OAAQ,SAAU,KAAM,IAAK,MAAOA,GAAE,uBAAuB,CAAA,EAC/D,CAAE,OAAQ,YAAa,KAAM,IAAK,MAAOA,GAAE,0BAA0B,CAAA,EACrE,CAAE,OAAQ,SAAU,KAAM,IAAK,MAAOA,GAAE,uBAAuB,CAAA,EAC/D,CAAE,OAAQ,OAAQ,KAAM,MAAO,MAAOA,GAAE,qBAAqB,CAAA,CAAE,EAG3Dk0C,EAA0D,CAC9D,CAAE,OAAQ,KAAM,MAAO,IAAA,EACvB,CAAE,OAAQ,KAAM,MAAO,IAAA,EACvB,CAAE,OAAQ,KAAM,MAAO,IAAA,CAAK,EAGxBC,EAAqE,CACzE,CAAE,OAAQ,aAAc,KAAM,IAAK,MAAOn0C,GAAE,4BAA4B,CAAA,EACxE,CAAE,OAAQ,cAAe,KAAM,KAAM,MAAOA,GAAE,6BAA6B,CAAA,EAC3E,CAAE,OAAQ,aAAc,KAAM,IAAK,MAAOA,GAAE,2BAA2B,CAAA,CAAE,EAG3E,OACE8C,OAACpH,GAAI,UAAW,0EAA0EN,CAAS,GAAI,GAAAgN,EAAS,GAAG3D,EAEjH,SAAA,CAAA3B,EAAAA,KAACpH,EAAA,CAAI,UAAU,kHAEb,SAAA,CAAAD,MAACC,GAAI,UAAU,6EACZ,SAAAu4C,EAAe,IAAKG,GACnB34C,EAAAA,IAACV,EAAA,CAEC,KAAK,SACL,QAAS,IAAM24C,EAAYU,EAAI,MAAM,EACrC,SAAAh2C,EACA,UAAU,qKACV,MAAOg2C,EAAI,MAEV,SAAAA,EAAI,IAAA,EAPAA,EAAI,MAAA,CASZ,EACH,QAGC14C,EAAA,CAAI,UAAU,6EACZ,SAAAw4C,EAAe,IAAKE,GACnB34C,EAAAA,IAACV,EAAA,CAEC,KAAK,SACL,QAAS,IAAM24C,EAAYU,EAAI,MAAM,EACrC,SAAAh2C,EACA,UAAU,qIAET,SAAAg2C,EAAI,KAAA,EANAA,EAAI,MAAA,CAQZ,EACH,QAGC14C,EAAA,CAAI,UAAU,6EACZ,SAAAy4C,EAAY,IAAKC,GAChB34C,EAAAA,IAACV,EAAA,CAEC,KAAK,SACL,QAAS,IAAM24C,EAAYU,EAAI,MAAM,EACrC,SAAAh2C,EACA,UAAU,yJACV,MAAOg2C,EAAI,MAEV,SAAAA,EAAI,IAAA,EAPAA,EAAI,MAAA,CASZ,EACH,EAGAtxC,EAAAA,KAACpH,EAAA,CAAI,UAAU,6EACb,SAAA,CAAAD,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAS,IAAMw4C,EAAiB,EAAI,EACpC,SAAAn1C,EACA,UAAU,iJACV,MAAO4B,GAAE,qBAAqB,EAC/B,SAAA,IAAA,CAAA,EAGD8C,EAAAA,KAACK,GAAA,CAAM,UAAU,4IAA4I,SAAA,CAAA,KAE3J1H,EAAAA,IAACK,GAAA,CACC,KAAK,OACL,OAAO,UACP,SAAUi4C,EACV,SAAA31C,EACA,UAAU,QAAA,CAAA,CACZ,CAAA,CACF,CAAA,EACF,EAGA0E,EAAAA,KAAC/H,EAAA,CACC,KAAK,SACL,QAAS,IAAMs4C,EAAgB,CAACD,CAAY,EAC5C,SAAAh1C,EACA,UAAW,0HACTg1C,EAAe,+BAAiC,EAClD,GAEC,SAAA,CAAA,MACApzC,GAAE,0BAA0B,CAAA,CAAA,CAAA,CAC/B,EACF,EAGCozC,EACC33C,EAAAA,IAACuH,GAAA,CACC,MAAOuc,EACP,SAAWniB,GAAM+1C,EAAW/1C,EAAE,OAAO,KAAK,EAC1C,YAAAe,EACA,SAAAC,EACA,UAAU,wFACV,MAAO,CAAE,UAAA60C,CAAA,CAAU,CAAA,EAGrBx3C,EAAAA,IAACC,EAAA,CACC,IAAKw3C,EACL,gBAAiB,CAAC90C,EAClB,QAAUhB,GAAM+1C,EAAW/1C,EAAE,cAAc,SAAS,EACpD,UAAU,oHACV,MAAO,CAAE,UAAA61C,CAAA,EACT,mBAAkB90C,CAAA,CAAA,QAKrBrC,GAAA,CAAM,KAAK,SAAS,KAAAoD,EAAY,MAAOqgB,EAAS,EAGhD+zB,SACE53C,EAAA,CAAI,UAAU,kEACb,SAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,gDACb,SAAA,CAAAD,MAACgI,GAAA,CAAG,UAAU,yDACX,SAAAzD,GAAE,yBAAyB,EAC9B,EACAvE,EAAAA,IAACK,GAAA,CACC,KAAK,MACL,MAAO03C,EACP,SAAWp2C,GAAMq2C,EAAWr2C,EAAE,OAAO,KAAK,EAC1C,YAAY,sBACZ,UAAU,sIAAA,CAAA,EAEZ0F,EAAAA,KAACpH,EAAA,CAAI,UAAU,yBACb,SAAA,CAAAD,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAS,IAAM,CACbw4C,EAAiB,EAAK,EACtBE,EAAW,EAAE,CACf,EACA,UAAU,iGAET,YAAE,eAAe,CAAA,CAAA,EAEpBh4C,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAASi5C,EACT,UAAU,gEAET,YAAE,0BAA0B,CAAA,CAAA,CAC/B,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EAEJ,CAEJ,2GChRaK,GAA0C,CAAC,CACtD,QAAA90B,EACA,KAAAlW,EACA,OAAAirC,EAAS,GACT,UAAAl5C,EAAY,GACZ,aAAAm5C,EACA,GAAAnsC,EACA,YAAA3D,CACF,IAAM,CAEJ,MAAM+vC,EAAgBnrC,GAAQkW,GAAW,GAGzC,GAAI,CAACi1B,GAAiBA,EAAc,KAAA,IAAW,GAC7C,OAAO,KAIT,GAAI,CAACF,EAAQ,CACX,MAAMG,EAAc;AAAA;AAAA;AAAA;AAAA,QAIhBr5C,CAAS;AAAA,MACX,KAAA,EAAO,QAAQ,OAAQ,GAAG,EAE5B,aACGM,EAAA,CAAI,UAAW+4C,EAAa,GAAArsC,EAAS,GAAG3D,EACtC,SAAA+vC,EACH,CAEJ,CAGA,MAAME,EAAqB,CACzB,YAAa,CAEX,SAAU,WAEV,SAAU,QAAS,WAAY,SAAU,QAAS,SAAU,SAE5D,OAAQ,QAAS,WAAY,SAAU,SAEvC,QAAS,OAAQ,OAAQ,OAEzB,OAAQ,OAAQ,OAAQ,QAExB,MAAO,OAEP,QAAS,QAAS,SAAU,QAAS,SAErC,UAAW,SAEX,YAAa,MAAO,UAEpB,UAAW,WAAY,UAAW,WAAY,MAAA,EAEhD,YAAa,CACX,UAAW,SAAU,UAAW,cAAe,UAAW,SAC1D,WAAY,YAAa,cACzB,aAAc,aAAc,QAAA,EAE9B,gBAAiB,GACjB,SAAU,CAAC,QAAQ,CAAA,EAIfC,EAAgB9yC,EAAAA,QAAQ,IAAM,CAClC,MAAM6oB,EAAS6pB,EACX,CACE,GAAGG,EACH,GAAGH,EAEH,YAAa,CAAC,GAAGG,EAAc,YAAa,GAAIH,EAAa,aAAe,EAAG,EAC/E,YAAa,CAAC,GAAGG,EAAc,YAAa,GAAIH,EAAa,aAAe,CAAA,CAAG,CAAA,EAEjFG,EAIJ,OAHgB37B,GAAU,SAASy7B,EAAe9pB,CAAM,EAGzC,QACb,gDACA,CAACkqB,EAAeC,EAAgBC,EAAcC,KACxCD,EAAK,WAAW,SAAS,GAAKA,EAAK,WAAW,UAAU,IACtD,CAACF,EAAM,SAAS,MAAM,EACjB,MAAMC,CAAM,SAASC,CAAI,IAAIC,CAAK,8BAGtCH,CACT,CAEJ,EAAG,CAACJ,EAAeD,CAAY,CAAC,EAG1B3qC,EAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBrBxO,CAAS;AAAA,IACX,KAAA,EAAO,QAAQ,OAAQ,GAAG,EAE5B,OACEK,EAAAA,IAACC,EAAA,CACC,GAAA0M,EACA,UAAWwB,EACX,wBAAyB,CAAE,OAAQ+qC,CAAA,EAClC,GAAGlwC,CAAA,CAAA,CAGV,+GC/LM3J,GAAS,IAAO,OAAe,OAG/BkF,GAAI,CAACvB,EAAawB,IACtBnF,MAAU,IAAI2D,EAAKwB,CAAM,GAAKxB,EA8GnBu2C,GAAwC,CAAC,CACpD,QAAAz1B,EAAU,GACV,SAAAtjB,EACA,OAAQg5C,EAAa,GACrB,eAAAC,EACA,KAAAC,EAAO,GACP,YAAAh3C,EAAc,GACd,MAAApC,EACA,mBAAAq5C,EAAqB,GACrB,iBAAAC,EAAmB,GACnB,aAAAd,EACA,UAAAn5C,EAAY,GACZ,KAAA8D,EAAO,UACP,cAAAo2C,EAAgB,eAChB,SAAAC,EAAW,GACX,GAAAntC,EACA,YAAA3D,CACF,IAAM,CAEJ,KAAM,CAAC6vC,EAAQkB,CAAS,EAAIz4C,EAAAA,SAASk4C,CAAU,EAGzC,CAACQ,EAAcC,CAAe,EAAI34C,EAAAA,SAASwiB,CAAO,EAGlD,CAACo2B,EAAaC,CAAc,EAAI74C,EAAAA,SAAS,EAAK,EAGpDpB,EAAM,UAAU,IAAM,CACpB65C,EAAUP,CAAU,CACtB,EAAG,CAACA,CAAU,CAAC,EAGft5C,EAAM,UAAU,IAAM,CACpB+5C,EAAgBn2B,CAAO,CACzB,EAAG,CAACA,CAAO,CAAC,EAGZ,MAAMs2B,EAAsB34C,cAAaE,GAA8C,CACrF,MAAM04C,EAAa14C,EAAE,OAAO,MAM5B,GAHAs4C,EAAgBI,CAAU,EAGtB75C,EAAU,CACZ,MAAM8J,EAAQjL,GAAA,GAAU,oBAAoB,CAAE,MAAOg7C,EAAY,KAAA52C,EAAM,KAAM,UAAA,CAAY,GACpF,CAAE,OAAQ,CAAE,KAAAA,EAAM,MAAO42C,EAAW,EACzC75C,EAAS8J,CAAK,CAChB,CACF,EAAG,CAAC9J,EAAUiD,CAAI,CAAC,EAGb62C,EAAuB74C,cAAaE,GAA2C,CACnF,MAAM44C,EAAa54C,EAAE,OAAO,QAW5B,GARAo4C,EAAUQ,CAAU,EAGfA,GACHJ,EAAe,EAAK,EAIlBV,EAAgB,CAClB,MAAMnvC,EAAQjL,MAAU,oBAAoB,CAAE,QAASk7C,EAAY,KAAMV,EAAe,KAAM,WAAY,GACrG,CAAE,OAAQ,CAAE,KAAMA,EAAe,QAASU,EAAW,EAC1Dd,EAAenvC,CAAK,CACtB,CACF,EAAG,CAACmvC,EAAgBI,CAAa,CAAC,EAG5BW,EAA0B/4C,EAAAA,YAAY,IAAM,CAChD04C,EAAenzC,GAAQ,CAACA,CAAI,CAC9B,EAAG,CAAA,CAAE,EAEL,OACEK,OAACpH,GAAI,UAAW,aAAaN,CAAS,GAAI,GAAAgN,EAAS,GAAG3D,EAEpD,SAAA,CAAA3B,EAAAA,KAACpH,EAAA,CAAI,UAAU,oCAEZ,SAAA,CAAAK,GACCN,EAAAA,IAAC0H,GAAA,CAAM,UAAU,6DACd,SAAApH,EACH,EAGF+G,EAAAA,KAACpH,EAAA,CAAI,UAAU,0BAEZ,SAAA,CAAA44C,GAAU,CAACiB,GACV95C,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAASk7C,EACT,UAAW,4EACTN,EACI,kMACA,6LACN,GAEC,SAAc31C,GAAd21C,EAAgB,qBAA0B,gBAAN,CAAsB,CAAA,EAI9DP,GACCtyC,EAAAA,KAACK,GAAA,CAAM,UAAU,6CACf,SAAA,CAAA1H,EAAAA,IAACK,GAAA,CACC,KAAK,WACL,KAAMw5C,EACN,QAAShB,EACT,SAAUyB,EACV,SAAUR,EACV,UAAU,qLAAA,CAAA,QAEX75C,EAAA,CAAI,UAAU,uDACZ,SAAAsE,GAAE,kBAAkB,CAAA,CACvB,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,EACF,EAGC,CAAC21C,GACAl6C,EAAAA,IAACuH,GAAA,CACC,KAAA9D,EACA,MAAOu2C,EACP,SAAUI,EACV,YAAA13C,EACA,KAAAg3C,EACA,SAAAI,EACA,UAAW,mLACTjB,EACI,sJACA,wIACN,EAAA,CAAA,EAKHqB,GACCl6C,EAAAA,IAACC,EAAA,CAAI,UAAU,uGACb,SAAAD,EAAAA,IAAC44C,GAAA,CACC,QAASoB,EACT,OAAQ,GACR,UAAWJ,GAAoB,sEAC/B,aAAAd,CAAA,CAAA,CACF,CACF,CAAA,EAGJ,CAEJ,8GCxQMv0C,GAAKvB,GACR,OAAe,QAAQ,IAAIA,CAAG,GAAKA,EA4DzBy3C,GAAsD,CAAC,CAClE,UAAAjiB,EAAY,IACZ,WAAAkiB,EACA,aAAAC,EACA,UAAAh7C,EAAY,GACZ,SAAAH,EACA,GAAAmN,EACA,YAAA3D,CACF,IAAM,CACJ,KAAM,CAAC4xC,EAAYC,CAAa,EAAIv5C,EAAAA,SAAS,EAAK,EAC5C,CAACw5C,EAAaC,CAAc,EAAIz5C,EAAAA,SAAS,EAAK,EAC9C05C,EAAa/5C,EAAAA,OAAuB,IAAI,EAKxCg6C,EAAcx5C,EAAAA,YAAY,IAAM,CACpC,GAAIu5C,EAAW,QAAS,CACtB,MAAME,EAAeF,EAAW,QAAQ,aACxCD,EAAeG,EAAe1iB,CAAS,CACzC,CACF,EAAG,CAACA,CAAS,CAAC,EAEdj3B,EAAAA,UAAU,IAAM,CACd05C,EAAA,EAGA,MAAMpL,EAAYmL,EAAW,QAC7B,GAAI,CAACnL,EAAW,OAEhB,MAAM6E,EAAS7E,EAAU,iBAAiB,KAAK,EAC/C6E,EAAO,QAAS1c,GAAQ,CACjBA,EAAI,UACPA,EAAI,iBAAiB,OAAQijB,CAAW,CAE5C,CAAC,EAGD,IAAIvpC,EAAkC,KACtC,OAAI,OAAO,eAAmB,MAC5BA,EAAW,IAAI,eAAeupC,CAAW,EACzCvpC,EAAS,QAAQm+B,CAAS,GAGrB,IAAM,CACX6E,EAAO,QAAS1c,GAAQ,CACtBA,EAAI,oBAAoB,OAAQijB,CAAW,CAC7C,CAAC,EACDvpC,GAAU,WAAA,CACZ,CACF,EAAG,CAACupC,EAAaz7C,CAAQ,CAAC,EAE1B,MAAM27C,EAAe,IAAM,CACzBN,EAAe7zC,GAAS,CAACA,CAAI,CAC/B,EAEMo0C,EAAqBV,GAAcn2C,GAAE,8CAA8C,EACnF82C,EAAuBV,GAAgBp2C,GAAE,gDAAgD,EAE/F,OACE8C,EAAAA,KAACpH,EAAA,CAAI,UAAAN,EAAsB,GAAAgN,EAAS,GAAG3D,EAErC,SAAA,CAAA3B,EAAAA,KAACpH,EAAA,CAAI,UAAU,WACb,SAAA,CAAAD,EAAAA,IAACC,EAAA,CACC,IAAK+6C,EACL,UACE,CAACJ,GAAcE,EACX,mEACA,mDAEN,MACE,CAACF,GAAcE,EACX,CAAE,UAAW,GAAGtiB,CAAS,IAAA,EACzB,OAGL,SAAAh5B,CAAA,CAAA,EAIF,CAACo7C,GAAcE,GACd96C,EAAAA,IAACC,EAAA,CAAI,UAAU,yHAAA,CAA0H,CAAA,EAE7I,EAGC66C,GACCzzC,EAAAA,KAAC/H,EAAA,CACC,KAAK,SACL,QAAS67C,EACT,UAAU,wMAEV,SAAA,CAAAn7C,MAACG,GAAA,CAAK,UAAU,yDACb,SAAAy6C,EAAaS,EAAuBD,EACvC,EACAp7C,EAAAA,IAACwD,GAAA,CACC,KAAMo3C,EAAa,aAAe,eAClC,KAAK,IAAA,CAAA,CACP,CAAA,CAAA,CACF,EAEJ,CAEJ,gIC3KMr2C,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EA4DjCs4C,GAA8B,CAAC,CAC1C,OAAAryC,EACA,QAAAuH,EACA,MAAA+qC,EACA,KAAAroB,EACA,cAAAsoB,EAAgB,mCAChB,qBAAA3hB,EAAuB,GACvB,oBAAA4hB,EACA,gBAAAC,EAAkB,GAClB,cAAAC,EAAgB,GAChB,SAAAn8C,EACA,MAAAuX,EAAQ,QACR,UAAApX,EAAY,GACZ,MAAAqE,CACF,IAAM,CAEJ,MAAM43C,EAAwBH,IAAwB,OAClDA,EACA5hB,EACEgiB,EAAW56C,EAAAA,OAAuB,IAAI,EACtC66C,EAAmB76C,EAAAA,OAA2B,IAAI,EAwExD,GArEAM,EAAAA,UAAU,IAAM,CACd,MAAMuW,EAAgBxN,GAAyB,CACzCA,EAAM,MAAQ,UAAYrB,GAAU0yC,GACtCnrC,EAAA,CAEJ,EAEA,GAAIvH,GAAU0yC,EACZ,gBAAS,iBAAiB,UAAW7jC,CAAY,EAC1C,IAAM,SAAS,oBAAoB,UAAWA,CAAY,CAErE,EAAG,CAAC7O,EAAQuH,EAASmrC,CAAa,CAAC,EAGnCp6C,EAAAA,UAAU,IAAM,CACd,GAAI0H,GAAU4yC,EAAS,QAAS,CAE9BC,EAAiB,QAAU,SAAS,cAGpC,MAAMC,EAAoBF,EAAS,QAAQ,iBACzC,0EAAA,EAGIG,EAAeD,EAAkB,CAAC,EAClCE,EAAcF,EAAkBA,EAAkB,OAAS,CAAC,EAGlEC,GAAc,MAAA,EAGd,MAAME,EAAa5xC,GAAyB,CACtCA,EAAM,MAAQ,QAEdA,EAAM,SAEJ,SAAS,gBAAkB0xC,IAC7B1xC,EAAM,eAAA,EACN2xC,GAAa,MAAA,GAIX,SAAS,gBAAkBA,IAC7B3xC,EAAM,eAAA,EACN0xC,GAAc,MAAA,GAGpB,EAEA,gBAAS,iBAAiB,UAAWE,CAAS,EAEvC,IAAM,CACX,SAAS,oBAAoB,UAAWA,CAAS,EAEjDJ,EAAiB,SAAS,MAAA,CAC5B,CACF,CACF,EAAG,CAAC7yC,CAAM,CAAC,EAGX1H,EAAAA,UAAU,IAAM,CACd,GAAI0H,EACF,gBAAS,KAAK,MAAM,SAAW,SACxB,IAAM,CACX,SAAS,KAAK,MAAM,SAAW,EACjC,CAEJ,EAAG,CAACA,CAAM,CAAC,EAEP,CAACA,EAAQ,OAAO,KAGpB,MAAMkzC,EAASn4C,GAAO,QAAU,GAEhC,OACEqD,EAAAA,KAACpH,EAAA,CACC,UAAU,iDACV,MAAO,CAAE,OAAAk8C,CAAA,EACT,QAASP,EAAwBprC,EAAU,OAG3C,SAAA,CAAAxQ,EAAAA,IAACC,EAAA,CACC,UAAU,+BACV,cAAY,MAAA,CAAA,EAIdoH,EAAAA,KAACpH,EAAA,CACC,IAAK47C,EACL,UAAW,iHAAiHl8C,CAAS,GACrI,MAAO,CAAE,MAAAoX,EAAO,GAAI/S,EAAQ,CAAE,GAAGA,EAAO,OAAQ,MAAA,EAAc,EAAC,EAC/D,QAAUrC,GAAMA,EAAE,gBAAA,EAClB,KAAK,SACL,aAAW,OACX,kBAAiB45C,EAAQ,cAAgB,OAGvC,SAAA,EAAAA,GAASroB,GAAQwoB,IACjBr0C,EAAAA,KAACpH,EAAA,CAAI,UAAU,wCACX,SAAA,EAAAs7C,GAASroB,IACT7rB,EAAAA,KAACpH,EAAA,CACC,GAAG,cACH,UAAU,8EAET,SAAA,CAAAizB,SAAS1vB,GAAA,CAAK,KAAM0vB,EAAM,KAAK,KAAK,UAAWsoB,EAAe,EAC9DD,CAAA,CAAA,CAAA,EAGJG,GACC17C,EAAAA,IAACV,EAAA,CACC,QAASkR,EACT,UAAU,2GACV,aAAYjM,GAAE,oBAAoB,EAElC,SAAAvE,EAAAA,IAAC,MAAA,CACC,UAAU,UACV,KAAK,OACL,OAAO,eACP,QAAQ,YAER,SAAAA,EAAAA,IAAC,OAAA,CACC,cAAc,QACd,eAAe,QACf,YAAa,EACb,EAAE,sBAAA,CAAA,CACJ,CAAA,CACF,CAAA,CACF,EAEJ,EAIFA,EAAAA,IAACC,EAAA,CAAI,UAAU,qDACZ,SAAAT,CAAA,CACH,CAAA,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,yGC5NM+E,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EA4CjCo5C,GAA8C,CAAC,CAC1D,OAAAnzC,EACA,QAAAuH,EACA,MAAA+qC,EACA,QAAAc,EACA,YAAAC,EACA,WAAAC,EACA,UAAAC,EACA,SAAAC,EACA,qBAAAC,EAAuB,UAGvB,oBAAqBC,EAAuB,YAC5C,MAAA5lC,EAAQ,QAGR,eAAgB6lC,EAAkB,GAClC,UAAAC,EAAY,GACZ,YAAAC,CACF,IAAM,CAEJ,MAAMC,EAAsBT,GAAe/3C,GAAE,gBAAgB,EACvDy4C,EAAqBT,GAAch4C,GAAE,eAAe,EACpD04C,EAAsBH,GAAev4C,GAAE,gBAAgB,EAEvD24C,EAAgB,IAAM,CAC1BV,EAAA,CACF,EAEMW,EAAe,IAAM,CAErBN,IACJJ,IAAA,EACAjsC,EAAA,EACF,EAEMyB,EAAc,IAAM,CAEpB4qC,GACJrsC,EAAA,CACF,EAGM4sC,EAAuF,CAC3F,QAAS,2CACT,UAAW,yGACX,OAAQ,yCACR,MAAO,0FAAA,EAGT,OACE/1C,EAAAA,KAACi0C,GAAA,CACC,OAAAryC,EACA,QAASgJ,EACT,MAAAspC,EACA,MAAAxkC,EAGA,SAAA,CAAA/W,EAAAA,IAACC,EAAA,CAAI,UAAU,OACZ,SAAA,OAAOo8C,GAAY,SAClBr8C,EAAAA,IAAC2H,GAAA,CAAE,UAAU,mCAAoC,SAAA00C,CAAA,CAAQ,EAEzDA,EAEJ,EAGAh1C,EAAAA,KAACpH,EAAA,CAAI,UAAU,8BAEb,SAAA,CAAAD,EAAAA,IAACV,EAAA,CACC,QAAS69C,EACT,SAAUN,EACV,UAAU,sNAEV,SAAA78C,EAAAA,IAACG,IAAM,SAAA68C,CAAA,CAAmB,CAAA,CAAA,EAI5B31C,EAAAA,KAAC/H,EAAA,CACC,QAAS49C,EACT,SAAUL,EACV,UAAW,gGAAgGO,EAAuBV,CAAoB,CAAC,GAEtJ,SAAA,CAAAG,GACC78C,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,0CAAA,CAA2C,EAE1D5zC,EAAAA,IAACG,GAAA,CAAM,SAAA08C,EAAYI,EAAsBF,CAAA,CAAoB,CAAA,CAAA,CAAA,CAC/D,CAAA,CACF,CAAA,CAAA,CAAA,CAGN,iHC9EMM,GAAsBC,EAAAA,cAA+C,IAAI,EAKlEC,GAGR,CAAC,CAAE,MAAA78C,EAAO,SAAAlB,KAEXQ,EAAAA,IAACq9C,GAAoB,SAApB,CAA6B,MAAA38C,EAC3B,SAAAlB,CAAA,CACH,EAOSg+C,GAAyB,IAAgC,CACpE,MAAMzxB,EAAU0xB,EAAAA,WAAWJ,EAAmB,EAC9C,GAAI,CAACtxB,EACH,MAAM,IAAI,MAAM,iEAAiE,EAEnF,OAAOA,CACT,ECrFA,SAAS2xB,GAAiB,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,SAASn5C,EAAE,CAACA,GAAa,OAAOA,GAAjB,UAAoB,CAAC,MAAM,QAAQA,CAAC,GAAG,OAAO,KAAKA,CAAC,EAAE,SAAS,SAAS6yC,EAAE,CAAC,GAAeA,IAAZ,WAAe,EAAEA,KAAK,GAAG,CAAC,IAAIjzB,EAAE,OAAO,yBAAyB5f,EAAE6yC,CAAC,EAAE,OAAO,eAAe,EAAEA,EAAEjzB,EAAE,IAAIA,EAAE,CAAC,WAAW,GAAG,IAAI,UAAU,CAAC,OAAO5f,EAAE6yC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAE,EAAC,EAAG,OAAO,OAAO,CAAC,CAAC,CAAC,SAASuG,GAA2B,EAAE,EAAE,CAAC,OAAO,IAAI,SAAS,SAAS,EAAEx5B,EAAE,CAAC,IAAI,EAAE,OAAOy5B,GAAe,CAAC,EAAE,MAAM,SAASj8C,EAAE,CAAC,GAAG,CAAC,OAAO,EAAEA,EAAE,EAAE,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,OAAOA,EAAE,CAAC,OAAOwiB,EAAExiB,CAAC,CAAC,CAAC,GAAGwiB,CAAC,CAAC,EAAC,CAAE,CAAC,MAAMy5B,GAAe,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,CAAC,MAAMz5B,EAAE,IAAI,WAAWA,EAAE,iBAAiB,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAOxiB,CAAC,CAAC,IAAI,CAAC,MAAMwiB,EAAE,IAAI,SAASxiB,CAAC,EAAE,IAAIk8C,EAAE,EAAE,GAAW15B,EAAE,UAAU05B,CAAC,IAArB,MAAuB,OAAO,EAAE,kBAAkB,EAAE,IAAIA,GAAG,IAAI,CAAC,MAAMllB,EAAExU,EAAE,UAAU05B,CAAC,EAAE,GAAWllB,IAAR,MAAU,MAAM,MAAMmlB,EAAE35B,EAAE,UAAU05B,EAAE,CAAC,EAAE,GAAWllB,IAAR,OAAwBxU,EAAE,UAAU05B,EAAE,CAAC,IAA5B,WAA8B,CAAC,MAAMllB,EAAEklB,EAAE,GAAG,IAAIE,EAAE,OAAO55B,EAAE,UAAUwU,CAAC,GAAG,IAAK,OAAMolB,EAAE,GAAG,MAAM,IAAK,OAAMA,EAAE,GAAG,MAAM,QAAQ,OAAO,EAAE,qCAAqC,CAAC,CAAC,GAAQ55B,EAAE,UAAUwU,EAAE,EAAEolB,CAAC,IAAtB,GAAwB,OAAO,EAAE,sCAAsC,EAAE,MAAMtjC,EAAE0J,EAAE,UAAUwU,EAAE,EAAEolB,CAAC,EAAEC,EAAErlB,EAAEle,EAAE,EAAE,GAAG0J,EAAE,UAAUwU,EAAEle,EAAEsjC,CAAC,EAAE,QAAQp8C,EAAEg3B,EAAEle,EAAE,EAAE9Y,EAAEq8C,EAAEr8C,GAAG,GAAI,GAAQwiB,EAAE,UAAUxiB,EAAEo8C,CAAC,GAApB,IAAsB,CAAC,GAAO55B,EAAE,UAAUxiB,EAAE,EAAEo8C,CAAC,IAArB,EAAuB,OAAO,EAAE,kCAAkC,EAAE,GAAO55B,EAAE,UAAUxiB,EAAE,EAAEo8C,CAAC,IAArB,EAAuB,OAAO,EAAE,mCAAmC,EAAE55B,EAAE,UAAUxiB,EAAE,EAAE,EAAEo8C,CAAC,EAAE,KAAK,CAAE,OAAO,EAAEp8C,EAAE,MAAMk8C,EAAEA,EAAE,EAAEC,CAAC,CAAC,CAAC,CAACD,GAAG,EAAEC,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,EAAC,EAAG35B,EAAE,kBAAkB,CAAC,CAAC,EAAC,EAAG,IAAIxiB,GAAE,CAAA,EAAG4C,GAAE,CAAC,IAAI,SAAS,CAAC,OAAO5C,EAAC,EAAE,IAAI,QAAQ4C,EAAE,CAAC5C,GAAE4C,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI6yC,EAAEjzB,EAAE85B,EAAK,CAAA,EAAG15C,GAAE,QAAQ05C,EAAKA,EAAK,MAAM,SAASt8C,EAAE4C,EAAE,CAAC,QAAQ6yC,EAAE6G,EAAK,IAAI,WAAW95B,EAAE85B,EAAK,IAAI,SAASJ,EAAE,EAAEllB,EAAE,CAAA,EAAGmlB,EAAE,IAAI,WAAWn8C,CAAC,EAAEo8C,EAAED,EAAE,OAAO,EAAa35B,EAAE25B,EAAEC,CAAC,GAAhB,WAAmBA,IAAIF,EAAEE,EAAEF,GAAG,EAAE,IAAIpjC,EAAE28B,EAAE0G,EAAED,GAAG,CAAC,EAAEzG,EAAE0G,EAAED,GAAG,CAAC,EAAE,IAAIG,EAAE75B,EAAE25B,EAAED,GAAG,CAAC,EAAEK,EAAE/5B,EAAE25B,EAAED,GAAG,CAAC,EAAEA,GAAG,EAAEA,EAAEK,EAAE,QAAQC,EAAE,EAAEA,EAAE1jC,EAAE0jC,IAAI,CAACh6B,EAAE25B,EAAED,CAAC,EAAEA,GAAG,EAAEA,GAAG,EAAEA,GAAG,EAAE15B,EAAE25B,EAAED,GAAG,CAAC,EAAEG,EAAE75B,EAAE25B,EAAED,GAAG,CAAC,EAAE,IAAIO,EAAEj6B,EAAE25B,EAAED,GAAG,CAAC,EAAEx1C,EAAE+uC,EAAE0G,EAAED,GAAG,CAAC,EAAEQ,EAAEjH,EAAE0G,EAAED,EAAE,CAAC,EAAE5iB,EAAEmc,EAAE0G,EAAED,EAAE,CAAC,EAAEA,GAAG,EAAE,IAAIS,EAAEn6B,EAAE25B,EAAED,GAAG,CAAC,EAAEA,GAAG,EAAEA,GAAGx1C,EAAEg2C,EAAEpjB,EAAEgjB,EAAK,WAAWH,EAAEQ,EAAE3lB,EAAEqlB,EAAEI,EAAE75C,CAAC,CAAC,CAAC,OAAOo0B,CAAC,EAAEslB,EAAK,WAAW,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAE,CAAC,IAAImlB,EAAEG,EAAK,IAAI,WAAWF,EAAEE,EAAK,IAAI,SAASF,EAAEp8C,EAAE4C,CAAC,EAAEu5C,EAAEn8C,EAAE4C,GAAG,CAAC,EAAEu5C,EAAEn8C,EAAE4C,GAAG,CAAC,EAAE,IAAIkW,EAAEqjC,EAAEn8C,EAAE4C,GAAG,CAAC,EAAEw5C,EAAEp8C,EAAE4C,GAAG,CAAC,EAAEw5C,EAAEp8C,EAAE4C,GAAG,CAAC,EAAEA,GAAG,EAAE,IAAIy5C,EAAEF,EAAEn8C,EAAE4C,GAAG,CAAC,EAAE25C,EAAEJ,EAAEn8C,EAAE4C,GAAG,CAAC,EAAEA,GAAG,EAAE,IAAI45C,EAAEF,EAAK,IAAI,SAASt8C,EAAE4C,EAAEy5C,CAAC,EAAE,GAAGz5C,GAAGy5C,EAAEz5C,GAAG25C,EAAEvlB,EAAEye,EAAE+G,CAAC,EAAE,CAAC,KAAKN,EAAE,MAAM15B,CAAC,MAAM,CAAC,IAAIi6B,EAAE,IAAI,WAAWz8C,EAAE,OAAO4C,CAAC,EAAE,GAAMkW,GAAH,EAAK28B,EAAE+G,CAAC,EAAE,IAAI,WAAWC,EAAE,OAAO,MAAM75C,EAAEA,EAAE4f,CAAC,CAAC,MAAM,CAAC,GAAM1J,GAAH,EAAK,KAAK,+BAA+BA,EAAE,IAAIpS,EAAE,IAAI,WAAWw1C,CAAC,EAAEI,EAAK,WAAWG,EAAE/1C,CAAC,EAAE+uC,EAAE+G,CAAC,EAAE91C,CAAC,CAAC,CAAC,EAAE41C,EAAK,WAAW,SAASt8C,EAAE4C,EAAE,CAAC,OAAO05C,EAAK,EAAE,QAAQt8C,EAAE4C,CAAC,CAAC,EAAE05C,EAAK,QAAQ,SAASt8C,EAAE4C,EAAE,CAAC,OAAO5C,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEs8C,EAAK,WAAW,IAAI,WAAWt8C,EAAE,OAAOA,EAAE,WAAW,EAAEA,EAAE,OAAO,CAAC,EAAE4C,CAAC,CAAC,EAAE05C,EAAK,QAAQ,SAASt8C,EAAE4C,EAAE,CAAOA,GAAN,OAAUA,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI6yC,EAAE,EAAEjzB,EAAE,IAAI,WAAW,GAAG,KAAK,MAAM,IAAIxiB,EAAE,MAAM,CAAC,EAAEwiB,EAAEizB,CAAC,EAAE,IAAIjzB,EAAEizB,EAAE,CAAC,EAAE,IAAIA,GAAG,EAAEA,EAAE6G,EAAK,EAAE,WAAWt8C,EAAEwiB,EAAEizB,EAAE7yC,EAAE,KAAK,EAAE,IAAIs5C,EAAEI,EAAK,MAAMt8C,EAAE,EAAEA,EAAE,MAAM,EAAE,OAAOwiB,EAAEizB,EAAE,CAAC,EAAEyG,IAAI,GAAG,IAAI15B,EAAEizB,EAAE,CAAC,EAAEyG,IAAI,GAAG,IAAI15B,EAAEizB,EAAE,CAAC,EAAEyG,IAAI,EAAE,IAAI15B,EAAEizB,EAAE,CAAC,EAAEyG,IAAI,EAAE,IAAI,IAAI,WAAW15B,EAAE,OAAO,EAAEizB,EAAE,CAAC,CAAC,EAAE6G,EAAK,WAAW,SAASt8C,EAAE4C,EAAE,CAAOA,GAAN,OAAUA,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI6yC,EAAE,IAAI,WAAW,GAAG,KAAK,MAAM,IAAIz1C,EAAE,MAAM,CAAC,EAAEwiB,EAAE85B,EAAK,EAAE,WAAWt8C,EAAEy1C,EAAEjzB,EAAE5f,EAAE,KAAK,EAAE,OAAO,IAAI,WAAW6yC,EAAE,OAAO,EAAEjzB,CAAC,CAAC,EAAE85B,EAAK,OAAO,SAASt8C,EAAE4C,EAAE,CAAOA,GAAN,OAAUA,EAAE,IAAI,IAAI6yC,EAAE,EAAEjzB,EAAE85B,EAAK,IAAI,UAAUJ,EAAEI,EAAK,IAAI,YAAYtlB,EAAE,CAAA,EAAG,QAAQmlB,KAAKn8C,EAAE,CAAC,IAAIo8C,EAAE,CAACE,EAAK,QAAQH,CAAC,GAAG,CAACv5C,EAAEkW,EAAE9Y,EAAEm8C,CAAC,EAAEE,EAAEC,EAAK,IAAI,IAAIxjC,EAAE,EAAEA,EAAE,MAAM,EAAEke,EAAEmlB,CAAC,EAAE,CAAC,IAAIC,EAAE,MAAMtjC,EAAE,OAAO,IAAIujC,EAAE,KAAKD,EAAEE,EAAK,WAAWxjC,CAAC,EAAEA,CAAC,CAAC,CAAC,QAAQqjC,KAAKnlB,EAAEye,GAAGze,EAAEmlB,CAAC,EAAE,KAAK,OAAO,GAAG,GAAG,EAAEG,EAAK,IAAI,SAASH,CAAC,EAAE1G,GAAG,GAAG,IAAI8G,EAAE,IAAI,WAAW9G,CAAC,EAAE+G,EAAE,EAAEC,EAAE,CAAA,EAAG,QAAQN,KAAKnlB,EAAE,CAAC,IAAItwB,EAAEswB,EAAEmlB,CAAC,EAAEM,EAAE,KAAKD,CAAC,EAAEA,EAAEF,EAAK,aAAaC,EAAEC,EAAEL,EAAEz1C,EAAE,CAAC,CAAC,CAAC,IAAIg2C,EAAE,EAAEpjB,EAAEkjB,EAAE,QAAQL,KAAKnlB,EAAGtwB,EAAEswB,EAAEmlB,CAAC,EAAEM,EAAE,KAAKD,CAAC,EAAEA,EAAEF,EAAK,aAAaC,EAAEC,EAAEL,EAAEz1C,EAAE,EAAE+1C,EAAEC,GAAG,CAAC,EAAE,IAAIC,EAAEH,EAAEljB,EAAE,OAAO9W,EAAE+5B,EAAEC,EAAE,SAAS,EAAEA,GAAG,EAAEN,EAAEK,EAAEC,GAAG,EAAEE,CAAC,EAAER,EAAEK,EAAEC,GAAG,EAAEE,CAAC,EAAEl6B,EAAE+5B,EAAEC,GAAG,EAAEG,CAAC,EAAEn6B,EAAE+5B,EAAEC,GAAG,EAAEljB,CAAC,EAAEkjB,GAAG,EAAEA,GAAG,EAAED,EAAE,MAAM,EAAED,EAAK,QAAQ,SAASt8C,EAAE,CAAC,IAAI4C,EAAE5C,EAAE,MAAM,GAAG,EAAE,MAAM,YAAW,EAAG,MAAU,mBAAmB,QAAQ4C,CAAC,GAAhC,EAAiC,EAAE05C,EAAK,aAAa,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAE,CAAC,IAAImlB,EAAEG,EAAK,IAAI,UAAUF,EAAEE,EAAK,IAAI,YAAYxjC,EAAE0J,EAAE,KAAK,OAAO25B,EAAEn8C,EAAE4C,EAAKs5C,GAAH,EAAK,SAAS,QAAQ,EAAEt5C,GAAG,EAAKs5C,GAAH,IAAOt5C,GAAG,GAAGw5C,EAAEp8C,EAAE4C,EAAE,EAAE,EAAEw5C,EAAEp8C,EAAE4C,GAAG,EAAE,CAAC,EAAEw5C,EAAEp8C,EAAE4C,GAAG,EAAE4f,EAAE,IAAI,EAAE,CAAC,EAAE25B,EAAEn8C,EAAE4C,GAAG,EAAE,CAAC,EAAEu5C,EAAEn8C,EAAE4C,GAAG,EAAE4f,EAAE,GAAG,EAAE25B,EAAEn8C,EAAE4C,GAAG,EAAEkW,EAAE,MAAM,EAAEqjC,EAAEn8C,EAAE4C,GAAG,EAAE4f,EAAE,KAAK,EAAE45B,EAAEp8C,EAAE4C,GAAG,EAAE05C,EAAK,IAAI,SAAS7G,CAAC,CAAC,EAAE2G,EAAEp8C,EAAE4C,GAAG,EAAE,CAAC,EAAEA,GAAG,EAAKs5C,GAAH,IAAOt5C,GAAG,EAAEA,GAAG,EAAEu5C,EAAEn8C,EAAE4C,GAAG,EAAEo0B,CAAC,EAAEp0B,GAAG,GAAGA,GAAG05C,EAAK,IAAI,UAAUt8C,EAAE4C,EAAE6yC,CAAC,EAAKyG,GAAH,IAAOl8C,EAAE,IAAI8Y,EAAElW,CAAC,EAAEA,GAAGkW,EAAE,QAAQlW,CAAC,EAAE05C,EAAK,IAAI,CAAC,OAAM,UAAU,CAAC,QAAQt8C,EAAE,IAAI,YAAY,GAAG,EAAE4C,EAAE,EAAEA,EAAE,IAAIA,IAAI,CAAC,QAAQ6yC,EAAE7yC,EAAE4f,EAAE,EAAEA,EAAE,EAAEA,IAAI,EAAEizB,EAAEA,EAAE,WAAWA,IAAI,EAAEA,KAAK,EAAEz1C,EAAE4C,CAAC,EAAE6yC,CAAC,CAAC,OAAOz1C,CAAC,GAAC,EAAG,OAAO,SAASA,EAAE4C,EAAE6yC,EAAEjzB,EAAE,CAAC,QAAQ05B,EAAE,EAAEA,EAAE15B,EAAE05B,IAAIl8C,EAAEs8C,EAAK,IAAI,MAAM,KAAKt8C,EAAE4C,EAAE6yC,EAAEyG,CAAC,EAAE,EAAEl8C,IAAI,EAAE,OAAOA,CAAC,EAAE,IAAI,SAASA,EAAE4C,EAAE6yC,EAAE,CAAC,MAAO,YAAW6G,EAAK,IAAI,OAAO,WAAWt8C,EAAE4C,EAAE6yC,CAAC,CAAC,CAAC,EAAE6G,EAAK,MAAM,SAASt8C,EAAE4C,EAAE6yC,EAAE,CAAC,QAAQjzB,EAAE,EAAE05B,EAAE,EAAEllB,EAAEp0B,EAAEu5C,EAAEv5C,EAAE6yC,EAAEze,EAAEmlB,GAAG,CAAC,QAAQC,EAAE,KAAK,IAAIplB,EAAE,KAAKmlB,CAAC,EAAEnlB,EAAEolB,GAAGF,GAAG15B,GAAGxiB,EAAEg3B,GAAG,EAAExU,GAAG,MAAM05B,GAAG,KAAK,CAAC,OAAOA,GAAG,GAAG15B,CAAC,EAAE85B,EAAK,IAAI,CAAC,WAAW,SAASt8C,EAAE4C,EAAE,CAAC,OAAO5C,EAAE4C,CAAC,EAAE5C,EAAE4C,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,SAAS5C,EAAE4C,EAAE6yC,EAAE,CAACz1C,EAAE4C,CAAC,EAAE,IAAI6yC,EAAEz1C,EAAE4C,EAAE,CAAC,EAAE6yC,GAAG,EAAE,GAAG,EAAE,SAAS,SAASz1C,EAAE4C,EAAE,CAAC,MAAO,UAAS5C,EAAE4C,EAAE,CAAC,GAAG5C,EAAE4C,EAAE,CAAC,GAAG,GAAG5C,EAAE4C,EAAE,CAAC,GAAG,EAAE5C,EAAE4C,CAAC,EAAE,EAAE,UAAU,SAAS5C,EAAE4C,EAAE6yC,EAAE,CAACz1C,EAAE4C,CAAC,EAAE,IAAI6yC,EAAEz1C,EAAE4C,EAAE,CAAC,EAAE6yC,GAAG,EAAE,IAAIz1C,EAAE4C,EAAE,CAAC,EAAE6yC,GAAG,GAAG,IAAIz1C,EAAE4C,EAAE,CAAC,EAAE6yC,GAAG,GAAG,GAAG,EAAE,UAAU,SAASz1C,EAAE4C,EAAE6yC,EAAE,CAAC,QAAQjzB,EAAE,GAAG05B,EAAE,EAAEA,EAAEzG,EAAEyG,IAAI15B,GAAG,OAAO,aAAaxiB,EAAE4C,EAAEs5C,CAAC,CAAC,EAAE,OAAO15B,CAAC,EAAE,WAAW,SAASxiB,EAAE4C,EAAE6yC,EAAE,CAAC,QAAQjzB,EAAE,EAAEA,EAAEizB,EAAE,OAAOjzB,IAAIxiB,EAAE4C,EAAE4f,CAAC,EAAEizB,EAAE,WAAWjzB,CAAC,CAAC,EAAE,IAAI,SAASxiB,EAAE,CAAC,OAAOA,EAAE,OAAO,EAAE,IAAIA,EAAEA,CAAC,EAAE,SAAS,SAASA,EAAE4C,EAAE6yC,EAAE,CAAC,QAAQjzB,EAAE05B,EAAE,GAAGllB,EAAE,EAAEA,EAAEye,EAAEze,IAAIklB,GAAG,IAAII,EAAK,IAAI,IAAIt8C,EAAE4C,EAAEo0B,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAACxU,EAAE,mBAAmB05B,CAAC,CAAC,MAAS,CAAC,OAAOI,EAAK,IAAI,UAAUt8C,EAAE4C,EAAE6yC,CAAC,CAAC,CAAC,OAAOjzB,CAAC,EAAE,UAAU,SAASxiB,EAAE4C,EAAE6yC,EAAE,CAAC,QAAQjzB,EAAEizB,EAAE,OAAOyG,EAAE,EAAEllB,EAAE,EAAEA,EAAExU,EAAEwU,IAAI,CAAC,IAAImlB,EAAE1G,EAAE,WAAWze,CAAC,EAAE,IAAO,WAAWmlB,IAAf,EAAkBn8C,EAAE4C,EAAEs5C,CAAC,EAAEC,EAAED,aAAgB,WAAWC,IAAf,EAAkBn8C,EAAE4C,EAAEs5C,CAAC,EAAE,IAAIC,GAAG,EAAEn8C,EAAE4C,EAAEs5C,EAAE,CAAC,EAAE,IAAIC,GAAG,EAAE,GAAGD,GAAG,WAAc,WAAWC,IAAf,EAAkBn8C,EAAE4C,EAAEs5C,CAAC,EAAE,IAAIC,GAAG,GAAGn8C,EAAE4C,EAAEs5C,EAAE,CAAC,EAAE,IAAIC,GAAG,EAAE,GAAGn8C,EAAE4C,EAAEs5C,EAAE,CAAC,EAAE,IAAIC,GAAG,EAAE,GAAGD,GAAG,MAAM,CAAC,IAAO,WAAWC,IAAf,EAAkB,KAAK,IAAIn8C,EAAE4C,EAAEs5C,CAAC,EAAE,IAAIC,GAAG,GAAGn8C,EAAE4C,EAAEs5C,EAAE,CAAC,EAAE,IAAIC,GAAG,GAAG,GAAGn8C,EAAE4C,EAAEs5C,EAAE,CAAC,EAAE,IAAIC,GAAG,EAAE,GAAGn8C,EAAE4C,EAAEs5C,EAAE,CAAC,EAAE,IAAIC,GAAG,EAAE,GAAGD,GAAG,CAAC,CAAC,CAAC,OAAOA,CAAC,EAAE,SAAS,SAASl8C,EAAE,CAAC,QAAQ4C,EAAE5C,EAAE,OAAOy1C,EAAE,EAAEjzB,EAAE,EAAEA,EAAE5f,EAAE4f,IAAI,CAAC,IAAI05B,EAAEl8C,EAAE,WAAWwiB,CAAC,EAAE,IAAO,WAAW05B,IAAf,EAAkBzG,aAAgB,WAAWyG,IAAf,EAAkBzG,GAAG,WAAc,WAAWyG,IAAf,EAAkBzG,GAAG,MAAM,CAAC,IAAO,WAAWyG,IAAf,EAAkB,KAAK,IAAIzG,GAAG,CAAC,CAAC,CAAC,OAAOA,CAAC,CAAC,EAAE6G,EAAK,EAAE,CAAA,EAAGA,EAAK,EAAE,WAAW,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE,CAAC,IAAI05B,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE15B,CAAC,EAAEwU,EAAEslB,EAAK,EAAE,EAAEH,EAAEG,EAAK,EAAE,WAAWA,EAAK,EAAE,MAAM,IAAIF,EAAEE,EAAK,EAAE,OAAOxjC,EAAE,EAAEujC,EAAE5G,GAAG,EAAE8G,EAAE,EAAEC,EAAEx8C,EAAE,OAAO,GAAMwiB,GAAH,EAAK,CAAC,KAAK1J,EAAE0jC,GAAIJ,EAAEx5C,EAAEy5C,EAAEvjC,GAAGiZ,EAAE,KAAK,IAAI,MAAMyqB,EAAE1jC,CAAC,IAAI0jC,EAAE,EAAE,CAAC,EAAEH,EAAEC,EAAK,EAAE,WAAWt8C,EAAE8Y,EAAEiZ,EAAEnvB,EAAEy5C,EAAE,CAAC,EAAEvjC,GAAGiZ,EAAE,OAAOsqB,IAAI,CAAC,CAAC,IAAII,EAAEzlB,EAAE,KAAKtwB,EAAEswB,EAAE,KAAK0lB,EAAE1lB,EAAE,KAAKsC,EAAE,EAAEqjB,EAAE,EAAEC,EAAE,EAAE33C,EAAE,EAAEgyB,EAAE,EAAE1E,EAAE,EAAE,IAAIiqB,EAAE,IAAI91C,EAAE6rB,EAAE+pB,EAAK,EAAE,MAAMt8C,EAAE,CAAC,CAAC,EAAE,GAAG8Y,EAAE,EAAEA,EAAE0jC,EAAE1jC,IAAI,CAAC,GAAGme,EAAE1E,EAAEzZ,EAAE,EAAE0jC,EAAE,EAAE,CAACjqB,EAAE+pB,EAAK,EAAE,MAAMt8C,EAAE8Y,EAAE,CAAC,EAAE,IAAI+jC,EAAE/jC,EAAE,EAAE,MAAM4jC,EAAEG,CAAC,EAAEn2C,EAAE6rB,CAAC,EAAE7rB,EAAE6rB,CAAC,EAAEsqB,CAAC,CAAC,GAAGN,GAAGzjC,EAAE,EAAEwgB,EAAE,MAAMqjB,EAAE,QAAQH,EAAE1jC,EAAE,MAAMyjC,EAAEzjC,IAAI2jC,EAAEnjB,CAAC,EAAExgB,EAAEyjC,EAAEjjB,GAAG,EAAEijB,EAAEzjC,GAAGujC,EAAEC,EAAK,EAAE,YAAYxjC,GAAG0jC,EAAE,GAAGD,GAAGC,EAAE,EAAE,EAAEC,EAAEnjB,EAAEr0B,EAAEjF,EAAE48C,EAAE9jC,EAAE8jC,EAAEh6C,EAAEy5C,CAAC,EAAE/iB,EAAEqjB,EAAE13C,EAAE,EAAE23C,EAAE9jC,GAAG,IAAIgkC,EAAE,EAAEhkC,EAAE0jC,EAAE,IAAIM,EAAER,EAAK,EAAE,WAAWt8C,EAAE8Y,EAAE4jC,EAAEzlB,EAAE,KAAK,IAAIilB,EAAE,CAAC,EAAEM,EAAE1jC,CAAC,EAAEojC,EAAE,CAAC,CAAC,GAAG,IAAInqB,EAAE+qB,IAAI,GAAGC,EAAE,MAAMD,EAAE,GAAMA,GAAH,EAAK,CAACC,EAAE,MAAMD,EAAE,IAAIE,EAAEb,EAAEpqB,EAAE+qB,IAAI,GAAG9lB,EAAE,GAAG,EAAEA,EAAE,KAAK,IAAIgmB,CAAC,IAAI,IAAIC,EAAEd,EAAEY,EAAE/lB,EAAE,GAAG,EAAEA,EAAE,KAAKimB,CAAC,IAAIh4C,GAAG+xB,EAAE,IAAIgmB,CAAC,EAAEhmB,EAAE,IAAIimB,CAAC,EAAER,EAAEnjB,CAAC,EAAEvH,GAAG,GAAGjZ,EAAEyjC,EAAEE,EAAEnjB,EAAE,CAAC,EAAEyjB,GAAG,GAAGC,GAAG,EAAEC,EAAE3jB,GAAG,EAAEijB,EAAEzjC,EAAEiZ,CAAC,MAAMiF,EAAE,KAAKh3B,EAAE8Y,CAAC,CAAC,IAAI6jC,GAAG,CAAC,CAAC,IAAIC,GAAG9jC,GAAM9Y,EAAE,QAAL,IAAcu8C,EAAEzjC,IAAI2jC,EAAEnjB,CAAC,EAAExgB,EAAEyjC,EAAEjjB,GAAG,EAAEijB,EAAEzjC,GAAGujC,EAAEC,EAAK,EAAE,YAAY,EAAEG,EAAEnjB,EAAEr0B,EAAEjF,EAAE48C,EAAE9jC,EAAE8jC,EAAEh6C,EAAEy5C,CAAC,EAAE/iB,EAAE,EAAEqjB,EAAE,EAAErjB,EAAEqjB,EAAE13C,EAAE,EAAE23C,EAAE9jC,IAAO,EAAEujC,IAAN,GAAUA,IAAI,OAAOA,IAAI,CAAC,EAAEC,EAAK,EAAE,WAAW,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAE,CAAC,IAAImlB,EAAE,MAAMv5C,EAAEw5C,EAAE3G,EAAE0G,CAAC,EAAErjC,EAAEqjC,EAAEC,EAAE,MAAM,MAAM,GAAGA,GAAGD,GAAG35B,GAAG85B,EAAK,EAAE,MAAMt8C,EAAE4C,EAAEkW,CAAC,EAAE,MAAO,GAAE,QAAQujC,EAAE,EAAEE,EAAE,EAAEC,EAAE,KAAK,IAAI,MAAM55C,CAAC,EAAEkW,GAAG0jC,GAAM,EAAExlB,GAAL,GAAQolB,GAAGD,GAAG,CAAC,GAAME,GAAH,GAAMr8C,EAAE4C,EAAEy5C,CAAC,GAAGr8C,EAAE4C,EAAEy5C,EAAEvjC,CAAC,EAAE,CAAC,IAAI2jC,EAAEH,EAAK,EAAE,SAASt8C,EAAE4C,EAAEkW,CAAC,EAAE,GAAG2jC,EAAEJ,EAAE,CAAC,GAAGE,EAAEzjC,GAAGujC,EAAEI,IAAIP,EAAE,MAAMpjC,EAAE,EAAE2jC,IAAIA,EAAE3jC,EAAE,GAAG,QAAQpS,EAAE,EAAEg2C,EAAE,EAAEA,EAAED,EAAE,EAAEC,IAAI,CAAC,IAAIpjB,EAAE12B,EAAEkW,EAAE4jC,EAAE,MAAM,MAAMC,EAAErjB,EAAEmc,EAAEnc,CAAC,EAAE,MAAM,MAAMqjB,EAAEj2C,IAAIA,EAAEi2C,EAAEP,EAAE9iB,EAAE,CAAC,CAAC,CAACxgB,IAAIqjC,EAAEC,IAAIA,EAAE3G,EAAE0G,CAAC,GAAG,MAAM,KAAK,CAAC,OAAOE,GAAG,GAAGE,CAAC,EAAED,EAAK,EAAE,SAAS,SAASt8C,EAAE4C,EAAE6yC,EAAE,CAAC,GAAGz1C,EAAE4C,CAAC,GAAG5C,EAAE4C,EAAE6yC,CAAC,GAAGz1C,EAAE4C,EAAE,CAAC,GAAG5C,EAAE4C,EAAE,EAAE6yC,CAAC,GAAGz1C,EAAE4C,EAAE,CAAC,GAAG5C,EAAE4C,EAAE,EAAE6yC,CAAC,EAAE,MAAO,GAAE,IAAIjzB,EAAE5f,EAAEs5C,EAAE,KAAK,IAAIl8C,EAAE,OAAO4C,EAAE,GAAG,EAAE,IAAIA,GAAG,EAAEA,EAAEs5C,GAAGl8C,EAAE4C,CAAC,GAAG5C,EAAE4C,EAAE6yC,CAAC,GAAG7yC,IAAI,OAAOA,EAAE4f,CAAC,EAAE85B,EAAK,EAAE,MAAM,SAASt8C,EAAE4C,EAAE,CAAC,OAAO5C,EAAE4C,CAAC,GAAG,EAAE5C,EAAE4C,EAAE,CAAC,IAAI5C,EAAE4C,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE05C,EAAK,MAAM,EAAEA,EAAK,EAAE,YAAY,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAEmlB,EAAEC,EAAEtjC,EAAE,CAAC,IAAIujC,EAAEE,EAAEC,EAAEC,EAAE/1C,EAAEg2C,EAAEpjB,EAAEqjB,EAAEC,EAAE33C,EAAEq3C,EAAK,EAAE,EAAErlB,EAAEqlB,EAAK,EAAE,OAAO/pB,EAAE+pB,EAAK,EAAE,OAAOr3C,EAAE,KAAK,GAAG,IAAIs3C,GAAGF,EAAEC,EAAK,EAAE,SAAQ,GAAI,CAAC,EAAEE,EAAEH,EAAE,CAAC,EAAEI,EAAEJ,EAAE,CAAC,EAAE31C,EAAE21C,EAAE,CAAC,EAAEK,EAAEL,EAAE,CAAC,EAAE/iB,EAAE+iB,EAAE,CAAC,EAAEM,EAAEN,EAAE,CAAC,EAAEO,EAAEP,EAAE,CAAC,EAAE,IAAIQ,EAAE,KAAQ/jC,EAAE,EAAE,IAAR,EAAW,EAAE,GAAGA,EAAE,EAAE,KAAKqjC,GAAG,GAAGW,EAAEt6B,EAAE85B,EAAK,EAAE,SAASr3C,EAAE,OAAOA,EAAE,IAAI,EAAEq3C,EAAK,EAAE,SAASr3C,EAAE,OAAOA,EAAE,IAAI,EAAE8sB,EAAEvP,EAAE85B,EAAK,EAAE,SAASr3C,EAAE,MAAMA,EAAE,IAAI,EAAEq3C,EAAK,EAAE,SAASr3C,EAAE,MAAMA,EAAE,IAAI,EAAE8sB,GAAG,GAAG,EAAEuH,EAAEgjB,EAAK,EAAE,SAASr3C,EAAE,MAAMA,EAAE,IAAI,GAAG,EAAEA,EAAE,KAAK,EAAE,EAAE,EAAEA,EAAE,KAAK,EAAE,EAAE,EAAEA,EAAE,KAAK,EAAE,GAAG,QAAQ83C,EAAE,EAAEA,EAAE,IAAIA,IAAI93C,EAAE,KAAK83C,CAAC,EAAE,EAAE,IAAIA,EAAE,EAAEA,EAAE,GAAGA,IAAI93C,EAAE,KAAK83C,CAAC,EAAE,EAAE,IAAIA,EAAE,EAAEA,EAAE,GAAGA,IAAI93C,EAAE,KAAK83C,CAAC,EAAE,EAAE,IAAIC,EAAEH,EAAEC,GAAGD,EAAE9qB,EAAE,EAAE+qB,EAAE/qB,EAAE,EAAE,EAAE,GAAGkF,EAAEmlB,EAAEtjC,EAAE9Y,CAAC,EAAEi3B,EAAEmlB,EAAEtjC,EAAE,EAAEkkC,CAAC,EAAElkC,GAAG,EAAKkkC,GAAH,EAAK,CAAC,MAAS,EAAElkC,IAAN,GAAUA,IAAIA,EAAEwjC,EAAK,EAAE,WAAWJ,EAAEllB,EAAEmlB,EAAEC,EAAEtjC,CAAC,CAAC,KAAK,CAAC,IAAImkC,EAAEhL,EAAE,GAAM+K,GAAH,IAAOC,EAAEh4C,EAAE,OAAOgtC,EAAEhtC,EAAE,QAAW+3C,GAAH,EAAK,CAACV,EAAK,EAAE,UAAUr3C,EAAE,MAAMs3C,CAAC,EAAED,EAAK,EAAE,SAASr3C,EAAE,MAAMs3C,CAAC,EAAED,EAAK,EAAE,UAAUr3C,EAAE,MAAMu3C,CAAC,EAAEF,EAAK,EAAE,SAASr3C,EAAE,MAAMu3C,CAAC,EAAEF,EAAK,EAAE,UAAUr3C,EAAE,MAAMw3C,CAAC,EAAEH,EAAK,EAAE,SAASr3C,EAAE,MAAMw3C,CAAC,EAAEQ,EAAEh4C,EAAE,MAAMgtC,EAAEhtC,EAAE,MAAMstB,EAAE6pB,EAAEtjC,EAAEpS,EAAE,GAAG,EAAE6rB,EAAE6pB,EAAEtjC,GAAG,EAAE4jC,EAAE,CAAC,EAAEnqB,EAAE6pB,EAAEtjC,GAAG,EAAEwgB,EAAE,CAAC,EAAExgB,GAAG,EAAE,QAAQokC,EAAE,EAAEA,EAAE5jB,EAAE4jB,IAAI3qB,EAAE6pB,EAAEtjC,EAAE,EAAEokC,EAAEj4C,EAAE,MAAM,GAAGA,EAAE,KAAKi4C,CAAC,GAAG,EAAE,CAAC,EAAEpkC,GAAG,EAAEwgB,EAAExgB,EAAEwjC,EAAK,EAAE,UAAUK,EAAE13C,EAAE,MAAMm3C,EAAEtjC,CAAC,EAAEA,EAAEwjC,EAAK,EAAE,UAAUM,EAAE33C,EAAE,MAAMm3C,EAAEtjC,CAAC,CAAC,CAAC,QAAQqkC,EAAEnmB,EAAElgB,EAAE,EAAEA,EAAE2+B,EAAE3+B,GAAG,EAAE,CAAC,QAAQsmC,EAAEx6C,EAAEkU,CAAC,EAAEumC,EAAED,IAAI,GAAGE,EAAEH,GAAG,QAAQC,GAAGD,EAAEG,GAAGxkC,EAAEwjC,EAAK,EAAE,UAAUJ,EAAEiB,GAAG,EAAEF,EAAEb,EAAEtjC,CAAC,EAAE,GAAMukC,GAAH,EAAK,CAAC,IAAIE,EAAE36C,EAAEkU,EAAE,CAAC,EAAE9Q,EAAEu3C,GAAG,GAAGC,EAAED,GAAG,EAAE,IAAIE,EAAE,IAAIF,EAAEhrB,EAAE6pB,EAAEtjC,EAAEwjC,EAAK,EAAE,UAAU,IAAIkB,EAAEP,EAAEb,EAAEtjC,CAAC,EAAEukC,EAAEp4C,EAAE,IAAIu4C,CAAC,CAAC,EAAE1kC,GAAG7T,EAAE,IAAIu4C,CAAC,EAAEvmB,EAAEmlB,EAAEtjC,EAAEwjC,EAAK,EAAE,UAAUmB,EAAExL,EAAEmK,EAAEtjC,CAAC,EAAE9S,EAAEf,EAAE,IAAIw4C,CAAC,CAAC,EAAE3kC,GAAG7T,EAAE,IAAIw4C,CAAC,EAAEN,GAAGE,CAAC,CAAC,CAACvkC,EAAEwjC,EAAK,EAAE,UAAU,IAAIW,EAAEb,EAAEtjC,CAAC,CAAC,CAAC,OAAOA,CAAC,EAAEwjC,EAAK,EAAE,WAAW,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAE,CAAC,IAAIllB,EAAEklB,IAAI,EAAE,OAAO15B,EAAEwU,CAAC,EAAEye,EAAEjzB,EAAEwU,EAAE,CAAC,EAAEye,IAAI,EAAEjzB,EAAEwU,EAAE,CAAC,EAAE,IAAIxU,EAAEwU,CAAC,EAAExU,EAAEwU,EAAE,CAAC,EAAE,IAAIxU,EAAEwU,EAAE,CAAC,EAAEA,GAAG,EAAExU,EAAE,IAAI,IAAI,WAAWxiB,EAAE,OAAO4C,EAAE6yC,CAAC,EAAEze,CAAC,EAAEklB,GAAGzG,EAAE,GAAG,EAAE,EAAE6G,EAAK,EAAE,SAAS,UAAU,CAAC,QAAQt8C,EAAEs8C,EAAK,EAAE,EAAE15C,EAAE05C,EAAK,EAAE,SAASt8C,EAAE,KAAKA,EAAE,MAAM,EAAE,EAAEy1C,EAAE6G,EAAK,EAAE,SAASt8C,EAAE,KAAKA,EAAE,MAAM,EAAE,EAAEwiB,EAAE,CAAA,EAAG05B,EAAEI,EAAK,EAAE,UAAUt8C,EAAE,MAAMwiB,CAAC,EAAEwU,EAAE,CAAA,EAAGmlB,EAAEG,EAAK,EAAE,UAAUt8C,EAAE,MAAMg3B,CAAC,EAAEolB,EAAE,EAAEA,EAAE55B,EAAE,OAAO45B,GAAG,EAAEp8C,EAAE,KAAKwiB,EAAE45B,CAAC,CAAC,IAAI,IAAIA,EAAE,EAAEA,EAAEplB,EAAE,OAAOolB,GAAG,EAAEp8C,EAAE,KAAKg3B,EAAEolB,CAAC,CAAC,IAAI,QAAQtjC,EAAEwjC,EAAK,EAAE,SAASt8C,EAAE,KAAKA,EAAE,MAAM,CAAC,EAAEq8C,EAAE,GAAGA,EAAE,GAAMr8C,EAAE,MAAM,GAAGA,EAAE,KAAKq8C,EAAE,CAAC,GAAG,EAAE,GAA7B,GAAgCA,IAAI,MAAM,CAACz5C,EAAE6yC,EAAE38B,EAAEojC,EAAEC,EAAEE,EAAE75B,EAAEwU,CAAC,CAAC,EAAEslB,EAAK,EAAE,UAAU,SAASt8C,EAAE,CAAC,QAAQ4C,EAAE,CAAA,EAAG6yC,EAAE,EAAEA,EAAEz1C,EAAE,OAAOy1C,GAAG,EAAE7yC,EAAE,KAAK5C,EAAEy1C,EAAE,CAAC,CAAC,EAAE,OAAO7yC,CAAC,EAAE05C,EAAK,EAAE,QAAQ,SAASt8C,EAAE,CAAC,QAAQ4C,EAAE,GAAG6yC,EAAE,EAAEA,EAAEz1C,EAAE,OAAOy1C,GAAG,EAAKz1C,EAAEy1C,EAAE,CAAC,GAAR,IAAY7yC,IAAI6yC,GAAG,GAAG,KAAK,OAAO7yC,CAAC,EAAE05C,EAAK,EAAE,SAAS,SAASt8C,EAAE4C,EAAE,CAAC,QAAQ6yC,EAAE,EAAEjzB,EAAE,EAAEA,EAAE5f,EAAE,OAAO4f,IAAIizB,GAAG7yC,EAAE4f,CAAC,EAAExiB,EAAE,GAAGwiB,GAAG,EAAE,EAAE,OAAOizB,CAAC,EAAE6G,EAAK,EAAE,UAAU,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE,CAAC,QAAQ05B,EAAE,EAAEA,EAAEl8C,EAAE,OAAOk8C,GAAG,EAAE,CAAC,IAAIllB,EAAEh3B,EAAEk8C,CAAC,EAAEC,EAAEn8C,EAAEk8C,EAAE,CAAC,EAAE15B,EAAE85B,EAAK,EAAE,UAAUtlB,EAAEp0B,EAAE6yC,EAAEjzB,CAAC,EAAE,IAAI45B,EAAMplB,GAAJ,GAAM,EAAMA,GAAJ,GAAM,EAAE,EAAEA,EAAE,KAAKslB,EAAK,EAAE,OAAO7G,EAAEjzB,EAAE25B,EAAEC,CAAC,EAAE55B,GAAG45B,EAAE,CAAC,OAAO55B,CAAC,EAAE85B,EAAK,EAAE,UAAU,SAASt8C,EAAE4C,EAAE,CAAC,QAAQ6yC,EAAEz1C,EAAE,OAAUy1C,GAAH,GAASz1C,EAAEy1C,EAAE,CAAC,GAAR,GAAWA,GAAG,EAAE,QAAQjzB,EAAE,EAAEA,EAAEizB,EAAEjzB,GAAG,EAAE,CAAC,IAAI05B,EAAEl8C,EAAEwiB,EAAE,CAAC,EAAEwU,EAAExU,EAAE,EAAEizB,EAAEz1C,EAAEwiB,EAAE,CAAC,EAAE,GAAG25B,EAAE35B,EAAE,EAAEizB,EAAEz1C,EAAEwiB,EAAE,CAAC,EAAE,GAAG45B,EAAK55B,GAAH,EAAK,GAAGxiB,EAAEwiB,EAAE,CAAC,EAAE,GAAM05B,GAAH,GAAMllB,GAAGklB,GAAGC,GAAGD,EAAE,CAAC,QAAQpjC,EAAE0J,EAAE,EAAE1J,EAAE,EAAE28B,GAAGz1C,EAAE8Y,EAAE,CAAC,GAAGojC,GAAGpjC,GAAG,GAAGujC,EAAE,KAAK,IAAIvjC,EAAE,EAAE0J,IAAI,EAAE,GAAG,GAAG,GAAG5f,EAAE,KAAK,GAAGy5C,EAAE,CAAC,EAAEz5C,EAAE,KAAK,GAAGy5C,EAAE,EAAE,EAAE75B,GAAG,EAAE65B,EAAE,CAAC,SAASH,GAAGE,GAAGplB,GAAGklB,GAAGC,GAAGD,EAAE,CAAC,IAAIpjC,EAAE0J,EAAE,EAAE1J,EAAE,EAAE28B,GAAGz1C,EAAE8Y,EAAE,CAAC,GAAGojC,GAAGpjC,GAAG,EAAE,IAAIujC,EAAE,KAAK,IAAIvjC,EAAE,EAAE0J,IAAI,EAAE,CAAC,EAAE5f,EAAE,KAAK,GAAGy5C,EAAE,CAAC,EAAE75B,GAAG,EAAE65B,EAAE,CAAC,MAAMz5C,EAAE,KAAKs5C,EAAE,CAAC,CAAC,CAAC,OAAOzG,IAAI,CAAC,EAAE6G,EAAK,EAAE,SAAS,SAASt8C,EAAE4C,EAAE6yC,EAAE,CAAC,IAAIjzB,EAAE,CAAA,EAAG05B,EAAEl8C,EAAE,OAAOg3B,EAAEp0B,EAAE,OAAOu5C,EAAE,EAAE,IAAIA,EAAE,EAAEA,EAAEnlB,EAAEmlB,GAAG,EAAEv5C,EAAEu5C,CAAC,EAAE,EAAEv5C,EAAEu5C,EAAE,CAAC,EAAE,EAAE,IAAIA,EAAE,EAAEA,EAAED,EAAEC,IAAOn8C,EAAEm8C,CAAC,GAAN,GAAS35B,EAAE,KAAK,CAAC,IAAI25B,EAAE,EAAEn8C,EAAEm8C,CAAC,CAAC,CAAC,EAAE,IAAIC,EAAE55B,EAAE,OAAO1J,EAAE0J,EAAE,MAAM,CAAC,EAAE,GAAM45B,GAAH,EAAK,MAAO,GAAE,GAAMA,GAAH,EAAK,CAAC,IAAIC,EAAE75B,EAAE,CAAC,EAAE,IAAI,OAAA1J,EAAKujC,GAAH,EAAK,EAAE,EAASz5C,EAAE,GAAGy5C,GAAG,EAAE,EAAE,EAAEz5C,EAAE,GAAGkW,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC0J,EAAE,MAAM,SAASxiB,EAAE4C,EAAE,CAAC,OAAO5C,EAAE,EAAE4C,EAAE,CAAC,EAAC,EAAG,IAAI25C,EAAE/5B,EAAE,CAAC,EAAEg6B,EAAEh6B,EAAE,CAAC,EAAEi6B,EAAE,EAAE/1C,EAAE,EAAEg2C,EAAE,EAAE,IAAIl6B,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE+5B,EAAE,EAAEC,EAAE,EAAE,EAAED,EAAE,EAAEC,EAAE,EAAE,CAAC,EAAE91C,GAAG01C,EAAE,GAAGG,EAAEE,GAAG/1C,IAAIg2C,GAAGN,GAAG55B,EAAEi6B,CAAC,EAAE,EAAEj6B,EAAEk6B,CAAC,EAAE,GAAGl6B,EAAEi6B,GAAG,EAAEj6B,EAAEk6B,GAAG,EAAEF,EAAEC,GAAG/1C,IAAIg2C,GAAGN,GAAG55B,EAAEi6B,CAAC,EAAE,EAAEj6B,EAAEk6B,CAAC,EAAE,GAAGl6B,EAAEi6B,GAAG,EAAEj6B,EAAEk6B,GAAG,EAAEl6B,EAAE9b,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE61C,EAAE,EAAEC,EAAE,EAAE,EAAED,EAAE,EAAEC,CAAC,EAAE,IAAIljB,EAAEgjB,EAAK,EAAE,SAAS95B,EAAE9b,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI4yB,EAAEmc,IAAI6G,EAAK,EAAE,cAAcxjC,EAAE28B,EAAEnc,CAAC,EAAEA,EAAEmc,GAAG0G,EAAE,EAAEA,EAAEC,EAAED,IAAIv5C,EAAE,GAAGkW,EAAEqjC,CAAC,EAAE,KAAK,EAAE,EAAErjC,EAAEqjC,CAAC,EAAE,EAAE,OAAO7iB,CAAC,EAAEgjB,EAAK,EAAE,SAAS,SAASt8C,EAAE4C,EAAE,CAAC,OAAU5C,EAAE,KAAN,IAAWA,EAAE,EAAE4C,EAAEA,GAAG,KAAK,IAAI05C,EAAK,EAAE,SAASt8C,EAAE,EAAE4C,EAAE,CAAC,EAAE05C,EAAK,EAAE,SAASt8C,EAAE,EAAE4C,EAAE,CAAC,CAAC,CAAC,EAAE05C,EAAK,EAAE,cAAc,SAASt8C,EAAE4C,EAAE6yC,EAAE,CAAC,IAAIjzB,EAAE,EAAE05B,EAAE,GAAGzG,EAAE7yC,EAAEo0B,EAAE,EAAE,IAAIh3B,EAAE,MAAM,SAASA,EAAE4C,EAAE,CAAC,OAAOA,EAAE,GAAG5C,EAAE,EAAEA,EAAE,EAAE4C,EAAE,EAAEA,EAAE,EAAE5C,EAAE,CAAC,EAAC,EAAGwiB,EAAE,EAAEA,EAAExiB,EAAE,QAAQA,EAAEwiB,CAAC,EAAE,EAAE5f,EAAE4f,IAAI,CAAC,IAAI25B,EAAEn8C,EAAEwiB,CAAC,EAAE,EAAExiB,EAAEwiB,CAAC,EAAE,EAAE5f,EAAEo0B,GAAGklB,GAAG,GAAGzG,EAAE0G,EAAE,CAAC,IAAInlB,KAAKye,EAAE7yC,EAAEo0B,EAAE,IAAKmlB,EAAEn8C,EAAEwiB,CAAC,EAAE,GAAG5f,GAAG5C,EAAEwiB,CAAC,EAAE,IAAIwU,GAAG,GAAGp0B,EAAEu5C,EAAE,GAAG35B,IAAI,KAAKA,GAAG,EAAEA,IAAIxiB,EAAEwiB,CAAC,EAAE,GAAG5f,GAAGo0B,EAAE,IAAIh3B,EAAEwiB,CAAC,EAAE,IAAIwU,KAAQA,GAAH,GAAM,QAAQ,IAAI,WAAW,CAAC,EAAEslB,EAAK,EAAE,WAAW,SAASt8C,EAAE4C,EAAE,CAAC,IAAI6yC,EAAE,EAAE,OAAO7yC,EAAE,GAAG6yC,CAAC,GAAGz1C,IAAIy1C,GAAG,IAAI7yC,EAAE,EAAE6yC,CAAC,GAAGz1C,IAAIy1C,GAAG,GAAG7yC,EAAE,EAAE6yC,CAAC,GAAGz1C,IAAIy1C,GAAG,GAAG7yC,EAAE,EAAE6yC,CAAC,GAAGz1C,IAAIy1C,GAAG,GAAG7yC,EAAE,EAAE6yC,CAAC,GAAGz1C,IAAIy1C,GAAG,GAAGA,CAAC,EAAE6G,EAAK,EAAE,UAAU,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE,CAAC,OAAO85B,EAAK,EAAE,OAAO7G,EAAEjzB,EAAE5f,EAAE5C,GAAG,CAAC,CAAC,EAAEwiB,EAAE5f,EAAE,GAAG5C,GAAG,EAAE,CAAC,EAAEs8C,EAAK,EAAE,QAAQ,SAASt8C,EAAE4C,EAAE,CAAC,IAAI6yC,EAAE,WAAW,GAAMz1C,EAAE,CAAC,GAAN,GAAYA,EAAE,CAAC,GAAN,EAAQ,OAAO4C,GAAG,IAAI6yC,EAAE,CAAC,EAAE,IAAIjzB,EAAE85B,EAAK,EAAEJ,EAAE15B,EAAE,OAAOwU,EAAExU,EAAE,OAAO25B,EAAE35B,EAAE,YAAY45B,EAAE55B,EAAE,UAAU1J,EAAE0J,EAAE,UAAU65B,EAAE75B,EAAE,OAAO+5B,EAAE/5B,EAAE,EAAEg6B,EAAQ55C,GAAN,KAAQ45C,IAAI55C,EAAE,IAAI6yC,EAAEz1C,EAAE,SAAS,GAAG,CAAC,GAAG,QAAQy8C,EAAE/1C,EAAEg2C,EAAE,EAAEpjB,EAAE,EAAEqjB,EAAE,EAAEC,EAAE,EAAE33C,EAAE,EAAEgyB,EAAE,EAAE1E,EAAE,EAAEsqB,EAAE,EAAEC,EAAE,EAAKJ,GAAH,GAAM,GAAGA,EAAER,EAAEl8C,EAAE88C,EAAE,CAAC,EAAExjB,EAAE4iB,EAAEl8C,EAAE88C,EAAE,EAAE,CAAC,EAAEA,GAAG,EAAKxjB,GAAH,EAAK,CAAC,GAAGkjB,IAAI55C,EAAE05C,EAAK,EAAE,OAAO15C,EAAEi6C,EAAG,MAAM,GAAMvjB,GAAH,IAAOmjB,EAAEF,EAAE,MAAM71C,EAAE61C,EAAE,MAAMtlB,EAAE,IAAI1E,EAAE,IAAO+G,GAAH,EAAK,CAACqjB,EAAE3lB,EAAEh3B,EAAE88C,EAAE,CAAC,EAAE,IAAIF,EAAE5lB,EAAEh3B,EAAE88C,EAAE,EAAE,CAAC,EAAE,EAAE73C,EAAE+xB,EAAEh3B,EAAE88C,EAAE,GAAG,CAAC,EAAE,EAAEA,GAAG,GAAG,QAAQ/qB,EAAE,EAAEA,EAAE,GAAGA,GAAG,EAAEwqB,EAAE,MAAMxqB,CAAC,EAAE,EAAEwqB,EAAE,MAAMxqB,EAAE,CAAC,EAAE,EAAE,IAAIgrB,EAAE,EAAE,IAAIhrB,EAAE,EAAEA,EAAE9sB,EAAE8sB,IAAI,CAAC,IAAIirB,EAAEhmB,EAAEh3B,EAAE88C,EAAE,EAAE/qB,EAAE,CAAC,EAAEwqB,EAAE,MAAM,GAAGA,EAAE,KAAKxqB,CAAC,GAAG,EAAE,EAAEirB,EAAEA,EAAED,IAAIA,EAAEC,EAAE,CAACF,GAAG,EAAE73C,EAAEm3C,EAAEG,EAAE,MAAMQ,CAAC,EAAEjkC,EAAEyjC,EAAE,MAAMQ,EAAER,EAAE,IAAI,EAAEE,EAAEF,EAAE,KAAK71C,EAAE61C,EAAE,KAAKO,EAAEX,EAAEI,EAAE,MAAM,GAAGQ,GAAG,EAAEJ,EAAEC,EAAE58C,EAAE88C,EAAEP,EAAE,KAAK,EAAE,IAAIU,EAAEz6B,EAAE,SAAS+5B,EAAE,MAAM,EAAEI,EAAEJ,EAAE,KAAK,EAAEtlB,GAAG,GAAGgmB,GAAG,EAAE,IAAIhL,EAAEzvB,EAAE,SAAS+5B,EAAE,MAAMI,EAAEC,EAAEL,EAAE,KAAK,EAAEhqB,GAAG,GAAG0f,GAAG,EAAEmK,EAAEG,EAAE,MAAMU,CAAC,EAAEnkC,EAAEyjC,EAAE,MAAMU,EAAER,CAAC,EAAEL,EAAEG,EAAE,MAAMtK,CAAC,EAAEn5B,EAAEyjC,EAAE,MAAMtK,EAAEvrC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAIw2C,EAAET,EAAEJ,EAAEr8C,EAAE88C,CAAC,EAAE7lB,CAAC,EAAE6lB,GAAG,GAAGI,EAAE,IAAIC,EAAED,IAAI,EAAE,GAAG,EAAAC,IAAI,GAAKv6C,EAAEi6C,GAAG,EAAEM,MAAM,CAAC,GAAQA,GAAL,IAAO,MAAM,IAAIrmC,EAAE+lC,EAAEM,EAAE,IAAI,GAAGA,EAAE,IAAI,CAAC,IAAIC,EAAEb,EAAE,KAAKY,EAAE,GAAG,EAAErmC,EAAE+lC,GAAGO,IAAI,GAAGpmB,EAAEh3B,EAAE88C,EAAE,EAAEM,CAAC,EAAEN,GAAG,EAAEM,CAAC,CAAC,IAAIC,EAAE32C,EAAE21C,EAAEr8C,EAAE88C,CAAC,EAAEvqB,CAAC,EAAEuqB,GAAG,GAAGO,EAAE,IAAIC,EAAED,IAAI,EAAEE,EAAEhB,EAAE,KAAKe,CAAC,EAAEt3C,GAAGu3C,IAAI,GAAGrB,EAAEl8C,EAAE88C,EAAE,GAAGS,CAAC,EAAE,IAAIT,GAAG,GAAGS,EAAEf,IAAI55C,EAAE05C,EAAK,EAAE,OAAO15C,EAAEi6C,EAAG,MAAM,GAAGA,EAAE/lC,GAAGlU,EAAEi6C,CAAC,EAAEj6C,EAAEi6C,IAAI72C,CAAC,EAAEpD,EAAEi6C,CAAC,EAAEj6C,EAAEi6C,IAAI72C,CAAC,EAAEpD,EAAEi6C,CAAC,EAAEj6C,EAAEi6C,IAAI72C,CAAC,EAAEpD,EAAEi6C,CAAC,EAAEj6C,EAAEi6C,IAAI72C,CAAC,EAAE62C,EAAE/lC,CAAC,CAAC,CAAC,KAAK,EAAK,EAAEgmC,IAAN,IAAWA,GAAG,GAAG,EAAEA,IAAI,IAAIU,EAAE,GAAGV,IAAI,GAAGW,EAAEz9C,EAAEw9C,EAAE,CAAC,EAAEx9C,EAAEw9C,EAAE,CAAC,GAAG,EAAEhB,IAAI55C,EAAE05C,EAAK,EAAE,OAAO15C,EAAEi6C,EAAEY,CAAC,GAAG76C,EAAE,IAAI,IAAI6yC,EAAEz1C,EAAE,OAAOA,EAAE,WAAWw9C,EAAEC,CAAC,EAAEZ,CAAC,EAAEC,EAAEU,EAAEC,GAAG,EAAEZ,GAAGY,CAAC,CAAC,OAAO76C,EAAE,QAAQi6C,EAAEj6C,EAAEA,EAAE,MAAM,EAAEi6C,CAAC,CAAC,EAAEP,EAAK,EAAE,OAAO,SAASt8C,EAAE4C,EAAE,CAAC,IAAI6yC,EAAEz1C,EAAE,OAAO,GAAG4C,GAAG6yC,EAAE,OAAOz1C,EAAE,IAAIwiB,EAAE,IAAI,WAAW,KAAK,IAAIizB,GAAG,EAAE7yC,CAAC,CAAC,EAAE,OAAO4f,EAAE,IAAIxiB,EAAE,CAAC,EAAEwiB,CAAC,EAAE85B,EAAK,EAAE,YAAY,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAE,CAAC,QAAQmlB,EAAEG,EAAK,EAAE,OAAOF,EAAEE,EAAK,EAAE,OAAOxjC,EAAE,EAAEA,EAAE28B,GAAG,CAAC,IAAI4G,EAAEr8C,EAAEo8C,EAAE55B,EAAE05B,CAAC,EAAEt5C,CAAC,EAAEs5C,GAAG,GAAGG,EAAE,IAAIE,EAAEF,IAAI,EAAE,GAAGE,GAAG,GAAGvlB,EAAEle,CAAC,EAAEyjC,EAAEzjC,QAAQ,CAAC,IAAI0jC,EAAE,EAAEC,EAAE,EAAMF,GAAJ,IAAOE,EAAE,EAAEN,EAAE35B,EAAE05B,EAAE,CAAC,EAAEA,GAAG,EAAEM,EAAExlB,EAAEle,EAAE,CAAC,GAAOyjC,GAAJ,IAAOE,EAAE,EAAEN,EAAE35B,EAAE05B,EAAE,CAAC,EAAEA,GAAG,GAAOK,GAAJ,KAAQE,EAAE,GAAGN,EAAE35B,EAAE05B,EAAE,CAAC,EAAEA,GAAG,GAAG,QAAQx1C,EAAEoS,EAAE2jC,EAAE3jC,EAAEpS,GAAGswB,EAAEle,CAAC,EAAE0jC,EAAE1jC,GAAG,CAAC,CAAC,OAAOojC,CAAC,EAAEI,EAAK,EAAE,SAAS,SAASt8C,EAAE4C,EAAE6yC,EAAEjzB,EAAE,CAAC,QAAQ05B,EAAE,EAAEllB,EAAE,EAAEmlB,EAAE35B,EAAE,SAAS,EAAEwU,EAAEye,GAAG,CAAC,IAAI2G,EAAEp8C,EAAEg3B,EAAEp0B,CAAC,EAAE4f,EAAEwU,GAAG,CAAC,EAAE,EAAExU,EAAE,GAAGwU,GAAG,EAAE,EAAEolB,EAAEA,EAAEF,IAAIA,EAAEE,GAAGplB,GAAG,CAAC,KAAKA,EAAEmlB,GAAG35B,EAAEwU,GAAG,CAAC,EAAE,EAAExU,EAAE,GAAGwU,GAAG,EAAE,EAAE,EAAEA,IAAI,OAAOklB,CAAC,EAAEI,EAAK,EAAE,UAAU,SAASt8C,EAAE4C,EAAE,CAAC,QAAQ6yC,EAAEjzB,EAAE05B,EAAEllB,EAAEmlB,EAAEG,EAAK,EAAE,EAAEF,EAAEp8C,EAAE,OAAO8Y,EAAEqjC,EAAE,SAASE,EAAE,EAAEA,GAAGz5C,EAAEy5C,IAAIvjC,EAAEujC,CAAC,EAAE,EAAE,IAAIA,EAAE,EAAEA,EAAED,EAAEC,GAAG,EAAEvjC,EAAE9Y,EAAEq8C,CAAC,CAAC,IAAI,IAAIE,EAAEJ,EAAE,UAAU,IAAI1G,EAAE,EAAE38B,EAAE,CAAC,EAAE,EAAE0J,EAAE,EAAEA,GAAG5f,EAAE4f,IAAIizB,EAAEA,EAAE38B,EAAE0J,EAAE,CAAC,GAAG,EAAE+5B,EAAE/5B,CAAC,EAAEizB,EAAE,IAAIyG,EAAE,EAAEA,EAAEE,EAAEF,GAAG,GAAMllB,EAAEh3B,EAAEk8C,EAAE,CAAC,IAAX,IAAgBl8C,EAAEk8C,CAAC,EAAEK,EAAEvlB,CAAC,EAAEulB,EAAEvlB,CAAC,IAAI,EAAEslB,EAAK,EAAE,UAAU,SAASt8C,EAAE4C,EAAE6yC,EAAE,CAAC,QAAQjzB,EAAExiB,EAAE,OAAOk8C,EAAEI,EAAK,EAAE,EAAE,MAAMtlB,EAAE,EAAEA,EAAExU,EAAEwU,GAAG,EAAE,GAAMh3B,EAAEg3B,EAAE,CAAC,GAAR,EAAU,QAAQmlB,EAAEnlB,GAAG,EAAEolB,EAAEp8C,EAAEg3B,EAAE,CAAC,EAAEle,EAAEqjC,GAAG,EAAEC,EAAEC,EAAEz5C,EAAEw5C,EAAEG,EAAEv8C,EAAEg3B,CAAC,GAAGqlB,EAAEG,EAAED,GAAG,GAAGF,GAAGE,GAAGC,GAAI/G,EAAEyG,EAAEK,CAAC,IAAI,GAAG35C,CAAC,EAAEkW,EAAEyjC,GAAI,EAAED,EAAK,EAAE,SAAS,SAASt8C,EAAE4C,EAAE,CAAC,QAAQ6yC,EAAE6G,EAAK,EAAE,EAAE,MAAM95B,EAAE,GAAG5f,EAAEs5C,EAAE,EAAEA,EAAEl8C,EAAE,OAAOk8C,GAAG,EAAE,CAAC,IAAIllB,EAAEh3B,EAAEk8C,CAAC,GAAGt5C,EAAE5C,EAAEk8C,EAAE,CAAC,EAAEl8C,EAAEk8C,CAAC,EAAEzG,EAAEze,CAAC,IAAIxU,CAAC,CAAC,EAAE85B,EAAK,EAAE,OAAO,SAASt8C,EAAE4C,EAAE6yC,EAAE,CAACA,IAAI,EAAE7yC,EAAE,IAAI4f,EAAE5f,IAAI,EAAE5C,EAAEwiB,CAAC,GAAGizB,EAAEz1C,EAAEwiB,EAAE,CAAC,GAAGizB,IAAI,CAAC,EAAE6G,EAAK,EAAE,OAAO,SAASt8C,EAAE4C,EAAE6yC,EAAE,CAACA,IAAI,EAAE7yC,EAAE,IAAI4f,EAAE5f,IAAI,EAAE5C,EAAEwiB,CAAC,GAAGizB,EAAEz1C,EAAEwiB,EAAE,CAAC,GAAGizB,IAAI,EAAEz1C,EAAEwiB,EAAE,CAAC,GAAGizB,IAAI,EAAE,EAAE6G,EAAK,EAAE,OAAO,SAASt8C,EAAE4C,EAAE6yC,EAAE,CAAC,OAAOz1C,EAAE4C,IAAI,CAAC,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,MAAM,EAAEA,IAAI,GAAG6yC,GAAG,CAAC,EAAE6G,EAAK,EAAE,OAAO,SAASt8C,EAAE4C,EAAE6yC,EAAE,CAAC,OAAOz1C,EAAE4C,IAAI,CAAC,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,OAAO,EAAEA,IAAI,GAAG6yC,GAAG,CAAC,EAAE6G,EAAK,EAAE,OAAO,SAASt8C,EAAE4C,EAAE,CAAC,OAAO5C,EAAE4C,IAAI,CAAC,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,OAAO,EAAEA,EAAE,EAAE05C,EAAK,EAAE,OAAO,SAASt8C,EAAE4C,EAAE,CAAC,OAAO5C,EAAE4C,IAAI,CAAC,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,GAAG5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,OAAO,EAAEA,EAAE,EAAE05C,EAAK,EAAE,GAAG7G,EAAE,YAAYjzB,EAAE,YAAY,CAAC,UAAU,IAAIizB,EAAE,EAAE,EAAE,SAAS,IAAIA,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,IAAIA,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,KAAK,IAAIjzB,EAAE,EAAE,EAAE,MAAM,IAAIizB,EAAE,GAAG,EAAE,OAAO,CAAA,EAAG,MAAM,IAAIA,EAAE,EAAE,EAAE,OAAO,CAAA,EAAG,KAAK,IAAIA,EAAE,KAAK,EAAE,MAAM,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,IAAIA,EAAE,KAAK,EAAE,MAAM,CAAA,EAAG,KAAK,IAAIA,EAAE,GAAG,EAAE,MAAM,CAAA,EAAG,MAAM,IAAIA,EAAE,KAAK,EAAE,KAAK,IAAIjzB,EAAE,GAAG,EAAE,KAAK,IAAIA,EAAE,EAAE,EAAE,KAAK,IAAIA,EAAE,EAAE,EAAE,KAAK,IAAIA,EAAE,IAAI,EAAE,KAAK,IAAIizB,EAAE,KAAK,EAAE,KAAK,IAAIA,EAAE,KAAK,CAAC,IAAG,UAAU,CAAC,QAAQz1C,EAAEs8C,EAAK,EAAE,EAAE15C,EAAE,EAAEA,EAAE,MAAMA,IAAI,CAAC,IAAI6yC,EAAE7yC,EAAE6yC,GAAG,YAAYA,GAAG,YAAYA,GAAG,YAAYA,GAAG,WAAWA,KAAK,GAAG,WAAWA,IAAI,MAAM,GAAG,UAAUA,IAAI,MAAM,GAAG,UAAUA,IAAI,MAAM,GAAG,SAASA,IAAI,EAAEz1C,EAAE,MAAM4C,CAAC,GAAG6yC,IAAI,GAAGA,GAAG,MAAM,EAAE,CAAC,SAASiI,EAAM19C,EAAE4C,EAAE6yC,EAAE,CAAC,KAAQ7yC,KAAH,GAAQ5C,EAAE,KAAK,EAAEy1C,CAAC,CAAC,CAAC,IAAI7yC,EAAE,EAAEA,EAAE,GAAGA,IAAI5C,EAAE,KAAK4C,CAAC,EAAE5C,EAAE,IAAI4C,CAAC,GAAG,EAAE5C,EAAE,IAAI4C,CAAC,EAAE5C,EAAE,KAAK4C,CAAC,EAAE5C,EAAE,IAAI4C,CAAC,GAAG,EAAE5C,EAAE,IAAI4C,CAAC,EAAE86C,EAAM19C,EAAE,OAAO,IAAI,CAAC,EAAE09C,EAAM19C,EAAE,OAAO,IAAI,CAAC,EAAE09C,EAAM19C,EAAE,OAAO,GAAG,CAAC,EAAE09C,EAAM19C,EAAE,OAAO,EAAE,CAAC,EAAEs8C,EAAK,EAAE,UAAUt8C,EAAE,OAAO,CAAC,EAAEs8C,EAAK,EAAE,UAAUt8C,EAAE,OAAO,EAAEA,EAAE,KAAK,EAAEs8C,EAAK,EAAE,SAASt8C,EAAE,OAAO,CAAC,EAAE09C,EAAM19C,EAAE,OAAO,GAAG,CAAC,EAAEs8C,EAAK,EAAE,UAAUt8C,EAAE,OAAO,CAAC,EAAEs8C,EAAK,EAAE,UAAUt8C,EAAE,OAAO,EAAEA,EAAE,KAAK,EAAEs8C,EAAK,EAAE,SAASt8C,EAAE,OAAO,CAAC,EAAE09C,EAAM19C,EAAE,MAAM,GAAG,CAAC,EAAE09C,EAAM19C,EAAE,MAAM,IAAI,CAAC,EAAE09C,EAAM19C,EAAE,MAAM,GAAG,CAAC,EAAE09C,EAAM19C,EAAE,MAAM,IAAI,CAAC,CAAC,GAAC,CAAE,GAAC,EAAG,IAAIs8C,GAAKP,GAAiB,CAAC,UAAU,KAAK,QAAQ/7C,EAAC,EAAE,CAACA,EAAC,CAAC,EAAE,MAAM29C,IAAK,UAAU,CAAC,IAAI,EAAE,CAAC,SAAS39C,EAAE4C,EAAE,CAAC,KAAQ5C,EAAE4C,CAAC,GAAN,GAASA,IAAI,OAAOA,CAAC,EAAE,WAAW,CAAC5C,EAAE4C,IAAI5C,EAAE4C,CAAC,GAAG,EAAE5C,EAAE4C,EAAE,CAAC,EAAE,YAAY5C,EAAE4C,EAAE6yC,EAAE,CAACz1C,EAAE4C,CAAC,EAAE6yC,GAAG,EAAE,IAAIz1C,EAAE4C,EAAE,CAAC,EAAE,IAAI6yC,CAAC,EAAE,SAAS,CAACz1C,EAAE4C,IAAI,SAAS5C,EAAE4C,CAAC,GAAG5C,EAAE4C,EAAE,CAAC,GAAG,GAAG5C,EAAE4C,EAAE,CAAC,GAAG,EAAE5C,EAAE4C,EAAE,CAAC,GAAG,UAAU5C,EAAE4C,EAAE6yC,EAAE,CAACz1C,EAAE4C,CAAC,EAAE6yC,GAAG,GAAG,IAAIz1C,EAAE4C,EAAE,CAAC,EAAE6yC,GAAG,GAAG,IAAIz1C,EAAE4C,EAAE,CAAC,EAAE6yC,GAAG,EAAE,IAAIz1C,EAAE4C,EAAE,CAAC,EAAE,IAAI6yC,CAAC,EAAE,UAAUz1C,EAAE4C,EAAE6yC,EAAE,CAAC,IAAIjzB,EAAE,GAAG,QAAQ05B,EAAE,EAAEA,EAAEzG,EAAEyG,IAAI15B,GAAG,OAAO,aAAaxiB,EAAE4C,EAAEs5C,CAAC,CAAC,EAAE,OAAO15B,CAAC,EAAE,WAAWxiB,EAAE4C,EAAE6yC,EAAE,CAAC,QAAQjzB,EAAE,EAAEA,EAAEizB,EAAE,OAAOjzB,IAAIxiB,EAAE4C,EAAE4f,CAAC,EAAEizB,EAAE,WAAWjzB,CAAC,CAAC,EAAE,UAAUxiB,EAAE4C,EAAE6yC,EAAE,CAAC,MAAMjzB,EAAE,CAAA,EAAG,QAAQ05B,EAAE,EAAEA,EAAEzG,EAAEyG,IAAI15B,EAAE,KAAKxiB,EAAE4C,EAAEs5C,CAAC,CAAC,EAAE,OAAO15B,CAAC,EAAE,IAAIxiB,GAAGA,EAAE,OAAO,EAAE,IAAIA,CAAC,GAAGA,EAAE,SAAS4C,EAAE6yC,EAAEjzB,EAAE,CAAC,IAAI05B,EAAEllB,EAAE,GAAG,QAAQklB,EAAE,EAAEA,EAAE15B,EAAE05B,IAAIllB,GAAG,IAAI,EAAE,IAAIp0B,EAAE6yC,EAAEyG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,CAACA,EAAE,mBAAmBllB,CAAC,CAAC,MAAS,CAAC,OAAO,EAAE,UAAUp0B,EAAE6yC,EAAEjzB,CAAC,CAAC,CAAC,OAAO05B,CAAC,CAAC,EAAE,SAAS0B,EAAYh7C,EAAE6yC,EAAEjzB,EAAE05B,EAAE,CAAC,MAAMllB,EAAEye,EAAEjzB,EAAE25B,EAAE0B,EAAQ3B,CAAC,EAAEE,EAAE,KAAK,KAAK3G,EAAE0G,EAAE,CAAC,EAAErjC,EAAE,IAAI,WAAW,EAAEke,CAAC,EAAEqlB,EAAE,IAAI,YAAYvjC,EAAE,MAAM,EAAE,CAAC,MAAMyjC,CAAC,EAAEL,EAAE,CAAC,MAAMM,CAAC,EAAEN,EAAEO,EAAE,EAAE,WAAW,GAAMF,GAAH,EAAK,CAAC,MAAMv8C,EAAEg3B,GAAG,EAAE,GAAMwlB,GAAH,EAAK,QAAQ91C,EAAE,EAAEA,EAAE1G,EAAE0G,GAAG,EAAEoS,EAAEpS,CAAC,EAAE9D,EAAE8D,CAAC,EAAEoS,EAAEpS,EAAE,CAAC,EAAE9D,EAAE8D,EAAE,CAAC,EAAEoS,EAAEpS,EAAE,CAAC,EAAE9D,EAAE8D,EAAE,CAAC,EAAEoS,EAAEpS,EAAE,CAAC,EAAE9D,EAAE8D,EAAE,CAAC,EAAE,GAAO81C,GAAJ,GAAM,IAAI91C,EAAE,EAAEA,EAAE1G,EAAE0G,IAAIoS,EAAEpS,CAAC,EAAE9D,EAAE8D,GAAG,CAAC,CAAC,SAAY61C,GAAH,EAAK,CAAC,MAAMv8C,EAAEk8C,EAAE,KAAK,KAAK,GAASl8C,GAAN,KAAQ,CAAC,GAAMw8C,GAAH,EAAK,IAAI91C,EAAE,EAAEA,EAAEswB,EAAEtwB,IAAI,CAAC,IAAIg2C,EAAE,EAAEh2C,EAAE21C,EAAE31C,CAAC,EAAE,KAAK,GAAG9D,EAAE85C,EAAE,CAAC,GAAG,GAAG95C,EAAE85C,EAAE,CAAC,GAAG,EAAE95C,EAAE85C,CAAC,CAAC,CAAC,GAAOF,GAAJ,GAAM,IAAI91C,EAAE,EAAEA,EAAEswB,EAAEtwB,IAAKg2C,EAAE,EAAEh2C,EAAE21C,EAAE31C,CAAC,EAAE,KAAK,GAAG9D,EAAE85C,EAAE,CAAC,GAAG,GAAG95C,EAAE85C,EAAE,CAAC,GAAG,EAAE95C,EAAE85C,CAAC,CAAE,KAAK,CAAC,IAAIpjB,EAAEt5B,EAAE,CAAC,EAAE,MAAMy1C,EAAEz1C,EAAE,CAAC,EAAEwiB,EAAExiB,EAAE,CAAC,EAAE,GAAMw8C,GAAH,EAAK,IAAI91C,EAAE,EAAEA,EAAEswB,EAAEtwB,IAAI,CAAC,IAAIi2C,EAAEj2C,GAAG,EAAEg2C,EAAE,EAAEh2C,EAAE21C,EAAE31C,CAAC,EAAE,KAAK,GAAG9D,EAAE85C,EAAE,CAAC,GAAG,GAAG95C,EAAE85C,EAAE,CAAC,GAAG,EAAE95C,EAAE85C,CAAC,EAAE95C,EAAE85C,CAAC,GAAGpjB,GAAG12B,EAAE85C,EAAE,CAAC,GAAGjH,GAAG7yC,EAAE85C,EAAE,CAAC,GAAGl6B,IAAI1J,EAAE6jC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAOH,GAAJ,GAAM,IAAI91C,EAAE,EAAEA,EAAEswB,EAAEtwB,IAAKi2C,EAAEj2C,GAAG,EAAEg2C,EAAE,EAAEh2C,EAAE21C,EAAE31C,CAAC,EAAE,KAAK,GAAG9D,EAAE85C,EAAE,CAAC,GAAG,GAAG95C,EAAE85C,EAAE,CAAC,GAAG,EAAE95C,EAAE85C,CAAC,EAAED,EAAE75C,EAAE85C,CAAC,GAAGpjB,GAAGmjB,EAAE75C,EAAE85C,EAAE,CAAC,GAAGjH,GAAGgH,EAAE75C,EAAE85C,EAAE,CAAC,GAAGl6B,IAAI1J,EAAE6jC,EAAE,CAAC,EAAE,EAAG,CAAC,SAAYJ,GAAH,EAAK,CAAC,MAAMv8C,EAAEk8C,EAAE,KAAK,KAAKC,EAAED,EAAE,KAAK,KAAKG,EAAEF,EAAEA,EAAE,OAAO,EAAE,GAAMK,GAAH,EAAK,QAAQI,EAAE,EAAEA,EAAEp6B,EAAEo6B,IAAI,CAAC,IAAI33C,EAAE23C,EAAER,EAAEnlB,EAAE2lB,EAAEnH,EAAE,IAAI/uC,EAAE,EAAEA,EAAE+uC,EAAE/uC,IAAI,CAACi2C,EAAE1lB,EAAEvwB,GAAG,EAAE,IAAI6rB,EAAE,GAAGsqB,EAAEj6C,EAAEqC,GAAGyB,GAAG,EAAE,GAAG,IAAI,EAAEA,IAAI,GAAG,GAAGoS,EAAE6jC,CAAC,EAAE38C,EAAEuyB,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAE38C,EAAEuyB,EAAE,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAE38C,EAAEuyB,EAAE,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAEE,EAAER,EAAEF,EAAEU,CAAC,EAAE,GAAG,CAAC,CAAC,GAAML,GAAH,EAAK,IAAII,EAAE,EAAEA,EAAEp6B,EAAEo6B,IAAI,IAAI33C,EAAE23C,EAAER,EAAEnlB,EAAE2lB,EAAEnH,EAAE/uC,EAAE,EAAEA,EAAE+uC,EAAE/uC,IAAKi2C,EAAE1lB,EAAEvwB,GAAG,EAAE6rB,EAAE,GAAGsqB,EAAEj6C,EAAEqC,GAAGyB,GAAG,EAAE,GAAG,IAAI,EAAEA,IAAI,GAAG,GAAGoS,EAAE6jC,CAAC,EAAE38C,EAAEuyB,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAE38C,EAAEuyB,EAAE,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAE38C,EAAEuyB,EAAE,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAEE,EAAER,EAAEF,EAAEU,CAAC,EAAE,IAAI,GAAML,GAAH,EAAK,IAAII,EAAE,EAAEA,EAAEp6B,EAAEo6B,IAAI,IAAI33C,EAAE23C,EAAER,EAAEnlB,EAAE2lB,EAAEnH,EAAE/uC,EAAE,EAAEA,EAAE+uC,EAAE/uC,IAAKi2C,EAAE1lB,EAAEvwB,GAAG,EAAE6rB,EAAE,GAAGsqB,EAAEj6C,EAAEqC,GAAGyB,GAAG,EAAE,GAAG,IAAI,EAAEA,IAAI,GAAG,IAAIoS,EAAE6jC,CAAC,EAAE38C,EAAEuyB,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAE38C,EAAEuyB,EAAE,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAE38C,EAAEuyB,EAAE,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAEE,EAAER,EAAEF,EAAEU,CAAC,EAAE,IAAI,GAAML,GAAH,EAAK,IAAI91C,EAAE,EAAEA,EAAEswB,EAAEtwB,IAAI,CAAC,IAAIm2C,EAAEF,EAAEj2C,GAAG,EAAE6rB,EAAE,GAAGsqB,EAAEj6C,EAAE8D,CAAC,GAAGoS,EAAE6jC,CAAC,EAAE38C,EAAEuyB,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAE38C,EAAEuyB,EAAE,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAE38C,EAAEuyB,EAAE,CAAC,EAAEzZ,EAAE6jC,EAAE,CAAC,EAAEE,EAAER,EAAEF,EAAEU,CAAC,EAAE,GAAG,CAAC,SAAYN,GAAH,EAAK,CAAC,GAAMC,GAAH,EAAK,IAAI91C,EAAE,EAAEA,EAAEswB,EAAEtwB,IAAI,CAACi2C,EAAEj2C,GAAG,EAAE,IAAIo2C,EAAEl6C,EAAEmvB,EAAErrB,GAAG,CAAC,EAAEoS,EAAE6jC,CAAC,EAAEG,EAAEhkC,EAAE6jC,EAAE,CAAC,EAAEG,EAAEhkC,EAAE6jC,EAAE,CAAC,EAAEG,EAAEhkC,EAAE6jC,EAAE,CAAC,EAAE/5C,EAAEmvB,EAAE,CAAC,CAAC,CAAC,GAAOyqB,GAAJ,GAAM,IAAI91C,EAAE,EAAEA,EAAEswB,EAAEtwB,IAAI,CAAC,IAAIqrB,EAAE4qB,EAAEj2C,GAAG,EAAEo2C,EAAEl6C,EAAEmvB,EAAErrB,GAAG,CAAC,EAAEoS,EAAE6jC,CAAC,EAAEG,EAAEhkC,EAAE6jC,EAAE,CAAC,EAAEG,EAAEhkC,EAAE6jC,EAAE,CAAC,EAAEG,EAAEhkC,EAAE6jC,EAAE,CAAC,EAAE/5C,EAAEmvB,EAAE,CAAC,CAAC,CAAC,SAAYwqB,GAAH,EAAK,IAAIjjB,EAAE4iB,EAAE,KAAK,KAAKA,EAAE,KAAK,KAAK,GAAGU,EAAE,EAAEA,EAAEp6B,EAAEo6B,IAAI,CAAC,MAAM58C,EAAE48C,EAAER,EAAE55B,EAAEo6B,EAAEnH,EAAE,GAAM+G,GAAH,EAAK,QAAQO,EAAE,EAAEA,EAAEtH,EAAEsH,IAAI,CAAC,IAAI,GAAGD,EAAE,KAAKl6C,EAAE5C,GAAG+8C,IAAI,EAAE,IAAI,GAAG,EAAEA,GAAG,KAAK,IAAIzjB,EAAE,EAAE,IAAI+iB,EAAE75B,EAAEu6B,CAAC,EAAE,GAAG,GAAGD,GAAG,GAAGA,GAAG,EAAEA,CAAC,SAAYN,GAAH,EAAK,IAAIO,EAAE,EAAEA,EAAEtH,EAAEsH,IAAK,GAAGD,EAAE,IAAIl6C,EAAE5C,GAAG+8C,IAAI,EAAE,IAAI,IAAI,EAAEA,IAAI,GAAG,KAAK,GAAGzjB,EAAE,EAAE,IAAI+iB,EAAE75B,EAAEu6B,CAAC,EAAE,GAAG,GAAGD,GAAG,GAAGA,GAAG,EAAEA,UAAaN,GAAH,EAAK,IAAIO,EAAE,EAAEA,EAAEtH,EAAEsH,IAAK,GAAGD,EAAE,IAAIl6C,EAAE5C,GAAG+8C,IAAI,EAAE,IAAI,IAAI,EAAEA,IAAI,GAAG,MAAM,GAAGzjB,EAAE,EAAE,IAAI+iB,EAAE75B,EAAEu6B,CAAC,EAAE,GAAG,GAAGD,GAAG,GAAGA,GAAG,EAAEA,UAAaN,GAAH,EAAK,IAAIO,EAAE,EAAEA,EAAEtH,EAAEsH,IAAK,GAAGD,EAAEl6C,EAAE5C,EAAE+8C,CAAC,IAAIzjB,EAAE,EAAE,IAAI+iB,EAAE75B,EAAEu6B,CAAC,EAAE,GAAG,GAAGD,GAAG,GAAGA,GAAG,EAAEA,UAAcN,GAAJ,GAAM,IAAIO,EAAE,EAAEA,EAAEtH,EAAEsH,IAAKD,EAAEl6C,EAAE5C,GAAG+8C,GAAG,EAAE,EAAE,EAAEN,EAAE75C,EAAE5C,GAAG+8C,GAAG,EAAE,GAAGzjB,EAAE,EAAE,IAAI+iB,EAAE75B,EAAEu6B,CAAC,EAAE,GAAG,GAAGD,GAAG,GAAGA,GAAG,EAAEA,CAAE,CAAC,OAAOhkC,CAAC,CAAC,SAASglC,EAAY99C,EAAEy1C,EAAEjzB,EAAE05B,EAAE,CAAC,MAAMllB,EAAE6mB,EAAQ79C,CAAC,EAAEm8C,EAAE,KAAK,KAAK35B,EAAEwU,EAAE,CAAC,EAAEolB,EAAE,IAAI,YAAYD,EAAE,EAAEn8C,EAAE,WAAWk8C,CAAC,EAAE,OAAOzG,EAAEz1C,EAAE,KAAK,KAAK4C,EAAE6yC,EAAE2G,CAAC,EAAE2B,EAAStI,EAAE2G,CAAC,EAAKp8C,EAAE,WAAL,EAAey1C,EAAEuI,EAAYvI,EAAEz1C,EAAE,EAAEwiB,EAAE05B,CAAC,EAAKl8C,EAAE,WAAL,IAAiBy1C,GAAE,SAAwBz1C,EAAE4C,EAAE,CAAC,MAAM6yC,EAAE7yC,EAAE,MAAM4f,EAAE5f,EAAE,OAAOs5C,EAAE2B,EAAQj7C,CAAC,EAAEo0B,EAAEklB,GAAG,EAAEC,EAAE,KAAK,KAAK1G,EAAEyG,EAAE,CAAC,EAAEE,EAAE,IAAI,WAAW55B,EAAE25B,CAAC,EAAE,IAAIrjC,EAAE,EAAE,MAAMujC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI/1C,EAAE,EAAE,KAAKA,EAAE,GAAG,CAAC,MAAM4yB,EAAEkjB,EAAE91C,CAAC,EAAEi2C,EAAEF,EAAE/1C,CAAC,EAAE,IAAIk2C,EAAE,EAAE33C,EAAE,EAAEgyB,EAAEolB,EAAE31C,CAAC,EAAE,KAAKuwB,EAAEzU,GAAGyU,GAAGqC,EAAEr0B,IAAI,IAAIstB,EAAEgqB,EAAE71C,CAAC,EAAE,KAAK6rB,EAAEkjB,GAAGljB,GAAGoqB,EAAEC,IAAI,MAAMC,EAAE,KAAK,KAAKD,EAAEV,EAAE,CAAC,EAAE8B,EAAYh+C,EAAE4C,EAAEkW,EAAE8jC,EAAE33C,CAAC,EAAE,IAAI63C,EAAE,EAAE/qB,EAAEsqB,EAAE31C,CAAC,EAAE,KAAKqrB,EAAEvP,GAAG,CAAC,IAAI5f,EAAE25C,EAAE71C,CAAC,EAAE8b,GAAE1J,EAAEgkC,EAAED,GAAG,EAAE,KAAKj6C,EAAE6yC,GAAG,CAAC,IAAIiH,EAAmM,GAA3LR,GAAH,IAAKQ,GAAGA,EAAE18C,EAAEwiB,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,EAAE45B,EAAErqB,EAAEoqB,GAAGv5C,GAAG,EAAE,GAAG85C,GAAG,IAAI,EAAE95C,IAAI,IAASs5C,GAAH,IAAKQ,GAAGA,EAAE18C,EAAEwiB,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,EAAE45B,EAAErqB,EAAEoqB,GAAGv5C,GAAG,EAAE,GAAG85C,GAAG,IAAI,EAAE95C,IAAI,IAASs5C,GAAH,IAAKQ,GAAGA,EAAE18C,EAAEwiB,IAAG,CAAC,IAAI,GAAG,EAAEA,IAAG,GAAG45B,EAAErqB,EAAEoqB,GAAGv5C,GAAG,EAAE,GAAG85C,GAAG,IAAI,EAAE95C,IAAI,IAAMs5C,GAAG,EAAE,CAAC,MAAMzG,GAAE1jB,EAAEoqB,EAAEv5C,EAAEo0B,EAAE,QAAQp0B,GAAE,EAAEA,GAAEo0B,EAAEp0B,KAAIw5C,EAAE3G,GAAE7yC,EAAC,EAAE5C,GAAGwiB,IAAG,GAAG5f,EAAC,CAAC,CAAC4f,IAAG05B,EAAEt5C,GAAG+5C,CAAC,CAACG,IAAI/qB,GAAGuH,CAAC,CAACsjB,EAAE33C,GAAG,IAAI6T,GAAG7T,GAAG,EAAE43C,IAAIn2C,GAAG,CAAC,CAAC,OAAO01C,CAAC,GAAE3G,EAAEz1C,CAAC,GAAGy1C,CAAC,CAAC,SAASsI,EAAS/9C,EAAEy1C,EAAE,CAAC,OAAO7yC,EAAE,IAAI,WAAW5C,EAAE,OAAO,EAAEA,EAAE,OAAO,CAAC,EAAEy1C,CAAC,CAAC,CAAC,IAAI7yC,GAAE,UAAU,CAAC,MAAM5C,EAAE,CAAC,EAAE,CAAA,CAAE,EAAE,OAAOA,EAAE,EAAE,EAAE,SAAS4C,EAAE6yC,EAAE,CAAC,MAAMjzB,EAAE,WAAW,IAAI05B,EAAEllB,EAAEmlB,EAAE,EAAEC,EAAE,EAAEtjC,EAAE,EAAEujC,EAAE,EAAEE,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAE/1C,EAAE,EAAEg2C,EAAE,EAAE,GAAM95C,EAAE,CAAC,GAAN,GAAYA,EAAE,CAAC,GAAN,EAAQ,OAAO6yC,GAAG,IAAIjzB,EAAE,CAAC,EAAE,MAAM8W,EAAEt5B,EAAE,EAAE28C,EAAErjB,EAAE,EAAEsjB,EAAEtjB,EAAE,EAAEr0B,EAAEq0B,EAAE,EAAErC,EAAEqC,EAAE,EAAE/G,EAAE+G,EAAE,EAAEujB,EAAEvjB,EAAE,EAAEwjB,EAAExjB,EAAE,EAAEvH,EAAQ0jB,GAAN,KAAQ,IAAI1jB,IAAI0jB,EAAE,IAAIjzB,EAAE5f,EAAE,SAAS,GAAG,CAAC,GAAMu5C,GAAH,GAAM,GAAGA,EAAEQ,EAAE/5C,EAAE85C,EAAE,CAAC,EAAEN,EAAEO,EAAE/5C,EAAE85C,EAAE,EAAE,CAAC,EAAEA,GAAG,EAAKN,GAAH,EAAK,CAAC,GAAGrqB,IAAI0jB,EAAEz1C,EAAE,EAAE,EAAEy1C,EAAE/uC,GAAG,GAAG,GAAG,GAAM01C,GAAH,IAAOF,EAAEY,EAAE,EAAE9lB,EAAE8lB,EAAE,EAAEN,EAAE,IAAIC,EAAE,IAAOL,GAAH,EAAK,CAACtjC,EAAE8jC,EAAEh6C,EAAE85C,EAAE,CAAC,EAAE,IAAIL,EAAEO,EAAEh6C,EAAE85C,EAAE,EAAE,CAAC,EAAE,EAAEH,EAAEK,EAAEh6C,EAAE85C,EAAE,GAAG,CAAC,EAAE,EAAEA,GAAG,GAAG,IAAI18C,EAAE,EAAE,QAAQ+8C,EAAE,EAAEA,EAAE,GAAGA,GAAG,EAAED,EAAE,EAAEC,CAAC,EAAE,EAAED,EAAE,EAAEC,EAAE,CAAC,EAAE,EAAE,IAAIA,EAAE,EAAEA,EAAER,EAAEQ,IAAI,CAAC,MAAMtH,EAAEmH,EAAEh6C,EAAE85C,EAAE,EAAEK,EAAE,CAAC,EAAED,EAAE,EAAE,GAAGA,EAAE,EAAEC,CAAC,GAAG,EAAE,EAAEtH,EAAEA,EAAEz1C,IAAIA,EAAEy1C,EAAE,CAACiH,GAAG,EAAEH,EAAEtlB,EAAE6lB,EAAE,EAAE98C,CAAC,EAAEuyB,EAAEuqB,EAAE,EAAE98C,EAAE88C,EAAE,CAAC,EAAEZ,EAAEY,EAAE,EAAE9lB,EAAE8lB,EAAE,EAAEJ,EAAEz3C,EAAE63C,EAAE,GAAG,GAAG98C,GAAG,EAAE8Y,EAAEujC,EAAEz5C,EAAE85C,EAAEI,EAAE,CAAC,EAAE,MAAMrH,EAAEnc,EAAE,EAAEwjB,EAAE,EAAE,EAAEhkC,EAAEgkC,EAAE,CAAC,EAAEN,GAAG,GAAG/G,GAAG,EAAE,MAAMjzB,EAAE8W,EAAE,EAAEwjB,EAAE,EAAEhkC,EAAEujC,EAAES,EAAE,CAAC,EAAEL,GAAG,GAAGj6B,GAAG,EAAEyU,EAAE6lB,EAAE,EAAErH,CAAC,EAAEljB,EAAEuqB,EAAE,EAAErH,EAAEyG,CAAC,EAAEjlB,EAAE6lB,EAAE,EAAEt6B,CAAC,EAAE+P,EAAEuqB,EAAE,EAAEt6B,EAAEwU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAMh3B,EAAEk8C,EAAEW,EAAEj6C,EAAE85C,CAAC,EAAEF,CAAC,EAAEE,GAAG,GAAG18C,EAAE,MAAMwiB,EAAExiB,IAAI,EAAE,GAAG,EAAAwiB,IAAI,GAAKizB,EAAE/uC,GAAG,EAAE8b,MAAM,CAAC,GAAQA,GAAL,IAAO,MAAM,CAAC,IAAIxiB,EAAE0G,EAAE8b,EAAE,IAAI,GAAGA,EAAE,IAAI,CAAC,MAAMizB,EAAEqH,EAAE,EAAEt6B,EAAE,GAAG,EAAExiB,EAAE0G,GAAG+uC,IAAI,GAAGmH,EAAEh6C,EAAE85C,EAAE,EAAEjH,CAAC,EAAEiH,GAAG,EAAEjH,CAAC,CAAC,MAAMyG,EAAEllB,EAAE6lB,EAAEj6C,EAAE85C,CAAC,EAAED,CAAC,EAAEC,GAAG,GAAGR,EAAE,MAAMC,EAAED,IAAI,EAAEE,EAAEU,EAAE,EAAEX,CAAC,EAAErjC,GAAGsjC,IAAI,GAAGO,EAAE/5C,EAAE85C,EAAE,GAAGN,CAAC,EAAE,IAAIM,GAAG,GAAGN,EAAE11C,EAAE1G,GAAGy1C,EAAE/uC,CAAC,EAAE+uC,EAAE/uC,IAAIoS,CAAC,EAAE28B,EAAE/uC,CAAC,EAAE+uC,EAAE/uC,IAAIoS,CAAC,EAAE28B,EAAE/uC,CAAC,EAAE+uC,EAAE/uC,IAAIoS,CAAC,EAAE28B,EAAE/uC,CAAC,EAAE+uC,EAAE/uC,IAAIoS,CAAC,EAAEpS,EAAE1G,CAAC,CAAC,CAAC,CAAC,KAAK,EAAK,EAAE08C,IAAN,IAAWA,GAAG,GAAG,EAAEA,IAAI,MAAMR,EAAE,GAAGQ,IAAI,GAAG1lB,EAAEp0B,EAAEs5C,EAAE,CAAC,EAAEt5C,EAAEs5C,EAAE,CAAC,GAAG,EAAEnqB,IAAI0jB,EAAEz1C,EAAE,EAAE,EAAEy1C,EAAE/uC,EAAEswB,CAAC,GAAGye,EAAE,IAAI,IAAIjzB,EAAE5f,EAAE,OAAOA,EAAE,WAAWs5C,EAAEllB,CAAC,EAAEtwB,CAAC,EAAEg2C,EAAER,EAAEllB,GAAG,EAAEtwB,GAAGswB,CAAC,CAAC,OAAOye,EAAE,QAAQ/uC,EAAE+uC,EAAEA,EAAE,MAAM,EAAE/uC,CAAC,CAAC,EAAE1G,EAAE,EAAE,EAAE,SAASA,EAAE4C,EAAE,CAAC,MAAM6yC,EAAEz1C,EAAE,OAAO,GAAG4C,GAAG6yC,EAAE,OAAOz1C,EAAE,MAAMwiB,EAAE,IAAI,WAAWizB,GAAG,CAAC,EAAE,OAAOjzB,EAAE,IAAIxiB,EAAE,CAAC,EAAEwiB,CAAC,EAAExiB,EAAE,EAAE,EAAE,SAAS4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAEmlB,EAAE,CAAC,MAAMC,EAAEp8C,EAAE,EAAE,EAAE8Y,EAAE9Y,EAAE,EAAE,EAAE,IAAIq8C,EAAE,EAAE,KAAKA,EAAE75B,GAAG,CAAC,MAAMxiB,EAAE4C,EAAEkW,EAAEojC,EAAEllB,CAAC,EAAEye,CAAC,EAAEze,GAAG,GAAGh3B,EAAE,MAAMwiB,EAAExiB,IAAI,EAAE,GAAGwiB,GAAG,GAAG25B,EAAEE,CAAC,EAAE75B,EAAE65B,QAAQ,CAAC,IAAIr8C,EAAE,EAAE4C,EAAE,EAAM4f,GAAJ,IAAO5f,EAAE,EAAEw5C,EAAEF,EAAEllB,EAAE,CAAC,EAAEA,GAAG,EAAEh3B,EAAEm8C,EAAEE,EAAE,CAAC,GAAO75B,GAAJ,IAAO5f,EAAE,EAAEw5C,EAAEF,EAAEllB,EAAE,CAAC,EAAEA,GAAG,GAAOxU,GAAJ,KAAQ5f,EAAE,GAAGw5C,EAAEF,EAAEllB,EAAE,CAAC,EAAEA,GAAG,GAAG,MAAMye,EAAE4G,EAAEz5C,EAAE,KAAKy5C,EAAE5G,GAAG0G,EAAEE,CAAC,EAAEr8C,EAAEq8C,GAAG,CAAC,CAAC,OAAOrlB,CAAC,EAAEh3B,EAAE,EAAE,EAAE,SAASA,EAAE4C,EAAE6yC,EAAEjzB,EAAE,CAAC,IAAI05B,EAAE,EAAEllB,EAAE,EAAE,MAAMmlB,EAAE35B,EAAE,SAAS,EAAE,KAAKwU,EAAEye,GAAG,CAAC,MAAMA,EAAEz1C,EAAEg3B,EAAEp0B,CAAC,EAAE4f,EAAEwU,GAAG,CAAC,EAAE,EAAExU,EAAE,GAAGwU,GAAG,EAAE,EAAEye,EAAEA,EAAEyG,IAAIA,EAAEzG,GAAGze,GAAG,CAAC,KAAKA,EAAEmlB,GAAG35B,EAAEwU,GAAG,CAAC,EAAE,EAAExU,EAAE,GAAGwU,GAAG,EAAE,EAAE,EAAEA,IAAI,OAAOklB,CAAC,EAAEl8C,EAAE,EAAE,EAAE,SAAS4C,EAAE6yC,EAAE,CAAC,MAAMjzB,EAAExiB,EAAE,EAAE,EAAEk8C,EAAEt5C,EAAE,OAAO,IAAIo0B,EAAEmlB,EAAEC,EAAMtjC,EAAE,MAAMujC,EAAE75B,EAAE,EAAE,QAAQ+5B,EAAE,EAAEA,GAAG9G,EAAE8G,IAAIF,EAAEE,CAAC,EAAE,EAAE,IAAIA,EAAE,EAAEA,EAAEL,EAAEK,GAAG,EAAEF,EAAEz5C,EAAE25C,CAAC,CAAC,IAAI,MAAMC,EAAEh6B,EAAE,EAAE,IAAIwU,EAAE,EAAEqlB,EAAE,CAAC,EAAE,EAAEF,EAAE,EAAEA,GAAG1G,EAAE0G,IAAInlB,EAAEA,EAAEqlB,EAAEF,EAAE,CAAC,GAAG,EAAEK,EAAEL,CAAC,EAAEnlB,EAAE,IAAIolB,EAAE,EAAEA,EAAEF,EAAEE,GAAG,EAAEtjC,EAAElW,EAAEw5C,EAAE,CAAC,EAAKtjC,GAAH,IAAOlW,EAAEw5C,CAAC,EAAEI,EAAE1jC,CAAC,EAAE0jC,EAAE1jC,CAAC,IAAI,EAAE9Y,EAAE,EAAE,EAAE,SAAS4C,EAAE6yC,EAAEjzB,EAAE,CAAC,MAAM05B,EAAEt5C,EAAE,OAAOo0B,EAAEh3B,EAAE,EAAE,EAAE,EAAE,QAAQA,EAAE,EAAEA,EAAEk8C,EAAEl8C,GAAG,EAAE,GAAM4C,EAAE5C,EAAE,CAAC,GAAR,EAAU,CAAC,MAAMk8C,EAAEl8C,GAAG,EAAEm8C,EAAEv5C,EAAE5C,EAAE,CAAC,EAAEo8C,EAAEF,GAAG,EAAEC,EAAErjC,EAAE28B,EAAE0G,EAAE,IAAIE,EAAEz5C,EAAE5C,CAAC,GAAG8Y,EAAE,MAAMyjC,EAAEF,GAAG,GAAGvjC,GAAG,KAAKujC,GAAGE,GAAI/5B,EAAEwU,EAAEqlB,CAAC,IAAI,GAAG5G,CAAC,EAAE2G,EAAEC,GAAI,CAAC,EAAEr8C,EAAE,EAAE,EAAE,SAAS4C,EAAE6yC,EAAE,CAAC,MAAMjzB,EAAExiB,EAAE,EAAE,EAAE,EAAEk8C,EAAE,GAAGzG,EAAE,QAAQz1C,EAAE,EAAEA,EAAE4C,EAAE,OAAO5C,GAAG,EAAE,CAAC,MAAMg3B,EAAEp0B,EAAE5C,CAAC,GAAGy1C,EAAE7yC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE5C,CAAC,EAAEwiB,EAAEwU,CAAC,IAAIklB,CAAC,CAAC,EAAEl8C,EAAE,EAAE,EAAE,SAASA,EAAE4C,EAAE6yC,EAAE,CAACA,IAAI,EAAE7yC,EAAE,MAAM4f,EAAE5f,IAAI,EAAE5C,EAAEwiB,CAAC,GAAGizB,EAAEz1C,EAAEwiB,EAAE,CAAC,GAAGizB,IAAI,CAAC,EAAEz1C,EAAE,EAAE,EAAE,SAASA,EAAE4C,EAAE6yC,EAAE,CAACA,IAAI,EAAE7yC,EAAE,MAAM4f,EAAE5f,IAAI,EAAE5C,EAAEwiB,CAAC,GAAGizB,EAAEz1C,EAAEwiB,EAAE,CAAC,GAAGizB,IAAI,EAAEz1C,EAAEwiB,EAAE,CAAC,GAAGizB,IAAI,EAAE,EAAEz1C,EAAE,EAAE,EAAE,SAASA,EAAE4C,EAAE6yC,EAAE,CAAC,OAAOz1C,EAAE4C,IAAI,CAAC,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,MAAM,EAAEA,IAAI,GAAG6yC,GAAG,CAAC,EAAEz1C,EAAE,EAAE,EAAE,SAASA,EAAE4C,EAAE6yC,EAAE,CAAC,OAAOz1C,EAAE4C,IAAI,CAAC,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,OAAO,EAAEA,IAAI,GAAG6yC,GAAG,CAAC,EAAEz1C,EAAE,EAAE,EAAE,SAASA,EAAE4C,EAAE,CAAC,OAAO5C,EAAE4C,IAAI,CAAC,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,OAAO,EAAEA,EAAE,EAAE5C,EAAE,EAAE,EAAE,SAASA,EAAE4C,EAAE,CAAC,OAAO5C,EAAE4C,IAAI,CAAC,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,EAAE5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,GAAG5C,EAAE,GAAG4C,IAAI,EAAE,GAAG,OAAO,EAAEA,EAAE,EAAE5C,EAAE,EAAE,GAAE,UAAU,CAAC,MAAMA,EAAE,YAAY4C,EAAE,YAAY,MAAM,CAAC,EAAE,IAAI5C,EAAE,EAAE,EAAE,EAAE,IAAIA,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAIA,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI4C,EAAE,EAAE,EAAE,EAAE,IAAI5C,EAAE,GAAG,EAAE,EAAE,CAAA,EAAG,EAAE,IAAIA,EAAE,EAAE,EAAE,EAAE,CAAA,EAAG,EAAE,IAAIA,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAA,EAAG,EAAE,IAAIA,EAAE,KAAK,EAAE,EAAE,CAAA,EAAG,EAAE,IAAIA,EAAE,GAAG,EAAE,EAAE,CAAA,EAAG,EAAE,IAAIA,EAAE,KAAK,EAAE,EAAE,IAAI4C,EAAE,GAAG,EAAE,EAAE,IAAIA,EAAE,EAAE,EAAE,EAAE,IAAIA,EAAE,EAAE,EAAE,EAAE,IAAIA,EAAE,IAAI,EAAE,EAAE,IAAI5C,EAAE,KAAK,EAAE,EAAE,IAAIA,EAAE,KAAK,CAAC,CAAC,GAAC,GAAG,UAAU,CAAC,MAAM4C,EAAE5C,EAAE,EAAE,EAAE,QAAQy1C,EAAE,EAAEA,EAAE,MAAMA,IAAI,CAAC,IAAIz1C,EAAEy1C,EAAEz1C,GAAG,WAAWA,KAAK,GAAG,WAAWA,IAAI,EAAEA,GAAG,WAAWA,KAAK,GAAG,UAAUA,IAAI,EAAEA,GAAG,WAAWA,KAAK,GAAG,UAAUA,IAAI,EAAEA,GAAG,WAAWA,KAAK,GAAG,SAASA,IAAI,EAAE4C,EAAE,EAAE6yC,CAAC,GAAGz1C,IAAI,GAAGA,GAAG,MAAM,EAAE,CAAC,SAASqQ,EAAErQ,EAAE4C,EAAE6yC,EAAE,CAAC,KAAQ7yC,KAAH,GAAQ5C,EAAE,KAAK,EAAEy1C,CAAC,CAAC,CAAC,IAAIA,EAAE,EAAEA,EAAE,GAAGA,IAAI7yC,EAAE,EAAE6yC,CAAC,EAAE7yC,EAAE,EAAE6yC,CAAC,GAAG,EAAE7yC,EAAE,EAAE6yC,CAAC,EAAE7yC,EAAE,EAAE6yC,CAAC,EAAE7yC,EAAE,EAAE6yC,CAAC,GAAG,EAAE7yC,EAAE,EAAE6yC,CAAC,EAAEplC,EAAEzN,EAAE,EAAE,IAAI,CAAC,EAAEyN,EAAEzN,EAAE,EAAE,IAAI,CAAC,EAAEyN,EAAEzN,EAAE,EAAE,GAAG,CAAC,EAAEyN,EAAEzN,EAAE,EAAE,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,EAAE,EAAEA,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,EAAE,CAAC,EAAEyN,EAAEzN,EAAE,EAAE,GAAG,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,EAAE,EAAEA,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,EAAE,CAAC,EAAEyN,EAAEzN,EAAE,EAAE,GAAG,CAAC,EAAEyN,EAAEzN,EAAE,EAAE,IAAI,CAAC,EAAEyN,EAAEzN,EAAE,EAAE,GAAG,CAAC,EAAEyN,EAAEzN,EAAE,EAAE,IAAI,CAAC,CAAC,GAAC,EAAG5C,EAAE,EAAE,CAAC,GAAC,EAAG,SAAS69C,EAAQ79C,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,EAAEA,EAAE,KAAK,EAAEA,EAAE,KAAK,CAAC,SAASg+C,EAAYh+C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAE,CAAC,IAAIllB,EAAE6mB,EAAQj7C,CAAC,EAAE,MAAMu5C,EAAE,KAAK,KAAK35B,EAAEwU,EAAE,CAAC,EAAE,IAAIolB,EAAEtjC,EAAEke,EAAE,KAAK,KAAKA,EAAE,CAAC,EAAE,IAAIqlB,EAAEr8C,EAAEy1C,CAAC,EAAE8G,EAAE,EAAE,GAAGF,EAAE,IAAIr8C,EAAEy1C,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE4G,EAAE,CAAC,GAAMA,GAAH,EAAK,IAAIE,EAAEvlB,EAAEulB,EAAEJ,EAAEI,IAAIv8C,EAAEu8C,EAAE,CAAC,EAAEv8C,EAAEu8C,EAAE,CAAC,GAAGv8C,EAAEu8C,EAAE,EAAEvlB,CAAC,IAAI,GAAG,IAAI,QAAQp0B,EAAE,EAAEA,EAAEs5C,EAAEt5C,IAAI,GAAGw5C,EAAE3G,EAAE7yC,EAAEu5C,EAAErjC,EAAEsjC,EAAEx5C,EAAE,EAAEy5C,EAAEr8C,EAAE8Y,EAAE,CAAC,EAAEyjC,EAAE,EAAKF,GAAH,EAAK,KAAKE,EAAEJ,EAAEI,IAAIv8C,EAAEo8C,EAAEG,CAAC,EAAEv8C,EAAE8Y,EAAEyjC,CAAC,UAAaF,GAAH,EAAK,CAAC,KAAKE,EAAEvlB,EAAEulB,IAAIv8C,EAAEo8C,EAAEG,CAAC,EAAEv8C,EAAE8Y,EAAEyjC,CAAC,EAAE,KAAKA,EAAEJ,EAAEI,IAAIv8C,EAAEo8C,EAAEG,CAAC,EAAEv8C,EAAE8Y,EAAEyjC,CAAC,EAAEv8C,EAAEo8C,EAAEG,EAAEvlB,CAAC,CAAC,SAAYqlB,GAAH,EAAK,KAAKE,EAAEJ,EAAEI,IAAIv8C,EAAEo8C,EAAEG,CAAC,EAAEv8C,EAAE8Y,EAAEyjC,CAAC,EAAEv8C,EAAEo8C,EAAEG,EAAEJ,CAAC,UAAaE,GAAH,EAAK,CAAC,KAAKE,EAAEvlB,EAAEulB,IAAIv8C,EAAEo8C,EAAEG,CAAC,EAAEv8C,EAAE8Y,EAAEyjC,CAAC,GAAGv8C,EAAEo8C,EAAEG,EAAEJ,CAAC,IAAI,GAAG,KAAKI,EAAEJ,EAAEI,IAAIv8C,EAAEo8C,EAAEG,CAAC,EAAEv8C,EAAE8Y,EAAEyjC,CAAC,GAAGv8C,EAAEo8C,EAAEG,EAAEJ,CAAC,EAAEn8C,EAAEo8C,EAAEG,EAAEvlB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAKulB,EAAEvlB,EAAEulB,IAAIv8C,EAAEo8C,EAAEG,CAAC,EAAEv8C,EAAE8Y,EAAEyjC,CAAC,EAAE0B,EAAO,EAAEj+C,EAAEo8C,EAAEG,EAAEJ,CAAC,EAAE,CAAC,EAAE,KAAKI,EAAEJ,EAAEI,IAAIv8C,EAAEo8C,EAAEG,CAAC,EAAEv8C,EAAE8Y,EAAEyjC,CAAC,EAAE0B,EAAOj+C,EAAEo8C,EAAEG,EAAEvlB,CAAC,EAAEh3B,EAAEo8C,EAAEG,EAAEJ,CAAC,EAAEn8C,EAAEo8C,EAAEG,EAAEvlB,EAAEmlB,CAAC,CAAC,CAAC,CAAC,OAAOn8C,CAAC,CAAC,SAASi+C,EAAOj+C,EAAE4C,EAAE6yC,EAAE,CAAC,MAAMjzB,EAAExiB,EAAE4C,EAAE6yC,EAAEyG,EAAE15B,EAAExiB,EAAEg3B,EAAExU,EAAE5f,EAAEu5C,EAAE35B,EAAEizB,EAAE,OAAOyG,EAAEA,GAAGllB,EAAEA,GAAGklB,EAAEA,GAAGC,EAAEA,EAAEn8C,EAAEg3B,EAAEA,GAAGmlB,EAAEA,EAAEv5C,EAAE6yC,CAAC,CAAC,SAASyI,EAAMt7C,EAAE6yC,EAAEjzB,EAAE,CAACA,EAAE,MAAM,EAAE,SAAS5f,EAAE6yC,CAAC,EAAEA,GAAG,EAAEjzB,EAAE,OAAO,EAAE,SAAS5f,EAAE6yC,CAAC,EAAEA,GAAG,EAAEjzB,EAAE,MAAM5f,EAAE6yC,CAAC,EAAEA,IAAIjzB,EAAE,MAAM5f,EAAE6yC,CAAC,EAAEA,IAAIjzB,EAAE,SAAS5f,EAAE6yC,CAAC,EAAEA,IAAIjzB,EAAE,OAAO5f,EAAE6yC,CAAC,EAAEA,IAAIjzB,EAAE,UAAU5f,EAAE6yC,CAAC,EAAEA,GAAG,CAAC,SAAS0I,EAAUn+C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAEmlB,EAAEC,EAAEtjC,EAAE,CAAC,MAAMujC,EAAE,KAAK,IAAIz5C,EAAEs5C,CAAC,EAAEK,EAAE,KAAK,IAAI9G,EAAEze,CAAC,EAAE,IAAIwlB,EAAE,EAAEC,EAAE,EAAE,QAAQhH,EAAE,EAAEA,EAAE8G,EAAE9G,IAAI,QAAQze,EAAE,EAAEA,EAAEqlB,EAAErlB,IAAI,GAAGmlB,GAAG,GAAGC,GAAG,GAAGI,EAAE/G,EAAE7yC,EAAEo0B,GAAG,EAAEylB,GAAGL,EAAE3G,GAAGyG,EAAEC,EAAEnlB,GAAG,IAAIwlB,GAAG,CAACJ,EAAE3G,GAAG7yC,EAAEu5C,EAAEnlB,GAAG,EAAEylB,EAAEhH,EAAEyG,EAAEllB,GAAG,GAAMle,GAAH,EAAK0J,EAAEi6B,CAAC,EAAEz8C,EAAEw8C,CAAC,EAAEh6B,EAAEi6B,EAAE,CAAC,EAAEz8C,EAAEw8C,EAAE,CAAC,EAAEh6B,EAAEi6B,EAAE,CAAC,EAAEz8C,EAAEw8C,EAAE,CAAC,EAAEh6B,EAAEi6B,EAAE,CAAC,EAAEz8C,EAAEw8C,EAAE,CAAC,UAAa1jC,GAAH,EAAK,CAAC,IAAIpS,EAAE1G,EAAEw8C,EAAE,CAAC,EAAG,mBAAOE,EAAE18C,EAAEw8C,CAAC,EAAE91C,EAAE4yB,EAAEt5B,EAAEw8C,EAAE,CAAC,EAAE91C,EAAEi2C,EAAE38C,EAAEw8C,EAAE,CAAC,EAAE91C,EAAEk2C,EAAEp6B,EAAEi6B,EAAE,CAAC,GAAG,EAAE,KAAKx3C,EAAEud,EAAEi6B,CAAC,EAAEG,EAAE3lB,EAAEzU,EAAEi6B,EAAE,CAAC,EAAEG,EAAErqB,EAAE/P,EAAEi6B,EAAE,CAAC,EAAEG,EAAE,MAAMh6C,EAAE,EAAE8D,EAAE+uC,EAAE/uC,EAAEk2C,EAAEh6C,EAAEs5C,EAAKzG,GAAH,EAAK,EAAE,EAAEA,EAAEjzB,EAAEi6B,EAAE,CAAC,EAAE,IAAIhH,EAAEjzB,EAAEi6B,EAAE,CAAC,GAAGC,EAAEz3C,EAAErC,GAAGs5C,EAAE15B,EAAEi6B,EAAE,CAAC,GAAGnjB,EAAErC,EAAEr0B,GAAGs5C,EAAE15B,EAAEi6B,EAAE,CAAC,GAAGE,EAAEpqB,EAAE3vB,GAAGs5C,CAAC,SAAYpjC,GAAH,EAAMpS,EAAE1G,EAAEw8C,EAAE,CAAC,EAAEE,EAAE18C,EAAEw8C,CAAC,EAAEljB,EAAEt5B,EAAEw8C,EAAE,CAAC,EAAEG,EAAE38C,EAAEw8C,EAAE,CAAC,EAAEI,EAAEp6B,EAAEi6B,EAAE,CAAC,EAAEx3C,EAAEud,EAAEi6B,CAAC,EAAExlB,EAAEzU,EAAEi6B,EAAE,CAAC,EAAElqB,EAAE/P,EAAEi6B,EAAE,CAAC,EAAE/1C,GAAGk2C,GAAGF,GAAGz3C,GAAGq0B,GAAGrC,GAAG0lB,GAAGpqB,GAAG/P,EAAEi6B,CAAC,EAAE,EAAEj6B,EAAEi6B,EAAE,CAAC,EAAE,EAAEj6B,EAAEi6B,EAAE,CAAC,EAAE,EAAEj6B,EAAEi6B,EAAE,CAAC,EAAE,IAAIj6B,EAAEi6B,CAAC,EAAEC,EAAEl6B,EAAEi6B,EAAE,CAAC,EAAEnjB,EAAE9W,EAAEi6B,EAAE,CAAC,EAAEE,EAAEn6B,EAAEi6B,EAAE,CAAC,EAAE/1C,WAAcoS,GAAH,EAAK,CAAqE,GAApEpS,EAAE1G,EAAEw8C,EAAE,CAAC,EAAEE,EAAE18C,EAAEw8C,CAAC,EAAEljB,EAAEt5B,EAAEw8C,EAAE,CAAC,EAAEG,EAAE38C,EAAEw8C,EAAE,CAAC,EAAEI,EAAEp6B,EAAEi6B,EAAE,CAAC,EAAEx3C,EAAEud,EAAEi6B,CAAC,EAAExlB,EAAEzU,EAAEi6B,EAAE,CAAC,EAAElqB,EAAE/P,EAAEi6B,EAAE,CAAC,EAAK/1C,GAAGk2C,GAAGF,GAAGz3C,GAAGq0B,GAAGrC,GAAG0lB,GAAGpqB,EAAE,SAAS,GAAG7rB,EAAE,KAAKk2C,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,SAAgBnH,EAAE,CAAC,MAAMjzB,EAAE,IAAI,WAAWizB,CAAC,EAAE,IAAIyG,EAAE,EAAE,MAAMllB,EAAE,EAAEmlB,EAAEnlB,EAAE,WAAWolB,EAAEplB,EAAE,SAASle,EAAE,CAAC,KAAK,CAAA,EAAG,OAAO,CAAA,CAAE,EAAEujC,EAAE,IAAI,WAAW75B,EAAE,MAAM,EAAE,IAAI+5B,EAAEC,EAAE,EAAEC,EAAE,EAAE,MAAM/1C,EAAE,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,QAAQg2C,EAAE,EAAEA,EAAE,EAAEA,IAAI,GAAGl6B,EAAEk6B,CAAC,GAAGh2C,EAAEg2C,CAAC,EAAE,KAAK,+BAA+B,KAAKR,EAAE15B,EAAE,QAAQ,CAAC,MAAMxiB,EAAEg3B,EAAE,SAASxU,EAAE05B,CAAC,EAAEA,GAAG,EAAE,MAAMzG,EAAEze,EAAE,UAAUxU,EAAE05B,EAAE,CAAC,EAAE,GAAGA,GAAG,EAAUzG,GAAR,OAAUyI,EAAM17B,EAAE05B,EAAEpjC,CAAC,UAAkB28B,GAAR,OAAU,CAAC,QAAQnc,EAAE4iB,EAAK15B,EAAE8W,CAAC,GAAN,GAASA,IAAItC,EAAE,UAAUxU,EAAE05B,EAAE5iB,EAAE4iB,CAAC,EAAE15B,EAAE8W,EAAE,CAAC,EAAE,MAAM6iB,EAAE35B,EAAE,MAAM8W,EAAE,EAAE4iB,EAAEl8C,CAAC,EAAE,IAAIo8C,EAAE,KAAK,GAAG,CAACA,EAAE2B,EAAS5B,CAAC,CAAC,MAAS,CAACC,EAAEx5C,EAAEu5C,CAAC,CAAC,CAACrjC,EAAE,KAAK28B,CAAC,EAAE2G,CAAC,SAAiB3G,GAAR,OAAU38B,EAAE,KAAK28B,CAAC,EAAEjzB,EAAE,MAAM05B,EAAEA,EAAE,CAAC,UAAkBzG,GAAR,OAAU,CAAC,IAAIiH,EAAE,EAAEA,EAAE18C,EAAE08C,IAAIL,EAAEG,EAAEE,CAAC,EAAEl6B,EAAE05B,EAAEQ,CAAC,EAAEF,GAAGx8C,CAAC,SAAiBy1C,GAAR,OAAU38B,EAAE,KAAK28B,CAAC,EAAE,CAAC,WAAW2G,EAAE55B,EAAE05B,CAAC,EAAE,UAAUE,EAAE55B,EAAE05B,EAAE,CAAC,CAAC,EAAEK,EAAE,IAAI,WAAW/5B,EAAE,MAAM,UAAkBizB,GAAR,OAAU,CAAOgH,GAAH,KAAMI,EAAE/jC,EAAE,OAAOA,EAAE,OAAO,OAAO,CAAC,GAAG,KAAKglC,EAAYhlC,EAAEyjC,EAAE,MAAM,EAAEE,CAAC,EAAEI,EAAE,KAAK,MAAMA,EAAE,KAAK,MAAM,EAAEJ,EAAE,GAAE,MAAMz8C,EAAE,CAAC,EAAEo8C,EAAE55B,EAAE05B,EAAE,EAAE,EAAE,EAAEE,EAAE55B,EAAE05B,EAAE,EAAE,EAAE,MAAME,EAAE55B,EAAE05B,EAAE,CAAC,EAAE,OAAOE,EAAE55B,EAAE05B,EAAE,CAAC,CAAC,EAAE,IAAIt5C,EAAEu5C,EAAE35B,EAAE05B,EAAE,EAAE,EAAEt5C,EAAEu5C,EAAE35B,EAAE05B,EAAE,EAAE,GAAMt5C,GAAH,EAAK,IAAIA,GAAG,MAAM6yC,EAAE,CAAC,KAAKz1C,EAAE,MAAM,KAAK,MAAM,IAAI4C,CAAC,EAAE,QAAQ4f,EAAE05B,EAAE,EAAE,EAAE,MAAM15B,EAAE05B,EAAE,EAAE,CAAC,EAAEpjC,EAAE,OAAO,KAAK28B,CAAC,CAAC,SAAiBA,GAAR,OAAU,CAAC,IAAIiH,EAAE,EAAEA,EAAE18C,EAAE,EAAE08C,IAAIH,EAAEE,EAAEC,CAAC,EAAEl6B,EAAE05B,EAAEQ,EAAE,CAAC,EAAED,GAAGz8C,EAAE,CAAC,SAAiBy1C,GAAR,OAAU38B,EAAE,KAAK28B,CAAC,EAAE,CAACze,EAAE,SAASxU,EAAE05B,CAAC,EAAEllB,EAAE,SAASxU,EAAE05B,EAAE,CAAC,EAAE15B,EAAE05B,EAAE,CAAC,CAAC,UAAkBzG,GAAR,OAAwB,IAAb38B,EAAE,KAAK28B,CAAC,EAAE,CAAA,EAAOiH,EAAE,EAAEA,EAAE,EAAEA,IAAI5jC,EAAE,KAAK28B,CAAC,EAAE,KAAKze,EAAE,SAASxU,EAAE05B,EAAE,EAAEQ,CAAC,CAAC,UAAkBjH,GAAR,QAAmBA,GAAR,OAAU,CAAO38B,EAAE,KAAK28B,CAAC,GAAd,OAAkB38B,EAAE,KAAK28B,CAAC,EAAE,IAAI,IAAIkH,EAAE3lB,EAAE,SAASxU,EAAE05B,CAAC,EAAEU,EAAE5lB,EAAE,UAAUxU,EAAE05B,EAAES,EAAET,CAAC,EAAEj3C,EAAEi3C,EAAEl8C,EAAE28C,EAAE,EAAE,GAAWlH,GAAR,OAAUljB,EAAEyE,EAAE,UAAUxU,EAAEm6B,EAAE,EAAE13C,CAAC,MAAM,CAAC,IAAIgyB,EAAE8mB,EAASv7B,EAAE,MAAMm6B,EAAE,EAAEA,EAAE,EAAE13C,CAAC,CAAC,EAAEstB,EAAEyE,EAAE,SAASC,EAAE,EAAEA,EAAE,MAAM,CAAC,CAACne,EAAE,KAAK28B,CAAC,EAAEmH,CAAC,EAAErqB,CAAC,SAAiBkjB,GAAR,OAAU,CAAO38B,EAAE,KAAK28B,CAAC,GAAd,OAAkB38B,EAAE,KAAK28B,CAAC,EAAE,CAAA,GAAIkH,EAAE,EAAErjB,EAAE4iB,EAAES,EAAE3lB,EAAE,SAASxU,EAAE8W,CAAC,EAAEsjB,EAAE5lB,EAAE,UAAUxU,EAAE8W,EAAEqjB,EAAErjB,CAAC,EAAE,MAAM12B,EAAE4f,EAAE8W,EAAEqjB,EAAE,CAAC,EAAE,IAAIpqB,EAAE/P,EAAE8W,EAAE,CAAC,EAAEA,GAAG,EAAEqjB,EAAE3lB,EAAE,SAASxU,EAAE8W,CAAC,EAAEtC,EAAE,UAAUxU,EAAE8W,EAAEqjB,EAAErjB,CAAC,EAAEA,EAAEqjB,EAAE,EAAEA,EAAE3lB,EAAE,SAASxU,EAAE8W,CAAC,EAAEtC,EAAE,SAASxU,EAAE8W,EAAEqjB,EAAErjB,CAAC,EAAEr0B,EAAEjF,IAAIs5B,EAAEqjB,EAAE,GAAGT,GAASt5C,GAAH,EAAK2vB,EAAEyE,EAAE,SAASxU,EAAE8W,EAAEr0B,CAAC,GAAOgyB,EAAE8mB,EAASv7B,EAAE,MAAM8W,EAAEA,EAAEr0B,CAAC,CAAC,EAAEstB,EAAEyE,EAAE,SAASC,EAAE,EAAEA,EAAE,MAAM,GAAEne,EAAE,KAAK28B,CAAC,EAAEmH,CAAC,EAAErqB,CAAC,SAAiBkjB,GAAR,OAAU38B,EAAE,KAAK28B,CAAC,EAAEze,EAAE,UAAUxU,EAAE05B,EAAEl8C,CAAC,UAAkBy1C,GAAR,OAAU,CAAC,MAAMz1C,EAAE8Y,EAAE,KAAK,KAAK,OAAO,EAAe,IAAbA,EAAE,KAAK28B,CAAC,EAAE,CAAA,EAAOiH,EAAE,EAAEA,EAAE18C,EAAE08C,IAAI5jC,EAAE,KAAK28B,CAAC,EAAE,KAAK0G,EAAE35B,EAAE05B,EAAE,EAAEQ,CAAC,CAAC,CAAC,SAAiBjH,GAAR,OAAa38B,EAAE,OAAL,EAAWA,EAAE,KAAK28B,CAAC,EAAEze,EAAE,UAAUxU,EAAE05B,EAAEl8C,CAAC,EAAK8Y,EAAE,OAAL,EAAWA,EAAE,KAAK28B,CAAC,EAAE0G,EAAE35B,EAAE05B,CAAC,EAAKpjC,EAAE,OAAL,IAAaA,EAAE,KAAK28B,CAAC,EAAE,CAAC0G,EAAE35B,EAAE05B,CAAC,EAAEC,EAAE35B,EAAE05B,EAAE,CAAC,EAAEC,EAAE35B,EAAE05B,EAAE,CAAC,CAAC,WAAmBzG,GAAR,OAAU38B,EAAE,KAAK28B,CAAC,EAAEze,EAAE,SAASxU,EAAE05B,CAAC,EAAE,YAAoBzG,GAAR,OAAU38B,EAAE,KAAK28B,CAAC,EAAEjzB,EAAE05B,CAAC,UAAkBzG,GAAR,OAAa38B,EAAE,OAAL,GAAeA,EAAE,OAAL,EAAWA,EAAE,KAAK28B,CAAC,EAAE,CAAC0G,EAAE35B,EAAE05B,CAAC,CAAC,EAAKpjC,EAAE,OAAL,GAAeA,EAAE,OAAL,EAAWA,EAAE,KAAK28B,CAAC,EAAE,CAAC0G,EAAE35B,EAAE05B,CAAC,EAAEC,EAAE35B,EAAE05B,EAAE,CAAC,EAAEC,EAAE35B,EAAE05B,EAAE,CAAC,CAAC,EAAKpjC,EAAE,OAAL,IAAaA,EAAE,KAAK28B,CAAC,EAAEjzB,EAAE05B,CAAC,WAAmBzG,GAAR,OAAU,MAAMyG,GAAGl8C,EAAEg3B,EAAE,SAASxU,EAAE05B,CAAC,EAAEA,GAAG,CAAC,CAAC,IAAIW,EAAE,OAAUJ,GAAH,KAAQI,EAAE/jC,EAAE,OAAOA,EAAE,OAAO,OAAO,CAAC,GAAG,KAAKglC,EAAYhlC,EAAEyjC,EAAE,MAAM,EAAEE,CAAC,EAAEI,EAAE,KAAK,MAAMA,EAAE,KAAK,MAAM,GAAG/jC,EAAE,KAAKglC,EAAYhlC,EAAEujC,EAAEvjC,EAAE,MAAMA,EAAE,MAAM,EAAE,OAAOA,EAAE,SAAS,OAAOA,EAAE,UAAU,OAAOA,EAAE,OAAOA,CAAC,EAAE,QAAQ,SAAiB9Y,EAAE,CAAC,MAAM4C,EAAE5C,EAAE,MAAMy1C,EAAEz1C,EAAE,OAAO,GAASA,EAAE,KAAK,MAAb,KAAkB,MAAM,CAAC49C,EAAY59C,EAAE,KAAK4C,EAAE6yC,EAAEz1C,CAAC,EAAE,MAAM,EAAE,MAAMwiB,EAAE,CAAA,EAASxiB,EAAE,OAAO,CAAC,EAAE,MAAlB,OAAyBA,EAAE,OAAO,CAAC,EAAE,KAAKA,EAAE,MAAM,MAAMk8C,EAAEt5C,EAAE6yC,EAAE,EAAEze,EAAE,IAAI,WAAWklB,CAAC,EAAEC,EAAE,IAAI,WAAWD,CAAC,EAAEE,EAAE,IAAI,WAAWF,CAAC,EAAE,QAAQG,EAAE,EAAEA,EAAEr8C,EAAE,OAAO,OAAOq8C,IAAI,CAAC,MAAME,EAAEv8C,EAAE,OAAOq8C,CAAC,EAAEG,EAAED,EAAE,KAAK,EAAEE,EAAEF,EAAE,KAAK,EAAE71C,EAAE61C,EAAE,KAAK,MAAMG,EAAEH,EAAE,KAAK,OAAOjjB,EAAEskB,EAAYrB,EAAE,KAAK71C,EAAEg2C,EAAE18C,CAAC,EAAE,GAAMq8C,GAAH,EAAK,QAAQvjC,EAAE,EAAEA,EAAEojC,EAAEpjC,IAAIsjC,EAAEtjC,CAAC,EAAEke,EAAEle,CAAC,EAAE,GAAMyjC,EAAE,OAAL,EAAW4B,EAAU7kB,EAAE5yB,EAAEg2C,EAAE1lB,EAAEp0B,EAAE6yC,EAAE+G,EAAEC,EAAE,CAAC,EAAKF,EAAE,OAAL,GAAY4B,EAAU7kB,EAAE5yB,EAAEg2C,EAAE1lB,EAAEp0B,EAAE6yC,EAAE+G,EAAEC,EAAE,CAAC,EAAEj6B,EAAE,KAAKwU,EAAE,OAAO,MAAM,CAAC,CAAC,EAAKulB,EAAE,SAAL,GAAmB,GAAMA,EAAE,SAAL,EAAa4B,EAAUhC,EAAEz1C,EAAEg2C,EAAE1lB,EAAEp0B,EAAE6yC,EAAE+G,EAAEC,EAAE,CAAC,UAAaF,EAAE,SAAL,EAAa,IAAIzjC,EAAE,EAAEA,EAAEojC,EAAEpjC,IAAIke,EAAEle,CAAC,EAAEsjC,EAAEtjC,CAAC,EAAC,CAAC,OAAO0J,CAAC,EAAE,OAAOy7B,EAAO,UAAUE,EAAU,KAAK,CAAC,CAAC,GAAC,GAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAER,GAAK,CAAC,KAAK,CAAC,EAAEA,GAAK,EAAEA,GAAK,OAAO,IAAIn7B,EAAE,CAAC,OAAM,UAAU,CAAC,MAAMxiB,EAAE,IAAI,YAAY,GAAG,EAAE,QAAQ4C,EAAE,EAAEA,EAAE,IAAIA,IAAI,CAAC,IAAI6yC,EAAE7yC,EAAE,QAAQ5C,EAAE,EAAEA,EAAE,EAAEA,IAAI,EAAEy1C,EAAEA,EAAE,WAAWA,IAAI,EAAEA,KAAK,EAAEz1C,EAAE4C,CAAC,EAAE6yC,CAAC,CAAC,OAAOz1C,CAAC,GAAC,EAAG,OAAOA,EAAE4C,EAAE6yC,EAAEyG,EAAE,CAAC,QAAQllB,EAAE,EAAEA,EAAEklB,EAAEllB,IAAIh3B,EAAEwiB,EAAE,MAAM,KAAKxiB,EAAE4C,EAAE6yC,EAAEze,CAAC,EAAE,EAAEh3B,IAAI,EAAE,OAAOA,CAAC,EAAE,IAAI,CAACA,EAAE4C,EAAE6yC,IAAI,WAAWjzB,EAAE,OAAO,WAAWxiB,EAAE4C,EAAE6yC,CAAC,CAAC,EAAE,SAAS2I,EAAOp+C,EAAE4C,EAAE6yC,EAAEjzB,EAAE,CAAC5f,EAAE6yC,CAAC,GAAGz1C,EAAE,CAAC,EAAEwiB,GAAG,EAAE5f,EAAE6yC,EAAE,CAAC,GAAGz1C,EAAE,CAAC,EAAEwiB,GAAG,EAAE5f,EAAE6yC,EAAE,CAAC,GAAGz1C,EAAE,CAAC,EAAEwiB,GAAG,EAAE5f,EAAE6yC,EAAE,CAAC,GAAGz1C,EAAE,CAAC,EAAEwiB,GAAG,CAAC,CAAC,SAAS67B,EAAEr+C,EAAE,CAAC,OAAO,KAAK,IAAI,EAAE,KAAK,IAAI,IAAIA,CAAC,CAAC,CAAC,CAAC,SAASs+C,EAAEt+C,EAAE4C,EAAE,CAAC,MAAM6yC,EAAEz1C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE4f,EAAExiB,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAEs5C,EAAEl8C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAEo0B,EAAEh3B,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE,OAAO6yC,EAAEA,EAAEjzB,EAAEA,EAAE05B,EAAEA,EAAEllB,EAAEA,CAAC,CAAC,SAASunB,EAAOv+C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAEmlB,EAAE,CAAOA,GAAN,OAAUA,EAAE,GAAG,MAAMC,EAAE55B,EAAE,OAAO1J,EAAE,CAAA,EAAG,QAAQujC,EAAE,EAAEA,EAAED,EAAEC,IAAI,CAAC,MAAMr8C,EAAEwiB,EAAE65B,CAAC,EAAEvjC,EAAE,KAAK,CAAC9Y,IAAI,EAAE,IAAIA,IAAI,EAAE,IAAIA,IAAI,GAAG,IAAIA,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAIq8C,EAAE,EAAEA,EAAED,EAAEC,IAAI,CAAC,IAAIr8C,EAAE,WAAW,QAAQu8C,EAAE,EAAEC,EAAE,EAAEA,EAAEJ,EAAEI,IAAI,CAAC,IAAIC,EAAE6B,EAAExlC,EAAEujC,CAAC,EAAEvjC,EAAE0jC,CAAC,CAAC,EAAEA,GAAGH,GAAGI,EAAEz8C,IAAIA,EAAEy8C,EAAEF,EAAEC,EAAE,CAAC,CAAC,MAAM91C,EAAE,IAAI,YAAYw1C,EAAE,MAAM,EAAEQ,EAAE,IAAI,WAAW95C,EAAE6yC,EAAE,CAAC,EAAEnc,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI+iB,EAAE,EAAEA,EAAE/iB,EAAE,OAAO+iB,IAAI/iB,EAAE+iB,CAAC,EAAE,MAAM/iB,EAAE+iB,CAAC,EAAE,IAAI,GAAG,IAAI,QAAQH,EAAE,EAAEA,EAAEzG,EAAEyG,IAAI,QAAQU,EAAE,EAAEA,EAAEh6C,EAAEg6C,IAAI,CAAC,IAAID,EAAEN,EAAE,GAAGH,EAAEt5C,EAAEg6C,GAAST,GAAH,EAAKQ,EAAE,CAAC0B,EAAEr+C,EAAEq8C,CAAC,EAAEK,EAAEL,CAAC,CAAC,EAAEgC,EAAEr+C,EAAEq8C,EAAE,CAAC,EAAEK,EAAEL,EAAE,CAAC,CAAC,EAAEgC,EAAEr+C,EAAEq8C,EAAE,CAAC,EAAEK,EAAEL,EAAE,CAAC,CAAC,EAAEgC,EAAEr+C,EAAEq8C,EAAE,CAAC,EAAEK,EAAEL,EAAE,CAAC,CAAC,CAAC,GAAOI,EAAEnjB,EAAE,GAAG,EAAE4iB,IAAI,EAAEU,EAAE,EAAED,EAAE,CAAC0B,EAAEr+C,EAAEq8C,CAAC,EAAEI,CAAC,EAAE4B,EAAEr+C,EAAEq8C,EAAE,CAAC,EAAEI,CAAC,EAAE4B,EAAEr+C,EAAEq8C,EAAE,CAAC,EAAEI,CAAC,EAAE4B,EAAEr+C,EAAEq8C,EAAE,CAAC,EAAEI,CAAC,CAAC,GAAEF,EAAE,EAAE,IAAIt3C,GAAE,SAAS,IAAIu3C,EAAE,EAAEA,EAAEJ,EAAEI,IAAI,CAAC,MAAMx8C,EAAEs+C,EAAE3B,EAAE7jC,EAAE0jC,CAAC,CAAC,EAAEx8C,EAAEiF,KAAIA,GAAEjF,EAAEu8C,EAAEC,EAAE,CAAC,MAAMvlB,GAAEne,EAAEyjC,CAAC,EAAEhqB,GAAE,CAACoqB,EAAE,CAAC,EAAE1lB,GAAE,CAAC,EAAE0lB,EAAE,CAAC,EAAE1lB,GAAE,CAAC,EAAE0lB,EAAE,CAAC,EAAE1lB,GAAE,CAAC,EAAE0lB,EAAE,CAAC,EAAE1lB,GAAE,CAAC,CAAC,EAAKklB,GAAH,IAAOS,GAAGh6C,EAAE,GAAGw7C,EAAO7rB,GAAEmqB,EAAEL,EAAE,EAAE,CAAC,EAAEH,GAAGzG,EAAE,IAAOmH,GAAH,GAAMwB,EAAO7rB,GAAEmqB,EAAEL,EAAE,EAAEz5C,EAAE,EAAE,CAAC,EAAEw7C,EAAO7rB,GAAEmqB,EAAEL,EAAE,EAAEz5C,EAAE,CAAC,EAAEg6C,GAAGh6C,EAAE,GAAGw7C,EAAO7rB,GAAEmqB,EAAEL,EAAE,EAAEz5C,EAAE,EAAE,CAAC,IAAIo0B,EAAEqlB,GAAG,CAAC,EAAEE,EAAE71C,EAAE21C,GAAG,CAAC,EAAE75B,EAAE+5B,CAAC,CAAC,CAAC,CAAC,SAASiC,EAAMx+C,EAAEy1C,EAAEyG,EAAEllB,EAAEmlB,EAAE,CAAOA,GAAN,OAAUA,EAAE,CAAA,GAAI,KAAK,CAAC,IAAIC,CAAC,EAAE55B,EAAE1J,EAAE,EAAE,UAAUujC,EAAE,EAAE,YAAYE,EAAE,EAAE,WAAW,IAAIC,EAAE,EAAE,MAAMC,EAAEz8C,EAAE,OAAO,OAAO,EAAE,IAAI0G,EAAEg2C,EAAE,GAAGpjB,EAAE,IAAImjB,EAAE,GAAG,GAAG,GAASN,EAAE,MAAR,OAAe7iB,GAAG,IAAU6iB,EAAE,MAAR,OAAe7iB,GAAG,IAAU6iB,EAAE,MAAR,OAAez1C,EAAE,KAAK,QAAQy1C,EAAE,IAAI,EAAE7iB,GAAG,GAAG5yB,EAAE,OAAO,GAAM1G,EAAE,OAAL,EAAW,CAAC,QAAQ28C,EAAE38C,EAAE,KAAK,OAAO48C,EAAE,EAAEA,EAAED,EAAEC,IAAI58C,EAAE,KAAK48C,CAAC,IAAI,IAAI,MAAMF,EAAE,IAAIpjB,GAAG,EAAE,EAAEqjB,EAAE,GAAGD,EAAE,EAAE,EAAEC,EAAE,EAAE,EAAE,CAAC,QAAQ13C,EAAE,EAAEA,EAAEjF,EAAE,OAAO,OAAOiF,IAAKw3C,IAAInjB,GAAG,IAAIA,IAAIwjB,GAAE98C,EAAE,OAAOiF,CAAC,GAAG,KAAK,OAAO,GAAMA,GAAH,IAAOq0B,GAAG,GAAGA,GAAG,GAAG,MAAMrC,EAAE,IAAI,WAAWqC,CAAC,EAAE/G,EAAE,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,IAAIqqB,EAAE,EAAEA,EAAE,EAAEA,IAAI3lB,EAAE2lB,CAAC,EAAErqB,EAAEqqB,CAAC,EAAE,GAAG9jC,EAAEme,EAAEulB,EAAE,EAAE,EAAEA,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,MAAM,EAAEA,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAE/G,CAAC,EAAE+G,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEN,CAAC,EAAEM,GAAG,EAAEvlB,EAAEulB,CAAC,EAAEx8C,EAAE,MAAMw8C,IAAIvlB,EAAEulB,CAAC,EAAEx8C,EAAE,MAAMw8C,IAAIvlB,EAAEulB,CAAC,EAAE,EAAEA,IAAIvlB,EAAEulB,CAAC,EAAE,EAAEA,IAAIvlB,EAAEulB,CAAC,EAAE,EAAEA,IAAI1jC,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEulB,EAAE,GAAG,EAAE,CAAC,EAAEA,GAAG,EAAQL,EAAE,MAAR,OAAerjC,EAAEme,EAAEulB,EAAE,CAAC,EAAEA,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,MAAM,EAAEA,GAAG,EAAEvlB,EAAEulB,CAAC,EAAEL,EAAE,KAAKK,IAAI1jC,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEulB,EAAE,EAAE,CAAC,CAAC,EAAEA,GAAG,GAASL,EAAE,MAAR,KAAa,CAAC,MAAMn8C,GAAE,GAAG0G,EAAE,OAAOoS,EAAEme,EAAEulB,EAAEx8C,EAAC,EAAEw8C,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,MAAM,EAAEA,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,aAAa,EAAEA,GAAG,GAAGA,GAAG,EAAEvlB,EAAE,IAAIvwB,EAAE81C,CAAC,EAAEA,GAAG91C,EAAE,OAAOoS,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEulB,GAAGx8C,GAAE,GAAGA,GAAE,CAAC,CAAC,EAAEw8C,GAAG,CAAC,CAAC,GAASL,EAAE,MAAR,OAAerjC,EAAEme,EAAEulB,EAAE,CAAC,EAAEA,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,MAAM,EAAEA,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEL,EAAE,KAAK,CAAC,CAAC,EAAEK,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEL,EAAE,KAAK,CAAC,CAAC,EAAEK,GAAG,EAAEvlB,EAAEulB,CAAC,EAAEL,EAAE,KAAK,CAAC,EAAEK,IAAI1jC,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEulB,EAAE,GAAG,EAAE,CAAC,EAAEA,GAAG,GAAGC,IAAI3jC,EAAEme,EAAEulB,EAAE,CAAC,EAAEA,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,MAAM,EAAEA,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEx8C,EAAE,OAAO,MAAM,EAAEw8C,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAQL,EAAE,MAAR,KAAaA,EAAE,KAAK,CAAC,EAAEK,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEulB,EAAE,GAAG,EAAE,CAAC,EAAEA,GAAG,GAAMx8C,EAAE,OAAL,EAAW,CAAoD,IAAnD8Y,EAAEme,EAAEulB,EAAE,GAAGG,EAAE38C,EAAE,KAAK,OAAO,EAAEw8C,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,MAAM,EAAEA,GAAG,EAAMI,EAAE,EAAEA,EAAED,EAAEC,IAAI,CAAC,MAAMh6C,GAAE,EAAEg6C,EAAEnH,EAAEz1C,EAAE,KAAK48C,CAAC,EAAEp6B,GAAE,IAAIizB,EAAEyG,GAAEzG,IAAI,EAAE,IAAIze,GAAEye,IAAI,GAAG,IAAIxe,EAAEulB,EAAE55C,GAAE,CAAC,EAAE4f,GAAEyU,EAAEulB,EAAE55C,GAAE,CAAC,EAAEs5C,GAAEjlB,EAAEulB,EAAE55C,GAAE,CAAC,EAAEo0B,EAAC,CAAC,GAAGwlB,GAAG,EAAEG,EAAE7jC,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEulB,EAAE,EAAEG,EAAE,EAAE,EAAEA,EAAE,CAAC,CAAC,EAAEH,GAAG,EAAEE,EAAE,CAAkC,IAAjC5jC,EAAEme,EAAEulB,EAAEG,CAAC,EAAEH,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,MAAM,EAAEA,GAAG,EAAMI,EAAE,EAAEA,EAAED,EAAEC,IAAI3lB,EAAEulB,EAAEI,CAAC,EAAE58C,EAAE,KAAK48C,CAAC,IAAI,GAAG,IAAIJ,GAAGG,EAAE7jC,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEulB,EAAEG,EAAE,EAAEA,EAAE,CAAC,CAAC,EAAEH,GAAG,CAAC,CAAC,CAAC,IAAIK,GAAE,EAAE,IAAI53C,EAAE,EAAEA,EAAEjF,EAAE,OAAO,OAAOiF,IAAI,CAAC,IAAI63C,GAAE98C,EAAE,OAAOiF,CAAC,EAAEw3C,IAAI3jC,EAAEme,EAAEulB,EAAE,EAAE,EAAEA,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,MAAM,EAAEA,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEK,IAAG,EAAEL,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEM,GAAE,KAAK,KAAK,EAAEN,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEM,GAAE,KAAK,MAAM,EAAEN,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEM,GAAE,KAAK,CAAC,EAAEN,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEM,GAAE,KAAK,CAAC,EAAEN,GAAG,EAAEH,EAAEplB,EAAEulB,EAAExlB,EAAE/xB,CAAC,CAAC,EAAEu3C,GAAG,EAAEH,EAAEplB,EAAEulB,EAAE,GAAG,EAAEA,GAAG,EAAEvlB,EAAEulB,CAAC,EAAEM,GAAE,QAAQN,IAAIvlB,EAAEulB,CAAC,EAAEM,GAAE,MAAMN,IAAI1jC,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEulB,EAAE,GAAG,EAAE,CAAC,EAAEA,GAAG,GAAG,MAAM55C,GAAEk6C,GAAE,KAAKhkC,EAAEme,EAAEulB,GAAGG,EAAE/5C,GAAE,SAAYqC,GAAH,EAAK,EAAE,EAAE,EAAEu3C,GAAG,EAAE,MAAM/G,EAAE+G,EAAED,EAAEtlB,EAAEulB,EAAKv3C,GAAH,EAAK,OAAO,MAAM,EAAEu3C,GAAG,EAAKv3C,GAAH,IAAO6T,EAAEme,EAAEulB,EAAEK,IAAG,EAAEL,GAAG,GAAGvlB,EAAE,IAAIr0B,GAAE45C,CAAC,EAAEA,GAAGG,EAAE7jC,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEwe,EAAE+G,EAAE/G,CAAC,CAAC,EAAE+G,GAAG,CAAC,CAAC,OAAO1jC,EAAEme,EAAEulB,EAAE,CAAC,EAAEA,GAAG,EAAED,EAAEtlB,EAAEulB,EAAE,MAAM,EAAEA,GAAG,EAAE1jC,EAAEme,EAAEulB,EAAEJ,EAAEnlB,EAAEulB,EAAE,EAAE,CAAC,CAAC,EAAEA,GAAG,EAAEvlB,EAAE,MAAM,CAAC,SAASwnB,EAAYz+C,EAAE4C,EAAE6yC,EAAE,CAAC,QAAQjzB,EAAE,EAAEA,EAAExiB,EAAE,OAAO,OAAOwiB,IAAI,CAAC,MAAM05B,EAAEl8C,EAAE,OAAOwiB,CAAC,EAAE05B,EAAE,KAAK,MAAM,MAAMllB,EAAEklB,EAAE,KAAK,OAAOC,EAAE,IAAI,WAAWnlB,EAAEklB,EAAE,IAAIllB,CAAC,EAAEklB,EAAE,KAAK8B,EAAY9B,EAAE,IAAIllB,EAAEklB,EAAE,IAAIA,EAAE,IAAIC,EAAEv5C,EAAE6yC,CAAC,CAAC,CAAC,CAAC,SAASiJ,EAAS97C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAE,CAAC,MAAMmlB,EAAEnlB,EAAE,CAAC,EAAEolB,EAAEplB,EAAE,CAAC,EAAEle,EAAEke,EAAE,CAAC,EAAEqlB,EAAErlB,EAAE,CAAC,EAAEulB,EAAEvlB,EAAE,CAAC,EAAEwlB,EAAExlB,EAAE,CAAC,EAAE,IAAIylB,EAAE,EAAE/1C,EAAE,EAAEg2C,EAAE,IAAI,QAAQpjB,EAAE,EAAEA,EAAE12B,EAAE,OAAO02B,IAAI,CAAC,MAAMt5B,GAAE,IAAI,WAAW4C,EAAE02B,CAAC,CAAC,EAAE,QAAQqjB,EAAE38C,GAAE,OAAO48C,EAAE,EAAEA,EAAED,EAAEC,GAAG,EAAEF,GAAG18C,GAAE48C,EAAE,CAAC,CAAC,CAAC,MAAM33C,EAAOy3C,GAAL,IAAOzlB,GAAE,SAAiBr0B,GAAE6yC,GAAEjzB,GAAE05B,GAAEllB,EAAEmlB,GAAE,CAAC,MAAMC,GAAE,CAAA,EAAG,QAAQtjC,GAAE,EAAEA,GAAElW,GAAE,OAAOkW,KAAI,CAAC,MAAM0jC,GAAE,IAAI,WAAW55C,GAAEkW,EAAC,CAAC,EAAEpS,EAAE,IAAI,YAAY81C,GAAE,MAAM,EAAE,IAAIH,GAAE,IAAIK,GAAE,EAAEpjB,GAAE,EAAEqjB,GAAElH,GAAEmH,GAAEp6B,GAAEvd,GAAEi3C,GAAE,EAAE,EAAE,GAAMpjC,IAAH,EAAK,CAAC,MAAMme,GAAEklB,IAAGD,IAAMpjC,IAAH,GAASsjC,GAAEtjC,GAAE,CAAC,EAAE,SAAV,EAAkB,EAAE,EAAE,IAAIyZ,GAAE,EAAEsqB,GAAE,IAAI,QAAQ78C,GAAE,EAAEA,GAAEi3B,GAAEj3B,KAAI,CAAC,IAAIu8C,GAAE,IAAI,WAAW35C,GAAEkW,GAAE,EAAE9Y,EAAC,CAAC,EAAE,MAAMk8C,GAAE,IAAI,YAAYt5C,GAAEkW,GAAE,EAAE9Y,EAAC,CAAC,EAAE,IAAIm8C,GAAE1G,GAAE2G,GAAE55B,GAAE65B,GAAE,GAAGG,GAAE,GAAG,QAAQx8C,GAAE,EAAEA,GAAEwiB,GAAExiB,KAAI,QAAQ4C,GAAE,EAAEA,GAAE6yC,GAAE7yC,KAAK8D,EAAE+1C,GAAEz8C,GAAEy1C,GAAE7yC,EAAC,GAAGs5C,GAAEO,EAAC,IAAI75C,GAAEu5C,KAAIA,GAAEv5C,IAAGA,GAAEy5C,KAAIA,GAAEz5C,IAAG5C,GAAEo8C,KAAIA,GAAEp8C,IAAGA,GAAEw8C,KAAIA,GAAEx8C,KAAQq8C,IAAJ,KAAQF,GAAEC,GAAEC,GAAEG,GAAE,GAAGxlB,KAAQ,EAAEmlB,KAAN,GAAUA,MAAQ,EAAEC,KAAN,GAAUA,MAAK,MAAMn3C,IAAGo3C,GAAEF,GAAE,IAAIK,GAAEJ,GAAE,GAAGn3C,GAAE43C,KAAIA,GAAE53C,GAAEstB,GAAEvyB,GAAE08C,GAAEP,GAAE7iB,GAAE8iB,GAAEO,GAAEN,GAAEF,GAAE,EAAES,GAAEJ,GAAEJ,GAAE,EAAE,CAACG,GAAE,IAAI,WAAW35C,GAAEkW,GAAE,EAAEyZ,EAAC,CAAC,EAAKA,IAAH,IAAO6pB,GAAEtjC,GAAE,CAAC,EAAE,QAAQ,GAAGujC,GAAE,IAAI,WAAWM,GAAEC,GAAE,CAAC,EAAE,EAAEL,GAAE9G,GAAEjzB,GAAE65B,GAAEM,GAAEC,GAAE,CAACF,GAAE,CAACpjB,GAAE,CAAC,EAAEr0B,GAAE,EAAEu3C,GAAE/G,GAAEjzB,GAAE65B,GAAEM,GAAEC,GAAE,CAACF,GAAE,CAACpjB,GAAE,CAAC,EAAE,EAAE,EAAKr0B,IAAH,EAAK05C,EAAanC,GAAE/G,GAAEjzB,GAAE65B,GAAE,CAAC,EAAEK,GAAE,EAAEpjB,GAAE,MAAMqjB,GAAE,OAAOC,EAAC,CAAC,EAAE,EAAEJ,GAAE/G,GAAEjzB,GAAE65B,GAAEM,GAAEC,GAAE,CAACF,GAAE,CAACpjB,GAAE,CAAC,CAAC,MAAM+iB,GAAEG,GAAE,MAAM,CAAC,EAAEJ,GAAE,KAAK,CAAC,KAAK,CAAC,EAAEM,GAAE,EAAEpjB,GAAE,MAAMqjB,GAAE,OAAOC,EAAC,EAAE,IAAIP,GAAE,MAAMp3C,GAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAGi3C,GAAE,IAAIpjC,GAAE,EAAEA,GAAEsjC,GAAE,OAAOtjC,KAAI,CAAC,IAAOpS,GAAE01C,GAAEtjC,EAAC,GAAG,OAAZ,EAAkB,SAAS,MAAM9Y,GAAE0G,GAAE,KAAKw1C,EAAEE,GAAEtjC,GAAE,CAAC,EAAE,KAAKqjC,GAAE,KAAK,IAAIn8C,GAAE,EAAEk8C,EAAE,CAAC,EAAEG,GAAE,KAAK,IAAIr8C,GAAE,EAAEk8C,EAAE,CAAC,EAAEK,GAAE,CAAC,EAAEJ,GAAE,EAAEE,GAAE,MAAM,KAAK,IAAIr8C,GAAE,EAAEA,GAAE,MAAMk8C,EAAE,EAAEA,EAAE,KAAK,EAAEC,GAAE,OAAO,KAAK,IAAIn8C,GAAE,EAAEA,GAAE,OAAOk8C,EAAE,EAAEA,EAAE,MAAM,EAAEG,EAAC,EAAED,GAAEtjC,GAAE,CAAC,EAAE,QAAQ,EAAEA,GAAE,GAAG,GAAG8lC,EAAah8C,GAAE6yC,GAAEjzB,GAAE45B,GAAEtjC,GAAE,EAAEyjC,GAAEvlB,CAAC,EAAE4nB,EAAah8C,GAAE6yC,GAAEjzB,GAAE45B,GAAEtjC,GAAEyjC,GAAEvlB,CAAC,CAAC,CAAC,IAAIwlB,GAAE,EAAE,GAAM55C,GAAE,QAAL,EAAY,QAAQ65C,GAAE,EAAEA,GAAEL,GAAE,OAAOK,KAAI,CAAC,IAAI/1C,GAAE81C,KAAI91C,GAAE01C,GAAEK,EAAC,GAAG,KAAK,MAAM/1C,GAAE,KAAK,MAAM,CAAC,OAAO01C,EAAC,GAAEx5C,EAAE6yC,EAAEjzB,EAAE25B,EAAEC,EAAEtjC,CAAC,EAAEyZ,GAAE,CAAA,EAAGsqB,GAAE,CAAA,EAAGC,GAAE,CAAA,EAAG,GAAMZ,GAAH,EAAK,CAAC,MAAMl8C,GAAE,CAAA,EAAG,IAAI48C,EAAE,EAAEA,EAAE3lB,EAAE,OAAO2lB,IAAI58C,GAAE,KAAKi3B,EAAE2lB,CAAC,EAAE,IAAI,MAAM,EAAE,MAAMh6C,IAAE,SAAoB5C,EAAE,CAAC,IAAI4C,GAAE,EAAE,QAAQ6yC,GAAE,EAAEA,GAAEz1C,EAAE,OAAOy1C,KAAI7yC,IAAG5C,EAAEy1C,EAAC,EAAE,WAAW,MAAMjzB,GAAE,IAAI,WAAW5f,EAAC,EAAE,IAAIs5C,GAAE,EAAE,IAAIzG,GAAE,EAAEA,GAAEz1C,EAAE,OAAOy1C,KAAI,CAAC,MAAM7yC,GAAE,IAAI,WAAW5C,EAAEy1C,EAAC,CAAC,EAAEze,GAAEp0B,GAAE,OAAO,QAAQ5C,GAAE,EAAEA,GAAEg3B,GAAEh3B,IAAG,EAAE,CAAC,IAAIy1C,GAAE7yC,GAAE5C,EAAC,EAAEg3B,GAAEp0B,GAAE5C,GAAE,CAAC,EAAEm8C,EAAEv5C,GAAE5C,GAAE,CAAC,EAAE,MAAMo8C,GAAEx5C,GAAE5C,GAAE,CAAC,EAAKo8C,IAAH,IAAO3G,GAAEze,GAAEmlB,EAAE,GAAG35B,GAAE05B,GAAEl8C,EAAC,EAAEy1C,GAAEjzB,GAAE05B,GAAEl8C,GAAE,CAAC,EAAEg3B,GAAExU,GAAE05B,GAAEl8C,GAAE,CAAC,EAAEm8C,EAAE35B,GAAE05B,GAAEl8C,GAAE,CAAC,EAAEo8C,EAAC,CAACF,IAAGllB,EAAC,CAAC,OAAOxU,GAAE,MAAM,GAAExiB,EAAC,EAAEy1C,GAAEoJ,EAASj8C,GAAEs5C,CAAC,EAAE,IAAIU,EAAE,EAAEA,EAAEnH,GAAE,KAAK,OAAOmH,IAAIC,GAAE,KAAKpH,GAAE,KAAKmH,CAAC,EAAE,IAAI,IAAI,EAAE,IAAIp6B,GAAE,EAAE,IAAIo6B,EAAE,EAAEA,EAAE3lB,EAAE,OAAO2lB,IAAI,CAAC,MAAM58C,IAAG+8C,GAAE9lB,EAAE2lB,CAAC,GAAG,IAAI,OAAO,IAAI7qB,EAAE,IAAI,WAAW0jB,GAAE,KAAK,OAAOjzB,IAAG,EAAExiB,IAAG,CAAC,EAAE88C,GAAE,KAAK/qB,CAAC,EAAE,MAAMnvB,EAAE,IAAI,WAAW6yC,GAAE,KAAKjzB,GAAExiB,EAAC,EAAEw8C,GAAG+B,EAAOxB,GAAE,IAAIA,GAAE,KAAK,MAAMA,GAAE,KAAK,OAAOF,GAAEj6C,EAAEmvB,CAAC,EAAEgrB,GAAE,IAAI,IAAIn6C,CAAC,EAAE4f,IAAGxiB,EAAC,CAAC,KAAM,KAAIs5B,EAAE,EAAEA,EAAErC,EAAE,OAAOqC,IAAI,CAAC,IAAIyjB,GAAE9lB,EAAEqC,CAAC,EAAE,MAAMt5B,GAAE,IAAI,YAAY+8C,GAAE,IAAI,MAAM,EAAE,IAAIC,GAAED,GAAE,KAAK,MAA+C,IAAzCJ,EAAE38C,GAAE,OAAO+xB,EAAE,IAAI,WAAW4qB,CAAC,EAAEG,GAAE,KAAK/qB,CAAC,EAAM6qB,EAAE,EAAEA,EAAED,EAAEC,IAAI,CAAC,MAAMh6C,GAAE5C,GAAE48C,CAAC,EAAE,GAAMA,GAAH,GAAMh6C,IAAG5C,GAAE48C,EAAE,CAAC,EAAE7qB,EAAE6qB,CAAC,EAAE7qB,EAAE6qB,EAAE,CAAC,UAAUA,EAAEI,IAAGp6C,IAAG5C,GAAE48C,EAAEI,EAAC,EAAEjrB,EAAE6qB,CAAC,EAAE7qB,EAAE6qB,EAAEI,EAAC,MAAM,CAAC,IAAIh9C,GAAEuyB,GAAE3vB,EAAC,EAAE,GAAS5C,IAAN,OAAUuyB,GAAE3vB,EAAC,EAAE5C,GAAE68C,GAAE,OAAOA,GAAE,KAAKj6C,EAAC,EAAEi6C,GAAE,QAAQ,KAAK,MAAM9qB,EAAE6qB,CAAC,EAAE58C,EAAC,CAAC,CAAC,CAAC,MAAMi9C,GAAEJ,GAAE,OAAiE,IAA1DI,IAAG,KAAQV,GAAH,IAAO71C,EAAEu2C,IAAG,EAAE,EAAEA,IAAG,EAAE,EAAEA,IAAG,GAAG,EAAE,EAAEv2C,EAAE,KAAK,IAAIA,EAAE21C,CAAC,GAAO/iB,EAAE,EAAEA,EAAErC,EAAE,OAAOqC,IAAI,EAAEyjB,GAAE9lB,EAAEqC,CAAC,GAAG,KAAK,EAAEyjB,GAAE,KAAK,EAAEC,GAAED,GAAE,KAAK,MAAM,MAAM/8C,GAAE+8C,GAAE,KAAK,OAAO,IAAIn6C,GAAEm6C,GAAE,IAAI,IAAI,YAAYn6C,GAAE,MAAM,EAAE,IAAI6yC,GAAE,EAAEuH,GAAEx6B,GAAE,EAAE,GAAGy6B,IAAG,KAAQV,GAAH,EAAK,CAAC9G,GAAE,KAAK,KAAK/uC,EAAEs2C,GAAE,CAAC,EAAE,IAAI/K,GAAE,IAAI,WAAWwD,GAAEz1C,EAAC,EAAE,MAAMk8C,GAAEY,GAAExjB,CAAC,EAAE,QAAQ12B,EAAE,EAAEA,EAAE5C,GAAE4C,IAAI,CAACg6C,EAAEh6C,EAAE6yC,GAAE,MAAMz1C,GAAE4C,EAAEo6C,GAAE,GAAMt2C,GAAH,EAAK,QAAQw2C,GAAE,EAAEA,GAAEF,GAAEE,KAAIjL,GAAE2K,EAAEM,EAAC,EAAEhB,GAAEl8C,GAAEk9C,EAAC,UAAax2C,GAAH,EAAK,IAAIw2C,GAAE,EAAEA,GAAEF,GAAEE,KAAIjL,GAAE2K,GAAGM,IAAG,EAAE,GAAGhB,GAAEl8C,GAAEk9C,EAAC,GAAG,EAAE,GAAG,EAAEA,YAAcx2C,GAAH,EAAK,IAAIw2C,GAAE,EAAEA,GAAEF,GAAEE,KAAIjL,GAAE2K,GAAGM,IAAG,EAAE,GAAGhB,GAAEl8C,GAAEk9C,EAAC,GAAG,EAAE,GAAG,EAAEA,YAAcx2C,GAAH,EAAK,IAAIw2C,GAAE,EAAEA,GAAEF,GAAEE,KAAIjL,GAAE2K,GAAGM,IAAG,EAAE,GAAGhB,GAAEl8C,GAAEk9C,EAAC,GAAG,EAAE,GAAG,EAAEA,GAAE,CAACt6C,GAAEqvC,GAAEwK,EAAE,EAAEj6B,GAAE,CAAC,SAAYvd,GAAH,GAASgyB,EAAE,QAAL,EAAY,CAACgb,GAAE,IAAI,WAAW+K,GAAEh9C,GAAE,CAAC,EAAE,MAAMk8C,GAAEc,GAAEh9C,GAAE,IAAI48C,EAAE,EAAEA,EAAEV,GAAEU,IAAI,CAAC,MAAM58C,EAAE,EAAE48C,EAAEnH,GAAE,EAAEmH,EAAE3K,GAAEjyC,CAAC,EAAE4C,GAAE6yC,EAAC,EAAExD,GAAEjyC,EAAE,CAAC,EAAE4C,GAAE6yC,GAAE,CAAC,EAAExD,GAAEjyC,EAAE,CAAC,EAAE4C,GAAE6yC,GAAE,CAAC,CAAC,CAAC7yC,GAAEqvC,GAAEwK,EAAE,EAAEj6B,GAAE,EAAEizB,GAAE,EAAEuH,EAAC,CAACD,GAAE,IAAIn6C,GAAEm6C,GAAE,IAAItH,GAAEsH,GAAE,IAAIv6B,EAAC,CAAC,MAAM,CAAC,MAAMi6B,EAAE,MAAM/1C,EAAE,KAAKm2C,GAAE,OAAO5lB,CAAC,CAAC,CAAC,SAAS2nB,EAAah8C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAEmlB,EAAEC,EAAE,CAAC,MAAMtjC,EAAE,WAAWujC,EAAE,YAAYE,EAAE,IAAIzjC,EAAElW,EAAEo0B,EAAE,CAAC,CAAC,EAAEwlB,EAAE,IAAIH,EAAEz5C,EAAEo0B,EAAE,CAAC,CAAC,EAAEylB,EAAEzlB,EAAE,EAAEp0B,EAAE,OAAO,IAAIkW,EAAElW,EAAEo0B,EAAE,CAAC,CAAC,EAAE,KAAKtwB,EAAE,IAAIoS,EAAElW,EAAEo0B,CAAC,CAAC,EAAE0lB,EAAE,IAAIL,EAAE31C,EAAE,MAAM,EAAE,IAAI4yB,EAAEmc,EAAEkH,EAAEn6B,EAAEo6B,EAAE,GAAG33C,EAAE,GAAG,QAAQjF,GAAE,EAAEA,GAAEm8C,EAAE,OAAOn8C,KAAI,QAAQ4C,GAAE,EAAEA,GAAEu5C,EAAE,MAAMv5C,KAAI,CAAC,MAAM4f,GAAE25B,EAAE,EAAEv5C,GAAEw5C,EAAED,EAAE,EAAEn8C,GAAE8Y,GAAEsjC,EAAE3G,EAAEjzB,GAAE65B,GAAEK,EAAE5jC,EAAC,EAAKujC,IAAH,GAASH,EAAEllB,EAAE,CAAC,EAAE,SAAV,GAAmBwlB,EAAE1jC,EAAC,GAAGujC,KAAUI,GAAN,MAAYA,EAAE,EAAE3jC,GAAE,CAAC,GAAV,KAAe0J,GAAE8W,IAAIA,EAAE9W,IAAGA,GAAEo6B,IAAIA,EAAEp6B,IAAG45B,EAAEO,IAAIA,EAAEP,GAAGA,EAAEn3C,IAAIA,EAAEm3C,GAAG,CAAKQ,GAAJ,KAAQtjB,EAAEqjB,EAAEC,EAAE33C,EAAE,GAAGm3C,KAAQ,EAAE9iB,IAAN,GAAUA,KAAQ,EAAEqjB,IAAN,GAAUA,KAAKR,EAAE,CAAC,EAAE7iB,EAAE,EAAEqjB,EAAE,MAAMC,EAAEtjB,EAAE,EAAE,OAAOr0B,EAAE03C,EAAE,CAAC,EAAE,MAAM1lB,EAAEilB,EAAEllB,CAAC,EAAEC,EAAE,KAAKklB,EAAEllB,EAAE,MAAM,EAAEA,EAAE,IAAI,IAAI,WAAWklB,EAAE,MAAMA,EAAE,OAAO,CAAC,EAAKD,EAAEllB,EAAE,CAAC,EAAE,SAAV,GAAmB,EAAEulB,EAAE9G,EAAEjzB,EAAEyU,EAAE,IAAIklB,EAAE,MAAMA,EAAE,OAAO,CAACA,EAAE,EAAE,CAACA,EAAE,EAAE,CAAC,EAAEwC,EAAaj4C,EAAE+uC,EAAEjzB,EAAEyU,EAAE,IAAIklB,CAAC,GAAG,EAAEz1C,EAAE+uC,EAAEjzB,EAAEyU,EAAE,IAAIklB,EAAE,MAAMA,EAAE,OAAO,CAACA,EAAE,EAAE,CAACA,EAAE,EAAE,CAAC,CAAC,CAAC,SAASwC,EAAa/7C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAE,CAAC,EAAEp0B,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAE,MAAMA,EAAE,OAAO,CAACA,EAAE,EAAE,CAACA,EAAE,EAAE,CAAC,CAAC,CAAC,SAASgnB,EAAYh+C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAEmlB,EAAE,CAAC,MAAMC,EAAE,CAAA,EAAG,IAAItjC,EAAEujC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAMrlB,GAAJ,GAAMqlB,EAAE,CAACrlB,CAAC,GAAGp0B,EAAE4f,EAAE,KAAQizB,GAAH,KAAQ4G,EAAE,CAAC,CAAC,GAAGF,IAAIrjC,EAAE,CAAC,MAAM,CAAC,GAAG,MAAMyjC,EAAED,GAAK,QAAQE,EAAE,EAAEA,EAAEH,EAAE,OAAOG,IAAI,CAAC,QAAQxlB,EAAE,EAAEA,EAAEp0B,EAAEo0B,IAAI8nB,EAAY5C,EAAEl8C,EAAEg3B,EAAExU,EAAEizB,EAAE4G,EAAEG,CAAC,CAAC,EAAEJ,EAAE,KAAKG,EAAE,QAAQL,EAAEpjC,CAAC,CAAC,CAAC,CAAC,IAAI2jC,EAAE/1C,EAAE,IAAI,IAAI81C,EAAE,EAAEA,EAAEJ,EAAE,OAAOI,IAAIJ,EAAEI,CAAC,EAAE,OAAO91C,IAAI+1C,EAAED,EAAE91C,EAAE01C,EAAEI,CAAC,EAAE,QAAQ,OAAOJ,EAAEK,CAAC,CAAC,CAAC,SAASqC,EAAY9+C,EAAE4C,EAAE4f,EAAE05B,EAAEllB,EAAEmlB,EAAE,CAAC,MAAMC,EAAE55B,EAAE05B,EAAE,IAAIpjC,EAAEsjC,EAAE55B,EAAE,GAAGxiB,EAAE8Y,CAAC,EAAEqjC,EAAErjC,IAAOqjC,GAAH,EAAK,GAAGD,EAAE,IAAI,QAAQG,EAAE,EAAEA,EAAEH,EAAEG,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,OAAOr8C,EAAE,IAAI,IAAI,WAAW4C,EAAE,OAAOw5C,EAAEF,CAAC,EAAEpjC,CAAC,UAAaqjC,GAAH,EAAK,CAAC,IAAIE,EAAE,EAAEA,EAAErlB,EAAEqlB,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAE,IAAIA,EAAErlB,EAAEqlB,EAAEH,EAAEG,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAEz5C,EAAEw5C,EAAEC,EAAErlB,CAAC,EAAE,IAAI,GAAG,SAAYxU,GAAH,EAAK,CAAC,IAAI65B,EAAE,EAAEA,EAAErlB,EAAEqlB,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAE,GAAMF,GAAH,EAAK,IAAIE,EAAErlB,EAAEqlB,EAAEH,EAAEG,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAE,GAAMF,GAAH,EAAK,IAAIE,EAAErlB,EAAEqlB,EAAEH,EAAEG,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,GAAGz5C,EAAEw5C,EAAEC,EAAErlB,CAAC,GAAG,GAAG,IAAI,IAAI,GAAMmlB,GAAH,EAAK,IAAIE,EAAErlB,EAAEqlB,EAAEH,EAAEG,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAE,EAAEz5C,EAAEw5C,EAAEC,EAAErlB,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,GAAMmlB,GAAH,EAAK,IAAIE,EAAE,EAAEA,EAAEH,EAAEG,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAE,IAAIz5C,EAAEw5C,EAAEC,EAAEH,CAAC,EAAE,IAAI,GAAMC,GAAH,EAAK,CAAC,IAAIE,EAAE,EAAEA,EAAErlB,EAAEqlB,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAE,KAAKz5C,EAAEw5C,EAAEC,EAAEH,CAAC,GAAG,GAAG,IAAI,IAAIG,EAAErlB,EAAEqlB,EAAEH,EAAEG,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAE,KAAKz5C,EAAEw5C,EAAEC,EAAEH,CAAC,EAAEt5C,EAAEw5C,EAAEC,EAAErlB,CAAC,GAAG,GAAG,GAAG,CAAC,GAAMmlB,GAAH,EAAK,CAAC,IAAIE,EAAE,EAAEA,EAAErlB,EAAEqlB,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAE,IAAI,EAAE,EAAEz5C,EAAEw5C,EAAEC,EAAEH,CAAC,EAAE,CAAC,EAAE,IAAI,IAAIG,EAAErlB,EAAEqlB,EAAEH,EAAEG,IAAIr8C,EAAE8Y,EAAEujC,CAAC,EAAEz5C,EAAEw5C,EAAEC,CAAC,EAAE,IAAI,EAAEz5C,EAAEw5C,EAAEC,EAAErlB,CAAC,EAAEp0B,EAAEw5C,EAAEC,EAAEH,CAAC,EAAEt5C,EAAEw5C,EAAEC,EAAErlB,EAAEklB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS2C,EAAS7+C,EAAE4C,EAAE,CAAC,MAAM6yC,EAAE,IAAI,WAAWz1C,CAAC,EAAEwiB,EAAEizB,EAAE,MAAM,CAAC,EAAEyG,EAAE,IAAI,YAAY15B,EAAE,MAAM,EAAEwU,EAAE+nB,EAAUv8B,EAAE5f,CAAC,EAAEu5C,EAAEnlB,EAAE,CAAC,EAAEolB,EAAEplB,EAAE,CAAC,EAAEle,EAAE28B,EAAE,OAAO4G,EAAE,IAAI,WAAWvjC,GAAG,CAAC,EAAE,IAAIyjC,EAAE,GAAG9G,EAAE,OAAO,IAAI,QAAQ+G,EAAE,EAAEA,EAAE1jC,EAAE0jC,GAAG,EAAGD,EAAEyC,EAAW7C,EAAEM,EAAEhH,EAAE+G,CAAC,EAAG,mBAAO91C,EAAE+uC,EAAE+G,EAAE,CAAC,EAAG,mBAAOE,EAAEjH,EAAE+G,EAAE,CAAC,EAAG,mBAAOljB,EAAEmc,EAAE+G,EAAE,CAAC,EAAG,kBAAM,EAAEH,EAAEG,GAAG,CAAC,EAAED,EAAE,IAAIL,EAAEM,GAAG,CAAC,EAAED,EAAE,IAAI,SAAU,KAAIC,EAAE,EAAEA,EAAE1jC,EAAE0jC,GAAG,EAAE,CAAC,IAAIC,EAAEhH,EAAE+G,CAAC,EAAG,mBAAO91C,EAAE+uC,EAAE+G,EAAE,CAAC,GAAG,EAAE,KAAKE,EAAEjH,EAAE+G,EAAE,CAAC,GAAG,EAAE,KAAKljB,EAAEmc,EAAE+G,EAAE,CAAC,GAAG,EAAE,KAAK,IAAID,EAAEJ,EAAEI,EAAE,MAAMA,EAAE0C,EAAS1C,EAAE,IAAIE,EAAE/1C,EAAEg2C,EAAEpjB,CAAC,GAAG,EAAEijB,EAAE,KAAKA,EAAE,MAAMF,EAAEG,GAAG,CAAC,EAAED,EAAE,IAAIL,EAAEM,GAAG,CAAC,EAAED,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK/5B,EAAE,OAAO,KAAK65B,EAAE,KAAKD,CAAC,CAAC,CAAC,SAAS2C,EAAU/+C,EAAE4C,EAAE6yC,EAAE,CAAOA,GAAN,OAAUA,EAAE,MAAM,MAAMjzB,EAAE,IAAI,YAAYxiB,EAAE,MAAM,EAAEk8C,EAAE,CAAC,GAAG,EAAE,GAAGl8C,EAAE,OAAO,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,KAAK,MAAM,IAAI,EAAEk8C,EAAE,IAAIgD,EAAMl/C,EAAEk8C,EAAE,GAAGA,EAAE,EAAE,EAAEA,EAAE,IAAIiD,EAAOjD,EAAE,GAAG,EAAE,MAAMllB,EAAE,CAACklB,CAAC,EAAE,KAAKllB,EAAE,OAAOp0B,GAAG,CAAC,IAAIA,EAAE,EAAEs5C,EAAE,EAAE,QAAQC,EAAE,EAAEA,EAAEnlB,EAAE,OAAOmlB,IAAInlB,EAAEmlB,CAAC,EAAE,IAAI,EAAEv5C,IAAIA,EAAEo0B,EAAEmlB,CAAC,EAAE,IAAI,EAAED,EAAEC,GAAG,GAAGv5C,EAAE6yC,EAAE,MAAM,MAAM2G,EAAEplB,EAAEklB,CAAC,EAAEpjC,EAAEsmC,EAAYp/C,EAAEwiB,EAAE45B,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAI,EAAEA,EAAE,IAAI,MAAM,EAAE,GAAGA,EAAE,IAAItjC,GAAGsjC,EAAE,IAAItjC,EAAE,CAACsjC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,MAAMC,EAAE,CAAC,GAAGD,EAAE,GAAG,GAAGtjC,EAAE,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,KAAK,MAAM,IAAI,EAAEujC,EAAE,IAAI6C,EAAMl/C,EAAEq8C,EAAE,GAAGA,EAAE,EAAE,EAAEA,EAAE,IAAI8C,EAAO9C,EAAE,GAAG,EAAE,MAAME,EAAE,CAAC,GAAGzjC,EAAE,GAAGsjC,EAAE,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,KAAK,MAAM,IAAI,EAAsC,IAApCG,EAAE,IAAI,CAAC,EAAE,CAAA,EAAG,EAAE,CAAA,EAAG,EAAEH,EAAE,IAAI,EAAEC,EAAE,IAAI,CAAC,EAAMF,EAAE,EAAEA,EAAE,GAAGA,IAAII,EAAE,IAAI,EAAEJ,CAAC,EAAEC,EAAE,IAAI,EAAED,CAAC,EAAEE,EAAE,IAAI,EAAEF,CAAC,EAAE,IAAIA,EAAE,EAAEA,EAAE,EAAEA,IAAII,EAAE,IAAI,EAAEJ,CAAC,EAAEC,EAAE,IAAI,EAAED,CAAC,EAAEE,EAAE,IAAI,EAAEF,CAAC,EAAEI,EAAE,IAAI4C,EAAO5C,EAAE,GAAG,EAAEH,EAAE,KAAKC,EAAED,EAAE,MAAMG,EAAEvlB,EAAEklB,CAAC,EAAEG,EAAErlB,EAAE,KAAKulB,CAAC,CAAC,CAAkC,IAAjCvlB,EAAE,MAAM,CAACh3B,EAAE4C,IAAIA,EAAE,IAAI,EAAE5C,EAAE,IAAI,EAAC,EAAOm8C,EAAE,EAAEA,EAAEnlB,EAAE,OAAOmlB,IAAInlB,EAAEmlB,CAAC,EAAE,IAAIA,EAAE,MAAM,CAACD,EAAEllB,CAAC,CAAC,CAAC,SAASgoB,EAAWh/C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAE,CAAC,GAASl8C,EAAE,MAAR,KAAa,OAAOA,EAAE,MAAK,SAAcA,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAE,CAAC,MAAMllB,EAAEp0B,EAAE5C,EAAE,CAAC,EAAEm8C,EAAE1G,EAAEz1C,EAAE,CAAC,EAAEo8C,EAAE55B,EAAExiB,EAAE,CAAC,EAAE8Y,GAAEojC,EAAEl8C,EAAE,CAAC,EAAE,OAAOg3B,EAAEA,EAAEmlB,EAAEA,EAAEC,EAAEA,EAAEtjC,GAAEA,EAAC,GAAE9Y,EAAE,IAAI,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,CAAC,EAAEl8C,EAAE,MAAMg3B,EAAEioB,EAASj/C,EAAE,IAAI4C,EAAE6yC,EAAEjzB,EAAE05B,CAAC,EAAE,IAAIC,EAAEn8C,EAAE,KAAKo8C,EAAEp8C,EAAE,MAAMg3B,EAAE,IAAImlB,EAAEn8C,EAAE,MAAMo8C,EAAEp8C,EAAE,MAAM,MAAM8Y,EAAEkmC,EAAW7C,EAAEv5C,EAAE6yC,EAAEjzB,EAAE05B,CAAC,EAAE,GAAGpjC,EAAE,MAAMke,EAAEA,EAAE,OAAOle,EAAE,MAAMujC,EAAE2C,EAAW5C,EAAEx5C,EAAE6yC,EAAEjzB,EAAE05B,CAAC,EAAE,OAAOG,EAAE,KAAKvjC,EAAE,KAAKujC,EAAEvjC,CAAC,CAAC,SAASmmC,EAASj/C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAE,CAAC,KAAK,CAAC,EAAEllB,CAAC,EAAEh3B,EAAE,OAAOg3B,EAAE,CAAC,EAAEp0B,EAAEo0B,EAAE,CAAC,EAAEye,EAAEze,EAAE,CAAC,EAAExU,EAAEwU,EAAE,CAAC,EAAEklB,EAAEl8C,EAAE,GAAG,CAAC,SAASo/C,EAAYp/C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAE,CAAC,IAAIxU,GAAG,EAAEizB,EAAEjzB,GAAG,CAAC,KAAK68B,EAAOr/C,EAAEy1C,EAAEyG,CAAC,GAAGllB,GAAGye,GAAG,EAAE,KAAK4J,EAAOr/C,EAAEwiB,EAAE05B,CAAC,EAAEllB,GAAGxU,GAAG,EAAE,GAAGizB,GAAGjzB,EAAE,MAAM,MAAM25B,EAAEv5C,EAAE6yC,GAAG,CAAC,EAAE7yC,EAAE6yC,GAAG,CAAC,EAAE7yC,EAAE4f,GAAG,CAAC,EAAE5f,EAAE4f,GAAG,CAAC,EAAE25B,EAAE1G,GAAG,EAAEjzB,GAAG,CAAC,CAAC,KAAK68B,EAAOr/C,EAAEy1C,EAAEyG,CAAC,EAAEllB,GAAGye,GAAG,EAAE,OAAOA,EAAE,CAAC,CAAC,SAAS4J,EAAOr/C,EAAE4C,EAAE6yC,EAAE,CAAC,OAAOz1C,EAAE4C,CAAC,EAAE6yC,EAAE,CAAC,EAAEz1C,EAAE4C,EAAE,CAAC,EAAE6yC,EAAE,CAAC,EAAEz1C,EAAE4C,EAAE,CAAC,EAAE6yC,EAAE,CAAC,EAAEz1C,EAAE4C,EAAE,CAAC,EAAE6yC,EAAE,CAAC,CAAC,CAAC,SAASyJ,EAAMl/C,EAAE4C,EAAE6yC,EAAE,CAAC,MAAMjzB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE05B,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAEllB,EAAEye,EAAE7yC,GAAG,EAAE,QAAQo0B,EAAEp0B,EAAEo0B,EAAEye,EAAEze,GAAG,EAAE,CAAC,MAAMp0B,EAAE5C,EAAEg3B,CAAC,EAAG,mBAAOye,EAAEz1C,EAAEg3B,EAAE,CAAC,GAAG,EAAE,KAAKmlB,EAAEn8C,EAAEg3B,EAAE,CAAC,GAAG,EAAE,KAAKolB,EAAEp8C,EAAEg3B,EAAE,CAAC,GAAG,EAAE,KAAKklB,EAAE,CAAC,GAAGt5C,EAAEs5C,EAAE,CAAC,GAAGzG,EAAEyG,EAAE,CAAC,GAAGC,EAAED,EAAE,CAAC,GAAGE,EAAE55B,EAAE,CAAC,GAAG5f,EAAEA,EAAE4f,EAAE,CAAC,GAAG5f,EAAE6yC,EAAEjzB,EAAE,CAAC,GAAG5f,EAAEu5C,EAAE35B,EAAE,CAAC,GAAG5f,EAAEw5C,EAAE55B,EAAE,CAAC,GAAGizB,EAAEA,EAAEjzB,EAAE,CAAC,GAAGizB,EAAE0G,EAAE35B,EAAE,CAAC,GAAGizB,EAAE2G,EAAE55B,EAAE,EAAE,GAAG25B,EAAEA,EAAE35B,EAAE,EAAE,GAAG25B,EAAEC,EAAE55B,EAAE,EAAE,GAAG45B,EAAEA,CAAC,CAAC,OAAO55B,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEA,EAAE,EAAE,EAAEA,EAAE,CAAC,EAAEA,EAAE,EAAE,EAAEA,EAAE,CAAC,EAAEA,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAE,CAAC,EAAEA,EAAE,EAAE05B,EAAE,EAAEllB,CAAC,CAAC,CAAC,SAASmoB,EAAOn/C,EAAE,CAAC,KAAK,CAAC,EAAE4C,CAAC,EAAE5C,EAAE,CAAC,EAAEy1C,CAAC,EAAEz1C,EAAE,CAAC,EAAEwiB,CAAC,EAAExiB,EAAEg3B,EAAEye,EAAE,CAAC,EAAE0G,EAAE1G,EAAE,CAAC,EAAE2G,EAAE3G,EAAE,CAAC,EAAE38B,EAAE28B,EAAE,CAAC,EAAE4G,EAAK75B,GAAH,EAAK,EAAE,EAAEA,EAAE+5B,EAAE,CAAC35C,EAAE,CAAC,EAAEo0B,EAAEA,EAAEqlB,EAAEz5C,EAAE,CAAC,EAAEo0B,EAAEmlB,EAAEE,EAAEz5C,EAAE,CAAC,EAAEo0B,EAAEolB,EAAEC,EAAEz5C,EAAE,CAAC,EAAEo0B,EAAEle,EAAEujC,EAAEz5C,EAAE,CAAC,EAAEu5C,EAAEnlB,EAAEqlB,EAAEz5C,EAAE,CAAC,EAAEu5C,EAAEA,EAAEE,EAAEz5C,EAAE,CAAC,EAAEu5C,EAAEC,EAAEC,EAAEz5C,EAAE,CAAC,EAAEu5C,EAAErjC,EAAEujC,EAAEz5C,EAAE,CAAC,EAAEw5C,EAAEplB,EAAEqlB,EAAEz5C,EAAE,CAAC,EAAEw5C,EAAED,EAAEE,EAAEz5C,EAAE,EAAE,EAAEw5C,EAAEA,EAAEC,EAAEz5C,EAAE,EAAE,EAAEw5C,EAAEtjC,EAAEujC,EAAEz5C,EAAE,EAAE,EAAEkW,EAAEke,EAAEqlB,EAAEz5C,EAAE,EAAE,EAAEkW,EAAEqjC,EAAEE,EAAEz5C,EAAE,EAAE,EAAEkW,EAAEsjC,EAAEC,EAAEz5C,EAAE,EAAE,EAAEkW,EAAEA,EAAEujC,CAAC,EAAEG,EAAED,EAAEE,EAAEP,EAAE,IAAIx1C,EAAE,CAAC,KAAK,OAAM,EAAG,KAAK,OAAM,EAAG,KAAK,OAAM,EAAG,KAAK,OAAM,CAAE,EAAEg2C,EAAE,EAAEpjB,EAAE,EAAE,GAAM9W,GAAH,EAAK,QAAQxiB,EAAE,EAAEA,EAAE,KAAK0G,EAAE+1C,EAAE,QAAQD,EAAE91C,CAAC,EAAE4yB,EAAE,KAAK,KAAKmjB,EAAE,IAAI/1C,EAAEA,CAAC,CAAC,EAAEA,EAAE+1C,EAAE,IAAI,EAAEnjB,EAAE5yB,CAAC,EAAE,EAAK1G,GAAH,GAAM,KAAK,IAAIs5B,EAAEojB,CAAC,EAAE,OAAO18C,IAAI08C,EAAEpjB,EAAE,MAAMqjB,EAAE,CAAC3lB,EAAEqlB,EAAEF,EAAEE,EAAED,EAAEC,EAAEvjC,EAAEujC,CAAC,EAAE,MAAM,CAAC,IAAIE,EAAE,EAAEI,EAAE,EAAEj2C,EAAE,EAAEg2C,EAAE,OAAOD,EAAE,IAAIA,EAAE,IAAI,IAAIE,CAAC,EAAEj2C,CAAC,EAAE,IAAI+1C,EAAE,IAAI/1C,EAAEi2C,CAAC,EAAE,MAAM,KAAK,MAAM,IAAIA,EAAE,CAAC,CAAC,GAAG,GAAG,KAAK,MAAM,IAAIA,EAAE,CAAC,CAAC,GAAG,GAAG,KAAK,MAAM,IAAIA,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,IAAIA,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAIT,EAAE,CAAC,QAAQ,CAACl8C,EAAE4C,IAAI,CAAC5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,EAAE,EAAE4C,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC5C,EAAE4C,IAAI5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE5C,EAAE,CAAC,EAAE4C,EAAE,CAAC,EAAE,IAAI,CAAC5C,EAAE4C,IAAI,CAAC5C,EAAE4C,EAAE,CAAC,EAAE5C,EAAE4C,EAAE,CAAC,EAAE5C,EAAE4C,EAAE,CAAC,EAAE5C,EAAE4C,EAAE,CAAC,CAAC,CAAC,EAAE+6C,GAAK,OAAO,SAAgB39C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAEmlB,EAAE,CAAO35B,GAAN,OAAUA,EAAE,GAAS25B,GAAN,OAAUA,EAAE,IAAI,MAAMC,EAAEsC,EAAS1+C,EAAE4C,EAAE6yC,EAAEjzB,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE25B,EAAE,EAAE,CAAC,EAAE,OAAOsC,EAAYrC,EAAE,EAAE,EAAEoC,EAAMpC,EAAEx5C,EAAE6yC,EAAEyG,EAAEllB,CAAC,CAAC,EAAE2mB,GAAK,SAAS,SAAkB39C,EAAE4C,EAAE6yC,EAAEjzB,EAAE05B,EAAEllB,EAAEmlB,EAAEC,EAAE,CAAC,MAAMtjC,EAAE,CAAC,MAAM,GAAM0J,GAAH,EAAK,EAAE,IAAO05B,GAAH,EAAK,EAAE,GAAG,MAAMllB,EAAE,OAAO,CAAA,CAAE,EAAEqlB,GAAG75B,EAAE05B,GAAGllB,EAAEulB,EAAEF,EAAEz5C,EAAE,QAAQ4f,EAAE,EAAEA,EAAExiB,EAAE,OAAOwiB,IAAI1J,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,MAAMlW,EAAE,OAAO6yC,CAAC,EAAE,IAAI,IAAI,WAAWz1C,EAAEwiB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,KAAK,KAAK65B,EAAE,CAAC,EAAE,IAAI,KAAK,KAAKE,EAAE,CAAC,CAAC,CAAC,EAAE,OAAOkC,EAAY3lC,EAAE,EAAE,EAAE,EAAE0lC,EAAM1lC,EAAElW,EAAE6yC,EAAE0G,EAAEC,CAAC,CAAC,EAAEuB,GAAK,OAAO,SAASe,EAASf,GAAK,OAAO,OAAOY,EAAOZ,GAAK,SAASkB,EAASlB,GAAK,SAAS,UAAUoB,EAAUpB,GAAK,SAAS,WAAWqB,CAAU,GAAC,EAAG,MAAMvJ,GAAE,CAAC,cAAc,EAAE,EAAE,CAAC,MAAMjzB,EAAE,EAAE,MAAM05B,EAAE,EAAE,OAAOllB,EAAExU,GAAG,EAAE25B,EAAE,EAAE,WAAW,IAAI,EAAE,aAAa,EAAE,EAAE35B,EAAE05B,CAAC,EAAEE,EAAE,IAAI,YAAYD,EAAE,KAAK,MAAM,EAAE,GAAG,GAAG35B,EAAE,IAAI,IAAI,EAAE65B,EAAE,EAAEH,EAAEK,EAAE,IAAIF,EAAEG,EAAE,IAAI,YAAYD,CAAC,EAAEE,EAAE,IAAI,SAASD,CAAC,EAAE91C,EAAE,GAAG,GAAG,IAAIg2C,EAAE,EAAE,EAAE,EAAEz3C,EAAEyB,EAAEuwB,EAAE,EAAE1E,EAAE,EAAE,EAAE,EAAE,SAAS+sB,EAAMt/C,EAAE,CAACy8C,EAAE,UAAUlqB,EAAEvyB,EAAE,EAAE,EAAEuyB,GAAG,CAAC,CAAC,SAASgtB,EAAMv/C,EAAE,CAACy8C,EAAE,UAAUlqB,EAAEvyB,EAAE,EAAE,EAAEuyB,GAAG,CAAC,CAAC,SAASitB,EAAKx/C,EAAE,CAACuyB,GAAGvyB,CAAC,CAACs/C,EAAM,KAAK,EAAEC,EAAMhD,CAAC,EAAEiD,EAAK,CAAC,EAAED,EAAM,GAAG,EAAEA,EAAM,GAAG,EAAEA,EAAM/8B,CAAC,EAAE+8B,EAAM,CAACrD,IAAI,CAAC,EAAEoD,EAAM,CAAC,EAAEA,EAAM,EAAE,EAAEC,EAAM,CAAC,EAAEA,EAAMlD,CAAC,EAAEkD,EAAM,IAAI,EAAEA,EAAM,IAAI,EAAEC,EAAK,CAAC,EAAED,EAAM,QAAQ,EAAEA,EAAM,KAAK,EAAEA,EAAM,GAAG,EAAEA,EAAM,UAAU,EAAEA,EAAM,UAAU,GAAE,SAASE,GAAS,CAAC,KAAKxoB,EAAEilB,GAAGj3C,EAAE,GAAG,CAAC,IAAI,EAAE,IAAIgyB,EAAE,EAAEylB,EAAE,EAAEA,EAAE1lB,GAAG/xB,IAAI,EAAEm3C,EAAE,GAAG,EAAE,EAAE,IAAI,GAAGK,EAAE,UAAU,EAAEC,EAAE,GAAG,EAAE,CAAC,EAAEA,GAAG,EAAEzlB,GAAG,CAAC,EAAEmlB,EAAE,QAAQn3C,EAAEyB,EAAE,WAAW+4C,EAAQhK,GAAE,IAAI,GAAG,EAAE+G,CAAC,CAAC,GAAC,CAAE,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,cAAc,GAAGx8C,GAAG,CAAC,EAAE,IAAI,KAAK,CAACA,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAC,CAAE,EAAE,KAAK,CAAC,EAAE,IAAIwiB,GAAE,CAAC,OAAO,SAAS,QAAQ,UAAU,eAAe,iBAAiB,GAAG,KAAK,IAAI,MAAM,IAAI,KAAK,EAAE05B,GAAE,CAAC,CAAC15B,GAAE,MAAM,EAAE,MAAM,CAACA,GAAE,OAAO,EAAE,MAAM,CAACA,GAAE,cAAc,EAAE,MAAM,CAACA,GAAE,EAAE,EAAE,KAAK,CAACA,GAAE,GAAG,EAAE,KAAK,CAACA,GAAE,GAAG,EAAE,IAAI,EAAE,MAAMwU,GAAe,OAAO,OAApB,IAA2BmlB,GAAe,OAAO,kBAApB,KAAuC,gBAAgB,kBAAkBC,GAAEplB,IAAG,OAAO,SAAS,OAAO,QAAQ,SAAS,OAAO,QAAQ,QAAQ,sBAAsB,EAAE0oB,IAAY1oB,IAAGmlB,MAAKC,IAAGA,GAAE,kBAAkB,OAAO,MAAM,GAAgB,OAAO,KAApB,KAA0B,MAAMuD,IAAkB3oB,IAAGmlB,MAAKC,IAAGA,GAAE,kBAAkB,OAAO,YAAY,GAAgB,OAAO,WAApB,KAAgC,YAAY,SAASwD,GAAmB,EAAE,EAAE,EAAE,KAAK,MAAM,CAAC,OAAO,IAAI,SAASp9B,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,SAAS,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI45B,EAAE,EAAE,OAAO,MAAMtjC,EAAE,IAAI,WAAWsjC,CAAC,EAAE,KAAKA,KAAKtjC,EAAEsjC,CAAC,EAAE,EAAE,WAAWA,CAAC,EAAE,MAAMC,EAAE,IAAI,KAAK,CAACvjC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAEujC,EAAE,KAAK,EAAEA,EAAE,aAAa,EAAE75B,EAAE65B,CAAC,CAAC,EAAC,CAAE,CAAC,SAASwD,GAAmB,EAAE,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,IAAI,CAAC,MAAMr9B,EAAE,IAAIm9B,GAAiBn9B,EAAE,OAAO,IAAI,EAAEA,EAAE,MAAM,EAAEA,EAAE,QAAQxiB,GAAG,EAAEA,CAAC,EAAEwiB,EAAE,cAAc,CAAC,CAAC,EAAC,CAAE,CAAC,SAASs9B,GAAU,EAAE,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,IAAI,CAAC,MAAMt9B,EAAE,IAAI,MAAMA,EAAE,OAAO,IAAI,EAAEA,CAAC,EAAEA,EAAE,QAAQxiB,GAAG,EAAEA,CAAC,EAAEwiB,EAAE,IAAI,CAAC,EAAC,CAAE,CAAC,SAASu9B,IAAgB,CAAC,GAAYA,GAAe,eAAxB,OAAqC,OAAOA,GAAe,aAAa,IAAI,EAAEv9B,GAAE,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,UAAU,MAAM,gBAAgB,KAAK,CAAC,EAAE,EAAEA,GAAE,OAAO,kBAAkB,KAAK,CAAC,GAAG,UAAU,KAAK,CAAC,EAAE,EAAEA,GAAE,IAAI,UAAU,KAAK,CAAC,EAAE,EAAEA,GAAE,eAAe,WAAW,KAAK,CAAC,EAAE,EAAEA,GAAE,SAAS,QAAQ,KAAK,CAAC,GAAS,SAAS,gBAAgB,EAAEA,GAAE,IAAIu9B,GAAe,aAAa,EAAEA,GAAe,YAAY,CAAC,SAASC,GAA2C,EAAE,EAAE,CAAC,MAAM,EAAED,GAAc,EAAGv9B,EAAE05B,GAAE,CAAC,EAAE,IAAIllB,EAAE,EAAEmlB,EAAE,EAAEC,EAAEplB,EAAEmlB,EAAE,MAAM,EAAEnlB,EAAEmlB,EAAEA,EAAEnlB,EAAEA,EAAEmlB,EAAE,KAAKC,EAAE55B,EAAEA,GAAG,CAAC,MAAMxiB,GAAGwiB,EAAEwU,GAAG,EAAEp0B,GAAG4f,EAAE25B,GAAG,EAAEn8C,EAAE4C,GAAGu5C,EAAEv5C,EAAEo0B,EAAEp0B,EAAE,IAAIu5C,EAAEn8C,EAAE,EAAEg3B,EAAEh3B,GAAGo8C,EAAEplB,EAAEmlB,CAAC,CAAC,MAAM,CAAC,MAAMnlB,EAAE,OAAOmlB,CAAC,CAAC,CAAC,SAAS8D,GAAmB,EAAE,EAAE,CAAC,IAAI,EAAEz9B,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,gBAAgB,EAAE,CAAC,EAAEA,EAAE,EAAE,WAAW,IAAI,EAASA,IAAP,KAAS,MAAM,IAAI,MAAM,4CAA4C,CAAC,MAAS,CAAC,EAAE,SAAS,cAAc,QAAQ,EAAEA,EAAE,EAAE,WAAW,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAEA,CAAC,CAAC,CAAC,SAAS09B,GAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO19B,CAAC,EAAEw9B,GAA2C,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAEC,GAAmB,EAAEz9B,CAAC,EAAE,OAAO,GAAG,QAAQ,KAAK,CAAC,IAAI,EAAE,UAAU,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS29B,IAAO,CAAC,OAAgBA,GAAM,eAAf,SAA8BA,GAAM,aAAa,CAAC,iBAAiB,mBAAmB,iBAAiB,OAAO,SAAS,MAAM,EAAE,SAAS,UAAU,QAAQ,GAAG,UAAU,UAAU,SAAS,KAAK,GAAgB,OAAO,SAApB,KAA8B,eAAe,UAAUA,GAAM,YAAY,CAAC,SAASC,GAAiB,EAAE,EAAE,CAAA,EAAG,CAAC,OAAO,IAAI,SAAS,SAAS,EAAElE,EAAE,CAAC,IAAIllB,EAAEmlB,EAAE,IAAIkE,EAAY,UAAU,CAAC,GAAG,CAAC,OAAOlE,EAAE+D,GAAkBlpB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAACA,EAAEmlB,CAAC,CAAC,CAAC,OAAOn8C,EAAE,CAAC,OAAOk8C,EAAEl8C,CAAC,CAAC,CAAC,EAAEsgD,EAAa,SAAS19C,EAAE,CAAC,GAAG,CAAG,IAAI29C,EAAa,SAASvgD,EAAE,CAAC,GAAG,CAAC,MAAMA,CAAC,OAAOA,EAAE,CAAC,OAAOk8C,EAAEl8C,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI4C,EAAE,OAAOi9C,GAAmB,CAAC,EAAE,MAAM,SAAS7/C,EAAE,CAAC,GAAG,CAAC,OAAO4C,EAAE5C,EAAE8/C,GAAUl9C,CAAC,EAAE,MAAM,SAAS5C,EAAE,CAAC,GAAG,CAAC,OAAOg3B,EAAEh3B,GAAE,UAAU,CAAC,GAAG,CAAC,OAAOqgD,EAAW,CAAE,OAAOrgD,EAAE,CAAC,OAAOk8C,EAAEl8C,CAAC,CAAC,CAAC,GAAC,CAAE,OAAOA,EAAE,CAAC,OAAOugD,EAAavgD,CAAC,CAAC,CAAC,GAAGugD,CAAY,CAAC,OAAOvgD,EAAE,CAAC,OAAOugD,EAAavgD,CAAC,CAAC,CAAC,GAAGugD,CAAY,CAAC,OAAOvgD,EAAE,CAACugD,EAAavgD,CAAC,CAAC,CAAC,OAAOA,EAAE,CAAC,OAAOk8C,EAAEl8C,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAGmgD,GAAK,GAAI,CAAC39B,GAAE,eAAeA,GAAE,aAAa,EAAE,SAASu9B,GAAc,CAAE,EAAE,MAAM,IAAI,MAAM,0CAA0C,EAAE,OAAO,kBAAkB,CAAC,EAAE,MAAM,SAAS//C,EAAE,CAAC,GAAG,CAAC,OAAOg3B,EAAEh3B,EAAEqgD,GAAa,MAAS,CAAC,OAAOC,EAAY,CAAE,CAAC,GAAGA,CAAY,CAAC,MAAS,CAACA,EAAY,CAAE,CAAC,EAAC,CAAE,CAAC,SAASE,GAAa,EAAE,EAAEh+B,EAAE05B,EAAEllB,EAAE,EAAE,CAAC,OAAO,IAAI,SAAS,SAASmlB,EAAEC,EAAE,CAAC,IAAI,EAAE,GAAiB,IAAd,YAAgB,CAAC,IAAIC,EAAEE,EAAEC,EAAE,OAAOH,EAAE,EAAE,WAAW,IAAI,EAAG,CAAC,KAAKE,CAAC,EAAEF,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAGG,EAAEmB,GAAK,OAAO,CAACpB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,KAAKvlB,CAAC,EAAE,EAAE,IAAI,KAAK,CAACwlB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAKh6B,EAAE,EAAE,aAAa05B,EAAEuE,EAAM,KAAK,IAAI,CAAC,CAAC,CAAskB,IAASC,EAAT,UAAgB,CAAC,OAAOD,EAAM,KAAK,IAAI,CAAC,EAA7mB,GAAiB,IAAd,YAAgB,OAAO,IAAI,SAAS79C,GAAG6yC,GAAE,OAAO,EAAE7yC,CAAC,EAAC,EAAG,KAAK,SAAS5C,EAAE,CAAC,GAAG,CAAC,OAAO,EAAEA,EAAE,EAAE,KAAKwiB,EAAE,EAAE,aAAa05B,EAAEwE,EAAM,KAAK,IAAI,CAAC,OAAO1gD,EAAE,CAAC,OAAOo8C,EAAEp8C,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAEo8C,CAAC,EAAE,CAAiX,IAASuE,EAAT,UAAgB,CAAC,OAAOD,EAAM,KAAK,IAAI,CAAC,EAAxZ,GAAe,OAAO,iBAAnB,YAAoC,aAAa,gBAAgB,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,QAAQ1pB,CAAC,CAAC,EAAE,KAAK,SAASh3B,EAAE,CAAC,GAAG,CAAC,OAAO,EAAEA,EAAE,EAAE,KAAKwiB,EAAE,EAAE,aAAa05B,EAAEyE,EAAM,KAAK,IAAI,CAAC,OAAO3gD,EAAE,CAAC,OAAOo8C,EAAEp8C,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAEo8C,CAAC,EAAE,CAAC,IAAIK,EAAE,OAAOA,EAAE,EAAE,UAAU,EAAEzlB,CAAC,EAAE4oB,GAAmBnD,EAAEj6B,EAAE05B,CAAC,EAAE,KAAK,SAASl8C,EAAE,CAAC,GAAG,CAAC,OAAO,EAAEA,EAAE2gD,EAAM,KAAK,IAAI,CAAC,OAAO3gD,EAAE,CAAC,OAAOo8C,EAAEp8C,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAEo8C,CAAC,CAAC,CAA0C,CAA0C,CAAC,SAASqE,GAAO,CAAC,OAAOtE,EAAE,CAAC,CAAC,CAAC,EAAC,CAAE,CAAC,SAASyE,GAAoB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,SAASC,IAA4B,CAAC,OAAO,IAAI,SAAS,SAAS,EAAE,EAAE,CAAI,IAAGr+B,EAAE05B,EAAEllB,EAAEmlB,EAAE,OAAgB0E,GAA2B,eAApC,OAAiD,EAAEA,GAA2B,YAAY,EAA+ZjB,GAAmB,0ZAA0Z,WAAW,KAAK,KAAK,EAAE,MAAM,SAASnK,EAAE,CAAC,GAAG,CAAC,OAAOjzB,EAAEizB,EAAE2K,GAAiB59B,CAAC,EAAE,MAAM,SAASizB,EAAE,CAAC,GAAG,CAAC,OAAOyG,EAAEzG,EAAE,CAAC,EAAE+K,GAAatE,EAAE15B,EAAE,KAAKA,EAAE,KAAKA,EAAE,YAAY,EAAE,MAAM,SAASizB,EAAE,CAAC,GAAG,CAAC,OAAOze,EAAEye,EAAEmL,GAAoB1E,CAAC,EAAEkE,GAAiBppB,CAAC,EAAE,MAAM,SAASye,EAAE,CAAC,GAAG,CAAC,OAAO0G,EAAE1G,EAAE,CAAC,EAAEoL,GAA2B,aAAiB1E,EAAE,QAAN,GAAiBA,EAAE,SAAN,EAAa,EAAE0E,GAA2B,YAAY,CAAC,OAAO7gD,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAOA,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAOA,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAOA,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,EAAC,CAAE,CAAC,SAAS8gD,GAAmB,EAAE,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,IAAI,CAAC,MAAMt+B,EAAE,IAAIm9B,GAAiBn9B,EAAE,OAAOxiB,GAAG,CAAC,MAAMy1C,EAAE,IAAI,SAASz1C,EAAE,OAAO,MAAM,EAAE,GAAUy1C,EAAE,UAAU,EAAE,EAAE,GAAvB,MAAyB,OAAO,EAAE,EAAE,EAAE,MAAMjzB,EAAEizB,EAAE,WAAW,IAAIyG,EAAE,EAAE,KAAKA,EAAE15B,GAAG,CAAC,GAAGizB,EAAE,UAAUyG,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAMl8C,EAAEy1C,EAAE,UAAUyG,EAAE,EAAE,EAAE,GAAGA,GAAG,EAASl8C,GAAP,MAAS,CAAC,GAAey1C,EAAE,UAAUyG,GAAG,EAAE,EAAE,GAA/B,WAAiC,OAAO,EAAE,EAAE,EAAE,MAAMl8C,EAASy1C,EAAE,UAAUyG,GAAG,EAAE,EAAE,GAA1B,MAA4BA,GAAGzG,EAAE,UAAUyG,EAAE,EAAEl8C,CAAC,EAAE,MAAMwiB,EAAEizB,EAAE,UAAUyG,EAAEl8C,CAAC,EAAEk8C,GAAG,EAAE,QAAQllB,EAAE,EAAEA,EAAExU,EAAEwU,IAAI,GAAQye,EAAE,UAAUyG,EAAE,GAAGllB,EAAEh3B,CAAC,GAAzB,IAA2B,OAAO,EAAEy1C,EAAE,UAAUyG,EAAE,GAAGllB,EAAE,EAAEh3B,CAAC,CAAC,CAAC,KAAK,CAAC,IAAW,MAAMA,IAAd,MAAiB,MAAMk8C,GAAGzG,EAAE,UAAUyG,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE15B,EAAE,QAAQxiB,GAAG,EAAEA,CAAC,EAAEwiB,EAAE,kBAAkB,CAAC,CAAC,EAAC,CAAE,CAAC,SAASu+B,GAAuB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,OAAOv+B,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,SAAS,CAAC,IAAI,EAAE,GAAGA,EAAE,KAAK,CAAC,EAAE,CAAC,EAAEy9B,GAAmB,EAAEz9B,CAAC,EAAE,EAAEA,GAAG,EAAE,MAAM,EAAE,EAAE,OAAOA,EAAE,EAAE,IAAI,EAAE,MAAM,EAAEA,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAEo+B,GAAoB,CAAC,GAAG,CAAC,CAAC,SAASI,GAAsB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,OAAOx+B,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAEy9B,GAAmB,EAAEz9B,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAMA,EAAE,EAAE,OAAO,IAAI,EAAE,MAAM,EAAE,EAAE,OAAOA,GAAG,EAAC,CAAE,IAAK,GAAE,EAAE,UAAU,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,IAAK,GAAE,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,EAAEA,CAAC,EAAE,MAAM,IAAK,GAAE,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAEA,CAAC,EAAE,MAAM,IAAK,GAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,IAAK,GAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAEA,EAAE,CAAC,EAAE,MAAM,IAAK,GAAE,EAAE,UAAU,EAAE,GAAG,GAAG,EAAEA,EAAE,CAAC,EAAE,MAAM,IAAK,GAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,EAAEA,CAAC,EAAEo+B,GAAoB,CAAC,EAAE,CAAC,CAAC,SAASlC,GAAS,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,SAAS,SAASl8B,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE45B,EAAEtjC,EAAEujC,EAAEE,EAAEC,EAAEC,EAAE/1C,EAAEg2C,EAAEpjB,EAAEqjB,EAAEC,EAAE33C,EAAEgyB,EAAE1E,EAAEsqB,EAAEC,EAAE/qB,EAAEgrB,EAAE,SAASkE,EAAYjhD,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,QAAQ,MAAM,EAAE,OAAO,OAAO,GAAGA,EAAE,EAAE,WAAW,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,SAASkhD,EAAYlhD,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,QAAQ,MAAM,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,KAAK,IAAIA,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,cAAc,GAAGo8C,EAAE,KAAK,EAAE,UAAU,KAAK6E,EAAW,EAAGb,GAAiB,EAAE,CAAC,EAAE,KAAK,SAAS3K,EAAE,CAAC,GAAG,CAAC,MAAM,CAAA,CAAE38B,CAAC,EAAE28B,EAAEwL,EAAW,EAAG5E,EAAE0E,GAAuBjoC,EAAE,CAAC,EAAEmoC,EAAW,EAAG,IAAI,SAAS,SAASxL,EAAEjzB,EAAE,CAAC,IAAI05B,EAAE,GAAG,EAAEA,EAAE,EAAE,iBAAiB,OAAO4E,GAAmB,CAAC,EAAE,KAAK,SAAS9gD,EAAE,CAAC,GAAG,CAAC,OAAOk8C,EAAEl8C,EAAEmhD,EAAM,KAAK,IAAI,CAAC,OAAOnhD,EAAE,CAAC,OAAOwiB,EAAExiB,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAEwiB,CAAC,EAAE,SAAS2+B,GAAO,CAAC,OAAO1L,EAAEyG,CAAC,CAAC,CAAC,OAAOiF,EAAM,KAAK,IAAI,CAAC,EAAC,EAAG,KAAK,SAAS1L,EAAE,CAAC,GAAG,CAAC,OAAO8G,EAAE9G,EAAEwL,EAAW,EAAGJ,GAA0B,EAAG,KAAK,SAASpL,EAAE,CAAC,GAAG,CAAC,OAAO+G,EAAE/G,EAAE4G,EAAE2E,GAAsB3E,EAAEE,CAAC,EAAE0E,EAAW,EAAGxE,EAAE,EAAE,gBAAgB,EAAE/1C,EAAE,EAAE,UAAU,EAAE,KAAK85C,GAAahE,EAAE91C,EAAE,EAAE,KAAK,EAAE,aAAa+1C,CAAC,EAAE,KAAK,SAAShH,EAAE,CAAC,GAAG,CAAC,CAA2F,IAAS2L,EAAT,UAAkB,CAAC,GAAG,MAAMnqB,EAAEmlB,GAAGnlB,EAAE2lB,GAAG,CAAC,IAAIh6C,EAAE6yC,EAAE,OAAO7yC,EAAEm6C,EAAE,IAAIhrB,EAAE,MAAMA,EAAE,MAAM0jB,EAAEsH,EAAE,IAAIhrB,EAAE,OAAOA,EAAE,OAAO,CAAC8qB,EAAEC,CAAC,EAAEmD,GAAmBr9C,EAAE6yC,CAAC,EAAEqH,EAAE,UAAU/qB,EAAE,EAAE,EAAEnvB,EAAE6yC,CAAC,EAAEgH,GAAiB/1C,IAAd,YAAgB,IAAI,IAAI85C,GAAa3D,EAAEn2C,EAAE,EAAE,KAAK,EAAE,aAAa+1C,CAAC,EAAE,MAAM,SAASz8C,EAAE,CAAC,GAAG,CAAC,OAAOuyB,EAAEvyB,EAAE4gD,GAAoB7uB,CAAC,EAAEA,EAAE8qB,EAAE5lB,EAAE1E,EAAE,KAAK2uB,EAAY,KAAK,IAAI,GAAG,KAAK,OAAOj8C,EAAEgyB,IAAIhyB,EAAEm3C,GAAG,GAAG,CAAC,CAAC,EAAEgF,CAAO,OAAOphD,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAgRqhD,EAAT,UAAuB,CAAC,OAAOT,GAAoB7uB,CAAC,EAAE6uB,GAAoB/D,CAAC,EAAE+D,GAAoBvE,CAAC,EAAEuE,GAAoBpE,CAAC,EAAEoE,GAAoB9nC,CAAC,EAAEooC,EAAY,GAAG,EAAE1+B,EAAE+P,CAAC,CAAC,EAAj5B,GAAGmqB,EAAEjH,EAAEwL,EAAW,EAAG3nB,EAAEojB,EAAE,KAAKN,EAAEO,EAAED,EAAE,KAAK,EAAE,KAAK,CAACpjB,GAAG,CAACqjB,EAAE,OAAOuE,EAAY,GAAG,EAAE1+B,EAAEk6B,CAAC,EAAE,IAAI1lB,EAA4Y,OAAO4lB,EAAE,EAAE,KAAK33C,EAAEy3C,EAAE,KAAKzlB,EAAEhyB,EAAE8sB,EAAEyqB,EAAEO,EAAE,CAAC,EAAE,sBAAsBzjB,GAAGtC,EAAE,SAASh3B,EAAE,CAAC,KAAKA,GAAG,CAAC,GAAGA,EAAE,KAAK,OAAO,KAAKA,EAAE,KAAKg3B,EAAE,CAAC,EAAE,GAAG,CAAC,GAAGh3B,EAAE,IAAI,CAAC,GAAGA,EAAE,OAAO,OAAOA,EAAE,IAAG,EAAGqhD,EAAa,KAAK,IAAI,EAAErhD,EAAEA,EAAEohD,CAAO,MAAMphD,EAAEA,EAAE,KAAK,IAAI,CAAC,OAAOA,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,GAAGohD,CAAO,CAA0K,CAAC,OAAO7E,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,OAAOv8C,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,OAAOA,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,OAAOA,EAAE,CAAC,OAAO,EAAEA,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM8Y,GAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAssB,IAAIujC,GAAE,SAASiF,GAAoB,EAAE,EAAE,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE9+B,IAAI,CAAC65B,KAAIA,IAAE,SAA+Br8C,EAAE,CAAC,MAAM4C,EAAE,CAAA,EAAG,OAA8CA,EAAE,KAAK5C,CAAC,EAAE,IAAI,gBAAgB,IAAI,KAAK4C,CAAC,CAAC,CAAC,GAAEkW,EAAC,GAAG,MAAM,EAAE,IAAI,OAAOujC,EAAC,EAAE,EAAE,iBAAiB,WAAW,SAAiBr8C,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,QAAQ,EAAE,UAAS,UAAoBA,EAAE,KAAK,WAAhB,OAAyB,CAAC,GAAGA,EAAE,KAAK,MAAM,OAAOwiB,EAAE,IAAI,MAAMxiB,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,EAAE,UAAS,EAAG,EAAEA,EAAE,KAAK,IAAI,EAAE,EAAE,UAAS,CAAE,MAAM,EAAE,WAAWA,EAAE,KAAK,QAAQ,CAAC,EAAC,EAAG,EAAE,iBAAiB,QAAQwiB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,iBAAiB,SAAS,IAAI,CAACA,EAAE,EAAE,OAAO,MAAM,EAAE,EAAE,UAAS,CAAE,EAAC,EAAG,EAAE,YAAY,CAAC,KAAK,EAAE,uBAAuB,EAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,WAAW,OAAO,OAAO,MAAM,CAAC,CAAC,CAAC,EAAC,CAAE,CAAC,SAAS++B,GAAiB,EAAE,EAAE,CAAC,OAAO,IAAI,SAAS,SAAS,EAAE/+B,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE45B,EAAEtjC,EAAEujC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAG,CAAC,WAAWD,CAAC,EAAE,EAAG,EAAE,UAAU,EAAE,WAAW,OAAO,kBAAkBtjC,EAAa,OAAO,EAAE,cAApB,WAAkC,EAAE,aAAa,OAAO,EAAE,aAAa,EAAE,WAAW9Y,GAAG,CAAC,EAAEA,EAAc,OAAOo8C,GAAnB,YAAsBA,EAAE,CAAC,CAAC,EAAE,EAAE,aAAa,MAAM,aAAasD,IAAY,OAAOl9B,EAAE,IAAI,MAAM,mDAAmD,CAAC,EAAE,GAAG,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,OAAOA,EAAE,IAAI,MAAM,gCAAgC,CAAC,EAAE,GAAG65B,EAAe,OAAO,kBAApB,KAAuC,gBAAgB,kBAAkB,CAACvjC,GAAe,OAAO,QAAnB,YAA2BujC,EAAE,OAAOqC,GAAS,EAAE,CAAC,EAAE,KAAK,SAAS1+C,EAAE,CAAC,GAAG,CAAC,OAAO,EAAEA,EAAEygD,EAAM,KAAK,IAAI,CAAC,OAAOzgD,EAAE,CAAC,OAAOwiB,EAAExiB,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAEwiB,CAAC,EAAE,IAAI+5B,EAAE,UAAU,CAAC,GAAG,CAAC,OAAOkE,EAAM,KAAK,IAAI,CAAC,OAAOzgD,EAAE,CAAC,OAAOwiB,EAAExiB,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAEwhD,EAAa,SAAS5+C,EAAE,CAAC,GAAG,CAAC,OAAO87C,GAAS,EAAE,CAAC,EAAE,MAAM,SAAS1+C,EAAE,CAAC,GAAG,CAAC,OAAO,EAAEA,EAAEu8C,EAAC,CAAE,OAAOv8C,EAAE,CAAC,OAAOwiB,EAAExiB,CAAC,CAAC,CAAC,GAAGwiB,CAAC,CAAC,OAAOxiB,EAAE,CAAC,OAAOwiB,EAAExiB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,iGAAiGshD,GAAoB,EAAE,CAAC,EAAE,MAAM,SAASthD,EAAE,CAAC,GAAG,CAAC,OAAO,EAAEA,EAAEu8C,EAAC,CAAE,MAAS,CAAC,OAAOiF,EAAY,CAAE,CAAC,GAAGA,CAAY,CAAC,MAAS,CAACA,EAAY,CAAE,CAAC,SAASf,GAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,MAAS,CAAC,CAAC,GAAG,CAAC,EAAE,cAA6B,EAAE,OAAjB,eAAwB,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAEzE,GAA2B,EAAE,CAAC,EAAE,MAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAC,CAAE,CAACuF,GAAiB,mBAAmB1B,GAAmB0B,GAAiB,mBAAmB3B,GAAmB2B,GAAiB,UAAUzB,GAAUyB,GAAiB,kBAAkBrB,GAAkBqB,GAAiB,iBAAiBnB,GAAiBmB,GAAiB,aAAaf,GAAae,GAAiB,mBAAmBT,GAAmBS,GAAiB,uBAAuBR,GAAuBQ,GAAiB,sBAAsBP,GAAsBO,GAAiB,oBAAoBX,GAAoBW,GAAiB,2BAA2BV,GAA2BU,GAAiB,2CAA2CvB,GAA2CuB,GAAiB,2BAA2BvF,GAA2BuF,GAAiB,eAAexB,GAAewB,GAAiB,QAAQ,QCAxxuD,MAAM7jD,GAAU,OAAe,OAKlB+jD,GAAkBC,GAA0B,CACvD,MAAMC,EAAQ,CAAC,IAAK,KAAM,KAAM,IAAI,EACpC,IAAIn/B,EAAI,EACJzkB,EAAO2jD,EACX,KAAO3jD,GAAQ,MAAQykB,EAAIm/B,EAAM,OAAS,GACxC5jD,GAAQ,KACRykB,IAEF,MAAO,GAAGzkB,EAAK,QAAQ,CAAC,CAAC,IAAI4jD,EAAMn/B,CAAC,CAAC,EACvC,EAKao/B,GAAuBhjD,GAA2B,CAE7D,GAAIA,GAAS,OAAOA,GAAU,SAAU,CACtC,MAAMijD,EAAajjD,EAWnB,GAAIijD,EAAW,UAAU,MAAM,QAC7B,OAAOA,EAAW,SAAS,KAAK,QAIlC,GAAIA,EAAW,UAAU,MAAM,OAAQ,CACrC,MAAMC,EAAa,OAAO,OAAOD,EAAW,SAAS,KAAK,MAAM,EAAE,CAAC,EACnE,GAAI,MAAM,QAAQC,CAAU,GAAKA,EAAW,CAAC,EAC3C,OAAOA,EAAW,CAAC,CAEvB,CAGA,GAAID,EAAW,QACb,OAAOA,EAAW,OAEtB,CAGA,OAAIjjD,aAAiB,MACZA,EAAM,QAGR,QACT,EAKamjD,GAAeC,GACrBA,EACDA,EAAS,WAAW,QAAQ,EAAU,gBACtCA,EAAS,WAAW,QAAQ,EAAU,gBACtCA,EAAS,WAAW,QAAQ,EAAU,gBACtCA,IAAa,kBAA0B,cACvCA,EAAS,SAAS,MAAM,GAAKA,EAAS,SAAS,UAAU,EAAU,eACnEA,EAAS,SAAS,OAAO,GAAKA,EAAS,SAAS,aAAa,EAAU,gBACvEA,EAAS,SAAS,KAAK,GAAKA,EAAS,SAAS,YAAY,EAAU,iBACjE,UARe,UAcXp/C,GAAI,CAACvB,EAAawB,IAC7BnF,IAAQ,IAAI2D,EAAKwB,CAAM,GAAKxB,EClExB3D,GAAU,OAAe,OAwExB,SAASukD,GAAgB/6C,EAAwD,CACtF,KAAM,CACJ,mBAAAg7C,EACA,iBAAAC,EACA,WAAAC,EACA,SAAAC,EACA,QAAAzhD,EACA,qBAAA0hD,EACA,OAAA3hD,EACA,iBAAkB4hD,EAClB,QAAAC,EACA,WAAAC,EACA,aAAAC,EACA,UAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,SAAAC,EACA,UAAAC,EACA,mBAAAC,EACA,oBAAAC,EACA,aAAAC,CAAA,EACEj8C,EAGE,CAACk8C,EAAeC,CAAgB,EAAI1jD,EAAAA,SAAuB+iD,CAAY,EACvE,CAACY,EAAcC,CAAe,EAAI5jD,EAAAA,SAAwB,CAAA,CAAE,EAC5D,CAAC6jD,EAAYC,CAAa,EAAI9jD,EAAAA,SAAS,EAAK,EAC5CsB,EAAW3B,EAAAA,OAAyB,IAAI,EACxCokD,EAAmBpkD,EAAAA,OAAO,CAAC,EAE3BqkD,EAAgBrkD,EAAAA,OAA6B,IAAI,GAAK,EAEtDskD,EAAmBtkD,EAAAA,OAAgC,IAAI,GAAK,EAG5D,CAACukD,EAAmBC,CAAoB,EAAInkD,EAAAA,SAAS,EAAK,EAC1D,CAACokD,EAAcC,CAAe,EAAIrkD,EAAAA,SAA4B,IAAI,EAClE,CAACskD,EAAYC,CAAa,EAAIvkD,EAAAA,SAAS,EAAK,EAE5CwkD,EAAkB7kD,EAAAA,OAAO,EAAK,EAE9B,CAAC8kD,EAAaC,CAAc,EAAI1kD,EAAAA,SAA8B,CAAA,CAAE,EAEhE2kD,EAAsBhlD,EAAAA,OAAqBojD,CAAY,EAGvD,CAAC6B,EAAaC,CAAc,EAAI7kD,EAAAA,SAAS,EAAK,EAC9C,CAAC8kD,GAAmBC,EAAoB,EAAI/kD,EAAAA,SAAS,CAAC,EAEtDglD,GAAgBrlD,EAAAA,OAAO,CAAC,EAExB,CAACslD,EAAwBC,EAAyB,EAAIllD,EAAAA,SAA8B,IAAI,GAAK,EAE7FmlD,GAA4BxlD,EAAAA,OAA4B,IAAI,GAAK,EAGvEM,EAAAA,UAAU,IAAM,CACdgjD,IAAgBU,CAAY,CAC9B,EAAG,CAACA,EAAcV,CAAa,CAAC,EAGhC,MAAMmC,GAAqBtgD,EAAAA,QAAQ,IAAM,CACvC,MAAMY,EAAOi/C,EAAoB,QAEjC,OAAIj/C,IAASq9C,EAAqBr9C,EAE9BA,EAAK,SAAWq9C,EAAa,QAC/B4B,EAAoB,QAAU5B,EACvBA,GAGLr9C,EAAK,SAAW,GAAKq9C,EAAa,SAAW,EAAUr9C,EAE3Cq9C,EAAa,KAAK,CAACtG,GAAG55B,KAAM45B,GAAE,KAAO/2C,EAAKmd,EAAC,GAAG,EAAE,GAE9D8hC,EAAoB,QAAU5B,EACvBA,GAEFr9C,CACT,EAAG,CAACq9C,CAAY,CAAC,EAGjB9iD,EAAAA,UAAU,IAAM,CAEd,GAAIukD,EAAgB,QAClB,OAEF,MAAMa,EAAgBD,GAAmB,OACtCvjD,IAAS,CAACmiD,EAAc,QAAQ,IAAIniD,GAAK,EAAE,IAAM,CAACA,GAAK,MAAQ,CAACmiD,EAAc,QAAQ,IAAIniD,GAAK,IAAI,EAAA,EAIhGyjD,GAAa,IAAI,IAAID,EAAc,IAAK5I,IAAMA,GAAE,EAAE,CAAC,EACnD8I,GAAkB,MAAM,KAAKtB,EAAiB,QAAQ,OAAA,CAAQ,EAAE,OACnExH,IAAM,CAAC6I,GAAW,IAAI7I,GAAE,EAAE,GAAK,CAACuH,EAAc,QAAQ,IAAIvH,GAAE,EAAE,CAAA,EAGjEiH,EAAiB,CAAC,GAAG2B,EAAe,GAAGE,EAAe,CAAC,CACzD,EAAG,CAACH,EAAkB,CAAC,EAGvB,MAAMI,GAAgBrlD,EAAAA,YACpB,MAAO0B,GAA8B,CACnC,MAAM4jD,GAAkB,CACtB,UAAW7C,GAAoB,WAAa,EAC5C,iBAAkBA,GAAoB,kBAAoB,KAC1D,aAAc,EAAA,EAEhB,OAAO,MAAMhB,GAAiB//C,EAAM4jD,EAAe,CACrD,EACA,CAAC7C,CAAkB,CAAA,EAIf8C,GAAcvlD,EAAAA,YAClB,MAAOwlD,GAA4B,CACjC,MAAMC,GAAanC,EAAc,OAASE,EAAa,OACjDkC,GAAiB,KAAK,IAAI,EAAGnD,EAAWkD,EAAU,EAClDE,GAAa,MAAM,KAAKH,CAAa,EAAE,MAAM,EAAGE,EAAc,EAGpE,GAAIF,EAAc,OAASE,GAAgB,CACzC,MAAME,GAAW,MAAM,KAAKJ,CAAa,EAAE,MAAME,EAAc,EACzD9K,GAAU93C,GAAE,mCAAoC,CAAE,IAAKy/C,EAAU,EAEvES,IAAgBpI,GAASgL,GAAS,CAAC,GAAKJ,EAAc,CAAC,CAAC,CAC1D,CAEA,UAAW9jD,MAAQikD,GAAY,CAE7B,GAAIjkD,GAAK,KAAOZ,EAAU,KAAO,KAAM,CACrCkiD,IACE,IAAIthD,GAAK,IAAI,WAAWigD,GAAejgD,GAAK,IAAI,CAAC,eAAeZ,CAAO,cACvEY,EAAA,EAEF,QACF,CAGA,GAAIb,EAAQ,CACV,MAAMglD,GAAM,IAAMnkD,GAAK,KAAK,MAAM,GAAG,EAAE,IAAA,GAAO,YAAA,EAe9C,GAAI,CAdkBb,EAAO,MAAM,GAAG,EAAE,IAAKX,IAAMA,GAAE,KAAA,EAAO,YAAA,CAAa,EACxC,KAAM4lD,IAAa,CAElD,GAAIA,GAAS,SAAS,GAAG,EAAG,CAC1B,GAAIA,GAAS,SAAS,IAAI,EAAG,CAC3B,MAAMC,GAAaD,GAAS,MAAM,EAAG,EAAE,EACvC,OAAOpkD,GAAK,KAAK,YAAA,EAAc,WAAWqkD,GAAa,GAAG,CAC5D,CAEA,OAAOrkD,GAAK,KAAK,YAAA,IAAkBokD,EACrC,CAEA,OAAOD,KAAQC,EACjB,CAAC,EACgB,CACf9C,IAAgB,IAAIthD,GAAK,IAAI,4BAA4Bb,CAAM,IAAKa,EAAI,EACxE,QACF,CACF,CAEA,MAAMskD,GAA2B,CAC/B,GAAI,WAAW,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,OAAO,EAAG,CAAC,CAAC,GACpE,KAAAtkD,GACA,kBAAmBA,GAAK,KACxB,UAAWA,GAAK,KAChB,KAAMA,GAAK,KACX,eAAgBigD,GAAejgD,GAAK,IAAI,EACxC,OAAQ,UACR,SAAU,CAAA,EAWZ,GAPIA,GAAK,KAAK,WAAW,QAAQ,IAC/BskD,GAAY,QAAU,IAAI,gBAAgBtkD,EAAI,GAGhD+hD,EAAiBl+C,IAAS,CAAC,GAAGA,GAAMygD,EAAW,CAAC,EAG5CtkD,GAAK,KAAK,WAAW,QAAQ,GAAK+gD,EAAoB,CACxDgB,EAAiBl+C,IACfA,GAAK,IAAK+2C,IAAOA,GAAE,KAAO0J,GAAY,GAAK,CAAE,GAAG1J,GAAG,OAAQ,aAAA,EAAkBA,EAAE,CAAA,EAGjF,GAAI,CACF,MAAM2J,GAAiB,MAAMZ,GAAc3jD,EAAI,EAC/C+hD,EAAiBl+C,IACfA,GAAK,IAAK+2C,IACRA,GAAE,KAAO0J,GAAY,GACjB,CACE,GAAG1J,GACH,eAAA2J,GACA,KAAMA,GAAe,KACrB,eAAgBtE,GAAesE,GAAe,IAAI,EAClD,OAAQ,UACR,SAAU,CAAA,EAEZ3J,EAAA,CACN,CAEJ,MAAQ,CACNmH,EAAiBl+C,IACfA,GAAK,IAAK+2C,IACRA,GAAE,KAAO0J,GAAY,GACjB,CAAE,GAAG1J,GAAG,OAAQ,QAAS,MAAO,aAChCA,EAAA,CACN,CAEJ,CACF,CACF,CACF,EACA,CAACgH,EAAc,OAAQE,EAAa,OAAQjB,EAAUzhD,EAASD,EAAQ4hD,EAAoB4C,GAAerC,CAAa,CAAA,EAInHkD,GAAmBlmD,EAAAA,YACvB,MAAOgmD,GAAyD,CAC9D,MAAMrP,GAAW,IAAI,SAGfwP,GAAeH,EAAY,eAC7B,IAAI,KAAK,CAACA,EAAY,cAAc,EAAGA,EAAY,kBAAmB,CACpE,KAAMA,EAAY,SAAA,CACnB,EACDA,EAAY,KAEhBrP,GAAS,OAAO,OAAQwP,EAAY,EAEhC/D,GACFzL,GAAS,OAAO,sBAAuByL,CAAkB,EAEvDC,GACF1L,GAAS,OAAO,oBAAqB,OAAO0L,CAAgB,CAAC,EAE/D1L,GAAS,OAAO,aAAc2L,CAAU,EAExCI,EAAQ,QAAS0D,IAAW,CAC1BzP,GAAS,OAAO,aAAc,OAAOyP,EAAM,CAAC,CAC9C,CAAC,EAGG/C,GACF,OAAO,QAAQA,CAAY,EAAE,QAAQ,CAAC,CAAC9hD,GAAKtC,EAAK,IAAM,CACrD03C,GAAS,OAAOp1C,GAAKtC,EAAK,CAC5B,CAAC,EAGH,GAAI,CACF,MAAM23C,GAAW,MAAMh5C,GAAO,IAAI,KAAKilD,EAAU,OAAQlM,GAAU,CACjE,QAAS,CAAE,eAAgB,qBAAA,EAC3B,iBAAmB0P,IAAsD,CACvE,MAAMC,GAAW,KAAK,MAAOD,GAAc,OAAS,KAAQA,GAAc,OAAS,EAAE,EACrF5C,EAAiBl+C,IACfA,GAAK,IAAK+2C,IAAOA,GAAE,KAAO0J,EAAY,GAAK,CAAE,GAAG1J,GAAG,SAAAgK,EAAA,EAAahK,EAAE,CAAA,CAEtE,CAAA,CACD,EAID,OADmB1F,IAAU,MAAM,MAAQA,IAAU,IAEvD,OAAS93C,GAAgB,CAEvB,MAAMynD,GAAezE,GAAoBhjD,EAAK,EAC9C,MAAM,IAAI,MAAMynD,EAAY,CAC9B,CACF,EACA,CAACnE,EAAoBC,EAAkBC,EAAYI,EAASG,EAAU,MAAM,CAAA,EAIxE2D,GAAkBxmD,EAAAA,YAAY,SAAmC,CACrE,MAAMymD,EAAgBjD,EAAa,OAChClH,IAAMA,GAAE,SAAW,WAAaA,GAAE,SAAW,OAAA,EAGhD,GAAImK,EAAc,SAAW,EAC3B,MAAO,CAAA,EAGT,MAAMC,GAAoC,CAAA,EAEpCC,OAAuB,IACvBC,GAAc,CAAC,GAAGH,CAAa,EAE/BI,GAAe,SAAY,CAC/B,KAAOD,GAAY,OAAS,GAAKhD,EAAiB,QAAUpB,GAAsB,CAChF,MAAMwD,GAAcY,GAAY,MAAA,EAChChD,EAAiB,UAEjBH,EAAiBl+C,IACfA,GAAK,IAAK+2C,IAAOA,GAAE,KAAO0J,GAAY,GAAK,CAAE,GAAG1J,GAAG,OAAQ,YAAa,SAAU,CAAA,EAAMA,EAAE,CAAA,EAG5F,GAAI,CACF,MAAMwK,GAAa,MAAMZ,GAAiBF,EAAW,EACrD,GAAIc,GACFJ,GAAoB,KAAKI,EAAU,EAEnCH,GAAiB,IAAI,OAAOX,GAAY,EAAE,EAAG,OAAOc,GAAW,IAAI,CAAC,EAEpEhD,EAAiB,QAAQ,IAAIgD,GAAW,GAAIA,EAAU,EACtDrD,EAAiBl+C,IAASA,GAAK,OAAQ+2C,IAAMA,GAAE,KAAO0J,GAAY,EAAE,CAAC,EACrEzC,EAAkBh+C,IAAS,CAAC,GAAGA,GAAMuhD,EAAU,CAAC,EAIhDvC,EAAgBh/C,IAAS,CACvB,GAAIA,GAAK,SAAW,EAAG,OAAOA,GAC9B,MAAMwhD,GAAY,OAAOf,GAAY,EAAE,EAEvC,OADiBzgD,GAAK,KAAM2F,IAAO,OAAOA,EAAE,IAAM67C,EAAS,EAEpDxhD,GAAK,IAAK2F,IAAO,OAAOA,EAAE,IAAM67C,GAAY,OAAOD,GAAW,IAAI,EAAI57C,EAAE,EADzD3F,EAExB,CAAC,EAGGygD,GAAY,SACd,IAAI,gBAAgBA,GAAY,OAAO,MAEpC,CAEL,MAAMgB,GAAalkD,GAAE,oCAAoC,EACzD2gD,EAAiBl+C,IACfA,GAAK,IAAK+2C,IACRA,GAAE,KAAO0J,GAAY,GACjB,CAAE,GAAG1J,GAAG,OAAQ,QAAS,MAAO0K,IAChC1K,EAAA,CACN,EAEF0G,IACE,IAAIgD,GAAY,iBAAiB,KAAKgB,EAAU,GAChDhB,GAAY,IAAA,CAEhB,CACF,OAASlnD,GAAO,CACd,MAAMynD,GAAeznD,cAAiB,MAAQA,GAAM,QAAU,SAC9D2kD,EAAiBl+C,IACfA,GAAK,IAAK+2C,IACRA,GAAE,KAAO0J,GAAY,GAAK,CAAE,GAAG1J,GAAG,OAAQ,QAAS,MAAOiK,IAAiBjK,EAAA,CAC7E,EAEF0G,IAAgB,IAAIgD,GAAY,iBAAiB,KAAKO,EAAY,GAAIP,GAAY,IAAI,CACxF,QAAA,CACEpC,EAAiB,SACnB,CACF,CACF,EAGMqD,GAAU,MAAM,KAAK,IAAIzE,EAAsBiE,EAAc,MAAM,CAAC,EACvE,KAAK,IAAI,EACT,IAAI,IAAMI,IAAc,EAI3B,GAFA,MAAM,QAAQ,IAAII,EAAO,EAErBP,GAAoB,OAAS,IAC/B3D,IAAmB2D,EAAmB,EAMlC7D,EAAU,SAAWyB,EAAY,OAAS,GAAKpB,GAAW,CAC5D,MAAMgE,GAAc,CAAC,GAAG5D,EAAe,GAAGoD,EAAmB,EAGvDS,GAAe7C,EAAY,IAAKp5C,IACvBy7C,GAAiB,IAAI,OAAOz7C,EAAE,CAAC,GAC7BA,EAChB,EAEKk8C,GAAW,IAAI,IAAID,GAAa,IAAI,CAACj8C,GAAI+a,KAAQ,CAAC,OAAO/a,EAAE,EAAG+a,EAAG,CAAC,CAAC,EACnEohC,GAAU,CAAC,GAAGH,EAAW,EAC5B,KAAK,CAAChwB,GAAGC,KAAM,CACd,MAAMmwB,GAASF,GAAS,IAAI,OAAOlwB,GAAE,IAAI,CAAC,GAAKgwB,GAAY,OACrDK,GAASH,GAAS,IAAI,OAAOjwB,GAAE,IAAI,CAAC,GAAK+vB,GAAY,OAC3D,OAAOI,GAASC,EAClB,CAAC,EACA,IAAI,CAACl3C,GAAM4V,MAAS,CAAE,GAAG5V,GAAM,WAAY4V,GAAK,MAAOA,GAAM,GAAI,EAEpEi9B,EAAUmE,EAAO,CACnB,CAGF,OAAOX,EACT,EAAG,CAAClD,EAAchB,EAAsB0D,GAAkBnD,EAAkBC,EAAesB,EAAahB,EAAeJ,EAAWL,EAAU,OAAO,CAAC,EAGpJ/iD,EAAAA,UAAU,IAAM,CACd,GAAI,CAACqjD,EAAoB,OAEzB,MAAM1+B,EAAc7mB,GAAO,eAAe,GAAGulD,EAAoB,SAAY,CAE3E,MAAMuD,GAAsB,MAAMF,GAAA,EAClC,MAAO,CACL,oBAAAE,GACA,cAAApD,EACA,SAAU,CAAC,GAAGA,EAAe,GAAGoD,EAAmB,CAAA,CAEvD,CAAC,EAED,MAAO,IAAM,CACXjiC,EAAA,CACF,CACF,EAAG,CAAC0+B,EAAoBqD,GAAiBlD,CAAa,CAAC,EAGvDxjD,EAAAA,UAAU,IAAM,CACV6iD,GAAca,EAAa,KAAMlH,GAAMA,EAAE,SAAW,SAAS,GAC/DkK,GAAA,CAEJ,EAAG,CAAC7D,EAAYa,EAAcgD,EAAe,CAAC,EAG9C,MAAMgB,GAA0BxnD,EAAAA,YAC9B,MAAOqQ,GAAqB,CAC1B+zC,EAAc,EAAI,EAClB,GAAI,CAEF,GAAI/zC,EAAK,IAAMwyC,EAAU,OAAQ,CAC/B,MAAM4E,GAAY5E,EAAU,OAAO,QAAQ,MAAO,OAAOxyC,EAAK,EAAE,CAAC,EACjE,MAAMzS,GAAO,IAAI,OAAO6pD,EAAS,CACnC,CAEA,MAAMC,GAAUr3C,EAAK,MAAQA,EAAK,GAC9BA,EAAK,KACPwzC,EAAc,QAAQ,IAAIxzC,EAAK,EAAE,EACjCyzC,EAAiB,QAAQ,OAAOzzC,EAAK,EAAE,GAErCA,EAAK,MACPwzC,EAAc,QAAQ,IAAIxzC,EAAK,IAAI,EAErCkzC,EAAkBh+C,IAASA,GAAK,OAAQ+2C,KAAOA,GAAE,MAAQA,GAAE,MAAQoL,EAAO,CAAC,EAC3EzE,IAAW5yC,EAAK,MAAQA,EAAK,EAAE,EAC/B2zC,EAAqB,EAAK,EAC1BE,EAAgB,IAAI,CACtB,MAAQ,CACN,QAAQ,MAAM,YAAY,CAC5B,QAAA,CACEE,EAAc,EAAK,CACrB,CACF,EACA,CAACnB,EAAUJ,EAAU,MAAM,CAAA,EAIvB8E,GAAe3nD,EAAAA,YACnB,MAAOqQ,GAAmC,CACpC,SAAUA,EAER+yC,GAEFc,EAAgB7zC,CAAI,EACpB2zC,EAAqB,EAAI,GAGzB,MAAMwD,GAAwBn3C,CAAI,GAIhCA,EAAK,SACP,IAAI,gBAAgBA,EAAK,OAAO,EAElCozC,EAAiBl+C,IAASA,GAAK,OAAQ+2C,IAAMA,GAAE,KAAOjsC,EAAK,EAAE,CAAC,EAElE,EACA,CAAC+yC,EAAqBoE,EAAuB,CAAA,EAIzCI,GAAc5nD,cAAagmD,GAA6B,CAC5DvC,EAAiBl+C,IACfA,GAAK,IAAK+2C,IACRA,GAAE,KAAO0J,EAAY,GAAK,CAAE,GAAG1J,GAAG,OAAQ,UAAW,MAAO,QAAcA,EAAA,CAC5E,CAEJ,EAAG,CAAA,CAAE,EAGCuL,EAAgB7nD,EAAAA,YACpB,MAAO6I,GAAgD,CACrD,KAAM,CAAE,UAAAi/C,EAAA,EAAc,MAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACtB,CAAE,OAAA9X,GAAQ,KAAA+X,EAAA,EAASn/C,EACzB,GAAI,CAACm/C,IAAQ/X,GAAO,KAAO+X,GAAK,GAAI,OAIpC,MAAMC,GAAW,CAAC,GAAG3E,EAAe,GAAGE,CAAY,EACnD,IAAI0E,GACJ,GAAI5D,EAAY,SAAW,EACzB4D,GAAeD,OACV,CACL,MAAMb,GAAW,IAAI,IAAI9C,EAAY,IAAI,CAACp5C,GAAI+a,KAAQ,CAAC,OAAO/a,EAAE,EAAG+a,EAAG,CAAC,CAAC,EACxEiiC,GAAe,CAAC,GAAGD,EAAQ,EAAE,KAAK,CAAC/wB,GAAGC,KAAM,CAC1C,MAAMgxB,GAAO,SAAUjxB,GAAI,OAAOA,GAAE,IAAI,EAAI,OAAOA,GAAE,EAAE,EACjDkxB,GAAO,SAAUjxB,GAAI,OAAOA,GAAE,IAAI,EAAI,OAAOA,GAAE,EAAE,EACvD,OAAQiwB,GAAS,IAAIe,EAAI,GAAKF,GAAS,SAAWb,GAAS,IAAIgB,EAAI,GAAKH,GAAS,OACnF,CAAC,CACH,CAEA,MAAMI,GAAWH,GAAa,UAAW73C,IACvC,SAAUA,GAAOA,GAAK,OAAS4/B,GAAO,GAAK5/B,GAAK,KAAO4/B,GAAO,EAAA,EAE1DqY,GAAWJ,GAAa,UAAW73C,IACvC,SAAUA,GAAOA,GAAK,OAAS23C,GAAK,GAAK33C,GAAK,KAAO23C,GAAK,EAAA,EAGtDO,GAAYT,GAAUI,GAAcG,GAAUC,EAAQ,EAG5D/D,EAAegE,GAAU,IAAKl4C,IAAS,SAAUA,GAAOA,GAAK,KAAOA,GAAK,EAAE,CAAC,EAG5E,MAAMm4C,GAAcD,GAAU,OAAQl4C,IAA6B,SAAUA,EAAI,EAC3Eo4C,GAAaF,GAAU,OAAQl4C,IAA8B,EAAE,SAAUA,GAAK,EAGpFg0C,EAAgB,QAAU,GAE1Bd,EAAiBiF,EAAW,EAC5B/E,EAAgBgF,EAAU,EAG1B,MAAMC,GAAiBF,GAAY,IAAI,CAACn4C,GAAM4V,MAAS,CACrD,GAAG5V,GACH,WAAY4V,GACZ,MAAOA,GAAM,CAAA,EACb,EAGF,GAAIuiC,GAAY,OAAS,GAAK3F,EAAU,QAAS,CAC/C,MAAM8F,GAAYH,GAAY,IAAI,CAACn4C,GAAM0F,MAAW,CAClD,GAAI1F,GAAK,GACT,MAAO0F,GAAQ,CAAA,EACf,EAEF,GAAI,CACF,MAAM6gC,GAAW,MAAMh5C,GAAO,IAAI,MAAMilD,EAAU,QAAS,CAAE,MAAO8F,GAAW,EAC/E/qD,GAAO,MAAM,QAAQg5C,GAAS,OAAO,CACvC,OAAS93C,GAAgB,CACvB,MAAM87C,GAAU97C,cAAiB,MAAQA,GAAM,QAAUgE,GAAE,2BAA2B,EACtFlF,GAAO,MAAM,MAAMg9C,EAAO,CAC5B,CACF,CAGAsI,IAAYwF,EAAc,CAC5B,EACA,CAACpF,EAAeE,EAAcc,EAAazB,EAAU,QAASK,CAAS,CAAA,EAInE0F,GAAajkD,EAAAA,QACjB,IACE,CAAC,GAAG2+C,EAAe,GAAGE,CAAY,EAAE,OAAQnzC,GACtC,aAAcA,EAERA,EAAoB,SAGvBA,EAAK,WAAW,WAAW,QAAQ,GAAK,EAChD,EACH,CAACizC,EAAeE,CAAY,CAAA,EAIxBqF,GAAoB7oD,EAAAA,YACvBqQ,GAAmC,CAElC,MAAMy4C,GAAaF,GAAW,UAAWryB,IAEnC,SAAUlmB,GAAQ,SAAUkmB,GACvBA,GAAI,OAASlmB,EAAK,KAGvB,OAAQA,GAAQ,OAAQkmB,IAAO,EAAE,SAAUlmB,IAAS,EAAE,SAAUkmB,IAC3DA,GAAI,KAAOlmB,EAAK,GAElB,EACR,EACGy4C,KAAe,KAEjBjE,GAAc,SAAW,EACzBD,GAAqBkE,EAAU,EAC/BpE,EAAe,EAAI,EAEvB,EACA,CAACkE,EAAU,CAAA,EAIb9oD,EAAAA,UAAU,IAAM,CACd,IAAIipD,EAAY,GAmChB,OAjC8B,SAAY,CAExC,MAAMC,GAAqB1F,EAAc,OAAQhH,IAAMA,GAAE,QAAQ,EAG3D2M,GAAa,IAAI,IAAID,GAAmB,IAAK1M,IAAMA,GAAE,EAAE,CAAC,EAC9D,SAAW,CAACpxC,GAAI2K,EAAG,IAAKmvC,GAA0B,QAC3CiE,GAAW,IAAI/9C,EAAE,IACpB,IAAI,gBAAgB2K,EAAG,EACvBmvC,GAA0B,QAAQ,OAAO95C,EAAE,GAI/C,UAAWxJ,MAAQsnD,GAAoB,CACrC,GAAID,EAAW,MAEf,GAAI,CAAA/D,GAA0B,QAAQ,IAAItjD,GAAK,EAAE,EAEjD,GAAI,CACF,MAAM4wC,GAAO,MAAM10C,GAAO,IAAI,IAAI8D,GAAK,aAAc,CACnD,aAAc,MAAA,CACf,EACD,GAAI,CAACqnD,GAAazW,GAAM,CACtB,MAAMC,GAAY,IAAI,gBAAgBD,EAAI,EAC1C0S,GAA0B,QAAQ,IAAItjD,GAAK,GAAI6wC,EAAS,EACxDwS,GAA0B,IAAI,IAAIC,GAA0B,OAAO,CAAC,CACtE,CACF,OAASlmD,GAAO,CACd,QAAQ,MAAM,sCAAuCA,EAAK,CAC5D,CACF,CACF,GAEA,EAEO,IAAM,CACXiqD,EAAY,EACd,CACF,EAAG,CAACzF,CAAa,CAAC,EAGlBxjD,EAAAA,UAAU,IACD,IAAM,CACXklD,GAA0B,QAAQ,QAASnvC,GAAQ,IAAI,gBAAgBA,CAAG,CAAC,EAC3EmvC,GAA0B,QAAQ,MAAA,CACpC,EACC,CAAA,CAAE,EAGL,MAAMjS,GAAiB/yC,cAAY,MAAOqQ,GAAqB,CAC7D,KAAM,CAAE,qBAAAoiC,EAAA,EAAyB,MAAM,QAAA,QAAA,EAAA,KAAA,IAAAyW,EAAA,EACvC,MAAMzW,GAAqB,CACzB,IAAKpiC,EAAK,aACV,YAAaA,EAAK,aAClB,SAAUA,EAAK,kBACf,qBAAsB,EAAA,CACvB,CACH,EAAG,CAAA,CAAE,EAGC84C,GAAWxkD,EAAAA,QAAQ,IAAM,CAC7B,MAAMsjD,EAAW,CAAC,GAAG3E,EAAe,GAAGE,CAAY,EACnD,GAAIc,EAAY,SAAW,EAAG,OAAO2D,EAErC,MAAMb,GAAW,IAAI,IAAI9C,EAAY,IAAI,CAACp5C,GAAI+a,KAAQ,CAAC,OAAO/a,EAAE,EAAG+a,EAAG,CAAC,CAAC,EACxE,MAAO,CAAC,GAAGgiC,CAAQ,EAAE,KAAK,CAAC/wB,GAAGC,KAAM,CAClC,MAAMgxB,GAAO,SAAUjxB,GAAI,OAAOA,GAAE,IAAI,EAAI,OAAOA,GAAE,EAAE,EACjDkxB,GAAO,SAAUjxB,GAAI,OAAOA,GAAE,IAAI,EAAI,OAAOA,GAAE,EAAE,EACjDmwB,GAASF,GAAS,IAAIe,EAAI,GAAKF,EAAS,OACxCV,GAASH,GAAS,IAAIgB,EAAI,GAAKH,EAAS,OAC9C,OAAOX,GAASC,EAClB,CAAC,CACH,EAAG,CAACjE,EAAeE,EAAcc,CAAW,CAAC,EACvCmB,GAAa0D,GAAS,OACtBC,GAAW3D,GAAa,EACxB4D,GAAa5D,GAAalD,EAG1B+G,GAAQtpD,EAAAA,YAAY,IAAMyjD,EAAgB,CAAA,CAAE,EAAG,CAAA,CAAE,EACjD8F,GAAkBvpD,EAAAA,YAAY,IAAMwjD,EAAc,CAACA,CAAY,CAAC,EAEtE,MAAO,CAEL,cAAAF,EACA,aAAAE,EACA,WAAAE,EACA,cAAAC,EACA,WAAAQ,EAGA,WAAAsB,GACA,SAAA2D,GACA,WAAAC,GACA,SAAAF,GACA,WAAAP,GAGA,YAAArD,GACA,aAAAoC,GACA,YAAAC,GACA,gBAAApB,GACA,kBAAAqC,GACA,eAAA9V,GACA,cAAA8U,EAGA,SAAA1mD,EAGA,YAAAsjD,EACA,eAAAC,EACA,kBAAAC,GACA,cAAAE,GAGA,kBAAAd,EACA,qBAAAC,EACA,aAAAC,EACA,wBAAAuD,GAGA,uBAAA1C,EAGA,MAAAwE,GACA,gBAAAC,EAAA,CAEJ,CC1wBO,MAAMC,GAA4C,CAAC,CACxD,WAAA9F,EACA,WAAA2F,EACA,QAAAI,EACA,cAAA9F,EACA,SAAAxiD,EACA,OAAAN,EACA,SAAA0hD,EACA,QAAAzhD,EACA,SAAA/C,CACF,IAEI6H,EAAAA,KAACpH,EAAA,CACC,UAAW;AAAA;AAAA,UAGPklD,EACI,iDACA,sCACN;AAAA,QAEF,WAAaxjD,GAAM,CACjBA,EAAE,eAAA,EACEmpD,KAA0B,EAAI,CACpC,EACA,YAAa,IAAM1F,EAAc,EAAK,EACtC,OAASzjD,GAAM,CACbA,EAAE,eAAA,EACFyjD,EAAc,EAAK,EACf0F,GACFI,EAAQvpD,EAAE,aAAa,KAAK,CAEhC,EAEA,SAAA,CAAA3B,EAAAA,IAAC,QAAA,CACC,IAAK4C,EACL,KAAK,OACL,SAAQ,GACR,OAAAN,EACA,SAAWX,GAAMA,EAAE,OAAO,OAASupD,EAAQvpD,EAAE,OAAO,KAAK,EACzD,UAAU,QAAA,CAAA,EAIX,CAACnC,GACA6H,EAAAA,KAACpH,EAAA,CACC,UAAU,8FACV,QAAS,IAAM2C,EAAS,SAAS,MAAA,EAEjC,SAAA,CAAA5C,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,2EAAA,CAA4E,QACxFjsC,GAAA,CAAE,UAAU,2CACV,SAAApD,GAAE,0BAA0B,EAC/B,EACA8C,EAAAA,KAACM,GAAA,CAAE,UAAU,gDACV,SAAA,CAAApD,GAAE,0BAA2B,CAAE,SAAAy/C,EAAU,QAAAzhD,CAAA,CAAS,EAClDD,GAAU,KAAKA,CAAM,GAAA,CAAA,CACxB,CAAA,CAAA,CAAA,EAKH9C,CAAA,CAAA,CAAA,EChGP,SAAS2rD,IAAkB,CACzB,QAASvyC,EAAO,UAAU,OAAQwyC,EAAO,IAAI,MAAMxyC,CAAI,EAAGC,EAAO,EAAGA,EAAOD,EAAMC,IAC/EuyC,EAAKvyC,CAAI,EAAI,UAAUA,CAAI,EAG7B,OAAOzS,EAAAA,QAAQ,IAAMyc,GAAQ,CAC3BuoC,EAAK,QAAQvrD,GAAOA,EAAIgjB,CAAI,CAAC,CAC/B,EACAuoC,CAAI,CACN,CAGA,MAAMC,GAAY,OAAO,OAAW,KAAe,OAAO,OAAO,SAAa,KAAe,OAAO,OAAO,SAAS,cAAkB,IAEtI,SAASC,GAAS5wC,EAAS,CACzB,MAAM6wC,EAAgB,OAAO,UAAU,SAAS,KAAK7wC,CAAO,EAC5D,OAAO6wC,IAAkB,mBACzBA,IAAkB,iBACpB,CAEA,SAASC,GAAO3oC,EAAM,CACpB,MAAO,aAAcA,CACvB,CAEA,SAAS4oC,GAAUlhD,EAAQ,CACzB,IAAImhD,EAAuBC,EAE3B,OAAKphD,EAID+gD,GAAS/gD,CAAM,EACVA,EAGJihD,GAAOjhD,CAAM,IAIVmhD,GAAyBC,EAAyBphD,EAAO,gBAAkB,KAAO,OAASohD,EAAuB,cAAgB,KAAOD,EAHxI,OARA,MAYX,CAEA,SAASE,GAAW/oC,EAAM,CACxB,KAAM,CACJ,SAAAgpC,CACJ,EAAMJ,GAAU5oC,CAAI,EAClB,OAAOA,aAAgBgpC,CACzB,CAEA,SAAS7pB,GAAcnf,EAAM,CAC3B,OAAIyoC,GAASzoC,CAAI,EACR,GAGFA,aAAgB4oC,GAAU5oC,CAAI,EAAE,WACzC,CAEA,SAASipC,GAAajpC,EAAM,CAC1B,OAAOA,aAAgB4oC,GAAU5oC,CAAI,EAAE,UACzC,CAEA,SAAS+N,GAAiBrmB,EAAQ,CAChC,OAAKA,EAID+gD,GAAS/gD,CAAM,EACVA,EAAO,SAGXihD,GAAOjhD,CAAM,EAIdqhD,GAAWrhD,CAAM,EACZA,EAGLy3B,GAAcz3B,CAAM,GAAKuhD,GAAavhD,CAAM,EACvCA,EAAO,cAGT,SAXE,SARA,QAoBX,CAOA,MAAMwhD,GAA4BV,GAAYl5C,EAAAA,gBAAkB5Q,EAAAA,UAEhE,SAASyqD,GAASC,EAAS,CACzB,MAAMC,EAAajrD,EAAAA,OAAOgrD,CAAO,EACjC,OAAAF,GAA0B,IAAM,CAC9BG,EAAW,QAAUD,CACvB,CAAC,EACMxqD,EAAAA,YAAY,UAAY,CAC7B,QAASmX,EAAO,UAAU,OAAQpQ,EAAO,IAAI,MAAMoQ,CAAI,EAAGC,EAAO,EAAGA,EAAOD,EAAMC,IAC/ErQ,EAAKqQ,CAAI,EAAI,UAAUA,CAAI,EAG7B,OAAOqzC,EAAW,SAAW,KAAO,OAASA,EAAW,QAAQ,GAAG1jD,CAAI,CACzE,EAAG,CAAA,CAAE,CACP,CAEA,SAAS2jD,IAAc,CACrB,MAAMC,EAAcnrD,EAAAA,OAAO,IAAI,EACzBqZ,EAAM7Y,EAAAA,YAAY,CAACuyB,EAAUW,IAAa,CAC9Cy3B,EAAY,QAAU,YAAYp4B,EAAUW,CAAQ,CACtD,EAAG,CAAA,CAAE,EACCo2B,EAAQtpD,EAAAA,YAAY,IAAM,CAC1B2qD,EAAY,UAAY,OAC1B,cAAcA,EAAY,OAAO,EACjCA,EAAY,QAAU,KAE1B,EAAG,CAAA,CAAE,EACL,MAAO,CAAC9xC,EAAKywC,CAAK,CACpB,CAEA,SAASsB,GAAe3rD,EAAO4rD,EAAc,CACvCA,IAAiB,SACnBA,EAAe,CAAC5rD,CAAK,GAGvB,MAAM6rD,EAAWtrD,EAAAA,OAAOP,CAAK,EAC7B,OAAAqrD,GAA0B,IAAM,CAC1BQ,EAAS,UAAY7rD,IACvB6rD,EAAS,QAAU7rD,EAEvB,EAAG4rD,CAAY,EACRC,CACT,CAEA,SAASC,GAAYt7B,EAAUo7B,EAAc,CAC3C,MAAMC,EAAWtrD,EAAAA,OAAM,EACvB,OAAOmF,EAAAA,QAAQ,IAAM,CACnB,MAAMrE,EAAWmvB,EAASq7B,EAAS,OAAO,EAC1C,OAAAA,EAAS,QAAUxqD,EACZA,CACT,EACA,CAAC,GAAGuqD,CAAY,CAAC,CACnB,CAEA,SAASG,GAAWjsD,EAAU,CAC5B,MAAMksD,EAAkBV,GAASxrD,CAAQ,EACnCqiB,EAAO5hB,EAAAA,OAAO,IAAI,EAClB0rD,EAAalrD,EAAAA,YAAYiZ,GAAW,CACpCA,IAAYmI,EAAK,SACgB6pC,IAAgBhyC,EAASmI,EAAK,OAAO,EAG1EA,EAAK,QAAUnI,CACjB,EACA,EAAE,EACF,MAAO,CAACmI,EAAM8pC,CAAU,CAC1B,CAEA,SAASC,GAAYlsD,EAAO,CAC1B,MAAMb,EAAMoB,EAAAA,OAAM,EAClBM,OAAAA,EAAAA,UAAU,IAAM,CACd1B,EAAI,QAAUa,CAChB,EAAG,CAACA,CAAK,CAAC,EACHb,EAAI,OACb,CAEA,IAAIgtD,GAAM,CAAA,EACV,SAASC,GAAY5hC,EAAQxqB,EAAO,CAClC,OAAO0F,EAAAA,QAAQ,IAAM,CACnB,GAAI1F,EACF,OAAOA,EAGT,MAAMiM,EAAKkgD,GAAI3hC,CAAM,GAAK,KAAO,EAAI2hC,GAAI3hC,CAAM,EAAI,EACnD,OAAA2hC,GAAI3hC,CAAM,EAAIve,EACPue,EAAS,IAAMve,CACxB,EAAG,CAACue,EAAQxqB,CAAK,CAAC,CACpB,CAEA,SAASqsD,GAAmBC,EAAU,CACpC,OAAO,SAAUlyC,EAAQ,CACvB,QAASlC,EAAO,UAAU,OAAQq0C,EAAc,IAAI,MAAMr0C,EAAO,EAAIA,EAAO,EAAI,CAAC,EAAGC,EAAO,EAAGA,EAAOD,EAAMC,IACzGo0C,EAAYp0C,EAAO,CAAC,EAAI,UAAUA,CAAI,EAGxC,OAAOo0C,EAAY,OAAO,CAACC,EAAaC,IAAe,CACrD,MAAMv7C,EAAU,OAAO,QAAQu7C,CAAU,EAEzC,SAAW,CAACnqD,EAAKoqD,CAAe,IAAKx7C,EAAS,CAC5C,MAAMlR,EAAQwsD,EAAYlqD,CAAG,EAEzBtC,GAAS,OACXwsD,EAAYlqD,CAAG,EAAItC,EAAQssD,EAAWI,EAE1C,CAEA,OAAOF,CACT,EAAG,CAAE,GAAGpyC,CACZ,CAAK,CACH,CACF,CAEA,MAAMuyC,GAAmBN,GAAmB,CAAC,EACvCO,GAAwBP,GAAmB,EAAE,EAEnD,SAASQ,GAA+BjjD,EAAO,CAC7C,MAAO,YAAaA,GAAS,YAAaA,CAC5C,CAEA,SAASkjD,GAAgBljD,EAAO,CAC9B,GAAI,CAACA,EACH,MAAO,GAGT,KAAM,CACJ,cAAAmjD,CACJ,EAAMhC,GAAUnhD,EAAM,MAAM,EAC1B,OAAOmjD,GAAiBnjD,aAAiBmjD,CAC3C,CAEA,SAASC,GAAapjD,EAAO,CAC3B,GAAI,CAACA,EACH,MAAO,GAGT,KAAM,CACJ,WAAAqjD,CACJ,EAAMlC,GAAUnhD,EAAM,MAAM,EAC1B,OAAOqjD,GAAcrjD,aAAiBqjD,CACxC,CAMA,SAASC,GAAoBtjD,EAAO,CAClC,GAAIojD,GAAapjD,CAAK,GACpB,GAAIA,EAAM,SAAWA,EAAM,QAAQ,OAAQ,CACzC,KAAM,CACJ,QAASmO,EACT,QAASyb,CACjB,EAAU5pB,EAAM,QAAQ,CAAC,EACnB,MAAO,CACL,EAAAmO,EACA,EAAAyb,CACR,CACI,SAAW5pB,EAAM,gBAAkBA,EAAM,eAAe,OAAQ,CAC9D,KAAM,CACJ,QAASmO,EACT,QAASyb,CACjB,EAAU5pB,EAAM,eAAe,CAAC,EAC1B,MAAO,CACL,EAAAmO,EACA,EAAAyb,CACR,CACI,EAGF,OAAIq5B,GAA+BjjD,CAAK,EAC/B,CACL,EAAGA,EAAM,QACT,EAAGA,EAAM,OACf,EAGS,IACT,CAEA,MAAMujD,GAAmB,OAAO,OAAO,CACrC,UAAW,CACT,SAASC,EAAW,CAClB,GAAI,CAACA,EACH,OAGF,KAAM,CACJ,EAAAr1C,EACA,EAAAyb,CACR,EAAU45B,EACJ,MAAO,gBAAkBr1C,EAAI,KAAK,MAAMA,CAAC,EAAI,GAAK,QAAUyb,EAAI,KAAK,MAAMA,CAAC,EAAI,GAAK,QACvF,CAEJ,EACE,MAAO,CACL,SAAS45B,EAAW,CAClB,GAAI,CAACA,EACH,OAGF,KAAM,CACJ,OAAAC,EACA,OAAAC,CACR,EAAUF,EACJ,MAAO,UAAYC,EAAS,YAAcC,EAAS,GACrD,CAEJ,EACE,UAAW,CACT,SAASF,EAAW,CAClB,GAAKA,EAIL,MAAO,CAACD,GAAI,UAAU,SAASC,CAAS,EAAGD,GAAI,MAAM,SAASC,CAAS,CAAC,EAAE,KAAK,GAAG,CACpF,CAEJ,EACE,WAAY,CACV,SAASG,EAAM,CACb,GAAI,CACF,SAAAjzC,EACA,SAAA2Z,EACA,OAAAC,CACR,EAAUq5B,EACJ,OAAOjzC,EAAW,IAAM2Z,EAAW,MAAQC,CAC7C,CAEJ,CACA,CAAC,EAEKs5B,GAAW,yIACjB,SAASC,GAAuBzzC,EAAS,CACvC,OAAIA,EAAQ,QAAQwzC,EAAQ,EACnBxzC,EAGFA,EAAQ,cAAcwzC,EAAQ,CACvC,CCvUA,MAAME,GAAe,CACnB,QAAS,MACX,EACA,SAASC,GAAWJ,EAAM,CACxB,GAAI,CACF,GAAAthD,EACA,MAAAjM,CACJ,EAAMutD,EACJ,OAAO/tD,EAAM,cAAc,MAAO,CAChC,GAAIyM,EACJ,MAAOyhD,EACX,EAAK1tD,CAAK,CACV,CAEA,SAAS4tD,GAAWL,EAAM,CACxB,GAAI,CACF,GAAAthD,EACA,aAAA4hD,EACA,aAAAC,EAAe,WACnB,EAAMP,EAEJ,MAAMQ,EAAiB,CACrB,SAAU,QACV,IAAK,EACL,KAAM,EACN,MAAO,EACP,OAAQ,EACR,OAAQ,GACR,OAAQ,EACR,QAAS,EACT,SAAU,SACV,KAAM,gBACN,SAAU,cACV,WAAY,QAChB,EACE,OAAOvuD,EAAM,cAAc,MAAO,CAChC,GAAIyM,EACJ,MAAO8hD,EACP,KAAM,SACN,YAAaD,EACb,cAAe,EACnB,EAAKD,CAAY,CACjB,CAEA,SAASG,IAAkB,CACzB,KAAM,CAACH,EAAcI,CAAe,EAAIrtD,EAAAA,SAAS,EAAE,EAMnD,MAAO,CACL,SANeG,EAAAA,YAAYf,GAAS,CAChCA,GAAS,MACXiuD,EAAgBjuD,CAAK,CAEzB,EAAG,CAAA,CAAE,EAGH,aAAA6tD,CACJ,CACA,CCpDA,MAAMK,GAAiCtR,EAAAA,cAAc,IAAI,EAEzD,SAASuR,GAAc76B,EAAU,CAC/B,MAAM86B,EAAmBrR,EAAAA,WAAWmR,EAAiB,EACrDrtD,EAAAA,UAAU,IAAM,CACd,GAAI,CAACutD,EACH,MAAM,IAAI,MAAM,8DAA8D,EAIhF,OADoBA,EAAiB96B,CAAQ,CAE/C,EAAG,CAACA,EAAU86B,CAAgB,CAAC,CACjC,CAEA,SAASC,IAAwB,CAC/B,KAAM,CAACr4B,CAAS,EAAIp1B,EAAAA,SAAS,IAAM,IAAI,GAAK,EACtCwtD,EAAmBrtD,EAAAA,YAAYuyB,IACnC0C,EAAU,IAAI1C,CAAQ,EACf,IAAM0C,EAAU,OAAO1C,CAAQ,GACrC,CAAC0C,CAAS,CAAC,EAYd,MAAO,CAXUj1B,EAAAA,YAAYwsD,GAAQ,CACnC,GAAI,CACF,KAAArtD,EACA,MAAA0J,CACN,EAAQ2jD,EACJv3B,EAAU,QAAQ1C,GAAY,CAC5B,IAAIg7B,EAEJ,OAAQA,EAAiBh7B,EAASpzB,CAAI,IAAM,KAAO,OAASouD,EAAe,KAAKh7B,EAAU1pB,CAAK,CACjG,CAAC,CACH,EAAG,CAACosB,CAAS,CAAC,EACIo4B,CAAgB,CACpC,CAEA,MAAMG,GAAkC,CACtC,UAAW;AAAA;AAAA;AAAA;AAAA,GACb,EACMC,GAAuB,CAC3B,YAAYjB,EAAM,CAChB,GAAI,CACF,OAAAvc,CACN,EAAQuc,EACJ,MAAO,4BAA8Bvc,EAAO,GAAK,GACnD,EAEA,WAAWyd,EAAO,CAChB,GAAI,CACF,OAAAzd,EACA,KAAA+X,CACN,EAAQ0F,EAEJ,OAAI1F,EACK,kBAAoB/X,EAAO,GAAK,kCAAoC+X,EAAK,GAAK,IAGhF,kBAAoB/X,EAAO,GAAK,sCACzC,EAEA,UAAU0d,EAAO,CACf,GAAI,CACF,OAAA1d,EACA,KAAA+X,CACN,EAAQ2F,EAEJ,OAAI3F,EACK,kBAAoB/X,EAAO,GAAK,oCAAsC+X,EAAK,GAG7E,kBAAoB/X,EAAO,GAAK,eACzC,EAEA,aAAa2d,EAAO,CAClB,GAAI,CACF,OAAA3d,CACN,EAAQ2d,EACJ,MAAO,0CAA4C3d,EAAO,GAAK,eACjE,CAEF,EAEA,SAAS4d,GAAcrB,EAAM,CAC3B,GAAI,CACF,cAAAsB,EAAgBL,GAChB,UAAArf,EACA,wBAAA2f,EACA,yBAAAC,EAA2BR,EAC/B,EAAMhB,EACJ,KAAM,CACJ,SAAAyB,EACA,aAAAnB,CACJ,EAAMG,GAAe,EACbiB,EAAe7C,GAAY,eAAe,EAC1C,CAAC5pB,EAASC,CAAU,EAAI7hC,EAAAA,SAAS,EAAK,EA+D5C,GA9DAC,EAAAA,UAAU,IAAM,CACd4hC,EAAW,EAAI,CACjB,EAAG,CAAA,CAAE,EACL0rB,GAAczoD,EAAAA,QAAQ,KAAO,CAC3B,YAAY+oD,EAAO,CACjB,GAAI,CACF,OAAAzd,CACR,EAAUyd,EACJO,EAASH,EAAc,YAAY,CACjC,OAAA7d,CACR,CAAO,CAAC,CACJ,EAEA,WAAW0d,EAAO,CAChB,GAAI,CACF,OAAA1d,EACA,KAAA+X,CACR,EAAU2F,EAEAG,EAAc,YAChBG,EAASH,EAAc,WAAW,CAChC,OAAA7d,EACA,KAAA+X,CACV,CAAS,CAAC,CAEN,EAEA,WAAW4F,EAAO,CAChB,GAAI,CACF,OAAA3d,EACA,KAAA+X,CACR,EAAU4F,EACJK,EAASH,EAAc,WAAW,CAChC,OAAA7d,EACA,KAAA+X,CACR,CAAO,CAAC,CACJ,EAEA,UAAUmG,EAAO,CACf,GAAI,CACF,OAAAle,EACA,KAAA+X,CACR,EAAUmG,EACJF,EAASH,EAAc,UAAU,CAC/B,OAAA7d,EACA,KAAA+X,CACR,CAAO,CAAC,CACJ,EAEA,aAAaoG,EAAO,CAClB,GAAI,CACF,OAAAne,EACA,KAAA+X,CACR,EAAUoG,EACJH,EAASH,EAAc,aAAa,CAClC,OAAA7d,EACA,KAAA+X,CACR,CAAO,CAAC,CACJ,CAEJ,GAAM,CAACiG,EAAUH,CAAa,CAAC,CAAC,EAE1B,CAACrsB,EACH,OAAO,KAGT,MAAM4sB,EAAS5vD,EAAM,cAAcA,EAAM,SAAU,KAAMA,EAAM,cAAcmuD,GAAY,CACvF,GAAImB,EACJ,MAAOC,EAAyB,SACpC,CAAG,EAAGvvD,EAAM,cAAcouD,GAAY,CAClC,GAAIqB,EACJ,aAAcpB,CAClB,CAAG,CAAC,EACF,OAAO1e,EAAY9kC,GAAAA,aAAa+kD,EAAQjgB,CAAS,EAAIigB,CACvD,CAEA,IAAIC,IAEH,SAAUA,EAAQ,CACjBA,EAAO,UAAe,YACtBA,EAAO,SAAc,WACrBA,EAAO,QAAa,UACpBA,EAAO,WAAgB,aACvBA,EAAO,SAAc,WACrBA,EAAO,kBAAuB,oBAC9BA,EAAO,qBAA0B,uBACjCA,EAAO,oBAAyB,qBAClC,GAAGA,KAAWA,GAAS,CAAA,EAAG,EAE1B,SAASC,IAAO,CAAC,CAEjB,SAASC,GAAUC,EAAQrnD,EAAS,CAClC,OAAOzC,EAAAA,QAAQ,KAAO,CACpB,OAAA8pD,EACA,QAASrnD,GAA4B,CAAA,CACzC,GACE,CAACqnD,EAAQrnD,CAAO,CAAC,CACnB,CAEA,SAASwtB,IAAa,CACpB,QAASzd,EAAO,UAAU,OAAQu3C,EAAU,IAAI,MAAMv3C,CAAI,EAAGC,EAAO,EAAGA,EAAOD,EAAMC,IAClFs3C,EAAQt3C,CAAI,EAAI,UAAUA,CAAI,EAGhC,OAAOzS,EAAAA,QAAQ,IAAM,CAAC,GAAG+pD,CAAO,EAAE,OAAOD,GAAUA,GAAU,IAAI,EACjE,CAAC,GAAGC,CAAO,CAAC,CACd,CAEA,MAAMC,GAAkC,OAAO,OAAO,CACpD,EAAG,EACH,EAAG,CACL,CAAC,EAKD,SAASC,GAAgBC,EAAIC,EAAI,CAC/B,OAAO,KAAK,KAAK,KAAK,IAAID,EAAG,EAAIC,EAAG,EAAG,CAAC,EAAI,KAAK,IAAID,EAAG,EAAIC,EAAG,EAAG,CAAC,CAAC,CACtE,CAmBA,SAASC,GAAkBvC,EAAMkB,EAAO,CACtC,GAAI,CACF,KAAM,CACJ,MAAOx2B,CACb,CACA,EAAMs1B,EACA,CACF,KAAM,CACJ,MAAOr1B,CACb,CACA,EAAMu2B,EACJ,OAAOx2B,EAAIC,CACb,CAKA,SAAS63B,GAAmBrB,EAAOC,EAAO,CACxC,GAAI,CACF,KAAM,CACJ,MAAO12B,CACb,CACA,EAAMy2B,EACA,CACF,KAAM,CACJ,MAAOx2B,CACb,CACA,EAAMy2B,EACJ,OAAOz2B,EAAID,CACb,CAMA,SAAS+3B,GAAmBd,EAAO,CACjC,GAAI,CACF,KAAAnnB,EACA,IAAAC,EACA,OAAA/B,EACA,MAAA5vB,CACJ,EAAM64C,EACJ,MAAO,CAAC,CACN,EAAGnnB,EACH,EAAGC,CACP,EAAK,CACD,EAAGD,EAAO1xB,EACV,EAAG2xB,CACP,EAAK,CACD,EAAGD,EACH,EAAGC,EAAM/B,CACb,EAAK,CACD,EAAG8B,EAAO1xB,EACV,EAAG2xB,EAAM/B,CACb,CAAG,CACH,CACA,SAASgqB,GAAkBC,EAAY51C,EAAU,CAC/C,GAAI,CAAC41C,GAAcA,EAAW,SAAW,EACvC,OAAO,KAGT,KAAM,CAACC,CAAc,EAAID,EACzB,OAAkBC,EAAe71C,CAAQ,CAC3C,CAMA,SAAS81C,GAAkB5mD,EAAMu+B,EAAMC,EAAK,CAC1C,OAAID,IAAS,SACXA,EAAOv+B,EAAK,MAGVw+B,IAAQ,SACVA,EAAMx+B,EAAK,KAGN,CACL,EAAGu+B,EAAOv+B,EAAK,MAAQ,GACvB,EAAGw+B,EAAMx+B,EAAK,OAAS,EAC3B,CACA,CAOA,MAAM6mD,GAAgB9C,GAAQ,CAC5B,GAAI,CACF,cAAA+C,EACA,eAAAC,EACA,oBAAAC,CACJ,EAAMjD,EACJ,MAAMkD,EAAaL,GAAkBE,EAAeA,EAAc,KAAMA,EAAc,GAAG,EACnFJ,EAAa,CAAA,EAEnB,UAAWQ,KAAsBF,EAAqB,CACpD,KAAM,CACJ,GAAAvkD,CACN,EAAQykD,EACElnD,EAAO+mD,EAAe,IAAItkD,CAAE,EAElC,GAAIzC,EAAM,CACR,MAAMmnD,EAAchB,GAAgBS,GAAkB5mD,CAAI,EAAGinD,CAAU,EACvEP,EAAW,KAAK,CACd,GAAAjkD,EACA,KAAM,CACJ,mBAAAykD,EACA,MAAOC,CACjB,CACA,CAAO,CACH,CACF,CAEA,OAAOT,EAAW,KAAKJ,EAAiB,CAC1C,EAOMc,GAAiBrD,GAAQ,CAC7B,GAAI,CACF,cAAA+C,EACA,eAAAC,EACA,oBAAAC,CACJ,EAAMjD,EACJ,MAAMsD,EAAUb,GAAmBM,CAAa,EAC1CJ,EAAa,CAAA,EAEnB,UAAWQ,KAAsBF,EAAqB,CACpD,KAAM,CACJ,GAAAvkD,CACN,EAAQykD,EACElnD,EAAO+mD,EAAe,IAAItkD,CAAE,EAElC,GAAIzC,EAAM,CACR,MAAMsnD,EAAcd,GAAmBxmD,CAAI,EACrCunD,EAAYF,EAAQ,OAAO,CAACrE,EAAawE,EAAQl6C,IAC9C01C,EAAcmD,GAAgBmB,EAAYh6C,CAAK,EAAGk6C,CAAM,EAC9D,CAAC,EACEC,EAAoB,QAAQF,EAAY,GAAG,QAAQ,CAAC,CAAC,EAC3Db,EAAW,KAAK,CACd,GAAAjkD,EACA,KAAM,CACJ,mBAAAykD,EACA,MAAOO,CACjB,CACA,CAAO,CACH,CACF,CAEA,OAAOf,EAAW,KAAKJ,EAAiB,CAC1C,EAMA,SAASoB,GAAqBjgD,EAAOpH,EAAQ,CAC3C,MAAMm+B,EAAM,KAAK,IAAIn+B,EAAO,IAAKoH,EAAM,GAAG,EACpC82B,EAAO,KAAK,IAAIl+B,EAAO,KAAMoH,EAAM,IAAI,EACvCkgD,EAAQ,KAAK,IAAItnD,EAAO,KAAOA,EAAO,MAAOoH,EAAM,KAAOA,EAAM,KAAK,EACrEmgD,EAAS,KAAK,IAAIvnD,EAAO,IAAMA,EAAO,OAAQoH,EAAM,IAAMA,EAAM,MAAM,EACtEoF,EAAQ86C,EAAQppB,EAChB9B,EAASmrB,EAASppB,EAExB,GAAID,EAAOopB,GAASnpB,EAAMopB,EAAQ,CAChC,MAAMC,EAAaxnD,EAAO,MAAQA,EAAO,OACnCynD,EAAYrgD,EAAM,MAAQA,EAAM,OAChCsgD,EAAmBl7C,EAAQ4vB,EAC3BurB,EAAoBD,GAAoBF,EAAaC,EAAYC,GACvE,OAAO,OAAOC,EAAkB,QAAQ,CAAC,CAAC,CAC5C,CAGA,MAAO,EACT,CAMA,MAAMC,GAAmBlE,GAAQ,CAC/B,GAAI,CACF,cAAA+C,EACA,eAAAC,EACA,oBAAAC,CACJ,EAAMjD,EACJ,MAAM2C,EAAa,CAAA,EAEnB,UAAWQ,KAAsBF,EAAqB,CACpD,KAAM,CACJ,GAAAvkD,CACN,EAAQykD,EACElnD,EAAO+mD,EAAe,IAAItkD,CAAE,EAElC,GAAIzC,EAAM,CACR,MAAMgoD,EAAoBN,GAAqB1nD,EAAM8mD,CAAa,EAE9DkB,EAAoB,GACtBtB,EAAW,KAAK,CACd,GAAAjkD,EACA,KAAM,CACJ,mBAAAykD,EACA,MAAOc,CACnB,CACA,CAAS,CAEL,CACF,CAEA,OAAOtB,EAAW,KAAKH,EAAkB,CAC3C,EA+DA,SAAS2B,GAAYtE,EAAWuE,EAAOC,EAAO,CAC5C,MAAO,CAAE,GAAGxE,EACV,OAAQuE,GAASC,EAAQD,EAAM,MAAQC,EAAM,MAAQ,EACrD,OAAQD,GAASC,EAAQD,EAAM,OAASC,EAAM,OAAS,CAC3D,CACA,CAEA,SAASC,GAAaF,EAAOC,EAAO,CAClC,OAAOD,GAASC,EAAQ,CACtB,EAAGD,EAAM,KAAOC,EAAM,KACtB,EAAGD,EAAM,IAAMC,EAAM,GACzB,EAAMlC,EACN,CAEA,SAASoC,GAAuBxF,EAAU,CACxC,OAAO,SAA0B9iD,EAAM,CACrC,QAAS0O,EAAO,UAAU,OAAQq0C,EAAc,IAAI,MAAMr0C,EAAO,EAAIA,EAAO,EAAI,CAAC,EAAGC,EAAO,EAAGA,EAAOD,EAAMC,IACzGo0C,EAAYp0C,EAAO,CAAC,EAAI,UAAUA,CAAI,EAGxC,OAAOo0C,EAAY,OAAO,CAACxmD,EAAK0mD,KAAgB,CAAE,GAAG1mD,EACnD,IAAKA,EAAI,IAAMumD,EAAWG,EAAW,EACrC,OAAQ1mD,EAAI,OAASumD,EAAWG,EAAW,EAC3C,KAAM1mD,EAAI,KAAOumD,EAAWG,EAAW,EACvC,MAAO1mD,EAAI,MAAQumD,EAAWG,EAAW,CAC/C,GAAQ,CAAE,GAAGjjD,CACb,CAAK,CACH,CACF,CACA,MAAMuoD,GAA+BD,GAAuB,CAAC,EAE7D,SAASE,GAAe5E,EAAW,CACjC,GAAIA,EAAU,WAAW,WAAW,EAAG,CACrC,MAAM6E,EAAiB7E,EAAU,MAAM,EAAG,EAAE,EAAE,MAAM,IAAI,EACxD,MAAO,CACL,EAAG,CAAC6E,EAAe,EAAE,EACrB,EAAG,CAACA,EAAe,EAAE,EACrB,OAAQ,CAACA,EAAe,CAAC,EACzB,OAAQ,CAACA,EAAe,CAAC,CAC/B,CACE,SAAW7E,EAAU,WAAW,SAAS,EAAG,CAC1C,MAAM6E,EAAiB7E,EAAU,MAAM,EAAG,EAAE,EAAE,MAAM,IAAI,EACxD,MAAO,CACL,EAAG,CAAC6E,EAAe,CAAC,EACpB,EAAG,CAACA,EAAe,CAAC,EACpB,OAAQ,CAACA,EAAe,CAAC,EACzB,OAAQ,CAACA,EAAe,CAAC,CAC/B,CACE,CAEA,OAAO,IACT,CAEA,SAASC,GAAiB1oD,EAAM4jD,EAAW+E,EAAiB,CAC1D,MAAMC,EAAkBJ,GAAe5E,CAAS,EAEhD,GAAI,CAACgF,EACH,OAAO5oD,EAGT,KAAM,CACJ,OAAA6jD,EACA,OAAAC,EACA,EAAG+E,EACH,EAAGC,CACP,EAAMF,EACEr6C,EAAIvO,EAAK,KAAO6oD,GAAc,EAAIhF,GAAU,WAAW8E,CAAe,EACtE3+B,EAAIhqB,EAAK,IAAM8oD,GAAc,EAAIhF,GAAU,WAAW6E,EAAgB,MAAMA,EAAgB,QAAQ,GAAG,EAAI,CAAC,CAAC,EAC7GtU,EAAIwP,EAAS7jD,EAAK,MAAQ6jD,EAAS7jD,EAAK,MACxCi0C,EAAI6P,EAAS9jD,EAAK,OAAS8jD,EAAS9jD,EAAK,OAC/C,MAAO,CACL,MAAOq0C,EACP,OAAQJ,EACR,IAAKjqB,EACL,MAAOzb,EAAI8lC,EACX,OAAQrqB,EAAIiqB,EACZ,KAAM1lC,CACV,CACA,CAEA,MAAMw6C,GAAiB,CACrB,gBAAiB,EACnB,EAKA,SAASC,GAAcx4C,EAAS7R,EAAS,CACnCA,IAAY,SACdA,EAAUoqD,IAGZ,IAAI/oD,EAAOwQ,EAAQ,sBAAqB,EAExC,GAAI7R,EAAQ,gBAAiB,CAC3B,KAAM,CACJ,UAAAilD,EACA,gBAAA+E,CACN,EAAQpH,GAAU/wC,CAAO,EAAE,iBAAiBA,CAAO,EAE3CozC,IACF5jD,EAAO0oD,GAAiB1oD,EAAM4jD,EAAW+E,CAAe,EAE5D,CAEA,KAAM,CACJ,IAAAnqB,EACA,KAAAD,EACA,MAAA1xB,EACA,OAAA4vB,EACA,OAAAmrB,EACA,MAAAD,CACJ,EAAM3nD,EACJ,MAAO,CACL,IAAAw+B,EACA,KAAAD,EACA,MAAA1xB,EACA,OAAA4vB,EACA,OAAAmrB,EACA,MAAAD,CACJ,CACA,CAUA,SAASsB,GAA+Bz4C,EAAS,CAC/C,OAAOw4C,GAAcx4C,EAAS,CAC5B,gBAAiB,EACrB,CAAG,CACH,CAEA,SAAS04C,GAAoB14C,EAAS,CACpC,MAAM3D,EAAQ2D,EAAQ,WAChBisB,EAASjsB,EAAQ,YACvB,MAAO,CACL,IAAK,EACL,KAAM,EACN,MAAO3D,EACP,OAAQ4vB,EACR,MAAA5vB,EACA,OAAA4vB,CACJ,CACA,CAEA,SAAS0sB,GAAQxwC,EAAMywC,EAAe,CACpC,OAAIA,IAAkB,SACpBA,EAAgB7H,GAAU5oC,CAAI,EAAE,iBAAiBA,CAAI,GAGhDywC,EAAc,WAAa,OACpC,CAEA,SAASC,GAAa74C,EAAS44C,EAAe,CACxCA,IAAkB,SACpBA,EAAgB7H,GAAU/wC,CAAO,EAAE,iBAAiBA,CAAO,GAG7D,MAAM84C,EAAgB,wBAEtB,MADmB,CAAC,WAAY,YAAa,WAAW,EACtC,KAAKx4C,GAAY,CACjC,MAAMta,EAAQ4yD,EAAct4C,CAAQ,EACpC,OAAO,OAAOta,GAAU,SAAW8yD,EAAc,KAAK9yD,CAAK,EAAI,EACjE,CAAC,CACH,CAEA,SAAS+yD,GAAuB/4C,EAASg5C,EAAO,CAC9C,MAAMC,EAAgB,CAAA,EAEtB,SAASC,EAAwB/wC,EAAM,CAKrC,GAJI6wC,GAAS,MAAQC,EAAc,QAAUD,GAIzC,CAAC7wC,EACH,OAAO8wC,EAGT,GAAI/H,GAAW/oC,CAAI,GAAKA,EAAK,kBAAoB,MAAQ,CAAC8wC,EAAc,SAAS9wC,EAAK,gBAAgB,EACpG,OAAA8wC,EAAc,KAAK9wC,EAAK,gBAAgB,EACjC8wC,EAOT,GAJI,CAAC3xB,GAAcnf,CAAI,GAAKipC,GAAajpC,CAAI,GAIzC8wC,EAAc,SAAS9wC,CAAI,EAC7B,OAAO8wC,EAGT,MAAML,EAAgB7H,GAAU/wC,CAAO,EAAE,iBAAiBmI,CAAI,EAQ9D,OANIA,IAASnI,GACP64C,GAAa1wC,EAAMywC,CAAa,GAClCK,EAAc,KAAK9wC,CAAI,EAIvBwwC,GAAQxwC,EAAMywC,CAAa,EACtBK,EAGFC,EAAwB/wC,EAAK,UAAU,CAChD,CAEA,OAAKnI,EAIEk5C,EAAwBl5C,CAAO,EAH7Bi5C,CAIX,CACA,SAASE,GAA2BhxC,EAAM,CACxC,KAAM,CAACixC,CAAuB,EAAIL,GAAuB5wC,EAAM,CAAC,EAChE,OAAOixC,GAA4D,IACrE,CAEA,SAASC,GAAqBr5C,EAAS,CACrC,MAAI,CAAC2wC,IAAa,CAAC3wC,EACV,KAGL4wC,GAAS5wC,CAAO,EACXA,EAGJ8wC,GAAO9wC,CAAO,EAIfkxC,GAAWlxC,CAAO,GAAKA,IAAYkW,GAAiBlW,CAAO,EAAE,iBACxD,OAGLsnB,GAActnB,CAAO,EAChBA,EAGF,KAXE,IAYX,CAEA,SAASs5C,GAAqBt5C,EAAS,CACrC,OAAI4wC,GAAS5wC,CAAO,EACXA,EAAQ,QAGVA,EAAQ,UACjB,CACA,SAASu5C,GAAqBv5C,EAAS,CACrC,OAAI4wC,GAAS5wC,CAAO,EACXA,EAAQ,QAGVA,EAAQ,SACjB,CACA,SAASw5C,GAAqBx5C,EAAS,CACrC,MAAO,CACL,EAAGs5C,GAAqBt5C,CAAO,EAC/B,EAAGu5C,GAAqBv5C,CAAO,CACnC,CACA,CAEA,IAAIy5C,IAEH,SAAUA,EAAW,CACpBA,EAAUA,EAAU,QAAa,CAAC,EAAI,UACtCA,EAAUA,EAAU,SAAc,EAAE,EAAI,UAC1C,GAAGA,KAAcA,GAAY,CAAA,EAAG,EAEhC,SAASC,GAA2B15C,EAAS,CAC3C,MAAI,CAAC2wC,IAAa,CAAC3wC,EACV,GAGFA,IAAY,SAAS,gBAC9B,CAEA,SAAS25C,GAAkBC,EAAoB,CAC7C,MAAMC,EAAY,CAChB,EAAG,EACH,EAAG,CACP,EACQC,EAAaJ,GAA2BE,CAAkB,EAAI,CAClE,OAAQ,OAAO,YACf,MAAO,OAAO,UAClB,EAAM,CACF,OAAQA,EAAmB,aAC3B,MAAOA,EAAmB,WAC9B,EACQG,EAAY,CAChB,EAAGH,EAAmB,YAAcE,EAAW,MAC/C,EAAGF,EAAmB,aAAeE,EAAW,MACpD,EACQE,EAAQJ,EAAmB,WAAaC,EAAU,EAClDI,EAASL,EAAmB,YAAcC,EAAU,EACpDK,EAAWN,EAAmB,WAAaG,EAAU,EACrDI,EAAUP,EAAmB,YAAcG,EAAU,EAC3D,MAAO,CACL,MAAAC,EACA,OAAAC,EACA,SAAAC,EACA,QAAAC,EACA,UAAAJ,EACA,UAAAF,CACJ,CACA,CAEA,MAAMO,GAAmB,CACvB,EAAG,GACH,EAAG,EACL,EACA,SAASC,GAA2BC,EAAiBC,EAAqBhH,EAAMiH,EAAcC,EAAqB,CACjH,GAAI,CACF,IAAAzsB,EACA,KAAAD,EACA,MAAAopB,EACA,OAAAC,CACJ,EAAM7D,EAEAiH,IAAiB,SACnBA,EAAe,IAGbC,IAAwB,SAC1BA,EAAsBL,IAGxB,KAAM,CACJ,MAAAJ,EACA,SAAAE,EACA,OAAAD,EACA,QAAAE,CACJ,EAAMR,GAAkBW,CAAe,EAC/Br1B,EAAY,CAChB,EAAG,EACH,EAAG,CACP,EACQy1B,EAAQ,CACZ,EAAG,EACH,EAAG,CACP,EACQ95B,EAAY,CAChB,OAAQ25B,EAAoB,OAASE,EAAoB,EACzD,MAAOF,EAAoB,MAAQE,EAAoB,CAC3D,EAEE,MAAI,CAACT,GAAShsB,GAAOusB,EAAoB,IAAM35B,EAAU,QAEvDqE,EAAU,EAAIw0B,GAAU,SACxBiB,EAAM,EAAIF,EAAe,KAAK,KAAKD,EAAoB,IAAM35B,EAAU,OAASoN,GAAOpN,EAAU,MAAM,GAC9F,CAACs5B,GAAY9C,GAAUmD,EAAoB,OAAS35B,EAAU,SAEvEqE,EAAU,EAAIw0B,GAAU,QACxBiB,EAAM,EAAIF,EAAe,KAAK,KAAKD,EAAoB,OAAS35B,EAAU,OAASw2B,GAAUx2B,EAAU,MAAM,GAG3G,CAACu5B,GAAWhD,GAASoD,EAAoB,MAAQ35B,EAAU,OAE7DqE,EAAU,EAAIw0B,GAAU,QACxBiB,EAAM,EAAIF,EAAe,KAAK,KAAKD,EAAoB,MAAQ35B,EAAU,MAAQu2B,GAASv2B,EAAU,KAAK,GAChG,CAACq5B,GAAUlsB,GAAQwsB,EAAoB,KAAO35B,EAAU,QAEjEqE,EAAU,EAAIw0B,GAAU,SACxBiB,EAAM,EAAIF,EAAe,KAAK,KAAKD,EAAoB,KAAO35B,EAAU,MAAQmN,GAAQnN,EAAU,KAAK,GAGlG,CACL,UAAAqE,EACA,MAAAy1B,CACJ,CACA,CAEA,SAASC,GAAqB36C,EAAS,CACrC,GAAIA,IAAY,SAAS,iBAAkB,CACzC,KAAM,CACJ,WAAA46C,EACA,YAAAC,CACN,EAAQ,OACJ,MAAO,CACL,IAAK,EACL,KAAM,EACN,MAAOD,EACP,OAAQC,EACR,MAAOD,EACP,OAAQC,CACd,CACE,CAEA,KAAM,CACJ,IAAA7sB,EACA,KAAAD,EACA,MAAAopB,EACA,OAAAC,CACJ,EAAMp3C,EAAQ,sBAAqB,EACjC,MAAO,CACL,IAAAguB,EACA,KAAAD,EACA,MAAAopB,EACA,OAAAC,EACA,MAAOp3C,EAAQ,YACf,OAAQA,EAAQ,YACpB,CACA,CAEA,SAAS86C,GAAiBC,EAAqB,CAC7C,OAAOA,EAAoB,OAAO,CAAChvD,EAAKoc,IAC/BwqC,GAAI5mD,EAAKytD,GAAqBrxC,CAAI,CAAC,EACzCutC,EAAkB,CACvB,CACA,SAASsF,GAAiBD,EAAqB,CAC7C,OAAOA,EAAoB,OAAO,CAAChvD,EAAKoc,IAC/Bpc,EAAMutD,GAAqBnxC,CAAI,EACrC,CAAC,CACN,CACA,SAAS8yC,GAAiBF,EAAqB,CAC7C,OAAOA,EAAoB,OAAO,CAAChvD,EAAKoc,IAC/Bpc,EAAMwtD,GAAqBpxC,CAAI,EACrC,CAAC,CACN,CAEA,SAAS+yC,GAAuBl7C,EAASm7C,EAAS,CAKhD,GAJIA,IAAY,SACdA,EAAU3C,IAGR,CAACx4C,EACH,OAGF,KAAM,CACJ,IAAAguB,EACA,KAAAD,EACA,OAAAqpB,EACA,MAAAD,CACJ,EAAMgE,EAAQn7C,CAAO,EACam5C,GAA2Bn5C,CAAO,IAM9Do3C,GAAU,GAAKD,GAAS,GAAKnpB,GAAO,OAAO,aAAeD,GAAQ,OAAO,aAC3E/tB,EAAQ,eAAe,CACrB,MAAO,SACP,OAAQ,QACd,CAAK,CAEL,CAEA,MAAMo7C,GAAa,CAAC,CAAC,IAAK,CAAC,OAAQ,OAAO,EAAGJ,EAAgB,EAAG,CAAC,IAAK,CAAC,MAAO,QAAQ,EAAGC,EAAgB,CAAC,EAC1G,MAAMI,EAAK,CACT,YAAY7rD,EAAMwQ,EAAS,CACzB,KAAK,KAAO,OACZ,KAAK,MAAQ,OACb,KAAK,OAAS,OACd,KAAK,IAAM,OACX,KAAK,OAAS,OACd,KAAK,MAAQ,OACb,KAAK,KAAO,OACZ,MAAM+6C,EAAsBhC,GAAuB/4C,CAAO,EACpDs7C,EAAgBR,GAAiBC,CAAmB,EAC1D,KAAK,KAAO,CAAE,GAAGvrD,CACrB,EACI,KAAK,MAAQA,EAAK,MAClB,KAAK,OAASA,EAAK,OAEnB,SAAW,CAAC+rD,EAAMC,EAAMC,CAAe,IAAKL,GAC1C,UAAW9yD,KAAOkzD,EAChB,OAAO,eAAe,KAAMlzD,EAAK,CAC/B,IAAK,IAAM,CACT,MAAMozD,EAAiBD,EAAgBV,CAAmB,EACpDY,EAAsBL,EAAcC,CAAI,EAAIG,EAClD,OAAO,KAAK,KAAKpzD,CAAG,EAAIqzD,CAC1B,EACA,WAAY,EACtB,CAAS,EAIL,OAAO,eAAe,KAAM,OAAQ,CAClC,WAAY,EAClB,CAAK,CACH,CAEF,CAEA,MAAMC,EAAU,CACd,YAAY/rD,EAAQ,CAClB,KAAK,OAAS,OACd,KAAK,UAAY,CAAA,EAEjB,KAAK,UAAY,IAAM,CACrB,KAAK,UAAU,QAAQypB,GAAY,CACjC,IAAIuiC,EAEJ,OAAQA,EAAe,KAAK,SAAW,KAAO,OAASA,EAAa,oBAAoB,GAAGviC,CAAQ,CACrG,CAAC,CACH,EAEA,KAAK,OAASzpB,CAChB,CAEA,IAAIisD,EAAWvK,EAASpjD,EAAS,CAC/B,IAAI4tD,GAEHA,EAAgB,KAAK,SAAW,MAAgBA,EAAc,iBAAiBD,EAAWvK,EAASpjD,CAAO,EAC3G,KAAK,UAAU,KAAK,CAAC2tD,EAAWvK,EAASpjD,CAAO,CAAC,CACnD,CAEF,CAEA,SAAS6tD,GAAuBnsD,EAAQ,CAMtC,KAAM,CACJ,YAAAosD,CACJ,EAAMlL,GAAUlhD,CAAM,EACpB,OAAOA,aAAkBosD,EAAcpsD,EAASqmB,GAAiBrmB,CAAM,CACzE,CAEA,SAASqsD,GAAoB3vB,EAAO4vB,EAAa,CAC/C,MAAM/sB,EAAK,KAAK,IAAI7C,EAAM,CAAC,EACrB8C,EAAK,KAAK,IAAI9C,EAAM,CAAC,EAE3B,OAAI,OAAO4vB,GAAgB,SAClB,KAAK,KAAK/sB,GAAM,EAAIC,GAAM,CAAC,EAAI8sB,EAGpC,MAAOA,GAAe,MAAOA,EACxB/sB,EAAK+sB,EAAY,GAAK9sB,EAAK8sB,EAAY,EAG5C,MAAOA,EACF/sB,EAAK+sB,EAAY,EAGtB,MAAOA,EACF9sB,EAAK8sB,EAAY,EAGnB,EACT,CAEA,IAAIC,IAEH,SAAUA,EAAW,CACpBA,EAAU,MAAW,QACrBA,EAAU,UAAe,YACzBA,EAAU,QAAa,UACvBA,EAAU,YAAiB,cAC3BA,EAAU,OAAY,SACtBA,EAAU,gBAAqB,kBAC/BA,EAAU,iBAAsB,kBAClC,GAAGA,KAAcA,GAAY,CAAA,EAAG,EAEhC,SAAS/tB,GAAez+B,EAAO,CAC7BA,EAAM,eAAc,CACtB,CACA,SAASysD,GAAgBzsD,EAAO,CAC9BA,EAAM,gBAAe,CACvB,CAEA,IAAI0sD,IAEH,SAAUA,EAAc,CACvBA,EAAa,MAAW,QACxBA,EAAa,KAAU,YACvBA,EAAa,MAAW,aACxBA,EAAa,KAAU,YACvBA,EAAa,GAAQ,UACrBA,EAAa,IAAS,SACtBA,EAAa,MAAW,QACxBA,EAAa,IAAS,KACxB,GAAGA,KAAiBA,GAAe,CAAA,EAAG,EAEtC,MAAMC,GAAuB,CAC3B,MAAO,CAACD,GAAa,MAAOA,GAAa,KAAK,EAC9C,OAAQ,CAACA,GAAa,GAAG,EACzB,IAAK,CAACA,GAAa,MAAOA,GAAa,MAAOA,GAAa,GAAG,CAChE,EACME,GAAkC,CAAC5sD,EAAO2jD,IAAS,CACvD,GAAI,CACF,mBAAAkJ,CACJ,EAAMlJ,EAEJ,OAAQ3jD,EAAM,KAAI,CAChB,KAAK0sD,GAAa,MAChB,MAAO,CAAE,GAAGG,EACV,EAAGA,EAAmB,EAAI,EAClC,EAEI,KAAKH,GAAa,KAChB,MAAO,CAAE,GAAGG,EACV,EAAGA,EAAmB,EAAI,EAClC,EAEI,KAAKH,GAAa,KAChB,MAAO,CAAE,GAAGG,EACV,EAAGA,EAAmB,EAAI,EAClC,EAEI,KAAKH,GAAa,GAChB,MAAO,CAAE,GAAGG,EACV,EAAGA,EAAmB,EAAI,EAClC,CACA,CAGA,EAEA,MAAMC,EAAe,CACnB,YAAYx3D,EAAO,CACjB,KAAK,MAAQ,OACb,KAAK,kBAAoB,GACzB,KAAK,qBAAuB,OAC5B,KAAK,UAAY,OACjB,KAAK,gBAAkB,OACvB,KAAK,MAAQA,EACb,KAAM,CACJ,MAAO,CACL,OAAA2K,CACR,CACA,EAAQ3K,EACJ,KAAK,MAAQA,EACb,KAAK,UAAY,IAAI02D,GAAU1lC,GAAiBrmB,CAAM,CAAC,EACvD,KAAK,gBAAkB,IAAI+rD,GAAU7K,GAAUlhD,CAAM,CAAC,EACtD,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,OAAM,CACb,CAEA,QAAS,CACP,KAAK,YAAW,EAChB,KAAK,gBAAgB,IAAIusD,GAAU,OAAQ,KAAK,YAAY,EAC5D,KAAK,gBAAgB,IAAIA,GAAU,iBAAkB,KAAK,YAAY,EACtE,WAAW,IAAM,KAAK,UAAU,IAAIA,GAAU,QAAS,KAAK,aAAa,CAAC,CAC5E,CAEA,aAAc,CACZ,KAAM,CACJ,WAAAO,EACA,QAAAC,CACN,EAAQ,KAAK,MACHz0C,EAAOw0C,EAAW,KAAK,QAEzBx0C,GACF+yC,GAAuB/yC,CAAI,EAG7By0C,EAAQlH,EAAkB,CAC5B,CAEA,cAAc9lD,EAAO,CACnB,GAAIkjD,GAAgBljD,CAAK,EAAG,CAC1B,KAAM,CACJ,OAAAonC,EACA,QAAA3lB,EACA,QAAAljB,CACR,EAAU,KAAK,MACH,CACJ,cAAA0uD,EAAgBN,GAChB,iBAAAO,EAAmBN,GACnB,eAAAO,EAAiB,QACzB,EAAU5uD,EACE,CACJ,KAAA6uD,CACR,EAAUptD,EAEJ,GAAIitD,EAAc,IAAI,SAASG,CAAI,EAAG,CACpC,KAAK,UAAUptD,CAAK,EACpB,MACF,CAEA,GAAIitD,EAAc,OAAO,SAASG,CAAI,EAAG,CACvC,KAAK,aAAaptD,CAAK,EACvB,MACF,CAEA,KAAM,CACJ,cAAA0mD,CACR,EAAUjlC,EAAQ,QACNorC,EAAqBnG,EAAgB,CACzC,EAAGA,EAAc,KACjB,EAAGA,EAAc,GACzB,EAAUZ,GAEC,KAAK,uBACR,KAAK,qBAAuB+G,GAG9B,MAAMQ,EAAiBH,EAAiBltD,EAAO,CAC7C,OAAAonC,EACA,QAAS3lB,EAAQ,QACjB,mBAAAorC,CACR,CAAO,EAED,GAAIQ,EAAgB,CAClB,MAAMC,EAAmBtK,GAASqK,EAAgBR,CAAkB,EAC9DU,EAAc,CAClB,EAAG,EACH,EAAG,CACb,EACc,CACJ,oBAAApC,CACV,EAAY1pC,EAAQ,QAEZ,UAAWipC,KAAmBS,EAAqB,CACjD,MAAM91B,EAAYr1B,EAAM,KAClB,CACJ,MAAAoqD,EACA,QAAAG,EACA,OAAAF,EACA,SAAAC,EACA,UAAAH,EACA,UAAAF,CACZ,EAAcF,GAAkBW,CAAe,EAC/B8C,EAAoBzC,GAAqBL,CAAe,EACxD+C,EAAqB,CACzB,EAAG,KAAK,IAAIp4B,IAAcq3B,GAAa,MAAQc,EAAkB,MAAQA,EAAkB,MAAQ,EAAIA,EAAkB,MAAO,KAAK,IAAIn4B,IAAcq3B,GAAa,MAAQc,EAAkB,KAAOA,EAAkB,KAAOA,EAAkB,MAAQ,EAAGH,EAAe,CAAC,CAAC,EAC5Q,EAAG,KAAK,IAAIh4B,IAAcq3B,GAAa,KAAOc,EAAkB,OAASA,EAAkB,OAAS,EAAIA,EAAkB,OAAQ,KAAK,IAAIn4B,IAAcq3B,GAAa,KAAOc,EAAkB,IAAMA,EAAkB,IAAMA,EAAkB,OAAS,EAAGH,EAAe,CAAC,CAAC,CACxR,EACgBK,EAAar4B,IAAcq3B,GAAa,OAAS,CAACnC,GAAWl1B,IAAcq3B,GAAa,MAAQ,CAACrC,EACjGsD,EAAat4B,IAAcq3B,GAAa,MAAQ,CAACpC,GAAYj1B,IAAcq3B,GAAa,IAAM,CAACtC,EAErG,GAAIsD,GAAcD,EAAmB,IAAMJ,EAAe,EAAG,CAC3D,MAAMO,EAAuBlD,EAAgB,WAAa4C,EAAiB,EACrEO,EAA4Bx4B,IAAcq3B,GAAa,OAASkB,GAAwBzD,EAAU,GAAK90B,IAAcq3B,GAAa,MAAQkB,GAAwB3D,EAAU,EAElL,GAAI4D,GAA6B,CAACP,EAAiB,EAAG,CAGpD5C,EAAgB,SAAS,CACvB,KAAMkD,EACN,SAAUT,CAC1B,CAAe,EACD,MACF,CAEIU,EACFN,EAAY,EAAI7C,EAAgB,WAAakD,EAE7CL,EAAY,EAAIl4B,IAAcq3B,GAAa,MAAQhC,EAAgB,WAAaP,EAAU,EAAIO,EAAgB,WAAaT,EAAU,EAGnIsD,EAAY,GACd7C,EAAgB,SAAS,CACvB,KAAM,CAAC6C,EAAY,EACnB,SAAUJ,CAC1B,CAAe,EAGH,KACF,SAAWQ,GAAcF,EAAmB,IAAMJ,EAAe,EAAG,CAClE,MAAMO,EAAuBlD,EAAgB,UAAY4C,EAAiB,EACpEO,EAA4Bx4B,IAAcq3B,GAAa,MAAQkB,GAAwBzD,EAAU,GAAK90B,IAAcq3B,GAAa,IAAMkB,GAAwB3D,EAAU,EAE/K,GAAI4D,GAA6B,CAACP,EAAiB,EAAG,CAGpD5C,EAAgB,SAAS,CACvB,IAAKkD,EACL,SAAUT,CAC1B,CAAe,EACD,MACF,CAEIU,EACFN,EAAY,EAAI7C,EAAgB,UAAYkD,EAE5CL,EAAY,EAAIl4B,IAAcq3B,GAAa,KAAOhC,EAAgB,UAAYP,EAAU,EAAIO,EAAgB,UAAYT,EAAU,EAGhIsD,EAAY,GACd7C,EAAgB,SAAS,CACvB,IAAK,CAAC6C,EAAY,EAClB,SAAUJ,CAC1B,CAAe,EAGH,KACF,CACF,CAEA,KAAK,WAAWntD,EAAO+iD,GAAIC,GAASqK,EAAgB,KAAK,oBAAoB,EAAGE,CAAW,CAAC,CAC9F,CACF,CACF,CAEA,WAAWvtD,EAAO8tD,EAAa,CAC7B,KAAM,CACJ,OAAAC,CACN,EAAQ,KAAK,MACT/tD,EAAM,eAAc,EACpB+tD,EAAOD,CAAW,CACpB,CAEA,UAAU9tD,EAAO,CACf,KAAM,CACJ,MAAAguD,CACN,EAAQ,KAAK,MACThuD,EAAM,eAAc,EACpB,KAAK,OAAM,EACXguD,EAAK,CACP,CAEA,aAAahuD,EAAO,CAClB,KAAM,CACJ,SAAAmyC,CACN,EAAQ,KAAK,MACTnyC,EAAM,eAAc,EACpB,KAAK,OAAM,EACXmyC,EAAQ,CACV,CAEA,QAAS,CACP,KAAK,UAAU,UAAS,EACxB,KAAK,gBAAgB,UAAS,CAChC,CAEF,CACA2a,GAAe,WAAa,CAAC,CAC3B,UAAW,YACX,QAAS,CAAC9sD,EAAO2jD,EAAMkB,IAAU,CAC/B,GAAI,CACF,cAAAoI,EAAgBN,GAChB,aAAAsB,CACN,EAAQtK,EACA,CACF,OAAAvc,CACN,EAAQyd,EACJ,KAAM,CACJ,KAAAuI,CACN,EAAQptD,EAAM,YAEV,GAAIitD,EAAc,MAAM,SAASG,CAAI,EAAG,CACtC,MAAMc,EAAY9mB,EAAO,cAAc,QAEvC,OAAI8mB,GAAaluD,EAAM,SAAWkuD,EACzB,IAGTluD,EAAM,eAAc,EACYiuD,IAAa,CAC3C,MAAOjuD,EAAM,WACrB,CAAO,EACM,GACT,CAEA,MAAO,EACT,CACF,CAAC,EAED,SAASmuD,GAAqBC,EAAY,CACxC,MAAO,GAAQA,GAAc,aAAcA,EAC7C,CAEA,SAASC,GAAkBD,EAAY,CACrC,MAAO,GAAQA,GAAc,UAAWA,EAC1C,CAEA,MAAME,EAAsB,CAC1B,YAAYh5D,EAAOi5D,EAAQC,EAAgB,CACzC,IAAIC,EAEAD,IAAmB,SACrBA,EAAiBpC,GAAuB92D,EAAM,MAAM,MAAM,GAG5D,KAAK,MAAQ,OACb,KAAK,OAAS,OACd,KAAK,kBAAoB,GACzB,KAAK,SAAW,OAChB,KAAK,UAAY,GACjB,KAAK,mBAAqB,OAC1B,KAAK,UAAY,KACjB,KAAK,UAAY,OACjB,KAAK,kBAAoB,OACzB,KAAK,gBAAkB,OACvB,KAAK,MAAQA,EACb,KAAK,OAASi5D,EACd,KAAM,CACJ,MAAAvuD,CACN,EAAQ1K,EACE,CACJ,OAAA2K,CACN,EAAQD,EACJ,KAAK,MAAQ1K,EACb,KAAK,OAASi5D,EACd,KAAK,SAAWjoC,GAAiBrmB,CAAM,EACvC,KAAK,kBAAoB,IAAI+rD,GAAU,KAAK,QAAQ,EACpD,KAAK,UAAY,IAAIA,GAAUwC,CAAc,EAC7C,KAAK,gBAAkB,IAAIxC,GAAU7K,GAAUlhD,CAAM,CAAC,EACtD,KAAK,oBAAsBwuD,EAAuBnL,GAAoBtjD,CAAK,IAAM,KAAOyuD,EAAuB3I,GAC/G,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EACzC,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,OAAM,CACb,CAEA,QAAS,CACP,KAAM,CACJ,OAAAyI,EACA,MAAO,CACL,QAAS,CACP,qBAAAG,EACA,2BAAAC,CACV,CACA,CACA,EAAQ,KAgBJ,GAfA,KAAK,UAAU,IAAIJ,EAAO,KAAK,KAAM,KAAK,WAAY,CACpD,QAAS,EACf,CAAK,EACD,KAAK,UAAU,IAAIA,EAAO,IAAI,KAAM,KAAK,SAAS,EAE9CA,EAAO,QACT,KAAK,UAAU,IAAIA,EAAO,OAAO,KAAM,KAAK,YAAY,EAG1D,KAAK,gBAAgB,IAAI/B,GAAU,OAAQ,KAAK,YAAY,EAC5D,KAAK,gBAAgB,IAAIA,GAAU,UAAW/tB,EAAc,EAC5D,KAAK,gBAAgB,IAAI+tB,GAAU,iBAAkB,KAAK,YAAY,EACtE,KAAK,gBAAgB,IAAIA,GAAU,YAAa/tB,EAAc,EAC9D,KAAK,kBAAkB,IAAI+tB,GAAU,QAAS,KAAK,aAAa,EAE5DkC,EAAsB,CACxB,GAAIC,GAA8B,MAAQA,EAA2B,CACnE,MAAO,KAAK,MAAM,MAClB,WAAY,KAAK,MAAM,WACvB,QAAS,KAAK,MAAM,OAC5B,CAAO,EACC,OAAO,KAAK,YAAW,EAGzB,GAAIN,GAAkBK,CAAoB,EAAG,CAC3C,KAAK,UAAY,WAAW,KAAK,YAAaA,EAAqB,KAAK,EACxE,KAAK,cAAcA,CAAoB,EACvC,MACF,CAEA,GAAIP,GAAqBO,CAAoB,EAAG,CAC9C,KAAK,cAAcA,CAAoB,EACvC,MACF,CACF,CAEA,KAAK,YAAW,CAClB,CAEA,QAAS,CACP,KAAK,UAAU,UAAS,EACxB,KAAK,gBAAgB,YAGrB,WAAW,KAAK,kBAAkB,UAAW,EAAE,EAE3C,KAAK,YAAc,OACrB,aAAa,KAAK,SAAS,EAC3B,KAAK,UAAY,KAErB,CAEA,cAAcN,EAAYvhC,EAAQ,CAChC,KAAM,CACJ,OAAAua,EACA,UAAAwnB,CACN,EAAQ,KAAK,MACTA,EAAUxnB,EAAQgnB,EAAY,KAAK,mBAAoBvhC,CAAM,CAC/D,CAEA,aAAc,CACZ,KAAM,CACJ,mBAAAgiC,CACN,EAAQ,KACE,CACJ,QAAA7B,CACN,EAAQ,KAAK,MAEL6B,IACF,KAAK,UAAY,GAEjB,KAAK,kBAAkB,IAAIrC,GAAU,MAAOC,GAAiB,CAC3D,QAAS,EACjB,CAAO,EAED,KAAK,oBAAmB,EAExB,KAAK,kBAAkB,IAAID,GAAU,gBAAiB,KAAK,mBAAmB,EAC9EQ,EAAQ6B,CAAkB,EAE9B,CAEA,WAAW7uD,EAAO,CAChB,IAAI8uD,EAEJ,KAAM,CACJ,UAAAC,EACA,mBAAAF,EACA,MAAAv5D,CACN,EAAQ,KACE,CACJ,OAAAy4D,EACA,QAAS,CACP,qBAAAW,CACR,CACA,EAAQp5D,EAEJ,GAAI,CAACu5D,EACH,OAGF,MAAMf,GAAegB,EAAwBxL,GAAoBtjD,CAAK,IAAM,KAAO8uD,EAAwBhJ,GACrGnpB,EAAQqmB,GAAS6L,EAAoBf,CAAW,EAEtD,GAAI,CAACiB,GAAaL,EAAsB,CACtC,GAAIP,GAAqBO,CAAoB,EAAG,CAC9C,GAAIA,EAAqB,WAAa,MAAQpC,GAAoB3vB,EAAO+xB,EAAqB,SAAS,EACrG,OAAO,KAAK,aAAY,EAG1B,GAAIpC,GAAoB3vB,EAAO+xB,EAAqB,QAAQ,EAC1D,OAAO,KAAK,YAAW,CAE3B,CAEA,GAAIL,GAAkBK,CAAoB,GACpCpC,GAAoB3vB,EAAO+xB,EAAqB,SAAS,EAC3D,OAAO,KAAK,aAAY,EAI5B,KAAK,cAAcA,EAAsB/xB,CAAK,EAC9C,MACF,CAEI38B,EAAM,YACRA,EAAM,eAAc,EAGtB+tD,EAAOD,CAAW,CACpB,CAEA,WAAY,CACV,KAAM,CACJ,QAAAkB,EACA,MAAAhB,CACN,EAAQ,KAAK,MACT,KAAK,OAAM,EAEN,KAAK,WACRgB,EAAQ,KAAK,MAAM,MAAM,EAG3BhB,EAAK,CACP,CAEA,cAAe,CACb,KAAM,CACJ,QAAAgB,EACA,SAAA7c,CACN,EAAQ,KAAK,MACT,KAAK,OAAM,EAEN,KAAK,WACR6c,EAAQ,KAAK,MAAM,MAAM,EAG3B7c,EAAQ,CACV,CAEA,cAAcnyC,EAAO,CACfA,EAAM,OAAS0sD,GAAa,KAC9B,KAAK,aAAY,CAErB,CAEA,qBAAsB,CACpB,IAAIuC,GAEHA,EAAwB,KAAK,SAAS,aAAY,IAAO,MAAgBA,EAAsB,gBAAe,CACjH,CAEF,CAEA,MAAMV,GAAS,CACb,OAAQ,CACN,KAAM,eACV,EACE,KAAM,CACJ,KAAM,aACV,EACE,IAAK,CACH,KAAM,WACV,CACA,EACA,MAAMW,WAAsBZ,EAAsB,CAChD,YAAYh5D,EAAO,CACjB,KAAM,CACJ,MAAA0K,CACN,EAAQ1K,EAGEk5D,EAAiBloC,GAAiBtmB,EAAM,MAAM,EACpD,MAAM1K,EAAOi5D,GAAQC,CAAc,CACrC,CAEF,CACAU,GAAc,WAAa,CAAC,CAC1B,UAAW,gBACX,QAAS,CAACvL,EAAMkB,IAAU,CACxB,GAAI,CACF,YAAa7kD,CACnB,EAAQ2jD,EACA,CACF,aAAAsK,CACN,EAAQpJ,EAEJ,MAAI,CAAC7kD,EAAM,WAAaA,EAAM,SAAW,EAChC,IAGuBiuD,IAAa,CAC3C,MAAAjuD,CACN,CAAK,EACM,GACT,CACF,CAAC,EAED,MAAMmvD,GAAW,CACf,KAAM,CACJ,KAAM,WACV,EACE,IAAK,CACH,KAAM,SACV,CACA,EACA,IAAIC,IAEH,SAAUA,EAAa,CACtBA,EAAYA,EAAY,WAAgB,CAAC,EAAI,YAC/C,GAAGA,KAAgBA,GAAc,CAAA,EAAG,EAEpC,MAAMC,WAAoBf,EAAsB,CAC9C,YAAYh5D,EAAO,CACjB,MAAMA,EAAO65D,GAAU7oC,GAAiBhxB,EAAM,MAAM,MAAM,CAAC,CAC7D,CAEF,CACA+5D,GAAY,WAAa,CAAC,CACxB,UAAW,cACX,QAAS,CAAC1L,EAAMkB,IAAU,CACxB,GAAI,CACF,YAAa7kD,CACnB,EAAQ2jD,EACA,CACF,aAAAsK,CACN,EAAQpJ,EAEJ,OAAI7kD,EAAM,SAAWovD,GAAY,WACxB,IAGuBnB,IAAa,CAC3C,MAAAjuD,CACN,CAAK,EACM,GACT,CACF,CAAC,EAED,MAAMsvD,GAAW,CACf,OAAQ,CACN,KAAM,aACV,EACE,KAAM,CACJ,KAAM,WACV,EACE,IAAK,CACH,KAAM,UACV,CACA,EACA,MAAMC,WAAoBjB,EAAsB,CAC9C,YAAYh5D,EAAO,CACjB,MAAMA,EAAOg6D,EAAQ,CACvB,CAEA,OAAO,OAAQ,CAIb,cAAO,iBAAiBA,GAAS,KAAK,KAAM5J,EAAM,CAChD,QAAS,GACT,QAAS,EACf,CAAK,EACM,UAAoB,CACzB,OAAO,oBAAoB4J,GAAS,KAAK,KAAM5J,CAAI,CACrD,EAGA,SAASA,GAAO,CAAC,CACnB,CAEF,CACA6J,GAAY,WAAa,CAAC,CACxB,UAAW,eACX,QAAS,CAAC5L,EAAMkB,IAAU,CACxB,GAAI,CACF,YAAa7kD,CACnB,EAAQ2jD,EACA,CACF,aAAAsK,CACN,EAAQpJ,EACJ,KAAM,CACJ,QAAA2K,CACN,EAAQxvD,EAEJ,OAAIwvD,EAAQ,OAAS,EACZ,IAGuBvB,IAAa,CAC3C,MAAAjuD,CACN,CAAK,EACM,GACT,CACF,CAAC,EAED,IAAIyvD,IAEH,SAAUA,EAAqB,CAC9BA,EAAoBA,EAAoB,QAAa,CAAC,EAAI,UAC1DA,EAAoBA,EAAoB,cAAmB,CAAC,EAAI,eAClE,GAAGA,KAAwBA,GAAsB,CAAA,EAAG,EAEpD,IAAIC,IAEH,SAAUA,EAAgB,CACzBA,EAAeA,EAAe,UAAe,CAAC,EAAI,YAClDA,EAAeA,EAAe,kBAAuB,CAAC,EAAI,mBAC5D,GAAGA,KAAmBA,GAAiB,CAAA,EAAG,EAE1C,SAASC,GAAgBhM,EAAM,CAC7B,GAAI,CACF,aAAAiH,EACA,UAAAsD,EAAYuB,GAAoB,QAChC,UAAAG,EACA,aAAAC,EACA,QAAAC,EACA,SAAAC,EAAW,EACX,MAAAC,EAAQN,GAAe,UACvB,mBAAAO,EACA,oBAAA9E,EACA,wBAAA+E,EACA,MAAAvzB,EACA,UAAA3L,CACJ,EAAM2yB,EACJ,MAAMwM,EAAeC,GAAgB,CACnC,MAAAzzB,EACA,SAAU,CAACmzB,CACf,CAAG,EACK,CAACO,EAAuBC,CAAuB,EAAIzO,GAAW,EAC9D0O,EAAc55D,EAAAA,OAAO,CACzB,EAAG,EACH,EAAG,CACP,CAAG,EACK65D,EAAkB75D,EAAAA,OAAO,CAC7B,EAAG,EACH,EAAG,CACP,CAAG,EACKiJ,EAAO9D,EAAAA,QAAQ,IAAM,CACzB,OAAQoyD,EAAS,CACf,KAAKuB,GAAoB,QACvB,OAAOQ,EAAqB,CAC1B,IAAKA,EAAmB,EACxB,OAAQA,EAAmB,EAC3B,KAAMA,EAAmB,EACzB,MAAOA,EAAmB,CACpC,EAAY,KAEN,KAAKR,GAAoB,cACvB,OAAOI,CACf,CACE,EAAG,CAAC3B,EAAW2B,EAAcI,CAAkB,CAAC,EAC1CQ,EAAqB95D,EAAAA,OAAO,IAAI,EAChC+5D,EAAav5D,EAAAA,YAAY,IAAM,CACnC,MAAMuzD,EAAkB+F,EAAmB,QAE3C,GAAI,CAAC/F,EACH,OAGF,MAAMiG,EAAaJ,EAAY,QAAQ,EAAIC,EAAgB,QAAQ,EAC7DI,EAAYL,EAAY,QAAQ,EAAIC,EAAgB,QAAQ,EAClE9F,EAAgB,SAASiG,EAAYC,CAAS,CAChD,EAAG,CAAA,CAAE,EACCC,EAA4B/0D,EAAAA,QAAQ,IAAMk0D,IAAUN,GAAe,UAAY,CAAC,GAAGvE,CAAmB,EAAE,QAAO,EAAKA,EAAqB,CAAC6E,EAAO7E,CAAmB,CAAC,EAC3Kl0D,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC64D,GAAW,CAAC3E,EAAoB,QAAU,CAACvrD,EAAM,CACpD0wD,EAAuB,EACvB,MACF,CAEA,UAAW5F,KAAmBmG,EAA2B,CACvD,GAAkCjB,IAAUlF,CAAe,IAAO,GAChE,SAGF,MAAMx9C,EAAQi+C,EAAoB,QAAQT,CAAe,EACnDC,EAAsBuF,EAAwBhjD,CAAK,EAEzD,GAAI,CAACy9C,EACH,SAGF,KAAM,CACJ,UAAAt1B,EACA,MAAAy1B,CACR,EAAUL,GAA2BC,EAAiBC,EAAqB/qD,EAAMgrD,EAAc55B,CAAS,EAElG,UAAW26B,IAAQ,CAAC,IAAK,GAAG,EACrBwE,EAAaxE,CAAI,EAAEt2B,EAAUs2B,CAAI,CAAC,IACrCb,EAAMa,CAAI,EAAI,EACdt2B,EAAUs2B,CAAI,EAAI,GAItB,GAAIb,EAAM,EAAI,GAAKA,EAAM,EAAI,EAAG,CAC9BwF,EAAuB,EACvBG,EAAmB,QAAU/F,EAC7B2F,EAAsBK,EAAYX,CAAQ,EAC1CQ,EAAY,QAAUzF,EACtB0F,EAAgB,QAAUn7B,EAC1B,MACF,CACF,CAEAk7B,EAAY,QAAU,CACpB,EAAG,EACH,EAAG,CACT,EACIC,EAAgB,QAAU,CACxB,EAAG,EACH,EAAG,CACT,EACIF,EAAuB,CACzB,EACA,CAAC1F,EAAc8F,EAAYd,EAAWU,EAAyBR,EAASC,EACxE,KAAK,UAAUnwD,CAAI,EACnB,KAAK,UAAUuwD,CAAY,EAAGE,EAAuBlF,EAAqB0F,EAA2BX,EACrG,KAAK,UAAUl/B,CAAS,CAAC,CAAC,CAC5B,CACA,MAAM8/B,GAAsB,CAC1B,EAAG,CACD,CAACjH,GAAU,QAAQ,EAAG,GACtB,CAACA,GAAU,OAAO,EAAG,EACzB,EACE,EAAG,CACD,CAACA,GAAU,QAAQ,EAAG,GACtB,CAACA,GAAU,OAAO,EAAG,EACzB,CACA,EAEA,SAASuG,GAAgBvL,EAAO,CAC9B,GAAI,CACF,MAAAloB,EACA,SAAAtkC,CACJ,EAAMwsD,EACJ,MAAMkM,EAAgBzO,GAAY3lB,CAAK,EACvC,OAAOulB,GAAY8O,GAAkB,CACnC,GAAI34D,GAAY,CAAC04D,GAAiB,CAACC,EAEjC,OAAOF,GAGT,MAAMz7B,EAAY,CAChB,EAAG,KAAK,KAAKsH,EAAM,EAAIo0B,EAAc,CAAC,EACtC,EAAG,KAAK,KAAKp0B,EAAM,EAAIo0B,EAAc,CAAC,CAC5C,EAEI,MAAO,CACL,EAAG,CACD,CAAClH,GAAU,QAAQ,EAAGmH,EAAe,EAAEnH,GAAU,QAAQ,GAAKx0B,EAAU,IAAM,GAC9E,CAACw0B,GAAU,OAAO,EAAGmH,EAAe,EAAEnH,GAAU,OAAO,GAAKx0B,EAAU,IAAM,CACpF,EACM,EAAG,CACD,CAACw0B,GAAU,QAAQ,EAAGmH,EAAe,EAAEnH,GAAU,QAAQ,GAAKx0B,EAAU,IAAM,GAC9E,CAACw0B,GAAU,OAAO,EAAGmH,EAAe,EAAEnH,GAAU,OAAO,GAAKx0B,EAAU,IAAM,CACpF,CACA,CACE,EAAG,CAACh9B,EAAUskC,EAAOo0B,CAAa,CAAC,CACrC,CAEA,SAASE,GAAcC,EAAgB7uD,EAAI,CACzC,MAAM8uD,EAAgB9uD,GAAM,KAAO6uD,EAAe,IAAI7uD,CAAE,EAAI,OACtDkW,EAAO44C,EAAgBA,EAAc,KAAK,QAAU,KAC1D,OAAOjP,GAAYkP,GAAc,CAC/B,IAAIzN,EAEJ,OAAIthD,GAAM,KACD,MAMDshD,EAAOprC,GAAsB64C,IAAe,KAAOzN,EAAO,IACpE,EAAG,CAACprC,EAAMlW,CAAE,CAAC,CACf,CAEA,SAASgvD,GAAqBxL,EAASyL,EAAqB,CAC1D,OAAOx1D,EAAAA,QAAQ,IAAM+pD,EAAQ,OAAO,CAACjD,EAAagD,IAAW,CAC3D,KAAM,CACJ,OAAQ2L,CACd,EAAQ3L,EACE4L,EAAmBD,EAAO,WAAW,IAAIrD,IAAc,CAC3D,UAAWA,EAAU,UACrB,QAASoD,EAAoBpD,EAAU,QAAStI,CAAM,CAC5D,EAAM,EACF,MAAO,CAAC,GAAGhD,EAAa,GAAG4O,CAAgB,CAC7C,EAAG,CAAA,CAAE,EAAG,CAAC3L,EAASyL,CAAmB,CAAC,CACxC,CAEA,IAAIG,IAEH,SAAUA,EAAmB,CAC5BA,EAAkBA,EAAkB,OAAY,CAAC,EAAI,SACrDA,EAAkBA,EAAkB,eAAoB,CAAC,EAAI,iBAC7DA,EAAkBA,EAAkB,cAAmB,CAAC,EAAI,eAC9D,GAAGA,KAAsBA,GAAoB,CAAA,EAAG,EAEhD,IAAIC,IAEH,SAAUA,EAAoB,CAC7BA,EAAmB,UAAe,WACpC,GAAGA,KAAuBA,GAAqB,CAAA,EAAG,EAElD,MAAMr7D,GAA4B,IAAI,IACtC,SAASs7D,GAAsBC,EAAYjO,EAAM,CAC/C,GAAI,CACF,SAAAkO,EACA,aAAA7P,EACA,OAAAr9B,CACJ,EAAMg/B,EACJ,KAAM,CAACmO,EAAOC,CAAQ,EAAI/6D,EAAAA,SAAS,IAAI,EACjC,CACJ,UAAAg7D,EACA,QAAAzG,EACA,SAAA0G,CACJ,EAAMttC,EACEutC,EAAgBv7D,EAAAA,OAAOi7D,CAAU,EACjCv5D,EAAW85D,EAAU,EACrBC,EAAcrQ,GAAe1pD,CAAQ,EACrCg6D,EAA6Bl7D,cAAY,SAAUorD,EAAK,CACxDA,IAAQ,SACVA,EAAM,CAAA,GAGJ,CAAA6P,EAAY,SAIhBL,EAAS37D,GACHA,IAAU,KACLmsD,EAGFnsD,EAAM,OAAOmsD,EAAI,OAAOlgD,GAAM,CAACjM,EAAM,SAASiM,CAAE,CAAC,CAAC,CAC1D,CACH,EAAG,CAAC+vD,CAAW,CAAC,EACVpnC,EAAYr0B,EAAAA,OAAO,IAAI,EACvBgwD,EAAiBzE,GAAYzpB,GAAiB,CAClD,GAAIpgC,GAAY,CAACw5D,EACf,OAAOx7D,GAGT,GAAI,CAACoiC,GAAiBA,IAAkBpiC,IAAgB67D,EAAc,UAAYN,GAAcE,GAAS,KAAM,CAC7G,MAAMQ,EAAM,IAAI,IAEhB,QAAS/sB,KAAaqsB,EAAY,CAChC,GAAI,CAACrsB,EACH,SAGF,GAAIusB,GAASA,EAAM,OAAS,GAAK,CAACA,EAAM,SAASvsB,EAAU,EAAE,GAAKA,EAAU,KAAK,QAAS,CAExF+sB,EAAI,IAAI/sB,EAAU,GAAIA,EAAU,KAAK,OAAO,EAC5C,QACF,CAEA,MAAMhtB,EAAOgtB,EAAU,KAAK,QACtB3lC,EAAO2Y,EAAO,IAAIkzC,GAAKF,EAAQhzC,CAAI,EAAGA,CAAI,EAAI,KACpDgtB,EAAU,KAAK,QAAU3lC,EAErBA,GACF0yD,EAAI,IAAI/sB,EAAU,GAAI3lC,CAAI,CAE9B,CAEA,OAAO0yD,CACT,CAEA,OAAO75B,CACT,EAAG,CAACm5B,EAAYE,EAAOD,EAAUx5D,EAAUkzD,CAAO,CAAC,EACnDt0D,OAAAA,EAAAA,UAAU,IAAM,CACdi7D,EAAc,QAAUN,CAC1B,EAAG,CAACA,CAAU,CAAC,EACf36D,EAAAA,UAAU,IAAM,CACVoB,GAIJg6D,EAA0B,CAC5B,EACA,CAACR,EAAUx5D,CAAQ,CAAC,EACpBpB,EAAAA,UAAU,IAAM,CACV66D,GAASA,EAAM,OAAS,GAC1BC,EAAS,IAAI,CAEjB,EACA,CAAC,KAAK,UAAUD,CAAK,CAAC,CAAC,EACvB76D,EAAAA,UAAU,IAAM,CACVoB,GAAY,OAAO25D,GAAc,UAAYhnC,EAAU,UAAY,OAIvEA,EAAU,QAAU,WAAW,IAAM,CACnCqnC,EAA0B,EAC1BrnC,EAAU,QAAU,IACtB,EAAGgnC,CAAS,EACd,EACA,CAACA,EAAW35D,EAAUg6D,EAA4B,GAAGrQ,CAAY,CAAC,EAC3D,CACL,eAAA2E,EACA,2BAAA0L,EACA,mBAAoBP,GAAS,IACjC,EAEE,SAASK,GAAa,CACpB,OAAQF,EAAQ,CACd,KAAKR,GAAkB,OACrB,MAAO,GAET,KAAKA,GAAkB,eACrB,OAAOI,EAET,QACE,MAAO,CAACA,CAChB,CACE,CACF,CAEA,SAASU,GAAgBn8D,EAAOo8D,EAAW,CACzC,OAAOtQ,GAAYzpB,GACZriC,EAIDqiC,IAIG,OAAO+5B,GAAc,WAAaA,EAAUp8D,CAAK,EAAIA,GAPnD,KAQR,CAACo8D,EAAWp8D,CAAK,CAAC,CACvB,CAEA,SAASq8D,GAAel6C,EAAMgzC,EAAS,CACrC,OAAOgH,GAAgBh6C,EAAMgzC,CAAO,CACtC,CAOA,SAASmH,GAAoB/O,EAAM,CACjC,GAAI,CACF,SAAA/8B,EACA,SAAAvuB,CACJ,EAAMsrD,EACJ,MAAMgP,EAAkBjR,GAAS96B,CAAQ,EACnCgsC,EAAmB92D,EAAAA,QAAQ,IAAM,CACrC,GAAIzD,GAAY,OAAO,OAAW,KAAe,OAAO,OAAO,iBAAqB,IAClF,OAGF,KAAM,CACJ,iBAAAw6D,CACN,EAAQ,OACJ,OAAO,IAAIA,EAAiBF,CAAe,CAC7C,EAAG,CAACA,EAAiBt6D,CAAQ,CAAC,EAC9BpB,OAAAA,EAAAA,UAAU,IACD,IAA0C27D,GAAiB,WAAU,EAC3E,CAACA,CAAgB,CAAC,EACdA,CACT,CAOA,SAASE,GAAkBnP,EAAM,CAC/B,GAAI,CACF,SAAA/8B,EACA,SAAAvuB,CACJ,EAAMsrD,EACJ,MAAM5hB,EAAe2f,GAAS96B,CAAQ,EAChCmsC,EAAiBj3D,EAAAA,QAAQ,IAAM,CACnC,GAAIzD,GAAY,OAAO,OAAW,KAAe,OAAO,OAAO,eAAmB,IAChF,OAGF,KAAM,CACJ,eAAA26D,CACN,EAAQ,OACJ,OAAO,IAAIA,EAAejxB,CAAY,CACxC,EACA,CAAC1pC,CAAQ,CAAC,EACVpB,OAAAA,EAAAA,UAAU,IACD,IAAwC87D,GAAe,WAAU,EACvE,CAACA,CAAc,CAAC,EACZA,CACT,CAEA,SAASE,GAAe7iD,EAAS,CAC/B,OAAO,IAAIq7C,GAAK7C,GAAcx4C,CAAO,EAAGA,CAAO,CACjD,CAEA,SAAS8iD,GAAQ9iD,EAASm7C,EAAS4H,EAAc,CAC3C5H,IAAY,SACdA,EAAU0H,IAGZ,KAAM,CAACrzD,EAAMwzD,CAAO,EAAIp8D,EAAAA,SAAS,IAAI,EAErC,SAASq8D,GAAc,CACrBD,EAAQE,GAAe,CACrB,GAAI,CAACljD,EACH,OAAO,KAGT,GAAIA,EAAQ,cAAgB,GAAO,CACjC,IAAIuzC,EAIJ,OAAQA,EAAO2P,GAAoCH,IAAiB,KAAOxP,EAAO,IACpF,CAEA,MAAM4P,EAAUhI,EAAQn7C,CAAO,EAE/B,OAAI,KAAK,UAAUkjD,CAAW,IAAM,KAAK,UAAUC,CAAO,EACjDD,EAGFC,CACT,CAAC,CACH,CAEA,MAAMX,EAAmBF,GAAoB,CAC3C,SAASc,EAAS,CAChB,GAAKpjD,EAIL,UAAWqjD,KAAUD,EAAS,CAC5B,KAAM,CACJ,KAAAl9D,EACA,OAAA2J,CACV,EAAYwzD,EAEJ,GAAIn9D,IAAS,aAAe2J,aAAkB,aAAeA,EAAO,SAASmQ,CAAO,EAAG,CACrFijD,EAAW,EACX,KACF,CACF,CACF,CAEJ,CAAG,EACKN,EAAiBD,GAAkB,CACvC,SAAUO,CACd,CAAG,EACD,OAAA5R,GAA0B,IAAM,CAC9B4R,EAAW,EAEPjjD,GACgC2iD,GAAe,QAAQ3iD,CAAO,EAC5BwiD,GAAiB,QAAQ,SAAS,KAAM,CAC1E,UAAW,GACX,QAAS,EACjB,CAAO,IAEiCG,GAAe,WAAU,EACvBH,GAAiB,WAAU,EAEnE,EAAG,CAACxiD,CAAO,CAAC,EACLxQ,CACT,CAEA,SAAS8zD,GAAa9zD,EAAM,CAC1B,MAAM+zD,EAAcpB,GAAgB3yD,CAAI,EACxC,OAAOqoD,GAAaroD,EAAM+zD,CAAW,CACvC,CAEA,MAAMC,GAAiB,CAAA,EACvB,SAASC,GAAuBt7C,EAAM,CACpC,MAAMu7C,EAAen9D,EAAAA,OAAO4hB,CAAI,EAC1Bw7C,EAAY7R,GAAYzpB,GACvBlgB,EAIDkgB,GAAiBA,IAAkBm7B,IAAkBr7C,GAAQu7C,EAAa,SAAWv7C,EAAK,aAAeu7C,EAAa,QAAQ,WACzHr7B,EAGF0wB,GAAuB5wC,CAAI,EAPzBq7C,GAQR,CAACr7C,CAAI,CAAC,EACTthB,OAAAA,EAAAA,UAAU,IAAM,CACd68D,EAAa,QAAUv7C,CACzB,EAAG,CAACA,CAAI,CAAC,EACFw7C,CACT,CAEA,SAASC,GAAiB77B,EAAU,CAClC,KAAM,CAAC87B,EAAmBC,CAAoB,EAAIl9D,EAAAA,SAAS,IAAI,EACzDm9D,EAAex9D,SAAOwhC,CAAQ,EAE9Bi8B,EAAej9D,EAAAA,YAAY6I,GAAS,CACxC,MAAMq0D,EAAmB5K,GAAqBzpD,EAAM,MAAM,EAErDq0D,GAILH,EAAqBD,GACdA,GAILA,EAAkB,IAAII,EAAkBzK,GAAqByK,CAAgB,CAAC,EACvE,IAAI,IAAIJ,CAAiB,GAJvB,IAKV,CACH,EAAG,CAAA,CAAE,EACLh9D,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMq9D,EAAmBH,EAAa,QAEtC,GAAIh8B,IAAam8B,EAAkB,CACjClzC,EAAQkzC,CAAgB,EACxB,MAAMhtD,EAAU6wB,EAAS,IAAI/nB,GAAW,CACtC,MAAMmkD,EAAoB9K,GAAqBr5C,CAAO,EAEtD,OAAImkD,GACFA,EAAkB,iBAAiB,SAAUH,EAAc,CACzD,QAAS,EACrB,CAAW,EACM,CAACG,EAAmB3K,GAAqB2K,CAAiB,CAAC,GAG7D,IACT,CAAC,EAAE,OAAOltD,GAASA,GAAS,IAAI,EAChC6sD,EAAqB5sD,EAAQ,OAAS,IAAI,IAAIA,CAAO,EAAI,IAAI,EAC7D6sD,EAAa,QAAUh8B,CACzB,CAEA,MAAO,IAAM,CACX/W,EAAQ+W,CAAQ,EAChB/W,EAAQkzC,CAAgB,CAC1B,EAEA,SAASlzC,EAAQ+W,EAAU,CACzBA,EAAS,QAAQ/nB,GAAW,CAC1B,MAAMmkD,EAAoB9K,GAAqBr5C,CAAO,EACjBmkD,GAAkB,oBAAoB,SAAUH,CAAY,CACnG,CAAC,CACH,CACF,EAAG,CAACA,EAAcj8B,CAAQ,CAAC,EACpBr8B,EAAAA,QAAQ,IACTq8B,EAAS,OACJ87B,EAAoB,MAAM,KAAKA,EAAkB,OAAM,CAAE,EAAE,OAAO,CAAC93D,EAAK2xD,IAAgB/K,GAAI5mD,EAAK2xD,CAAW,EAAGhI,EAAkB,EAAIoF,GAAiB/yB,CAAQ,EAGhK2tB,GACN,CAAC3tB,EAAU87B,CAAiB,CAAC,CAClC,CAEA,SAASO,GAAsB9I,EAAe1J,EAAc,CACtDA,IAAiB,SACnBA,EAAe,CAAA,GAGjB,MAAMyS,EAAuB99D,EAAAA,OAAO,IAAI,EACxCM,OAAAA,EAAAA,UAAU,IAAM,CACdw9D,EAAqB,QAAU,IACjC,EACAzS,CAAY,EACZ/qD,EAAAA,UAAU,IAAM,CACd,MAAMy9D,EAAmBhJ,IAAkB5F,GAEvC4O,GAAoB,CAACD,EAAqB,UAC5CA,EAAqB,QAAU/I,GAG7B,CAACgJ,GAAoBD,EAAqB,UAC5CA,EAAqB,QAAU,KAEnC,EAAG,CAAC/I,CAAa,CAAC,EACX+I,EAAqB,QAAUzR,GAAS0I,EAAe+I,EAAqB,OAAO,EAAI3O,EAChG,CAEA,SAAS6O,GAAe9O,EAAS,CAC/B5uD,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC8pD,GACH,OAGF,MAAM6T,EAAc/O,EAAQ,IAAIlC,GAAQ,CACtC,GAAI,CACF,OAAAiC,CACR,EAAUjC,EACJ,OAAOiC,EAAO,OAAS,KAAO,OAASA,EAAO,MAAK,CACrD,CAAC,EACD,MAAO,IAAM,CACX,UAAWiP,KAAYD,EACOC,IAAQ,CAExC,CACF,EAEAhP,EAAQ,IAAIhB,GAAS,CACnB,GAAI,CACF,OAAAe,CACN,EAAQf,EACJ,OAAOe,CACT,CAAC,CAAC,CACJ,CAEA,SAASkP,GAAsB1oC,EAAW/pB,EAAI,CAC5C,OAAOvG,EAAAA,QAAQ,IACNswB,EAAU,OAAO,CAACjwB,EAAKwnD,IAAS,CACrC,GAAI,CACF,UAAAuI,EACA,QAAAvK,CACR,EAAUgC,EAEJ,OAAAxnD,EAAI+vD,CAAS,EAAIlsD,GAAS,CACxB2hD,EAAQ3hD,EAAOqC,CAAE,CACnB,EAEOlG,CACT,EAAG,CAAA,CAAE,EACJ,CAACiwB,EAAW/pB,CAAE,CAAC,CACpB,CAEA,SAAS0yD,GAAc3kD,EAAS,CAC9B,OAAOtU,EAAAA,QAAQ,IAAMsU,EAAU04C,GAAoB14C,CAAO,EAAI,KAAM,CAACA,CAAO,CAAC,CAC/E,CAEA,MAAM4kD,GAAiB,CAAA,EACvB,SAASC,GAAS98B,EAAUozB,EAAS,CAC/BA,IAAY,SACdA,EAAU3C,IAGZ,KAAM,CAAClX,CAAY,EAAIvZ,EACjB+8B,EAAaH,GAAcrjB,EAAeyP,GAAUzP,CAAY,EAAI,IAAI,EACxE,CAACyjB,EAAOC,CAAQ,EAAIp+D,EAAAA,SAASg+D,EAAc,EAEjD,SAASK,GAAe,CACtBD,EAAS,IACFj9B,EAAS,OAIPA,EAAS,IAAI/nB,GAAW05C,GAA2B15C,CAAO,EAAI8kD,EAAa,IAAIzJ,GAAKF,EAAQn7C,CAAO,EAAGA,CAAO,CAAC,EAH5G4kD,EAIV,CACH,CAEA,MAAMjC,EAAiBD,GAAkB,CACvC,SAAUuC,CACd,CAAG,EACD,OAAA5T,GAA0B,IAAM,CACIsR,GAAe,WAAU,EAC3DsC,EAAY,EACZl9B,EAAS,QAAQ/nB,GAA6C2iD,GAAe,QAAQ3iD,CAAO,CAAC,CAC/F,EAAG,CAAC+nB,CAAQ,CAAC,EACNg9B,CACT,CAEA,SAASG,GAAkB/8C,EAAM,CAC/B,GAAI,CAACA,EACH,OAAO,KAGT,GAAIA,EAAK,SAAS,OAAS,EACzB,OAAOA,EAGT,MAAMg9C,EAAah9C,EAAK,SAAS,CAAC,EAClC,OAAOmf,GAAc69B,CAAU,EAAIA,EAAah9C,CAClD,CAEA,SAASi9C,GAAwB7R,EAAM,CACrC,GAAI,CACF,QAAA4H,CACJ,EAAM5H,EACJ,KAAM,CAAC/jD,EAAMwzD,CAAO,EAAIp8D,EAAAA,SAAS,IAAI,EAC/B+qC,EAAe5qC,EAAAA,YAAYmQ,GAAW,CAC1C,SAAW,CACT,OAAArH,CACN,IAASqH,EACH,GAAIowB,GAAcz3B,CAAM,EAAG,CACzBmzD,EAAQxzD,GAAQ,CACd,MAAM2zD,EAAUhI,EAAQtrD,CAAM,EAC9B,OAAOL,EAAO,CAAE,GAAGA,EACjB,MAAO2zD,EAAQ,MACf,OAAQA,EAAQ,MAC5B,EAAcA,CACN,CAAC,EACD,KACF,CAEJ,EAAG,CAAChI,CAAO,CAAC,EACNwH,EAAiBD,GAAkB,CACvC,SAAU/wB,CACd,CAAG,EACK0zB,EAAmBt+D,EAAAA,YAAYiZ,GAAW,CAC9C,MAAMmI,EAAO+8C,GAAkBllD,CAAO,EACJ2iD,GAAe,WAAU,EAEvDx6C,GACgCw6C,GAAe,QAAQx6C,CAAI,EAG/D66C,EAAQ76C,EAAOgzC,EAAQhzC,CAAI,EAAI,IAAI,CACrC,EAAG,CAACgzC,EAASwH,CAAc,CAAC,EACtB,CAAC1sC,EAAS+E,CAAM,EAAI+2B,GAAWsT,CAAgB,EACrD,OAAO35D,EAAAA,QAAQ,KAAO,CACpB,QAAAuqB,EACA,KAAAzmB,EACA,OAAAwrB,CACJ,GAAM,CAACxrB,EAAMymB,EAAS+E,CAAM,CAAC,CAC7B,CAEA,MAAMsqC,GAAiB,CAAC,CACtB,OAAQxG,GACR,QAAS,CAAA,CACX,EAAG,CACD,OAAQpC,GACR,QAAS,CAAA,CACX,CAAC,EACK6I,GAAc,CAClB,QAAS,CAAA,CACX,EACMC,GAAgC,CACpC,UAAW,CACT,QAAS/M,EACb,EACE,UAAW,CACT,QAASA,GACT,SAAU4I,GAAkB,cAC5B,UAAWC,GAAmB,SAClC,EACE,YAAa,CACX,QAAS9I,EACb,CACA,EAEA,MAAMiN,WAA+B,GAAI,CACvC,IAAIxzD,EAAI,CACN,IAAIyzD,EAEJ,OAAOzzD,GAAM,OAAQyzD,EAAa,MAAM,IAAIzzD,CAAE,IAAM,KAAOyzD,EAAyB,MACtF,CAEA,SAAU,CACR,OAAO,MAAM,KAAK,KAAK,OAAM,CAAE,CACjC,CAEA,YAAa,CACX,OAAO,KAAK,UAAU,OAAOnS,GAAQ,CACnC,GAAI,CACF,SAAAtrD,CACR,EAAUsrD,EACJ,MAAO,CAACtrD,CACV,CAAC,CACH,CAEA,WAAWgK,EAAI,CACb,IAAI0zD,EAAuBC,EAE3B,OAAQD,GAAyBC,EAAY,KAAK,IAAI3zD,CAAE,IAAM,KAAO,OAAS2zD,EAAU,KAAK,UAAY,KAAOD,EAAwB,MAC1I,CAEF,CAEA,MAAME,GAAuB,CAC3B,eAAgB,KAChB,OAAQ,KACR,WAAY,KACZ,eAAgB,KAChB,WAAY,KACZ,kBAAmB,KACnB,eAA6B,IAAI,IACjC,eAA6B,IAAI,IACjC,oBAAkC,IAAIJ,GACtC,KAAM,KACN,YAAa,CACX,QAAS,CACP,QAAS,IACf,EACI,KAAM,KACN,OAAQnQ,EACZ,EACE,oBAAqB,CAAA,EACrB,wBAAyB,CAAA,EACzB,uBAAwBkQ,GACxB,2BAA4BlQ,GAC5B,WAAY,KACZ,mBAAoB,EACtB,EACMwQ,GAAyB,CAC7B,eAAgB,KAChB,WAAY,CAAA,EACZ,OAAQ,KACR,eAAgB,KAChB,kBAAmB,CACjB,UAAW,EACf,EACE,SAAUxQ,GACV,eAA6B,IAAI,IACjC,KAAM,KACN,2BAA4BA,EAC9B,EACMyQ,GAA+BnjB,EAAAA,cAAckjB,EAAsB,EACnEE,GAA6BpjB,EAAAA,cAAcijB,EAAoB,EAErE,SAASI,IAAkB,CACzB,MAAO,CACL,UAAW,CACT,OAAQ,KACR,mBAAoB,CAClB,EAAG,EACH,EAAG,CACX,EACM,MAAO,IAAI,IACX,UAAW,CACT,EAAG,EACH,EAAG,CACX,CACA,EACI,UAAW,CACT,WAAY,IAAIR,EACtB,CACA,CACA,CACA,SAASxuC,GAAQ7L,EAAO8L,EAAQ,CAC9B,OAAQA,EAAO,KAAI,CACjB,KAAKm+B,GAAO,UACV,MAAO,CAAE,GAAGjqC,EACV,UAAW,CAAE,GAAGA,EAAM,UACpB,mBAAoB8L,EAAO,mBAC3B,OAAQA,EAAO,MACzB,CACA,EAEI,KAAKm+B,GAAO,SACV,OAAIjqC,EAAM,UAAU,QAAU,KACrBA,EAGF,CAAE,GAAGA,EACV,UAAW,CAAE,GAAGA,EAAM,UACpB,UAAW,CACT,EAAG8L,EAAO,YAAY,EAAI9L,EAAM,UAAU,mBAAmB,EAC7D,EAAG8L,EAAO,YAAY,EAAI9L,EAAM,UAAU,mBAAmB,CACzE,CACA,CACA,EAEI,KAAKiqC,GAAO,QACZ,KAAKA,GAAO,WACV,MAAO,CAAE,GAAGjqC,EACV,UAAW,CAAE,GAAGA,EAAM,UACpB,OAAQ,KACR,mBAAoB,CAClB,EAAG,EACH,EAAG,CACf,EACU,UAAW,CACT,EAAG,EACH,EAAG,CACf,CACA,CACA,EAEI,KAAKiqC,GAAO,kBACV,CACE,KAAM,CACJ,QAAAr1C,CACV,EAAYkX,EACE,CACJ,GAAAjlB,CACV,EAAY+N,EACEwhD,EAAa,IAAIiE,GAAuBr6C,EAAM,UAAU,UAAU,EACxE,OAAAo2C,EAAW,IAAIvvD,EAAI+N,CAAO,EACnB,CAAE,GAAGoL,EACV,UAAW,CAAE,GAAGA,EAAM,UACpB,WAAAo2C,CACZ,CACA,CACM,CAEF,KAAKnM,GAAO,qBACV,CACE,KAAM,CACJ,GAAApjD,EACA,IAAA3J,EACA,SAAAL,CACV,EAAYivB,EACElX,EAAUoL,EAAM,UAAU,WAAW,IAAInZ,CAAE,EAEjD,GAAI,CAAC+N,GAAW1X,IAAQ0X,EAAQ,IAC9B,OAAOoL,EAGT,MAAMo2C,EAAa,IAAIiE,GAAuBr6C,EAAM,UAAU,UAAU,EACxE,OAAAo2C,EAAW,IAAIvvD,EAAI,CAAE,GAAG+N,EACtB,SAAA/X,CACV,CAAS,EACM,CAAE,GAAGmjB,EACV,UAAW,CAAE,GAAGA,EAAM,UACpB,WAAAo2C,CACZ,CACA,CACM,CAEF,KAAKnM,GAAO,oBACV,CACE,KAAM,CACJ,GAAApjD,EACA,IAAA3J,CACV,EAAY4uB,EACElX,EAAUoL,EAAM,UAAU,WAAW,IAAInZ,CAAE,EAEjD,GAAI,CAAC+N,GAAW1X,IAAQ0X,EAAQ,IAC9B,OAAOoL,EAGT,MAAMo2C,EAAa,IAAIiE,GAAuBr6C,EAAM,UAAU,UAAU,EACxE,OAAAo2C,EAAW,OAAOvvD,CAAE,EACb,CAAE,GAAGmZ,EACV,UAAW,CAAE,GAAGA,EAAM,UACpB,WAAAo2C,CACZ,CACA,CACM,CAEF,QAEI,OAAOp2C,CAEf,CACA,CAEA,SAAS86C,GAAa3S,EAAM,CAC1B,GAAI,CACF,SAAAtrD,CACJ,EAAMsrD,EACJ,KAAM,CACJ,OAAAvc,EACA,eAAAmvB,EACA,eAAArF,CACJ,EAAM/d,EAAAA,WAAWgjB,EAAe,EACxBK,EAAyBlU,GAAYiU,CAAc,EACnDE,EAAmBnU,GAAsClb,GAAO,EAAE,EAExEnwC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAAAoB,GAIA,CAACk+D,GAAkBC,GAA0BC,GAAoB,KAAM,CAKzE,GAJI,CAACvT,GAAgBsT,CAAsB,GAIvC,SAAS,gBAAkBA,EAAuB,OAEpD,OAGF,MAAMrF,EAAgBD,EAAe,IAAIuF,CAAgB,EAEzD,GAAI,CAACtF,EACH,OAGF,KAAM,CACJ,cAAAuF,EACA,KAAAn+C,CACR,EAAU44C,EAEJ,GAAI,CAACuF,EAAc,SAAW,CAACn+C,EAAK,QAClC,OAGF,sBAAsB,IAAM,CAC1B,UAAWnI,IAAW,CAACsmD,EAAc,QAASn+C,EAAK,OAAO,EAAG,CAC3D,GAAI,CAACnI,EACH,SAGF,MAAMumD,EAAgB9S,GAAuBzzC,CAAO,EAEpD,GAAIumD,EAAe,CACjBA,EAAc,MAAK,EACnB,KACF,CACF,CACF,CAAC,CACH,CACF,EAAG,CAACJ,EAAgBl+D,EAAU64D,EAAgBuF,EAAkBD,CAAsB,CAAC,EAChF,IACT,CAEA,SAASI,GAAeC,EAAWlT,EAAM,CACvC,GAAI,CACF,UAAAH,EACA,GAAGtlD,CACP,EAAMylD,EACJ,OAAOkT,GAAa,MAAQA,EAAU,OAASA,EAAU,OAAO,CAACjU,EAAaF,IACrEA,EAAS,CACd,UAAWE,EACX,GAAG1kD,CACT,CAAK,EACAslD,CAAS,EAAIA,CAClB,CAEA,SAASsT,GAA0BnyC,EAAQ,CACzC,OAAO7oB,EAAAA,QAAQ,KAAO,CACpB,UAAW,CAAE,GAAG85D,GAA8B,UAC5C,GAA8BjxC,GAAO,SAC3C,EACI,UAAW,CAAE,GAAGixC,GAA8B,UAC5C,GAA8BjxC,GAAO,SAC3C,EACI,YAAa,CAAE,GAAGixC,GAA8B,YAC9C,GAA8BjxC,GAAO,WAC3C,CACA,GACE,CAA2BA,GAAO,UAAqCA,GAAO,UAAqCA,GAAO,WAAW,CAAC,CACxI,CAEA,SAASoyC,GAAiCpT,EAAM,CAC9C,GAAI,CACF,WAAAoJ,EACA,QAAAxB,EACA,YAAAoI,EACA,OAAAhvC,EAAS,EACb,EAAMg/B,EACJ,MAAMqT,EAAcrgE,EAAAA,OAAO,EAAK,EAC1B,CACJ,EAAAwX,EACA,EAAAyb,CACJ,EAAM,OAAOjF,GAAW,UAAY,CAChC,EAAGA,EACH,EAAGA,CACP,EAAMA,EACJ88B,GAA0B,IAAM,CAG9B,GAFiB,CAACtzC,GAAK,CAACyb,GAER,CAACmjC,EAAY,CAC3BiK,EAAY,QAAU,GACtB,MACF,CAEA,GAAIA,EAAY,SAAW,CAACrD,EAG1B,OAIF,MAAMp7C,EAAqCw0C,GAAW,KAAK,QAE3D,GAAI,CAACx0C,GAAQA,EAAK,cAAgB,GAGhC,OAGF,MAAM3Y,EAAO2rD,EAAQhzC,CAAI,EACnB0+C,EAAYhP,GAAaroD,EAAM+zD,CAAW,EAahD,GAXKxlD,IACH8oD,EAAU,EAAI,GAGXrtC,IACHqtC,EAAU,EAAI,GAIhBD,EAAY,QAAU,GAElB,KAAK,IAAIC,EAAU,CAAC,EAAI,GAAK,KAAK,IAAIA,EAAU,CAAC,EAAI,EAAG,CAC1D,MAAMzN,EAA0BD,GAA2BhxC,CAAI,EAE3DixC,GACFA,EAAwB,SAAS,CAC/B,IAAKyN,EAAU,EACf,KAAMA,EAAU,CAC1B,CAAS,CAEL,CACF,EAAG,CAAClK,EAAY5+C,EAAGyb,EAAG+pC,EAAapI,CAAO,CAAC,CAC7C,CAEA,MAAM2L,GAAsClkB,EAAAA,cAAc,CAAE,GAAG8S,GAC7D,OAAQ,EACR,OAAQ,CACV,CAAC,EACD,IAAIqR,IAEH,SAAUA,EAAQ,CACjBA,EAAOA,EAAO,cAAmB,CAAC,EAAI,gBACtCA,EAAOA,EAAO,aAAkB,CAAC,EAAI,eACrCA,EAAOA,EAAO,YAAiB,CAAC,EAAI,aACtC,GAAGA,KAAWA,GAAS,CAAA,EAAG,EAE1B,MAAMC,GAA0BC,EAAAA,KAAK,SAAoB1T,EAAM,CAC7D,IAAI2T,EAAuBC,EAAuBC,EAAmBC,EAErE,GAAI,CACF,GAAAp1D,EACA,cAAAq1D,EACA,WAAAhH,EAAa,GACb,SAAAx7D,EACA,QAAA2wD,EAAU6P,GACV,mBAAAiC,EAAqB9P,GACrB,UAAA+P,EACA,UAAAf,EACA,GAAGvhE,CACP,EAAMquD,EACJ,MAAMkU,EAAQC,EAAAA,WAAWzwC,GAAS,OAAWgvC,EAAe,EACtD,CAAC76C,EAAOqM,CAAQ,EAAIgwC,EACpB,CAACE,EAAsBC,CAAuB,EAAIvT,GAAqB,EACvE,CAAClmC,EAAQ+O,CAAS,EAAIt2B,EAAAA,SAASmgE,GAAO,aAAa,EACnDc,EAAgB15C,IAAW44C,GAAO,YAClC,CACJ,UAAW,CACT,OAAQe,EACR,MAAOhH,EACP,UAAAv8B,CACN,EACI,UAAW,CACT,WAAYiyB,CAClB,CACA,EAAMprC,EACEjD,EAAO2/C,GAAY,KAAOhH,EAAe,IAAIgH,CAAQ,EAAI,KACzDC,EAAcxhE,EAAAA,OAAO,CACzB,QAAS,KACT,WAAY,IAChB,CAAG,EACKywC,EAAStrC,EAAAA,QAAQ,IAAM,CAC3B,IAAIs8D,GAEJ,OAAOF,GAAY,KAAO,CACxB,GAAIA,EAEJ,MAAOE,GAAqC7/C,GAAK,OAAS,KAAO6/C,GAAazC,GAC9E,KAAMwC,CACZ,EAAQ,IACN,EAAG,CAACD,EAAU3/C,CAAI,CAAC,EACb8/C,EAAY1hE,EAAAA,OAAO,IAAI,EACvB,CAAC2hE,EAAcC,CAAe,EAAIvhE,EAAAA,SAAS,IAAI,EAC/C,CAACu/D,EAAgBiC,CAAiB,EAAIxhE,EAAAA,SAAS,IAAI,EACnDyhE,EAAc1W,GAAezsD,EAAO,OAAO,OAAOA,CAAK,CAAC,EACxDojE,EAAyBlW,GAAY,iBAAkBngD,CAAE,EACzDs2D,EAA6B78D,EAAAA,QAAQ,IAAM8qD,EAAoB,WAAU,EAAI,CAACA,CAAmB,CAAC,EAClGgS,EAAyB9B,GAA0Bc,CAAS,EAC5D,CACJ,eAAAjR,EACA,2BAAA0L,EACA,mBAAAwG,CACJ,EAAMlH,GAAsBgH,EAA4B,CACpD,SAAUV,EACV,aAAc,CAACtjC,EAAU,EAAGA,EAAU,CAAC,EACvC,OAAQikC,EAAuB,SACnC,CAAG,EACK7L,EAAakE,GAAcC,EAAgBgH,CAAQ,EACnDY,GAAwBh9D,UAAQ,IAAMy6D,EAAiBjT,GAAoBiT,CAAc,EAAI,KAAM,CAACA,CAAc,CAAC,EACnHwC,GAAoBC,GAAsB,EAC1CC,GAAwBxG,GAAe1F,EAAY6L,EAAuB,UAAU,OAAO,EACjG7B,GAAiC,CAC/B,WAAYmB,GAAY,KAAOhH,EAAe,IAAIgH,CAAQ,EAAI,KAC9D,OAAQa,GAAkB,wBAC1B,YAAaE,GACb,QAASL,EAAuB,UAAU,OAC9C,CAAG,EACD,MAAMM,EAAiBhG,GAAQnG,EAAY6L,EAAuB,UAAU,QAASK,EAAqB,EACpGE,GAAoBjG,GAAQnG,EAAaA,EAAW,cAAgB,IAAI,EACxEqM,GAAgBziE,EAAAA,OAAO,CAC3B,eAAgB,KAChB,OAAQ,KACR,WAAAo2D,EACA,cAAe,KACf,WAAY,KACZ,eAAApG,EACA,eAAAuK,EACA,aAAc,KACd,iBAAkB,KAClB,oBAAAtK,EACA,KAAM,KACN,oBAAqB,CAAA,EACrB,wBAAyB,IAC7B,CAAG,EACKyS,GAAWzS,EAAoB,YAAY0Q,EAAwB8B,GAAc,QAAQ,OAAS,KAAO,OAAS9B,EAAsB,EAAE,EAC1IgC,GAAc9D,GAAwB,CAC1C,QAASoD,EAAuB,YAAY,OAChD,CAAG,EAEKW,IAAgBhC,EAAwB+B,GAAY,QAAQ,UAAY,KAAO/B,EAAwBxK,EACvGyM,GAAmBvB,GAAiBT,EAAoB8B,GAAY,OAAS,KAAO9B,EAAoB0B,EAAiB,KACzHO,GAAkB,GAAQH,GAAY,QAAQ,SAAWA,GAAY,MAGrEI,GAAgBhG,GAAa+F,GAAkB,KAAOP,CAAc,EAEpEhE,GAAaH,GAAcwE,GAAepY,GAAUoY,EAAY,EAAI,IAAI,EAExEpO,GAAsB0I,GAAuBoE,EAAgBoB,IAA8BtM,EAAa,IAAI,EAC5GmD,EAA0B+E,GAAS9J,EAAmB,EAEtDwO,GAAoB/C,GAAeC,EAAW,CAClD,UAAW,CACT,EAAGliC,EAAU,EAAI+kC,GAAc,EAC/B,EAAG/kC,EAAU,EAAI+kC,GAAc,EAC/B,OAAQ,EACR,OAAQ,CACd,EACI,eAAAnD,EACA,OAAAnvB,EACA,eAAA8xB,EACA,kBAAAC,GACA,iBAAAK,GACA,KAAMJ,GAAc,QAAQ,KAC5B,gBAAiBE,GAAY,KAC7B,oBAAAnO,GACA,wBAAA+E,EACA,WAAAgF,EACJ,CAAG,EACKjF,GAAqB6I,GAAwB/V,GAAI+V,GAAuBnkC,CAAS,EAAI,KACrF+2B,GAAgBsI,GAAiB7I,EAAmB,EAEpDyO,GAAmBpF,GAAsB9I,EAAa,EAEtDmO,GAAwBrF,GAAsB9I,GAAe,CAACwN,CAAc,CAAC,EAC7EY,GAA0B/W,GAAI4W,GAAmBC,EAAgB,EACjElT,GAAgB8S,GAAmBrR,GAAgBqR,GAAkBG,EAAiB,EAAI,KAC1FrT,GAAalf,GAAUsf,GAAgBiR,EAAmB,CAC9D,OAAAvwB,EACA,cAAAsf,GACA,eAAAC,EACA,oBAAqBgS,EACrB,mBAAA1I,EACJ,CAAG,EAAI,KACC8J,GAAS1T,GAAkBC,GAAY,IAAI,EAC3C,CAACnH,EAAM6a,EAAO,EAAIhjE,EAAAA,SAAS,IAAI,EAG/BijE,GAAmBR,GAAkBE,GAAoB5W,GAAI4W,GAAmBE,EAAqB,EACrGrW,GAAYsE,GAAYmS,IAAmBxC,EAAqCtY,GAAK,OAAS,KAAOsY,EAAa,KAAMyB,CAAc,EACtIgB,GAAkBvjE,EAAAA,OAAO,IAAI,EAC7BwjE,GAAoBhjE,EAAAA,YAAY,CAAC6I,GAAO6kD,KAAU,CACtD,GAAI,CACF,OAAQ0M,GACR,QAAAhzD,EACN,EAAQsmD,GAEJ,GAAIwT,EAAU,SAAW,KACvB,OAGF,MAAMtL,GAAamE,EAAe,IAAImH,EAAU,OAAO,EAEvD,GAAI,CAACtL,GACH,OAGF,MAAMwJ,GAAiBv2D,GAAM,YACvBo6D,GAAiB,IAAI7I,GAAO,CAChC,OAAQ8G,EAAU,QAClB,WAAAtL,GACA,MAAOwJ,GACP,QAAAh4D,GAGA,QAAS66D,GAET,QAAQ/2D,GAAI,CAGV,GAAI,CAFkB6uD,EAAe,IAAI7uD,EAAE,EAGzC,OAGF,KAAM,CACJ,YAAAg4D,EACV,EAAY5B,EAAY,QACVz4D,GAAQ,CACZ,GAAAqC,EACV,EACuCg4D,KAAYr6D,EAAK,EAChD+3D,EAAqB,CACnB,KAAM,cACN,MAAA/3D,EACV,CAAS,CACH,EAEA,UAAUqC,GAAI+rD,GAAYS,GAAoBhiC,GAAQ,CAGpD,GAAI,CAFkBqkC,EAAe,IAAI7uD,EAAE,EAGzC,OAGF,KAAM,CACJ,cAAAi4D,EACV,EAAY7B,EAAY,QACVz4D,GAAQ,CACZ,GAAAqC,GACA,WAAA+rD,GACA,mBAAAS,GACA,OAAAhiC,EACV,EACyCytC,KAAct6D,EAAK,EACpD+3D,EAAqB,CACnB,KAAM,gBACN,MAAA/3D,EACV,CAAS,CACH,EAEA,QAAQ6uD,GAAoB,CAC1B,MAAMxsD,GAAKg2D,EAAU,QAErB,GAAIh2D,IAAM,KACR,OAGF,MAAM8uD,GAAgBD,EAAe,IAAI7uD,EAAE,EAE3C,GAAI,CAAC8uD,GACH,OAGF,KAAM,CACJ,YAAAoJ,EACV,EAAY9B,EAAY,QACVz4D,GAAQ,CACZ,eAAAu2D,GACA,OAAQ,CACN,GAAAl0D,GACA,KAAM8uD,GAAc,KACpB,KAAMgH,CAClB,CACA,EACQqC,GAAAA,wBAAwB,IAAM,CACGD,KAAYv6D,EAAK,EAChDstB,EAAU6pC,GAAO,YAAY,EAC7BtvC,EAAS,CACP,KAAM49B,GAAO,UACb,mBAAAoJ,GACA,OAAQxsD,EACpB,CAAW,EACD01D,EAAqB,CACnB,KAAM,cACN,MAAA/3D,EACZ,CAAW,EACDu4D,EAAgB2B,GAAgB,OAAO,EACvC1B,EAAkBjC,EAAc,CAClC,CAAC,CACH,EAEA,OAAOzI,GAAa,CAClBjmC,EAAS,CACP,KAAM49B,GAAO,SACb,YAAAqI,EACV,CAAS,CACH,EAEA,MAAO2M,GAAchV,GAAO,OAAO,EACnC,SAAUgV,GAAchV,GAAO,UAAU,CAC/C,CAAK,EACDyU,GAAgB,QAAUE,GAE1B,SAASK,GAAcnkE,GAAM,CAC3B,OAAO,gBAAyB,CAC9B,KAAM,CACJ,OAAA8wC,GACA,WAAAkf,GACA,KAAAnH,GACA,wBAAA2a,EACV,EAAYV,GAAc,QAClB,IAAIp5D,GAAQ,KAEZ,GAAIonC,IAAU0yB,GAAyB,CACrC,KAAM,CACJ,WAAAY,EACZ,EAAcjC,EAAY,QAChBz4D,GAAQ,CACN,eAAAu2D,GACA,OAAQnvB,GACR,WAAAkf,GACA,MAAOwT,GACP,KAAA3a,EACZ,EAEc7oD,KAASmvD,GAAO,SAAW,OAAOiV,IAAe,YAC9B,MAAM,QAAQ,QAAQA,GAAW16D,EAAK,CAAC,IAG1D1J,GAAOmvD,GAAO,WAGpB,CAEA4S,EAAU,QAAU,KACpBmC,GAAAA,wBAAwB,IAAM,CAC5B3yC,EAAS,CACP,KAAAvxB,EACZ,CAAW,EACDg3B,EAAU6pC,GAAO,aAAa,EAC9B6C,GAAQ,IAAI,EACZzB,EAAgB,IAAI,EACpBC,EAAkB,IAAI,EACtB0B,GAAgB,QAAU,KAC1B,MAAMhO,GAAY51D,KAASmvD,GAAO,QAAU,YAAc,eAE1D,GAAIzlD,GAAO,CACT,MAAM2hD,GAAU8W,EAAY,QAAQvM,EAAS,EAClBvK,KAAQ3hD,EAAK,EACxC+3D,EAAqB,CACnB,KAAM7L,GACN,MAAAlsD,EACd,CAAa,CACH,CACF,CAAC,CACH,CACF,CACF,EACA,CAACkxD,CAAc,CAAC,EACVyJ,GAAoCxjE,EAAAA,YAAY,CAACwqD,GAASiE,KACvD,CAAC5lD,GAAOonC,KAAW,CACxB,MAAMwzB,GAAc56D,GAAM,YACpB66D,GAAsB3J,EAAe,IAAI9pB,EAAM,EAErD,GACAixB,EAAU,UAAY,MACtB,CAACwC,IACDD,GAAY,QAAUA,GAAY,iBAChC,OAGF,MAAME,GAAoB,CACxB,OAAQD,EAChB,EAC6BlZ,GAAQ3hD,GAAO4lD,GAAO,QAASkV,EAAiB,IAEhD,KACrBF,GAAY,OAAS,CACnB,WAAYhV,GAAO,MAC7B,EACQyS,EAAU,QAAUjxB,GACpB+yB,GAAkBn6D,GAAO4lD,EAAM,EAEnC,EACC,CAACsL,EAAgBiJ,EAAiB,CAAC,EAChCY,GAAa1J,GAAqBxL,EAAS8U,EAAiC,EAClFhG,GAAe9O,CAAO,EACtBpE,GAA0B,IAAM,CAC1ByX,GAAkB36C,IAAW44C,GAAO,cACtC7pC,EAAU6pC,GAAO,WAAW,CAEhC,EAAG,CAAC+B,EAAgB36C,CAAM,CAAC,EAC3BtnB,EAAAA,UAAU,IAAM,CACd,KAAM,CACJ,WAAA+jE,EACN,EAAQvC,EAAY,QACV,CACJ,OAAArxB,GACA,eAAAmvB,GACA,WAAAjQ,GACA,KAAAnH,EACN,EAAQia,GAAc,QAElB,GAAI,CAAChyB,IAAU,CAACmvB,GACd,OAGF,MAAMv2D,GAAQ,CACZ,OAAAonC,GACA,eAAAmvB,GACA,WAAAjQ,GACA,MAAO,CACL,EAAGwT,GAAwB,EAC3B,EAAGA,GAAwB,CACnC,EACM,KAAA3a,EACN,EACIqb,GAAAA,wBAAwB,IAAM,CACEQ,KAAWh7D,EAAK,EAC9C+3D,EAAqB,CACnB,KAAM,aACN,MAAA/3D,EACR,CAAO,CACH,CAAC,CACH,EACA,CAAC85D,GAAwB,EAAGA,GAAwB,CAAC,CAAC,EACtD7iE,EAAAA,UAAU,IAAM,CACd,KAAM,CACJ,OAAAmwC,GACA,eAAAmvB,GACA,WAAAjQ,GACA,oBAAAM,GACA,wBAAAkT,EACN,EAAQV,GAAc,QAElB,GAAI,CAAChyB,IAAUixB,EAAU,SAAW,MAAQ,CAAC9B,IAAkB,CAACuD,GAC9D,OAGF,KAAM,CACJ,WAAAmB,EACN,EAAQxC,EAAY,QACVyC,GAAgBtU,GAAoB,IAAImT,EAAM,EAC9C5a,GAAO+b,IAAiBA,GAAc,KAAK,QAAU,CACzD,GAAIA,GAAc,GAClB,KAAMA,GAAc,KAAK,QACzB,KAAMA,GAAc,KACpB,SAAUA,GAAc,QAC9B,EAAQ,KACEl7D,GAAQ,CACZ,OAAAonC,GACA,eAAAmvB,GACA,WAAAjQ,GACA,MAAO,CACL,EAAGwT,GAAwB,EAC3B,EAAGA,GAAwB,CACnC,EACM,KAAA3a,EACN,EACIqb,GAAAA,wBAAwB,IAAM,CAC5BR,GAAQ7a,EAAI,EACkB8b,KAAWj7D,EAAK,EAC9C+3D,EAAqB,CACnB,KAAM,aACN,MAAA/3D,EACR,CAAO,CACH,CAAC,CACH,EACA,CAAC+5D,EAAM,CAAC,EACRtY,GAA0B,IAAM,CAC9B2X,GAAc,QAAU,CACtB,eAAA7C,EACA,OAAAnvB,EACA,WAAA2lB,EACA,cAAArG,GACA,WAAAJ,GACA,eAAAK,EACA,eAAAuK,EACA,aAAAqI,GACA,iBAAAC,GACA,oBAAA5S,EACA,KAAAzH,EACA,oBAAAgM,GACA,wBAAA2O,EACN,EACI3B,EAAY,QAAU,CACpB,QAASqB,GACT,WAAY9S,EAClB,CACE,EAAG,CAACtf,EAAQ2lB,EAAYzG,GAAYI,GAAewK,EAAgBqI,GAAcC,GAAkB7S,EAAgBC,EAAqBzH,EAAMgM,GAAqB2O,EAAuB,CAAC,EAC3LnK,GAAgB,CAAE,GAAGoJ,GACnB,MAAOpkC,EACP,aAAc+xB,GACd,mBAAAuJ,GACA,oBAAA9E,GACA,wBAAA+E,CACJ,CAAG,EACD,MAAMiL,GAAgBr/D,EAAAA,QAAQ,KACZ,CACd,OAAAsrC,EACA,WAAA2lB,EACA,eAAAmM,EACA,eAAA3C,EACA,WAAAjQ,GACA,kBAAA6S,GACA,YAAAG,GACA,eAAApI,EACA,oBAAAtK,EACA,eAAAD,EACA,KAAAxH,EACA,2BAAAkT,EACA,oBAAAlH,GACA,wBAAA+E,EACA,uBAAA0I,EACA,mBAAAC,EACA,WAAA3D,EACN,GAEK,CAAC9tB,EAAQ2lB,EAAYmM,EAAgB3C,EAAgBjQ,GAAY6S,GAAmBG,GAAapI,EAAgBtK,EAAqBD,EAAgBxH,EAAMkT,EAA4BlH,GAAqB+E,EAAyB0I,EAAwBC,EAAoB3D,EAAU,CAAC,EAC1RkG,GAAkBt/D,EAAAA,QAAQ,KACd,CACd,eAAAy6D,EACA,WAAAwE,GACA,OAAA3zB,EACA,eAAA8xB,EACA,kBAAmB,CACjB,UAAWR,CACnB,EACM,SAAA7wC,EACA,eAAAqpC,EACA,KAAA/R,EACA,2BAAAkT,CACN,GAEK,CAACkE,EAAgBwE,GAAY3zB,EAAQ8xB,EAAgBrxC,EAAU6wC,EAAwBxH,EAAgB/R,EAAMkT,CAA0B,CAAC,EAC3I,OAAOz8D,EAAM,cAAc0uD,GAAkB,SAAU,CACrD,MAAO0T,CACX,EAAKpiE,EAAM,cAAcugE,GAAgB,SAAU,CAC/C,MAAOiF,EACX,EAAKxlE,EAAM,cAAcwgE,GAAc,SAAU,CAC7C,MAAO+E,EACX,EAAKvlE,EAAM,cAAcshE,GAAuB,SAAU,CACtD,MAAO1T,EACX,EAAKtuD,CAAQ,CAAC,EAAGU,EAAM,cAAc0gE,GAAc,CAC/C,SAA4CoB,GAAc,eAAkB,EAChF,CAAG,CAAC,EAAG9hE,EAAM,cAAcovD,GAAe,CAAE,GAAG0S,EAC3C,wBAAyBgB,CAC7B,CAAG,CAAC,EAEF,SAASM,IAAyB,CAChC,MAAMqC,GAAkE/C,GAAa,oBAAuB,GACtGgD,GAA6B,OAAO5K,GAAe,SAAWA,EAAW,UAAY,GAAQA,IAAe,GAC5GZ,GAAUmI,GAAiB,CAACoD,IAAkC,CAACC,GAErE,OAAI,OAAO5K,GAAe,SACjB,CAAE,GAAGA,EACV,QAAAZ,EACR,EAGW,CACL,QAAAA,EACN,CACE,CACF,CAAC,EAEKyL,GAA2BvoB,EAAAA,cAAc,IAAI,EAC7CwoB,GAAc,SACdC,GAAY,YAClB,SAASC,GAAa/X,EAAM,CAC1B,GAAI,CACF,GAAAthD,EACA,KAAAgX,EACA,SAAAhhB,EAAW,GACX,WAAA+hB,CACJ,EAAMupC,EACJ,MAAMjrD,EAAM8pD,GAAYiZ,EAAS,EAC3B,CACJ,WAAAV,EACA,eAAAxE,EACA,OAAAnvB,EACA,eAAA8xB,EACA,kBAAAyC,EACA,eAAAzK,EACA,KAAA/R,CACJ,EAAMhM,EAAAA,WAAWgjB,EAAe,EACxB,CACJ,KAAAyF,EAAOJ,GACP,gBAAAK,EAAkB,YAClB,SAAAC,EAAW,CACf,EAAM1hD,GAAkC,CAAA,EAChC2hD,EAAwC30B,GAAO,KAAQ/kC,EACvDmhD,EAAYrQ,EAAAA,WAAW4oB,EAAa7E,GAAyBqE,EAAW,EACxE,CAAChjD,EAAM8pC,CAAU,EAAIF,GAAU,EAC/B,CAACuU,EAAesF,CAAmB,EAAI7Z,GAAU,EACjD/1B,EAAY0oC,GAAsBiG,EAAY14D,CAAE,EAChD45D,EAAUla,GAAe1oC,CAAI,EACnCooC,GAA0B,KACxByP,EAAe,IAAI7uD,EAAI,CACrB,GAAAA,EACA,IAAA3J,EACA,KAAA6f,EACA,cAAAm+C,EACA,KAAMuF,CACZ,CAAK,EACM,IAAM,CACX,MAAM1jD,EAAO24C,EAAe,IAAI7uD,CAAE,EAE9BkW,GAAQA,EAAK,MAAQ7f,GACvBw4D,EAAe,OAAO7uD,CAAE,CAE5B,GAEF,CAAC6uD,EAAgB7uD,CAAE,CAAC,EACpB,MAAM65D,EAAqBpgE,EAAAA,QAAQ,KAAO,CACxC,KAAA8/D,EACA,SAAAE,EACA,gBAAiBzjE,EACjB,eAAgB0jE,GAAcH,IAASJ,GAAc,GAAO,OAC5D,uBAAwBK,EACxB,mBAAoBF,EAAkB,SAC1C,GAAM,CAACtjE,EAAUujE,EAAME,EAAUC,EAAYF,EAAiBF,EAAkB,SAAS,CAAC,EACxF,MAAO,CACL,OAAAv0B,EACA,eAAAmvB,EACA,eAAA2C,EACA,WAAYgD,EACZ,WAAAH,EACA,UAAW1jE,EAAW,OAAY+zB,EAClC,KAAA7T,EACA,KAAA4mC,EACA,WAAAkD,EACA,oBAAA2Z,EACA,UAAAxY,CACJ,CACA,CAEA,SAAS2Y,IAAgB,CACvB,OAAOhpB,EAAAA,WAAWijB,EAAa,CACjC,CAEA,MAAMgG,GAAc,YACdC,GAA8B,CAClC,QAAS,EACX,EACA,SAASC,GAAa3Y,EAAM,CAC1B,GAAI,CACF,KAAAtqC,EACA,SAAAhhB,EAAW,GACX,GAAAgK,EACA,qBAAAk6D,CACJ,EAAM5Y,EACJ,MAAMjrD,EAAM8pD,GAAY4Z,EAAW,EAC7B,CACJ,OAAAh1B,EACA,SAAAvf,EACA,KAAAs3B,EACA,2BAAAkT,CACJ,EAAMlf,EAAAA,WAAWgjB,EAAe,EACxBqG,EAAW7lE,EAAAA,OAAO,CACtB,SAAA0B,CACJ,CAAG,EACKokE,EAA0B9lE,EAAAA,OAAO,EAAK,EACtCiJ,EAAOjJ,EAAAA,OAAO,IAAI,EAClB+lE,EAAa/lE,EAAAA,OAAO,IAAI,EACxB,CACJ,SAAUgmE,EACV,sBAAAC,EACA,QAASC,CACb,EAAM,CAAE,GAAGR,GACP,GAAGE,CACP,EACQha,EAAMR,GAAe6a,GAAwDv6D,CAAE,EAC/E0/B,EAAe5qC,EAAAA,YAAY,IAAM,CACrC,GAAI,CAACslE,EAAwB,QAAS,CAGpCA,EAAwB,QAAU,GAClC,MACF,CAEIC,EAAW,SAAW,MACxB,aAAaA,EAAW,OAAO,EAGjCA,EAAW,QAAU,WAAW,IAAM,CACpCrK,EAA2B,MAAM,QAAQ9P,EAAI,OAAO,EAAIA,EAAI,QAAU,CAACA,EAAI,OAAO,CAAC,EACnFma,EAAW,QAAU,IACvB,EAAGG,CAAqB,CAC1B,EACA,CAACA,CAAqB,CAAC,EACjB9J,EAAiBD,GAAkB,CACvC,SAAU/wB,EACV,SAAU46B,GAA0B,CAACv1B,CACzC,CAAG,EACKquB,EAAmBt+D,EAAAA,YAAY,CAAC2lE,EAAYC,IAAoB,CAC/DhK,IAIDgK,IACFhK,EAAe,UAAUgK,CAAe,EACxCN,EAAwB,QAAU,IAGhCK,GACF/J,EAAe,QAAQ+J,CAAU,EAErC,EAAG,CAAC/J,CAAc,CAAC,EACb,CAAC1sC,EAASg8B,CAAU,EAAIF,GAAWsT,CAAgB,EACnDwG,EAAUla,GAAe1oC,CAAI,EACnCpiB,OAAAA,EAAAA,UAAU,IAAM,CACV,CAAC87D,GAAkB,CAAC1sC,EAAQ,UAIhC0sC,EAAe,WAAU,EACzB0J,EAAwB,QAAU,GAClC1J,EAAe,QAAQ1sC,EAAQ,OAAO,EACxC,EAAG,CAACA,EAAS0sC,CAAc,CAAC,EAC5B97D,EAAAA,UAAU,KACR4wB,EAAS,CACP,KAAM49B,GAAO,kBACb,QAAS,CACP,GAAApjD,EACA,IAAA3J,EACA,SAAAL,EACA,KAAMguB,EACN,KAAAzmB,EACA,KAAMq8D,CACd,CACA,CAAK,EACM,IAAMp0C,EAAS,CACpB,KAAM49B,GAAO,oBACb,IAAA/sD,EACA,GAAA2J,CACN,CAAK,GAEH,CAACA,CAAE,CAAC,EACJpL,EAAAA,UAAU,IAAM,CACVoB,IAAamkE,EAAS,QAAQ,WAChC30C,EAAS,CACP,KAAM49B,GAAO,qBACb,GAAApjD,EACA,IAAA3J,EACA,SAAAL,CACR,CAAO,EACDmkE,EAAS,QAAQ,SAAWnkE,EAEhC,EAAG,CAACgK,EAAI3J,EAAKL,EAAUwvB,CAAQ,CAAC,EACzB,CACL,OAAAuf,EACA,KAAAxnC,EACA,OAAiCu/C,GAAK,KAAQ98C,EAC9C,KAAMgkB,EACN,KAAA84B,EACA,WAAAkD,CACJ,CACA,CCh/GA,SAASpD,GAAUhvC,EAAO+sD,EAAMC,EAAI,CAClC,MAAMC,EAAWjtD,EAAM,MAAK,EAC5B,OAAAitD,EAAS,OAAOD,EAAK,EAAIC,EAAS,OAASD,EAAKA,EAAI,EAAGC,EAAS,OAAOF,EAAM,CAAC,EAAE,CAAC,CAAC,EAC3EE,CACT,CAYA,SAASC,GAAezmC,EAAOy+B,EAAO,CACpC,OAAOz+B,EAAM,OAAO,CAACksB,EAAavgD,EAAI6K,IAAU,CAC9C,MAAMtN,EAAOu1D,EAAM,IAAI9yD,CAAE,EAEzB,OAAIzC,IACFgjD,EAAY11C,CAAK,EAAItN,GAGhBgjD,CACT,EAAG,MAAMlsB,EAAM,MAAM,CAAC,CACxB,CAEA,SAAS0mC,GAAalwD,EAAO,CAC3B,OAAOA,IAAU,MAAQA,GAAS,CACpC,CAEA,SAASmwD,GAAWhvC,EAAGC,EAAG,CACxB,GAAID,IAAMC,EACR,MAAO,GAGT,GAAID,EAAE,SAAWC,EAAE,OACjB,MAAO,GAGT,QAASzU,EAAI,EAAGA,EAAIwU,EAAE,OAAQxU,IAC5B,GAAIwU,EAAExU,CAAC,IAAMyU,EAAEzU,CAAC,EACd,MAAO,GAIX,MAAO,EACT,CAEA,SAASyjD,GAAkBjlE,EAAU,CACnC,OAAI,OAAOA,GAAa,UACf,CACL,UAAWA,EACX,UAAWA,CACjB,EAGSA,CACT,CA8EA,MAAMklE,GAAsB5Z,GAAQ,CAClC,GAAI,CACF,MAAAwR,EACA,YAAAqI,EACA,UAAAC,EACA,MAAAvwD,CACJ,EAAMy2C,EACJ,MAAM+Z,EAAWze,GAAUkW,EAAOsI,EAAWD,CAAW,EAClDG,EAAUxI,EAAMjoD,CAAK,EACrBqmD,EAAUmK,EAASxwD,CAAK,EAE9B,MAAI,CAACqmD,GAAW,CAACoK,EACR,KAGF,CACL,EAAGpK,EAAQ,KAAOoK,EAAQ,KAC1B,EAAGpK,EAAQ,IAAMoK,EAAQ,IACzB,OAAQpK,EAAQ,MAAQoK,EAAQ,MAChC,OAAQpK,EAAQ,OAASoK,EAAQ,MACrC,CACA,EA8GMlC,GAAY,WACZmC,GAAuBhoE,EAAM,cAAc,CAC/C,YAAa,GACb,YAAa6lE,GACb,kBAAmB,GACnB,MAAO,CAAA,EACP,UAAW,GACX,eAAgB,GAChB,YAAa,CAAA,EACb,SAAU8B,GACV,SAAU,CACR,UAAW,GACX,UAAW,EACf,CACA,CAAC,EACD,SAASM,GAAgBla,EAAM,CAC7B,GAAI,CACF,SAAAzuD,EACA,GAAAmN,EACA,MAAOy7D,EACP,SAAA7L,EAAWsL,GACX,SAAUQ,EAAe,EAC7B,EAAMpa,EACJ,KAAM,CACJ,OAAAvc,EACA,YAAAkyB,EACA,eAAA3S,EACA,KAAAxH,EACA,2BAAAkT,CACJ,EAAM8J,GAAa,EACXj4D,EAAcs+C,GAAYiZ,GAAWp5D,CAAE,EACvC27D,EAAyB1E,EAAY,OAAS,KAC9C5iC,EAAQ56B,EAAAA,QAAQ,IAAMgiE,EAAiB,IAAIt2D,GAAQ,OAAOA,GAAS,UAAY,OAAQA,EAAOA,EAAK,GAAKA,CAAI,EAAG,CAACs2D,CAAgB,CAAC,EACjI/B,EAAa30B,GAAU,KACvBo2B,EAAcp2B,EAAS1Q,EAAM,QAAQ0Q,EAAO,EAAE,EAAI,GAClDq2B,EAAYte,EAAOzoB,EAAM,QAAQyoB,EAAK,EAAE,EAAI,GAC5C8e,EAAmBtnE,EAAAA,OAAO+/B,CAAK,EAC/BwnC,EAAmB,CAACb,GAAW3mC,EAAOunC,EAAiB,OAAO,EAC9DE,EAAoBV,IAAc,IAAMD,IAAgB,IAAMU,EAC9D7lE,EAAWilE,GAAkBS,CAAY,EAC/Ctc,GAA0B,IAAM,CAC1Byc,GAAoBnC,GACtB1J,EAA2B37B,CAAK,CAEpC,EAAG,CAACwnC,EAAkBxnC,EAAOqlC,EAAY1J,CAA0B,CAAC,EACpEp7D,EAAAA,UAAU,IAAM,CACdgnE,EAAiB,QAAUvnC,CAC7B,EAAG,CAACA,CAAK,CAAC,EACV,MAAM0nC,EAAetiE,EAAAA,QAAQ,KAAO,CAClC,YAAA0hE,EACA,YAAAt5D,EACA,SAAA7L,EACA,kBAAA8lE,EACA,MAAAznC,EACA,UAAA+mC,EACA,eAAAO,EACA,YAAab,GAAezmC,EAAOiwB,CAAc,EACjD,SAAAsL,CACJ,GACE,CAACuL,EAAat5D,EAAa7L,EAAS,UAAWA,EAAS,UAAW8lE,EAAmBznC,EAAO+mC,EAAW9W,EAAgBqX,EAAgB/L,CAAQ,CAAC,EACjJ,OAAOr8D,EAAM,cAAcgoE,GAAQ,SAAU,CAC3C,MAAOQ,CACX,EAAKlpE,CAAQ,CACb,CAEA,MAAMmpE,GAAwB1a,GAAQ,CACpC,GAAI,CACF,GAAAthD,EACA,MAAAq0B,EACA,YAAA8mC,EACA,UAAAC,CACJ,EAAM9Z,EACJ,OAAO1E,GAAUvoB,EAAO8mC,EAAaC,CAAS,EAAE,QAAQp7D,CAAE,CAC5D,EACMi8D,GAA8BzZ,GAAS,CAC3C,GAAI,CACF,YAAA3gD,EACA,UAAAq6D,EACA,YAAAC,EACA,MAAAtxD,EACA,MAAAwpB,EACA,SAAA+oB,EACA,cAAAgf,EACA,oBAAAC,EACA,WAAAC,CACJ,EAAM9Z,EAMJ,MAJI,CAAC8Z,GAAc,CAACH,GAIhBC,IAAkB/nC,GAASxpB,IAAUuyC,EAChC,GAGL8e,EACK,GAGF9e,IAAavyC,GAAShJ,IAAgBw6D,CAC/C,EACME,GAAoB,CACxB,SAAU,IACV,OAAQ,MACV,EACMC,GAAqB,YACrBC,GAAkCvb,GAAI,WAAW,SAAS,CAC9D,SAAUsb,GACV,SAAU,EACV,OAAQ,QACV,CAAC,EACKE,GAAoB,CACxB,gBAAiB,UACnB,EAOA,SAASC,GAAoBrb,EAAM,CACjC,GAAI,CACF,SAAAtrD,EACA,MAAA6U,EACA,KAAAqL,EACA,KAAA3Y,CACJ,EAAM+jD,EACJ,KAAM,CAACsb,EAAkBC,CAAmB,EAAIloE,EAAAA,SAAS,IAAI,EACvDmoE,EAAgBxoE,EAAAA,OAAOuW,CAAK,EAClC,OAAAu0C,GAA0B,IAAM,CAC9B,GAAI,CAACppD,GAAY6U,IAAUiyD,EAAc,SAAW5mD,EAAK,QAAS,CAChE,MAAM6mD,EAAUx/D,EAAK,QAErB,GAAIw/D,EAAS,CACX,MAAM39B,EAAUmnB,GAAcrwC,EAAK,QAAS,CAC1C,gBAAiB,EAC3B,CAAS,EACKokB,EAAQ,CACZ,EAAGyiC,EAAQ,KAAO39B,EAAQ,KAC1B,EAAG29B,EAAQ,IAAM39B,EAAQ,IACzB,OAAQ29B,EAAQ,MAAQ39B,EAAQ,MAChC,OAAQ29B,EAAQ,OAAS39B,EAAQ,MAC3C,GAEY9E,EAAM,GAAKA,EAAM,IACnBuiC,EAAoBviC,CAAK,CAE7B,CACF,CAEIzvB,IAAUiyD,EAAc,UAC1BA,EAAc,QAAUjyD,EAE5B,EAAG,CAAC7U,EAAU6U,EAAOqL,EAAM3Y,CAAI,CAAC,EAChC3I,EAAAA,UAAU,IAAM,CACVgoE,GACFC,EAAoB,IAAI,CAE5B,EAAG,CAACD,CAAgB,CAAC,EACdA,CACT,CAEA,SAASI,GAAY1b,EAAM,CACzB,GAAI,CACF,qBAAA2b,EAAuBhB,GACvB,WAAYiB,EACZ,SAAUC,EACV,KAAMC,EACN,YAAAC,EAAcrB,GACd,GAAAh8D,EACA,SAAUs9D,EACV,qBAAApD,EACA,WAAAoC,EAAaC,EACjB,EAAMjb,EACJ,KAAM,CACJ,MAAAjtB,EACA,YAAAxyB,EACA,YAAAs5D,EACA,SAAUoC,EACV,kBAAAzB,EACA,YAAA0B,EACA,UAAApC,EACA,eAAAO,EACA,SAAU8B,CACd,EAAM3sB,EAAAA,WAAWyqB,EAAO,EAChBvlE,EAAW0nE,GAAuBP,EAAeI,CAAc,EAC/D1yD,EAAQwpB,EAAM,QAAQr0B,CAAE,EACxBgX,EAAOvd,EAAAA,QAAQ,KAAO,CAC1B,SAAU,CACR,YAAAoI,EACA,MAAAgJ,EACA,MAAAwpB,CACN,EACI,GAAG+oC,CACP,GAAM,CAACv7D,EAAau7D,EAAYvyD,EAAOwpB,CAAK,CAAC,EACrCspC,EAA4BlkE,EAAAA,QAAQ,IAAM46B,EAAM,MAAMA,EAAM,QAAQr0B,CAAE,CAAC,EAAG,CAACq0B,EAAOr0B,CAAE,CAAC,EACrF,CACJ,KAAAzC,EACA,KAAA2Y,EACA,OAAA0nD,EACA,WAAYC,CAChB,EAAM5D,GAAa,CACf,GAAAj6D,EACA,KAAAgX,EACA,SAAUhhB,EAAS,UACnB,qBAAsB,CACpB,sBAAuB2nE,EACvB,GAAGzD,CACT,CACA,CAAG,EACK,CACJ,OAAAn1B,EACA,eAAAmvB,EACA,eAAA2C,EACA,WAAA9+C,EACA,WAAY+lD,EACZ,UAAA/zC,EACA,WAAA2vC,EACA,KAAA5c,EACA,oBAAA6c,EACA,UAAAxY,CACJ,EAAMkY,GAAa,CACf,GAAAr5D,EACA,KAAAgX,EACA,WAAY,CAAE,GAAG0lD,GACf,GAAGQ,CACT,EACI,SAAUlnE,EAAS,SACvB,CAAG,EACKgqD,EAAaxB,GAAgBqf,EAAqBC,CAAmB,EACrE5B,EAAY,EAAQn3B,EACpBg5B,EAAe7B,GAAa,CAACJ,GAAqBf,GAAaI,CAAW,GAAKJ,GAAaK,CAAS,EACrG4C,EAA2B,CAACrC,GAAkBjC,EAC9CuE,EAAyBD,GAA4BD,EAAe5c,EAAY,KAEhF+c,GAAiBH,EAAeE,IADrBX,GAAwCG,GACgD,CACvG,MAAOD,EACP,eAAA3G,EACA,YAAAsE,EACA,UAAAC,EACA,MAAAvwD,CACJ,CAAG,EAAI,KACCuyC,GAAW2d,GAAaI,CAAW,GAAKJ,GAAaK,CAAS,EAAIiC,EAAY,CAClF,GAAAr9D,EACA,MAAAq0B,EACA,YAAA8mC,EACA,UAAAC,CACJ,CAAG,EAAIvwD,EACCgrD,GAAqC9wB,GAAO,GAC5Co1B,EAAW7lE,EAAAA,OAAO,CACtB,SAAAuhE,GACA,MAAAxhC,EACA,SAAA+oB,GACA,YAAAv7C,CACJ,CAAG,EACKg6D,GAAmBxnC,IAAU8lC,EAAS,QAAQ,MAC9CgE,GAA6BlB,EAAqB,CACtD,OAAAl4B,EACA,YAAAljC,EACA,WAAA63D,EACA,UAAAwC,EACA,GAAAl8D,EACA,MAAA6K,EACA,MAAAwpB,EACA,SAAU8lC,EAAS,QAAQ,SAC3B,cAAeA,EAAS,QAAQ,MAChC,oBAAqBA,EAAS,QAAQ,YACtC,WAAAmC,EACA,YAAanC,EAAS,QAAQ,UAAY,IAC9C,CAAG,EACKyC,GAAmBD,GAAoB,CAC3C,SAAU,CAACwB,GACX,MAAAtzD,EACA,KAAAqL,EACA,KAAA3Y,CACJ,CAAG,EACD3I,OAAAA,EAAAA,UAAU,IAAM,CACVsnE,GAAa/B,EAAS,QAAQ,WAAa/c,KAC7C+c,EAAS,QAAQ,SAAW/c,IAG1Bv7C,IAAgBs4D,EAAS,QAAQ,cACnCA,EAAS,QAAQ,YAAct4D,GAG7BwyB,IAAU8lC,EAAS,QAAQ,QAC7BA,EAAS,QAAQ,MAAQ9lC,EAE7B,EAAG,CAAC6nC,EAAW9e,GAAUv7C,EAAawyB,CAAK,CAAC,EAC5Cz/B,EAAAA,UAAU,IAAM,CACd,GAAIihE,KAAasE,EAAS,QAAQ,SAChC,OAGF,GAAItE,IAAY,MAAQsE,EAAS,QAAQ,UAAY,KAAM,CACzDA,EAAS,QAAQ,SAAWtE,GAC5B,MACF,CAEA,MAAMltC,GAAY,WAAW,IAAM,CACjCwxC,EAAS,QAAQ,SAAWtE,EAC9B,EAAG,EAAE,EACL,MAAO,IAAM,aAAaltC,EAAS,CACrC,EAAG,CAACktC,EAAQ,CAAC,EACN,CACL,OAAA9wB,EACA,YAAAo2B,EACA,WAAApjD,EACA,KAAAf,EACA,KAAAzZ,EACA,MAAAsN,EACA,SAAAuyC,GACA,MAAA/oB,EACA,OAAAupC,EACA,UAAA1B,EACA,WAAAxC,EACA,UAAA3vC,EACA,KAAA7T,EACA,UAAAklD,EACA,KAAAte,EACA,WAAAkD,EACA,oBAAA2Z,EACA,oBAAAkE,EACA,oBAAAC,EACA,UAAWlB,IAA8CsB,GACzD,WAAYE,GAAa,CAC7B,EAEE,SAASA,IAAgB,CACvB,GACAxB,IACAf,IAAoB1B,EAAS,QAAQ,WAAatvD,EAChD,OAAO4xD,GAGT,GAAI,EAAAuB,GAA4B,CAACnd,GAAgBqT,CAAc,GAAK,CAACoI,KAIjEJ,GAAaiC,IACf,OAAOjd,GAAI,WAAW,SAAS,CAAE,GAAGob,EAClC,SAAUE,EAClB,CAAO,CAIL,CACF,CAEA,SAASkB,GAAuBP,EAAeI,EAAgB,CAC7D,IAAIc,EAAuBC,EAE3B,OAAI,OAAOnB,GAAkB,UACpB,CACL,UAAWA,EAEX,UAAW,EACjB,EAGS,CACL,WAAYkB,EAAyDlB,GAAc,YAAc,KAAOkB,EAAwBd,EAAe,UAC/I,WAAYe,EAAyDnB,GAAc,YAAc,KAAOmB,EAAwBf,EAAe,SACnJ,CACA,CAEA,SAASgB,GAAgBv5D,EAAO,CAC9B,GAAI,CAACA,EACH,MAAO,GAGT,MAAMgS,EAAOhS,EAAM,KAAK,QAExB,MAAI,GAAAgS,GAAQ,aAAcA,GAAQ,OAAOA,EAAK,UAAa,UAAY,gBAAiBA,EAAK,UAAY,UAAWA,EAAK,UAAY,UAAWA,EAAK,SAKvJ,CAEA,MAAMwnD,GAAa,CAACnU,GAAa,KAAMA,GAAa,MAAOA,GAAa,GAAIA,GAAa,IAAI,EACvFoU,GAA8B,CAAC9gE,EAAO2jD,IAAS,CACnD,GAAI,CACF,QAAS,CACP,OAAAvc,EACA,cAAAsf,EACA,eAAAC,EACA,oBAAAC,EACA,KAAAzH,EACA,oBAAAgM,CACN,CACA,EAAMxH,EAEJ,GAAIkd,GAAW,SAAS7gE,EAAM,IAAI,EAAG,CAGnC,GAFAA,EAAM,eAAc,EAEhB,CAAConC,GAAU,CAACsf,EACd,OAGF,MAAMqa,EAAqB,CAAA,EAC3Bna,EAAoB,WAAU,EAAG,QAAQv/C,GAAS,CAChD,GAAI,CAACA,GAASA,GAAS,MAAQA,EAAM,SACnC,OAGF,MAAMzH,EAAO+mD,EAAe,IAAIt/C,EAAM,EAAE,EAExC,GAAKzH,EAIL,OAAQI,EAAM,KAAI,CAChB,KAAK0sD,GAAa,KACZhG,EAAc,IAAM9mD,EAAK,KAC3BmhE,EAAmB,KAAK15D,CAAK,EAG/B,MAEF,KAAKqlD,GAAa,GACZhG,EAAc,IAAM9mD,EAAK,KAC3BmhE,EAAmB,KAAK15D,CAAK,EAG/B,MAEF,KAAKqlD,GAAa,KACZhG,EAAc,KAAO9mD,EAAK,MAC5BmhE,EAAmB,KAAK15D,CAAK,EAG/B,MAEF,KAAKqlD,GAAa,MACZhG,EAAc,KAAO9mD,EAAK,MAC5BmhE,EAAmB,KAAK15D,CAAK,EAG/B,KACV,CACI,CAAC,EACD,MAAMi/C,EAAaU,GAAe,CAEhC,cAAeN,EACf,eAAAC,EACA,oBAAqBoa,CAEvB,CAAC,EACD,IAAIC,EAAY3a,GAAkBC,EAAY,IAAI,EAMlD,GAJI0a,IAAuC7hB,GAAK,IAAOmH,EAAW,OAAS,IACzE0a,EAAY1a,EAAW,CAAC,EAAE,IAGxB0a,GAAa,KAAM,CACrB,MAAMC,EAAkBra,EAAoB,IAAIxf,EAAO,EAAE,EACnD85B,EAAeta,EAAoB,IAAIoa,CAAS,EAChDzN,EAAU2N,EAAeva,EAAe,IAAIua,EAAa,EAAE,EAAI,KAC/DC,EAA0CD,GAAa,KAAK,QAElE,GAAIC,GAAW5N,GAAW0N,GAAmBC,EAAc,CAEzD,MAAME,EADqBjY,GAAuBgY,CAAO,EACF,KAAK,CAAC/wD,EAASlD,IAAUi+C,EAAoBj+C,CAAK,IAAMkD,CAAO,EAChHixD,EAAmBC,GAAgBL,EAAiBC,CAAY,EAChEK,EAAgBC,GAAQP,EAAiBC,CAAY,EACrDr0C,EAASu0C,GAA+B,CAACC,EAAmB,CAChE,EAAG,EACH,EAAG,CACb,EAAY,CACF,EAAGE,EAAgB7a,EAAc,MAAQ6M,EAAQ,MAAQ,EACzD,EAAGgO,EAAgB7a,EAAc,OAAS6M,EAAQ,OAAS,CACrE,EACckO,EAAkB,CACtB,EAAGlO,EAAQ,KACX,EAAGA,EAAQ,GACrB,EAEQ,OADuB1mC,EAAO,GAAKA,EAAO,EAAI40C,EAAkBze,GAASye,EAAiB50C,CAAM,CAElG,CACF,CACF,CAGF,EAEA,SAASy0C,GAAgBjzC,EAAGC,EAAG,CAC7B,MAAI,CAACsyC,GAAgBvyC,CAAC,GAAK,CAACuyC,GAAgBtyC,CAAC,EACpC,GAGFD,EAAE,KAAK,QAAQ,SAAS,cAAgBC,EAAE,KAAK,QAAQ,SAAS,WACzE,CAEA,SAASkzC,GAAQnzC,EAAGC,EAAG,CAKrB,MAJI,CAACsyC,GAAgBvyC,CAAC,GAAK,CAACuyC,GAAgBtyC,CAAC,GAIzC,CAACgzC,GAAgBjzC,EAAGC,CAAC,EAChB,GAGFD,EAAE,KAAK,QAAQ,SAAS,MAAQC,EAAE,KAAK,QAAQ,SAAS,KACjE,qRCpvBMv5B,GAAU,OAAe,OAgBlB2sE,GAA8D,CAAC,CAC1E,KAAA7oE,EACA,SAAAuhD,EACA,QAAAunB,EACA,aAAAC,EACA,WAAA73B,EACA,UAAA83B,EACA,eAAAC,CACF,IAAM,CACJ,KAAM,CAAE,WAAA1nD,EAAY,UAAAgS,EAAW,WAAAi2B,EAAY,UAAAmB,EAAW,WAAAmb,EAAY,WAAA5C,CAAA,EAAesD,GAAY,CAC3F,GAAI,SAAUxmE,EAAOA,EAAK,KAAOA,EAAK,EAAA,CACvC,EAEKa,EAAQ,CACZ,UAAW6pD,GAAI,UAAU,SAASC,CAAS,EAC3C,WAAAmb,EACA,QAAS5C,EAAa,GAAM,CAAA,EAGxBgG,EAAY,WAAYlpE,GAAQA,EAAK,SAAW,OAChD0lB,EAASwjD,EAAalpE,EAAqB,OAAS,OACpDmpE,EAAczjD,IAAW,YACzB0jD,EAAgB1jD,IAAW,cAC3B2jD,EAAW3jD,IAAW,QACtBk/B,EAAWskB,EAAalpE,EAAqB,SAAW,IACxDspE,EAAUJ,EAAalpE,EAAqB,QAAU,OAEtDupE,EAAWL,EAEZlpE,EAAK,WAAW,WAAW,QAAQ,GAAK,GADxCA,EAAoB,SAInB,CAACwpE,EAAuBC,CAAwB,EAAItrE,EAAAA,SAA6B,MAAS,EAC1F6yC,EAAc,CAACk4B,GAAaK,EAAWvpE,EAAoB,aAAe,OAGhF5B,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC4yC,EAAa,CAChBy4B,EAAyB,MAAS,EAClC,MACF,CAEA,IAAIC,EAAY,GACZ74B,EAgBJ,OAd+B,SAAY,CACzC,GAAI,CACF,MAAMD,EAAO,MAAM10C,GAAO,IAAI,IAAI80C,EAAa,CAC7C,aAAc,MAAA,CACf,EACG04B,GAAa94B,IACfC,EAAY,IAAI,gBAAgBD,CAAI,EACpC64B,EAAyB54B,CAAS,EAEtC,OAASzzC,EAAO,CACd,QAAQ,MAAM,sCAAuCA,CAAK,CAC5D,CACF,GAEA,EAEO,IAAM,CACXssE,EAAY,GACR74B,GACF,IAAI,gBAAgBA,CAAS,CAEjC,CACF,EAAG,CAACG,CAAW,CAAC,EAGhB,MAAM24B,EAAmBH,EAEzB,OACEtlE,EAAAA,KAACpH,EAAA,CACC,IAAK0sD,EACL,MAAA3oD,EACA,UAAU,kHAGV,SAAA,CAAAqD,EAAAA,KAACpH,EAAA,CACC,UAAW,8FACRysE,GAAW,CAACL,EAAa,iBAAmB,EAC/C,GACA,QAAS,IAAM,CAETC,GAAeC,IAEfG,GAAWR,EAEbA,EAAA,EACS,CAACG,GAAah4B,GAEvBA,EAAA,EAEJ,EAGE,SAAA,CAAAo4B,GAAWK,EACX9sE,EAAAA,IAAC4H,GAAA,CACC,IAAK6kE,GAAWK,EAChB,IAAK3pE,EAAK,kBACV,UAAU,4BAAA,CAAA,EAIZnD,MAAC4zC,IAAE,UAAW,YAAY8P,GAAYvgD,EAAK,SAAS,CAAC,4CAAA,CAA8C,GAInGmpE,GAAeC,IACfllE,EAAAA,KAACpH,EAAA,CAAI,UAAU,yEACb,SAAA,CAAAD,EAAAA,IAACC,EAAA,CAAI,UAAU,qDACb,SAAAD,EAAAA,IAACC,EAAA,CACC,UAAU,oCACV,MAAO,CAAE,MAAO,GAAG8nD,CAAQ,GAAA,CAAI,CAAA,EAEnC,EACA1gD,EAAAA,KAAClH,GAAA,CAAK,UAAU,0BAA2B,SAAA,CAAA4nD,EAAS,GAAA,CAAA,CAAC,CAAA,EACvD,EAIDykB,SACEvsE,EAAA,CAAI,UAAU,kEACb,SAAAD,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,sDAAA,CAAuD,CAAA,CACtE,EAIDw4B,GACCpsE,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAUqC,GAAM,CACdA,EAAE,gBAAA,EACFyqE,EAAA,CACF,EACA,UAAW,qEACTD,EACI,2BACA,qGACN,GACA,MAAmB5nE,GAAZ4nE,EAAc,2BAAgC,2BAAN,EAE/C,SAAAnsE,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,0BAAA,CAA2B,CAAA,CAAA,EAK5CvsC,EAAAA,KAACpH,EAAA,CAAI,UAAU,iJAEb,SAAA,CAAAD,EAAAA,IAACV,EAAA,CACC,KAAK,SACJ,GAAGolB,EACH,GAAGgS,EACJ,UAAU,mIACV,MAAOnyB,GAAE,4BAA4B,EACrC,QAAU5C,GAAMA,EAAE,gBAAA,EAElB,SAAA3B,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,mCAAA,CAAoC,CAAA,CAAA,EAIlD,CAACy4B,GAAah4B,GACbr0C,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAUqC,GAAM,CACdA,EAAE,gBAAA,EACF0yC,EAAA,CACF,EACA,UAAU,6EACV,MAAO9vC,GAAE,iBAAiB,EAE1B,SAAAvE,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,8BAAA,CAA+B,CAAA,CAAA,EAK/C44B,GAAYP,GACXjsE,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAUqC,GAAM,CACdA,EAAE,gBAAA,EACFsqE,EAAA,CACF,EACA,UAAU,+EACV,MAAO1nE,GAAE,cAAc,EAEvB,SAAAvE,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,wCAAA,CAAyC,CAAA,CAAA,EAK1D5zC,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,QAAUqC,GAAM,CACdA,EAAE,gBAAA,EACF+iD,EAAA,CACF,EACA,SAAU4nB,GAAeC,EACzB,UAAU,gGACV,MAAOhoE,GAAE,eAAe,EAExB,SAAAvE,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,2BAAA,CAA4B,CAAA,CAAA,CAC3C,CAAA,CACF,CAAA,CAAA,CAAA,EAIFvsC,EAAAA,KAACpH,EAAA,CACC,UAAW,OAAO,CAACosE,GAAah4B,EAAa,yDAA2D,EAAE,GAC1G,QAAS,IAAM,CAET,CAACg4B,GAAah4B,GAChBA,EAAA,CAEJ,EAEA,SAAA,CAAAr0C,EAAAA,IAAC2H,IAAE,UAAU,6DAA6D,MAAOxE,EAAK,kBACnF,WAAK,iBAAA,CACR,EACAnD,EAAAA,IAAC2H,IAAE,UAAU,2CACV,SAAaxE,EAAqB,cAAsC,CAC3E,CAAA,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,ECxMa4pE,GAAoC,CAAC,CAChD,SAAAniB,EACA,WAAAE,EACA,WAAA5D,EACA,SAAAlD,EACA,QAAAzhD,EACA,OAAAD,EACA,SAAAoiD,EACA,QAAAunB,EACA,aAAAC,EACA,WAAA73B,EACA,UAAA24B,EACA,WAAAC,EACA,uBAAAC,EACA,cAAAC,EACA,gBAAAC,CACF,IAAM,CACJ,MAAMjd,EAAU95B,GACd45B,GAAUuJ,GAAe,CAAE,qBAAsB,CAAE,SAAU,CAAA,EAAK,EAClEvJ,GAAUmH,GAAgB,CAAE,iBAAkBgU,GAA6B,CAAA,EAG7E,OACE/jE,EAAAA,KAACpH,EAAA,CAAI,UAAU,MACb,SAAA,CAAAD,EAAAA,IAAC0hE,GAAA,CAAW,QAAAvR,EAAkB,mBAAoBY,GAAe,UAAAic,EAC/D,SAAAhtE,EAAAA,IAACmoE,GAAA,CACC,MAAOvd,EAAS,IAAK94C,GAAU,SAAUA,EAAOA,EAAK,KAAOA,EAAK,EAAG,EACpE,SAAU+1D,GAEV,SAAAxgE,EAAAA,KAACpH,EAAA,CAAI,UAAU,sEAEZ,SAAA,CAAA2qD,EAAS,IAAK94C,GAAS,CACtB,MAAMu7D,EAAa,SAAUv7D,EAEvB46D,EAAUW,EACXv7D,EAAoB,SACpBA,EAAK,WAAW,WAAW,QAAQ,GAAK,GAE7C,OACE9R,EAAAA,IAACgsE,GAAA,CAEC,KAAMl6D,EACN,SAAU,IAAM4yC,EAAS5yC,CAAI,EAC7B,QACE,WAAYA,GAAQA,EAAK,SAAW,QAChC,IAAMm6D,EAAQn6D,CAAmB,EACjC,OAEN,aACE46D,EAAU,IAAMR,EAAap6D,CAAI,EAAI,OAEvC,WACEu7D,EAAa,IAAMh5B,EAAWviC,CAAkB,EAAI,OAEtD,UAAWo7D,GAA0BG,IAAgBv7D,EAAoB,MAASA,EAAoB,MAAQq7D,EAC9G,eACED,GAA0BG,EACtB,IAAMD,IAAmBt7D,EAAoB,MAASA,EAAoB,EAAE,EAC5E,MAAA,EAlBDu7D,EAAav7D,EAAK,KAAOA,EAAK,EAAA,CAsBzC,CAAC,EAGAg5C,GACCzjD,EAAAA,KAACpH,EAAA,CACC,UAAU,8PACV,QAASgtE,EAET,SAAA,CAAAjtE,EAAAA,IAAC4zC,GAAA,CAAE,UAAU,iEAAA,CAAkE,QAC9EzzC,GAAA,CAAK,UAAU,2CAA4C,SAAAoE,GAAE,YAAY,CAAA,CAAE,CAAA,CAAA,CAAA,CAC9E,CAAA,CAEJ,CAAA,CAAA,EAEJ,EAGA8C,EAAAA,KAACpH,EAAA,CAAI,UAAU,qIACb,SAAA,CAAAD,EAAAA,IAACG,GAAA,CAAM,YAAE,4BAA6B,CAAE,MAAO+mD,EAAY,IAAKlD,CAAA,CAAU,CAAA,CAAE,SAC3E7jD,GAAA,CAAM,SAAA,CAAAoE,GAAE,sBAAuB,CAAE,KAAMhC,CAAA,CAAS,EAAGD,GAAU,KAAKA,CAAM,GAAA,CAAA,CAAI,CAAA,CAAA,CAC/E,CAAA,EACF,CAEJ,EC3HMgrE,GAA4B,CAAA,EAC5BC,GAA2B,CAAA,EAIpBC,GAAejuE,EAAAA,WAC1B,CACE,CACE,mBAAAqlD,EACA,mBAAAf,EACA,iBAAAC,EACA,WAAAC,EAAa,UACb,SAAAC,EAAW,GACX,QAAAzhD,EAAU,GACV,qBAAA0hD,EAAuB,EACvB,OAAA3hD,EACA,iBAAkB4hD,EAClB,QAAAC,EAAUopB,GACV,WAAAnpB,EAAa,GACb,cAAAG,EACA,SAAA/jD,EACA,iBAAAgkD,EACA,cAAAC,EACA,SAAAC,EACA,UAAAC,EACA,aAAAN,EAAeipB,GACf,UAAA3tE,EAAY,GACZ,oBAAAklD,EAAsB,GACtB,mBAAA4oB,EACA,qBAAAC,EACA,aAAAC,EACA,aAAA7oB,EACA,uBAAAooB,EAAyB,GACzB,cAAAC,EACA,gBAAAC,EACA,GAAAzgE,EACA,YAAA3D,CAAA,EAEFnJ,IACG,CAEH,MAAMykD,EAAY,CAChB,OAAQqpB,GAAc,QAAU,mBAChC,OAAQA,GAAc,QAAU,uBAChC,QAASA,GAAc,SAAW,0BAAA,EAQ9BC,EAAc3sE,EAAAA,OAAOT,GAAY+jD,CAAa,EACpDqpB,EAAY,QAAUptE,GAAY+jD,EAElC,MAAMspB,EAAuBpsE,EAAAA,YAC1BqsE,GAA2C,CAC1C,MAAM38C,EAAKy8C,EAAY,QACvB,GAAI,CAACz8C,EAAI,OAOTA,EALuB,CACrB,OAAQ,CAAE,MAAO28C,EAAO,MAAAA,CAAA,EACxB,eAAgB,IAAM,CAAC,EACvB,gBAAiB,IAAM,CAAC,CAAA,CAEF,CAC1B,EACA,CAAA,CAAC,EAIGC,EAAWnqB,GAAgB,CAC/B,mBAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,SAAAC,EACA,QAAAzhD,EACA,qBAAA0hD,EACA,OAAA3hD,EACA,iBAAkB4hD,EAClB,QAAAC,EACA,WAAAC,EACA,aAAAC,EACA,UAAAC,EACA,cAAeupB,EACf,iBAAArpB,EACA,cAAAC,EACA,SAAAC,EACA,UAAAC,EACA,mBAAAC,EACA,oBAAAC,EACA,aAAAC,CAAA,CACD,EAGD3jD,EAAAA,oBAAoBtB,EAAK,KAAO,CAC9B,UAAWkuE,EAAS,gBACpB,MAAOA,EAAS,MAChB,gBAAiBA,EAAS,eAAA,EAC1B,EAGF,MAAMr4B,EAAgCtvC,EAAAA,QAAQ,IACrC2nE,EAAS,WAAW,IAAKj8D,GAAS,CACvC,MAAMu6D,EAAY,EAAE,SAAUv6D,GACxBk8D,EAAcl8D,EACdm8D,EAAiBn8D,EAEvB,OAAIu6D,EAEK,CACL,IAAK2B,EAAY,SAAW,GAC5B,SAAUA,EAAY,kBACtB,MAAOA,EAAY,kBACnB,qBAAsB,EAAA,EAKjB,CACL,IAFgBD,EAAS,uBAAuB,IAAIE,EAAe,EAAE,GAEnDA,EAAe,aACjC,YAAaA,EAAe,aAC5B,SAAUA,EAAe,kBACzB,MAAOA,EAAe,kBACtB,qBAAsB,EAAA,CAG5B,CAAC,EACA,CAACF,EAAS,WAAYA,EAAS,sBAAsB,CAAC,EAGnDrF,EAAetiE,EAAAA,QAAQ,KAAO,CAElC,cAAe2nE,EAAS,cACxB,aAAcA,EAAS,aACvB,WAAYA,EAAS,WACrB,WAAYA,EAAS,WAGrB,SAAA/pB,EACA,QAAAzhD,EACA,OAAAD,EACA,UAAAgiD,EACA,oBAAAO,EAGA,WAAYkpB,EAAS,WACrB,SAAUA,EAAS,SACnB,WAAYA,EAAS,WACrB,SAAUA,EAAS,SACnB,WAAYA,EAAS,WAGrB,YAAaA,EAAS,YACtB,aAAcA,EAAS,aACvB,YAAaA,EAAS,YACtB,gBAAiBA,EAAS,gBAC1B,kBAAmBA,EAAS,kBAC5B,eAAgBA,EAAS,eACzB,cAAeA,EAAS,cAGxB,cAAeA,EAAS,cAGxB,SAAUA,EAAS,SAGnB,YAAaA,EAAS,YACtB,eAAgBA,EAAS,eACzB,kBAAmBA,EAAS,kBAC5B,cAAeA,EAAS,cAGxB,kBAAmBA,EAAS,kBAC5B,qBAAsBA,EAAS,qBAC/B,aAAcA,EAAS,aACvB,wBAAyBA,EAAS,wBAGlC,uBAAwBA,EAAS,sBAAA,GAC/B,CAACA,EAAU/pB,EAAUzhD,EAASD,EAAQgiD,EAAWO,CAAmB,CAAC,EAEzE,OACE7kD,EAAAA,IAACu9C,IAAqB,MAAOmrB,EAC3B,gBAACzoE,EAAA,CAAI,GAAA0M,EAAQ,UAAAhN,EAAuB,GAAGqJ,EAErC,SAAA,CAAAhJ,EAAAA,IAACirD,GAAA,CACC,WAAY8iB,EAAS,WACrB,WAAYA,EAAS,WACrB,QAASA,EAAS,YAClB,cAAeA,EAAS,cACxB,SAAUA,EAAS,SACnB,OAAAzrE,EACA,SAAA0hD,EACA,QAAAzhD,EAGC,WAAS,UACRvC,EAAAA,IAAC+sE,GAAA,CACC,SAAUgB,EAAS,SACnB,WAAYA,EAAS,WACrB,WAAYA,EAAS,WACrB,SAAA/pB,EACA,QAAAzhD,EACA,OAAAD,EACA,SAAUyrE,EAAS,aACnB,QAASA,EAAS,YAClB,aAAcA,EAAS,kBACvB,WAAYA,EAAS,eACrB,UAAWA,EAAS,cACpB,WAAY,IAAMA,EAAS,SAAS,SAAS,MAAA,EAC7C,uBAAAb,EACA,cAAAC,EACA,gBAAAC,CAAA,CAAA,CACF,CAAA,EAKHvoB,GACC7kD,EAAAA,IAACo8C,GAAA,CACC,OAAQ2xB,EAAS,kBACjB,QAAS,IAAM,CACRA,EAAS,YACZA,EAAS,qBAAqB,EAAK,CAEvC,EACA,MAAON,GAAsBlpE,GAAE,iCAAiC,EAChE,QAASmpE,GAAwBnpE,GAAE,mCAAmC,EACtE,YAAaA,GAAE,eAAe,EAC9B,qBAAqB,SACrB,UAAW,IAAM,CACXwpE,EAAS,cACXA,EAAS,wBAAwBA,EAAS,YAAY,CAE1D,EACA,UAAWA,EAAS,WACpB,YAAaxpE,GAAE,qBAAqB,CAAA,CAAA,EAKvCmxC,EAAc,OAAS,GAAKq4B,EAAS,aACpC/tE,EAAAA,IAACy0C,GAAA,CAEC,OAAQiB,EACR,OAAQ,GACR,QAAS,IAAMq4B,EAAS,eAAe,EAAK,EAC5C,WAAYA,EAAS,kBACrB,aAAc,EAAA,EALT,WAAWA,EAAS,cAAc,OAAO,EAAA,CAMhD,CAAA,CAEJ,CAAA,CACF,CAEJ,CACF,EAEAP,GAAa,YAAc,iVC9QrBU,GAAiE,CAAC,CAAE,SAAAC,EAAU,UAAAxuE,EAAY,aAAgB,CAC9G,OAAQwuE,EAAA,CACN,IAAK,SACH,OACE9mE,EAAAA,KAAC,MAAA,CAAI,UAAA1H,EAAsB,QAAQ,YACjC,SAAA,CAAAK,EAAAA,IAAC,OAAA,CAAK,KAAK,UAAU,EAAE,0HAAyH,EAChJA,EAAAA,IAAC,OAAA,CAAK,KAAK,UAAU,EAAE,wIAAuI,EAC9JA,EAAAA,IAAC,OAAA,CAAK,KAAK,UAAU,EAAE,gIAA+H,EACtJA,EAAAA,IAAC,OAAA,CAAK,KAAK,UAAU,EAAE,qIAAA,CAAqI,CAAA,EAC9J,EAEJ,IAAK,QACH,OACEA,EAAAA,IAAC,MAAA,CAAI,UAAAL,EAAsB,QAAQ,YACjC,SAAAK,EAAAA,IAAC,OAAA,CAAK,KAAK,eAAe,EAAE,iEAAA,CAAiE,EAC/F,EAEJ,IAAK,QACH,OACEA,EAAAA,IAAC,MAAA,CAAI,UAAAL,EAAsB,QAAQ,YACjC,SAAAK,EAAAA,IAAC,OAAA,CAAK,KAAK,eAAe,EAAE,+aAAA,CAA+a,EAC7c,EAEJ,IAAK,WACH,OACEA,EAAAA,IAAC,MAAA,CAAI,UAAAL,EAAsB,QAAQ,YACjC,SAAAK,EAAAA,IAAC,OAAA,CAAK,KAAK,eAAe,EAAE,gSAAA,CAAgS,EAC9T,EAEJ,IAAK,QACH,OACEA,EAAAA,IAAC,MAAA,CAAI,UAAAL,EAAsB,QAAQ,YACjC,SAAAK,EAAAA,IAAC,OAAA,CAAK,KAAK,eAAe,EAAE,+hBAAA,CAA+hB,EAC7jB,EAEJ,QACE,OAAO,IAAA,CAEb,EAKMuE,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EA+BxCorE,GAAqC,CACzC,CACE,GAAI,SACJ,KAAM,SACN,MAAO,4BACP,UAAW,kCAAA,EAEb,CACE,GAAI,QACJ,KAAM,MACN,MAAO,eACP,UAAW,YAAA,EAEb,CACE,GAAI,QACJ,KAAM,MACN,MAAO,eACP,UAAW,mBAAA,EAEb,CACE,GAAI,WACJ,KAAM,WACN,MAAO,eACP,UAAW,YAAA,EAEb,CACE,GAAI,QACJ,KAAM,QACN,MAAO,yBACP,UAAW,4BAAA,CAEf,EA0BMC,GAAwD,CAAC,CAC7D,UAAAC,EAAY,CAAC,SAAU,QAAS,OAAO,EACvC,KAAAriE,EAAO,QACP,QAAAxM,EAAU,OACV,UAAAE,EAAY,GACZ,GAAAgN,EACA,YAAA3D,CACF,IAAM,CACJ,MAAMulE,EAAqBJ,GAA6B,CAEtD,MAAMK,EAAc,mBAAmB,OAAO,SAAS,IAAI,EAC3D,OAAO,SAAS,KAAO,aAAaL,CAAQ,aAAaK,CAAW,EACtE,EAEMC,EAAiBC,GACjBziE,IAAS,WACJ1H,GAAE,4BAA6B,CAAE,SAAUmqE,EAAc,EAE3DnqE,GAAE,yBAA0B,CAAE,SAAUmqE,EAAc,EAGzDC,EAAoBP,GAAiB,OAAQn/C,GACjDq/C,EAAU,SAASr/C,EAAO,EAAE,CAAA,EAG9B,OAAIxvB,IAAY,OAEZO,EAAAA,IAACC,EAAA,CAAI,UAAW,6BAA6BN,CAAS,GAAI,GAAAgN,EAAS,GAAG3D,EACnE,SAAA2lE,EAAkB,IAAKR,GACtBnuE,EAAAA,IAACV,EAAA,CAEC,QAAS,IAAMivE,EAAkBJ,EAAS,EAAE,EAC5C,UAAW,2DAA2DA,EAAS,KAAK,IAAIA,EAAS,SAAS,mFAC1G,aAAYM,EAAcN,EAAS,IAAI,EAEvC,eAACD,GAAA,CAAW,SAAUC,EAAS,GAAI,UAAU,SAAA,CAAU,CAAA,EALlDA,EAAS,EAAA,CAOjB,EACH,EAKFnuE,EAAAA,IAACC,EAAA,CAAI,UAAW,aAAaN,CAAS,GAAI,GAAAgN,EAAS,GAAG3D,EACnD,SAAA2lE,EAAkB,IAAKR,GACtB9mE,EAAAA,KAAC/H,EAAA,CAEC,QAAS,IAAMivE,EAAkBJ,EAAS,EAAE,EAC5C,UAAW,8HAA8HA,EAAS,KAAK,IAAIA,EAAS,SAAS,uCAE7K,SAAA,CAAAnuE,EAAAA,IAACkuE,GAAA,CAAW,SAAUC,EAAS,GAAI,UAAU,UAAU,EACvDnuE,EAAAA,IAACG,GAAA,CAAM,SAAAsuE,EAAcN,EAAS,IAAI,CAAA,CAAE,CAAA,CAAA,EAL/BA,EAAS,EAAA,CAOjB,EACH,CAEJ,2GCjMMS,GAAiB,CAAC5rE,EAAawB,IACnB,OAAe,QAChB,IAAIxB,EAAKwB,CAAM,GAAKxB,EAkC/B6rE,GAA8C,CAClD,QAASvrE,GAAS,YAClB,MAAOA,GAAS,QAChB,QAASA,GAAS,oBAClB,KAAMA,GAAS,UACjB,EAGMwrE,GAAgE,CACpE,QAAS,CACP,GAAI,0EACJ,KAAM,oCAAA,EAER,MAAO,CACL,GAAI,kEACJ,KAAM,gCAAA,EAER,QAAS,CACP,GAAI,8EACJ,KAAM,sCAAA,EAER,KAAM,CACJ,GAAI,sEACJ,KAAM,kCAAA,CAEV,EAGMC,GAAkD,CACtD,WAAY,eACZ,aAAc,kCACd,YAAa,gBACb,cAAe,kBACf,gBAAiB,qCACjB,eAAgB,kBAClB,EAwCaC,GAA8B,CAAC,CAC1C,OAAAC,EACA,SAAAp9B,EAAW,gBACX,SAAAld,EAAW,IACX,SAAA+vB,CACF,IAAM,CAEJ,KAAM,CAACwqB,EAAeC,CAAgB,EAAI7tE,EAAAA,SAAwC,IAAI,GAAK,EAGrF8nD,EAAe3nD,cAAakL,GAAwB,CAExDwiE,EAAiBnoE,GAAQ,CACvB,MAAM23B,EAAO,IAAI,IAAI33B,CAAI,EACzB,OAAA23B,EAAK,IAAIhyB,EAAI,EAAK,EACXgyB,CACT,CAAC,EAGD,WAAW,IAAM,CACf,GAAI+lB,EACFA,EAAS/3C,CAAE,MACN,CAEL,MAAMtN,EAAU,OAAe,OAC3BA,GAAQ,OAAO,QACjBA,EAAO,MAAM,OAAQ+vE,IAEZ,CACL,QAFoB,MAAM,QAAQA,EAAU,MAAM,EAAIA,EAAU,OAAS,CAAA,GAEnD,OAAQ7qE,GAAiBA,EAAE,KAAOoI,CAAE,CAAA,EAE7D,CAEL,CACF,EAAG,GAAG,CACR,EAAG,CAAC+3C,CAAQ,CAAC,EA4Bb,OAzBAnjD,EAAAA,UAAU,IAAM,CACV,CAAC0tE,GAAUA,EAAO,SAAW,GAEjCA,EAAO,QAAQI,GAAS,CAEtB,GAAIH,EAAc,IAAIG,EAAM,EAAE,EAAG,OAGjCF,EAAiBnoE,GAAQ,CACvB,MAAM23B,EAAO,IAAI,IAAI33B,CAAI,EACzB,OAAA23B,EAAK,IAAI0wC,EAAM,GAAI,EAAI,EAChB1wC,CACT,CAAC,EAGD,MAAM2wC,EAAoBD,EAAM,UAAY16C,EACxC26C,EAAoB,GACtB,WAAW,IAAM,CACflmB,EAAaimB,EAAM,EAAE,CACvB,EAAGC,CAAiB,CAExB,CAAC,CACH,EAAG,CAACL,EAAQt6C,EAAUy0B,EAAc8lB,CAAa,CAAC,EAG9C,CAACD,GAAUA,EAAO,SAAW,EACxB,KAIPjvE,EAAAA,IAACC,EAAA,CACC,UAAW,sCAAsC8uE,GAAiBl9B,CAAQ,CAAC,GAC3E,YAAU,SACV,cAAY,OAEX,SAAAo9B,EAAO,IAAKI,GACXrvE,EAAAA,IAACuvE,GAAA,CAEC,MAAAF,EACA,SAAAx9B,EACA,UAAWq9B,EAAc,IAAIG,EAAM,EAAE,GAAK,GAC1C,QAAS,IAAMjmB,EAAaimB,EAAM,EAAE,CAAA,EAJ/BA,EAAM,EAAA,CAMd,CAAA,CAAA,CAGP,EASME,GAAwD,CAAC,CAAE,MAAAF,EAAO,SAAAx9B,EAAU,UAAA29B,EAAW,QAAAh/D,KAAc,CACzG,MAAMi/D,EAAYX,GAAaO,EAAM,IAAI,GAAKP,GAAa,KAGrD1qE,EAAWirE,EAAM,KAClBA,EAAM,KACPR,GAAeQ,EAAM,IAAI,EAGvBK,EAAgB79B,EAAS,WAAW,QAAQ,EAAI,gBAAkB,iBAExE,OACExqC,EAAAA,KAACpH,EAAA,CACC,UAAW;AAAA;AAAA;AAAA;AAAA,UAIPwvE,EAAU,EAAE;AAAA,UACZD,EAAY,4BAA8B,aAAaE,CAAa,EAAE;AAAA,QAE1E,KAAK,QAEL,SAAA,CAAA1vE,EAAAA,IAACwD,GAAA,CACC,KAAMY,EACN,UAAW,yBAAyBqrE,EAAU,IAAI,EAAA,CAAA,EAEpDzvE,EAAAA,IAACG,IAAK,UAAW,8BAA8BsvE,EAAU,IAAI,GAC1D,WAAM,OAAA,CACT,EACAzvE,EAAAA,IAACV,EAAA,CACC,QAASkR,EACT,UAAW,sEAAsEi/D,EAAU,IAAI,sBAC/F,aAAYb,GAAe,cAAc,EAEzC,eAACprE,GAAA,CAAK,KAAMF,GAAS,MAAO,UAAU,SAAA,CAAU,CAAA,CAAA,CAClD,CAAA,CAAA,CAGN,oHCzPMiF,GAAW,OAAe,QAAQ,eAAe,qBAAqB,GAAM,CAC9E,IAAK,IAAIC,IAAoB,QAAQ,IAAI,wBAAyB,GAAGA,CAAI,EACzE,KAAM,IAAIA,IAAoB,QAAQ,KAAK,wBAAyB,GAAGA,CAAI,EAC3E,MAAO,IAAIA,IAAoB,QAAQ,MAAM,wBAAyB,GAAGA,CAAI,CACjF,EAmBamnE,GAAkE,CAAC,CAC9E,UAAAhwE,EAAY,GACZ,MAAAqE,CACF,IAAM,CACJ,KAAM,CAACqoE,EAAWuD,CAAY,EAAItuE,EAAAA,SAAS,EAAK,EAsBhD,OApBAC,EAAAA,UAAU,IAAM,CAEd,MAAMsuE,EAAqB,OAAe,QAAQ,kBAElD,GAAI,CAACA,EAAmB,CACtBtnE,GAAO,KAAK,+BAA+B,EAC3C,MACF,CAGA,OAAAqnE,EAAaC,EAAkB,cAAc,EAEzBA,EAAkB,UAAWC,GAA0B,CACzEF,EAAaE,CAAY,CAC3B,CAAC,CAIH,EAAG,CAAA,CAAE,EAEAzD,EAKHhlE,EAAAA,KAACpH,EAAA,CACC,UAAW,mCAAmCN,CAAS,GACvD,MAAAqE,EACA,KAAK,cACL,aAAW,WAEX,SAAA,CAAAhE,EAAAA,IAACC,EAAA,CAAI,UAAU,4EACb,SAAAD,EAAAA,IAACC,EAAA,CACC,UAAU,iEACV,MAAO,CACL,MAAO,MACP,UAAW,mCAAA,CACb,CAAA,EAEJ,QAEC,QAAA,CAAO,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAA,CAYN,CAAA,CAAA,CAAA,EAhCG,IAmCX,sICtFMsI,GAAW,OAAe,QAAQ,eAAe,yBAAyB,GAAM,CAClF,IAAK,IAAIC,IAAoB,QAAQ,IAAI,4BAA6B,GAAGA,CAAI,EAC7E,KAAM,IAAIA,IAAoB,QAAQ,KAAK,4BAA6B,GAAGA,CAAI,CACnF,EAoBaunE,GAAwD,CAAC,CACpE,UAAApwE,EAAY,GACZ,MAAAqE,CACF,IAAM,CACJ,KAAM,CAACqoE,EAAWuD,CAAY,EAAItuE,EAAAA,SAAS,EAAK,EAoBhD,OAlBAC,EAAAA,UAAU,IAAM,CACd,MAAMsuE,EAAqB,OAAe,QAAQ,kBAElD,GAAI,CAACA,EAAmB,CACtBtnE,GAAO,KAAK,+BAA+B,EAC3C,MACF,CAEA,OAAAqnE,EAAaC,EAAkB,cAAc,EAEzBA,EAAkB,UAAWC,GAA0B,CACzEvnE,GAAO,IAAI,qBAAsBunE,CAAY,EAC7CF,EAAaE,CAAY,CAC3B,CAAC,CAGH,EAAG,CAAA,CAAE,EAEAzD,EAKHrsE,EAAAA,IAACC,EAAA,CACC,UAAW,2HAA2HN,CAAS,GAC/I,MAAAqE,EACA,KAAK,SACL,aAAW,WACX,cAAY,sBAAA,CAAA,EATP,IAYX,iIC1BMgsE,GAA+C,CACjD,GAAI,IAAK,GAAI,IAAK,GAAI,KAAM,GAAI,KAAM,MAAO,IACjD,EAGMC,OAAsB,IAAI,CAC5B,SAAU,QAAS,eAAgB,SAAU,OAAQ,cACrD,OAAQ,cAAe,QAAS,YAAa,aAC7C,WAAY,YAAa,WAC7B,CAAC,EAGKC,OAAwB,IAAI,CAC9B,MAAO,OAAQ,OAAQ,UAAW,UAAW,MAAO,QACpD,OAAQ,SAAU,SAAU,WAAY,OAAQ,WACpD,CAAC,EAGKC,OAAsB,IAAI,CAC5B,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,OAAQ,QAAS,IAC1D,SAAU,KAAM,QAAS,OAC7B,CAAC,EAGKC,OAAuB,IAAI,CAC7B,QAAS,WAAY,SAAU,WAAY,QAAS,SACpD,aAAc,WAAY,WAC9B,CAAC,EAGKC,OAAuB,IAAI,CAC7B,MAAO,QAAS,SAAU,iBAAkB,eAC5C,qBAAsB,cAC1B,CAAC,EAGKC,GAAoG,CACtG,SAAU,CAACC,EAAWC,IAClBnpE,EAAAA,KAAC,MAAA,CAAI,UAAU,gFACX,SAAA,CAAArH,EAAAA,IAAC,MAAA,CAAI,UAAW,mFAAmFuwE,CAAS,GACxG,SAAAlpE,EAAAA,KAAC,MAAA,CAAI,UAAU,sCACX,SAAA,CAAArH,EAAAA,IAAC,MAAA,CAAI,UAAU,+CAAA,CAAgD,EAC/DA,EAAAA,IAAC,MAAA,CAAI,UAAU,+CAAA,CAAgD,EAC/DA,EAAAA,IAAC,MAAA,CAAI,UAAU,+CAAA,CAAgD,EAC/DA,EAAAA,IAAC,MAAA,CAAI,UAAU,+CAAA,CAAgD,CAAA,CAAA,CACnE,CAAA,CACJ,EACC,MAAM,KAAK,CAAE,OAAQwwE,CAAA,EAAa,CAAC98C,EAAGvP,IACnCnkB,EAAAA,IAAC,MAAA,CAAY,UAAW,sDAAsDuwE,CAAS,GAAI,MAAO,CAAE,eAAgB,GAAGpsD,EAAI,EAAE,IAAA,EACzH,SAAA9c,EAAAA,KAAC,MAAA,CAAI,UAAU,sCACX,SAAA,CAAArH,EAAAA,IAAC,MAAA,CAAI,UAAU,+CAAA,CAAgD,EAC/DA,EAAAA,IAAC,MAAA,CAAI,UAAU,iDAAA,CAAkD,EACjEA,EAAAA,IAAC,MAAA,CAAI,UAAU,+CAAA,CAAgD,EAC/DA,EAAAA,IAAC,MAAA,CAAI,UAAU,+CAAA,CAAgD,CAAA,CAAA,CACnE,CAAA,EANMmkB,CAOV,CACH,CAAA,EACL,EAEJ,WAAaosD,GACTvwE,EAAAA,IAAC,MAAA,CAAI,UAAU,mCACV,SAAA,MAAM,KAAK,CAAE,OAAQ,CAAA,EAAK,CAAC0zB,EAAGvP,IAC3BnkB,MAAC,MAAA,CAAY,UAAW,gDAAgDuwE,CAAS,EAAA,EAAvEpsD,CAA2E,CACxF,CAAA,CACL,EAEJ,KAAOosD,GACHlpE,EAAAA,KAAC,MAAA,CACG,SAAA,CAAArH,EAAAA,IAAC,MAAA,CAAI,UAAU,qEACV,SAAA,MAAM,KAAK,CAAE,OAAQ,GAAK,CAAC0zB,EAAGvP,IAC3BnkB,EAAAA,IAAC,OAAY,UAAW,iDAAiDuwE,CAAS,EAAA,EAAxEpsD,CAA4E,CACzF,CAAA,CACL,EACAnkB,EAAAA,IAAC,MAAA,CAAI,UAAW,6CAA6CuwE,CAAS,EAAA,CAAI,CAAA,EAC9E,EAEJ,cAAgBA,GACZvwE,EAAAA,IAAC,MAAA,CAAI,UAAU,gEACV,SAAA,MAAM,KAAK,CAAE,OAAQ,CAAA,EAAK,CAAC0zB,EAAGvP,IAC3BnkB,MAAC,MAAA,CAAY,UAAW,iDAAiDuwE,CAAS,EAAA,EAAxEpsD,CAA4E,CACzF,CAAA,CACL,EAEJ,YAAcosD,GACVlpE,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACX,SAAA,CAAArH,EAAAA,IAAC,MAAA,CAAI,UAAW,4CAA4CuwE,CAAS,GAAI,EACzElpE,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACX,SAAA,CAAArH,EAAAA,IAAC,MAAA,CAAI,UAAW,oDAAoDuwE,CAAS,GAAI,EACjFvwE,EAAAA,IAAC,MAAA,CAAI,UAAW,kDAAkDuwE,CAAS,EAAA,CAAI,CAAA,CAAA,CACnF,CAAA,EACJ,EAEJ,SAAWA,GACPvwE,EAAAA,IAAC,OAAI,UAAW,iDAAiDuwE,CAAS,GAAI,EAElF,iBAAmBA,GACfvwE,EAAAA,IAAC,OAAI,UAAW,6FAA6FuwE,CAAS,GAAI,EAE9H,OAASA,GACLvwE,MAAC,UAAO,UAAU,0EACd,SAAAA,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACX,SAAAqH,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACX,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACX,SAAA,CAAArH,EAAAA,IAAC,MAAA,CAAI,UAAW,iDAAiDuwE,CAAS,GAAI,EAC9EvwE,EAAAA,IAAC,OAAI,UAAU,oCACV,eAAM,KAAK,CAAE,OAAQ,GAAK,CAAC0zB,EAAGvP,UAC1B,MAAA,CAAY,UAAW,mDAAmDosD,CAAS,EAAA,EAA1EpsD,CAA8E,CAC3F,CAAA,CACL,CAAA,EACJ,EACAnkB,EAAAA,IAAC,OAAI,UAAU,0BACV,eAAM,KAAK,CAAE,OAAQ,GAAK,CAAC0zB,EAAGvP,UAC1B,MAAA,CAAY,UAAW,qDAAqDosD,CAAS,EAAA,EAA5EpsD,CAAgF,CAC7F,CAAA,CACL,CAAA,CAAA,CACJ,EACJ,EACJ,EAEJ,OAASosD,GACLvwE,MAAC,UAAO,UAAU,kFACd,SAAAA,EAAAA,IAAC,MAAA,CAAI,UAAU,8CACX,SAAAqH,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACX,SAAA,CAAArH,EAAAA,IAAC,MAAA,CAAI,UAAW,iDAAiDuwE,CAAS,GAAI,EAC9EvwE,EAAAA,IAAC,MAAA,CAAI,UAAW,iDAAiDuwE,CAAS,GAAI,EAC9EvwE,EAAAA,IAAC,OAAI,UAAU,aACV,eAAM,KAAK,CAAE,OAAQ,GAAK,CAAC0zB,EAAGvP,UAC1B,MAAA,CAAY,UAAW,qDAAqDosD,CAAS,EAAA,EAA5EpsD,CAAgF,CAC7F,CAAA,CACL,EACAnkB,EAAAA,IAAC,MAAA,CAAI,UAAW,iDAAiDuwE,CAAS,EAAA,CAAI,CAAA,CAAA,CAClF,EACJ,EACJ,EAEJ,MAAO,IAAMvwE,EAAAA,IAAAwS,EAAAA,SAAA,EAAE,EACf,MAAO,IAAMxS,EAAAA,IAAAwS,EAAAA,SAAA,EAAE,EACf,cAAe,IAAMxS,MAAAwS,EAAAA,SAAA,CAAA,CAAE,CAC3B,EASA,SAASi+D,GAAejxE,EAAgD,CACpE,GAAI,CAACA,GAAYA,EAAS,SAAW,QAAU,CAAA,EAE/C,MAAMkxE,EAASlxE,EAAS,OAAOw+C,GAAKA,EAAE,EAAE,EAClC2yB,EAAYnxE,EAAS,OAAOw+C,GAAK,CAACA,EAAE,EAAE,EAI5C,GAAI2yB,EAAU,OAAS,GAAKD,EAAO,OAAS,EAAG,CAC3C,MAAME,EAAaF,EAAO,OAAO1yB,GAAK,CAAC6yB,GAAoB7yB,EAAE,EAAG,CAAC,EAGjE,OAAI4yB,EAAW,OAAS,GAAKE,GAA6BF,CAAU,EACzD,CAAC,GAAGD,EAAWI,GAAkBH,CAAU,CAAC,EAEhD,CAAC,GAAGD,EAAW,GAAGC,CAAU,CACvC,CAIA,GAAIF,EAAO,OAAS,GAAKC,EAAU,SAAW,EAAG,CAC7C,MAAMK,EAAWN,EAAO,OAAO1yB,GAAK,CAAC6yB,GAAoB7yB,EAAE,EAAG,CAAC,EAC/D,OAAIgzB,EAAS,SAAW,EAGb,CAAA,EAEPA,EAAS,SAAW,EAAUA,EAE3B,CAACD,GAAkBC,CAAQ,CAAC,CACvC,CAEA,OAAOxxE,CACX,CAKA,SAASqxE,GAAoBI,EAAyB,CAClD,MAAMC,EAAUD,EAAO,QAAQ,eAAgB,EAAE,EAAE,KAAA,EACnD,OAAOC,EAAQ,WAAW,GAAG,GACzB,+CAA+C,KAAKA,CAAO,GAE3D,sBAAsB,KAAKA,CAAO,CAC1C,CASA,SAASJ,GAA6BK,EAAsC,CACxE,GAAIA,EAAS,OAAS,EAAG,MAAO,GAGhC,MAAMC,EAA4B,CAAA,EAClC,UAAWC,KAAUF,EAAU,CAC3B,MAAMD,GAAWG,EAAO,IAAM,IAAI,QAAQ,eAAgB,EAAE,EAAE,KAAA,EAExDl4B,EAAQ+3B,EAAQ,MAAM,qBAAqB,EACjD,GAAK/3B,EAMDi4B,EAAgB,KAAKj4B,EAAM,CAAC,EAAE,MAAM,MAN5B,CAER,MAAMm4B,EAAUJ,EAAQ,MAAM,oBAAoB,EAClD,GAAI,CAACI,EAAS,MAAO,GACrBF,EAAgB,KAAKE,EAAQ,CAAC,EAAE,MAAM,CAC1C,CAGJ,CAGA,MAAMC,EAAQH,EAAgB,CAAC,EAC/B,OAAOA,EAAgB,MAAM/sD,GAAQA,IAASktD,CAAK,CACvD,CAKA,SAASR,GAAkBI,EAA8C,CACrE,OAAOA,EAAS,OAAO,CAACK,EAAMC,IAC1BC,GAAiBD,CAAI,EAAIC,GAAiBF,CAAI,EAAIC,EAAOD,CAAA,CAEjE,CAKA,SAASE,GAAiBljD,EAAoC,CAC1D,OAAKA,EAAU,SACRA,EAAU,SAAS,OACtBA,EAAU,SAAS,OAAO,CAACmjD,EAAKvtC,IAAUutC,EAAMD,GAAiBttC,CAAK,EAAG,CAAC,EAF9C,CAGpC,CAUA,SAASwtC,GAAmBjyE,EAA2B,CACnD,OAAKA,EAAU,SAAS,IAAI,EAErBA,EAAU,QAAQ,mBAAoB,CAAC+zB,EAAGrP,IAAiB,CAE9D,MAAMwtD,EAAextD,EAAK,MAAM,oCAAoC,EACpE,OAAIwtD,EACOA,EAAa,CAAC,EAGlB,EACX,CAAC,EAVqClyE,CAW1C,CASA,SAASmyE,GAAkBnyE,EAAmB8D,EAAsB,CAChE,GAAI,CAAC9D,EAAW,MAAO,GAGvB,IAAIoyE,EAAYpyE,EAChB,OAAAoyE,EAAYA,EACP,QAAQ,qUAAsU,EAAE,EAChV,QAAQ,UAAW,GAAG,EACtB,KAAA,GAGDtuE,IAAS,QAAU,iBAAiB,KAAKsuE,CAAS,KAClDA,EAAYA,EAAU,QAAQ,qBAAsB,CAACr+C,EAAGzwB,IAAQ,CAC5D,MAAM+uE,EAAM,SAAS/uE,CAAG,EACxB,OAAO+uE,EAAM,EAAI,aAAa,KAAK,KAAKA,EAAM,CAAC,CAAC,GAAK,aAAaA,CAAG,EACzE,CAAC,GAGED,CACX,CAYA,SAASE,GAAmBzjD,EAAoC,CAC5D,KAAM,CAAE,KAAA/qB,EAAM,MAAA7D,CAAA,EAAU4uB,EACxB,GAAI,CAAC5uB,GAAS,CAAC6D,EAAM,MAAO,GAE5B,MAAMY,EAAoB,CAAA,EAE1B,GAAIZ,IAAS,OAAQ,CACjBY,EAAQ,KAAK,MAAM,EAEnB,MAAMs7B,EAAY//B,EAAM,WAAa,MAC/BsyE,EAAuC,CACzC,IAAK,WAAY,cAAe,mBAChC,IAAK,WAAY,cAAe,kBAAA,EAEhCA,EAAavyC,CAAS,KAAW,KAAKuyC,EAAavyC,CAAS,CAAC,EAEjE,MAAMwyC,EAAUvyE,EAAM,SAAW,QAC3BwyE,EAAqC,CACvC,MAAO,gBAAiB,IAAK,cAAe,OAAQ,iBACpD,QAAS,kBAAmB,OAAQ,iBAAkB,OAAQ,gBAAA,EAE9DA,EAAWD,CAAO,KAAW,KAAKC,EAAWD,CAAO,CAAC,EAEzD,MAAME,EAAQzyE,EAAM,OAAS,UACvB0yE,EAAmC,CACrC,MAAO,cAAe,IAAK,YAAa,OAAQ,eAChD,SAAU,iBAAkB,QAAS,eAAA,EAErCA,EAASD,CAAK,KAAW,KAAKC,EAASD,CAAK,CAAC,EAEjD,MAAME,EAAO3yE,EAAM,MAAQ,SACrB4yE,EAAkC,CACpC,KAAM,YAAa,OAAQ,cAAe,eAAgB,mBAAA,EAE1DA,EAAQD,CAAI,KAAW,KAAKC,EAAQD,CAAI,CAAC,EAEzC3yE,EAAM,KAAOA,EAAM,IAAM,KAAW,KAAK,OAAOA,EAAM,GAAG,EAAE,CACnE,CAEA,GAAI6D,IAAS,OAAQ,CACjBY,EAAQ,KAAK,MAAM,EAEnB,MAAMouE,EAAO7yE,EAAM,MAAQ,EAG3B,GAFAyE,EAAQ,KAAK,aAAaouE,CAAI,EAAE,EAE5B7yE,EAAM,WAAY,CAClB,MAAMw3C,EAAIx3C,EAAM,WACZw3C,EAAE,IAAI/yC,EAAQ,KAAK,gBAAgB+yC,EAAE,EAAE,EAAE,EACzCA,EAAE,IAAI/yC,EAAQ,KAAK,gBAAgB+yC,EAAE,EAAE,EAAE,EACzCA,EAAE,IAAI/yC,EAAQ,KAAK,gBAAgB+yC,EAAE,EAAE,EAAE,EACzCA,EAAE,IAAI/yC,EAAQ,KAAK,gBAAgB+yC,EAAE,EAAE,EAAE,EACzCA,EAAE,KAAK,GAAG/yC,EAAQ,KAAK,iBAAiB+yC,EAAE,KAAK,CAAC,EAAE,CAC1D,CAEIx3C,EAAM,MAAQ,QAAaA,EAAM,IAAM,GAAGyE,EAAQ,KAAK,OAAOzE,EAAM,GAAG,EAAE,EACzEA,EAAM,SAAW,QAAaA,EAAM,OAAS,GAAGyE,EAAQ,KAAK,SAASzE,EAAM,MAAM,EAAE,EACpFA,EAAM,SAAW,QAAaA,EAAM,OAAS,GAAGyE,EAAQ,KAAK,SAASzE,EAAM,MAAM,EAAE,CAC5F,CAEA,OAAOyE,EAAQ,KAAK,GAAG,CAC3B,CAKA,SAASquE,GAAkBzgD,EAA2B,CAClD,OAAQA,EAAA,CACJ,IAAK,QACD,MAAO,gBACX,IAAK,OACD,MAAO,gBACX,IAAK,OACD,MAAO,GACX,QACI,MAAO,eAAA,CAEnB,CAKA,SAAS0gD,GACLnzE,EACA+wE,EACAC,EACAz5D,EAC6B,CAC7B,MAAI,CAACvX,GAAYA,EAAS,SAAW,EAAU,CAAA,EAC9BixE,GAAejxE,CAAQ,EACxB,IAAI,CAAC4kC,EAAOjgB,IACxByuD,GAAmBxuC,EAAOmsC,EAAWC,EAAWrsD,EAAGpN,CAAK,CAAA,CAEhE,CAYA,SAAS87D,GAAiBrkD,EAA4BzX,EAAuB,CACzE,MAAM+7D,EAAgBtkD,EAAU,OAAO,WAAaA,EAAU,WAAa,GAE3E,OAAKA,EAAU,WAEXzX,GAAS,MAAQyX,EAAU,WAAW,SAAS,OAAO,UAC/CA,EAAU,WAAW,QAAQ,MAAM,UAE1CzX,GAAS,KAAOyX,EAAU,WAAW,QAAQ,OAAO,UAC7CA,EAAU,WAAW,OAAO,MAAM,UAGtCskD,EAT2BA,CAUtC,CAeA,SAASC,GAAyBpzE,EAAmBoX,EAAwD,CACzG,MAAMi8D,EAASrzE,EAAU,MAAM,KAAK,EAAE,OAAO,OAAO,EAE9CszE,EAAiE,CAAA,EACjEC,EAAyB,CAAA,EAE/B,UAAWC,KAASH,EAAQ,CAExB,MAAMI,EAAkBD,EAAM,MAAM,0BAA0B,EAC9D,GAAIC,EAAiB,CACjB,KAAM,CAAA,CAAGloD,EAAQmoD,CAAG,EAAID,EACxB,GAAInD,GAAgB,IAAIoD,CAAG,EAAG,CAC1BJ,EAAe,KAAK,CAChB,WAAYjD,GAAqB9kD,CAAM,GAAK,EAC5C,QAASmoD,CAAA,CACZ,EACD,QACJ,EAEKrD,GAAqB9kD,CAAM,GAAK,IAAMnU,GACvCm8D,EAAa,KAAKG,CAAG,EAEzB,QACJ,CAGA,GAAIpD,GAAgB,IAAIkD,CAAK,EAAG,CAC5BF,EAAe,KAAK,CAAE,WAAY,EAAG,QAASE,EAAO,EACrD,QACJ,CAEAD,EAAa,KAAKC,CAAK,CAC3B,CAGA,GAAIF,EAAe,SAAW,EAC1B,MAAO,CAAE,QAAS,GAAM,UAAAtzE,CAAA,EAI5BszE,EAAe,KAAK,CAACt6C,EAAGC,IAAMD,EAAE,WAAaC,EAAE,UAAU,EAEzD,IAAI06C,EAAmB,GACvB,UAAW3hE,KAASshE,EACZthE,EAAM,YAAcoF,IACpBu8D,EAAmB3hE,EAAM,SAK5B2hE,IACDA,EAAmBL,EAAe,CAAC,EAAE,SAGzC,MAAM7vC,EAAUkwC,IAAqB,SAC/BC,EAAoBnwC,EACpB,CAACkwC,EAAkB,GAAGJ,CAAY,EAAE,KAAK,GAAG,EAC5C,GAEN,MAAO,CAAE,QAAA9vC,EAAS,UAAWmwC,CAAA,CACjC,CASA,SAASC,GAAyB7zE,EAAuE,CACrG,MAAMw5C,EAAQx5C,EAAU,MAAM,0BAA0B,EACxD,GAAI,CAACw5C,EAAO,MAAO,CAAE,UAAAx5C,CAAA,EAErB,MAAMe,EAAQy4C,EAAM,CAAC,EAAE,QAAQ,KAAM,GAAG,EAMxC,MAAO,CACH,UANqBx5C,EACpB,QAAQ,2BAA4B,EAAE,EACtC,QAAQ,UAAW,GAAG,EACtB,KAAA,EAID,MAAO,CAAE,oBAAqBe,CAAA,CAAM,CAE5C,CAKA,SAASkyE,GACLpkD,EACA+hD,EACAC,EACAh5D,EACAT,EACyB,CACzB,KAAM,CAAE,KAAAtT,EAAM,SAAAjE,EAAU,UAAAi0E,CAAA,EAAcjlD,EAEhCklD,EAAeb,GAAiBrkD,EAAWzX,CAAK,EAEhD48D,EAAgB1B,GAAmBzjD,CAAS,EAC5CzuB,EAAkB4zE,EAClB,GAAGA,CAAa,IAAID,CAAY,GAAG,OACnCA,EAEAE,EAAehC,GAAmB7xE,CAAe,EAEjD8zE,EAAad,GAAyBa,EAAc78D,CAAK,EAK/D,GAHI,CAACtT,GAGD,CAACowE,EAAW,QAAS,OAAO,KAEhC,MAAMl0E,EAAYk0E,EAAW,UAG7B,GAAIJ,EACA,OACIzzE,EAAAA,IAACE,EAAM,SAAN,CACI,SAAA,MAAM,KAAK,CAAE,OAAQswE,CAAA,EAAa,CAAC98C,EAAGvP,IACnCyuD,GACI,CAAE,GAAGpkD,EAAW,UAAW,MAAA,EAC3B+hD,EACAC,EACArsD,EACApN,CAAA,CAEP,GATgBS,CAUrB,EAKR,GAAI84D,GAAoB7sE,CAAI,EACxB,OACIzD,MAAC,OAAgB,UAAAL,EACZ,SAAA2wE,GAAoB7sE,CAAI,EAAE8sE,EAAWC,CAAS,CAAA,EADzCh5D,CAEV,EAKR,GAAI04D,GAAkB,IAAIzsE,CAAI,EAAG,CAC7B,MAAMsuE,EAAYD,GAAkBnyE,EAAW8D,CAAI,EAGnD,GAAI,CAACjE,GAAYA,EAAS,SAAW,EAAG,CAEpC,MAAMs0E,EADe,gBAAgB,KAAK/B,CAAS,EAE7C,GAAGA,CAAS,yCAAyCxB,CAAS,GAC9D,GAAGwB,CAAS,sDAAsDxB,CAAS,GAAG,KAAA,EACpF,OAAOvwE,EAAAA,IAAC,MAAA,CAAgB,UAAW8zE,CAAA,EAAlBt8D,CAA4B,CACjD,CAGA,MAAMu8D,EAAmBpB,GAAenzE,EAAU+wE,EAAWC,EAAWz5D,CAAK,EAI7E,GAAI,EAHeg9D,EAAiB,OAAS,GAAKA,EAAiB,KAAK/1B,GAAKA,IAAM,IAAI,GAGtE,OAAO,KAGxB,MAAMg2B,EAAaR,GAAyBzB,CAAS,EAErD,OACI/xE,EAAAA,IAAC,OAAgB,UAAWg0E,EAAW,UAAW,MAAOA,EAAW,MAC/D,SAAAD,CAAA,EADKv8D,CAEV,CAER,CAIA,MAAMy8D,EAAqBnC,GAAkBnyE,EAAW8D,CAAI,EAG5D,GAAI0sE,GAAgB,IAAI1sE,CAAI,EAAG,CAC3B,MAAMywE,EAAoC,CACtC,GAAI,MAAO,GAAI,MAAO,GAAI,MAAO,GAAI,MAAO,GAAI,MAAO,GAAI,MAC3D,EAAG,QAAS,KAAM,MAAO,MAAO,MAAO,EAAG,QAC1C,MAAO,UAAA,EAELC,EAAmC,CACrC,GAAI,QAAS,GAAI,QAAS,GAAI,QAAS,GAAI,QAAS,GAAI,QAAS,GAAI,QACrE,EAAG,SAAU,KAAM,QAAS,MAAO,QAAS,EAAG,QAC/C,OAAQ,QAAS,GAAI,QAAS,MAAO,QAAS,MAAO,MAAA,EAEnDxtC,EAASutC,EAAUzwE,CAAI,GAAK,QAC5BsT,EAAQo9D,EAAS1wE,CAAI,GAAK,SAC1B2wE,EAAU3wE,EAAK,WAAW,GAAG,EAAI,YAAc,SACrD,aACK,MAAA,CAAgB,UAAW,GAAGkjC,CAAM,IAAI5vB,CAAK,yCAAyCw5D,CAAS,IAAI6D,CAAO,IAAIH,CAAkB,GAAG,KAAA,GAA1Hz8D,CAAkI,CAEpJ,CAGA,GAAI44D,GAAiB,IAAI3sE,CAAI,EACzB,OAAIA,IAAS,iBACD,MAAA,CAAgB,UAAW,qGAAqG8sE,CAAS,IAAhI/4D,CAAoI,EAErJ/T,IAAS,YAAcA,IAAS,SAAWA,IAAS,eAC5C,MAAA,CAAgB,UAAW,uDAAuD8sE,CAAS,IAAlF/4D,CAAsF,QAEnG,MAAA,CAAgB,UAAW,oGAAoG+4D,CAAS,IAA/H/4D,CAAmI,EAIxJ,GAAI64D,GAAiB,IAAI5sE,CAAI,EACzB,OAAIA,IAAS,UAAYA,IAAS,uBACtB,MAAA,CAAgB,UAAW,uDAAuD8sE,CAAS,IAAlF/4D,CAAsF,EAEvG/T,IAAS,2BACD,MAAA,CAAgB,UAAW,oDAAoD8sE,CAAS,IAA/E/4D,CAAmF,QAEhG,MAAA,CAAgB,UAAW,yDAAyD+4D,CAAS,IAApF/4D,CAAwF,EAI7G,GAAI/T,IAAS,SAAU,CACnB,GAAIjE,GAAYA,EAAS,OAAS,EAAG,CACjC,MAAMuyE,EAAYD,GAAkBnyE,EAAW8D,CAAI,EAC7CswE,EAAmBpB,GAAenzE,EAAU+wE,EAAWC,EAAWz5D,CAAK,EAE7E,GAAI,EADeg9D,EAAiB,OAAS,GAAKA,EAAiB,KAAK/1B,GAAKA,IAAM,IAAI,GACtE,OAAO,KAGxB,MAAMq2B,EADiB,iCAAiC,KAAKX,CAAY,EAEnE,wFACA,GACN,OACI1zE,EAAAA,IAAC,MAAA,CAAgB,UAAW,GAAG+xE,CAAS,IAAIsC,CAAW,GAAG,KAAA,EACrD,SAAAN,CAAA,EADKv8D,CAEV,CAER,CACA,aAAQ,MAAA,CAAgB,UAAW,iDAAiD+4D,CAAS,IAA5E/4D,CAAgF,CACrG,CAGA,OAAI/T,IAAS,aACD,MAAA,CAAgB,UAAW,gDAAgD8sE,CAAS,IAA3E/4D,CAA+E,EAIhGhY,GAAYA,EAAS,OAAS,EAE1BQ,EAAAA,IAAC,MAAA,CAAgB,UAAWi0E,EACvB,SAAAtB,GAAenzE,EAAU+wE,EAAWC,EAAWz5D,CAAK,CAAA,EAD/CS,CAEV,QAKA,MAAA,CAAgB,UAAW,4DAA4D+4D,CAAS,IAAvF/4D,CAA2F,CAChH,CAkBO,MAAM88D,GAA4C,CAAC,CAAE,WAAAC,EAAY,QAAA1rE,KAAc,CAClF,MAAM0nE,EAAYmC,GAAkB7pE,EAAQ,SAAS,EAI/CuM,EADU,OAAe,QACD,cACxBC,EAAkBD,IAAA,EAClB2B,EAAQ1B,EACRA,EAAgB,MACf,OAAO,OAAW,IAAc,OAAO,WAAa,KAE3D,OACIrV,EAAAA,IAAC,MAAA,CACG,UAAU,SACV,KAAK,SACL,YAAU,OACV,aAAW,aAEV,SAAA2yE,GAAe4B,EAAYhE,EAAW1nE,EAAQ,gBAAiBkO,CAAK,CAAA,CAAA,CAGjF,2HC9uBMxS,GAAI,CAACvB,EAAawB,IACnB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EAc1CwxE,GAA0C,CAAC,CAAE,QAAA3rE,KAAc,CAC7D,MAAM4rE,EAAS,SAAS,gBAAgB,UAAU,SAAS,MAAM,EAE3DC,EAAUD,EAAS,gBAAkB,mBACrCE,EAAeF,EAAS,UAAY,UACpCG,EAAYH,EAAS,UAAY,UAEvC,OACIptE,EAAAA,KAAC,MAAA,CACG,MAAO,CACH,SAAU,WACV,MAAO,EACP,OAAQ,WACR,SAAU,SACV,WAAYqtE,EACZ,QAAS,OACT,cAAe,SACf,WAAY,SACZ,eAAgB,aAChB,WAAY,MACZ,IAAK,MAAA,EAGT,SAAA,CAAA10E,EAAAA,IAAC,MAAA,CACG,MAAO,CACH,MAAO,OACP,OAAQ,OACR,OAAQ,aAAa20E,CAAY,GACjC,eAAgB,cAChB,aAAc,MACd,UAAW,8BAAA,CACf,CAAA,EAEJ30E,EAAAA,IAAC,OAAA,CAAK,MAAO,CAAE,MAAO40E,EAAW,SAAU,MAAA,EACtC,SAAA/rE,GAAS,MAAQtE,GAAE,aAAa,CAAA,CACrC,CAAA,CAAA,CAAA,CAGZ,2GC5DMA,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EAwCjC6xE,GAAwC,CAAC,CACpD,YAAAC,EACA,WAAAC,EACA,aAAAC,EACA,gBAAAC,EAAkB,EAClB,cAAAC,EAAgB,GAChB,UAAAv1E,EAAY,GACZ,MAAAqE,EACA,SAAAmxE,EACA,SAAAC,EACA,GAAAzoE,EACA,YAAA3D,CACF,IAAM,CAGJ,MAAMqsE,EAAcjvE,EAAAA,QAAQ,IAAM,CAChC,MAAMkvE,EAA6B,CAAA,EAEnC,GAAIP,GAAcE,EAAkB,EAElC,QAAS9wD,EAAI,EAAGA,GAAK4wD,EAAY5wD,IAC/BmxD,EAAM,KAAKnxD,CAAC,MAET,CAEL,MAAMoxD,EAAc,KAAK,MAAMN,EAAkB,CAAC,EAElD,IAAIO,EAAY,KAAK,IAAI,EAAGV,EAAcS,CAAW,EACjDE,EAAU,KAAK,IAAIV,EAAa,EAAGD,EAAcS,CAAW,EAG5DT,GAAeS,EAAc,EAC/BE,EAAUR,EACDH,GAAeC,EAAaQ,IACrCC,EAAYT,EAAaE,EAAkB,GAI7CK,EAAM,KAAK,CAAC,EAGRE,EAAY,GACdF,EAAM,KAAK,KAAK,EAIlB,QAASnxD,EAAIqxD,EAAWrxD,GAAKsxD,EAAStxD,IACpCmxD,EAAM,KAAKnxD,CAAC,EAIVsxD,EAAUV,EAAa,GACzBO,EAAM,KAAK,KAAK,EAIdP,EAAa,GACfO,EAAM,KAAKP,CAAU,CAEzB,CAEA,OAAOO,CACT,EAAG,CAACR,EAAaC,EAAYE,CAAe,CAAC,EAEvCS,EAAmBC,GAAiB,CACpCA,EAAO,GAAKA,EAAOZ,GAAcY,IAASb,GAC9CE,EAAaW,CAAI,CACnB,EAEMC,EAAiB,IAAM,CACvBd,EAAc,GAChBE,EAAaF,EAAc,CAAC,CAEhC,EAEMe,EAAa,IAAM,CACnBf,EAAcC,GAChBC,EAAaF,EAAc,CAAC,CAEhC,EAEA,OACEztE,EAAAA,KAACpH,EAAA,CACC,UAAW,2BAA2BN,CAAS,GAC/C,MAAAqE,EACA,KAAK,aACL,aAAYO,GAAE,mBAAmB,EACjC,GAAAoI,EAAS,GAAG3D,EAGX,SAAA,CAAAksE,GACCl1E,EAAAA,IAACV,EAAA,CACC,QAAS,IAAMo2E,EAAgB,CAAC,EAChC,SAAUZ,IAAgB,EAC1B,UAAU,4NACV,aAAYvwE,GAAE,mBAAmB,EAClC,SAAA,GAAA,CAAA,EAMHvE,EAAAA,IAACV,EAAA,CACC,QAASs2E,EACT,SAAUd,IAAgB,EAC1B,UAAU,4NACV,aAAYvwE,GAAE,kBAAkB,EAE/B,SAAA4wE,qBAAc,SAAA,GAAA,CAAO,CAAA,CAAA,EAIxBn1E,MAACC,GAAI,UAAU,0BACZ,WAAY,IAAI,CAAC01E,EAAMn+D,IAAU,CAChC,GAAIm+D,IAAS,MACX,OACE31E,EAAAA,IAACG,GAAA,CAEC,UAAU,qDACX,SAAA,KAAA,EAFM,YAAYqX,CAAK,EAAA,EAQ5B,MAAMs+D,EAAUH,EACV7/D,EAAWggE,IAAYhB,EAE7B,OACE90E,EAAAA,IAACV,EAAA,CAEC,QAAS,IAAMo2E,EAAgBI,CAAO,EACtC,UAAW,oCACThgE,EACI,+EACA,0IACN,GACA,aAAYvR,GAAE,gBAAiB,CAAE,EAAGuxE,EAAS,EAC7C,eAAchgE,EAAW,OAAS,OAEjC,SAAAggE,CAAA,EAVIA,CAAA,CAaX,CAAC,CAAA,CACH,EAGA91E,EAAAA,IAACV,EAAA,CACC,QAASu2E,EACT,SAAUf,IAAgBC,EAC1B,UAAU,4NACV,aAAYxwE,GAAE,kBAAkB,EAE/B,SAAA6wE,qBAAc,SAAA,GAAA,CAAO,CAAA,CAAA,EAIvBF,GACCl1E,EAAAA,IAACV,EAAA,CACC,QAAS,IAAMo2E,EAAgBX,CAAU,EACzC,SAAUD,IAAgBC,EAC1B,UAAU,4NACV,aAAYxwE,GAAE,kBAAkB,EACjC,SAAA,GAAA,CAAA,CAED,CAAA,CAAA,CAIR,8GC9MMA,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EA2DjC+yE,GAAsC,CAAC,CAClD,KAAAtyE,EAAO,SACP,YAAAf,EACA,MAAOszE,EACP,SAAAx1E,EACA,SAAAy1E,EACA,WAAAC,EAAa,GACb,YAAAC,EAAc,CAAA,EACd,kBAAAC,EACA,gBAAAC,EAAkB,GAClB,UAAA12E,EAAY,GACZ,MAAAqE,EACA,GAAA2I,EACA,YAAA3D,CACF,IAAM,CAEJ,MAAMstE,EAAsB5zE,GAAe6B,GAAE,2BAA2B,EAElE,CAAC0B,EAAeC,CAAgB,EAAI5E,EAAAA,SAAS,EAAE,EAC/C,CAACi1E,EAAWC,CAAY,EAAIl1E,EAAAA,SAAS,EAAK,EAC1CiI,EAAerJ,EAAM,OAAuB,IAAI,EAChDu2E,EAAmBv2E,EAAM,OAAe,EAAE,EAE1CQ,EAAQs1E,IAAoB,OAAYA,EAAkB/vE,EAC1DywE,EAAwBL,GAAmBE,GAAaJ,EAAY,OAAS,GAAKz1E,EAAM,OAAS,EAGvGa,EAAAA,UAAU,IAAM,CACVy0E,IAAoB,SACtBS,EAAiB,QAAUT,EAE/B,EAAG,CAACA,CAAe,CAAC,EAEpB,MAAMl0E,EAAgBH,GAA2C,CAC/D,MAAMI,EAAWJ,EAAE,OAAO,MAC1BuE,EAAiBnE,CAAQ,EACzBvB,IAAWmB,CAAC,EAIR80E,EAAiB,UAAY,IAAM10E,IAAa,IAAM,CAAEJ,EAAE,YAAoB,WAEhF,WAAW,IAAM,CACf,MAAMsgB,EAAc1Y,EAAa,SAAS,cAAc,MAAM,EAC1D0Y,GACFA,EAAY,cAAA,CAEhB,EAAG,CAAC,EAGNw0D,EAAiB,QAAU10E,CAC7B,EAEM40E,EAAyBC,GAAiC,CAC9D1wE,EAAiB0wE,EAAW,IAAI,EAChC,MAAMC,EAAiB,CACrB,OAAQ,CAAE,MAAOD,EAAW,KAAM,KAAAnzE,CAAA,CAAK,EAEzCjD,IAAWq2E,CAAc,EACzBT,IAAoBQ,CAAU,EAC9BJ,EAAa,EAAK,CACpB,EAEMM,EAAgBn1E,GAAwC,CAC5DA,EAAE,eAAA,EACFs0E,IAAWt0E,CAAC,CACd,EAEA,OACE0F,EAAAA,KAACpH,EAAA,CAAI,IAAKsJ,EAAc,UAAW,YAAY5J,CAAS,GAAI,MAAAqE,EAAc,GAAA2I,EAAS,GAAG3D,EACpF,SAAA,CAAAhJ,EAAAA,IAACsI,GAAA,CAAK,SAAUwuE,EAAc,UAAU,WACtC,SAAAzvE,EAAAA,KAACpH,EAAA,CAAI,UAAW,8BAA8Bi2E,EAAa,QAAU,EAAE,GAErE,SAAA,CAAA7uE,EAAAA,KAACpH,EAAA,CAAI,UAAU,kBAEb,SAAA,CAAAD,EAAAA,IAACC,EAAA,CAAI,UAAU,+DACb,SAAAD,EAAAA,IAACwD,GAAA,CAAK,KAAMF,GAAS,OAAQ,UAAU,0CAAA,CAA2C,CAAA,CACpF,EAGAtD,EAAAA,IAACK,GAAA,CACC,KAAK,SACL,KAAAoD,EACA,MAAA/C,EACA,SAAUoB,EACV,QAAS,IAAM00E,EAAa,EAAI,EAChC,OAAQ,IAAM,WAAW,IAAMA,EAAa,EAAK,EAAG,GAAG,EACvD,YAAaF,EACb,UAAU,+IAAA,CAAA,CACZ,EACF,EAGCJ,GACCl2E,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,UAAU,sKAET,YAAE,eAAe,CAAA,CAAA,CACpB,CAAA,CAEJ,CAAA,CACF,EAGCo3E,SACEz2E,EAAA,CAAI,UAAU,gJACZ,SAAAk2E,EAAY,IAAKS,GAChB52E,EAAAA,IAACC,EAAA,CAEC,UAAU,mJACV,QAAS,IAAM02E,EAAsBC,CAAU,EAE/C,SAAAvvE,EAAAA,KAACpH,EAAA,CAAI,UAAU,0BACb,SAAA,CAAAD,EAAAA,IAACwD,GAAA,CAAK,KAAMF,GAAS,OAAQ,UAAU,2CAA2C,EAClFtD,EAAAA,IAACG,GAAA,CAAK,UAAU,2CAA4C,WAAW,IAAA,CAAK,CAAA,CAAA,CAC9E,CAAA,EAPKy2E,EAAW,EAAA,CASnB,CAAA,CACH,CAAA,EAEJ,CAEJ,6GCxKMv3E,GAAU,OAAe,OA6DzB03E,GAAkG,CACtG,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,MACJ,MAAO,KACT,EAEO,SAASC,GAAe,CAC7B,IAAAC,EACA,aAAAC,EAAe,IACf,KAAAx3E,EAAO,KACP,eAAAy3E,EAAiB,iBACjB,eAAAC,EAAiB,iBACjB,gBAAAC,EACA,cAAA5yB,EACA,gBAAA6yB,EACA,cAAAC,EACA,iBAAAC,EAAmB,GACnB,OAAAl1E,EAAS,UACT,QAAAC,EAAU,EACV,UAAA5C,EAAY,GACZ,iBAAA83E,EACA,iBAAAC,EACA,SAAA59B,EAAW,GACX,cAAA69B,EAAgB,GAChB,qBAAAC,EACA,cAAAC,EAAgB,GAChB,qBAAAC,EACA,qBAAAC,EACA,mBAAAC,EACA,qBAAAC,EACA,mBAAAC,EACA,GAAAvrE,EACA,YAAA3D,CACF,EAAwB,CACtB,MAAMpG,EAAW3B,EAAAA,OAAyB,IAAI,EACxC,CAACqrE,EAAa6L,CAAc,EAAI72E,EAAAA,SAAS,EAAK,EAC9C,CAACskD,EAAYC,CAAa,EAAIvkD,EAAAA,SAAS,EAAK,EAE5C,CAAC82E,EAAgBC,CAAiB,EAAI/2E,EAAAA,SAAoC,MAAS,EACnF,CAAC0mD,EAAcswB,CAAe,EAAIh3E,EAAAA,SAAwB,IAAI,EAC9D,CAACi3E,EAAmBC,CAAoB,EAAIl3E,EAAAA,SAAS,EAAK,EAC1D,CAACm3E,EAAmBC,CAAoB,EAAIp3E,EAAAA,SAAS,EAAK,EAC1D,CAACmmD,EAAakxB,CAAc,EAAIr3E,EAAAA,SAAsB,IAAI,EAC1D,CAACs3E,EAAYC,CAAa,EAAIv3E,EAAAA,SAAwB,IAAI,EAC1Dw3E,GAAU73E,EAAAA,OAAO,iBAAiB,KAAK,SAAS,SAAS,EAAE,EAAE,MAAM,EAAG,EAAE,CAAC,EAAE,EAAE,QAGnFM,EAAAA,UAAU,IAAM,CACd,GAAIkmD,EAAa,CACf,MAAMnwC,GAAM,IAAI,gBAAgBmwC,CAAW,EAC3C,OAAAoxB,EAAcvhE,EAAG,EACV,IAAM,IAAI,gBAAgBA,EAAG,CACtC,MACEuhE,EAAc,IAAI,CAEtB,EAAG,CAACpxB,CAAW,CAAC,EAGhB,MAAMljD,GAAI9C,cAAauB,IACd3D,IAAQ,IAAI2D,EAAG,GAAKA,GAC1B,CAAA,CAAE,EAGC+1E,GAAet3E,EAAAA,YAAY,IAAqB,CACpD,MAAM03C,GAAQ,SAAS,OAAO,MAAM,oBAAoB,EACxD,OAAIA,GACK,mBAAmBA,GAAM,CAAC,CAAC,EAE7B,IACT,EAAG,CAAA,CAAE,EAGC6/B,EAAev3E,EAAAA,YAAY,IACxBpC,IAAQ,KAAK,WAAA,GAAgB,KACnC,CAAA,CAAE,EAGC45E,GAAgBx3E,cAAY,MAAO0B,IAAe,CACtDu1E,EAAqB,EAAK,EAC1BC,EAAe,IAAI,EACnBR,EAAe,EAAI,EACnBG,EAAgB,IAAI,EAEpB,GAAI,CAEF,MAAMlgC,GAAW,IAAI,SACrBA,GAAS,OAAO,SAAUj1C,EAAI,EAG9B,MAAM+1E,GAAYH,GAAA,EACZI,GAAYH,EAAA,EACZ3gC,GAAW,MAAM,MAAM8+B,EAAgB,CAC3C,OAAQ,OACR,QAAS,CACP,OAAQ,mBACR,GAAI+B,IAAa,CAAE,eAAgBA,EAAA,EACnC,GAAIC,IAAa,CAAE,cAAe,UAAUA,EAAS,EAAA,CAAG,EAE1D,YAAa,UACb,KAAM/gC,EAAA,CACP,EAED,GAAI,CAACC,GAAS,GAAI,CAChB,MAAM+gC,GAAY,MAAM/gC,GAAS,KAAA,EAAO,MAAM,KAAO,CAAA,EAAG,EACxD,MAAM,IAAI,MAAM+gC,GAAU,SAAW70E,GAAE,0BAA0B,CAAC,CACpE,CAEA,MAAMof,GAAO,MAAM00B,GAAS,KAAA,EACtBvqB,GAASnK,GAAK,MAAQA,GAGxBmK,GAAO,QACTuqD,EAAkBvqD,GAAO,MAAM,EAGjCupD,IAAkBvpD,EAAM,EACxBzuB,IAAQ,OAAO,UAAUkF,GAAE,gCAAgC,CAAC,EAGxDwzE,GAAsB,OACxBA,EAAqB,QAAQnmD,IAAUvyB,IAAQ,WAAWuyB,EAAM,CAAC,EAEjEvyB,IAAQ,oBAAoB,MAAM,CAEtC,OAASkB,GAAO,CACd,MAAMu0B,GAAMv0B,cAAiB,MAAQA,GAAQ,IAAI,MAAM,OAAOA,EAAK,CAAC,EACpE+3E,EAAgBxjD,GAAI,OAAO,EAC3B2vB,IAAgB3vB,EAAG,EACnBz1B,IAAQ,OAAO,QAAQy1B,GAAI,OAAO,EAE9BkjD,GAAoB,QACtBA,EAAmB,QAAQpmD,IAAUvyB,IAAQ,WAAWuyB,EAAM,CAAC,CAEnE,QAAA,CACEumD,EAAe,EAAK,EAEhBv1E,EAAS,UACXA,EAAS,QAAQ,MAAQ,GAE7B,CACF,EAAG,CAACu0E,EAAgBE,EAAiB5yB,EAAes0B,GAAcC,EAAcz0E,EAAC,CAAC,EAG5E80E,GAAmB53E,EAAAA,YACvB,MAAO6I,IAA+C,CACpD,MAAMnH,GAAOmH,GAAM,OAAO,QAAQ,CAAC,EACnC,GAAI,CAACnH,GAAM,OAGXm1E,EAAgB,IAAI,EAGpB,MAAMgB,GAAW/2E,EAAU,KAAO,KAClC,GAAIY,GAAK,KAAOm2E,GAAU,CACxB,MAAM/4E,GAAQ,IAAI,MAAMgE,GAAE,2BAA2B,EAAE,QAAQ,OAAQ,GAAGhC,CAAO,IAAI,CAAC,EACtF+1E,EAAgB/3E,GAAM,OAAO,EAC7BkkD,IAAgBlkD,EAAK,EACrBlB,IAAQ,OAAO,QAAQkB,GAAM,OAAO,EACpC,MACF,CAGA,GAAI+B,GAAU,CAACa,GAAK,KAAK,MAAMb,EAAO,QAAQ,IAAK,IAAI,CAAC,EAAG,CACzD,MAAM/B,GAAQ,IAAI,MAAMgE,GAAE,8BAA8B,CAAC,EACzD+zE,EAAgB/3E,GAAM,OAAO,EAC7BkkD,IAAgBlkD,EAAK,EACrBlB,IAAQ,OAAO,QAAQkB,GAAM,OAAO,EACpC,MACF,CAGIs3E,GACFc,EAAex1E,EAAI,EACnBu1E,EAAqB,EAAI,GAEzBO,GAAc91E,EAAI,CAEtB,EACA,CAACZ,EAASD,EAAQmiD,EAAeozB,EAAeoB,GAAe10E,EAAC,CAAA,EAI5Dg1E,GAAgB93E,EAAAA,YAAY,SAAY,CAC5C+2E,EAAqB,EAAK,EAC1B3yB,EAAc,EAAI,EAClByyB,EAAgB,IAAI,EAEpB,GAAI,CACF,MAAMY,GAAYH,GAAA,EACZI,GAAYH,EAAA,EACZ3gC,GAAW,MAAM,MAAM++B,EAAgB,CAC3C,OAAQ,SACR,QAAS,CACP,OAAQ,mBACR,eAAgB,mBAChB,GAAI8B,IAAa,CAAE,eAAgBA,EAAA,EACnC,GAAIC,IAAa,CAAE,cAAe,UAAUA,EAAS,EAAA,CAAG,EAE1D,YAAa,SAAA,CACd,EAED,GAAI,CAAC9gC,GAAS,GAAI,CAChB,MAAM+gC,GAAY,MAAM/gC,GAAS,KAAA,EAAO,MAAM,KAAO,CAAA,EAAG,EACxD,MAAM,IAAI,MAAM+gC,GAAU,SAAW70E,GAAE,0BAA0B,CAAC,CACpE,CAGA8zE,EAAkB,IAAI,EAEtBf,IAAA,EACAj4E,IAAQ,OAAO,UAAUkF,GAAE,+BAA+B,CAAC,EAGvD0zE,GAAsB,OACxBA,EAAqB,QAAQrmD,IAAUvyB,IAAQ,WAAWuyB,EAAM,CAAC,EAEjEvyB,IAAQ,oBAAoB,MAAM,CAEtC,OAASkB,GAAO,CACd,MAAMu0B,GAAMv0B,cAAiB,MAAQA,GAAQ,IAAI,MAAM,OAAOA,EAAK,CAAC,EACpE+3E,EAAgBxjD,GAAI,OAAO,EAC3ByiD,IAAgBziD,EAAG,EACnBz1B,IAAQ,OAAO,QAAQy1B,GAAI,OAAO,EAE9BojD,GAAoB,QACtBA,EAAmB,QAAQtmD,IAAUvyB,IAAQ,WAAWuyB,EAAM,CAAC,CAEnE,QAAA,CACEi0B,EAAc,EAAK,CACrB,CACF,EAAG,CAACuxB,EAAgBE,EAAiBC,EAAewB,GAAcC,EAAcz0E,EAAC,CAAC,EAG5Ei1E,GAAoB/3E,EAAAA,YAAY,IAAM,CACtCk2E,EACFa,EAAqB,EAAI,EAEzBe,GAAA,CAEJ,EAAG,CAAC5B,EAAe4B,EAAa,CAAC,EAG3BE,GAAqBh4E,EAAAA,YAAY,IAAM,CAC3C+2E,EAAqB,EAAK,CAC5B,EAAG,CAAA,CAAE,EAGCkB,GAAqBj4E,EAAAA,YAAY,IAAM,CAC3Ci3E,EAAqB,EAAK,EAC1BC,EAAe,IAAI,EAEf/1E,EAAS,UACXA,EAAS,QAAQ,MAAQ,GAE7B,EAAG,CAAA,CAAE,EAGC+2E,GAAsBl4E,EAAAA,YAAY,IAAM,CACxCgmD,GACFwxB,GAAcxxB,CAAW,CAE7B,EAAG,CAACA,EAAawxB,EAAa,CAAC,EAGzBW,GAAmBxB,IAAmB,OAAYnB,EAAMmB,EACxDyB,GAAY,CAAC,CAACD,GAGdE,GAAa/C,GAAcr3E,CAAI,GAAK,KAGpCq6E,EAAgBxB,GAAqBE,EAGrCuB,GAAgB,IACpB3yE,OAACpH,EAAA,CAAI,UAAU,yCAEb,SAAA,CAAAD,EAAAA,IAACK,GAAA,CACC,IAAKuC,EACL,GAAIk2E,GACJ,KAAK,OACL,OAAAx2E,EACA,UAAU,SACV,SAAU+2E,GACV,SAAU/M,CAAA,CAAA,EAIX,CAACuN,IACAxyE,EAAAA,KAACK,GAAA,CACC,QAASoxE,GACT,UAAW,iOACTxM,EAAc,gCAAkC,EAClD,GAEC,SAAA,CAAAA,EACCtsE,EAAAA,IAACwD,GAAA,CAAK,KAAK,UAAU,KAAK,KAAK,UAAU,cAAA,CAAe,EAExDxD,EAAAA,IAACwD,GAAA,CAAK,KAAK,QAAQ,KAAK,KAAK,EAE/BxD,EAAAA,IAACG,GAAA,CAAM,SAAAs3E,GAAoBlzE,GAAE,gCAAgC,CAAA,CAAE,CAAA,CAAA,CAAA,EAKlEs1E,IACCxyE,EAAAA,KAAAmL,WAAA,CACE,SAAA,CAAAnL,EAAAA,KAACK,GAAA,CACC,QAASoxE,GACT,UAAW,iOACTxM,EAAc,gCAAkC,EAClD,GAEC,SAAA,CAAAA,EACCtsE,EAAAA,IAACwD,GAAA,CAAK,KAAK,UAAU,KAAK,KAAK,UAAU,cAAA,CAAe,EAExDxD,EAAAA,IAACwD,GAAA,CAAK,KAAK,SAAS,KAAK,KAAK,EAEhCxD,EAAAA,IAACG,GAAA,CAAM,SAAAs3E,GAAoBlzE,GAAE,eAAe,CAAA,CAAE,CAAA,CAAA,CAAA,EAG/CizE,GACCnwE,EAAAA,KAAC/H,EAAA,CACC,KAAK,SACL,UAAU,8PACV,QAASk6E,GACT,SAAU5zB,EAET,SAAA,CAAAA,EACC5lD,EAAAA,IAACwD,GAAA,CAAK,KAAK,UAAU,KAAK,KAAK,UAAU,cAAA,CAAe,EAExDxD,EAAAA,IAACwD,GAAA,CAAK,KAAK,UAAU,KAAK,KAAK,EAEjCxD,EAAAA,IAACG,GAAA,CAAM,SAAAu3E,GAAoBnzE,GAAE,eAAe,CAAA,CAAE,CAAA,CAAA,CAAA,CAChD,CAAA,CAEJ,CAAA,EAEJ,EAGF,OACE8C,OAACpH,GAAI,UAAW,oCAAoCN,CAAS,GAAI,GAAAgN,EAAS,GAAG3D,EAE1E,SAAA,CAAAyvE,GAAqBG,EACpBvxE,OAACpH,EAAA,CAAI,UAAU,WACb,SAAA,CAAAD,EAAAA,IAAC4H,GAAA,CACC,IAAKgxE,EACL,IAAI,UACJ,UAAW,6BACTl5E,IAAS,KAAO,YAChBA,IAAS,KAAO,YAChBA,IAAS,KAAO,YAChBA,IAAS,KAAO,YAChB,WACF,EAAA,CAAA,EAEFM,EAAAA,IAACC,EAAA,CAAI,UAAU,qFAAA,CAAsF,CAAA,CAAA,CACvG,EAEAD,EAAAA,IAACyN,GAAA,CACC,OAAQmsE,IAAoB,OAC5B,KAAM1C,EACN,KAAM4C,EAAA,CAAA,EAKT,CAAChgC,GACAzyC,EAAAA,KAACpH,EAAA,CAAI,UAAU,6CAEZ,SAAA,CAAAw4E,GAAqBhxB,GACpBpgD,OAACpH,EAAA,CAAI,UAAU,mGACb,SAAA,CAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,+BACb,SAAA,CAAAD,MAACwD,IAAK,KAAK,SAAS,KAAK,KAAK,UAAU,4CAA4C,QACnFrD,GAAA,CAAK,UAAU,uDACb,SAAA23E,GAAwBvzE,GAAE,sCAAsC,CAAA,CACnE,CAAA,EACF,SACCtE,EAAA,CAAI,UAAU,yDAAyD,MAAOwnD,EAAY,KACxF,SAAA,CAAAA,EAAY,KAAK,MAAIA,EAAY,KAAO,KAAO,MAAM,QAAQ,CAAC,EAAE,KAAA,EACnE,EACApgD,EAAAA,KAACpH,EAAA,CAAI,UAAU,yBACb,SAAA,CAAAoH,EAAAA,KAAC/H,EAAA,CACC,KAAK,SACL,UAAU,0KACV,QAASq6E,GACT,SAAUrN,EAET,SAAA,CAAAA,EACCtsE,EAAAA,IAACwD,GAAA,CAAK,KAAK,UAAU,KAAK,KAAK,UAAU,cAAA,CAAe,EAExDxD,EAAAA,IAACwD,GAAA,CAAK,KAAK,QAAQ,KAAK,KAAK,EAE/BxD,EAAAA,IAACG,GAAA,CAAM,SAAAoE,GAAE,gBAAgB,CAAA,CAAE,CAAA,CAAA,CAAA,EAE7BvE,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,UAAU,4PACV,QAASo6E,GAET,SAAA15E,EAAAA,IAACG,GAAA,CAAM,SAAAoE,GAAE,eAAe,CAAA,CAAE,CAAA,CAAA,CAC5B,CAAA,CACF,CAAA,EACF,EAIDg0E,GACClxE,EAAAA,KAACpH,EAAA,CAAI,UAAU,+FACb,SAAA,CAAAoH,EAAAA,KAACpH,EAAA,CAAI,UAAU,+BACb,SAAA,CAAAD,MAACwD,IAAK,KAAK,iBAAiB,KAAK,KAAK,UAAU,0CAA0C,QACzFrD,GAAA,CAAK,UAAU,qDACb,SAAAy3E,GAAwBrzE,GAAE,sCAAsC,CAAA,CACnE,CAAA,EACF,EACA8C,EAAAA,KAACpH,EAAA,CAAI,UAAU,yBACb,SAAA,CAAAoH,EAAAA,KAAC/H,EAAA,CACC,KAAK,SACL,UAAU,wKACV,QAASi6E,GACT,SAAU3zB,EAET,SAAA,CAAAA,EACC5lD,EAAAA,IAACwD,GAAA,CAAK,KAAK,UAAU,KAAK,KAAK,UAAU,cAAA,CAAe,EAExDxD,EAAAA,IAACwD,GAAA,CAAK,KAAK,UAAU,KAAK,KAAK,EAEjCxD,EAAAA,IAACG,GAAA,CAAM,SAAAoE,GAAE,eAAe,CAAA,CAAE,CAAA,CAAA,CAAA,EAE5BvE,EAAAA,IAACV,EAAA,CACC,KAAK,SACL,UAAU,4PACV,QAASm6E,GAET,SAAAz5E,EAAAA,IAACG,GAAA,CAAM,SAAAoE,GAAE,eAAe,CAAA,CAAE,CAAA,CAAA,CAC5B,CAAA,CACF,CAAA,EACF,EAID,CAACw1E,GAAiBC,GAAA,CAAc,EACnC,EAIDhyB,GAAgB,CAAC+xB,GAChB1yE,EAAAA,KAACpH,EAAA,CAAI,UAAU,iEACb,SAAA,CAAAD,EAAAA,IAACwD,GAAA,CAAK,KAAK,eAAe,KAAK,KAAK,EACpCxD,EAAAA,IAACG,IAAM,SAAA6nD,CAAA,CAAa,CAAA,CAAA,CACtB,CAAA,EAEJ,CAEJ,kIC9eMiyB,GAAY,IAAO,OAAe,OAGlC11E,GAAI,CAACvB,EAAawB,IACrB,OAAe,QAAQ,IAAIxB,EAAKwB,CAAM,GAAKxB,EA0IxCk3E,GAAiB,CACrB,WAAY,4BACZ,SAAU,2BACZ,EAGMC,GAAyB,IAAwB,CACrD,CACE,IAAK,eACL,MAAO51E,GAAE,uBAAuB,EAChC,KAAM,OACN,KAAM,mBAAA,EAER,CACE,IAAK,aACL,MAAOA,GAAE,qBAAqB,EAC9B,KAAM,aACN,KAAM,yBAAA,CAEV,EAKM61E,GAAuD,CAAC,CAAE,KAAAxsE,EAAM,MAAA2tC,KAC/D3tC,EAEH5N,EAAAA,IAACG,GAAA,CAAK,UAAU,2CAA2C,MAAAo7C,EACxD,SAAA3tC,EACH,EAJgB,KAWPysE,GAAoC,CAAC,CAChD,OAAA3sE,EACA,KAAAjK,EACA,OAAA62E,EACA,QAAAC,EACA,aAAAC,EACA,QAAA1sE,EAAU,GACV,YAAAD,EAAc,GACd,aAAA4sE,EAAe,GACf,UAAAC,EAAY,GACZ,YAAAC,EAAc,kBACd,UAAAh7E,EAAY,GACZ,OAAAi7E,EAAS,WACT,KAAAhtE,EACA,gBAAAmpD,EAAkB,GAClB,UAAA8jB,EACA,cAAAC,EAAgB,CAAA,EAChB,gBAAAC,EAAkB,CAAA,EAClB,GAAApuE,EACA,YAAA3D,CACF,IAAM,CAEJ,MAAMgyE,EAAeV,GAAU5sE,GAAQ,KACjCQ,EAAgBJ,GAAWJ,GAAQ,UAAY,GAC/CO,EAAoBJ,GAAeH,GAAQ,SAAW,YAItDM,EAAaC,EACf1J,GAAE,yBAAyB,EAC1BqJ,GAAQnK,GAAQiK,GAAQ,MAAQ,GAG/B,CAACX,EAAUC,CAAW,EAAI1L,EAAAA,SAAS,EAAK,EACxC,CAAC25E,EAAcC,CAAe,EAAI55E,EAAAA,SAAS,CAAE,IAAK,EAAG,KAAM,EAAG,EAC9DiI,EAAetI,EAAAA,OAAuB,IAAI,EAC1CyI,EAAczI,EAAAA,OAAuB,IAAI,EACzCuI,EAAYvI,EAAAA,OAA0B,IAAI,EAG1Ck6E,EAAoBR,EAAY,QAAQ,WAAY,OAAOK,GAAgB,EAAE,CAAC,EAG9EI,EAAiB,GAAGlB,GAAeU,CAAM,CAAC,IAAIj7E,CAAS,GAG7D4B,EAAAA,UAAU,IAAM,CACd,GAAI,CAACwL,EAAU,OAEf,MAAM1C,EAAsBC,GAAsB,CAChD,MAAMC,GAASD,EAAM,OACf+wE,GAAoB9xE,EAAa,SAAS,SAASgB,EAAM,EACzD+wE,GAAmB5xE,EAAY,SAAS,SAASa,EAAM,EAEzD,CAAC8wE,IAAqB,CAACC,IACzBtuE,EAAY,EAAK,CAErB,EAEMuuE,EAAuB,IAAMvuE,EAAY,EAAK,EAEpD,gBAAS,iBAAiB,YAAa3C,CAAkB,EACzD,OAAO,iBAAiB,SAAUkxE,EAAsB,EAAI,EAC5D,OAAO,iBAAiB,SAAUA,CAAoB,EAC/C,IAAM,CACX,SAAS,oBAAoB,YAAalxE,CAAkB,EAC5D,OAAO,oBAAoB,SAAUkxE,EAAsB,EAAI,EAC/D,OAAO,oBAAoB,SAAUA,CAAoB,CAC3D,CACF,EAAG,CAACxuE,CAAQ,CAAC,EAGb,MAAMyuE,EAAe/5E,EAAAA,YAAY,IAAwB,CAEvD,GAAIo5E,GAAaA,EAAU,OAAS,EAClC,OAAOA,EAAU,OAAQ/oE,GAASA,EAAK,OAAS,EAAK,EAKvD,IAAIkvB,EADiBm5C,GAAA,EACI,OACtBroE,GAAS,CAACgpE,EAAc,SAAShpE,EAAK,GAAG,GAAKA,EAAK,OAAS,EAAA,EAI/D,OAAIipE,GAAmBA,EAAgB,OAAS,IAC9C/5C,EAAQ,CAAC,GAAGA,EAAO,GAAG+5C,EAAgB,OAAQjpE,GAASA,EAAK,OAAS,EAAK,CAAC,GAGtEkvB,CACT,EAAG,CAAC65C,EAAWC,EAAeC,CAAe,CAAC,EAGxCU,EAAqBh6E,EAAAA,YAAY,IAAM,CAC3C,GAAI+H,EAAU,QAAS,CACrB,MAAMkyE,EAAalyE,EAAU,QAAQ,sBAAA,EACrC0xE,EAAgB,CACd,IAAKQ,EAAW,OAAS,EACzB,KAAMA,EAAW,IAAA,CAClB,CACH,CACF,EAAG,CAAA,CAAE,EAGCC,EAAsBl6E,EAAAA,YAAY,CAACqQ,EAAsBnQ,IAAwB,CAKrF,GAJAA,EAAE,gBAAA,EACFA,EAAE,eAAA,EACFqL,EAAY,EAAK,EAEb8E,EAAK,QACPA,EAAK,QAAA,UACIA,EAAK,KAAM,CACpB,MAAMa,EAAOb,EAAK,KAAK,QAAQ,kBAAmB,OAAOkpE,GAAgB,EAAE,CAAC,EACtE/rE,GAASgrE,GAAA,EACXhrE,IAAQ,SACVA,GAAO,SAAS0D,CAAI,EAEpB,OAAO,SAAS,KAAOA,CAE3B,CACF,EAAG,CAACqoE,CAAY,CAAC,EAGX93E,EAAczB,cAAaE,GAAwB,CACvDA,EAAE,eAAA,EAEEo1D,GACFp1D,EAAE,gBAAA,EAIA,EAAAuM,GAAiB,CAAC8sE,KAKlBP,GACG1tE,GACH0uE,EAAA,EAEFzuE,EAAahG,GAAS,CAACA,CAAI,GAGpB0zE,GACPT,GAAA,GAAa,WAAWkB,CAAiB,EAE7C,EAAG,CAACpkB,EAAiB7oD,EAAe8sE,EAAcP,EAAc1tE,EAAU0uE,EAAoBf,EAAWS,CAAiB,CAAC,EAG3H,GAAIjtE,GAAiB,CAAC8sE,EACpB,cACG/6E,EAAA,CAAI,UAAWm7E,EAAgB,GAAAzuE,EAAS,GAAG3D,EAC1C,SAAA,CAAA3B,EAAAA,KAACpH,EAAA,CAAI,UAAU,6DACb,SAAA,CAAAD,EAAAA,IAACG,IAAM,SAAA6N,CAAA,CAAW,QACjB7N,GAAA,CAAK,UAAU,8FACb,SAAAoE,GAAE,sBAAsB,CAAA,CAC3B,CAAA,EACF,EACAvE,EAAAA,IAACo6E,GAAA,CAAQ,KAAMG,EAAS,MAAOC,CAAA,CAAc,CAAA,EAC/C,EAKJ,GAAIvsE,EACF,cACGhO,EAAA,CAAI,UAAWm7E,EAAgB,GAAAzuE,EAAS,GAAG3D,EAC1C,SAAA,CAAAhJ,EAAAA,IAACG,GAAA,CAAK,UAAU,gDACb,SAAA6N,EACH,EACAhO,EAAAA,IAACo6E,GAAA,CAAQ,KAAMG,EAAS,MAAOC,CAAA,CAAc,CAAA,EAC/C,EAKJ,MAAMoB,EAAiBJ,EAAA,EAGjBK,EADiB,aAAa,KAAKl8E,CAAS,EACP,GAAK,gCAC1Cm8E,EAAmBrB,GAAgBC,EACrC,GAAGmB,CAAiB,2EAA2E,KAAA,EAC/F,GAAGA,CAAiB,eAAe,KAAA,EAEvC,OACEx0E,EAAAA,KAACpH,EAAA,CAAI,IAAKsJ,EAAc,UAAW,yBAAyB5J,CAAS,GAAI,GAAAgN,EAAS,GAAG3D,EACnF,SAAA,CAAA3B,EAAAA,KAACpH,EAAA,CAAI,UAAWi6E,GAAeU,CAAM,EACnC,SAAA,CAAA56E,EAAAA,IAACV,EAAA,CACC,IAAKkK,EACL,QAAStG,EACT,UAAW44E,EAEV,SAAA9tE,CAAA,CAAA,EAEHhO,EAAAA,IAACo6E,GAAA,CAAQ,KAAMG,EAAS,MAAOC,CAAA,CAAc,CAAA,EAC/C,EAGCC,GAAgB1tE,GAAY6uE,EAAe,OAAS,GAAK7wE,GAAAA,aACxD/K,EAAAA,IAACC,EAAA,CACC,IAAKyJ,EACL,UAAU,sHACV,MAAO,CAAE,IAAKuxE,EAAa,IAAK,KAAMA,EAAa,IAAA,EACnD,cAAY,uBAEX,SAAAW,EAAe,IAAK9pE,GACnBzK,EAAAA,KAAC/H,EAAA,CAEC,QAAUqC,GAAMg6E,EAAoB7pE,EAAMnQ,CAAC,EAC3C,UAAU,oKACV,cAAa,aAAamQ,EAAK,GAAG,GAEjC,SAAA,CAAAA,EAAK,MAAQ9R,EAAAA,IAACwD,GAAA,CAAK,KAAMsO,EAAK,KAAM,UAAU,UAAU,EACzD9R,EAAAA,IAACG,GAAA,CAAM,SAAA2R,EAAK,KAAA,CAAM,CAAA,CAAA,EANbA,EAAK,GAAA,CAQb,CAAA,CAAA,EAEH,SAAS,IAAA,CACX,EACF,CAEJ,4GC5XaiqE,GAA8C,CAAC,CAC1D,KAAAC,EACA,YAAAC,EACA,YAAAC,EACA,QAAAz8E,EAAU,YACV,UAAAE,EAAY,GACZ,MAAAqE,EACA,aAAAm4E,EAAe,CAAA,EACf,iBAAAC,EAAmB,IACnB,GAAAzvE,EACA,YAAA3D,CACF,IAAM,CAGJ,MAAMoM,EADU,OAAe,QACD,cACxBC,EAAkBD,IAAA,EAClBE,EAAWD,EACbA,EAAgB,MAAQ+mE,EACxB,OAAO,OAAW,KAAe,OAAO,WAAaA,EAEnDC,EAAkBC,GAAa,CAC/B,CAACA,EAAI,UAAYA,EAAI,KAAOL,GAC9BC,IAAcI,EAAI,EAAE,CAExB,EAEMC,EACJ56E,GACG,CACH,MAAM66E,EAAa76E,EAAE,OAAO,MACtB86E,EAAY,OAAOD,CAAU,EAC7BE,EACJ,OAAOF,GAAe,UAAYA,IAAe,IAAM,CAAC,OAAO,MAAMC,CAAS,EAC1EA,EACAD,EACAG,EAAcX,EAAK,KAAMM,GAAQ,OAAOA,EAAI,EAAE,IAAM,OAAOI,CAAO,CAAC,EACrEC,GACFN,EAAeM,CAAW,CAE9B,EAEMC,EAAcT,EAAa,OAAS,EACtCH,EAAK,OAAQM,GAAQ,CAACH,EAAa,SAASG,EAAI,EAAE,CAAC,EACnDN,EAMJ,GAAI1mE,EACF,OACEtV,EAAAA,IAACC,GAAI,UAAW,YAAYN,CAAS,GAAI,MAAAqE,EAAc,GAAA2I,EAAS,GAAG3D,EACjE,SAAAhJ,EAAAA,IAAC4I,GAAA,CACC,MAAOqzE,IAAgB,OAAY,OAAOA,CAAW,EAAI,GACzD,SAAUM,EACV,QAASK,EAAY,IAAKN,IAAS,CACjC,MAAO,OAAOA,EAAI,EAAE,EACpB,MAAOA,EAAI,QAAU,OAAY,GAAGA,EAAI,KAAK,KAAKA,EAAI,KAAK,IAAMA,EAAI,MACrE,SAAUA,EAAI,QAAA,EACd,EACF,UAAU,QAAA,CAAA,EAEd,EAIJ,MAAMO,EAAiBP,GAAa,CAClC,MAAMxmE,EAAWwmE,EAAI,KAAOL,EACtBn8E,EACJ,kGAEF,GAAIw8E,EAAI,SACN,MAAO,GAAGx8E,CAAW,kEAGvB,OAAQL,EAAA,CACN,IAAK,QACH,OAAOqW,EACH,GAAGhW,CAAW,sDACd,GAAGA,CAAW,wFAEpB,IAAK,YACH,OAAOgW,EACH,GAAGhW,CAAW,8EACd,GAAGA,CAAW,gKAGpB,QACE,OAAOgW,EACH,GAAGhW,CAAW,mHACd,GAAGA,CAAW,sJAAA,CAExB,EAEMg9E,EACJr9E,IAAY,YACR,2DACA,aAGN,aACGQ,EAAA,CAAI,UAAW,YAAYN,CAAS,GAAI,MAAAqE,EAAc,GAAA2I,EAAS,GAAG3D,EACjE,eAAC2C,GAAA,CAAI,UAAWmxE,EACb,SAAAF,EAAY,IAAKN,GAChBj1E,EAAAA,KAAC/H,EAAA,CAEC,KAAK,SACL,QAAS,IAAM+8E,EAAeC,CAAG,EACjC,SAAUA,EAAI,SACd,UAAWO,EAAcP,CAAG,EAE3B,SAAA,CAAAA,EAAI,UACHt8E,EAAAA,IAACwD,GAAA,CAAK,KAAM84E,EAAI,SAAU,KAAK,KAAK,EAGtCt8E,EAAAA,IAACG,GAAA,CAAM,SAAAm8E,EAAI,KAAA,CAAM,EAEhBA,EAAI,QAAU,QACbt8E,EAAAA,IAACC,EAAA,CAAI,UAAU,2GACb,SAAAD,EAAAA,IAACG,GAAA,CAAM,SAAAm8E,EAAI,KAAA,CAAM,CAAA,CACnB,CAAA,CAAA,EAfGA,EAAI,EAAA,CAkBZ,EACH,CAAA,CACF,CAEJ,iHCpIaS,GAAsB,CAEjC,OAAQ,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACd,OAAQ,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACd,UAAW,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAIjB,cAAe,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACrB,mBAAoB,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAG1B,YAAa,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACnB,aAAc,IAAM,QAAA,QAAA,EAAA,KAAA,IAAA1yB,EAAA,EACpB,mBAAoB,IAAM,QAAA,QAAA,EAAA,KAAA,IAAA2yB,EAAA,EAC1B,iBAAkB,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAGxB,cAAe,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACrB,eAAgB,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACtB,YAAa,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACnB,WAAY,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAGlB,kBAAmB,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAGzB,aAAc,IAAM,QAAA,QAAA,EAAA,KAAA,IAAApQ,EAAA,EACpB,cAAe,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAqQ,EAAA,EACrB,mBAAoB,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAC1B,MAAO,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACb,wBAAyB,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAC/B,mBAAoB,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAC1B,aAAc,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACpB,YAAa,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACnB,YAAa,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACnB,WAAY,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAClB,UAAW,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACjB,OAAQ,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACd,eAAgB,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACtB,SAAU,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EAChB,MAAO,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,EACb,cAAe,IAAM,QAAA,QAAA,EAAA,KAAA,IAAAC,EAAA,CAEvB,ECxEaC,GAAsC,CAAC,CAClD,GAAAjyE,EACA,UAAAhN,EACA,MAAAqE,EACA,SAAAxE,EACA,YAAAwJ,CACF,UAEK/I,EAAA,CAAI,GAAA0M,EAAQ,UAAAhN,EAAsB,MAAAqE,EAAe,GAAGgF,EAClD,SAAAxJ,EACH,EC6DSq/E,GAA4B,CAAC,CACxC,GAAAlyE,EACA,SAAAnN,EACA,KAAAizE,EAAO,EACP,WAAAoB,EACA,IAAAphC,EACA,OAAAqsC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,EACA,KAAAC,EAAO,MACP,UAAAv/E,EAAY,GACZ,MAAAqE,EACA,QAAAyiB,EACA,YAAAzd,CACF,IAAM,CAEJ,MAAM3E,EAAoB,CAAC,MAAM,EAgCjC,GA7BIouE,GACFpuE,EAAQ,KAAK,aAAaouE,CAAI,EAAE,EAI9BoB,IACEA,EAAW,IAAIxvE,EAAQ,KAAK,gBAAgBwvE,EAAW,EAAE,EAAE,EAC3DA,EAAW,IAAIxvE,EAAQ,KAAK,gBAAgBwvE,EAAW,EAAE,EAAE,EAC3DA,EAAW,IAAIxvE,EAAQ,KAAK,gBAAgBwvE,EAAW,EAAE,EAAE,EAC3DA,EAAW,IAAIxvE,EAAQ,KAAK,gBAAgBwvE,EAAW,EAAE,EAAE,EAC3DA,EAAW,KAAK,GAAGxvE,EAAQ,KAAK,iBAAiBwvE,EAAW,KAAK,CAAC,EAAE,GAItEphC,IAAQ,QAAaA,EAAM,GAC7BpuC,EAAQ,KAAK,OAAOouC,CAAG,EAAE,EAIvBqsC,IAAW,QAAaA,EAAS,GACnCz6E,EAAQ,KAAK,SAASy6E,CAAM,EAAE,EAI5BC,IAAW,QAAaA,EAAS,GACnC16E,EAAQ,KAAK,SAAS06E,CAAM,EAAE,EAI5BC,EAAU,CACZ,MAAMG,EAAsC,CAC1C,KAAM,iBACN,IAAK,gBACL,IAAK,gBACL,GAAI,cAAA,EAEN96E,EAAQ,KAAK86E,EAAYH,CAAQ,CAAC,CACpC,CAGA,GAAIC,EAAU,CACZ,MAAMG,EAAsC,CAC1C,KAAM,iBACN,IAAK,gBACL,IAAK,gBACL,GAAI,cAAA,EAEN/6E,EAAQ,KAAK+6E,EAAYH,CAAQ,CAAC,CACpC,CAGA,MAAMI,EAAkC,CACtC,IAAK,gBACL,IAAK,gBACL,MAAO,kBACP,YAAa,sBACb,YAAa,qBAAA,EAEf,OAAAh7E,EAAQ,KAAKg7E,EAAQH,CAAI,CAAC,EAGtBv/E,GACF0E,EAAQ,KAAK1E,CAAS,EAItBK,EAAAA,IAACC,EAAA,CAAI,GAAA0M,EAAQ,UAAWtI,EAAQ,KAAK,GAAG,EAAG,MAAAL,EAAc,QAAAyiB,EAAmB,GAAGzd,EAC5E,SAAAxJ,CAAA,CACH,CAEJ,EC1Ga8/E,GAA4B,CAAC,CACxC,GAAA3yE,EACA,SAAAnN,EACA,UAAAmgC,EAAY,MACZ,QAAAwyC,EAAU,QACV,MAAAE,EAAQ,UACR,KAAAE,EAAO,SACP,IAAA9/B,EAAM,EACN,KAAA8sC,EAAO,GACP,OAAAC,EAAS,GACT,UAAA7/E,EAAY,GACZ,MAAAqE,EACA,QAAAyiB,EACA,YAAAzd,CACF,IAAM,CAEJ,MAAM3E,EAAoB,CAAC,MAAM,EAG3B6tE,EAAuC,CAC3C,IAAK,WACL,cAAe,mBACf,IAAK,WACL,cAAe,kBAAA,EAEjB7tE,EAAQ,KAAK6tE,EAAavyC,CAAS,CAAC,EAGpC,MAAM6yC,EAAkC,CACtC,KAAM,YACN,OAAQ,cACR,eAAgB,mBAAA,EAElBnuE,EAAQ,KAAKmuE,EAAQD,CAAI,CAAC,EAG1B,MAAMH,EAAqC,CACzC,MAAO,gBACP,IAAK,cACL,OAAQ,iBACR,QAAS,kBACT,OAAQ,iBACR,OAAQ,gBAAA,EAEV/tE,EAAQ,KAAK+tE,EAAWD,CAAO,CAAC,EAGhC,MAAMG,EAAmC,CACvC,MAAO,cACP,IAAK,YACL,OAAQ,eACR,SAAU,iBACV,QAAS,eAAA,EAEX,OAAAjuE,EAAQ,KAAKiuE,EAASD,CAAK,CAAC,EAGxB5/B,EAAM,GACRpuC,EAAQ,KAAK,OAAOouC,CAAG,EAAE,EAIvB8sC,IAAS,GACXl7E,EAAQ,KAAK,WAAW,EACf,OAAOk7E,GAAS,UAAYA,EAAO,GAC5Cl7E,EAAQ,KAAK,aAAak7E,CAAI,EAAE,EAI9BC,IAAW,GACbn7E,EAAQ,KAAK,UAAU,EACdm7E,IAAW,GACpBn7E,EAAQ,KAAK,aAAa,EACjB,OAAOm7E,GAAW,UAAYA,EAAS,GAChDn7E,EAAQ,KAAK,eAAem7E,CAAM,EAAE,EAIlC7/E,GACF0E,EAAQ,KAAK1E,CAAS,EAItBK,EAAAA,IAACC,EAAA,CAAI,GAAA0M,EAAQ,UAAWtI,EAAQ,KAAK,GAAG,EAAG,MAAAL,EAAc,QAAAyiB,EAAmB,GAAGzd,EAC5E,SAAAxJ,CAAA,CACH,CAEJ,ECvEaigF,GAA8C,CAAC,CAC1D,GAAA9yE,EACA,MAAA4uC,EACA,SAAAmkC,EACA,SAAAlgF,EACA,QAAAutB,EAAU,KACV,WAAA4yD,EAAa,OACb,SAAApnD,EACA,SAAAqnD,EAAW,GACX,OAAAvtC,EAAS,GACT,OAAAwtC,EAAS,OACT,QAAAx5D,EAAU,GACV,UAAA1mB,EAAY,GACZ,MAAAqE,EACA,QAAAyiB,EACA,YAAAzd,CACF,IAAM,CAEJ,MAAM3E,EAAoB,CAAA,EAGpBy7E,EAAqC,CACzC,KAAM,MACN,GAAI,MACJ,GAAI,MACJ,GAAI,MACJ,GAAI,KAAA,EAENz7E,EAAQ,KAAKy7E,EAAW/yD,CAAO,CAAC,EAGhC,MAAMgzD,EAAwC,CAC5C,KAAM,GACN,MAAO,4BACP,KAAM,8BACN,QAAS,iCACT,UAAW,6BAAA,EAOb,GALIJ,IAAe,QACjBt7E,EAAQ,KAAK07E,EAAcJ,CAAU,CAAC,EAIpCpnD,EAAU,CACZ,MAAMynD,EAAsC,CAC1C,GAAI,WACJ,GAAI,WACJ,GAAI,WACJ,GAAI,WACJ,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,KAAM,YAAA,EAER37E,EAAQ,KAAK27E,EAAYznD,CAAQ,CAAC,CACpC,CAGIqnD,GACFv7E,EAAQ,KAAK,SAAS,EAIpBguC,GACFhuC,EAAQ,KAAK,SAAU,kBAAmB,sBAAsB,EAIlE,MAAM47E,EAAoC,CACxC,KAAM,GACN,GAAI,YACJ,GAAI,YACJ,GAAI,YACJ,GAAI,WAAA,EAEN,OAAIJ,IAAW,QACbx7E,EAAQ,KAAK47E,EAAUJ,CAAM,CAAC,EAI5Bx5D,GACFhiB,EAAQ,KAAK,YAAY,EAIvB1E,GACF0E,EAAQ,KAAK1E,CAAS,EAItB0H,EAAAA,KAAC64E,GAAA,CAAY,GAAAvzE,EAAQ,UAAWtI,EAAQ,KAAK,GAAG,EAAG,MAAAL,EAAc,QAAAyiB,EAAmB,GAAGzd,EAEnF,SAAA,EAAAuyC,GAASmkC,IACTr4E,EAAAA,KAACpH,EAAA,CAAI,UAAU,OACZ,SAAA,CAAAs7C,GAASv7C,EAAAA,IAAC+H,GAAA,CAAG,UAAU,mDAAoD,SAAAwzC,EAAM,EACjFmkC,GAAY1/E,EAAAA,IAAC2H,GAAA,CAAE,UAAU,gDAAiD,SAAA+3E,CAAA,CAAS,CAAA,EACtF,EAIDlgF,CAAA,EACH,CAEJ,ECjJa2gF,GAAsD,CAAC,CAClE,GAAAxzE,EACA,UAAAyzE,EAAY,QACZ,WAAAC,EAAa,QACb,SAAAC,EACA,WAAAC,EACA,UAAAC,EACA,UAAA7gF,EAAY,GACZ,MAAAqE,EACA,YAAAgF,CACF,IAAM,CAEJ,MAAMmF,EAAmB,+BAA+BxO,CAAS,GAAG,KAAA,EAG9D8gF,EAAiC,CACrC,MAAOL,EACP,WAAY,CAAA,EAIRM,EAAmC,CACvC,KAAM,EACN,SAAU,CAAA,EAINC,EAAkC,CACtC,MAAON,EACP,WAAY,CAAA,EAGd,cACGpgF,EAAA,CAAI,GAAA0M,EAAQ,UAAWwB,EAAkB,MAAAnK,EAAe,GAAGgF,EAE1D,SAAA,CAAAhJ,MAACC,EAAA,CAAI,UAAU,gBAAgB,MAAOwgF,EACnC,SAAAH,EACH,QAGCrgF,EAAA,CAAI,UAAU,gBAAgB,MAAOygF,EACnC,SAAAH,EACH,QAGCtgF,EAAA,CAAI,UAAU,gBAAgB,MAAO0gF,EACnC,SAAAH,CAAA,CACH,CAAA,EACF,CAEJ,+9DC6CMI,GAAyE,CAC7E,IAAK,CAAE,OAAQ,QAAS,SAAU,CAAA,EAClC,IAAK,CAAE,OAAQ,QAAS,SAAU,CAAA,EAClC,IAAK,CAAE,OAAQ,QAAS,SAAU,CAAA,EAClC,IAAK,CAAE,OAAQ,QAAS,SAAU,CAAA,EAClC,IAAK,CAAE,OAAQ,QAAS,SAAU,CAAA,CACpC,EAKA,SAASC,GAAYC,EAAgBC,EAAuB,MAAe,CACzE,GAAI,CAAC,OAAO,SAASD,CAAM,EAAG,MAAO,IACrC,MAAM7xD,EAAS2xD,GAAiBG,CAAY,GAAKH,GAAiB,IAClE,GAAI,CACF,OAAO,IAAI,KAAK,aAAa3xD,EAAO,OAAQ,CAC1C,MAAO,WACP,SAAU8xD,EACV,sBAAuB9xD,EAAO,SAC9B,sBAAuBA,EAAO,QAAA,CAC/B,EAAE,OAAO6xD,CAAM,CAClB,MAAQ,CACN,OAAOA,EAAO,eAAA,GAAoBC,IAAiB,MAAQ,IAAM,GACnE,CACF,CAYA,SAASC,GACPC,EACAC,EACAC,EAA4B,EACsC,CAClE,GAAI,CAACF,EAAc,OAGnB,MAAMG,EAAWH,EAAa,KAAa,OAAUA,EAAa,KAAa,OAAS,EAElFnzD,EAA+D,CAAA,EACrE,SAAW,CAAC4pC,EAAM/zC,CAAI,IAAK,OAAO,QAAQs9D,CAAY,EAAG,CAEvD,MAAMI,EAAa19D,GAAc,OAAUA,GAAc,OAAS,EAElE,IAAI29D,EAAsB,EACtBH,EAAoB,IAClBzpB,IAAS,MACX4pB,EAAsBH,EACbC,EAAU,IACnBE,EAAuBH,EAAoBE,EAAaD,IAG5D,MAAMG,GAASF,EAAYC,GAAuBJ,EAClDpzD,EAAO4pC,CAAI,EAAI,CACb,MAAO6pB,EACP,UAAWV,GAAYU,EAAO7pB,CAAI,CAAA,CAEtC,CACA,OAAO5pC,CACT,CAYA,SAAS0zD,GACPxgD,EACsD,CACtD,MAAMygD,EAAiC,CAAA,EACvC,UAAW3vE,KAAQkvB,EAAO,CACxB,MAAM0gD,EAAK5vE,GAAM,wBACjB,GAAI4vE,EACF,SAAW,CAAChqB,EAAM/zC,CAAI,IAAK,OAAO,QAAQ+9D,CAAE,EAAG,CAC7C,MAAM96E,EAAK+c,GAAc,OAAUA,GAAc,OAAS,EAC1D89D,EAAO/pB,CAAI,GAAK+pB,EAAO/pB,CAAI,GAAK,GAAK9wD,CACvC,CAEJ,CACA,MAAMknB,EAA+D,CAAA,EACrE,SAAW,CAAC4pC,EAAMh3D,CAAK,IAAK,OAAO,QAAQ+gF,CAAM,EAC/C3zD,EAAO4pC,CAAI,EAAI,CAAE,MAAAh3D,EAAO,UAAWmgF,GAAYngF,EAAOg3D,CAAI,CAAA,EAE5D,OAAO5pC,CACT,CASA,SAAS6zD,GACPC,EACAzqE,EACQ,CACR,GAAI,CAACyqE,GAAc,CAACzqE,GAAQ,OAAQ,MAAO,GAC3C,IAAIoqE,EAAQ,EACZ,UAAWhqE,KAASJ,EAAQ,CAC1B,MAAM0qE,EAAUD,EAAWrqE,EAAM,EAAE,EACnC,GAAIsqE,GAAW,KAAM,SACrB,MAAMnhF,EAAQ6W,EAAM,QAAQ,QAAU3Q,EAAE,KAAO,OAAOi7E,CAAO,CAAC,EAC1DnhF,IAAO6gF,GAAS7gF,EAAM,kBAAoB,EAChD,CACA,OAAO6gF,CACT,CAiCA,SAASO,GAAYvqE,EAA4B,CAC/C,OAAIA,EAAM,eAAuBA,EAAM,eACnC,OAAOA,EAAM,MAAS,SAAiBA,EAAM,KACzCA,EAAM,MAAiC,IAAM,EACvD,CAMA,SAASwqE,GACPC,EACAC,EACAC,EACoB,CAEpB,GAAID,GAAyBC,KAAYD,EACvC,OAAOA,EAAsBC,CAAQ,EAIvC,GAAI,MAAM,QAAQF,CAAY,EAAG,CAC/B,MAAMlwE,EAAOkwE,EAAa,KAAKp7E,GACzB,OAAOA,EAAE,KAAQ,SAAiBA,EAAE,MAAQs7E,EACxCt7E,EAAE,KAAgC,KAAOs7E,GAAY,OAAO,OAAOt7E,EAAE,GAAG,EAAE,SAASs7E,CAAQ,CACpG,EACD,OAAIpwE,EACE,OAAOA,EAAK,OAAU,SAAiBA,EAAK,MACxCA,EAAK,OAAkC,IAAM,OAAO,OAAOA,EAAK,KAAK,EAAE,CAAC,EAElF,MACF,CAGA,OAAOkwE,EAAaE,CAAQ,CAC9B,CAMA,SAASC,GACPH,EACAC,EACwB,CAExB,GAAIA,EACF,OAAOA,EAIT,GAAI,CAAC,MAAM,QAAQD,CAAY,EAC7B,OAAOA,EAIT,MAAMl0D,EAAiC,CAAA,EACvC,UAAWhc,KAAQkwE,EAAc,CAC/B,MAAMh/E,EAAM,OAAO8O,EAAK,KAAQ,SAC5BA,EAAK,IACJA,EAAK,KAAgC,IAAM,OAAO,OAAOA,EAAK,GAAG,EAAE,CAAC,GAAK,GACxEpR,EAAQ,OAAOoR,EAAK,OAAU,SAChCA,EAAK,MACJA,EAAK,OAAkC,IAAM,OAAO,OAAOA,EAAK,KAAK,EAAE,CAAC,GAAK,GAC9E9O,IACF8qB,EAAO9qB,CAAG,EAAItC,EAElB,CACA,OAAOotB,CACT,CAMA,SAASs0D,GACPC,EACAC,EACAz5E,EACiC,CACjC,OAAOA,EAAQ,KAAKgB,GACd,CAACA,GAAK,eAAiB,CAACA,GAAK,UAAkB,GAC5Cw4E,EAAa,MAAM9qE,GAAS,CACjC,MAAM2qE,EAAWJ,GAAYvqE,CAAK,EAC5BgrE,EAAgBD,IAAmBJ,CAAQ,EAMjD,OALiBH,GACfl4E,EAAI,cACJA,EAAI,wBACJq4E,CAAA,IAEkBK,CACtB,CAAC,CACF,CACH,CAaO,SAASC,GACd5wD,EACA7F,EACM,CACN,MAAMvnB,EAASotB,EAAO,OACtB,GAAI,CAACptB,EAAQ,OAEb,KAAM,CAAE,aAAA69E,EAAc,QAAAx5E,EAAS,oBAAA45E,EAAqB,kBAAA/7D,GAAsBliB,EAG1E,IAAI89E,EAeJ,GAdI99E,EAAO,cAAgBA,EAAO,SAChC89E,EAAmB,CACjB,GAAI99E,EAAO,kBAAoB,CAAA,EAC/B,CAACA,EAAO,YAAY,EAAGA,EAAO,QAAA,EAGhC89E,EAAmB99E,EAAO,kBAAoB,CAAA,EAQ5C,CAJgB69E,GAAc,MAAM9qE,GAAS,CAC/C,MAAM2qE,EAAWJ,GAAYvqE,CAAK,EAClC,OAAO+qE,IAAmBJ,CAAQ,CACpC,CAAC,EACiB,OAGlB,MAAMQ,EAAgBN,GAAmBC,EAAcC,EAAkBz5E,GAAW,CAAA,CAAE,EACtF,GAAI,CAAC65E,EAAe,CAClB32D,EAAQ,WAAW,CAAE,iBAAkB,CAAA,EAAI,YAAa,UAAW,EACnE,MACF,CAGA,MAAM42D,EAAYN,EAAa,IAAIhkC,GAAKikC,EAAiBR,GAAYzjC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,EAC5Erd,EAAQyhD,GAAuB,CAAA,EAGrC,GAFiBzhD,EAAM,KAAKlvB,GAAQA,EAAK,KAAO6wE,CAAS,EAE3C,CAEZ,MAAMtjF,EAAU,OAAe,OAC/BA,GAAQ,OAAO,UAAUA,GAAQ,IAAI,6CAA6C,GAAK,eAAe,EACtG0sB,EAAQ,WAAW,CAAE,iBAAkB,CAAA,EAAI,YAAa,UAAW,EACnE,MACF,CAGA,MAAM62D,EAAYF,EAAc,eAAiB,EAC3CG,EAAuC,CAAA,EAC7CR,EAAa,QAAQ9qE,GAAS,CAC5B,MAAM2qE,EAAWJ,GAAYvqE,CAAK,EAClCsrE,EAAaX,CAAQ,EAAII,EAAiBJ,CAAQ,CACpD,CAAC,EAMD,MAAMY,EAAyBt+E,EAAO,wBAA0B,CAAA,EAC1Du+E,EAAyD,CAAA,EAC/D,UAAWxrE,KAASurE,EAAwB,CAC1C,GAAI,CAACvrE,EAAM,YAAa,SACxB,MAAM5W,EAAe4W,EAAM,QAAQ,KAAK3Q,GAAKA,EAAE,UAAU,EACrDjG,IAAcoiF,EAA2BxrE,EAAM,EAAE,EAAI5W,EAAa,GACxE,CACA,MAAMqiF,EAAyBrB,GAC7BoB,EACAD,CAAA,EAGIG,EAAiBL,EAAYI,EAE7BE,EAAwB,CAC5B,GAAIP,EACJ,SAAUD,EAAc,GACxB,QAASG,EACT,aAAcV,GACZO,EAAc,cACdA,EAAc,uBAAA,EAEhB,SAAU,EACV,MAAOA,EAAc,gBAAkB,IACvC,UAAAE,EACA,mBAAoB/B,GAAY+B,EAAWl8D,CAAiB,EAC5D,WAAYu8D,EACZ,oBAAqBpC,GAAYoC,EAAgBv8D,CAAiB,EAClE,uBAAwBg8D,EAAc,6BACtC,wBAAyB1B,GACvB0B,EAAc,6BACd,EACAM,CAAA,EAEF,2BAAAD,EACA,uBAAAC,CAAA,EAGIG,EAAY,CAAC,GAAGniD,EAAOkiD,CAAO,EACpCn3D,EAAQ,WAAW,CACjB,oBAAqBo3D,EACrB,2BAA4B3B,GAAgC2B,CAAS,EACrE,iBAAkB,CAAA,EAClB,YAAa,SAAA,CACd,CACH,CAOO,SAASC,GACdxxD,EACA7F,EACM,CACN,MAAMvnB,EAASotB,EAAO,OACtB,GAAI,CAACptB,EAAQ,OAEb,KAAM,CAAE,oBAAAi+E,EAAqB,kBAAA/7D,CAAA,EAAsBliB,EAE7C6+E,EAAY,OAAO7+E,EAAO,SAAS,GAAK,EACxC8+E,EAAc,OAAO9+E,EAAO,WAAW,GAAK,EAE5C++E,GAAgBd,GAAuB,CAAA,GAAI,IAAI,CAAC3wE,EAAM4V,IAAQ,CAClE,GAAIA,IAAQ27D,EAAW,OAAOvxE,EAE9B,MAAM8wE,EAAY9wE,GAAM,WAAa,EAC/BkxE,EAAyBlxE,GAAM,wBAA0B,EACzD0xE,GAAcZ,EAAYI,GAA0BM,EAC1D,MAAO,CACL,GAAGxxE,EACH,SAAUwxE,EACV,WAAAE,EACA,oBAAqB3C,GAAY2C,EAAY98D,CAAiB,EAC9D,wBAAyBs6D,GACvBlvE,GAAM,uBACNwxE,EACAN,CAAA,CACF,CAEJ,CAAC,EAEDj3D,EAAQ,WAAW,CACjB,oBAAqBw3D,EACrB,2BAA4B/B,GAAgC+B,CAAY,CAAA,CACzE,CACH,CAUO,SAASE,GACd7xD,EACA7F,EACM,CACN,MAAMvnB,EAASotB,EAAO,OACtB,GAAI,CAACptB,EAAQ,OAEb,KAAM,CAAE,oBAAAi+E,EAAqB,uBAAAK,EAAwB,kBAAAp8D,CAAA,EAAsBliB,EACrE6+E,EAAY,OAAO7+E,EAAO,SAAS,GAAK,EACxCk/E,EAAqB,OAAOl/E,EAAO,kBAAkB,EAErDm/E,EAAmB,OAAO,UAAU,eAAe,KAAKn/E,EAAQ,YAAY,EAE5Eq9E,EAAUr9E,EAAO,UAAY,IAAMA,EAAO,SAAW,KAAO,KAAO,OAAOA,EAAO,OAAO,EAExF++E,GAAgBd,GAAuB,CAAA,GAAI,IAAI,CAAC3wE,EAAM4V,IAAQ,CAClE,GAAIA,IAAQ27D,EAAW,OAAOvxE,EAE9B,MAAM8vE,EAAyC,CAAE,GAAI9vE,EAAK,4BAA8B,CAAA,CAAC,EACnF8xE,EAAsC,CAAE,GAAI9xE,EAAK,6BAA+B,CAAA,CAAC,EAEvF,GAAI6xE,EAAkB,CAEpB,MAAM/1E,EAAO,OAAOpJ,EAAO,YAAc,EAAE,EACvCoJ,EAAK,KAAA,IAAW,GAClB,OAAOg2E,EAAYF,CAAkB,EAErCE,EAAYF,CAAkB,EAAI91E,CAEtC,MAAWi0E,GAAW,MAEpB,OAAOD,EAAW8B,CAAkB,EACpC,OAAOE,EAAYF,CAAkB,IAErC9B,EAAW8B,CAAkB,EAAI7B,GAElBiB,GAA0B,IAAI,KAAMzkC,GAAMA,EAAE,KAAOqlC,CAAkB,GAC/D,QAAQ,KAAM98E,GAAMA,EAAE,KAAOi7E,CAAO,GAC7C,mBACV,OAAO+B,EAAYF,CAAkB,GAIzC,MAAMV,EAAyBrB,GAA8BC,EAAYkB,CAAsB,EACzFF,EAAY9wE,GAAM,WAAa,EAC/BovE,EAAWpvE,GAAM,UAAY,EAC7B0xE,GAAcZ,EAAYI,GAA0B9B,EAE1D,MAAO,CACL,GAAGpvE,EACH,2BAA4B8vE,EAC5B,4BAA6BgC,EAC7B,uBAAAZ,EACA,WAAAQ,EACA,oBAAqB3C,GAAY2C,EAAY98D,CAAiB,EAC9D,wBAAyBs6D,GACvBlvE,GAAM,uBACNovE,EACA8B,CAAA,CACF,CAEJ,CAAC,EAEDj3D,EAAQ,WAAW,CACjB,oBAAqBw3D,EACrB,2BAA4B/B,GAAgC+B,CAAY,CAAA,CACzE,CACH,CAWO,SAASM,GACdjyD,EACA7F,EACM,CACN,MAAMvnB,EAASotB,EAAO,OACtB,GAAI,CAACptB,EAAQ,OAEb,MAAM6+E,EAAY,OAAO7+E,EAAO,SAAS,GAAK,EACxC2+E,GAAa3+E,EAAO,qBAAuB,CAAA,GAAI,OAAO,CAACkvB,EAAGhM,IAAQA,IAAQ27D,CAAS,EAEzFt3D,EAAQ,WAAW,CACjB,oBAAqBo3D,EACrB,2BAA4B3B,GAAgC2B,CAAS,CAAA,CACtE,CACH,CAaO,SAASW,GACdlyD,EACA7F,EACM,CACN,MAAMvnB,EAASotB,EAAO,OAItB,GAAI,CAACptB,EAAQ,OAEb,MAAM08E,EAAW,KAAK,IAAI,EAAG,OAAO18E,EAAO,WAAW,GAAK,CAAC,EAE5DunB,EAAQ,WAAW,CACjB,iBAAkBm1D,EAClB,2BAA4BF,GAC1Bx8E,EAAO,uBACP08E,CAAA,CACF,CACD,CACH,CC1qBA,MAAM34E,GAAW,OAAe,QAAQ,eAAe,cAAc,GAAM,CACzE,IAAK,IAAIC,IAAoB,QAAQ,IAAI,iBAAkB,GAAGA,CAAI,EAClE,KAAM,IAAIA,IAAoB,QAAQ,KAAK,iBAAkB,GAAGA,CAAI,EACpE,MAAO,IAAIA,IAAoB,QAAQ,MAAM,iBAAkB,GAAGA,CAAI,CACxE,EAKA,SAASu7E,GAAcC,EAAoC,CACzD,MAAM3kF,EAAU,OAAe,OAC3BA,GAAQ,OAAO,UACjBA,EAAO,MAAM,SAAS2kF,CAAO,EAC7Bz7E,GAAO,IAAI,uBAAwBy7E,CAAO,GAE1Cz7E,GAAO,KAAK,qCAAqC,CAErD,CAKA,SAAS07E,IAAqC,CAE5C,OADgB,OAAe,QAChB,OAAO,WAAA,GAAgB,CAAA,CACxC,CAKA,SAASC,IAAsC,CAE7C,OADgB,OAAe,QAChB,OAAO,MAAA,GAAW,CAAA,CACnC,CAKA,SAASC,GAAU9nC,EAAiBz7C,EAAiD,OAAc,CACjG,MAAMvB,EAAU,OAAe,OAC3BA,GAAQ,OAAO,KACjBA,EAAO,MAAM,KAAKg9C,EAASz7C,CAAI,EAE/B2H,GAAO,KAAK,4CAA6C8zC,CAAO,CAEpE,CAKA,SAAS93C,GAAEvB,EAAqB,CAC9B,MAAM3D,EAAU,OAAe,OAC/B,OAAIA,GAAQ,EACHA,EAAO,EAAE2D,CAAG,EAEdA,CACT,CAQA,SAASohF,IAAyB,CAChC,MAAM/kF,EAAU,OAAe,OAC/B,GAAIA,GAAQ,SAAU,CAEpB,MAAMglF,EADaJ,GAAA,EACc,eAAiB,CAAA,EAElD5kF,EAAO,SAAS,CACd,QAAS,oBACT,OAAQ,CACN,aAAc,WAAA,CAChB,CACD,EACDkJ,GAAO,IAAI,0CAA2C87E,CAAa,CACrE,MACE97E,GAAO,KAAK,+BAA+B,CAE/C,CAWO,SAAS+7E,GACd1yD,EACA2yD,EACM,CACN,KAAM,CAAE,OAAAC,EAAQ,cAAAH,CAAA,EAAkBzyD,GAAQ,QAAU,CAAA,EAC9C6yD,EAAkBJ,GAAiB,CAAA,EAEzC,IAAIK,EACAD,EAAgB,SAASD,CAAM,EAEjCE,EAAcD,EAAgB,OAAQ93E,GAAeA,IAAO63E,CAAM,EAGlEE,EAAc,CAAC,GAAGD,EAAiBD,CAAM,EAK3C,MAAM55B,EADcs5B,GAAA,EACS,WAAW,MAAM,OAAS,CAAA,EACjDS,EAAc/5B,EAAS,OAAS,GAAK85B,EAAY,SAAW95B,EAAS,OAE3Em5B,GAAc,CACZ,cAAeW,EACf,YAAAC,EACA,cAAeD,EAAY,MAAA,CAC5B,EAGDN,GAAA,CACF,CAWO,SAASQ,GACdhzD,EACA2yD,EACM,CACN,KAAM,CAAE,WAAAM,EAAY,WAAA55E,CAAA,EAAe2mB,GAAQ,QAAU,CAAA,EAErDmyD,GAAc,CACZ,cAAe94E,EAAa45E,EAAa,CAAA,EACzC,YAAa55E,EACb,cAAeA,EAAa45E,EAAW,OAAS,CAAA,CACjD,EAGDT,GAAA,CACF,CAUO,SAASU,GACdlzD,EACA2yD,EACM,CACN,KAAM,CAAE,WAAAQ,EAAY,YAAAr6E,CAAA,EAAgBknB,GAAQ,QAAU,CAAA,EAEhDozD,EADaf,GAAA,EACe,iBAAmB,CAAA,EAErDF,GAAc,CACZ,gBAAiB,CACf,GAAGiB,EACH,CAACD,CAAU,EAAGr6E,CAAA,CAChB,CACD,CACH,CAUO,SAASu6E,GACdrzD,EACA2yD,EACM,CACN,KAAM,CAAE,UAAAW,CAAA,EAActzD,GAAQ,QAAU,CAAA,EAExC,GAAI,CAACszD,GAAaA,EAAU,SAAW,EAAG,CACxCf,GAAU5/E,GAAE,kCAAkC,EAAG,SAAS,EAC1D,MACF,CAEAw/E,GAAc,CACZ,YAAa,CACX,QAAS,GACT,UAAAmB,CAAA,CACF,CACD,CACH,CAUO,SAASC,GACdvzD,EACA2yD,EACM,CACN,KAAM,CAAE,WAAAa,CAAA,EAAexzD,GAAQ,QAAU,CAAA,EAEzCmyD,GAAc,CACZ,YAAa,CACX,QAAS,GACT,WAAAqB,CAAA,EAEF,gBAAiBA,GAAY,SAAW,CAAA,EACxC,iBAAkBA,GAAY,QAAA,CAC/B,CACH,CAUO,SAASC,GACdzzD,EACA2yD,EACM,CACN,KAAM,CAAE,cAAAF,CAAA,EAAkBzyD,GAAQ,QAAU,CAAA,EAE5C,GAAI,CAACyyD,GAAiBA,EAAc,SAAW,EAAG,CAChDN,GAAc,CAAE,cAAe,GAAO,EACtC,MACF,CAEAA,GAAc,CAAE,cAAe,GAAM,CAIvC,CCrPA,MAAMx7E,GAAW,OAAe,QAAQ,eAAe,0BAA0B,GAAM,CACrF,IAAK,IAAIC,IAAoB,QAAQ,IAAI,6BAA8B,GAAGA,CAAI,EAC9E,KAAM,IAAIA,IAAoB,QAAQ,KAAK,6BAA8B,GAAGA,CAAI,EAChF,MAAO,IAAIA,IAAoB,QAAQ,MAAM,6BAA8B,GAAGA,CAAI,CACpF,EAuCA,SAASs5E,GAAYvqE,EAA4B,CAC/C,OAAIA,EAAM,eAAuBA,EAAM,eACnC,OAAOA,EAAM,MAAS,SAAiBA,EAAM,KACzCA,EAAM,MAAiC,IAAM,EACvD,CAMA,SAASwqE,GACPC,EACAC,EACAC,EACoB,CAEpB,GAAID,GAAyBC,KAAYD,EACvC,OAAOA,EAAsBC,CAAQ,EAIvC,GAAI,MAAM,QAAQF,CAAY,EAAG,CAC/B,MAAMlwE,EAAOkwE,EAAa,KAAKp7E,GACzB,OAAOA,EAAE,KAAQ,SAAiBA,EAAE,MAAQs7E,EACxCt7E,EAAE,KAAgC,KAAOs7E,GAAY,OAAO,OAAOt7E,EAAE,GAAG,EAAE,SAASs7E,CAAQ,CACpG,EACD,OAAIpwE,EACE,OAAOA,EAAK,OAAU,SAAiBA,EAAK,MACxCA,EAAK,OAAkC,IAAM,OAAO,OAAOA,EAAK,KAAK,EAAE,CAAC,EAElF,MACF,CAGA,OAAOkwE,EAAaE,CAAQ,CAC9B,CAMA,SAASE,GACPkD,EACAjD,EACAx5E,EACsB,CACtB,MAAI,CAACy8E,GAAmB,CAACjD,GAAc,OAC9B,KAIWA,EAAa,MAAO9qE,GAAU,CAChD,MAAM2qE,EAAWJ,GAAYvqE,CAAK,EAClC,OAAO+tE,EAAgBpD,CAAQ,CACjC,CAAC,EAOer5E,GAAS,KAAMgB,GAC7Bw4E,EAAa,MAAO9qE,GAAU,CAC5B,MAAM2qE,EAAWJ,GAAYvqE,CAAK,EAMlC,OALiBwqE,GACfl4E,EAAI,cACJA,EAAI,wBACJq4E,CAAA,IAEkBoD,EAAgBpD,CAAQ,CAC9C,CAAC,CAAA,GAGe,MAjBhB35E,GAAO,IAAI,8BAA8B,EAClC,KAiBX,CAWO,SAASg9E,GACd3zD,EACA2yD,EACyC,CACzC,KAAM,CAAE,gBAAAe,EAAiB,aAAAjD,EAAc,QAAAx5E,GAAY+oB,GAAQ,QAAU,CAAA,EAErErpB,GAAO,IAAI,6BAA8B,CAAE,gBAAA+8E,EAAiB,aAAAjD,EAAc,aAAcx5E,GAAS,OAAQ,EAEzG,MAAM65E,EAAgBN,GAAmBkD,EAAiBjD,EAAcx5E,CAAO,EAE/EN,OAAAA,GAAO,IAAI,kBAAmBm6E,CAAa,EAGpC,CAAE,cAAAA,CAAA,CACX,CAWO,SAAS8C,GACd5zD,EACA2yD,EACsB,CACtB,KAAM,CAAE,oBAAAkB,EAAqB,aAAApD,EAAc,QAAAx5E,GAAY+oB,GAAQ,QAAU,CAAA,EAIzE,GAFArpB,GAAO,IAAI,kCAAmC,CAAE,oBAAAk9E,EAAqB,aAAApD,EAAc,aAAcx5E,GAAS,OAAQ,EAE9G,CAACw5E,GAAc,QAAU,CAACoD,EAC5Bl9E,OAAAA,GAAO,IAAI,qDAAqD,EACzD,CAAE,gBAAiB,GAAI,cAAe,IAAA,EAK/C,MAAM+8E,EAA0C,CAAA,EAChD,UAAW/tE,KAAS8qE,EAAc,CAChC,MAAMH,EAAWJ,GAAYvqE,CAAK,EAC5B3V,EAAe6jF,EAAoBvD,CAAQ,EAE3CwD,EAAcnuE,EAAM,mBACxB,MAAM,QAAQA,EAAM,MAAM,EACtBA,EAAM,OAAO,IAAK3Q,GAAuC,OAAOA,GAAM,SAAWA,EAAKA,GAA8B,IAAM,EAAE,EAC5H,IAEFhF,GAAgB8jF,EAAY,SAAS9jF,CAAY,IACnD0jF,EAAgBpD,CAAQ,EAAItgF,EAEhC,CAEA2G,GAAO,IAAI,2BAA4B+8E,CAAe,EAGtD,MAAM5C,EAAgBN,GAAmBkD,EAAiBjD,EAAcx5E,GAAW,CAAA,CAAE,EAErFN,OAAAA,GAAO,IAAI,kBAAmBm6E,CAAa,EAGpC,CAAE,gBAAA4C,EAAiB,cAAA5C,CAAA,CAC5B,CCnMA,MAAMiD,GAAwB,cACxBC,GAAwB,0CACxBC,GAAiC,uBACjCC,GAAkC,wBAClCC,GAAsC,4BAGtCx9E,GAAW,OAAe,QAAQ,eAAe,iBAAiB,GAAM,CAC5E,IAAK,IAAIC,IAAoB,QAAQ,IAAI,oBAAqB,GAAGA,CAAI,EACrE,KAAM,IAAIA,IAAoB,QAAQ,KAAK,oBAAqB,GAAGA,CAAI,EACvE,MAAO,IAAIA,IAAoB,QAAQ,MAAM,oBAAqB,GAAGA,CAAI,CAC3E,EAOA,eAAew9E,IAA8C,CAC3D,GAAI,CACF,MAAM3tC,EAAW,MAAM,MAAMutC,GAAuB,CAClD,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,OAAU,kBAAA,CACZ,CACD,EAED,OAAKvtC,EAAS,IAKD,MAAMA,EAAS,KAAA,GAChB,MAAM,UAAY,MAL5B9vC,GAAO,MAAM,oCAAqC8vC,EAAS,MAAM,EAC1D,KAKX,OAAS93C,EAAO,CACdgI,OAAAA,GAAO,MAAM,kCAAmChI,CAAK,EAC9C,IACT,CACF,CAKA,SAAS0lF,GAAejC,EAAoC,CAC1D,MAAM3kF,EAAU,OAAe,OAC3BA,GAAQ,OAAO,KACjBA,EAAO,MAAM,IAAI2kF,CAAO,EACxBz7E,GAAO,IAAI,wBAAyBy7E,CAAO,GAE3Cz7E,GAAO,KAAK,gCAAgC,CAEhD,CAOA,SAAS29E,IAAsB,CAC7B,GAAI,CAEF,MAAMC,EAAY,OAAe,SACjC,OAAIA,GAAU,KACLA,EAAS,MAIF,OAAe,QACH,OAAO,MAAA,GAAW,CAAA,GAC3B,aAAe,IACpC,MAAQ,CACN,OAAO,IACT,CACF,CAaA,eAAsBC,GACpBC,EACA9B,EACe,CAGf,IAAI+B,EAAyB,KAC7B,GAAI,CACFA,EAAU,aAAa,QAAQX,EAAqB,CACtD,MAAQ,CAER,CAGA,GAAKW,EAcH/9E,GAAO,IAAI,2BAA4B+9E,CAAO,UAb9CA,EAAU,MAAMN,GAAA,EAEZM,EACF,GAAI,CACF,aAAa,QAAQX,GAAuBW,CAAO,EACnD/9E,GAAO,IAAI,+BAAgC+9E,CAAO,CACpD,MAAQ,CAER,MAEA/9E,GAAO,MAAM,kCAAkC,EAMnD09E,GAAe,CAAE,QAAAK,EAAS,CAC5B,CAUO,SAASC,GACdF,EACA9B,EACe,CACf,GAAI,CACF,OAAO,aAAa,QAAQoB,EAAqB,CACnD,MAAQ,CACN,OAAO,IACT,CACF,CAUO,SAASa,GACdH,EACA9B,EACM,CACN,GAAI,CACF,aAAa,WAAWoB,EAAqB,EAC7Cp9E,GAAO,IAAI,mCAAmC,CAChD,MAAQ,CAER,CAEA09E,GAAe,CAAE,QAAS,KAAM,CAClC,CAUA,eAAsBQ,GACpBJ,EACA9B,EACe,CAGf,GADoB2B,GAAA,EACH,CACfM,GAAA,EACA,MACF,CAEA,MAAME,EAAa,MAAMV,GAAA,EAEzB,GAAIU,EAAY,CACd,GAAI,CACF,aAAa,QAAQf,GAAuBe,CAAU,EACtDn+E,GAAO,IAAI,oCAAqCm+E,CAAU,CAC5D,MAAQ,CAER,CAEAT,GAAe,CAAE,QAASS,EAAY,CACxC,MACEn+E,GAAO,MAAM,uCAAuC,CAExD,CAQO,SAASo+E,GACd/0D,EACA2yD,EACM,CACN,KAAM,CAAE,IAAAvhF,EAAK,MAAAtC,CAAA,EAAUkxB,GAAQ,QAAU,CAAA,EACzC,GAAI,CAAC5uB,EAAK,CACRuF,GAAO,KAAK,gCAAgC,EAC5C,MACF,CACA,GAAI,CACF,aAAa,QAAQvF,EAAKtC,CAAK,EAC/B6H,GAAO,IAAI,oBAAqBvF,EAAKtC,CAAK,CAC5C,MAAQ,CAER,CACF,CAQO,SAASkmF,GACdh1D,EACA2yD,EACe,CACf,KAAM,CAAE,IAAAvhF,EAAK,aAAArC,CAAA,EAAiBixB,GAAQ,QAAU,CAAA,EAChD,GAAI,CAAC5uB,EACHuF,OAAAA,GAAO,KAAK,kCAAkC,EACvC5H,GAAgB,KAEzB,GAAI,CACF,OAAO,aAAa,QAAQqC,CAAG,GAAKrC,GAAgB,IACtD,MAAQ,CACN,OAAOA,GAAgB,IACzB,CACF,CAOA,SAASkmF,IAAqC,CAC5C,GAAI,CACF,eAAe,WAAWhB,EAA8B,EACxD,eAAe,WAAWC,EAA+B,EACzD,eAAe,WAAWC,EAAmC,CAC/D,MAAQ,CAER,CACF,CAoBO,SAASe,GACdT,EACA9B,EACM,CACN,IAAIpR,EAAuB,KACvB4T,EAA2B,KAC/B,GAAI,CACF5T,EAAQ,eAAe,QAAQ0S,EAA8B,EAC7DkB,EAAY,eAAe,QAAQhB,EAAmC,CACxE,MAAQ,CAER,CAKA,IAAIiB,EAAU,GACd,GAAI7T,EAAO,CACT,MAAM8T,EAAWF,EAAY,IAAI,KAAKA,CAAS,EAAE,UAAY,KACzD,MAAME,CAAQ,GAAKA,GAAY,KAAK,SACtCJ,GAAA,EACA1T,EAAQ,KACR6T,EAAU,GAEd,CAEA,GAAI7T,EAAO,CAET8S,GAAe,CAAE,gBAAiB9S,EAAO,EACzC5qE,GAAO,IAAI,8CAA8C,EACzD,MACF,CAQA,GAAI,CAACy+E,EAAS,CAEZ,MAAME,EADU,OAAe,QACN,OAAO,MAAM,SAAS,GAAG,gBAClD,GAAI,OAAOA,GAAa,UAAYA,IAAa,GAAI,CACnD3+E,GAAO,IAAI,2EAA2E,EACtF,MACF,CACF,CAEA09E,GAAe,CAAE,gBAAiB,KAAM,EACxC19E,GAAO,IAAI,kDAAkD,CAC/D,CAeO,SAAS4+E,GACdv1D,EACA2yD,EACM,CACN,KAAM,CAAE,MAAApR,EAAO,YAAAiU,EAAa,UAAAL,GAAcn1D,GAAQ,QAAU,CAAA,EAC5D,GAAI,CAACuhD,GAAS,CAACiU,GAAe,CAACL,EAAW,CACxCx+E,GAAO,KAAK,iEAAiE,EAC7E,MACF,CACA,GAAI,CACF,eAAe,QAAQs9E,GAAgC1S,CAAK,EAC5D,eAAe,QAAQ2S,GAAiCsB,CAAW,EACnE,eAAe,QAAQrB,GAAqCgB,CAAS,CACvE,MAAQ,CAER,CACAd,GAAe,CAAE,gBAAiB9S,EAAO,CAC3C,CAUO,SAASkU,GACdhB,EACA9B,EACM,CACNsC,GAAA,EACAZ,GAAe,CAAE,gBAAiB,KAAM,CAC1C,CAeO,SAASqB,GACdjB,EACA9B,EACM,CACNsC,GAAA,EACAZ,GAAe,CAAE,gBAAiB,KAAM,CAC1C,CC3WO,SAASsB,GACd/iF,EACAunB,EACQ,CACR,KAAM,CAAE,QAAAvF,EAAS,WAAAghE,EAAY,aAAAzG,CAAA,EAAiBv8E,EACxCkiB,EAAoBq6D,GAAgBh1D,EAAQ,SAAS,2BAA2B,GAAK,MAErFlF,EAAqB,kBAAkB2gE,CAAU,GACjD1gE,EAAoBN,EAAQK,CAAkB,EAEpD,GAAIC,GAAqBA,EAAkBJ,CAAiB,EAC1D,OAAOI,EAAkBJ,CAAiB,EAAE,UAI9C,MAAMK,EAAiB,GAAGygE,CAAU,aACpC,OAAQhhE,EAAQO,CAAc,GAAgB,OAAOP,EAAQghE,CAAU,CAAC,CAC1E,CCrCA,MAAM5G,GAAmD,CACvD,IAAK,CAAE,KAAM,MAAO,OAAQ,IAAK,OAAQ,QAAS,SAAU,CAAA,EAC5D,IAAK,CAAE,KAAM,MAAO,OAAQ,IAAK,OAAQ,QAAS,SAAU,CAAA,EAC5D,IAAK,CAAE,KAAM,MAAO,OAAQ,IAAK,OAAQ,QAAS,SAAU,CAAA,EAC5D,IAAK,CAAE,KAAM,MAAO,OAAQ,IAAK,OAAQ,QAAS,SAAU,CAAA,EAC5D,IAAK,CAAE,KAAM,MAAO,OAAQ,IAAK,OAAQ,QAAS,SAAU,CAAA,CAC9D,EAkBO,SAAS6G,GACdjjF,EACAunB,EACQ,CACR,KAAM,CAAE,MAAArrB,EAAO,aAAAqgF,EAAc,OAAQ2G,GAAiBljF,EAChDuhB,EAAWg7D,GAAgBh1D,EAAQ,SAAS,2BAA2B,GAAK,MAE5EkD,EAAS2xD,GAAiB76D,CAAQ,GAAK66D,GAAiB,IACxDl4E,EAASg/E,GAAgBz4D,EAAO,OAEtC,GAAI,CACF,OAAO,IAAI,KAAK,aAAavmB,EAAQ,CACnC,MAAO,WACP,SAAUumB,EAAO,KACjB,sBAAuBA,EAAO,SAC9B,sBAAuBA,EAAO,QAAA,CAC/B,EAAE,OAAOvuB,CAAK,CACjB,MAAQ,CAEN,MAAMinF,EAAYjnF,EAAM,eAAe,OAAW,CAChD,sBAAuBuuB,EAAO,SAC9B,sBAAuBA,EAAO,QAAA,CAC/B,EACD,MAAO,GAAGA,EAAO,MAAM,GAAG04D,CAAS,EACrC,CACF,CAQO,SAASC,GAAkB7G,EAA8B,CAC9D,OAAOH,GAAiBG,CAAY,GAAG,QAAUA,CACnD,CC5EA,MAAMx4E,GAAW,OAAe,QAAQ,eAAe,kBAAkB,GAAM,CAC3E,IAAK,IAAIC,IAAoB,QAAQ,IAAI,qBAAsB,GAAGA,CAAI,EACtE,KAAM,IAAIA,IAAoB,QAAQ,KAAK,qBAAsB,GAAGA,CAAI,EACxE,MAAO,IAAIA,IAAoB,QAAQ,MAAM,qBAAsB,GAAGA,CAAI,CAC9E,EAIMq/E,GAAc,wBACdC,GAAmB,MAwBlB,SAASC,GACdvjF,EACAunB,EACQ,CACR,KAAM,CAAE,gBAAAi8D,EAAkBF,EAAA,EAAqBtjF,EAE/C,IAAIuhB,EAAWiiE,EAEf,GAAI,CACF,GAAI,OAAO,OAAW,KAAe,OAAO,aAAc,CACxD,MAAMC,EAAS,aAAa,QAAQJ,EAAW,EAC3CI,GAAUC,GAAgBD,CAAM,IAClCliE,EAAWkiE,EAEf,CACF,MAAQ,CAEN1/E,GAAO,KAAK,gCAAiCy/E,CAAe,CAC9D,CAGA,OAAAj8D,EAAQ,SAAS,SAAU,CAAE,kBAAmBhG,EAAU,EAEnDA,CACT,CAoBO,SAASoiE,GACd3jF,EACAunB,EACM,CACN,KAAM,CAAE,aAAAg1D,GAAiBv8E,EAEzB,GAAI,CAAC0jF,GAAgBnH,CAAY,EAAG,CAClCx4E,GAAO,KAAK,iBAAkBw4E,CAAY,EAC1C,MACF,CAEA,GAAI,CACE,OAAO,OAAW,KAAe,OAAO,cAC1C,aAAa,QAAQ8G,GAAa9G,CAAY,CAElD,MAAQ,CACNx4E,GAAO,KAAK,oBAAoB,CAClC,CAGAwjB,EAAQ,SAAS,SAAU,CAAE,kBAAmBg1D,EAAc,CAChE,CASA,SAASmH,GAAgBxwB,EAAuB,CAC9C,OAAO,OAAOA,GAAS,UAAY,aAAa,KAAKA,CAAI,CAC3D,CC1GA,MAAMnvD,GAAW,OAAe,QAAQ,eAAe,kBAAkB,GAAM,CAC3E,IAAK,IAAIC,IAAoB,QAAQ,IAAI,qBAAsB,GAAGA,CAAI,EACtE,KAAM,IAAIA,IAAoB,QAAQ,KAAK,qBAAsB,GAAGA,CAAI,EACxE,MAAO,IAAIA,IAAoB,QAAQ,MAAM,qBAAsB,GAAGA,CAAI,CAC9E,EAUM4/E,GAA4B,CAAC,OAAQ,QAAS,MAAM,EAKpDP,GAAc,kBAKd77E,GAAqBC,GACrBA,IAAS,OACJ,OAAO,WAAW,8BAA8B,EAAE,QACrD,OACA,QAECA,EAQHC,GAAcD,GAA0B,CAC5C,MAAME,EAAiBH,GAAkBC,CAAI,EAC7C,SAAS,gBAAgB,aAAa,aAAcE,CAAc,EAG9DA,IAAmB,OACrB,SAAS,gBAAgB,UAAU,IAAI,MAAM,EAE7C,SAAS,gBAAgB,UAAU,OAAO,MAAM,CAEpD,EAOO,SAASk8E,IAAkB,CAChC,GAAI,CACF,MAAMh8E,EAAa,aAAa,QAAQw7E,EAAW,EAC7CS,EAAQj8E,GAAc+7E,GAAa,SAAS/7E,CAAU,EAAIA,EAAa,OAC7EH,GAAWo8E,CAAK,EAChB//E,GAAO,IAAI,yBAA0B+/E,CAAK,CAC5C,OAAS/nF,EAAO,CACdgI,GAAO,KAAK,gCAAiChI,CAAK,EAClD2L,GAAW,MAAM,CACnB,CACF,CAcA,eAAsBq8E,GACpB32D,EACA2yD,EACe,CAEf,MAAMiE,EAAc52D,GAAQ,OAG5B,GAAI42D,GAAe,OAAOA,GAAgB,UAAYJ,GAAa,SAASI,CAAwB,EAAG,CACrGt8E,GAAWs8E,CAAwB,EACnC,MACF,CAGAH,GAAA,CACF,CAWA,eAAsBI,GACpB72D,EACA2yD,EACe,CAEf,IAAI+D,EAQJ,GALI12D,GAAQ,QAAU,OAAOA,EAAO,QAAW,UAAY,CAACA,EAAO,OAAO,SAAS,IAAI,IACrF02D,EAAQ12D,EAAO,QAIb,CAAC02D,GAAS,OAAOA,GAAU,SAAU,CACvC//E,GAAO,KAAK,iBAAkB+/E,CAAK,EACnC,MACF,CAEA,GAAI,CAACF,GAAa,SAASE,CAAkB,EAAG,CAC9C//E,GAAO,KAAK,qBAAsB+/E,CAAK,EACvC,MACF,CAEA,MAAMI,EAAaJ,EAGnB,GAAI,CACF,aAAa,QAAQT,GAAaa,CAAU,CAC9C,OAASnoF,EAAO,CACdgI,GAAO,MAAM,wCAAyChI,CAAK,EAC3D,MACF,CAGA2L,GAAWw8E,CAAU,EAErBngF,GAAO,IAAI,oBAAqBmgF,CAAU,CAC5C,CCrIA,MAAMngF,GAAW,OAAe,QAAQ,eAAe,mCAAmC,GAAM,CAC9F,IAAK,IAAIC,IAAoB,QAAQ,IAAI,sCAAuC,GAAGA,CAAI,EACvF,KAAM,IAAIA,IAAoB,QAAQ,KAAK,sCAAuC,GAAGA,CAAI,EACzF,MAAO,IAAIA,IAAoB,QAAQ,MAAM,sCAAuC,GAAGA,CAAI,CAC7F,EAYA,eAAsBmgF,GACpBtC,EACA9B,EACe,CACf,MAAMllF,EAAU,OAAe,OAE/B,GAAI,CAACA,GAAQ,SAAU,CACrBkJ,GAAO,MAAM,mDAAmD,EAChE,MACF,CAIA,MAAMqgF,EAAY,OAAO,SAAS,SAAW,OAAO,SAAS,OAE7D,MAAMvpF,EAAO,SAAS,CACpB,QAAS,WACT,OAAQ,CACN,KAAM,SAGN,MAAO,CAAE,SAAUupF,CAAA,CAAU,CAC/B,CACD,CACH,CCxCA,MAAMrgF,GAAU,OAAe,QAAQ,eAAe,4BAA4B,GAAK,CACrF,IAAK,IAAIC,IAAoB,QAAQ,IAAI,+BAAgC,GAAGA,CAAI,EAChF,KAAM,IAAIA,IAAoB,QAAQ,KAAK,+BAAgC,GAAGA,CAAI,EAClF,MAAO,IAAIA,IAAoB,QAAQ,MAAM,+BAAgC,GAAGA,CAAI,CACtF,EAYA,eAAsBqgF,GAA0Bj3D,EAAc2yD,EAA+B,CAC3F,MAAMllF,EAAU,OAAe,OACzB,CAAE,IAAAiY,EAAK,SAAAw8B,CAAA,EAAaliB,GAAQ,QAAU,CAAA,EAE5C,GAAI,CAACta,EAAK,CACR/O,GAAO,KAAK,0BAA0B,EACtC,MACF,CAEA,GAAI,CAAClJ,GAAQ,KAAK,IAAK,CACrBkJ,GAAO,MAAM,6CAA6C,EAC1D,MACF,CAEA,GAAI,CAEF,MAAMwrC,EAAO,MAAM10C,EAAO,IAAI,IAAIiY,EAAK,CAAE,aAAc,OAAQ,EAE/D,GAAIy8B,EAAM,CACR,MAAMC,EAAY,IAAI,gBAAgBD,CAAI,EACpCt8B,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAOu8B,EACZv8B,EAAK,SAAWq8B,GAAY,GAC5B,SAAS,KAAK,YAAYr8B,CAAI,EAC9BA,EAAK,MAAA,EACL,SAAS,KAAK,YAAYA,CAAI,EAC9B,IAAI,gBAAgBu8B,CAAS,CAC/B,CACF,OAASzzC,EAAO,CACdgI,GAAO,MAAM,eAAgBhI,CAAK,EAClClB,GAAQ,OAAO,QAAQA,GAAQ,IAAI,wBAAwB,GAAK,iBAAiB,CACnF,CACF,CC2EO,MAAMypF,GAzDW,CAEtB,0CAA2CtG,GAC3C,2CAA4CY,GAC5C,mCAAoCS,GACpC,uCAAwCC,GACxC,yCAA0CL,GAG1C,gCAAiC8D,GACjC,+BAAgCE,GAChC,kCAAmCG,GACnC,sCAAuCG,GACvC,sCAAuCI,GAGvC,SAAUM,GACV,UAAWF,GAGX,0BAA2BI,GAG3B,mBAAoBE,GAKpB,wBAAyBvE,GACzB,mBAAoBM,GACpB,cAAeE,GACf,oBAAqBG,GACrB,oBAAqBE,GACrB,gBAAiBE,GAGjB,mBAAoBE,GACpB,wBAAyBC,GAGzB,YAAaY,GACb,WAAYG,GACZ,aAAcC,GACd,kBAAmBC,GACnB,cAAeE,GACf,gBAAiBC,GACjB,oBAAqBE,GACrB,oBAAqBK,GACrB,qBAAsBE,GACtB,uBAAwBC,EAC1B,ECnHM/+E,GAAW,OAAe,QAAQ,eAAe,yCAAyC,GAAM,CACpG,IAAK,IAAIC,IAAoB,QAAQ,IAAI,4CAA6C,GAAGA,CAAI,EAC7F,KAAM,IAAIA,IAAoB,QAAQ,KAAK,4CAA6C,GAAGA,CAAI,EAC/F,MAAO,IAAIA,IAAoB,QAAQ,MAAM,4CAA6C,GAAGA,CAAI,CACnG,EAkDA,SAASugF,GAAcC,EAAiE,CACtF,MAAM3pF,EAAU,OAAe,OACzB4pF,EAAQ5pF,GAAQ,OAAO,WAAA,GAAgB,CAAA,EACvC6pF,EAAS7pF,GAAQ,OAAO,YAAA,GAAiBA,GAAQ,OAAO,MAAA,GAAW,CAAA,EAEnE8pF,EAAO,IAAIC,IACfA,EAAW,KAAMxiF,GAAmB,OAAOA,GAAM,UAAYA,EAAE,OAAS,CAAC,EAErEyiF,EAAQF,EACZH,EAAQ,QAAQ,MAChBE,GAAQ,aAAa,MACrBA,GAAQ,MAAM,MACdA,GAAQ,MAAM,MAAM,MACpBF,EAAQ,UAAY,SAAWC,GAAO,cAAc,MAAQ,OAC5DD,EAAQ,UAAY,iBAAmBC,GAAO,mBAAmB,MAAQ,OACzED,EAAQ,UAAY,iBAAmBC,GAAO,MAAQ,MAAA,EAGlDK,EAAQH,EACZH,EAAQ,QAAQ,MAChBE,GAAQ,aAAa,MACrBA,GAAQ,MAAM,MACdA,GAAQ,MAAM,MAAM,KAAA,EAGtB,GAAI,CAACG,GAAS,CAACC,EACb,OAAO,KAGT,MAAM/+E,EAAqC,CAAA,EAC3C,OAAI8+E,MAAc,MAAQA,GACtBC,MAAc,MAAQA,GACnB/+E,CACT,CAKA,SAASg/E,IAAwC,CAE/C,MAAMpW,EADU,OAAe,QACT,KAAK,WAAA,GAAgB,KAC3C,OAAOA,EAAQ,CAAE,cAAe,UAAUA,CAAK,EAAA,EAAO,CAAA,CACxD,CAUA,SAASqW,IAA0C,CACjD,GAAI,CACF,MAAM9gF,EACJ,OAAO,OAAW,IAAc,OAAO,cAAc,QAAQ,WAAW,EAAI,KAC9E,OAAOA,EAAS,CAAE,kBAAmBA,CAAA,EAAW,CAAA,CAClD,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAkBA,eAAe+gF,GACbT,EACAz+E,EACgC,CAChC,MAAM8Y,EAAgC,CAAE,QAAS2lE,EAAQ,OAAA,EACrDA,EAAQ,cAAa3lE,EAAK,YAAc2lE,EAAQ,aAChDz+E,MAAa,OAASA,GAE1B,MAAM+M,EAAM0xE,EAAQ,qBAAuB,2BACrCU,EAAM,MAAM,MAAMpyE,EAAK,CAC3B,OAAQ,OACR,YAAa,UACb,QAAS,CACP,eAAgB,mBAChB,OAAQ,mBACR,GAAGkyE,GAAA,EACH,GAAGD,GAAA,CAAc,EAEnB,KAAM,KAAK,UAAUlmE,CAAI,CAAA,CAC1B,EAEKsmE,EAAO,MAAMD,EAAI,OAAO,MAAM,IAAM,IAAI,EAC9C,GAAI,CAACA,EAAI,IAAM,CAACC,GAAM,QAAS,CAC7B,MAAMC,EAAMD,GAAM,SAAW,yBAAyBD,EAAI,MAAM,IAChE,MAAM,IAAI,MAAME,CAAG,CACrB,CAEA,MAAMjmE,EAAOgmE,EAAK,MAAQA,EAC1B,MAAO,CACL,GAAIhmE,EAAK,GACT,WAAYA,EAAK,WACjB,YAAaA,EAAK,aAAeqlE,EAAQ,aAAe,YACxD,eAAgBrlE,EAAK,eACrB,aAAcA,EAAK,aACnB,aAAc,OAAOA,EAAK,cAAiB,SAAWA,EAAK,aAAe,MAAA,CAE9E,CAOA,eAAsBkmE,GAA6Bb,EAA2D,CAC5G,MAAM3pF,EAAU,OAAe,OACzByqF,EAAWzqF,GAAQ,SAEzB,GAAI,CAACA,GAAQ,UAAY,CAACA,GAAQ,OAAS,CAACyqF,EAC1CvhF,OAAAA,GAAO,MAAM,6DAA6D,EACnE,CAAE,OAAQ,SAAU,YAAa,cAAA,EAI1C,GAAIygF,EAAQ,cAAgB,qBAAuBA,EAAQ,aACzD,OAAOc,EAAS,mBAAmBd,CAAO,EAK5C,MAAMz+E,EAASw+E,GAAcC,CAAO,EAGpC,IAAIe,EACJ,GAAI,CACFA,EAAY,MAAMN,GAAeT,EAASz+E,CAAM,CAClD,OAASuqB,EAAK,CACZvsB,GAAO,MAAM,mBAAoBusB,CAAG,EACpC,GAAI,CACF,MAAMz1B,EAAO,SAAS,CACpB,QAAS,QACT,OAAQ,CACN,KAAM,QACN,QAASy1B,aAAe,MAAQA,EAAI,QAAU,kBAAA,CAChD,CACD,CACH,MAAQ,CAER,CACA,MAAO,CACL,OAAQ,SACR,YAAa,yBACb,OAAQA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CAE3D,CAGA,GAAIi1D,EAAU,aACZ,OAAOD,EAAS,mBAAmB,CACjC,GAAGd,EACH,YAAa,oBACb,aAAce,EAAU,YAAA,CACzB,EAKH,MAAMC,EAAYD,EAAU,WAAa,IAAI,KAAKA,EAAU,UAAU,EAAE,QAAA,EAAY,EAC9EE,EAAmBD,EAAY,EAAI,KAAK,IAAI,EAAG,KAAK,OAAOA,EAAY,KAAK,IAAA,GAAS,GAAI,CAAC,EAAI,EAI9FE,EAAc,OAAOH,EAAU,cAAiB,SAAWA,EAAU,aAAe,EAE1F1qF,EAAO,MAAM,IAAI,CACf,kBAAmB,CACjB,WAAY2pF,EAAQ,WACpB,QAASA,EAAQ,QACjB,YAAaA,EAAQ,aAAe,KACpC,YAAae,EAAU,YACvB,aAAcA,EAAU,GACxB,WAAYA,EAAU,WACtB,eAAgBA,EAAU,gBAAkB,CAAA,EAC5C,OAAQx/E,GAAU,KAClB,KAAM,GACN,MAAO,KACP,SAAU,EACV,YAAA2/E,EACA,iBAAAD,EACA,eAAgB,CAAA,CAClB,CACD,EAQD,IAAIE,EAAmBH,EACnBI,EAAiB,EACrB,MAAMC,EAAa,OAAO,YAAY,IAAM,CAC1C,MAAMC,EAAYH,EAAmB,EACjC,KAAK,IAAI,EAAG,KAAK,OAAOA,EAAmB,KAAK,IAAA,GAAS,GAAI,CAAC,EAC9D,EACJC,EAAiB,KAAK,IAAI,EAAGA,EAAiB,CAAC,EAC/C/qF,EAAO,MAAM,IAAI,CACf,kBAAmB,CACjB,iBAAkBirF,EAClB,eAAAF,CAAA,CACF,CACD,CACH,EAAG,GAAI,EAKP,IAAIlkE,EAAmC,KACvC,GAAI,CACFA,EAAc7mB,EAAO,MAAM,YAAas/B,GAAc,CACpD,MAAM4rD,EAAU5rD,GAAM,mBAAmB,WACzC,GAAI,OAAO4rD,GAAY,SAAU,CAC/B,MAAMC,EAAK,IAAI,KAAKD,CAAO,EAAE,QAAA,EACzB,OAAO,SAASC,CAAE,GAAKA,IAAOL,IAChCA,EAAmBK,EAEvB,CACA,MAAMC,EAAK9rD,GAAM,mBAAmB,eAChC,OAAO8rD,GAAO,UAAYA,EAAKL,IAEjCA,EAAiBK,EAErB,CAAC,GAAK,IACR,MAAQ,CAER,CAGA,MAAMC,EAAWZ,EAAS,eAAA,EAC1B,GAAI,CACF,MAAMzqF,EAAO,SAAS,CACpB,QAAS,YACT,OAAQ,0BAAA,CACT,CACH,OAASsC,EAAG,CACV4G,OAAAA,GAAO,MAAM,2BAA4B5G,CAAC,EAC1C,OAAO,cAAc0oF,CAAU,EAC/BnkE,IAAA,EACO4jE,EAAS,mBAAmB,CACjC,GAAGd,EACH,YAAa,oBACb,aAAc,oCAAoC,mBAAmBe,EAAU,EAAE,CAAC,WAAW,mBAAmB,OAAO,SAAS,IAAI,CAAC,EAAA,CACtI,CACH,CAGA,MAAMj8D,EAAS,MAAM48D,EAGrB,cAAO,cAAcL,CAAU,EAC/BnkE,IAAA,EAEO4H,CACT,CAQO,SAAS68D,IAA6C,CAC3D,MAAMb,EAAY,OAAe,QAAQ,SACzC,GAAI,CAACA,GAAU,YAAa,CAC1BvhF,GAAO,KACL,uEAAA,EAEF,MACF,CACAuhF,EAAS,YAAYD,EAA4B,EACjDthF,GAAO,IAAI,yCAAyC,CACtD,CCrUA,SAASqiF,GAAYC,EAA+D,CAClF,MAAMC,EAAQD,EAAQ,MACtB,OAAK,MAAM,QAAQC,CAAK,EACjBA,EAAM,OACVnpF,GACC,CAAC,CAACA,GAAK,OAAOA,GAAM,UAAY,OAAQA,EAAuB,OAAU,QAAA,EAH3C,CAAA,CAKpC,CAEA,SAASopF,GAAWp5E,EAAyB,EAAuC,CAClF,MAAMrR,EAAQqR,EAAM,MACpB,OAAI,OAAOrR,GAAU,SAAiBA,EAAM,WAAW,KAAK,EAAI,EAAEA,EAAM,MAAM,CAAC,CAAC,EAAIA,EAC7EqR,EAAM,KACf,CAEA,SAASq5E,GAAar5E,EAAyBrR,EAAe2qF,EAAoB,CAChF,GAAIA,IAAM,GAAI,MAAO,GACrB,MAAMlhF,EAASkhF,EAAE,YAAA,EAEjB,OADIt5E,EAAM,MAAM,YAAA,EAAc,SAAS5H,CAAM,GACzCzJ,EAAM,YAAA,EAAc,SAASyJ,CAAM,EAAU,IACzC4H,EAAM,UAAY,CAAA,GAAI,KAAMvK,GAAMA,EAAE,YAAA,EAAc,SAAS2C,CAAM,CAAC,CAC5E,CAGA,SAASmhF,GAAY,CAAE,MAAAv5E,GAA0D,CAC/E,MAAM86D,EAAU96D,EAAM,QACtB,OAAI86D,GAAS,KAETzsE,EAAAA,IAAC,OAAA,CACC,UAAU,oBACV,wBAAyB,CAAE,OAAQysE,EAAQ,IAAA,EAC3C,MAAO0e,EAAA,CAAA,EAIT1e,GAAS,UACJzsE,MAAC,QAAK,UAAW,qBAAqBysE,EAAQ,SAAS,GAAI,MAAO0e,EAAA,CAAY,EAGhFnrF,EAAAA,IAAC,IAAA,CAAE,UAAW,UAAU2R,EAAM,KAAK,GAAI,MAAOw5E,GAAY,cAAY,MAAA,CAAO,CACtF,CAEO,SAASC,GAAiB,CAC/B,QAAAP,EACA,MAAAnqF,EACA,SAAAF,EACA,EAAA+D,CACF,EAA8C,CAC5C,MAAM8mF,EAAUT,GAAYC,CAAO,EAC7B9+C,EAAiCrrC,GAAU,KAAO,GAAK,OAAOA,CAAK,EACnE4qF,EAAU,OAAOT,EAAQ,aAAgB,SAAWA,EAAQ,YAAc,EAC1EU,EAAuBV,EAAQ,sBAC/B9hF,EACJ,OAAOwiF,GAAyB,UAAYA,EAAqB,WAAW,KAAK,EAC7EhnF,EAAEgnF,EAAqB,MAAM,CAAC,CAAC,EAC/BhnF,EAAE,8CAA8C,EAEhD,CAACinF,EAAOC,CAAQ,EAAIvrF,EAAM,SAAS,EAAE,EAG3C,GAAImrF,EAAQ,SAAW,EACrB,OACErrF,EAAAA,IAAC,MAAA,CACC,UAAU,uCACV,cAAY,0BACZ,MAAOuyE,GAEP,SAAAvyE,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,qCACV,cAAY,+BACZ,MAAO+rC,EACP,YAAaxnC,EAAE,2CAA2C,EAC1D,SAAW5C,GAAMnB,EAASmB,EAAE,OAAO,QAAU,GAAK,OAAYA,EAAE,OAAO,KAAK,EAC5E,MAAO+pF,EAAA,CAAA,CACT,CAAA,EAKN,MAAMC,EAAWhqF,GAAgCopF,GAAWppF,EAAG4C,CAAC,EAC1DqnF,EAAWP,EAAQ,OAAQ1pF,GAAMqpF,GAAarpF,EAAGgqF,EAAQhqF,CAAC,EAAG6pF,CAAK,CAAC,EAEzE,OACEnkF,EAAAA,KAAC,MAAA,CACC,UAAU,uCACV,cAAY,0BACZ,MAAOkrE,GAEP,SAAA,CAAAvyE,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,UAAU,uCACV,cAAY,iCACZ,MAAOwrF,EACP,YAAaziF,EACb,SAAWpH,GAAM8pF,EAAS9pF,EAAE,OAAO,KAAK,EACxC,MAAO+pF,EAAA,CAAA,EAETrkF,EAAAA,KAAC,MAAA,CACC,UAAU,iBACV,cAAY,+BACZ,MAAO,CAAE,GAAGwkF,GAAM,oBAAqB,UAAUP,CAAO,mBAAA,EAExD,SAAA,CAAAtrF,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,cAAY,sBACZ,MAAOuE,EAAE,gCAAgC,EACzC,QAAS,IAAM/D,EAAS,MAAS,EACjC,eAAcurC,IAAY,GAC1B,MAAOA,IAAY,GAAK+/C,GAAeC,GAEvC,SAAA/rF,EAAAA,IAAC,OAAA,CAAK,MAAOgsF,GAAa,SAAA,GAAA,CAAC,CAAA,CAAA,EAE5BJ,EAAS,IAAKj6E,GAAU,CACvB,MAAMs6E,EAAWt6E,EAAM,QAAUo6B,EACjC,OACE/rC,EAAAA,IAAC,SAAA,CAEC,KAAK,SACL,cAAa,kBAAkB2R,EAAM,KAAK,GAC1C,MAAOg6E,EAAQh6E,CAAK,EACpB,eAAcs6E,EACd,QAAS,IAAMzrF,EAASmR,EAAM,KAAK,EACnC,MAAOs6E,EAAWH,GAAeC,GAEjC,SAAA/rF,EAAAA,IAACkrF,IAAY,MAAAv5E,CAAA,CAAc,CAAA,EARtBA,EAAM,KAAA,CAWjB,CAAC,CAAA,CAAA,CAAA,EAEFi6E,EAAS,SAAW,GACnB5rF,EAAAA,IAAC,MAAA,CAAI,cAAY,gCAAgC,MAAOksF,GACrD,SAAA3nF,EAAE,sCAAsC,CAAA,CAC3C,CAAA,CAAA,CAAA,CAIR,CAEA,MAAMguE,GAA4B,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,MAAO,MAAA,EACvFmZ,GAAkC,CAAE,QAAS,UAAW,SAAU,GAAI,OAAQ,oBAAqB,aAAc,EAAG,MAAO,MAAA,EAC3HG,GAA4B,CAAE,QAAS,OAAQ,IAAK,EAAG,UAAW,IAAK,UAAW,OAAQ,QAAS,CAAA,EACnGE,GAA4B,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,SAAU,UAAW,GAAI,QAAS,EAAG,OAAQ,oBAAqB,aAAc,EAAG,WAAY,OAAQ,OAAQ,SAAA,EACpMD,GAAoC,CAAE,GAAGC,GAAM,OAAQ,oBAAqB,WAAY,SAAA,EACxFZ,GAAkC,CAAE,QAAS,cAAe,WAAY,SAAU,eAAgB,SAAU,SAAU,GAAI,WAAY,CAAA,EACtIa,GAAmC,CAAE,SAAU,GAAI,MAAO,UAAW,WAAY,YAAa,SAAU,SAAU,aAAc,WAAY,WAAY,SAAU,SAAU,MAAA,EAC5KE,GAAiC,CAAE,SAAU,GAAI,MAAO,UAAW,UAAW,SAAU,QAAS,SAAA,ECzKjG3jF,GAAU,OAAe,QAAQ,eAAe,sCAAsC,GAAK,CAC/F,IAAK,IAAIowB,IAAiB,QAAQ,IAAI,yCAA0C,GAAGA,CAAC,EACpF,KAAM,IAAIA,IAAiB,QAAQ,KAAK,yCAA0C,GAAGA,CAAC,CACxF,EAMO,SAASwzD,IAA0C,CACxD,GAAI,OAAO,OAAW,IAAa,OACnC,MAAMC,EAAgB,OAAe,QAAQ,aAC7C,GAAI,CAACA,GAAc,eAAgB,CACjC7jF,GAAO,KAAK,gDAAgD,EAC5D,MACF,CAEA6jF,EAAa,eAAe,cAAehB,EAAgD,EAC3F7iF,GAAO,IAAI,+CAA+C,CAC5D,CCxBA,MAAMA,GAAW,OAAe,QAAQ,eAAe,wBAAwB,GAAM,CACjF,IAAK,IAAIC,IAAoB,QAAQ,IAAI,2BAA4B,GAAGA,CAAI,EAC5E,KAAM,IAAIA,IAAoB,QAAQ,KAAK,2BAA4B,GAAGA,CAAI,EAC9E,MAAO,IAAIA,IAAoB,QAAQ,MAAM,2BAA4B,GAAGA,CAAI,CACpF,EAwGI,OAAO,OAAW,MACnB,OAAe,mBAAqBsgF,IAgBhC,SAASuD,IAAqB,CAEnC,GAAI,OAAO,OAAW,IAAa,CACjC,IAAIC,EAAa,EACjB,MAAMC,EAAa,GAEbC,EAAmB,IAAM,CAC7B,MAAMC,EAAoB,OAAe,QAAQ,sBAAA,EAE7CA,GAEF,OAAO,QAAQ3D,EAAU,EAAE,QAAQ,CAAC,CAACrlF,EAAMwoD,CAAO,IAAM,CACtDwgC,EAAiB,gBAAgBhpF,EAAMwoD,CAAO,CAChD,CAAC,EAED1jD,GAAO,IAAI,GAAG,OAAO,KAAKugF,EAAU,EAAE,MAAM,iCAAkC,OAAO,KAAKA,EAAU,CAAC,EAGrG6B,GAAA,IAEA2B,IACIA,GAAcC,GAChBhkF,GAAO,KAAK,4CAA4C+jF,CAAU,IAAIC,CAAU,GAAG,EACnF,WAAWC,EAAkB,GAAG,GAEhCjkF,GAAO,MAAM,mFAAmF,EAGtG,EAGI,SAAS,aAAe,WAC1BikF,EAAA,EAEA,OAAO,iBAAiB,OAAQA,CAAgB,CAEpD,CACF,CAQA,OAAAL,GAAA,EAGAE,GAAA","x_google_ignoreList":[45,47,48,49,50,51,52,53,66,70,71,72,73]} \ No newline at end of file diff --git a/templates/_bundled/sirsoft-basic/layouts/_user_base.json b/templates/_bundled/sirsoft-basic/layouts/_user_base.json index 558767f7..556bff3a 100644 --- a/templates/_bundled/sirsoft-basic/layouts/_user_base.json +++ b/templates/_bundled/sirsoft-basic/layouts/_user_base.json @@ -625,104 +625,6 @@ } ] }, - { - "comment": "언어 선택(모바일) — 데스크톱 헤더와 동일하게 통화 옆 같은 줄에 노출(globe + 현재 로케일 코드). 비회원 포함 전체. setLocale 은 코어 빌트인.", - "id": "mobile_lang_selector_wrap", - "type": "basic", - "name": "Div", - "if": "{{$locales.length > 1}}", - "props": { "className": "relative" }, - "children": [ - { - "id": "mobile_lang_btn", - "type": "basic", - "name": "Button", - "props": { - "className": "flex items-center gap-1 px-2 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg cursor-pointer", - "aria-haspopup": "listbox", - "aria-expanded": "{{_global.mobileLangMenuOpen ?? false}}", - "aria-label": "$t:common.language" - }, - "actions": [ - { - "type": "click", - "handler": "setState", - "params": { "target": "global", "mobileLangMenuOpen": "{{!_global.mobileLangMenuOpen}}" } - } - ], - "children": [ - { "type": "basic", "name": "Icon", "size": "sm", "props": { "name": "globe" } }, - { "type": "basic", "name": "Span", "props": { "className": "font-medium uppercase" }, "text": "{{$locale}}" }, - { "type": "basic", "name": "Icon", "size": "xs", "props": { "name": "chevron-down" } } - ] - }, - { - "comment": "드롭다운 메뉴", - "id": "mobile_lang_menu", - "type": "basic", - "name": "Div", - "if": "{{_global.mobileLangMenuOpen}}", - "props": { - "className": "absolute right-0 top-full mt-2 w-40 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-50 py-1 overflow-hidden", - "role": "listbox" - }, - "children": [ - { - "type": "basic", - "name": "Div", - "iteration": { "source": "{{$locales}}", "item_var": "loc" }, - "children": [ - { - "type": "basic", - "name": "Button", - "props": { - "className": "{{loc === $locale ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400' : 'text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700'}} w-full px-4 py-2.5 text-left text-sm flex items-center gap-3 cursor-pointer", - "role": "option", - "aria-selected": "{{loc === $locale}}" - }, - "actions": [ - { - "type": "click", - "handler": "sequence", - "actions": [ - { "handler": "setLocale", "target": "{{loc}}" }, - { "handler": "setState", "params": { "target": "global", "mobileLangMenuOpen": false } } - ] - } - ], - "children": [ - { "type": "basic", "name": "Icon", "size": "sm", "props": { "name": "globe" } }, - { "type": "basic", "name": "Span", "props": { "className": "flex-1 font-medium" }, "text": "{{_global.appConfig?.localeNames?.[loc] ?? loc}}" }, - { "type": "basic", "name": "Icon", "size": "sm", "if": "{{loc === $locale}}", "props": { "name": "check" } } - ] - } - ] - } - ] - }, - { - "comment": "배경 클릭 시 닫기", - "id": "mobile_lang_backdrop", - "type": "basic", - "name": "Div", - "if": "{{_global.mobileLangMenuOpen}}", - "props": { "className": "fixed inset-0 z-40" }, - "actions": [ - { "type": "click", "handler": "setState", "params": { "target": "global", "mobileLangMenuOpen": false } } - ] - } - ] - }, - { - "comment": "통화 선택 — 이커머스 모듈이 'header_currency' 슬롯에 주입(layout_extensions). 헤더는 슬롯 이름만 알고 통화/모듈을 모름. 모듈 비활성 시 빈 슬롯 → 미렌더(인프라 자동 게이트). 데스크톱 Header.tsx 의 SlotContainer 와 동일 슬롯 공유(언어와 같은 줄).", - "id": "mobile_currency_selector_wrap", - "type": "composite", - "name": "SlotContainer", - "props": { - "slotId": "header_currency", - "className": "flex items-center" - } - }, { "comment": "사용자 아이콘 (로그인 시) / 로그인 버튼", "id": "mobile_user_btn", @@ -900,6 +802,71 @@ } ] }, + { + "comment": "언어/통화 선택 — 회원·비회원 공통. 헤더 우측 그룹에서 이동(모바일 오버플로 해소). 통화는 이커머스 모듈이 header_currency 슬롯에 주입하므로 SlotContainer 만 배치(모듈 비활성 시 자동 미렌더).", + "id": "mobile_drawer_prefs", + "type": "basic", + "name": "Div", + "props": { + "className": "px-4 pb-4 border-b border-gray-200 dark:border-gray-700 space-y-3" + }, + "children": [ + { + "comment": "언어 선택 (여러 언어 지원 시)", + "type": "basic", + "name": "Div", + "if": "{{$locales.length > 1}}", + "children": [ + { + "type": "basic", + "name": "Div", + "props": { + "className": "py-1 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase" + }, + "text": "$t:common.language" + }, + { + "comment": "가로 나열 칩. iteration 은 반드시 Button 자신에 건다 — 엔진은 iteration 을 가진 노드를 항목 수만큼 복제하므로, flex 컨테이너에 걸면 컨테이너가 복제되어 칩이 세로로 쌓인다.", + "type": "basic", + "name": "Div", + "props": { + "className": "flex flex-wrap gap-2" + }, + "children": [ + { + "type": "basic", + "name": "Button", + "iteration": { "source": "{{$locales}}", "item_var": "loc" }, + "props": { + "type": "button", + "className": "{{loc === $locale ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 border-blue-200 dark:border-blue-800' : 'text-gray-700 dark:text-gray-300 border-gray-200 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700'}} inline-flex items-center gap-1.5 px-3 py-1.5 text-sm border rounded-full cursor-pointer whitespace-nowrap", + "role": "option", + "aria-selected": "{{loc === $locale}}" + }, + "actions": [ + { "type": "click", "handler": "setLocale", "target": "{{loc}}" } + ], + "children": [ + { "type": "basic", "name": "Icon", "props": { "name": "globe", "size": "sm" } }, + { "type": "basic", "name": "Span", "text": "{{_global.appConfig?.localeNames?.[loc] ?? loc}}" } + ] + } + ] + } + ] + }, + { + "comment": "통화 선택 — 이커머스 모듈 주입 슬롯(헤더에서 이동). 모듈 미설치 시 빈 슬롯 → 렌더 영향 0. 헤더는 가로 flex 였으나 드로어는 세로 블록이므로 block 으로 둔다(flex items-center 면 주입 루트가 콘텐츠 폭으로 줄어 펼친 목록이 좁아짐). 주입 루트가 portable 에서 스스로 w-full 을 갖는다.", + "id": "mobile_drawer_currency_wrap", + "type": "composite", + "name": "SlotContainer", + "props": { + "slotId": "header_currency", + "className": "block" + } + } + ] + }, { "comment": "로그인된 사용자 정보 - 아코디언 토글", "type": "basic", @@ -1148,64 +1115,6 @@ } ] }, - { - "comment": "언어 선택 (여러 언어 지원 시)", - "type": "basic", - "name": "Div", - "if": "{{$locales.length > 1}}", - "props": { - "className": "mt-2 pt-2 border-t border-gray-200 dark:border-gray-600" - }, - "children": [ - { - "type": "basic", - "name": "Div", - "props": { - "className": "px-4 py-1 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase" - }, - "text": "$t:common.language" - }, - { - "type": "basic", - "name": "Div", - "iteration": { - "source": "{{$locales}}", - "item_var": "loc" - }, - "children": [ - { - "type": "basic", - "name": "Button", - "props": { - "className": "{{loc === $locale ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400' : 'text-gray-700 dark:text-gray-300'}} w-full flex items-center justify-start gap-3 px-4 py-2 hover:bg-gray-200 dark:hover:bg-gray-600 cursor-pointer" - }, - "actions": [ - { - "type": "click", - "handler": "setLocale", - "target": "{{loc}}" - } - ], - "children": [ - { - "type": "basic", - "name": "Icon", - "props": { - "name": "globe", - "size": "sm" - } - }, - { - "type": "basic", - "name": "Span", - "text": "{{_global.appConfig?.localeNames?.[loc] ?? loc}}" - } - ] - } - ] - } - ] - }, { "comment": "로그아웃 버튼", "type": "basic", diff --git a/templates/_bundled/sirsoft-basic/layouts/partials/board/form/_post_form.json b/templates/_bundled/sirsoft-basic/layouts/partials/board/form/_post_form.json index 30bb4b3c..47ccd65b 100644 --- a/templates/_bundled/sirsoft-basic/layouts/partials/board/form/_post_form.json +++ b/templates/_bundled/sirsoft-basic/layouts/partials/board/form/_post_form.json @@ -371,7 +371,7 @@ "name": "Div", "if": "{{form_meta?.data && !_global.currentUser?.uuid && !route.id}}", "props": { - "className": "grid grid-cols-2 gap-4" + "className": "grid grid-cols-1 sm:grid-cols-2 gap-4" }, "children": [ { diff --git a/templates/_bundled/sirsoft-basic/layouts/partials/board/show/_comment_input.json b/templates/_bundled/sirsoft-basic/layouts/partials/board/show/_comment_input.json index f788909b..ea002bd2 100644 --- a/templates/_bundled/sirsoft-basic/layouts/partials/board/show/_comment_input.json +++ b/templates/_bundled/sirsoft-basic/layouts/partials/board/show/_comment_input.json @@ -40,7 +40,7 @@ "name": "Div", "if": "{{!_global.currentUser?.uuid}}", "props": { - "className": "flex gap-3" + "className": "flex flex-col sm:flex-row gap-3" }, "children": [ { diff --git a/templates/_bundled/sirsoft-basic/layouts/partials/board/show/_navigation.json b/templates/_bundled/sirsoft-basic/layouts/partials/board/show/_navigation.json index a12f0738..78a8b15b 100644 --- a/templates/_bundled/sirsoft-basic/layouts/partials/board/show/_navigation.json +++ b/templates/_bundled/sirsoft-basic/layouts/partials/board/show/_navigation.json @@ -9,13 +9,19 @@ "props": { "className": "flex items-center justify-between mb-6" }, + "responsive": { + "mobile": { + "comment": "모바일(0~767px)에서는 게시판명을 자기 줄로 올리고(order-first w-full) 아래 줄에 목록/이전글/다음글만 남긴다. 한 줄에 셋을 밀어넣으면 게시판명이 길수록 flex 가 좌우 버튼을 압착했다 (390px 실측: '이전글' 폭 5자 87px → 11자 73px → 21자 62px, chevron 과 텍스트가 겹침). 버튼 3개 고정폭 261px + 21자 제목 자연폭 323px = 584px 이므로 태블릿(768px+, 콘텐츠 735px)은 한 줄로 충분하다 — portable 이 아니라 mobile 로 한정한다.", + "props": { "className": "flex flex-wrap items-center justify-between gap-y-3 mb-6" } + } + }, "children": [ { - "comment": "목록으로 버튼 — 상세 URL 에 실린 목록 상태(category/search/page/del/filters)를 그대로 목록으로 복귀 (45-1)", + "comment": "목록으로 버튼 — 상세 URL 에 실린 목록 상태(category/search/page/del/filters)를 그대로 목록으로 복귀 (45-1). shrink-0: 게시판명이 길어도 눌리지 않는다.", "type": "basic", "name": "Button", "props": { - "className": "flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-white bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-600 transition-all shadow-sm cursor-pointer" + "className": "shrink-0 flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-white bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-600 transition-all shadow-sm cursor-pointer" }, "actions": [ { @@ -51,13 +57,20 @@ "props": { "className": "text-lg font-semibold text-gray-900 dark:text-white" }, + "responsive": { + "mobile": { + "comment": "order-first + w-full 로 첫 줄 전체를 차지. 이 노드가 형제를 압착하던 원인이므로 폭 경쟁에서 아예 빼낸다.", + "props": { "className": "order-first w-full text-center text-lg font-semibold text-gray-900 dark:text-white" } + } + }, "text": "{{post?.data?.board?.name ?? ''}}" }, { + "comment": "이전글/다음글 그룹. shrink-0: 게시판명이 길어도 눌리지 않는다.", "type": "basic", "name": "Div", "props": { - "className": "flex items-center gap-2" + "className": "shrink-0 flex items-center gap-2" }, "children": [ { diff --git a/templates/_bundled/sirsoft-basic/layouts/partials/mypage/addresses/_modal_address.json b/templates/_bundled/sirsoft-basic/layouts/partials/mypage/addresses/_modal_address.json index 0febdf4b..4940ca72 100644 --- a/templates/_bundled/sirsoft-basic/layouts/partials/mypage/addresses/_modal_address.json +++ b/templates/_bundled/sirsoft-basic/layouts/partials/mypage/addresses/_modal_address.json @@ -409,7 +409,7 @@ { "type": "basic", "name": "Div", - "props": { "className": "grid grid-cols-2 gap-2" }, + "props": { "className": "grid grid-cols-1 sm:grid-cols-2 gap-2" }, "children": [ { "type": "basic", diff --git a/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_cancel.json b/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_cancel.json index f7e4b77e..35ba7285 100644 --- a/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_cancel.json +++ b/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_cancel.json @@ -9,7 +9,6 @@ "id": "modal_cancel_order", "props": { "width": "750px", - "className": "max-w-full", "title": "$t:mypage.order_detail.cancel_modal.title" }, "actions": [ @@ -372,7 +371,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.item_count" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.item_count" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "{{(_local.refundEstimate?.original_snapshot?.item_count ?? 0)}}$t:mypage.order_detail.cancel_modal.count_unit" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.item_count ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.item_count ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "{{(_local.refundEstimate?.recalculated_snapshot?.item_count ?? 0)}}$t:mypage.order_detail.cancel_modal.count_unit" } ] @@ -383,7 +382,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.list_price_amount" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.list_price_amount" }, { "type": "basic", "name": "Div", @@ -440,7 +439,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.subtotal_amount" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.subtotal_amount" }, { "type": "basic", "name": "Div", @@ -502,7 +501,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.product_coupon_discount" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.product_coupon_discount" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "-{{_local.refundEstimate?.original_snapshot?.formatted?.total_product_coupon_discount_amount ?? (_local.refundEstimate?.original_snapshot?.total_product_coupon_discount_amount ?? 0).toLocaleString()}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.total_product_coupon_discount_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.total_product_coupon_discount_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "-{{_local.refundEstimate?.recalculated_snapshot?.formatted?.total_product_coupon_discount_amount ?? (_local.refundEstimate?.recalculated_snapshot?.total_product_coupon_discount_amount ?? 0).toLocaleString()}}" } ] @@ -528,7 +527,7 @@ "item_var": "pc", "index_var": "pcIdx" }, - "props": { "className": "text-xs text-gray-400 dark:text-gray-500" }, + "props": { "className": "text-xs text-gray-400 dark:text-gray-500 break-keep" }, "text": "{{pc.name}} -{{(pc.discount_amount ?? 0).toLocaleString()}}$t:common.currency_unit" } ] @@ -546,7 +545,7 @@ "item_var": "rpc", "index_var": "rpcIdx" }, - "props": { "className": "text-xs text-gray-400 dark:text-gray-500" }, + "props": { "className": "text-xs text-gray-400 dark:text-gray-500 break-keep" }, "text": "{{rpc.name}} -{{(rpc.discount_amount ?? 0).toLocaleString()}}$t:common.currency_unit" } ] @@ -566,7 +565,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.order_coupon_discount" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.order_coupon_discount" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "-{{_local.refundEstimate?.original_snapshot?.formatted?.total_order_coupon_discount_amount ?? (_local.refundEstimate?.original_snapshot?.total_order_coupon_discount_amount ?? 0).toLocaleString()}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.total_order_coupon_discount_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.total_order_coupon_discount_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "-{{_local.refundEstimate?.recalculated_snapshot?.formatted?.total_order_coupon_discount_amount ?? (_local.refundEstimate?.recalculated_snapshot?.total_order_coupon_discount_amount ?? 0).toLocaleString()}}" } ] @@ -592,7 +591,7 @@ "item_var": "oc", "index_var": "ocIdx" }, - "props": { "className": "text-xs text-gray-400 dark:text-gray-500" }, + "props": { "className": "text-xs text-gray-400 dark:text-gray-500 break-keep" }, "text": "{{oc.name}} -{{(oc.discount_amount ?? 0).toLocaleString()}}$t:common.currency_unit" } ] @@ -610,7 +609,7 @@ "item_var": "roc", "index_var": "rocIdx" }, - "props": { "className": "text-xs text-gray-400 dark:text-gray-500" }, + "props": { "className": "text-xs text-gray-400 dark:text-gray-500 break-keep" }, "text": "{{roc.name}} -{{(roc.discount_amount ?? 0).toLocaleString()}}$t:common.currency_unit" } ] @@ -625,7 +624,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.code_discount" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.code_discount" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "-{{_local.refundEstimate?.original_snapshot?.formatted?.total_code_discount_amount ?? (_local.refundEstimate?.original_snapshot?.total_code_discount_amount ?? 0).toLocaleString()}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.total_code_discount_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.total_code_discount_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "-{{_local.refundEstimate?.recalculated_snapshot?.formatted?.total_code_discount_amount ?? (_local.refundEstimate?.recalculated_snapshot?.total_code_discount_amount ?? 0).toLocaleString()}}" } ] @@ -641,7 +640,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.shipping_coupon_discount" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.shipping_coupon_discount" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "-{{_local.refundEstimate?.original_snapshot?.formatted?.shipping_discount_amount ?? (_local.refundEstimate?.original_snapshot?.shipping_discount_amount ?? 0).toLocaleString()}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.shipping_discount_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.shipping_discount_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "-{{_local.refundEstimate?.recalculated_snapshot?.formatted?.shipping_discount_amount ?? (_local.refundEstimate?.recalculated_snapshot?.shipping_discount_amount ?? 0).toLocaleString()}}" } ] @@ -667,7 +666,7 @@ "item_var": "sc", "index_var": "scIdx" }, - "props": { "className": "text-xs text-gray-400 dark:text-gray-500" }, + "props": { "className": "text-xs text-gray-400 dark:text-gray-500 break-keep" }, "text": "{{sc.name}} -{{(sc.discount_amount ?? 0).toLocaleString()}}$t:common.currency_unit" } ] @@ -685,7 +684,7 @@ "item_var": "rsc", "index_var": "rscIdx" }, - "props": { "className": "text-xs text-gray-400 dark:text-gray-500" }, + "props": { "className": "text-xs text-gray-400 dark:text-gray-500 break-keep" }, "text": "{{rsc.name}} -{{(rsc.discount_amount ?? 0).toLocaleString()}}$t:common.currency_unit" } ] @@ -700,7 +699,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.base_shipping" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.base_shipping" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "{{_local.refundEstimate?.original_snapshot?.formatted?.base_shipping_amount ?? (_local.refundEstimate?.original_snapshot?.base_shipping_amount ?? 0).toLocaleString()}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.base_shipping_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.base_shipping_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "{{_local.refundEstimate?.recalculated_snapshot?.formatted?.base_shipping_amount ?? (_local.refundEstimate?.recalculated_snapshot?.base_shipping_amount ?? 0).toLocaleString()}}" } ] @@ -711,7 +710,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.extra_shipping" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.extra_shipping" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "{{_local.refundEstimate?.original_snapshot?.formatted?.extra_shipping_amount ?? (_local.refundEstimate?.original_snapshot?.extra_shipping_amount ?? 0).toLocaleString()}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.extra_shipping_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.extra_shipping_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "{{_local.refundEstimate?.recalculated_snapshot?.formatted?.extra_shipping_amount ?? (_local.refundEstimate?.recalculated_snapshot?.extra_shipping_amount ?? 0).toLocaleString()}}" } ] @@ -722,7 +721,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.points_used" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.points_used" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "-{{_local.refundEstimate?.original_snapshot?.formatted?.total_points_used_amount ?? (_local.refundEstimate?.original_snapshot?.total_points_used_amount ?? 0).toLocaleString()}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.total_points_used_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.total_points_used_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "-{{_local.refundEstimate?.recalculated_snapshot?.formatted?.total_points_used_amount ?? (_local.refundEstimate?.recalculated_snapshot?.total_points_used_amount ?? 0).toLocaleString()}}" } ] @@ -733,7 +732,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.taxable_amount" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.taxable_amount" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "{{_local.refundEstimate?.original_snapshot?.formatted?.total_tax_amount ?? (_local.refundEstimate?.original_snapshot?.total_tax_amount ?? 0).toLocaleString()}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.total_tax_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.total_tax_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "{{_local.refundEstimate?.recalculated_snapshot?.formatted?.total_tax_amount ?? (_local.refundEstimate?.recalculated_snapshot?.total_tax_amount ?? 0).toLocaleString()}}" } ] @@ -744,7 +743,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.vat_amount" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.vat_amount" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "{{_local.refundEstimate?.original_snapshot?.formatted?.total_vat_amount ?? (_local.refundEstimate?.original_snapshot?.total_vat_amount ?? 0).toLocaleString()}}" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.total_vat_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.total_vat_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "{{_local.refundEstimate?.recalculated_snapshot?.formatted?.total_vat_amount ?? (_local.refundEstimate?.recalculated_snapshot?.total_vat_amount ?? 0).toLocaleString()}}" } ] @@ -812,7 +811,7 @@ "name": "Div", "props": { "className": "grid grid-cols-3 gap-2 py-1.5 text-sm" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "$t:mypage.order_detail.cancel_modal.earned_points" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.earned_points" }, { "type": "basic", "name": "Span", "props": { "className": "text-right text-gray-900 dark:text-white" }, "text": "{{(_local.refundEstimate?.original_snapshot?.total_earned_points_amount ?? 0).toLocaleString()}}P" }, { "type": "basic", "name": "Span", "props": { "className": "text-right {{(_local.refundEstimate?.original_snapshot?.total_earned_points_amount ?? 0) !== (_local.refundEstimate?.recalculated_snapshot?.total_earned_points_amount ?? 0) ? 'text-red-600 dark:text-red-400 font-semibold' : 'text-gray-900 dark:text-white'}}" }, "text": "{{(_local.refundEstimate?.recalculated_snapshot?.total_earned_points_amount ?? 0).toLocaleString()}}P" } ] @@ -892,7 +891,7 @@ { "type": "basic", "name": "Span", - "props": { "className": "text-xs font-medium text-gray-600 dark:text-gray-400 block mb-1" }, + "props": { "className": "text-xs font-medium text-gray-600 dark:text-gray-400 block mb-1 break-keep" }, "text": "$t:mypage.order_detail.cancel_modal.restored_coupons_label" }, { @@ -905,8 +904,8 @@ }, "props": { "className": "flex justify-between text-xs py-0.5" }, "children": [ - { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400" }, "text": "{{coupon.coupon_name ?? ''}}" }, - { "type": "basic", "name": "Span", "props": { "className": "text-gray-700 dark:text-gray-300" }, "text": "{{(coupon.discount_amount ?? 0).toLocaleString()}}$t:common.currency_unit" } + { "type": "basic", "name": "Span", "props": { "className": "text-gray-600 dark:text-gray-400 break-keep" }, "text": "{{coupon.coupon_name ?? ''}}" }, + { "type": "basic", "name": "Span", "props": { "className": "text-gray-700 dark:text-gray-300 whitespace-nowrap" }, "text": "{{(coupon.discount_amount ?? 0).toLocaleString()}}$t:common.currency_unit" } ] }, { diff --git a/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_confirm_purchase.json b/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_confirm_purchase.json index 5e5d2078..67206af3 100644 --- a/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_confirm_purchase.json +++ b/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_confirm_purchase.json @@ -9,7 +9,6 @@ "id": "modal_confirm_purchase", "props": { "width": "480px", - "className": "max-w-full", "title": "$t:mypage.order_detail.confirm_modal.title" }, "children": [ @@ -77,7 +76,7 @@ { "type": "basic", "name": "Icon", - "props": { "name": "gift", "className": "w-4 h-4 text-blue-600 dark:text-blue-400" } + "props": { "name": "gift", "className": "text-base text-blue-600 dark:text-blue-400" } }, { "type": "basic", @@ -104,7 +103,7 @@ { "type": "basic", "name": "Icon", - "props": { "name": "triangle-exclamation", "className": "w-4 h-4 text-yellow-600 dark:text-yellow-400 flex-shrink-0 mt-0.5" } + "props": { "name": "triangle-exclamation", "className": "text-base text-yellow-600 dark:text-yellow-400 flex-shrink-0 mt-0.5" } }, { "type": "basic", diff --git a/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_write_review.json b/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_write_review.json index f679be51..55a77f3a 100644 --- a/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_write_review.json +++ b/templates/_bundled/sirsoft-basic/layouts/partials/mypage/orders/_modal_write_review.json @@ -9,7 +9,6 @@ "id": "modal_write_review", "props": { "width": "560px", - "className": "max-w-full", "title": "$t:mypage.order_detail.review_modal.title" }, "children": [ diff --git a/templates/_bundled/sirsoft-basic/layouts/partials/shop/_modal_address_manage.json b/templates/_bundled/sirsoft-basic/layouts/partials/shop/_modal_address_manage.json index 8eb06a36..ddb65bf3 100644 --- a/templates/_bundled/sirsoft-basic/layouts/partials/shop/_modal_address_manage.json +++ b/templates/_bundled/sirsoft-basic/layouts/partials/shop/_modal_address_manage.json @@ -768,7 +768,7 @@ { "type": "basic", "name": "Div", - "props": { "className": "grid grid-cols-2 gap-2" }, + "props": { "className": "grid grid-cols-1 sm:grid-cols-2 gap-2" }, "children": [ { "type": "basic", diff --git a/templates/_bundled/sirsoft-basic/layouts/partials/shop/detail/_info_summary.json b/templates/_bundled/sirsoft-basic/layouts/partials/shop/detail/_info_summary.json index ab553ddb..f075e51c 100644 --- a/templates/_bundled/sirsoft-basic/layouts/partials/shop/detail/_info_summary.json +++ b/templates/_bundled/sirsoft-basic/layouts/partials/shop/detail/_info_summary.json @@ -70,10 +70,10 @@ "props": { "className": "border-t border-gray-200 dark:border-gray-700 pt-3 mt-3" }, "children": [ { - "comment": "쿠폰 배지 목록 (가로 스크롤)", + "comment": "쿠폰 배지 목록 (좁은 화면에서 여러 줄로 줄바꿈 — 칩 라벨 자체는 whitespace-nowrap 으로 한 줄 유지)", "type": "basic", "name": "Div", - "props": { "className": "flex items-center gap-2 overflow-x-auto pb-1" }, + "props": { "className": "flex flex-wrap items-center gap-2 pb-1" }, "children": [ { "type": "basic", @@ -101,6 +101,7 @@ { "type": "basic", "name": "Span", + "props": { "className": "whitespace-nowrap" }, "text": "{{dlCoupon.multi_currency_benefit_formatted?.[_global.preferredCurrency ?? 'KRW'] ?? dlCoupon.benefit_formatted}}" }, { diff --git a/templates/_bundled/sirsoft-basic/package-lock.json b/templates/_bundled/sirsoft-basic/package-lock.json index 7156c020..f93b6349 100644 --- a/templates/_bundled/sirsoft-basic/package-lock.json +++ b/templates/_bundled/sirsoft-basic/package-lock.json @@ -1,12 +1,12 @@ { "name": "sirsoft-basic", - "version": "1.0.1", + "version": "1.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sirsoft-basic", - "version": "1.0.1", + "version": "1.0.2", "license": "MIT", "dependencies": { "@dnd-kit/core": "^6.3.1", diff --git a/templates/_bundled/sirsoft-basic/package.json b/templates/_bundled/sirsoft-basic/package.json index e2a065a7..822f2e37 100644 --- a/templates/_bundled/sirsoft-basic/package.json +++ b/templates/_bundled/sirsoft-basic/package.json @@ -1,6 +1,6 @@ { "name": "sirsoft-basic", - "version": "1.0.1", + "version": "1.0.2", "description": "Gnuboard7 Basic User Template Components - Nexibase Style", "type": "module", "main": "dist/components.js", diff --git a/templates/_bundled/sirsoft-basic/src/components/composite/Modal.tsx b/templates/_bundled/sirsoft-basic/src/components/composite/Modal.tsx index cdd64173..76fa6e33 100644 --- a/templates/_bundled/sirsoft-basic/src/components/composite/Modal.tsx +++ b/templates/_bundled/sirsoft-basic/src/components/composite/Modal.tsx @@ -177,7 +177,7 @@ export const Modal: React.FC = ({ {/* Modal Content */}
e.stopPropagation()} role="dialog" diff --git a/templates/_bundled/sirsoft-basic/template.json b/templates/_bundled/sirsoft-basic/template.json index 9ece8403..2c26b961 100644 --- a/templates/_bundled/sirsoft-basic/template.json +++ b/templates/_bundled/sirsoft-basic/template.json @@ -5,7 +5,7 @@ "ko": "Basic", "en": "Basic" }, - "version": "1.0.1", + "version": "1.0.2", "license": "MIT", "description": { "ko": "그누보드7 기본 사용자 템플릿", @@ -26,7 +26,7 @@ "dependencies": { "modules": { "sirsoft-board": ">=1.0.0", - "sirsoft-ecommerce": ">=1.0.0", + "sirsoft-ecommerce": ">=1.0.2", "sirsoft-page": ">=1.0.0" }, "plugins": { diff --git a/templates/_bundled/sirsoft-basic/tests/Playwright/playwright.config.ts b/templates/_bundled/sirsoft-basic/tests/Playwright/playwright.config.ts new file mode 100644 index 00000000..f21a49ce --- /dev/null +++ b/templates/_bundled/sirsoft-basic/tests/Playwright/playwright.config.ts @@ -0,0 +1,84 @@ +/** + * sirsoft-basic 템플릿 Playwright E2E 설정. + * + * 코어 `playwright.config.ts` 와 동일한 base URL 해석 우선순위를 따른다 — 활성 호스트가 + * 가변(개발자/CI/운영 환경별로 다른 도메인)이므로 하드코딩 회피. + * + * Base URL 해석: + * 1. PLAYWRIGHT_BASE_URL 환경변수 (CI/명시적 오버라이드) + * 2. .env (코어 루트) 의 APP_URL — 단 localhost 류는 fallback 부적합 + * 3. 그 외 — 명시 에러 + * + * 뷰포트는 각 spec 이 `page.setViewportSize()` 로 직접 지정한다(모바일 390/320px ↔ 데스크톱 + * 1280px 을 한 파일에서 교차 검증하므로, 프로젝트를 뷰포트별로 나누면 같은 테스트가 + * 중복 실행된다). + * + * 실행 예시: + * PowerShell — $env:PLAYWRIGHT_BASE_URL='https://example.com'; npx playwright test --config templates/_bundled/sirsoft-basic/tests/Playwright/playwright.config.ts + */ +import { defineConfig, devices } from '@playwright/test'; +import { readFileSync, existsSync } from 'node:fs'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +/** + * .env 파일에서 키 하나를 읽습니다. + * + * @param filePath .env 파일 절대 경로 + * @param key 읽을 키 이름 + * @return 값 (없으면 null) + */ +function readEnvFile(filePath: string, key: string): string | null { + if (!existsSync(filePath)) return null; + const content = readFileSync(filePath, { encoding: 'utf-8' }); + const pattern = new RegExp(`^${key}=(.*)$`, 'm'); + const match = content.match(pattern); + if (!match) return null; + let value = match[1].trim(); + if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) { + value = value.slice(1, -1); + } + return value || null; +} + +/** + * E2E base URL 을 해석합니다. + * + * @return base URL + * @throws Error 활성 호스트를 확정할 수 없을 때 + */ +function resolveBaseUrl(): string { + if (process.env.PLAYWRIGHT_BASE_URL) { + return process.env.PLAYWRIGHT_BASE_URL; + } + // 템플릿 디렉토리 기준 5단계 상위 = 코어 루트 (.env 위치) + const coreRoot = process.env.G7_ROOT || resolve(__dirname, '../../../../../'); + const appUrl = readEnvFile(resolve(coreRoot, '.env'), 'APP_URL'); + if (appUrl && !/^https?:\/\/localhost(:\d+)?\/?$/i.test(appUrl)) { + return appUrl; + } + throw new Error( + 'sirsoft-basic 템플릿 E2E base URL 미설정. PLAYWRIGHT_BASE_URL 환경변수를 지정하거나 코어 .env 의 APP_URL 을 활성 호스트로 설정하세요.' + ); +} + +export default defineConfig({ + testDir: './specs', + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: [ + ['html', { outputFolder: 'playwright-report', open: 'never' }], + ['list'], + ], + use: { + baseURL: resolveBaseUrl(), + trace: 'retain-on-failure', + screenshot: 'only-on-failure', + ignoreHTTPSErrors: true, + }, + projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }], +}); diff --git a/templates/_bundled/sirsoft-basic/tests/Playwright/specs/board-navigation-long-name.spec.ts b/templates/_bundled/sirsoft-basic/tests/Playwright/specs/board-navigation-long-name.spec.ts new file mode 100644 index 00000000..c307b361 --- /dev/null +++ b/templates/_bundled/sirsoft-basic/tests/Playwright/specs/board-navigation-long-name.spec.ts @@ -0,0 +1,245 @@ +/** + * 게시글 상단 네비게이션 — 긴 게시판명이 좌우 버튼을 압착하지 않는지 검증. + * + * 배경 (390px 실측, `flex items-center justify-between` 한 줄에 목록/게시판명/이전글·다음글): + * - 게시판명 Span 이 `flex-shrink` 를 받아 남은 폭을 먹으면서 형제 버튼을 눌렀다. + * '이전글' 버튼 폭: 5자 '자유게시판' 87px → 11자 'API 문서 샘플 게시판' 73px + * → 21자 62px. 62px 에서는 chevron 아이콘과 텍스트가 겹친다. + * - `document.scrollWidth` 는 내내 뷰포트와 같아 오버플로 검사로는 잡히지 않는다. + * 버튼이 넘치는 게 아니라 *줄어드는* 회귀이므로 폭을 직접 재야 한다. + * + * 조치: + * - 목록 버튼과 이전/다음 그룹에 `shrink-0` → 게시판명 길이와 무관하게 고정폭 + * - 모바일(0~767px)에서 컨테이너 `flex-wrap` + 게시판명 `order-first w-full` + * → 게시판명이 첫 줄 전체를 차지하고 버튼은 아래 줄에서 폭 경쟁을 하지 않는다 + * - 태블릿 이상(768px+)은 한 줄 유지. 버튼 3개 고정폭 261px + 21자 제목 자연폭 323px + * = 584px < 콘텐츠 735px 이므로 줄바꿈이 필요 없다. + * + * 선택자 규율: + * - 버튼 라벨(`목록`/`이전글`)은 브라우저 로케일에 따라 영문으로 렌더된다(`Back to List`). + * 로케일 독립적인 Font Awesome 아이콘 클래스(`fa-list`/`fa-chevron-left`)로 찾는다. + * - 게시판명 자체는 시드 데이터에 따라 짧을 수 있으므로, 실제 게시판을 고르는 대신 + * 제목 노드에 최악 케이스 문자열을 주입해 재측정한다. 회귀는 레이아웃에 있지 + * 특정 게시판에 있지 않다. + */ +import { test, expect, type Page, type Locator } from '@playwright/test'; + +/** 기준선 게시판명 (5자, 자연폭 83px — 이 폭에서는 회귀 상태에서도 버튼이 안 눌린다) */ +const SHORT_BOARD_NAME = '자유게시판'; + +/** 최악 케이스 게시판명 (21자, 자연폭 323px) */ +const LONG_BOARD_NAME = '아주 긴 이름을 가진 커뮤니티 게시판입니다'; + +/** 상단 네비게이션 컨테이너 — 목록(fa-list) + 게시판명 + 이전/다음 그룹 */ +function navLocator(page: Page): Locator { + return page.locator('div.mb-6').filter({ has: page.locator('button i.fa-list') }).first(); +} + +/** + * 이전글/다음글이 모두 있는 게시글을 찾습니다. 시드 데이터에 의존하지 않도록 공개 API 로 탐색합니다. + * + * @param page Playwright 페이지 + * @return { slug, postId } 또는 조건을 만족하는 글이 없으면 null + */ +async function findPostWithBothNeighbors( + page: Page +): Promise<{ slug: string; postId: number } | null> { + return page.evaluate(async () => { + const boardsRes = await fetch('/api/modules/sirsoft-board/boards'); + const boards = (await boardsRes.json())?.data ?? []; + + for (const board of boards) { + if ((board.posts_count ?? 0) < 3) continue; + + const listRes = await fetch( + `/api/modules/sirsoft-board/boards/${board.slug}/posts?per_page=5` + ); + const posts = (await listRes.json())?.data?.data ?? []; + + for (const post of posts) { + const navRes = await fetch( + `/api/modules/sirsoft-board/boards/${board.slug}/posts/${post.id}/navigation` + ); + const nav = (await navRes.json())?.data; + if (nav?.prev?.id && nav?.next?.id) { + return { slug: board.slug as string, postId: post.id as number }; + } + } + } + return null; + }); +} + +/** + * 짧은 게시판명 → 긴 게시판명으로 바꾸며 기하를 측정합니다. + * + * 핵심 단언은 "긴 이름일 때의 버튼 폭 == 짧은 이름일 때의 버튼 폭" 이다. 절대 폭 하한만 + * 보면 시드 데이터의 게시판명 길이에 따라 단언이 무력해진다(짧은 이름 게시판에서는 + * 회귀 상태여도 버튼이 하한을 넘는다). 같은 페이지에서 두 상태를 재 차이를 본다. + * + * @param nav 네비게이션 컨테이너 로케이터 + * @param shortName 기준선으로 쓸 짧은 게시판명 + * @param longName 최악 케이스 게시판명 + * @return 짧은/긴 이름 각각의 flex 배치와 버튼 폭 + */ +async function measureShortVsLongName(nav: Locator, shortName: string, longName: string) { + return nav.evaluate( + (el: HTMLElement, { short, long }: { short: string; long: string }) => { + const title = el.children[1] as HTMLElement; + + const snapshot = () => ({ + flexWrap: getComputedStyle(el).flexWrap, + titleOrder: Number(getComputedStyle(title).order), + titleTop: Math.round(title.getBoundingClientRect().top), + titleWidth: Math.round(title.getBoundingClientRect().width), + firstButtonTop: Math.round((el.children[0] as HTMLElement).getBoundingClientRect().top), + containerWidth: Math.round(el.getBoundingClientRect().width), + viewportWidth: document.documentElement.clientWidth, + docOverflow: document.documentElement.scrollWidth - document.documentElement.clientWidth, + buttons: [...el.querySelectorAll('button')].map((b) => ({ + icon: b.querySelector('i')?.className ?? '', + width: Math.round(b.getBoundingClientRect().width), + left: Math.round(b.getBoundingClientRect().left), + right: Math.round(b.getBoundingClientRect().right), + })), + }); + + title.textContent = short; + const withShortName = snapshot(); + title.textContent = long; + const withLongName = snapshot(); + return { withShortName, withLongName }; + }, + { short: shortName, long: longName } + ); +} + +/** + * 이전글·다음글이 모두 있는 게시글로 이동하고 네비 컨테이너를 반환합니다. + * + * navigation API 가 이웃을 돌려줘도 화면에는 렌더되지 않을 수 있으므로(비밀글·권한 필터) + * 실제 버튼 3개가 보이는지까지 확인한다. + * + * @param page Playwright 페이지 + * @return 네비게이션 컨테이너 로케이터 (조건을 만족하는 글이 없으면 테스트 skip) + */ +async function gotoPostWithNeighbors(page: Page): Promise { + await page.goto('/'); + const target = await findPostWithBothNeighbors(page); + test.skip(target === null, '이전글·다음글이 모두 있는 게시글이 없다'); + + await page.goto(`/board/${target!.slug}/${target!.postId}`); + const nav = navLocator(page); + await expect(nav).toBeVisible({ timeout: 15_000 }); + + // 라벨은 브라우저 로케일에 따라 영문이 되므로 아이콘으로 확인한다 + await expect(nav.locator('button i.fa-chevron-left')).toBeVisible(); + await expect(nav.locator('button i.fa-chevron-right')).toBeVisible(); + await expect(nav.locator('button')).toHaveCount(3); + return nav; +} + +/** + * 게시판명 길이가 버튼 폭에 영향을 주지 않는지 단언합니다 (이 회귀의 본질). + * + * @param withShortName 짧은 이름일 때의 측정치 + * @param withLongName 긴 이름일 때의 측정치 + */ +function expectButtonsUnaffectedByBoardName( + withShortName: { buttons: Array<{ width: number }> }, + withLongName: { buttons: Array<{ width: number }> } +): void { + expect(withShortName.buttons).toHaveLength(3); + expect(withLongName.buttons).toHaveLength(3); + // 회귀 상태에서는 87 → 62px 로 줄었다. shrink-0 이면 두 값이 완전히 같다. + expect(withLongName.buttons.map((b) => b.width)).toEqual( + withShortName.buttons.map((b) => b.width) + ); +} + +test.describe('게시글 상단 네비 — 긴 게시판명', () => { + test('@smoke 모바일(390px)에서 이전글/다음글이 압착되지 않고 게시판명은 자기 줄을 갖는다', async ({ + page, + }) => { + await page.setViewportSize({ width: 390, height: 844 }); + const nav = await gotoPostWithNeighbors(page); + + const { withShortName, withLongName } = await measureShortVsLongName( + nav, + SHORT_BOARD_NAME, + LONG_BOARD_NAME + ); + + expectButtonsUnaffectedByBoardName(withShortName, withLongName); + + // 긴 이름에서도 세 버튼이 뷰포트 안에 온전히 들어온다 + for (const btn of withLongName.buttons) { + expect(btn.left).toBeGreaterThanOrEqual(-1); + expect(btn.right).toBeLessThanOrEqual(withLongName.viewportWidth + 1); + } + + // 게시판명이 첫 줄 전체(order-first w-full)를 차지하고 버튼 행보다 위에 있다 + expect(withLongName.flexWrap).toBe('wrap'); + expect(withLongName.titleOrder).toBeLessThan(0); + expect(withLongName.titleWidth).toBe(withLongName.containerWidth); + expect(withLongName.titleTop).toBeLessThan(withLongName.firstButtonTop); + + expect(withLongName.docOverflow).toBe(0); + }); + + test('320px 에서도 버튼 폭이 게시판명 길이와 무관하다', async ({ page }) => { + await page.setViewportSize({ width: 320, height: 844 }); + const nav = await gotoPostWithNeighbors(page); + + const { withShortName, withLongName } = await measureShortVsLongName( + nav, + SHORT_BOARD_NAME, + LONG_BOARD_NAME + ); + + expectButtonsUnaffectedByBoardName(withShortName, withLongName); + for (const btn of withLongName.buttons) { + expect(btn.left).toBeGreaterThanOrEqual(-1); + expect(btn.right).toBeLessThanOrEqual(withLongName.viewportWidth + 1); + } + expect(withLongName.flexWrap).toBe('wrap'); + expect(withLongName.docOverflow).toBe(0); + }); + + test('태블릿(768px)은 한 줄을 유지하면서도 버튼이 압착되지 않는다', async ({ page }) => { + await page.setViewportSize({ width: 768, height: 900 }); + const nav = await gotoPostWithNeighbors(page); + + const { withShortName, withLongName } = await measureShortVsLongName( + nav, + SHORT_BOARD_NAME, + LONG_BOARD_NAME + ); + + // 버튼 3개 고정폭 261px + 21자 제목 자연폭 323px = 584px < 콘텐츠 폭 → 줄바꿈 불필요 + expect(withLongName.flexWrap).toBe('nowrap'); + expect(withLongName.titleOrder).toBe(0); + expect(withLongName.titleWidth).toBeLessThan(withLongName.containerWidth); + expectButtonsUnaffectedByBoardName(withShortName, withLongName); + expect(withLongName.docOverflow).toBe(0); + }); + + test('데스크톱(1280px)은 기존 한 줄 레이아웃을 유지한다 (모바일 오버라이드 누출 없음)', async ({ + page, + }) => { + await page.setViewportSize({ width: 1280, height: 900 }); + const nav = await gotoPostWithNeighbors(page); + + const { withShortName, withLongName } = await measureShortVsLongName( + nav, + SHORT_BOARD_NAME, + LONG_BOARD_NAME + ); + + expect(withLongName.flexWrap).toBe('nowrap'); + expect(withLongName.titleOrder).toBe(0); + expect(withLongName.titleWidth).toBeLessThan(withLongName.containerWidth); + expectButtonsUnaffectedByBoardName(withShortName, withLongName); + expect(withLongName.docOverflow).toBe(0); + }); +}); diff --git a/templates/_bundled/sirsoft-basic/tests/Playwright/specs/mobile-viewport-overflow.spec.ts b/templates/_bundled/sirsoft-basic/tests/Playwright/specs/mobile-viewport-overflow.spec.ts new file mode 100644 index 00000000..10873065 --- /dev/null +++ b/templates/_bundled/sirsoft-basic/tests/Playwright/specs/mobile-viewport-overflow.spec.ts @@ -0,0 +1,214 @@ +/** + * sirsoft-basic 모바일 뷰포트 가로 오버플로 회귀 E2E. + * + * 배경 (390x844 실측): + * - 헤더 우측 그룹에 언어(71px)+통화(91px)가 있어 26개 라우트 중 24개에서 + * document.scrollWidth = 401px (뷰포트 390px 대비 +11px). + * 320px(iPhone SE)에서는 햄버거 버튼이 화면 밖으로 밀려 내비게이션 자체가 불가능했다. + * - 비회원 댓글폼: 아바타 76px 들여쓰기 + flex-1 입력 2개 → 문서 +81px 초과 + * - 상품상세 쿠폰 칩: 라벨에 whitespace-nowrap 이 없어 39px 폭에서 2줄로 줄바꿈 + * + * 조치: + * - 언어/통화를 모바일 드로어(mobile_drawer_prefs)로 이동, 가로 칩으로 나열 + * - 통화/배송국가 주입 조각은 responsive.portable 로 모바일에서만 펼친 칩 목록 + * - 데스크톱(≥1024px)은 기존 헤더 드롭다운 유지 + * + * 단위 테스트(Vitest)는 레이아웃 JSON 구조만 본다. 실제 브라우저 폭·줄 수·가시성은 + * 여기서만 검증된다 (위지윅 발행 회귀 #238 교훈). + */ +import { test, expect, type Page } from '@playwright/test'; + +/** 문서가 뷰포트보다 가로로 넘치는 px (0 이어야 정상) */ +async function docOverflow(page: Page): Promise { + return page.evaluate( + () => document.documentElement.scrollWidth - document.documentElement.clientWidth + ); +} + +/** + * 뷰포트를 벗어난 가시 요소 목록. + * + * 제외 대상 (자기 자신부터 조상까지 거슬러 올라가며 판정): + * - 숨김 요소(display/visibility/opacity) + * - 화면 밖으로 밀어둔 off-canvas 서브트리 — 닫힌 드로어(`translate-x-full`) + * - `position: fixed` 서브트리 — 문서 스크롤 폭에 기여하지 않는다. + * (예: PageTransitionIndicator 의 로딩 바는 translateX 애니메이션으로 한때 + * `right > VW` 가 되지만 fixed 라 문서를 넓히지 않는다) + * - 조상이 `overflow-x: hidden|clip` 으로 잘라내는 요소 + * + * 문서 전체 오버플로는 `docOverflow()` 가 별도로 본다. 이 함수는 "어떤 요소가 범인인가"를 + * 진단하기 위한 것이다. + */ +async function overflowingElements(page: Page): Promise> { + return page.evaluate(() => { + const VW = document.documentElement.clientWidth; + const isExcluded = (el: Element): boolean => { + let n: Element | null = el; + while (n && n !== document.documentElement) { + const cs = getComputedStyle(n); + if (cs.display === 'none' || cs.visibility === 'hidden' || parseFloat(cs.opacity) === 0) { + return true; + } + if (cs.position === 'fixed') return true; + if (n !== el && /hidden|clip/.test(cs.overflowX)) return true; + const r = n.getBoundingClientRect(); + if (r.width > 0 && (r.left >= VW - 1 || r.right <= 1)) return true; + n = n.parentElement; + } + return false; + }; + return [...document.body.querySelectorAll('*')] + .filter((el) => { + const r = el.getBoundingClientRect(); + if (!r.width || !r.height || isExcluded(el)) return false; + return r.right > VW + 1 || r.left < -1; + }) + .map((el) => ({ id: el.id, cls: String(el.className).slice(0, 60) })); + }); +} + +test.describe('모바일 헤더/드로어 (390px)', () => { + test('@smoke 홈에서 문서가 가로로 넘치지 않는다', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto('/'); + await expect(page.locator('#mobile_menu_toggle')).toBeVisible({ timeout: 15_000 }); + + expect(await docOverflow(page)).toBe(0); + expect(await overflowingElements(page)).toEqual([]); + }); + + test('헤더 우측 그룹에 언어/통화 셀렉터가 없다', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto('/'); + await expect(page.locator('#mobile_header_right')).toBeVisible({ timeout: 15_000 }); + + await expect(page.locator('#mobile_header_right #mobile_lang_selector_wrap')).toHaveCount(0); + await expect(page.locator('#mobile_header_right #mobile_currency_selector_wrap')).toHaveCount(0); + }); + + test('언어/통화는 드로어 안에 가로 칩으로 나열되고 비회원도 볼 수 있다', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto('/'); + await page.locator('#mobile_menu_toggle').click(); + + const prefs = page.locator('#mobile_drawer_prefs'); + await expect(prefs).toBeVisible(); + + // 언어 칩: 여러 로케일이 한 줄에 나열 (iteration 이 Button 에 걸려 있어야 함) + const langChips = prefs.locator('button[role="option"]:not(#mobile_drawer_currency_wrap button)'); + expect(await langChips.count()).toBeGreaterThan(0); + + // 통화 슬롯: 이커머스 모듈 주입 + id 스코프 + const currencyRoot = page.locator('#mobile_drawer_currency_wrap [id^="ext_header_currency_selector"]'); + await expect(currencyRoot).toBeVisible(); + + // portable 오버라이드 — 트리거는 숨고 패널은 펼쳐진 정적 목록 + await expect(currencyRoot.locator('button[aria-haspopup="listbox"]')).toBeHidden(); + const panel = currencyRoot.locator('[role="listbox"]'); + await expect(panel).toBeVisible(); + await expect(panel).toHaveClass(/\bstatic\b/); + + // 모든 옵션이 칩(rounded-full) 이고 뷰포트를 넘지 않는다 + const chips = currencyRoot.locator('button[role="option"]'); + const n = await chips.count(); + expect(n).toBeGreaterThan(0); + for (let i = 0; i < n; i += 1) { + await expect(chips.nth(i)).toHaveClass(/rounded-full/); + } + expect(await docOverflow(page)).toBe(0); + }); + + test('320px 에서도 햄버거 버튼을 누를 수 있다 (내비게이션 접근성)', async ({ page }) => { + await page.setViewportSize({ width: 320, height: 844 }); + await page.goto('/'); + + const toggle = page.locator('#mobile_menu_toggle'); + // toBeInViewport 는 요소 존재를 기다리지 않는다(기본 5s 안에 하이드레이션이 끝나지 않으면 + // element(s) not found). 병렬 워커 부하에서 플레이키했으므로 먼저 가시성을 기다린다. + await expect(toggle).toBeVisible({ timeout: 15_000 }); + await expect(toggle).toBeInViewport(); + expect(await docOverflow(page)).toBe(0); + + await toggle.click(); + await expect(page.locator('#mobile_drawer_prefs')).toBeVisible(); + expect(await docOverflow(page)).toBe(0); + }); +}); + +test.describe('데스크톱 회귀 방지 (1280px)', () => { + test('헤더 통화 셀렉터는 여전히 absolute 드롭다운이다', async ({ page }) => { + await page.setViewportSize({ width: 1280, height: 900 }); + await page.goto('/'); + + const root = page.locator('#ext_header_currency_selector__header_currency_slot_desktop'); + const trigger = root.locator('button[aria-haspopup="listbox"]'); + await expect(trigger).toBeVisible({ timeout: 15_000 }); + + await trigger.click(); + const panel = root.locator('[role="listbox"]'); + await expect(panel).toBeVisible(); + await expect(panel).toHaveClass(/\babsolute\b/); + await expect(panel).toHaveClass(/\bz-50\b/); + + // 세로 목록 — 칩이 아니다 + const options = panel.locator('button[role="option"]'); + expect(await options.count()).toBeGreaterThan(0); + await expect(options.first()).not.toHaveClass(/rounded-full/); + + expect(await docOverflow(page)).toBe(0); + }); +}); + +test.describe('비회원 폼/칩 (390px)', () => { + test('게시판 글쓰기폼의 이름/비밀번호가 세로로 쌓인다', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto('/board/free/write'); + + const pw = page.locator('input[type="password"]').first(); + await expect(pw).toBeVisible({ timeout: 15_000 }); + + // 압착(147px) 이 아니라 전체폭에 가까워야 한다 + const box = await pw.boundingBox(); + expect(box!.width).toBeGreaterThan(250); + expect(await docOverflow(page)).toBe(0); + }); + + test('상품 상세의 쿠폰 칩 라벨이 한 줄을 유지한다', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto('/shop/products/105'); + + // 쿠폰 칩 라벨은 whitespace-nowrap Span. 상품에 다운로드 가능 쿠폰이 없으면 렌더되지 않는다. + const labels = page.locator('button span.whitespace-nowrap'); + await page.waitForLoadState('networkidle'); + const count = await labels.count(); + test.skip(count === 0, '이 상품에 다운로드 가능한 쿠폰이 없다'); + + for (let i = 0; i < count; i += 1) { + const lines = await labels.nth(i).evaluate((el) => { + const lh = parseFloat(getComputedStyle(el).lineHeight) || 16; + return Math.max(1, Math.round(el.getBoundingClientRect().height / lh)); + }); + expect(lines).toBe(1); + } + + // 칩 컨테이너는 가로 스크롤이 아니라 줄바꿈으로 흘린다. + // (컨테이너 > [ticket Icon, iteration Div ×N, 더보기 Button] > Button > Span 구조라 + // DOM 깊이가 가변적이므로 조상 체인을 올라가며 flex 컨테이너를 찾는다) + const containerInfo = await labels.first().evaluate((el) => { + // 칩 Button 자신도 inline-flex 이므로, wrap 을 켠 첫 조상(=칩 컨테이너)까지 올라간다 + let n: HTMLElement | null = el.parentElement; + while (n && n !== document.body) { + const cs = getComputedStyle(n); + if (cs.flexWrap === 'wrap') { + return { flexWrap: cs.flexWrap, overflowX: cs.overflowX }; + } + n = n.parentElement; + } + return null; + }); + expect(containerInfo).not.toBeNull(); + expect(containerInfo!.overflowX).not.toBe('auto'); + + expect(await docOverflow(page)).toBe(0); + }); +});
\n
\n
\n
\n
\n
\n
\n
\n
\n {Array.from({ length: iterCount }, (_, i) => (\n
\n
\n
\n
\n
\n
\n
\n
\n ))}\n
\n ),\n Pagination: (animClass) => (\n
\n {Array.from({ length: 5 }, (_, i) => (\n
\n ))}\n
\n ),\n Tabs: (animClass) => (\n
\n
\n {Array.from({ length: 3 }, (_, i) => (\n
\n ))}\n
\n
\n
\n ),\n TabNavigation: (animClass) => (\n
\n {Array.from({ length: 3 }, (_, i) => (\n
\n ))}\n
\n ),\n ProductCard: (animClass) => (\n
\n
\n
\n
\n
\n
\n
\n ),\n UserInfo: (animClass) => (\n
\n ),\n QuantitySelector: (animClass) => (\n
\n ),\n Header: (animClass) => (\n
\n
\n
\n
\n
\n
\n {Array.from({ length: 4 }, (_, i) => (\n
\n ))}\n
\n
\n
\n {Array.from({ length: 3 }, (_, i) => (\n
\n ))}\n
\n
\n
\n
\n ),\n Footer: (animClass) => (\n
\n
\n
\n
\n
\n
\n {Array.from({ length: 3 }, (_, i) => (\n
\n ))}\n
\n
\n
\n
\n
\n ),\n Modal: () => <>,\n Toast: () => <>,\n ConfirmDialog: () => <>,\n};\n\n/**\n * 조건부 분기 필터링 — 로딩/에러 상태 스킵, 콘텐츠 브랜치 선택\n *\n * 레이아웃 JSON에서 로딩/에러/콘텐츠 상태가 sibling으로 if 조건으로 분기되는 패턴이 일반적.\n * 스켈레톤은 \"데이터 로드 완료 후 실제 UI\" 형태를 보여줘야 하므로,\n * 로딩/에러 분기는 스킵하고 콘텐츠 분기(가장 풍부한 트리)만 렌더링.\n */\nfunction filterChildren(children: LayoutComponent[]): LayoutComponent[] {\n if (!children || children.length === 0) return [];\n\n const withIf = children.filter(c => c.if);\n const withoutIf = children.filter(c => !c.if);\n\n // if 조건 없는 컴포넌트가 있고, if 있는 것도 있는 경우\n // → if 없는 것은 항상 렌더, if 있는 것 중 부정 조건 스킵\n if (withoutIf.length > 0 && withIf.length > 0) {\n const positiveIf = withIf.filter(c => !isNegativeCondition(c.if!));\n // 긍정 조건 여러 개가 상호 배타적 값 분기(=== 'value')이면 richest만 선택\n // 예: type === 'basic', type === 'gallery', type === 'card'\n if (positiveIf.length > 1 && areMutuallyExclusiveBranches(positiveIf)) {\n return [...withoutIf, pickRichestBranch(positiveIf)];\n }\n return [...withoutIf, ...positiveIf];\n }\n\n // 모든 컴포넌트가 if 조건을 가진 경우 → 상호 배타적 분기\n // → 부정 조건 스킵 후, 나머지 중 가장 풍부한 브랜치 선택\n if (withIf.length > 1 && withoutIf.length === 0) {\n const positive = withIf.filter(c => !isNegativeCondition(c.if!));\n if (positive.length === 0) {\n // 모두 부정 조건 (로딩/에러 상태만) → 전체 스킵\n // 스켈레톤은 \"데이터 로드 완료 후 UI\"를 보여주므로 로딩/에러 분기 불필요\n return [];\n }\n if (positive.length === 1) return positive;\n // 긍정 조건 여러 개 → 가장 풍부한 것 선택\n return [pickRichestBranch(positive)];\n }\n\n return children;\n}\n\n/**\n * 부정 조건 판별 — 로딩/에러 상태를 나타내는 if 조건\n */\nfunction isNegativeCondition(ifExpr: string): boolean {\n const trimmed = ifExpr.replace(/^\\{\\{|\\}\\}$/g, '').trim();\n return trimmed.startsWith('!') ||\n /\\b(hasError|isError|isLoading|error|Error)\\b/.test(trimmed) ||\n // empty state 패턴: length === 0, total === 0, count === 0 등\n /===\\s*0\\s*(\\)|\\}|$)/.test(trimmed);\n}\n\n/**\n * 상호 배타적 값 분기 판별\n *\n * 여러 if 조건이 같은 변수에 대한 `=== 'value'` 패턴이면 상호 배타적.\n * 예: type === 'basic', type === 'gallery', type === 'card'\n * → 스켈레톤에서 하나만 선택해야 중복 렌더링 방지.\n */\nfunction areMutuallyExclusiveBranches(branches: LayoutComponent[]): boolean {\n if (branches.length < 2) return false;\n\n // 각 조건에서 \"expr === 'value'\" 패턴의 기본 표현식(expr) 추출\n const baseExpressions: string[] = [];\n for (const branch of branches) {\n const trimmed = (branch.if || '').replace(/^\\{\\{|\\}\\}$/g, '').trim();\n // === 'value' 또는 === \"value\" 패턴 찾기\n const match = trimmed.match(/^(.+?)\\s*===\\s*['\"]/);\n if (!match) {\n // || 로 연결된 복합 조건에서도 첫 번째 === 패턴 추출 (fallback 분기)\n const orMatch = trimmed.match(/(.+?)\\s*===\\s*['\"]/);\n if (!orMatch) return false;\n baseExpressions.push(orMatch[1].trim());\n } else {\n baseExpressions.push(match[1].trim());\n }\n }\n\n // 모든 분기가 같은 기본 표현식을 참조하면 상호 배타적\n const first = baseExpressions[0];\n return baseExpressions.every(expr => expr === first);\n}\n\n/**\n * 자손 수 기준 가장 풍부한 분기 선택\n */\nfunction pickRichestBranch(branches: LayoutComponent[]): LayoutComponent {\n return branches.reduce((best, curr) =>\n countDescendants(curr) > countDescendants(best) ? curr : best\n );\n}\n\n/**\n * 컴포넌트 트리의 총 자손 수 계산\n */\nfunction countDescendants(component: LayoutComponent): number {\n if (!component.children) return 0;\n return component.children.length +\n component.children.reduce((sum, child) => sum + countDescendants(child), 0);\n}\n\n/**\n * className 내 {{...}} 표현식 해석\n *\n * 레이아웃 JSON의 className에 {{expr ? 'classA' : 'classB'}} 같은 표현식이 포함될 수 있음.\n * 스켈레톤에서는 데이터가 없으므로 표현식을 평가할 수 없음.\n * → 삼항 연산자의 true 분기 값을 추출하여 적용 (기본값으로 사용).\n * → 단순 표현식(삼항 아닌 경우)은 제거.\n */\nfunction resolveExpressions(className: string): string {\n if (!className.includes('{{')) return className;\n\n return className.replace(/\\{\\{([^}]+)\\}\\}/g, (_, expr: string) => {\n // 삼항 연산자: condition ? 'value1' : 'value2' → value1 추출\n const ternaryMatch = expr.match(/\\?[\\s]*['\"]([^'\"]*)['\"]\\s*:\\s*['\"]/);\n if (ternaryMatch) {\n return ternaryMatch[1];\n }\n // 삼항 아닌 단순 표현식 → 제거\n return '';\n });\n}\n\n/**\n * 스켈레톤 렌더에 적합한 className 변환\n *\n * 1. {{...}} 표현식 해석 (삼항 → true 분기, 단순 표현식 → 제거)\n * 2. 레이아웃 구조 클래스(flex, grid, gap, padding, margin, max-width 등)는 원본 유지.\n * 3. 시각적 클래스(배경색, 텍스트색, 테두리, 그림자 등)는 제거.\n */\nfunction sanitizeClassName(className: string, name: string): string {\n if (!className) return '';\n\n // 시각적 클래스 제거 (표현식/반응형은 renderSkeletonNode에서 이미 해석됨)\n let sanitized = className;\n sanitized = sanitized\n .replace(/\\b(bg-\\S+|text-\\S+|border\\b|border-\\S+|shadow\\S*|ring-\\S+|outline-\\S+|divide-\\S+|opacity-\\S+|font-\\S+|tracking-\\S+|leading-\\S+|whitespace-\\S+|truncate|line-clamp-\\S+|underline|no-underline|decoration-\\S+|cursor-\\S+|hover:\\S+|focus:\\S+|active:\\S+|group-hover:\\S+|transition\\S*|duration-\\S+|ease-\\S+|animate-\\S+|dark:\\S+)\\b/g, '')\n .replace(/\\s{2,}/g, ' ')\n .trim();\n\n // Grid: 숫자 컬럼 수 유지 (arbitrary value [...]는 보존 — extractArbitraryGridCols에서 처리)\n if (name === 'Grid' || /\\bgrid-cols-\\d/.test(sanitized)) {\n sanitized = sanitized.replace(/\\bgrid-cols-(\\d+)/g, (_, val) => {\n const num = parseInt(val);\n return num > 4 ? `grid-cols-${Math.ceil(num / 2)}` : `grid-cols-${num}`;\n });\n }\n\n return sanitized;\n}\n\n/**\n * Flex/Grid 컴포넌트의 레이아웃 props를 Tailwind 클래스로 변환\n *\n * Flex, Grid 컴포넌트는 justify, align, gap 등을 별도 props로 받아\n * 실제 렌더 시 Tailwind 클래스로 변환한다.\n * 스켈레톤은 이 컴포넌트들을 plain
로 대체하므로,\n * props → Tailwind 변환을 여기서 수행하여 className에 병합해야 한다.\n *\n * @since engine-v1.17.0\n */\nfunction resolveLayoutProps(component: LayoutComponent): string {\n const { name, props } = component;\n if (!props || !name) return '';\n\n const classes: string[] = [];\n\n if (name === 'Flex') {\n classes.push('flex');\n\n const direction = props.direction || 'row';\n const directionMap: Record = {\n row: 'flex-row', 'row-reverse': 'flex-row-reverse',\n col: 'flex-col', 'col-reverse': 'flex-col-reverse',\n };\n if (directionMap[direction]) classes.push(directionMap[direction]);\n\n const justify = props.justify || 'start';\n const justifyMap: Record = {\n start: 'justify-start', end: 'justify-end', center: 'justify-center',\n between: 'justify-between', around: 'justify-around', evenly: 'justify-evenly',\n };\n if (justifyMap[justify]) classes.push(justifyMap[justify]);\n\n const align = props.align || 'stretch';\n const alignMap: Record = {\n start: 'items-start', end: 'items-end', center: 'items-center',\n baseline: 'items-baseline', stretch: 'items-stretch',\n };\n if (alignMap[align]) classes.push(alignMap[align]);\n\n const wrap = props.wrap || 'nowrap';\n const wrapMap: Record = {\n wrap: 'flex-wrap', nowrap: 'flex-nowrap', 'wrap-reverse': 'flex-wrap-reverse',\n };\n if (wrapMap[wrap]) classes.push(wrapMap[wrap]);\n\n if (props.gap && props.gap > 0) classes.push(`gap-${props.gap}`);\n }\n\n if (name === 'Grid') {\n classes.push('grid');\n\n const cols = props.cols || 1;\n classes.push(`grid-cols-${cols}`);\n\n if (props.responsive) {\n const r = props.responsive;\n if (r.sm) classes.push(`sm:grid-cols-${r.sm}`);\n if (r.md) classes.push(`md:grid-cols-${r.md}`);\n if (r.lg) classes.push(`lg:grid-cols-${r.lg}`);\n if (r.xl) classes.push(`xl:grid-cols-${r.xl}`);\n if (r['2xl']) classes.push(`2xl:grid-cols-${r['2xl']}`);\n }\n\n if (props.gap !== undefined && props.gap > 0) classes.push(`gap-${props.gap}`);\n if (props.rowGap !== undefined && props.rowGap > 0) classes.push(`gap-y-${props.rowGap}`);\n if (props.colGap !== undefined && props.colGap > 0) classes.push(`gap-x-${props.colGap}`);\n }\n\n return classes.join(' ');\n}\n\n/**\n * 애니메이션 클래스 결정\n */\nfunction getAnimationClass(animation: string): string {\n switch (animation) {\n case 'pulse':\n return 'animate-pulse';\n case 'wave':\n return 'animate-pulse'; // wave는 별도 CSS 필요, pulse로 폴백\n case 'none':\n return '';\n default:\n return 'animate-pulse';\n }\n}\n\n/**\n * 자식 컴포넌트 렌더링 (조건부 분기 필터링 적용)\n */\nfunction renderChildren(\n children: LayoutComponent[] | undefined,\n animClass: string,\n iterCount: number,\n width: number,\n): (React.ReactElement | null)[] {\n if (!children || children.length === 0) return [];\n const filtered = filterChildren(children);\n return filtered.map((child, i) =>\n renderSkeletonNode(child, animClass, iterCount, i, width)\n );\n}\n\n/**\n * 현재 뷰포트에 맞는 className 결정\n *\n * responsive 속성이 있으면 호출자가 전달한 viewport width 기준으로 적절한 className 선택.\n * - desktop (lg, 1024px+): responsive.desktop.props.className\n * - tablet (md, 768px+): responsive.tablet.props.className\n * - 기본: props.className\n *\n * @param width G7Core.useResponsive()로 구독한 viewport width (overrideWidth 반영)\n */\nfunction resolveClassName(component: LayoutComponent, width: number): string {\n const baseClassName = component.props?.className || component.className || '';\n\n if (!component.responsive) return baseClassName;\n\n if (width >= 1024 && component.responsive.desktop?.props?.className) {\n return component.responsive.desktop.props.className;\n }\n if (width >= 768 && component.responsive.tablet?.props?.className) {\n return component.responsive.tablet.props.className;\n }\n\n return baseClassName;\n}\n\n/**\n * Tailwind 반응형 display 클래스를 viewport 기준으로 해석\n *\n * 레이아웃 JSON의 className에 `hidden lg:grid`, `lg:hidden` 같은 Tailwind 반응형 패턴이 포함됨.\n * Tailwind은 빌드 시 CSS로 처리하지만, 스켈레톤은 런타임에서 JS로 해석해야 함.\n *\n * 동작:\n * 1. className에서 display 관련 클래스(hidden, flex, grid 등) + 반응형 접두사(lg:grid 등) 추출\n * 2. Tailwind cascade 규칙 적용: base → sm → md → lg → xl → 2xl 순서로 width에 맞는 display 결정\n * 3. hidden이면 컴포넌트 숨김, 아니면 해석된 display 클래스 + 나머지 클래스 반환\n *\n * @param width G7Core.useResponsive()로 구독한 viewport width (overrideWidth 반영)\n */\nfunction resolveResponsiveDisplay(className: string, width: number): { visible: boolean; className: string } {\n const tokens = className.split(/\\s+/).filter(Boolean);\n\n const displayEntries: Array<{ breakpoint: number; display: string }> = [];\n const otherClasses: string[] = [];\n\n for (const token of tokens) {\n // 반응형 접두사 + display 클래스: \"lg:grid\", \"sm:flex\", \"md:hidden\"\n const responsiveMatch = token.match(/^(sm|md|lg|xl|2xl):(.+)$/);\n if (responsiveMatch) {\n const [, prefix, cls] = responsiveMatch;\n if (DISPLAY_CLASSES.has(cls)) {\n displayEntries.push({\n breakpoint: TAILWIND_BREAKPOINTS[prefix] || 0,\n display: cls,\n });\n continue;\n }\n // 반응형 접두사지만 display가 아닌 클래스 (lg:gap-4 등) → 뷰포트 체크 후 포함\n if ((TAILWIND_BREAKPOINTS[prefix] || 0) <= width) {\n otherClasses.push(cls); // 접두사 제거하고 포함\n }\n continue;\n }\n\n // 기본(접두사 없는) display 클래스: \"hidden\", \"flex\", \"grid\"\n if (DISPLAY_CLASSES.has(token)) {\n displayEntries.push({ breakpoint: 0, display: token });\n continue;\n }\n\n otherClasses.push(token);\n }\n\n // display 클래스가 없으면 그대로 반환\n if (displayEntries.length === 0) {\n return { visible: true, className };\n }\n\n // breakpoint 오름차순 정렬 후 cascade 적용\n displayEntries.sort((a, b) => a.breakpoint - b.breakpoint);\n\n let effectiveDisplay = '';\n for (const entry of displayEntries) {\n if (entry.breakpoint <= width) {\n effectiveDisplay = entry.display;\n }\n }\n\n // 해당 뷰포트에 적용되는 display가 없으면 첫 번째(base) 사용\n if (!effectiveDisplay) {\n effectiveDisplay = displayEntries[0].display;\n }\n\n const visible = effectiveDisplay !== 'hidden';\n const resolvedClassName = visible\n ? [effectiveDisplay, ...otherClasses].join(' ')\n : '';\n\n return { visible, className: resolvedClassName };\n}\n\n/**\n * className에서 arbitrary grid-cols-[...] 값을 추출하여 inline style로 변환\n *\n * Tailwind의 arbitrary value `grid-cols-[60px_minmax(300px,1fr)_160px]`는\n * 빌드 시 동적 표현식({{...}}) 안에 있으면 purge되어 CSS에 포함되지 않음.\n * → inline style `gridTemplateColumns`로 변환하여 런타임에서 직접 적용.\n */\nfunction extractArbitraryGridCols(className: string): { className: string; style?: React.CSSProperties } {\n const match = className.match(/\\bgrid-cols-\\[([^\\]]+)\\]/);\n if (!match) return { className };\n\n const value = match[1].replace(/_/g, ' ');\n const cleanedClassName = className\n .replace(/\\bgrid-cols-\\[([^\\]]+)\\]/, '')\n .replace(/\\s{2,}/g, ' ')\n .trim();\n\n return {\n className: cleanedClassName,\n style: { gridTemplateColumns: value },\n };\n}\n\n/**\n * 단일 컴포넌트를 스켈레톤으로 변환\n */\nfunction renderSkeletonNode(\n component: LayoutComponent,\n animClass: string,\n iterCount: number,\n index: number,\n width: number,\n): React.ReactElement | null {\n const { name, children, iteration } = component;\n // 1. responsive 속성에서 뷰포트에 맞는 className 선택\n const rawClassName = resolveClassName(component, width);\n // 1.5. Flex/Grid 레이아웃 props → Tailwind 클래스 병합\n const layoutClasses = resolveLayoutProps(component);\n const mergedClassName = layoutClasses\n ? `${layoutClasses} ${rawClassName}`.trim()\n : rawClassName;\n // 2. {{...}} 표현식 해석 (삼항 → true 분기)\n const exprResolved = resolveExpressions(mergedClassName);\n // 3. Tailwind 반응형 display 클래스 해석 (hidden lg:grid → grid at desktop)\n const responsive = resolveResponsiveDisplay(exprResolved, width);\n\n if (!name) return null;\n\n // 현재 뷰포트에서 숨겨진 컴포넌트 → 스킵\n if (!responsive.visible) return null;\n\n const className = responsive.className;\n\n // iteration 블록: 기본 반복 횟수만큼 반복 생성\n if (iteration) {\n return (\n \n {Array.from({ length: iterCount }, (_, i) => (\n renderSkeletonNode(\n { ...component, iteration: undefined },\n animClass,\n iterCount,\n i,\n width,\n )\n ))}\n \n );\n }\n\n // 복합 컴포넌트 특화 스켈레톤\n if (COMPOSITE_SKELETONS[name]) {\n return (\n
\n {COMPOSITE_SKELETONS[name](animClass, iterCount)}\n
\n );\n }\n\n // 레이아웃 컨테이너: className 유지, 자식 재귀 순회\n if (LAYOUT_CONTAINERS.has(name)) {\n const sanitized = sanitizeClassName(className, name);\n\n // 자식 없는 leaf 컨테이너 → 스켈레톤 바로 표시\n if (!children || children.length === 0) {\n const hasDimension = /\\b(h-\\S|w-\\S)/.test(sanitized);\n const barClass = hasDimension\n ? `${sanitized} bg-gray-200 dark:bg-gray-700 rounded ${animClass}`\n : `${sanitized} h-3.5 w-full bg-gray-200 dark:bg-gray-700 rounded ${animClass}`.trim();\n return
;\n }\n\n // 자식 렌더링 (조건부 분기 필터링 적용)\n const renderedChildren = renderChildren(children, animClass, iterCount, width);\n const hasContent = renderedChildren.length > 0 && renderedChildren.some(c => c !== null);\n\n // 모든 자식이 필터링됨 (로딩/에러 wrapper 등) → 컨테이너 자체 스킵\n if (!hasContent) return null;\n\n // arbitrary grid-cols-[...] → inline style로 변환\n const gridResult = extractArbitraryGridCols(sanitized);\n\n return (\n
\n {renderedChildren}\n
\n );\n }\n\n // 비-컨테이너 컴포넌트: 원본 className에서 시각적 클래스(색상 등)를 제거\n // 스켈레톤 바의 색상은 고정(gray-200)이므로 원본 bg-red-500 등이 누출되면 안 됨\n const sanitizedLeafClass = sanitizeClassName(className, name);\n\n // 텍스트 컴포넌트: 회색 바\n if (TEXT_COMPONENTS.has(name)) {\n const heightMap: Record = {\n H1: 'h-7', H2: 'h-6', H3: 'h-5', H4: 'h-5', H5: 'h-4', H6: 'h-4',\n P: 'h-3.5', Span: 'h-3', Label: 'h-3', A: 'h-3.5',\n Badge: 'h-5 w-16',\n };\n const widthMap: Record = {\n H1: 'w-3/5', H2: 'w-2/5', H3: 'w-1/3', H4: 'w-1/3', H5: 'w-1/4', H6: 'w-1/4',\n P: 'w-full', Span: 'w-1/4', Label: 'w-1/4', A: 'w-1/3',\n Strong: 'w-1/5', Em: 'w-1/4', Small: 'w-1/5', Badge: 'w-16',\n };\n const height = heightMap[name] || 'h-3.5';\n const width = widthMap[name] || 'w-full';\n const spacing = name.startsWith('H') ? 'mb-2 mt-1' : 'mb-1.5';\n return (\n
\n );\n }\n\n // 인풋 컴포넌트: 사각형\n if (INPUT_COMPONENTS.has(name)) {\n if (name === 'Textarea') {\n return
;\n }\n if (name === 'Checkbox' || name === 'Radio' || name === 'Toggle') {\n return
;\n }\n return
;\n }\n\n // 미디어 컴포넌트: 큰 사각형\n if (MEDIA_COMPONENTS.has(name)) {\n if (name === 'Avatar' || name === 'AvatarUploader') {\n return
;\n }\n if (name === 'ProductImageViewer') {\n return
;\n }\n return
;\n }\n\n // Button: children이 있으면 래퍼(컨테이너)로 처리, 없으면 바\n if (name === 'Button') {\n if (children && children.length > 0) {\n const sanitized = sanitizeClassName(className, name);\n const renderedChildren = renderChildren(children, animClass, iterCount, width);\n const hasContent = renderedChildren.length > 0 && renderedChildren.some(c => c !== null);\n if (!hasContent) return null;\n // 원본 className에 border/rounded가 있으면 실제 버튼 형태 → 스켈레톤 경계 추가\n const hasBorderStyle = /\\b(border|rounded|px-\\d|py-\\d)/.test(rawClassName);\n const borderClass = hasBorderStyle\n ? 'border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 rounded-lg'\n : '';\n return (\n
\n {renderedChildren}\n
\n );\n }\n return
;\n }\n\n // Icon\n if (name === 'Icon') {\n return
;\n }\n\n // 기타: children이 있으면 컨테이너로, 없으면 범용 바\n if (children && children.length > 0) {\n return (\n
\n {renderChildren(children, animClass, iterCount, width)}\n
\n );\n }\n\n // 기본 폴백: 범용 스켈레톤 바\n return
;\n}\n\n/**\n * PageSkeleton — 단일 스켈레톤 렌더러 컴포넌트\n *\n * 엔진이 레이아웃 JSON의 컴포넌트 트리를 props로 전달하면,\n * 재귀적으로 순회하며 각 컴포넌트의 스켈레톤 플레이스홀더를 생성합니다.\n *\n * - 레이아웃 컨테이너(Div, Flex, Grid 등): className 유지, 자식 순회\n * - 텍스트 컴포넌트(H1~H6, P 등): 회색 바\n * - 인풋 컴포넌트(Input, Select 등): 사각형\n * - 미디어 컴포넌트(Img, Avatar 등): 큰 사각형\n * - 복합 컴포넌트(DataGrid, Tabs 등): 특화 스켈레톤\n * - iteration 블록: iteration_count 횟수만큼 반복\n * - 조건부 분기: 로딩/에러 상태 스킵, 콘텐츠 브랜치만 렌더\n *\n * @since engine-v1.24.0\n */\nexport const PageSkeleton: React.FC = ({ components, options }) => {\n const animClass = getAnimationClass(options.animation);\n\n // G7Core.useResponsive를 통해 viewport width 구독 (G7 표준 — 위지윅 overrideWidth 호환)\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive;\n const responsiveValue = useResponsive?.();\n const width = responsiveValue\n ? responsiveValue.width\n : (typeof window !== 'undefined' ? window.innerWidth : 1024);\n\n return (\n \n {renderChildren(components, animClass, options.iteration_count, width)}\n
\n );\n};\n\nexport default PageSkeleton;\n","import React from 'react';\n\n/**\n * 페이지 로딩 컴포넌트 Props (엔진에서 전달)\n *\n * @since engine-v1.29.0\n */\nexport interface PageLoadingProps {\n options?: {\n text?: string;\n };\n}\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n/**\n * 페이지 로딩 인디케이터 컴포넌트\n *\n * transition_overlay의 spinner 스타일에서 사용됩니다.\n * 엔진은 타겟 요소 내부에 빈 컨테이너만 삽입하며,\n * 포지셔닝/배경/z-index/다크모드 등 모든 비주얼 스타일은\n * 이 컴포넌트가 전적으로 결정합니다.\n *\n * React 트리 외부에 렌더링되므로 인라인 스타일 사용.\n *\n * @since engine-v1.29.0\n */\nconst PageLoading: React.FC = ({ options }) => {\n const isDark = document.documentElement.classList.contains('dark');\n\n const bgColor = isDark ? 'rgb(17,24,39)' : 'rgb(249,250,251)';\n const spinnerColor = isDark ? '#6b7280' : '#9ca3af';\n const textColor = isDark ? '#9ca3af' : '#6b7280';\n\n return (\n \n \n \n {options?.text || t('nav.loading')}\n \n
\n );\n};\n\nexport default PageLoading;\n","import React, { useMemo } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\nexport interface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n maxVisiblePages?: number;\n showFirstLast?: boolean;\n className?: string;\n style?: React.CSSProperties;\n prevText?: string;\n nextText?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Pagination 집합 컴포넌트\n *\n * Button + Span 기본 컴포넌트를 조합하여 페이지네이션 UI를 구성합니다.\n * 페이지 번호 생성 알고리즘을 포함하며, 많은 페이지 수에 대해 효율적으로 렌더링합니다.\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"Pagination\",\n * \"props\": {\n * \"currentPage\": \"{{pagination.current}}\",\n * \"totalPages\": \"{{pagination.total}}\",\n * \"maxVisiblePages\": 5,\n * \"showFirstLast\": true\n * }\n * }\n */\nexport const Pagination: React.FC = ({\n currentPage,\n totalPages,\n onPageChange,\n maxVisiblePages = 5,\n showFirstLast = true,\n className = '',\n style,\n prevText,\n nextText,\n id,\n editorAttrs,\n}) => {\n\n // 페이지 번호 생성 알고리즘\n const pageNumbers = useMemo(() => {\n const pages: (number | string)[] = [];\n\n if (totalPages <= maxVisiblePages + 2) {\n // 페이지가 적으면 모두 표시\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n // 페이지가 많으면 축약 표시\n const halfVisible = Math.floor(maxVisiblePages / 2);\n\n let startPage = Math.max(2, currentPage - halfVisible);\n let endPage = Math.min(totalPages - 1, currentPage + halfVisible);\n\n // 시작 또는 끝 근처일 때 조정\n if (currentPage <= halfVisible + 1) {\n endPage = maxVisiblePages;\n } else if (currentPage >= totalPages - halfVisible) {\n startPage = totalPages - maxVisiblePages + 1;\n }\n\n // 첫 페이지\n pages.push(1);\n\n // 시작 생략 부호\n if (startPage > 2) {\n pages.push('...');\n }\n\n // 중간 페이지들\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n\n // 끝 생략 부호\n if (endPage < totalPages - 1) {\n pages.push('...');\n }\n\n // 마지막 페이지\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n }\n\n return pages;\n }, [currentPage, totalPages, maxVisiblePages]);\n\n const handlePageClick = (page: number) => {\n if (page < 1 || page > totalPages || page === currentPage) return;\n onPageChange(page);\n };\n\n const handlePrevious = () => {\n if (currentPage > 1) {\n onPageChange(currentPage - 1);\n }\n };\n\n const handleNext = () => {\n if (currentPage < totalPages) {\n onPageChange(currentPage + 1);\n }\n };\n\n return (\n \n {/* First Button */}\n {showFirstLast && (\n handlePageClick(1)}\n disabled={currentPage === 1}\n className=\"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800\"\n aria-label={t('common.first_page')}\n >\n «\n \n )}\n\n {/* Previous Button */}\n \n {prevText || <>‹}\n \n\n {/* Page Numbers */}\n
\n {pageNumbers.map((page, index) => {\n if (page === '...') {\n return (\n \n ...\n \n );\n }\n\n const pageNum = page as number;\n const isActive = pageNum === currentPage;\n\n return (\n handlePageClick(pageNum)}\n className={`px-3 py-1 text-sm border rounded ${\n isActive\n ? 'bg-blue-500 dark:bg-blue-600 text-white border-blue-500 dark:border-blue-600'\n : 'border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800'\n }`}\n aria-label={t('common.page_n', { n: pageNum })}\n aria-current={isActive ? 'page' : undefined}\n >\n {pageNum}\n \n );\n })}\n
\n\n {/* Next Button */}\n \n {nextText || <>›}\n \n\n {/* Last Button */}\n {showFirstLast && (\n handlePageClick(totalPages)}\n disabled={currentPage === totalPages}\n className=\"px-3 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded hover:bg-gray-100 dark:hover:bg-gray-700 disabled:opacity-50 disabled:cursor-not-allowed text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800\"\n aria-label={t('common.last_page')}\n >\n »\n \n )}\n
\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Form } from '../basic/Form';\nimport { Input } from '../basic/Input';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\nimport { Div } from '../basic/Div';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\nexport interface SearchSuggestion {\n id: string | number;\n text: string;\n}\n\nexport interface SearchBarProps {\n name?: string;\n placeholder?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent) => void;\n onSubmit?: (e: React.FormEvent) => void;\n showButton?: boolean; // true: 검색 버튼 표시, false: 버튼 숨김 (기본값: false)\n suggestions?: SearchSuggestion[];\n onSuggestionClick?: (suggestion: SearchSuggestion) => void;\n showSuggestions?: boolean;\n className?: string;\n style?: React.CSSProperties;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * SearchBar 집합 컴포넌트\n *\n * 검색 입력 필드와 선택적 버튼을 제공하는 검색 바 컴포넌트입니다.\n * Enter 키를 누르면 항상 검색이 실행됩니다.\n *\n * 기본 컴포넌트 조합: Form + Input + Button + Icon + Div + Span\n *\n * @example\n * // 레이아웃 JSON 사용 예시 (버튼 없음)\n * {\n * \"name\": \"SearchBar\",\n * \"props\": {\n * \"placeholder\": \"검색어를 입력하세요\",\n * \"value\": \"{{query.search}}\",\n * \"showButton\": false\n * }\n * }\n *\n * @example\n * // 레이아웃 JSON 사용 예시 (버튼 있음)\n * {\n * \"name\": \"SearchBar\",\n * \"props\": {\n * \"placeholder\": \"검색어를 입력하세요\",\n * \"value\": \"{{query.search}}\",\n * \"showButton\": true\n * }\n * }\n */\nexport const SearchBar: React.FC = ({\n name = 'search',\n placeholder,\n value: controlledValue,\n onChange,\n onSubmit,\n showButton = false,\n suggestions = [],\n onSuggestionClick,\n showSuggestions = false,\n className = '',\n style,\n id,\n editorAttrs,\n}) => {\n // props로 전달된 값이 없으면 다국어 키 사용\n const resolvedPlaceholder = placeholder ?? t('common.search_placeholder');\n\n const [internalValue, setInternalValue] = useState('');\n const [isFocused, setIsFocused] = useState(false);\n const containerRef = React.useRef(null);\n const previousValueRef = React.useRef('');\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n const shouldShowSuggestions = showSuggestions && isFocused && suggestions.length > 0 && value.length > 0;\n\n // controlledValue가 변경될 때 previousValueRef 동기화\n useEffect(() => {\n if (controlledValue !== undefined) {\n previousValueRef.current = controlledValue;\n }\n }, [controlledValue]);\n\n const handleChange = (e: React.ChangeEvent) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n onChange?.(e);\n\n // X 버튼으로 검색어를 지운 경우 감지\n // 이전 값이 있었는데 새 값이 빈 문자열이고, nativeEvent가 없는 경우 = X 버튼 클릭\n if (previousValueRef.current !== '' && newValue === '' && !(e.nativeEvent as any).inputType) {\n // X 버튼 클릭: 자동으로 검색 초기화\n setTimeout(() => {\n const formElement = containerRef.current?.querySelector('form');\n if (formElement) {\n formElement.requestSubmit();\n }\n }, 0);\n }\n\n previousValueRef.current = newValue;\n };\n\n const handleSuggestionClick = (suggestion: SearchSuggestion) => {\n setInternalValue(suggestion.text);\n const syntheticEvent = {\n target: { value: suggestion.text, name },\n } as React.ChangeEvent;\n onChange?.(syntheticEvent);\n onSuggestionClick?.(suggestion);\n setIsFocused(false);\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit?.(e);\n };\n\n return (\n
\n
\n
\n {/* Input wrapper */}\n
\n {/* 검색 아이콘 */}\n
\n \n
\n\n {/* 검색 입력 */}\n setIsFocused(true)}\n onBlur={() => setTimeout(() => setIsFocused(false), 200)}\n placeholder={resolvedPlaceholder}\n className=\"w-full pl-10 pr-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white text-sm\"\n />\n
\n\n {/* 검색 버튼 (showButton=true일 때만 표시) */}\n {showButton && (\n \n {t('common.search')}\n \n )}\n
\n
\n\n {/* 자동완성 제안 목록 */}\n {shouldShowSuggestions && (\n
\n {suggestions.map((suggestion) => (\n handleSuggestionClick(suggestion)}\n >\n
\n \n {suggestion.text}\n
\n
\n ))}\n
\n )}\n
\n );\n};\n","/**\n * AvatarUploader 컴포넌트\n *\n * 프로필 아바타 이미지 업로드를 위한 컴포넌트입니다.\n * - 원형 아바타 UI\n * - 파일 선택 시 즉시 업로드\n * - 업로드/삭제 API 지원\n * - 업로드 오류 표시\n * - 삭제 확인 다이얼로그\n *\n * @module composite/AvatarUploader\n */\n\nimport { useRef, useState, useCallback, useEffect } from 'react';\n\nimport { Div } from '../basic/Div';\nimport { Span } from '../basic/Span';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { Label } from '../basic/Label';\nimport { Input } from '../basic/Input';\nimport { Img } from '../basic/Img';\nimport { Avatar } from './Avatar';\nimport type { EditorAttrs } from '../../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\nexport interface AvatarUploaderProps {\n /** 현재 아바타 URL */\n src?: string;\n /** 이미지 없을 때 표시할 텍스트 (이니셜) */\n fallbackText?: string;\n /** 아바타 크기 */\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n /** 업로드 API 엔드포인트 (기본: /api/me/avatar) */\n uploadEndpoint?: string;\n /** 삭제 API 엔드포인트 (기본: /api/me/avatar) */\n deleteEndpoint?: string;\n /** 업로드 성공 콜백 */\n onUploadSuccess?: (data: { avatar: string; attachment_id: number }) => void;\n /** 업로드 에러 콜백 */\n onUploadError?: (error: Error) => void;\n /** 삭제 성공 콜백 */\n onDeleteSuccess?: () => void;\n /** 삭제 에러 콜백 */\n onDeleteError?: (error: Error) => void;\n /** 삭제 버튼 표시 여부 */\n showDeleteButton?: boolean;\n /** 허용 파일 타입 (기본: image/*) */\n accept?: string;\n /** 최대 파일 크기 (MB, 기본: 5) */\n maxSize?: number;\n /** 추가 CSS 클래스 */\n className?: string;\n /** 업로드 버튼 텍스트 */\n uploadButtonText?: string;\n /** 삭제 버튼 텍스트 */\n deleteButtonText?: string;\n /** 읽기 전용 모드 */\n readOnly?: boolean;\n /** 삭제 확인 다이얼로그 표시 여부 (기본: true) */\n confirmDelete?: boolean;\n /** 삭제 확인 메시지 */\n deleteConfirmMessage?: string;\n /** 업로드 확인 다이얼로그 표시 여부 (기본: true) */\n confirmUpload?: boolean;\n /** 업로드 확인 메시지 */\n uploadConfirmMessage?: string;\n /** 업로드 성공 시 실행할 액션 배열 (G7Core.dispatch) */\n uploadSuccessActions?: Array>;\n /** 업로드 실패 시 실행할 액션 배열 */\n uploadErrorActions?: Array>;\n /** 삭제 성공 시 실행할 액션 배열 */\n deleteSuccessActions?: Array>;\n /** 삭제 실패 시 실행할 액션 배열 */\n deleteErrorActions?: Array>;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\n// AvatarUploader size를 Avatar size로 매핑\n// AvatarUploader는 프로필 편집용으로 더 큰 사이즈 사용\nconst avatarSizeMap: Record = {\n sm: 'md', // AvatarUploader sm → Avatar md (w-10, 40px)\n md: 'lg', // AvatarUploader md → Avatar lg (w-12, 48px)\n lg: 'xl', // AvatarUploader lg → Avatar xl (w-16, 64px)\n xl: '2xl', // AvatarUploader xl → Avatar 2xl (w-24, 96px)\n '2xl': '3xl', // AvatarUploader 2xl → Avatar 3xl (w-32, 128px)\n};\n\nexport function AvatarUploader({\n src,\n fallbackText = 'U',\n size = 'lg',\n uploadEndpoint = '/api/me/avatar',\n deleteEndpoint = '/api/me/avatar',\n onUploadSuccess,\n onUploadError,\n onDeleteSuccess,\n onDeleteError,\n showDeleteButton = true,\n accept = 'image/*',\n maxSize = 5,\n className = '',\n uploadButtonText,\n deleteButtonText,\n readOnly = false,\n confirmDelete = true,\n deleteConfirmMessage,\n confirmUpload = true,\n uploadConfirmMessage,\n uploadSuccessActions,\n uploadErrorActions,\n deleteSuccessActions,\n deleteErrorActions,\n id,\n editorAttrs,\n}: AvatarUploaderProps) {\n const inputRef = useRef(null);\n const [isUploading, setIsUploading] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n // undefined: 초기 상태(props 사용), null: 삭제됨, string: 새 이미지 URL\n const [localAvatarUrl, setLocalAvatarUrl] = useState(undefined);\n const [errorMessage, setErrorMessage] = useState(null);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [showUploadConfirm, setShowUploadConfirm] = useState(false);\n const [pendingFile, setPendingFile] = useState(null);\n const [previewUrl, setPreviewUrl] = useState(null);\n const inputId = useRef(`avatar-upload-${Math.random().toString(36).slice(2, 11)}`).current;\n\n // 파일 선택 시 미리보기 URL 생성\n useEffect(() => {\n if (pendingFile) {\n const url = URL.createObjectURL(pendingFile);\n setPreviewUrl(url);\n return () => URL.revokeObjectURL(url);\n } else {\n setPreviewUrl(null);\n }\n }, [pendingFile]);\n\n // 다국어 텍스트 가져오기\n const t = useCallback((key: string): string => {\n return G7Core?.t?.(key) ?? key;\n }, []);\n\n // CSRF 토큰 가져오기\n const getCsrfToken = useCallback((): string | null => {\n const match = document.cookie.match(/XSRF-TOKEN=([^;]+)/);\n if (match) {\n return decodeURIComponent(match[1]);\n }\n return null;\n }, []);\n\n // 인증 토큰 가져오기 (ApiClient에서 토큰 조회)\n const getAuthToken = useCallback((): string | null => {\n return G7Core?.api?.getToken?.() ?? null;\n }, []);\n\n // 실제 업로드 실행 함수\n const executeUpload = useCallback(async (file: File) => {\n setShowUploadConfirm(false);\n setPendingFile(null);\n setIsUploading(true);\n setErrorMessage(null);\n\n try {\n // FormData 생성\n const formData = new FormData();\n formData.append('avatar', file);\n\n // API 호출\n const csrfToken = getCsrfToken();\n const authToken = getAuthToken();\n const response = await fetch(uploadEndpoint, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n ...(csrfToken && { 'X-XSRF-TOKEN': csrfToken }),\n ...(authToken && { Authorization: `Bearer ${authToken}` }),\n },\n credentials: 'include',\n body: formData,\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.message || t('attachment.upload_failed'));\n }\n\n const data = await response.json();\n const result = data.data || data;\n\n // 로컬 상태 즉시 업데이트 (빠른 피드백)\n if (result.avatar) {\n setLocalAvatarUrl(result.avatar);\n }\n\n onUploadSuccess?.(result);\n G7Core?.toast?.success?.(t('mypage.profile.avatar_uploaded'));\n\n // 액션 props가 있으면 dispatch, 없으면 기본 동작(user 리패치)\n if (uploadSuccessActions?.length) {\n uploadSuccessActions.forEach(action => G7Core?.dispatch?.(action));\n } else {\n G7Core?.refetchDataSource?.('user');\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setErrorMessage(err.message);\n onUploadError?.(err);\n G7Core?.toast?.error?.(err.message);\n\n if (uploadErrorActions?.length) {\n uploadErrorActions.forEach(action => G7Core?.dispatch?.(action));\n }\n } finally {\n setIsUploading(false);\n // 입력 초기화 (같은 파일 재선택 가능)\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n }\n }, [uploadEndpoint, onUploadSuccess, onUploadError, getCsrfToken, getAuthToken, t]);\n\n // 파일 선택 핸들러\n const handleFileChange = useCallback(\n async (event: React.ChangeEvent) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n // 오류 상태 초기화\n setErrorMessage(null);\n\n // 파일 크기 검증\n const maxBytes = maxSize * 1024 * 1024;\n if (file.size > maxBytes) {\n const error = new Error(t('attachment.file_too_large').replace(':max', `${maxSize}MB`));\n setErrorMessage(error.message);\n onUploadError?.(error);\n G7Core?.toast?.error?.(error.message);\n return;\n }\n\n // 파일 타입 검증\n if (accept && !file.type.match(accept.replace('*', '.*'))) {\n const error = new Error(t('attachment.invalid_file_type'));\n setErrorMessage(error.message);\n onUploadError?.(error);\n G7Core?.toast?.error?.(error.message);\n return;\n }\n\n // 확인 다이얼로그 표시 또는 즉시 업로드\n if (confirmUpload) {\n setPendingFile(file);\n setShowUploadConfirm(true);\n } else {\n executeUpload(file);\n }\n },\n [maxSize, accept, onUploadError, confirmUpload, executeUpload, t]\n );\n\n // 삭제 실행 함수\n const executeDelete = useCallback(async () => {\n setShowDeleteConfirm(false);\n setIsDeleting(true);\n setErrorMessage(null);\n\n try {\n const csrfToken = getCsrfToken();\n const authToken = getAuthToken();\n const response = await fetch(deleteEndpoint, {\n method: 'DELETE',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'X-XSRF-TOKEN': csrfToken }),\n ...(authToken && { Authorization: `Bearer ${authToken}` }),\n },\n credentials: 'include',\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.message || t('attachment.delete_failed'));\n }\n\n // 로컬 상태 즉시 업데이트 (빠른 피드백)\n setLocalAvatarUrl(null);\n\n onDeleteSuccess?.();\n G7Core?.toast?.success?.(t('mypage.profile.avatar_deleted'));\n\n // 액션 props가 있으면 dispatch, 없으면 기본 동작(user 리패치)\n if (deleteSuccessActions?.length) {\n deleteSuccessActions.forEach(action => G7Core?.dispatch?.(action));\n } else {\n G7Core?.refetchDataSource?.('user');\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setErrorMessage(err.message);\n onDeleteError?.(err);\n G7Core?.toast?.error?.(err.message);\n\n if (deleteErrorActions?.length) {\n deleteErrorActions.forEach(action => G7Core?.dispatch?.(action));\n }\n } finally {\n setIsDeleting(false);\n }\n }, [deleteEndpoint, onDeleteSuccess, onDeleteError, getCsrfToken, getAuthToken, t]);\n\n // 삭제 버튼 클릭 핸들러 (확인 다이얼로그 표시 또는 즉시 삭제)\n const handleDeleteClick = useCallback(() => {\n if (confirmDelete) {\n setShowDeleteConfirm(true);\n } else {\n executeDelete();\n }\n }, [confirmDelete, executeDelete]);\n\n // 삭제 취소\n const handleDeleteCancel = useCallback(() => {\n setShowDeleteConfirm(false);\n }, []);\n\n // 업로드 취소\n const handleUploadCancel = useCallback(() => {\n setShowUploadConfirm(false);\n setPendingFile(null);\n // 입력 초기화 (같은 파일 재선택 가능)\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n }, []);\n\n // 업로드 확인\n const handleUploadConfirm = useCallback(() => {\n if (pendingFile) {\n executeUpload(pendingFile);\n }\n }, [pendingFile, executeUpload]);\n\n // 로컬 상태 우선 사용: undefined면 props 사용, null이면 삭제됨, string이면 새 이미지\n const currentAvatarUrl = localAvatarUrl === undefined ? src : localAvatarUrl;\n const hasAvatar = !!currentAvatarUrl;\n\n // Avatar 컴포넌트에 전달할 사이즈\n const avatarSize = avatarSizeMap[size] || 'lg';\n\n // 현재 표시 모드 결정\n const isConfirmMode = showDeleteConfirm || showUploadConfirm;\n\n // 버튼 영역 렌더링\n const renderButtons = () => (\n
\n {/* 숨겨진 파일 입력 */}\n \n\n {/* 이미지 없을 때: 이미지 등록 버튼 */}\n {!hasAvatar && (\n \n {isUploading ? (\n \n ) : (\n \n )}\n {uploadButtonText || t('mypage.profile.register_avatar')}\n \n )}\n\n {/* 이미지 있을 때: 변경 + 삭제 버튼 */}\n {hasAvatar && (\n <>\n \n {isUploading ? (\n \n ) : (\n \n )}\n {uploadButtonText || t('common.change')}\n \n\n {showDeleteButton && (\n \n {isDeleting ? (\n \n ) : (\n \n )}\n {deleteButtonText || t('common.delete')}\n \n )}\n \n )}\n
\n );\n\n return (\n
\n {/* 아바타 이미지 - 업로드 확인 시 미리보기 표시 */}\n {showUploadConfirm && previewUrl ? (\n
\n \n
\n
\n ) : (\n \n )}\n\n {/* 버튼/확인 영역 */}\n {!readOnly && (\n
\n {/* 업로드 확인 박스 */}\n {showUploadConfirm && pendingFile && (\n
\n
\n \n \n {uploadConfirmMessage || t('mypage.profile.upload_avatar_confirm')}\n \n
\n
\n {pendingFile.name} ({(pendingFile.size / 1024 / 1024).toFixed(2)}MB)\n
\n
\n \n {isUploading ? (\n \n ) : (\n \n )}\n {t('common.confirm')}\n \n \n {t('common.cancel')}\n \n
\n
\n )}\n\n {/* 삭제 확인 박스 */}\n {showDeleteConfirm && (\n
\n
\n \n \n {deleteConfirmMessage || t('mypage.profile.delete_avatar_confirm')}\n \n
\n
\n \n {isDeleting ? (\n \n ) : (\n \n )}\n {t('common.delete')}\n \n \n {t('common.cancel')}\n \n
\n
\n )}\n\n {/* 기본 모드 - 버튼들 */}\n {!isConfirmMode && renderButtons()}\n
\n )}\n\n {/* 오류 메시지 표시 */}\n {errorMessage && !isConfirmMode && (\n
\n \n {errorMessage}\n
\n )}\n
\n );\n}\n\nexport default AvatarUploader;\n","/**\n * UserInfo 컴포넌트\n *\n * 게시글 작성자 정보를 표시하고 드롭다운 메뉴를 제공하는 통합 컴포넌트입니다.\n * - 작성자 이름, 서브텍스트 표시\n * - 클릭 시 드롭다운 메뉴 (회원인 경우)\n * - 비회원인 경우 배지 표시\n * - 탈퇴한 사용자인 경우 \"탈퇴한 사용자\" 텍스트 표시\n *\n * ## Props 우선순위\n * 명시적으로 전달한 props가 author에서 추출한 값보다 우선합니다.\n * - 이름: text > name > author.name\n * - 사용자 ID: userId > author.id\n * - 비회원 여부: isGuest > author.is_guest\n * - 탈퇴 여부: isWithdrawn || author.status === 'withdrawn'\n *\n * @example\n * // 레이아웃 JSON에서 사용 (author 객체 전달 - 권장)\n * {\n * \"type\": \"composite\",\n * \"name\": \"UserInfo\",\n * \"props\": {\n * \"author\": \"{{post.author}}\",\n * \"subText\": \"{{post.created_at | datetime}}\"\n * }\n * }\n *\n * @example\n * // author와 개별 props 혼합 사용 (개별 props가 우선)\n * {\n * \"type\": \"composite\",\n * \"name\": \"UserInfo\",\n * \"props\": {\n * \"author\": \"{{post.author}}\",\n * \"name\": \"관리자\",\n * \"subText\": \"{{post.created_at | datetime}}\"\n * }\n * }\n * // author.name이 \"홍길동\"이어도 \"관리자\"가 표시됨\n */\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { Icon } from '../basic/Icon';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core 참조\nconst getG7Core = () => (window as any).G7Core;\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n/**\n * 메뉴 항목 설정 인터페이스\n */\nexport interface MenuItemConfig {\n /** 메뉴 항목 식별자 */\n key: string;\n /** 표시 텍스트 */\n label: string;\n /** 아이콘 이름 (선택) */\n icon?: string;\n /** 이동 경로 ({{userId}} 치환 지원) */\n path?: string;\n /** 커스텀 클릭 핸들러 (선택) */\n onClick?: () => void;\n /** 표시 여부 (기본: true) */\n show?: boolean;\n}\n\n/**\n * Author 객체 인터페이스\n */\nexport interface AuthorInfo {\n /** 사용자 ID */\n id?: string | number;\n /** 사용자 UUID */\n uuid?: string;\n /** 사용자 이름 */\n name?: string;\n /** 아바타 URL */\n avatar?: string;\n /** 사용자 상태 */\n status?: 'active' | 'inactive' | 'blocked' | 'withdrawn';\n /** 비회원 여부 */\n is_guest?: boolean;\n}\n\nexport interface UserInfoProps {\n /**\n * 작성자 객체 (권장)\n * API 응답의 author 객체를 그대로 전달하면 됩니다.\n * 개별 props(name, userId 등)가 함께 전달되면 개별 props가 우선합니다.\n */\n author?: AuthorInfo;\n\n /**\n * 사용자 이름 (author.name보다 우선)\n */\n name?: string;\n\n /**\n * 사용자 ID (author.id보다 우선)\n */\n userId?: string | number;\n\n /**\n * 표시할 서브 텍스트 (날짜, 시간 등)\n */\n subText?: string;\n\n /**\n * 서브 텍스트의 title 속성 (tooltip용 원본 datetime)\n */\n subTextTitle?: string;\n\n /**\n * 비회원 여부 (author.is_guest보다 우선)\n * @default false\n */\n isGuest?: boolean;\n\n /**\n * 탈퇴한 사용자 여부 (author.status === 'withdrawn'과 OR 조건)\n * @default false\n */\n isWithdrawn?: boolean;\n\n /**\n * 드롭다운 표시 여부\n * @default true\n */\n showDropdown?: boolean;\n\n /**\n * 프로필 클릭 가능 여부 (드롭다운이 없을 때)\n * @default true\n */\n clickable?: boolean;\n\n /**\n * 사용자 프로필 경로 패턴\n * @default '/users/{userId}'\n */\n profilePath?: string;\n\n /**\n * 추가 className\n */\n className?: string;\n\n /**\n * 레이아웃 방향\n * @default 'vertical'\n */\n layout?: 'vertical' | 'horizontal';\n\n /**\n * 레이아웃 JSON에서 text 속성으로 전달되는 이름\n * name보다 우선순위가 높음\n */\n text?: string;\n\n /**\n * 이벤트 버블링 방지 여부\n * @default false\n */\n stopPropagation?: boolean;\n\n // 메뉴 커스터마이징\n /** 커스텀 메뉴 항목 (지정 시 기본 메뉴 대체) */\n menuItems?: MenuItemConfig[];\n /** 숨길 기본 메뉴 항목 키 배열 */\n hideMenuItems?: string[];\n /** 기본 메뉴에 추가할 항목 */\n appendMenuItems?: MenuItemConfig[];\n\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n// 레이아웃별 컨테이너 클래스\nconst LAYOUT_CLASSES = {\n horizontal: 'flex items-center gap-1.5',\n vertical: 'flex flex-col items-start',\n} as const;\n\n// 기본 메뉴 항목 생성\nconst createDefaultMenuItems = (): MenuItemConfig[] => [\n {\n key: 'view_profile',\n label: t('userinfo.view_profile'),\n icon: 'user',\n path: '/users/{{userId}}',\n },\n {\n key: 'view_posts',\n label: t('userinfo.view_posts'),\n icon: 'file-lines',\n path: '/users/{{userId}}/posts',\n },\n];\n\n/**\n * 서브텍스트 렌더링 컴포넌트\n */\nconst SubText: React.FC<{ text?: string; title?: string }> = ({ text, title }) => {\n if (!text) return null;\n return (\n \n {text}\n \n );\n};\n\n/**\n * UserInfo 컴포넌트\n */\nexport const UserInfo: React.FC = ({\n author,\n name,\n userId,\n subText,\n subTextTitle,\n isGuest = false,\n isWithdrawn = false,\n showDropdown = true,\n clickable = true,\n profilePath = '/users/{userId}',\n className = '',\n layout = 'vertical',\n text,\n stopPropagation = false,\n menuItems,\n hideMenuItems = [],\n appendMenuItems = [],\n id,\n editorAttrs,\n}) => {\n // 명시적 props > author 추출값 순서로 결정\n const actualUserId = userId ?? author?.uuid;\n const actualIsGuest = isGuest || author?.is_guest || false;\n const actualIsWithdrawn = isWithdrawn || author?.status === 'withdrawn';\n\n // 이름 우선순위: text > name > author.name\n // 탈퇴한 사용자는 \"탈퇴한 사용자\" 텍스트 표시\n const actualName = actualIsWithdrawn\n ? t('userinfo.withdrawn_user')\n : (text ?? name ?? author?.name ?? '');\n\n // 드롭다운 상태\n const [showMenu, setShowMenu] = useState(false);\n const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 });\n const containerRef = useRef(null);\n const dropdownRef = useRef(null);\n const buttonRef = useRef(null);\n\n // 프로필 경로 생성\n const actualProfilePath = profilePath.replace('{userId}', String(actualUserId ?? ''));\n\n // 컨테이너 클래스\n const containerClass = `${LAYOUT_CLASSES[layout]} ${className}`;\n\n // 메뉴 외부 클릭 시 닫기 + 스크롤/리사이즈 시 닫기\n useEffect(() => {\n if (!showMenu) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n const isInsideContainer = containerRef.current?.contains(target);\n const isInsideDropdown = dropdownRef.current?.contains(target);\n\n if (!isInsideContainer && !isInsideDropdown) {\n setShowMenu(false);\n }\n };\n\n const handleScrollOrResize = () => setShowMenu(false);\n\n document.addEventListener('mousedown', handleClickOutside);\n window.addEventListener('scroll', handleScrollOrResize, true);\n window.addEventListener('resize', handleScrollOrResize);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n window.removeEventListener('scroll', handleScrollOrResize, true);\n window.removeEventListener('resize', handleScrollOrResize);\n };\n }, [showMenu]);\n\n // 최종 메뉴 항목 계산\n const getMenuItems = useCallback((): MenuItemConfig[] => {\n // 커스텀 메뉴가 지정된 경우 그대로 사용\n if (menuItems && menuItems.length > 0) {\n return menuItems.filter((item) => item.show !== false);\n }\n\n // 기본 메뉴에서 숨길 항목 제거\n const defaultItems = createDefaultMenuItems();\n let items = defaultItems.filter(\n (item) => !hideMenuItems.includes(item.key) && item.show !== false\n );\n\n // 추가 항목 병합\n if (appendMenuItems && appendMenuItems.length > 0) {\n items = [...items, ...appendMenuItems.filter((item) => item.show !== false)];\n }\n\n return items;\n }, [menuItems, hideMenuItems, appendMenuItems]);\n\n // 드롭다운 위치 계산 (뷰포트 기준 fixed 위치 — Portal 사용)\n const updateMenuPosition = useCallback(() => {\n if (buttonRef.current) {\n const buttonRect = buttonRef.current.getBoundingClientRect();\n setMenuPosition({\n top: buttonRect.bottom + 4,\n left: buttonRect.left,\n });\n }\n }, []);\n\n // 메뉴 항목 클릭 핸들러\n const handleMenuItemClick = useCallback((item: MenuItemConfig, e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n setShowMenu(false);\n\n if (item.onClick) {\n item.onClick();\n } else if (item.path) {\n const path = item.path.replace(/\\{\\{userId\\}\\}/g, String(actualUserId ?? ''));\n const g7Core = getG7Core();\n if (g7Core?.navigate) {\n g7Core.navigate(path);\n } else {\n window.location.href = path;\n }\n }\n }, [actualUserId]);\n\n // 클릭 핸들러 (드롭다운 또는 프로필 이동)\n const handleClick = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n\n if (stopPropagation) {\n e.stopPropagation();\n }\n\n // 비회원이거나 userId가 없으면 아무 동작 안 함\n if (actualIsGuest || !actualUserId) {\n return;\n }\n\n // 드롭다운이 활성화된 경우\n if (showDropdown) {\n if (!showMenu) {\n updateMenuPosition();\n }\n setShowMenu((prev) => !prev);\n }\n // 드롭다운이 비활성화되고 클릭 가능한 경우\n else if (clickable) {\n getG7Core()?.navigate?.(actualProfilePath);\n }\n }, [stopPropagation, actualIsGuest, actualUserId, showDropdown, showMenu, updateMenuPosition, clickable, actualProfilePath]);\n\n // 비회원인 경우\n if (actualIsGuest || !actualUserId) {\n return (\n
\n
\n {actualName}\n \n {t('userinfo.guest_badge')}\n \n
\n \n
\n );\n }\n\n // 탈퇴한 사용자인 경우\n if (actualIsWithdrawn) {\n return (\n
\n \n {actualName}\n \n \n
\n );\n }\n\n // 회원인 경우\n const finalMenuItems = getMenuItems();\n // className에 text- 색상 클래스가 있으면 nameButtonClass의 기본 색상을 대체\n const hasCustomColor = /\\btext-\\S+/.test(className);\n const defaultColorClass = hasCustomColor ? '' : 'text-gray-900 dark:text-white';\n const nameButtonClass = (showDropdown || clickable)\n ? `${defaultColorClass} hover:text-blue-600 dark:hover:text-blue-400 cursor-pointer font-medium`.trim()\n : `${defaultColorClass} font-medium`.trim();\n\n return (\n
\n
\n \n {actualName}\n \n \n
\n\n {/* 드롭다운 메뉴 - Portal로 document.body에 fixed 배치 (overflow-hidden 부모 회피) */}\n {showDropdown && showMenu && finalMenuItems.length > 0 && createPortal(\n \n {finalMenuItems.map((item) => (\n handleMenuItemClick(item, e)}\n className=\"flex items-center justify-start gap-2 w-full text-left px-3 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer\"\n data-testid={`menu-item-${item.key}`}\n >\n {item.icon && }\n {item.label}\n \n ))}\n
,\n document.body\n )}\n
\n );\n};\n","import React from 'react';\nimport { Nav } from '../basic/Nav';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\nimport { Div } from '../basic/Div';\nimport { Span } from '../basic/Span';\nimport { Select } from '../basic/Select';\nimport type { EditorAttrs } from '../../types';\n\nexport interface Tab {\n id: string | number;\n label: string;\n iconName?: IconName;\n disabled?: boolean;\n badge?: string | number;\n}\n\nexport interface TabNavigationProps {\n tabs: Tab[];\n activeTabId?: string | number;\n onTabChange?: (tabId: string | number) => void;\n variant?: 'default' | 'pills' | 'underline';\n className?: string;\n style?: React.CSSProperties;\n /** 숨길 탭 ID 목록 (동적 조건부 탭 노출용) */\n hiddenTabIds?: (string | number)[];\n /** 모바일 전환 임계값 (px). 기본값 768 — G7 ResponsiveContext mobile 프리셋과 동일 */\n mobileBreakpoint?: number;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * TabNavigation 집합 컴포넌트\n *\n * 탭 네비게이션을 제공하는 컴포넌트입니다.\n * 여러 탭을 전환할 수 있으며, 아이콘과 뱃지를 지원합니다.\n *\n * 반응형: G7Core.useResponsive() hook으로 화면 너비를 구독하여\n * mobileBreakpoint(기본 768px) 미만일 때 Select 드롭다운으로 자동 전환됩니다.\n * Tailwind hidden md:flex 분기를 사용하지 않으므로 위지윅 편집기의 디바이스 미리보기와도 호환됩니다.\n *\n * **주의**: 이 컴포넌트는 순수 네비게이션 UI만 제공하며,\n * 실제 탭 컨텐츠는 부모 컴포넌트에서 activeTabId를 기반으로 조건부 렌더링해야 합니다.\n *\n * 기본 컴포넌트 조합: Nav + Button + Icon + Div + Span + Select\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"TabNavigation\",\n * \"props\": {\n * \"activeTabId\": 1,\n * \"tabs\": [\n * {\"id\": 1, \"label\": \"프로필\", \"iconName\": \"user\"},\n * {\"id\": 2, \"label\": \"설정\", \"iconName\": \"cog\", \"badge\": 3},\n * {\"id\": 3, \"label\": \"문의내역\", \"iconName\": \"comment\"}\n * ],\n * \"hiddenTabIds\": \"{{_global.modules?.['sirsoft-ecommerce']?.inquiry?.board_slug ? [] : ['inquiries']}}\"\n * }\n * }\n */\nexport const TabNavigation: React.FC = ({\n tabs,\n activeTabId,\n onTabChange,\n variant = 'underline',\n className = '',\n style,\n hiddenTabIds = [],\n mobileBreakpoint = 768,\n id,\n editorAttrs,\n}) => {\n // G7Core.useResponsive를 통해 반응형 상태 구독 (G7 표준)\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive;\n const responsiveValue = useResponsive?.();\n const isMobile = responsiveValue\n ? responsiveValue.width < mobileBreakpoint\n : typeof window !== 'undefined' && window.innerWidth < mobileBreakpoint;\n\n const handleTabClick = (tab: Tab) => {\n if (!tab.disabled && tab.id !== activeTabId) {\n onTabChange?.(tab.id);\n }\n };\n\n const handleSelectChange = (\n e: React.ChangeEvent | { target: { value: string | number } }\n ) => {\n const selectedId = e.target.value;\n const numericId = Number(selectedId);\n const finalId =\n typeof selectedId === 'string' && selectedId !== '' && !Number.isNaN(numericId)\n ? numericId\n : selectedId;\n const selectedTab = tabs.find((tab) => String(tab.id) === String(finalId));\n if (selectedTab) {\n handleTabClick(selectedTab);\n }\n };\n\n const visibleTabs = hiddenTabIds.length > 0\n ? tabs.filter((tab) => !hiddenTabIds.includes(tab.id))\n : tabs;\n\n // 모바일: Select 드롭다운 단일 렌더\n // 데스크톱 분기와 동일하게 id/editorAttrs 를 루트에 spread 해야 레이아웃 편집기가\n // 모바일 디바이스 미리보기에서도 이 노드를 선택/측정할 수 있다(모든 렌더 분기 패리티 —\n // 누락 시 모바일 프리뷰에서 data-editor-* 가 사라져 캔버스에서 선택 불가).\n if (isMobile) {\n return (\n
\n ({\n value: String(tab.id),\n label: tab.badge !== undefined ? `${tab.label} (${tab.badge})` : tab.label,\n disabled: tab.disabled,\n }))}\n className=\"w-full\"\n />\n
\n );\n }\n\n const getTabClasses = (tab: Tab) => {\n const isActive = tab.id === activeTabId;\n const baseClasses =\n 'flex items-center gap-2 px-3 py-2 font-medium text-sm transition-all shrink-0 whitespace-nowrap';\n\n if (tab.disabled) {\n return `${baseClasses} opacity-50 cursor-not-allowed text-gray-400 dark:text-gray-600`;\n }\n\n switch (variant) {\n case 'pills':\n return isActive\n ? `${baseClasses} bg-blue-600 dark:bg-blue-500 text-white rounded-lg`\n : `${baseClasses} text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg`;\n\n case 'underline':\n return isActive\n ? `${baseClasses} text-gray-900 dark:text-white border-b-2 border-gray-900 dark:border-white`\n : `${baseClasses} text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 border-b-2 border-transparent hover:border-gray-300 dark:hover:border-gray-600`;\n\n case 'default':\n default:\n return isActive\n ? `${baseClasses} text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20 border-b-2 border-blue-600 dark:border-blue-400`\n : `${baseClasses} text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 border-b-2 border-transparent`;\n }\n };\n\n const navClasses =\n variant === 'underline'\n ? 'flex gap-0 border-b border-gray-200 dark:border-gray-700'\n : 'flex gap-2';\n\n // 데스크톱: 탭 버튼 단일 렌더\n return (\n
\n \n
\n );\n};\n","// e2e:allow 편집기 ComponentRegistry 등록맵에 SlotContainer 추가(편집기 IIFE 번들 포함 — 헤더 통화 슬롯 렌더). 편집기 캔버스 렌더는 Chrome MCP 라이브 실측 + Vitest 로 검증. 사용자 사이트 런타임 무변경.\n/**\n * sirsoft-basic 템플릿 Composite 컴포넌트 등록\n *\n * 이 파일에서 모든 Composite 컴포넌트를 export합니다.\n * G7Core에서 자동으로 로드하여 레이아웃 JSON에서 사용할 수 있습니다.\n */\n\n// 레이아웃 컴포넌트\nexport { default as Header } from './Header';\nexport { default as Footer } from './Footer';\nexport { default as MobileNav } from './MobileNav';\nexport { NotificationCenter } from './NotificationCenter';\nexport type { NotificationCenterProps, NotificationItem } from './NotificationCenter';\n\n// 상품 관련 컴포넌트\nexport { default as ProductCard } from './ProductCard';\nexport { default as ImageGallery } from './ImageGallery';\nexport { default as ProductImageViewer } from './ProductImageViewer';\nexport { default as QuantitySelector } from './QuantitySelector';\n\n// 게시판 관련 컴포넌트\nexport { default as PostReactions } from './PostReactions';\nexport { default as RichTextEditor } from './RichTextEditor';\nexport { HtmlContent } from './HtmlContent';\nexport { HtmlEditor } from './HtmlEditor';\n\n// 콘텐츠 유틸리티\nexport { ExpandableContent } from './ExpandableContent';\n\n// 공통 컴포넌트\nexport { default as FileUploader } from './FileUploader';\nexport { ConfirmDialog } from './ConfirmDialog';\nexport { default as SocialLoginButtons } from './SocialLoginButtons';\nexport { default as Toast } from './Toast';\nexport { default as PageTransitionIndicator } from './PageTransitionIndicator';\nexport { default as PageTransitionBlur } from './PageTransitionBlur';\nexport { default as PageSkeleton } from './PageSkeleton';\nexport { default as PageLoading } from './PageLoading';\nexport { default as ThemeToggle } from './ThemeToggle';\nexport { Pagination } from './Pagination';\nexport { SearchBar } from './SearchBar';\nexport { Avatar } from './Avatar';\nexport { AvatarUploader } from './AvatarUploader';\nexport { UserInfo } from './UserInfo';\nexport { Modal } from './Modal';\nexport { TabNavigation } from './TabNavigation';\nexport { SlotContainer } from './SlotContainer';\n// AddressSearch는 별도 컴포넌트가 아닌 sirsoft-daum_postcode 플러그인의 extension_point 방식 사용\n\n/**\n * 컴포넌트 등록 맵\n *\n * G7Core 템플릿 엔진에서 레이아웃 JSON의 컴포넌트 이름을\n * 실제 컴포넌트로 매핑할 때 사용합니다.\n *\n * @example\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"Header\",\n * \"props\": { ... }\n * }\n */\nexport const compositeComponents = {\n // 레이아웃\n Header: () => import('./Header'),\n Footer: () => import('./Footer'),\n MobileNav: () => import('./MobileNav'),\n // 슬롯 컨테이너 — 모듈 주입 UI(헤더 통화 셀렉터 등)를 떙겨 렌더. 등록맵 누락 시\n // 편집기 캔버스 IIFE 번들에 포함되지 않아 \"Component not found in bundle\" 로 렌더 실패한다\n // (운영 사이트는 별도 등록 경로라 정상이나 편집기 미리보기에서만 슬롯이 통째로 비는 회귀).\n SlotContainer: () => import('./SlotContainer'),\n NotificationCenter: () => import('./NotificationCenter'),\n\n // 상품\n ProductCard: () => import('./ProductCard'),\n ImageGallery: () => import('./ImageGallery'),\n ProductImageViewer: () => import('./ProductImageViewer'),\n QuantitySelector: () => import('./QuantitySelector'),\n\n // 게시판\n PostReactions: () => import('./PostReactions'),\n RichTextEditor: () => import('./RichTextEditor'),\n HtmlContent: () => import('./HtmlContent'),\n HtmlEditor: () => import('./HtmlEditor'),\n\n // 콘텐츠 유틸리티\n ExpandableContent: () => import('./ExpandableContent'),\n\n // 공통\n FileUploader: () => import('./FileUploader'),\n ConfirmDialog: () => import('./ConfirmDialog'),\n SocialLoginButtons: () => import('./SocialLoginButtons'),\n Toast: () => import('./Toast'),\n PageTransitionIndicator: () => import('./PageTransitionIndicator'),\n PageTransitionBlur: () => import('./PageTransitionBlur'),\n PageSkeleton: () => import('./PageSkeleton'),\n PageLoading: () => import('./PageLoading'),\n ThemeToggle: () => import('./ThemeToggle'),\n Pagination: () => import('./Pagination'),\n SearchBar: () => import('./SearchBar'),\n Avatar: () => import('./Avatar'),\n AvatarUploader: () => import('./AvatarUploader'),\n UserInfo: () => import('./UserInfo'),\n Modal: () => import('./Modal'),\n TabNavigation: () => import('./TabNavigation'),\n // AddressSearch는 sirsoft-daum_postcode 플러그인의 extension_point 방식 사용\n};\n\n/**\n * 컴포넌트 타입 정의 (TypeScript 자동완성용)\n */\nexport type CompositeComponentName = keyof typeof compositeComponents;\n","import React from 'react';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface ContainerProps {\n /**\n * DOM id 속성\n */\n id?: string;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 자식 요소\n */\n children?: React.ReactNode;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Container 컴포넌트\n *\n * 단순한 div 래퍼입니다. id와 className을 지정할 수 있습니다.\n */\nexport const Container: React.FC = ({\n id,\n className,\n style,\n children,\n editorAttrs,\n}) => {\n return (\n
\n {children}\n
\n );\n};\n","import React from 'react';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface GridProps {\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n\n /**\n * Grid 열 개수\n */\n cols?: number;\n\n /**\n * 반응형 열 개수 (브레이크포인트별)\n */\n responsive?: {\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n '2xl'?: number;\n };\n\n /**\n * Gap 크기 (Tailwind 스케일: 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24)\n */\n gap?: number;\n\n /**\n * Row gap (행 간격)\n */\n rowGap?: number;\n\n /**\n * Column gap (열 간격)\n */\n colGap?: number;\n\n /**\n * 자동 행 크기 조정\n */\n autoRows?: 'auto' | 'min' | 'max' | 'fr';\n\n /**\n * 자동 열 크기 조정\n */\n autoCols?: 'auto' | 'min' | 'max' | 'fr';\n\n /**\n * Grid auto-flow 설정\n */\n flow?: 'row' | 'col' | 'dense' | 'row-dense' | 'col-dense';\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 자식 요소\n */\n children?: React.ReactNode;\n\n /**\n * 클릭 이벤트 핸들러\n */\n onClick?: () => void;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Grid 레이아웃 컴포넌트\n *\n * CSS Grid를 활용한 반응형 그리드 시스템을 제공합니다.\n * gap, span, auto-flow 등의 그리드 속성을 제어할 수 있습니다.\n *\n * @example\n * // 기본 3열 그리드\n * \n *
Item 1
\n *
Item 2
\n *
Item 3
\n *
\n *\n * @example\n * // 반응형 그리드\n * \n *
Item 1
\n *
Item 2
\n * \n */\nexport const Grid: React.FC = ({\n id,\n children,\n cols = 1,\n responsive,\n gap,\n rowGap,\n colGap,\n autoRows,\n autoCols,\n flow = 'row',\n className = '',\n style,\n onClick,\n editorAttrs,\n}) => {\n // Tailwind CSS 클래스 생성\n const classes: string[] = ['grid'];\n\n // Grid 열 개수\n if (cols) {\n classes.push(`grid-cols-${cols}`);\n }\n\n // 반응형 그리드\n if (responsive) {\n if (responsive.sm) classes.push(`sm:grid-cols-${responsive.sm}`);\n if (responsive.md) classes.push(`md:grid-cols-${responsive.md}`);\n if (responsive.lg) classes.push(`lg:grid-cols-${responsive.lg}`);\n if (responsive.xl) classes.push(`xl:grid-cols-${responsive.xl}`);\n if (responsive['2xl']) classes.push(`2xl:grid-cols-${responsive['2xl']}`);\n }\n\n // Gap\n if (gap !== undefined && gap > 0) {\n classes.push(`gap-${gap}`);\n }\n\n // Row gap\n if (rowGap !== undefined && rowGap > 0) {\n classes.push(`gap-y-${rowGap}`);\n }\n\n // Column gap\n if (colGap !== undefined && colGap > 0) {\n classes.push(`gap-x-${colGap}`);\n }\n\n // Auto rows\n if (autoRows) {\n const autoRowsMap: Record = {\n auto: 'auto-rows-auto',\n min: 'auto-rows-min',\n max: 'auto-rows-max',\n fr: 'auto-rows-fr',\n };\n classes.push(autoRowsMap[autoRows]);\n }\n\n // Auto columns\n if (autoCols) {\n const autoColsMap: Record = {\n auto: 'auto-cols-auto',\n min: 'auto-cols-min',\n max: 'auto-cols-max',\n fr: 'auto-cols-fr',\n };\n classes.push(autoColsMap[autoCols]);\n }\n\n // Grid flow\n const flowMap: Record = {\n row: 'grid-flow-row',\n col: 'grid-flow-col',\n dense: 'grid-flow-dense',\n 'row-dense': 'grid-flow-row-dense',\n 'col-dense': 'grid-flow-col-dense',\n };\n classes.push(flowMap[flow]);\n\n // 사용자 정의 클래스 추가\n if (className) {\n classes.push(className);\n }\n\n return (\n
\n {children}\n
\n );\n};\n","import React from 'react';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface FlexProps {\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n\n /**\n * Flex 방향\n */\n direction?: 'row' | 'row-reverse' | 'col' | 'col-reverse';\n\n /**\n * Justify content (주축 정렬)\n */\n justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly';\n\n /**\n * Align items (교차축 정렬)\n */\n align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\n\n /**\n * Flex wrap 설정\n */\n wrap?: 'wrap' | 'nowrap' | 'wrap-reverse';\n\n /**\n * Gap 크기 (Tailwind 스케일: 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24)\n */\n gap?: number;\n\n /**\n * Flex grow (자식 요소 확장)\n */\n grow?: boolean | number;\n\n /**\n * Flex shrink (자식 요소 축소)\n */\n shrink?: boolean | number;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 자식 요소\n */\n children?: React.ReactNode;\n\n /**\n * 클릭 이벤트 핸들러\n */\n onClick?: () => void;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Flex 레이아웃 컴포넌트\n *\n * Flexbox를 활용한 유연한 레이아웃을 제공합니다.\n * justify, align, wrap 등의 옵션을 통해 다양한 정렬을 구현할 수 있습니다.\n *\n * @example\n * // 가로 정렬 (가운데 정렬)\n * \n *
Item 1
\n *
Item 2
\n *
\n *\n * @example\n * // 세로 정렬 (양 끝 정렬)\n * \n *
Top
\n *
Bottom
\n *
\n */\nexport const Flex: React.FC = ({\n id,\n children,\n direction = 'row',\n justify = 'start',\n align = 'stretch',\n wrap = 'nowrap',\n gap = 0,\n grow = false,\n shrink = true,\n className = '',\n style,\n onClick,\n editorAttrs,\n}) => {\n // Tailwind CSS 클래스 생성\n const classes: string[] = ['flex'];\n\n // Flex direction\n const directionMap: Record = {\n row: 'flex-row',\n 'row-reverse': 'flex-row-reverse',\n col: 'flex-col',\n 'col-reverse': 'flex-col-reverse',\n };\n classes.push(directionMap[direction]);\n\n // Flex wrap\n const wrapMap: Record = {\n wrap: 'flex-wrap',\n nowrap: 'flex-nowrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n };\n classes.push(wrapMap[wrap]);\n\n // Justify content\n const justifyMap: Record = {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n };\n classes.push(justifyMap[justify]);\n\n // Align items\n const alignMap: Record = {\n start: 'items-start',\n end: 'items-end',\n center: 'items-center',\n baseline: 'items-baseline',\n stretch: 'items-stretch',\n };\n classes.push(alignMap[align]);\n\n // Gap\n if (gap > 0) {\n classes.push(`gap-${gap}`);\n }\n\n // Flex grow\n if (grow === true) {\n classes.push('flex-grow');\n } else if (typeof grow === 'number' && grow > 0) {\n classes.push(`flex-grow-${grow}`);\n }\n\n // Flex shrink\n if (shrink === false) {\n classes.push('shrink-0');\n } else if (shrink === true) {\n classes.push('flex-shrink');\n } else if (typeof shrink === 'number' && shrink > 0) {\n classes.push(`flex-shrink-${shrink}`);\n }\n\n // 사용자 정의 클래스 추가\n if (className) {\n classes.push(className);\n }\n\n return (\n
\n {children}\n
\n );\n};\n","import React from 'react';\nimport { Section as BaseSection } from '../basic/Section';\nimport { Div } from '../basic/Div';\nimport { H2 } from '../basic/H2';\nimport { P } from '../basic/P';\nimport type { EditorAttrs } from '../../types';\n\nexport interface SectionLayoutProps {\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n\n /**\n * 섹션 제목\n */\n title?: string;\n\n /**\n * 섹션 부제목\n */\n subtitle?: string;\n\n /**\n * 패딩 적용\n */\n padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n /**\n * 배경색\n */\n background?: 'none' | 'white' | 'gray' | 'primary' | 'secondary';\n\n /**\n * 최대 너비 제한\n */\n maxWidth?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '4xl' | '6xl' | '7xl' | 'full';\n\n /**\n * 중앙 정렬 여부\n */\n centered?: boolean;\n\n /**\n * 경계선 표시\n */\n border?: boolean;\n\n /**\n * 그림자 효과\n */\n shadow?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n /**\n * 둥근 모서리\n */\n rounded?: boolean;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 자식 요소\n */\n children?: React.ReactNode;\n\n /**\n * 클릭 이벤트 핸들러\n */\n onClick?: () => void;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Section 레이아웃 컴포넌트\n *\n * 시맨틱 구역 분할을 위한 섹션 컴포넌트입니다.\n * 제목, 패딩, 배경색 등 다양한 옵션을 제공합니다.\n *\n * @example\n * // 기본 섹션\n *
\n *

Content here

\n *
\n *\n * @example\n * // 제목이 있는 섹션\n * \n *

User details

\n * \n */\nexport const SectionLayout: React.FC = ({\n id,\n title,\n subtitle,\n children,\n padding = 'md',\n background = 'none',\n maxWidth,\n centered = false,\n border = false,\n shadow = 'none',\n rounded = false,\n className = '',\n style,\n onClick,\n editorAttrs,\n}) => {\n // Tailwind CSS 클래스 생성\n const classes: string[] = [];\n\n // 패딩\n const paddingMap: Record = {\n none: 'p-0',\n sm: 'p-2',\n md: 'p-4',\n lg: 'p-6',\n xl: 'p-8',\n }; \n classes.push(paddingMap[padding]);\n\n // 배경색\n const backgroundMap: Record = {\n none: '',\n white: 'bg-white dark:bg-gray-700',\n gray: 'bg-gray-50 dark:bg-gray-800',\n primary: 'bg-blue-50 dark:bg-blue-900/20',\n secondary: 'bg-gray-50 dark:bg-gray-800',\n };\n if (background !== 'none') {\n classes.push(backgroundMap[background]);\n }\n\n // 최대 너비\n if (maxWidth) {\n const maxWidthMap: Record = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n '2xl': 'max-w-2xl',\n '4xl': 'max-w-4xl',\n '6xl': 'max-w-6xl',\n '7xl': 'max-w-7xl',\n full: 'max-w-full',\n };\n classes.push(maxWidthMap[maxWidth]);\n }\n\n // 중앙 정렬\n if (centered) {\n classes.push('mx-auto');\n }\n\n // 경계선\n if (border) {\n classes.push('border', 'border-gray-200', 'dark:border-gray-700');\n }\n\n // 그림자\n const shadowMap: Record = {\n none: '',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n };\n if (shadow !== 'none') {\n classes.push(shadowMap[shadow]);\n }\n\n // 둥근 모서리\n if (rounded) {\n classes.push('rounded-lg');\n }\n\n // 사용자 정의 클래스 추가\n if (className) {\n classes.push(className);\n }\n\n return (\n \n {/* 제목 영역 */}\n {(title || subtitle) && (\n
\n {title &&

{title}

}\n {subtitle &&

{subtitle}

}\n
\n )}\n\n {/* 콘텐츠 영역 */}\n {children}\n
\n );\n};\n","import React from 'react';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface ThreeColumnLayoutProps {\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n\n /**\n * 왼쪽 영역 너비\n */\n leftWidth?: string;\n\n /**\n * 오른쪽 영역 너비\n */\n rightWidth?: string;\n\n /**\n * 왼쪽 슬롯 컨텐츠\n */\n leftSlot?: React.ReactNode;\n\n /**\n * 가운데 슬롯 컨텐츠\n */\n centerSlot?: React.ReactNode;\n\n /**\n * 오른쪽 슬롯 컨텐츠\n */\n rightSlot?: React.ReactNode;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * ThreeColumnLayout 레이아웃 컴포넌트\n *\n * 3단 레이아웃 구조를 제공하는 기본 layout 컴포넌트입니다.\n * leftWidth, rightWidth를 조절할 수 있으며 각 영역에 슬롯을 제공합니다.\n *\n * @example\n * Left Content
}\n * centerSlot={
Center Content
}\n * rightSlot={
Right Content
}\n * />\n */\nexport const ThreeColumnLayout: React.FC = ({\n id,\n leftWidth = '250px',\n rightWidth = '300px',\n leftSlot,\n centerSlot,\n rightSlot,\n className = '',\n style,\n editorAttrs,\n}) => {\n // 컨테이너 스타일\n const containerClasses = `flex flex-row w-full h-full ${className}`.trim();\n\n // 왼쪽 영역 스타일\n const leftStyle: React.CSSProperties = {\n width: leftWidth,\n flexShrink: 0,\n };\n\n // 가운데 영역 스타일 (남은 공간 차지)\n const centerStyle: React.CSSProperties = {\n flex: 1,\n minWidth: 0, // flex 아이템 오버플로우 방지\n };\n\n // 오른쪽 영역 스타일\n const rightStyle: React.CSSProperties = {\n width: rightWidth,\n flexShrink: 0,\n };\n\n return (\n
\n {/* 왼쪽 영역 */}\n
\n {leftSlot}\n
\n\n {/* 가운데 영역 */}\n
\n {centerSlot}\n
\n\n {/* 오른쪽 영역 */}\n
\n {rightSlot}\n
\n
\n );\n};\n","/**\n * 상품 옵션 선택 관련 핸들러\n *\n * 상품 상세 페이지에서 옵션 선택 및 수량 변경을 처리합니다.\n * DB의 option_groups (문자열 값 배열)과 options (ProductOption 레코드)를 사용합니다.\n *\n * G7Core ActionDispatcher는 커스텀 핸들러를 (action, context) 시그니처로 호출합니다.\n * - action.params: 레이아웃 JSON에서 정의한 params (resolveParams로 이미 해석됨)\n * - context.setState: 컴포넌트 상태 업데이트 함수\n *\n * ⚠️ sequence 내에서 setState 후 다음 액션의 context.data._local은 갱신되지 않음\n * (ActionDispatcher.handleSequence는 state만 동기화, data._local은 미갱신)\n * 따라서 이 핸들러는 newGroupName+newValue를 직접 받아서 currentSelection을 자체 구성합니다.\n */\n\n/**\n * 옵션 그룹 구조 (다국어 지원)\n * API 응답: { name: {ko: \"색상\", en: \"Color\"}, name_localized: \"색상\", values: [...], values_localized: [...] }\n */\ninterface OptionGroup {\n name: string | Record;\n name_localized?: string;\n values: string[] | Array>;\n values_localized?: string[];\n}\n\n/**\n * 옵션 값 항목 (다국어 지원 배열 형식)\n */\ninterface OptionValueItem {\n key: string | Record;\n value: string | Record;\n}\n\n/**\n * ProductOption 레코드\n * option_values: 배열 형식 (신규) 또는 객체 형식 (레거시)\n * option_values_localized: 현재 로케일 값 객체 (신규)\n */\ninterface ProductOptionRecord {\n id: number;\n option_code: string;\n option_values: OptionValueItem[] | Record;\n option_values_localized?: Record;\n option_name: string | Record;\n option_name_localized?: string;\n price_adjustment: number;\n selling_price: number;\n selling_price_formatted: string;\n list_price: number;\n list_price_formatted: string;\n multi_currency_selling_price?: Record;\n multi_currency_list_price?: Record;\n stock_quantity: number;\n is_active: boolean;\n}\n\n/**\n * 추가옵션 선택지 (PublicProductResource.additional_options[].values[])\n */\ninterface AdditionalOptionValue {\n id: number;\n name: string;\n price_adjustment: number;\n is_default: boolean;\n /** 직접입력 허용 — 이 선택지 선택 시 자유 텍스트 입력칸 노출(입력 필수) */\n allow_custom_text?: boolean;\n}\n\n/**\n * 추가옵션 그룹 (PublicProductResource.additional_options[])\n */\ninterface AdditionalOptionGroup {\n id: number;\n name: string;\n is_required: boolean;\n values: AdditionalOptionValue[];\n}\n\n/**\n * 블럭별 추가옵션 선택 상태 (additional_option_id → value_id)\n */\ntype AdditionalOptionSelections = Record;\n\ninterface SelectedItem {\n id: string;\n optionId: number;\n options: Record;\n optionValues: Record;\n quantity: number;\n stock: number;\n unitPrice: number;\n unitPriceFormatted: string;\n totalPrice: number;\n totalPriceFormatted: string;\n multiCurrencyUnitPrice?: Record;\n multiCurrencyTotalPrice?: Record;\n /** 블럭별 추가옵션 선택 (그룹ID → 선택지ID) */\n additionalOptionSelections?: AdditionalOptionSelections;\n /** 블럭별 추가옵션 직접입력 텍스트 (그룹ID → custom_text). allow_custom_text 선택지 한정 */\n additionalOptionCustomTexts?: Record;\n /** 블럭별 추가옵션 추가금 합계 (KRW 기준, 단위당) */\n additionalOptionsTotal?: number;\n}\n\ninterface AddSelectedItemParams {\n productId: number;\n optionGroups: OptionGroup[];\n options: ProductOptionRecord[];\n currentSelection: Record;\n selectedOptionItems: SelectedItem[];\n preferredCurrency: string;\n /** 상품 추가옵션 카탈로그 (기본 선택지 자동 적용용) */\n additionalOptionGroups?: AdditionalOptionGroup[];\n /** sequence 상태 동기화 우회: 방금 선택한 그룹명 */\n newGroupName?: string;\n /** sequence 상태 동기화 우회: 방금 선택한 값 */\n newValue?: string;\n}\n\ninterface UpdateQuantityParams {\n itemIndex: number;\n newQuantity: number;\n selectedOptionItems: SelectedItem[];\n preferredCurrency: string;\n}\n\ninterface SetBlockAdditionalOptionParams {\n itemIndex: number;\n additionalOptionId: number;\n valueId: number | string;\n /** 직접입력 텍스트 입력 시 전달 (value 선택 변경 시에는 미전달) */\n customText?: string;\n selectedOptionItems: SelectedItem[];\n additionalOptionGroups: AdditionalOptionGroup[];\n preferredCurrency: string;\n}\n\n/**\n * G7Core ActionContext (ActionDispatcher에서 전달)\n */\ninterface ActionContext {\n data?: any;\n event?: Event;\n state?: any;\n setState?: (updates: any) => void;\n}\n\n/**\n * G7Core ActionDefinition (커스텀 핸들러 첫 번째 인자)\n */\ninterface ActionDefinition {\n handler: string;\n params?: Record;\n target?: string;\n [key: string]: any;\n}\n\n/**\n * 통화별 포맷팅 설정\n */\nconst CURRENCY_CONFIGS: Record = {\n KRW: { locale: 'ko-KR', decimals: 0 },\n USD: { locale: 'en-US', decimals: 2 },\n JPY: { locale: 'ja-JP', decimals: 0 },\n CNY: { locale: 'zh-CN', decimals: 2 },\n EUR: { locale: 'de-DE', decimals: 2 },\n};\n\n/**\n * 숫자를 통화 형식으로 포맷팅\n */\nfunction formatPrice(amount: number, currencyCode: string = 'KRW'): string {\n if (!Number.isFinite(amount)) return '0';\n const config = CURRENCY_CONFIGS[currencyCode] || CURRENCY_CONFIGS.KRW;\n try {\n return new Intl.NumberFormat(config.locale, {\n style: 'currency',\n currency: currencyCode,\n minimumFractionDigits: config.decimals,\n maximumFractionDigits: config.decimals,\n }).format(amount);\n } catch {\n return amount.toLocaleString() + (currencyCode === 'KRW' ? '원' : '');\n }\n}\n\n/**\n * 다중 통화 총 가격 재계산\n *\n * 추가옵션 추가금(additionalUnitKrw)이 있으면 KRW 환율 기준으로 환산해 각 통화 단가에 가산한다.\n * 추가옵션은 공개 응답에 다통화 컬럼이 없으므로(plan §245) 기본통화(KRW) 단가 비율로 환산한다.\n *\n * @param unitPriceMap 옵션 단가 다통화 맵\n * @param quantity 수량\n * @param additionalUnitKrw 추가옵션 추가금 합계 (KRW 기준, 단위당). 기본 0.\n */\nfunction recalcMultiCurrencyTotal(\n unitPriceMap: Record | undefined,\n quantity: number,\n additionalUnitKrw: number = 0\n): Record | undefined {\n if (!unitPriceMap) return undefined;\n\n // KRW 단가를 환산 기준으로 사용 (옵션의 KRW 단가 대비 타통화 비율)\n const krwUnit = (unitPriceMap.KRW as any)?.value ?? (unitPriceMap.KRW as any)?.price ?? 0;\n\n const result: Record = {};\n for (const [code, data] of Object.entries(unitPriceMap)) {\n // API는 { price, formatted } 형태, 내부는 { value, formatted } 형태 — 둘 다 지원\n const unitValue = (data as any)?.value ?? (data as any)?.price ?? 0;\n // 추가금 통화 환산: KRW 기준 추가금 × (해당통화 단가 / KRW 단가). KRW 자신은 그대로.\n let additionalConverted = 0;\n if (additionalUnitKrw > 0) {\n if (code === 'KRW') {\n additionalConverted = additionalUnitKrw;\n } else if (krwUnit > 0) {\n additionalConverted = (additionalUnitKrw * unitValue) / krwUnit;\n }\n }\n const total = (unitValue + additionalConverted) * quantity;\n result[code] = {\n value: total,\n formatted: formatPrice(total, code),\n };\n }\n return result;\n}\n\n/**\n * 선택된 옵션 항목들의 통화별 합계 포맷 맵을 계산합니다.\n *\n * 레이아웃 \"총 금액\"은 표현식 컨텍스트에서 핸들러를 호출할 수 없으므로(엔진 제약),\n * 합계 금액을 통화별로 미리 포맷해 _local 에 노출한다 → 레이아웃은 단순 조회만 한다.\n * (선택 통화 KRW 고정 결함 D2 해소)\n *\n * @param items 선택된 옵션 항목 목록\n * @returns 통화코드 => { value, formatted } 합계 맵\n */\nfunction buildSelectedTotalMultiCurrency(\n items: SelectedItem[]\n): Record {\n const totals: Record = {};\n for (const item of items) {\n const mc = item?.multiCurrencyTotalPrice;\n if (mc) {\n for (const [code, data] of Object.entries(mc)) {\n const v = (data as any)?.value ?? (data as any)?.price ?? 0;\n totals[code] = (totals[code] ?? 0) + v;\n }\n }\n }\n const result: Record = {};\n for (const [code, value] of Object.entries(totals)) {\n result[code] = { value, formatted: formatPrice(value, code) };\n }\n return result;\n}\n\n/**\n * 블럭의 추가옵션 선택으로부터 추가금 합계(KRW, 단위당)를 계산한다.\n *\n * @param selections 블럭별 추가옵션 선택 (그룹ID → 선택지ID)\n * @param groups 상품 추가옵션 카탈로그\n * @returns 추가금 합계 (KRW)\n */\nfunction computeAdditionalOptionsTotal(\n selections: AdditionalOptionSelections | undefined,\n groups: AdditionalOptionGroup[] | undefined\n): number {\n if (!selections || !groups?.length) return 0;\n let total = 0;\n for (const group of groups) {\n const valueId = selections[group.id];\n if (valueId == null) continue;\n const value = group.values?.find(v => v.id === Number(valueId));\n if (value) total += value.price_adjustment ?? 0;\n }\n return total;\n}\n\n/**\n * 추가옵션 선택을 백엔드 입력 형식으로 변환한다.\n * additional_option_selections: [{ additional_option_id, value_id }]\n *\n * @param selections 블럭별 추가옵션 선택 (그룹ID → 선택지ID)\n * @param customTexts 블럭별 직접입력 텍스트 (그룹ID → custom_text)\n * @returns 백엔드 입력 배열\n */\nexport function toAdditionalOptionSelectionsPayload(\n selections: AdditionalOptionSelections | undefined,\n customTexts?: Record\n): Array<{ additional_option_id: number; value_id: number; custom_text?: string }> {\n if (!selections) return [];\n return Object.entries(selections)\n .filter(([, valueId]) => valueId != null)\n .map(([groupId, valueId]) => {\n const entry: { additional_option_id: number; value_id: number; custom_text?: string } = {\n additional_option_id: Number(groupId),\n value_id: Number(valueId),\n };\n const customText = customTexts?.[Number(groupId)];\n if (typeof customText === 'string' && customText.trim() !== '') {\n entry.custom_text = customText.trim();\n }\n return entry;\n });\n}\n\n/**\n * 옵션 그룹의 키 (name_localized 우선, 폴백으로 name)\n */\nfunction getGroupKey(group: OptionGroup): string {\n if (group.name_localized) return group.name_localized;\n if (typeof group.name === 'string') return group.name;\n return (group.name as Record)?.ko ?? '';\n}\n\n/**\n * option_values에서 특정 그룹 키의 값 추출\n * 배열 형식(신규)과 객체 형식(레거시) 모두 지원\n */\nfunction getOptionValueByGroupKey(\n optionValues: OptionValueItem[] | Record,\n optionValuesLocalized: Record | undefined,\n groupKey: string\n): string | undefined {\n // option_values_localized가 있으면 우선 사용\n if (optionValuesLocalized && groupKey in optionValuesLocalized) {\n return optionValuesLocalized[groupKey];\n }\n\n // 배열 형식 (신규)\n if (Array.isArray(optionValues)) {\n const item = optionValues.find(v => {\n if (typeof v.key === 'string') return v.key === groupKey;\n return (v.key as Record)?.ko === groupKey || Object.values(v.key).includes(groupKey);\n });\n if (item) {\n if (typeof item.value === 'string') return item.value;\n return (item.value as Record)?.ko ?? Object.values(item.value)[0];\n }\n return undefined;\n }\n\n // 객체 형식 (레거시)\n return optionValues[groupKey];\n}\n\n/**\n * option_values를 Record 형식으로 변환\n * SelectedItem.optionValues 저장용 (현재 로케일 값으로 변환)\n */\nfunction convertOptionValuesToRecord(\n optionValues: OptionValueItem[] | Record,\n optionValuesLocalized?: Record\n): Record {\n // option_values_localized가 있으면 우선 사용\n if (optionValuesLocalized) {\n return optionValuesLocalized;\n }\n\n // 이미 객체 형식이면 그대로 반환\n if (!Array.isArray(optionValues)) {\n return optionValues;\n }\n\n // 배열 형식을 객체로 변환\n const result: Record = {};\n for (const item of optionValues) {\n const key = typeof item.key === 'string'\n ? item.key\n : (item.key as Record)?.ko ?? Object.values(item.key)[0] ?? '';\n const value = typeof item.value === 'string'\n ? item.value\n : (item.value as Record)?.ko ?? Object.values(item.value)[0] ?? '';\n if (key) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * 현재 선택된 값으로 매칭되는 ProductOption 찾기\n * name_localized를 키로 사용하여 선택값과 비교\n */\nfunction findMatchingOption(\n optionGroups: OptionGroup[],\n currentSelection: Record,\n options: ProductOptionRecord[]\n): ProductOptionRecord | undefined {\n return options.find(opt => {\n if (!opt?.option_values || !opt?.is_active) return false;\n return optionGroups.every(group => {\n const groupKey = getGroupKey(group);\n const selectedValue = currentSelection?.[groupKey];\n const optValue = getOptionValueByGroupKey(\n opt.option_values,\n opt.option_values_localized,\n groupKey\n );\n return optValue === selectedValue;\n });\n });\n}\n\n/**\n * 옵션 선택 완료 시 selectedItems에 추가\n *\n * 모든 옵션 그룹이 선택되면 매칭되는 ProductOption을 찾아 선택 목록에 추가합니다.\n * 동일한 옵션 조합이 이미 있으면 토스트 알림 + 선택 초기화합니다.\n *\n * ⚠️ sequence 내 setState 후 context.data._local이 갱신되지 않는 G7Core 한계 때문에\n * newGroupName + newValue를 직접 받아서 currentSelection을 자체 병합합니다.\n *\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function addSelectedItemIfCompleteHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as AddSelectedItemParams;\n if (!params) return;\n\n const { optionGroups, options, selectedOptionItems, preferredCurrency } = params;\n\n // sequence 내 setState 미반영 대응: newGroupName/newValue가 있으면 직접 병합\n let currentSelection: Record;\n if (params.newGroupName && params.newValue) {\n currentSelection = {\n ...(params.currentSelection ?? {}),\n [params.newGroupName]: params.newValue,\n };\n } else {\n currentSelection = params.currentSelection ?? {};\n }\n\n // 모든 옵션 그룹이 선택되었는지 확인 (name_localized 키 사용)\n const allSelected = optionGroups?.every(group => {\n const groupKey = getGroupKey(group);\n return currentSelection?.[groupKey];\n });\n if (!allSelected) return;\n\n // 매칭되는 ProductOption 찾기\n const matchedOption = findMatchingOption(optionGroups, currentSelection, options ?? []);\n if (!matchedOption) {\n context.setState?.({ currentSelection: {}, __mergeMode: 'shallow' });\n return;\n }\n\n // 옵션 키 (중복 확인용) - name_localized 키 사용\n const optionKey = optionGroups.map(g => currentSelection[getGroupKey(g)]).join('_');\n const items = selectedOptionItems ?? [];\n const existing = items.find(item => item.id === optionKey);\n\n if (existing) {\n // 이미 추가된 옵션 → 토스트 알림 + 선택 초기화\n const G7Core = (window as any).G7Core;\n G7Core?.toast?.warning?.(G7Core?.t?.('sirsoft-ecommerce.shop.already_added_option') ?? '이미 추가된 옵션입니다.');\n context.setState?.({ currentSelection: {}, __mergeMode: 'shallow' });\n return;\n }\n\n // 새 옵션 조합 추가\n const unitPrice = matchedOption.selling_price ?? 0;\n const optionLabels: Record = {};\n optionGroups.forEach(group => {\n const groupKey = getGroupKey(group);\n optionLabels[groupKey] = currentSelection[groupKey];\n });\n\n // 추가옵션 초기 선택: 필수(is_required) 그룹에 한해 기본 선택지(is_default)를 자동 적용한다.\n // 비필수 그룹은 \"선택하세요\" 미선택 상태를 유지해야 한다 — 추가옵션 선택지는 라디오 방식이라\n // 그룹당 1개가 항상 is_default 로 마킹되므로(관리자 폼이 첫 선택지를 기본으로 시드), 비필수까지\n // 자동 적용하면 사용자가 원치 않은 추가금/선택이 강제로 붙는다.\n const additionalOptionGroups = params.additionalOptionGroups ?? [];\n const additionalOptionSelections: AdditionalOptionSelections = {};\n for (const group of additionalOptionGroups) {\n if (!group.is_required) continue;\n const defaultValue = group.values?.find(v => v.is_default);\n if (defaultValue) additionalOptionSelections[group.id] = defaultValue.id;\n }\n const additionalOptionsTotal = computeAdditionalOptionsTotal(\n additionalOptionSelections,\n additionalOptionGroups\n );\n\n const blockUnitTotal = unitPrice + additionalOptionsTotal;\n\n const newItem: SelectedItem = {\n id: optionKey,\n optionId: matchedOption.id,\n options: optionLabels,\n optionValues: convertOptionValuesToRecord(\n matchedOption.option_values,\n matchedOption.option_values_localized\n ),\n quantity: 1,\n stock: matchedOption.stock_quantity ?? 999,\n unitPrice,\n unitPriceFormatted: formatPrice(unitPrice, preferredCurrency),\n totalPrice: blockUnitTotal,\n totalPriceFormatted: formatPrice(blockUnitTotal, preferredCurrency),\n multiCurrencyUnitPrice: matchedOption.multi_currency_selling_price,\n multiCurrencyTotalPrice: recalcMultiCurrencyTotal(\n matchedOption.multi_currency_selling_price as any,\n 1,\n additionalOptionsTotal\n ),\n additionalOptionSelections,\n additionalOptionsTotal,\n };\n\n const nextItems = [...items, newItem];\n context.setState?.({\n selectedOptionItems: nextItems,\n selectedTotalMultiCurrency: buildSelectedTotalMultiCurrency(nextItems),\n currentSelection: {},\n __mergeMode: 'shallow',\n });\n}\n\n/**\n * 선택된 상품의 수량 변경 및 가격 재계산\n *\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function updateSelectedItemQuantityHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as UpdateQuantityParams;\n if (!params) return;\n\n const { selectedOptionItems, preferredCurrency } = params;\n // $args[0]이 문자열로 전달될 수 있으므로 Number 변환\n const itemIndex = Number(params.itemIndex) || 0;\n const newQuantity = Number(params.newQuantity) || 1;\n\n const updatedItems = (selectedOptionItems ?? []).map((item, idx) => {\n if (idx !== itemIndex) return item;\n\n const unitPrice = item?.unitPrice ?? 0;\n const additionalOptionsTotal = item?.additionalOptionsTotal ?? 0;\n const totalPrice = (unitPrice + additionalOptionsTotal) * newQuantity;\n return {\n ...item,\n quantity: newQuantity,\n totalPrice,\n totalPriceFormatted: formatPrice(totalPrice, preferredCurrency),\n multiCurrencyTotalPrice: recalcMultiCurrencyTotal(\n item?.multiCurrencyUnitPrice,\n newQuantity,\n additionalOptionsTotal\n ),\n };\n });\n\n context.setState?.({\n selectedOptionItems: updatedItems,\n selectedTotalMultiCurrency: buildSelectedTotalMultiCurrency(updatedItems),\n });\n}\n\n/**\n * 블럭별 추가옵션 선택 변경 및 가격 재계산\n *\n * 특정 옵션 블럭의 추가옵션 그룹 선택을 갱신하고, 추가금 합계·소계·다통화를 재계산한다.\n * 가격 표시는 클라이언트 계산이며 결제금액 SSoT 는 서버(plan D13).\n *\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function setBlockAdditionalOptionHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as SetBlockAdditionalOptionParams;\n if (!params) return;\n\n const { selectedOptionItems, additionalOptionGroups, preferredCurrency } = params;\n const itemIndex = Number(params.itemIndex) || 0;\n const additionalOptionId = Number(params.additionalOptionId);\n // customText 키가 params 에 존재하면 직접입력 모드 (value 선택 변경 아님)\n const isCustomTextMode = Object.prototype.hasOwnProperty.call(params, 'customText');\n // 빈 문자열(플레이스홀더) 선택 시 해당 그룹 선택 해제\n const valueId = params.valueId === '' || params.valueId == null ? null : Number(params.valueId);\n\n const updatedItems = (selectedOptionItems ?? []).map((item, idx) => {\n if (idx !== itemIndex) return item;\n\n const selections: AdditionalOptionSelections = { ...(item.additionalOptionSelections ?? {}) };\n const customTexts: Record = { ...(item.additionalOptionCustomTexts ?? {}) };\n\n if (isCustomTextMode) {\n // 직접입력 모드: 텍스트만 갱신 (선택 value 는 유지)\n const text = String(params.customText ?? '');\n if (text.trim() === '') {\n delete customTexts[additionalOptionId];\n } else {\n customTexts[additionalOptionId] = text;\n }\n } else if (valueId == null) {\n // 그룹 선택 해제 → 선택·직접입력 모두 정리\n delete selections[additionalOptionId];\n delete customTexts[additionalOptionId];\n } else {\n selections[additionalOptionId] = valueId;\n // 새 선택지가 직접입력을 허용하지 않으면 기존 직접입력 텍스트 정리\n const group = (additionalOptionGroups ?? []).find((g) => g.id === additionalOptionId);\n const value = group?.values?.find((v) => v.id === valueId);\n if (!value?.allow_custom_text) {\n delete customTexts[additionalOptionId];\n }\n }\n\n const additionalOptionsTotal = computeAdditionalOptionsTotal(selections, additionalOptionGroups);\n const unitPrice = item?.unitPrice ?? 0;\n const quantity = item?.quantity ?? 1;\n const totalPrice = (unitPrice + additionalOptionsTotal) * quantity;\n\n return {\n ...item,\n additionalOptionSelections: selections,\n additionalOptionCustomTexts: customTexts,\n additionalOptionsTotal,\n totalPrice,\n totalPriceFormatted: formatPrice(totalPrice, preferredCurrency),\n multiCurrencyTotalPrice: recalcMultiCurrencyTotal(\n item?.multiCurrencyUnitPrice,\n quantity,\n additionalOptionsTotal\n ),\n };\n });\n\n context.setState?.({\n selectedOptionItems: updatedItems,\n selectedTotalMultiCurrency: buildSelectedTotalMultiCurrency(updatedItems),\n });\n}\n\n/**\n * 선택된 옵션 항목을 제거하고 통화별 합계를 재계산합니다.\n *\n * 레이아웃에서 filter 로 직접 제거하면 selectedTotalMultiCurrency(통화별 합계 포맷)를\n * 갱신할 수 없어(표현식은 핸들러 호출 불가) stale 합계가 남는다. 제거도 핸들러로 처리해\n * 합계 맵을 함께 재계산한다(D2).\n *\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function removeSelectedItemHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as { itemIndex?: number | string; selectedOptionItems?: SelectedItem[] };\n if (!params) return;\n\n const itemIndex = Number(params.itemIndex) || 0;\n const nextItems = (params.selectedOptionItems ?? []).filter((_, idx) => idx !== itemIndex);\n\n context.setState?.({\n selectedOptionItems: nextItems,\n selectedTotalMultiCurrency: buildSelectedTotalMultiCurrency(nextItems),\n });\n}\n\n/**\n * 옵션 없는 상품의 수량을 변경하고 통화별 총액 포맷 맵을 재계산합니다.\n *\n * 옵션 없는 상품 총액 = 단가 × 수량. 레이아웃 표현식은 핸들러를 호출할 수 없어\n * 통화별 포맷(소수점/기호)을 만들 수 없으므로, 수량 변경 시 통화별 총액 formatted 를\n * noOptionTotalMultiCurrency 에 미리 계산해 노출한다(KRW 고정 결함 D3 해소).\n *\n * @param action.params.newQuantity 변경 수량\n * @param action.params.multiCurrencyUnitPrice 단가 통화맵(product.multi_currency_selling_price)\n * G7Core에서 (action: ActionDefinition, context: ActionContext) 시그니처로 호출됩니다.\n */\nexport function updateNoOptionQuantityHandler(\n action: ActionDefinition,\n context: ActionContext\n): void {\n const params = action.params as {\n newQuantity?: number | string;\n multiCurrencyUnitPrice?: Record;\n };\n if (!params) return;\n\n const quantity = Math.max(1, Number(params.newQuantity) || 1);\n\n context.setState?.({\n noOptionQuantity: quantity,\n noOptionTotalMultiCurrency: recalcMultiCurrencyTotal(\n params.multiCurrencyUnitPrice as Record | undefined,\n quantity\n ),\n });\n}","/**\n * 장바구니 관련 핸들러\n *\n * 장바구니 페이지에서 상품 선택, 옵션 변경, 삭제 등을 처리합니다.\n *\n * 핸들러 시그니처: ActionDispatcher의 ActionHandler 형식을 따름\n * (action: ActionDefinition, context: ActionContext) => void | Promise\n *\n * G7Core API 사용:\n * - G7Core.state.setLocal() - 로컬 상태 설정\n * - G7Core.state.getLocal() - 로컬 상태 조회\n * - G7Core.toast?.show() - 토스트 표시\n * - G7Core.t() - 번역\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:Cart')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:Cart]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:Cart]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:Cart]', ...args),\n};\n\n/**\n * 로컬 상태 설정 헬퍼\n */\nfunction setLocalState(updates: Record): void {\n const G7Core = (window as any).G7Core;\n if (G7Core?.state?.setLocal) {\n G7Core.state.setLocal(updates);\n logger.log('Local state updated:', updates);\n } else {\n logger.warn('G7Core.state.setLocal not available');\n }\n}\n\n/**\n * 로컬 상태 조회 헬퍼\n */\nfunction getLocalState(): Record {\n const G7Core = (window as any).G7Core;\n return G7Core?.state?.getLocal?.() || {};\n}\n\n/**\n * 전역 상태 조회 헬퍼\n */\nfunction getGlobalState(): Record {\n const G7Core = (window as any).G7Core;\n return G7Core?.state?.get?.() || {};\n}\n\n/**\n * 토스트 표시 헬퍼\n */\nfunction showToast(message: string, type: 'success' | 'error' | 'warning' | 'info' = 'info'): void {\n const G7Core = (window as any).G7Core;\n if (G7Core?.toast?.show) {\n G7Core.toast.show(message, type);\n } else {\n logger.warn('G7Core.toast.show not available, message:', message);\n }\n}\n\n/**\n * 번역 헬퍼\n */\nfunction t(key: string): string {\n const G7Core = (window as any).G7Core;\n if (G7Core?.t) {\n return G7Core.t(key);\n }\n return key;\n}\n\n/**\n * 장바구니 데이터소스 재조회 헬퍼\n *\n * 선택된 상품 기준으로 계산 결과를 갱신합니다.\n * selected_ids 파라미터를 전달하여 선택된 아이템만 계산합니다.\n */\nfunction refetchCartItems(): void {\n const G7Core = (window as any).G7Core;\n if (G7Core?.dispatch) {\n const localState = getLocalState();\n const selectedItems = localState.selectedItems || [];\n\n G7Core.dispatch({\n handler: 'refetchDataSource',\n params: {\n dataSourceId: 'cartItems',\n },\n });\n logger.log('Refetching cartItems with selected_ids:', selectedItems);\n } else {\n logger.warn('G7Core.dispatch not available');\n }\n}\n\n/**\n * 장바구니 개별 상품 선택/해제\n *\n * 체크박스 상태 변경 시 selectedItems 배열을 업데이트하고,\n * 선택된 상품 기준으로 주문 계산을 다시 요청합니다.\n *\n * @param action 액션 정의 (params에 itemId, selectedItems 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function toggleCartItemSelectionHandler(\n action?: any,\n _context?: any\n): void {\n const { itemId, selectedItems } = action?.params || {};\n const currentSelected = selectedItems || [];\n\n let newSelected: number[];\n if (currentSelected.includes(itemId)) {\n // 이미 선택되어 있으면 제거\n newSelected = currentSelected.filter((id: number) => id !== itemId);\n } else {\n // 선택되어 있지 않으면 추가\n newSelected = [...currentSelected, itemId];\n }\n\n // 전체 선택 상태도 업데이트\n const globalState = getGlobalState();\n const allItems = globalState.cartItems?.data?.items || [];\n const allSelected = allItems.length > 0 && newSelected.length === allItems.length;\n\n setLocalState({\n selectedItems: newSelected,\n allSelected,\n selectedCount: newSelected.length,\n });\n\n // 선택 변경 후 계산 결과 갱신을 위해 데이터소스 재조회\n refetchCartItems();\n}\n\n/**\n * 장바구니 전체 선택/해제\n *\n * 전체 선택 체크박스 상태 변경 시 모든 상품을 선택하거나 해제하고,\n * 선택된 상품 기준으로 주문 계산을 다시 요청합니다.\n *\n * @param action 액션 정의 (params에 allItemIds, isSelected 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function selectAllCartItemsHandler(\n action?: any,\n _context?: any\n): void {\n const { allItemIds, isSelected } = action?.params || {};\n\n setLocalState({\n selectedItems: isSelected ? allItemIds : [],\n allSelected: isSelected,\n selectedCount: isSelected ? allItemIds.length : 0,\n });\n\n // 선택 변경 후 계산 결과 갱신을 위해 데이터소스 재조회\n refetchCartItems();\n}\n\n/**\n * 옵션 변경 모달에서 옵션 값 설정\n *\n * 옵션 선택 시 selectedOptions 상태를 업데이트합니다.\n *\n * @param action 액션 정의 (params에 optionName, optionValue 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function setCartOptionHandler(\n action?: any,\n _context?: any\n): void {\n const { optionName, optionValue } = action?.params || {};\n const localState = getLocalState();\n const currentOptions = localState.selectedOptions || {};\n\n setLocalState({\n selectedOptions: {\n ...currentOptions,\n [optionName]: optionValue,\n },\n });\n}\n\n/**\n * 삭제 확인 모달 열기\n *\n * 선택된 상품 삭제 버튼 클릭 시 삭제 확인 모달을 엽니다.\n *\n * @param action 액션 정의 (params에 targetIds 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function openCartDeleteModalHandler(\n action?: any,\n _context?: any\n): void {\n const { targetIds } = action?.params || {};\n\n if (!targetIds || targetIds.length === 0) {\n showToast(t('shop.cart.select_items_to_delete'), 'warning');\n return;\n }\n\n setLocalState({\n deleteModal: {\n visible: true,\n targetIds,\n },\n });\n}\n\n/**\n * 옵션 변경 모달 열기\n *\n * 상품 옵션 변경 버튼 클릭 시 옵션 변경 모달을 엽니다.\n *\n * @param action 액션 정의 (params에 targetItem 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function openCartOptionModalHandler(\n action?: any,\n _context?: any\n): void {\n const { targetItem } = action?.params || {};\n\n setLocalState({\n optionModal: {\n visible: true,\n targetItem,\n },\n selectedOptions: targetItem?.options || {},\n selectedQuantity: targetItem?.quantity,\n });\n}\n\n/**\n * 장바구니 아이템 선택 후 계산 갱신 요청\n *\n * 선택된 아이템이 변경되면 서버에 계산 요청을 보냅니다.\n *\n * @param action 액션 정의 (params에 selectedItems 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function recalculateCartHandler(\n action?: any,\n _context?: any\n): void {\n const { selectedItems } = action?.params || {};\n\n if (!selectedItems || selectedItems.length === 0) {\n setLocalState({ isCalculating: false });\n return;\n }\n\n setLocalState({ isCalculating: true });\n\n // 계산은 cartItems 데이터 소스 refetch로 처리됨\n // 추가 API 호출이 필요한 경우 여기서 처리\n}\n","/**\n * 장바구니 옵션 변경 관련 핸들러\n *\n * 장바구니 옵션 변경 모달에서 옵션 선택 및 매칭을 처리합니다.\n *\n * 핸들러 시그니처: ActionDispatcher의 ActionHandler 형식을 따름\n * (action: ActionDefinition, context: ActionContext) => void | Promise | any\n *\n * ⚠️ 중요: 커스텀 핸들러에서 dispatch({ target: 'local' })를 사용하면\n * 핸들러 실행 컨텍스트의 _local에 저장됩니다. iteration 내부에서 호출되면\n * 페이지 레벨 _local과 다른 스코프에 저장됩니다.\n *\n * 해결책: 핸들러가 결과를 반환하고, 레이아웃의 onSuccess에서 setState 실행\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:CartOptionChange')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:CartOptionChange]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:CartOptionChange]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:CartOptionChange]', ...args),\n};\n\n/**\n * 옵션 그룹 구조 (다국어 지원)\n * API 응답: { name: {ko: \"색상\", en: \"Color\"}, name_localized: \"색상\", values: [...], values_localized: [...] }\n */\ninterface OptionGroup {\n name: string | Record;\n name_localized?: string;\n values: string[] | Array>;\n values_localized?: string[];\n}\n\n/**\n * 옵션 값 항목 (다국어 지원 배열 형식)\n */\ninterface OptionValueItem {\n key: string | Record;\n value: string | Record;\n}\n\ninterface ProductOption {\n id: number;\n option_values: OptionValueItem[] | Record;\n option_values_localized?: Record;\n option_name: string | Record;\n option_name_localized?: string;\n selling_price_formatted: string;\n stock_quantity: number;\n}\n\ninterface InitCartOptionResult {\n selectedOptions: Record;\n matchedOption: ProductOption | null;\n}\n\n/**\n * 옵션 그룹의 키 (name_localized 우선, 폴백으로 name)\n */\nfunction getGroupKey(group: OptionGroup): string {\n if (group.name_localized) return group.name_localized;\n if (typeof group.name === 'string') return group.name;\n return (group.name as Record)?.ko ?? '';\n}\n\n/**\n * option_values에서 특정 그룹 키의 값 추출\n * 배열 형식(신규)과 객체 형식(레거시) 모두 지원\n */\nfunction getOptionValueByGroupKey(\n optionValues: OptionValueItem[] | Record,\n optionValuesLocalized: Record | undefined,\n groupKey: string\n): string | undefined {\n // option_values_localized가 있으면 우선 사용\n if (optionValuesLocalized && groupKey in optionValuesLocalized) {\n return optionValuesLocalized[groupKey];\n }\n\n // 배열 형식 (신규)\n if (Array.isArray(optionValues)) {\n const item = optionValues.find(v => {\n if (typeof v.key === 'string') return v.key === groupKey;\n return (v.key as Record)?.ko === groupKey || Object.values(v.key).includes(groupKey);\n });\n if (item) {\n if (typeof item.value === 'string') return item.value;\n return (item.value as Record)?.ko ?? Object.values(item.value)[0];\n }\n return undefined;\n }\n\n // 객체 형식 (레거시)\n return optionValues[groupKey];\n}\n\n/**\n * 선택된 옵션 조합에 맞는 product_option 찾기 (내부 함수)\n * name_localized를 키로 사용하여 선택값과 비교\n */\nfunction findMatchingOption(\n selectedOptions: Record,\n optionGroups: OptionGroup[],\n options: ProductOption[]\n): ProductOption | null {\n if (!selectedOptions || !optionGroups?.length) {\n return null;\n }\n\n // 모든 옵션 그룹이 선택되었는지 확인 (name_localized 키 사용)\n const allSelected = optionGroups.every((group) => {\n const groupKey = getGroupKey(group);\n return selectedOptions[groupKey];\n });\n if (!allSelected) {\n logger.log('Not all options selected yet');\n return null;\n }\n\n // 일치하는 옵션 조합 찾기\n const matched = options?.find((opt) =>\n optionGroups.every((group) => {\n const groupKey = getGroupKey(group);\n const optValue = getOptionValueByGroupKey(\n opt.option_values,\n opt.option_values_localized,\n groupKey\n );\n return optValue === selectedOptions[groupKey];\n })\n );\n\n return matched || null;\n}\n\n/**\n * 선택된 옵션 조합에 맞는 product_option 찾기\n *\n * 모든 옵션 그룹이 선택되면 일치하는 옵션 조합을 찾아 반환합니다.\n * selectedOptions 구조: { \"색상\": \"화이트\", \"사이즈\": \"S\" }\n *\n * @param action 액션 정의 (params에 selectedOptions, optionGroups, options 포함)\n * @returns { matchedOption: ProductOption | null }\n */\nexport function findMatchingOptionHandler(\n action?: any,\n _context?: any\n): { matchedOption: ProductOption | null } {\n const { selectedOptions, optionGroups, options } = action?.params || {};\n\n logger.log('findMatchingOption called:', { selectedOptions, optionGroups, optionsCount: options?.length });\n\n const matchedOption = findMatchingOption(selectedOptions, optionGroups, options);\n\n logger.log('Matched option:', matchedOption);\n\n // 결과 반환 - 레이아웃의 onSuccess에서 {{response.matchedOption}}으로 접근\n return { matchedOption };\n}\n\n/**\n * 현재 장바구니 아이템의 옵션을 초기 선택값으로 설정\n *\n * 모달이 열릴 때 현재 아이템의 옵션을 선택 상태로 초기화합니다.\n * currentOptionValues 구조: { \"색상\": \"블랙\", \"사이즈\": \"S\" }\n *\n * @param action 액션 정의 (params에 currentOptionValues, optionGroups, options 포함)\n * @returns { selectedOptions: Record, matchedOption: ProductOption | null }\n */\nexport function initCartOptionSelectionHandler(\n action?: any,\n _context?: any\n): InitCartOptionResult {\n const { currentOptionValues, optionGroups, options } = action?.params || {};\n\n logger.log('initCartOptionSelection called:', { currentOptionValues, optionGroups, optionsCount: options?.length });\n\n if (!optionGroups?.length || !currentOptionValues) {\n logger.log('No option groups or current values, returning empty');\n return { selectedOptions: {}, matchedOption: null };\n }\n\n // currentOptionValues를 그대로 selectedOptions로 사용\n // 둘 다 { \"색상\": \"블랙\", \"사이즈\": \"S\" } 형식 (name_localized 키 사용)\n const selectedOptions: Record = {};\n for (const group of optionGroups) {\n const groupKey = getGroupKey(group);\n const currentValue = currentOptionValues[groupKey];\n // values_localized가 있으면 우선 사용, 없으면 values 사용\n const valuesArray = group.values_localized ?? (\n Array.isArray(group.values)\n ? group.values.map((v: string | Record) => typeof v === 'string' ? v : (v as Record)?.ko ?? '')\n : []\n );\n if (currentValue && valuesArray.includes(currentValue)) {\n selectedOptions[groupKey] = currentValue;\n }\n }\n\n logger.log('Initial selectedOptions:', selectedOptions);\n\n // 매칭 옵션도 즉시 찾기\n const matchedOption = findMatchingOption(selectedOptions, optionGroups, options || []);\n\n logger.log('Matched option:', matchedOption);\n\n // 결과 반환 - 레이아웃의 onSuccess에서 {{response.selectedOptions}}, {{response.matchedOption}}으로 접근\n return { selectedOptions, matchedOption };\n}\n","/**\n * 로컬 스토리지 관련 핸들러\n *\n * 비로그인 사용자의 장바구니 키 등 클라이언트 스토리지 관리를 처리합니다.\n *\n * 핸들러 시그니처: ActionDispatcher의 ActionHandler 형식을 따름\n * (action: ActionDefinition, context: ActionContext) => void | Promise\n *\n * G7Core API 사용:\n * - G7Core.state.set() - 전역 상태 설정\n * - G7Core.state.get()._global?.currentUser - 현재 사용자 확인\n */\n\nconst CART_KEY_STORAGE_NAME = 'g7_cart_key';\nconst CART_KEY_API_ENDPOINT = '/api/modules/sirsoft-ecommerce/cart/key';\nconst GUEST_ORDER_TOKEN_STORAGE_NAME = 'g7_guest_order_token';\nconst GUEST_ORDER_NUMBER_STORAGE_NAME = 'g7_guest_order_number';\nconst GUEST_ORDER_EXPIRES_AT_STORAGE_NAME = 'g7_guest_order_expires_at';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:Storage')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:Storage]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:Storage]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:Storage]', ...args),\n};\n\n/**\n * 백엔드 API를 통해 Cart Key 발급\n *\n * @returns 발급된 cart_key 또는 null (실패 시)\n */\nasync function issueCartKeyFromApi(): Promise {\n try {\n const response = await fetch(CART_KEY_API_ENDPOINT, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n });\n\n if (!response.ok) {\n logger.error('Failed to issue cartKey from API:', response.status);\n return null;\n }\n\n const data = await response.json();\n return data.data?.cart_key || null;\n } catch (error) {\n logger.error('Error issuing cartKey from API:', error);\n return null;\n }\n}\n\n/**\n * 전역 상태 설정 헬퍼\n */\nfunction setGlobalState(updates: Record): void {\n const G7Core = (window as any).G7Core;\n if (G7Core?.state?.set) {\n G7Core.state.set(updates);\n logger.log('Global state updated:', updates);\n } else {\n logger.warn('G7Core.state.set not available');\n }\n}\n\n/**\n * 현재 로그인 사용자 확인 헬퍼\n *\n * G7Config.user 또는 전역 상태에서 currentUser를 확인합니다.\n */\nfunction getCurrentUser(): any {\n try {\n // G7Config에서 사용자 정보 확인 (서버에서 주입)\n const g7Config = (window as any).G7Config;\n if (g7Config?.user) {\n return g7Config.user;\n }\n\n // 전역 상태에서 확인\n const G7Core = (window as any).G7Core;\n const globalState = G7Core?.state?.get?.() || {};\n return globalState.currentUser || null;\n } catch {\n return null;\n }\n}\n\n/**\n * 장바구니 키 초기화\n *\n * 비로그인 사용자의 장바구니를 식별하기 위한 키를 생성/로드합니다.\n * 이미 저장된 키가 있으면 로드하고, 없으면 백엔드 API를 통해 새로 발급합니다.\n *\n * ActionDispatcher 핸들러 형식: (action, context) => void | Promise\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport async function initCartKeyHandler(\n _action?: any,\n _context?: any\n): Promise {\n // 로그인/비로그인 사용자 모두 cartKey 필요 (API 헤더에 포함)\n // localStorage에서 기존 cartKey 확인\n let cartKey: string | null = null;\n try {\n cartKey = localStorage.getItem(CART_KEY_STORAGE_NAME);\n } catch {\n // localStorage 접근 불가 시 무시\n }\n\n // 없으면 백엔드 API를 통해 새로 발급\n if (!cartKey) {\n cartKey = await issueCartKeyFromApi();\n\n if (cartKey) {\n try {\n localStorage.setItem(CART_KEY_STORAGE_NAME, cartKey);\n logger.log('New cartKey issued from API:', cartKey);\n } catch {\n // localStorage 저장 실패 시 무시\n }\n } else {\n logger.error('Failed to issue cartKey from API');\n }\n } else {\n logger.log('Existing cartKey loaded:', cartKey);\n }\n\n setGlobalState({ cartKey });\n}\n\n/**\n * 장바구니 키 가져오기\n *\n * 현재 저장된 장바구니 키를 반환합니다.\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function getCartKeyHandler(\n _action?: any,\n _context?: any\n): string | null {\n try {\n return localStorage.getItem(CART_KEY_STORAGE_NAME);\n } catch {\n return null;\n }\n}\n\n/**\n * 장바구니 키 삭제\n *\n * 로그인 시 게스트 장바구니 키를 삭제합니다 (서버에서 병합 후).\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function clearCartKeyHandler(\n _action?: any,\n _context?: any\n): void {\n try {\n localStorage.removeItem(CART_KEY_STORAGE_NAME);\n logger.log('cartKey removed from localStorage');\n } catch {\n // localStorage 접근 불가 시 무시\n }\n\n setGlobalState({ cartKey: null });\n}\n\n/**\n * 장바구니 키 새로 생성\n *\n * 기존 키를 삭제하고 백엔드 API를 통해 새로운 키를 발급합니다.\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport async function regenerateCartKeyHandler(\n _action?: any,\n _context?: any\n): Promise {\n // 로그인된 사용자는 cartKey 불필요\n const currentUser = getCurrentUser();\n if (currentUser) {\n clearCartKeyHandler();\n return;\n }\n\n const newCartKey = await issueCartKeyFromApi();\n\n if (newCartKey) {\n try {\n localStorage.setItem(CART_KEY_STORAGE_NAME, newCartKey);\n logger.log('New cartKey regenerated from API:', newCartKey);\n } catch {\n // localStorage 저장 실패 시 무시\n }\n\n setGlobalState({ cartKey: newCartKey });\n } else {\n logger.error('Failed to regenerate cartKey from API');\n }\n}\n\n/**\n * 선호 통화 저장 (기존 loadPreferredCurrency.ts와 통합)\n *\n * @param action 액션 정의 (params에 key, value 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function saveToStorageHandler(\n action?: any,\n _context?: any\n): void {\n const { key, value } = action?.params || {};\n if (!key) {\n logger.warn('saveToStorage: key is required');\n return;\n }\n try {\n localStorage.setItem(key, value);\n logger.log('Saved to storage:', key, value);\n } catch {\n // localStorage 저장 실패 시 무시\n }\n}\n\n/**\n * 스토리지에서 값 로드\n *\n * @param action 액션 정의 (params에 key, defaultValue 포함)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function loadFromStorageHandler(\n action?: any,\n _context?: any\n): string | null {\n const { key, defaultValue } = action?.params || {};\n if (!key) {\n logger.warn('loadFromStorage: key is required');\n return defaultValue || null;\n }\n try {\n return localStorage.getItem(key) || defaultValue || null;\n } catch {\n return defaultValue || null;\n }\n}\n\n/**\n * sessionStorage 의 비회원 주문 토큰을 모두 삭제합니다 (내부 헬퍼).\n *\n * 토큰/주문번호/만료시각 3개 키를 함께 비웁니다.\n */\nfunction clearGuestOrderTokenInternal(): void {\n try {\n sessionStorage.removeItem(GUEST_ORDER_TOKEN_STORAGE_NAME);\n sessionStorage.removeItem(GUEST_ORDER_NUMBER_STORAGE_NAME);\n sessionStorage.removeItem(GUEST_ORDER_EXPIRES_AT_STORAGE_NAME);\n } catch {\n // sessionStorage 접근 불가 시 무시\n }\n}\n\n/**\n * 비회원 주문 조회 토큰 초기화 (init_actions 전용)\n *\n * sessionStorage 의 g7_guest_order_token 을 읽어 `_global.guestOrderToken` 에 설정한다.\n * 표준 loadFromSessionStorage 핸들러는 `context.setState`(React 컴포넌트 state)를 호출해\n * `_local` 에만 영향을 주므로, `_global` 에 토큰을 설정하려면 `G7Core.state.set` 직접 호출이 필요하다.\n * `initCartKey` 와 동일한 패턴.\n *\n * 동작:\n * 1. sessionStorage 에서 토큰/만료시각 로드 (탭 종료 시 자동 소실 — 공유 PC 안전)\n * 2. 만료된 토큰은 자동 폐기 (3개 키 모두 제거)\n * 3. `_global.guestOrderToken` 에 토큰 또는 null 설정\n * 4. `_user_base.globalHeaders` 의 `X-Guest-Order-Token: {{_global.guestOrderToken}}` 패턴이\n * 토큰 있을 때만 `guest/orders/*` 호출에 헤더 자동 주입 (엔진이 null/빈값 자동 제외)\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function initGuestOrderTokenHandler(\n _action?: any,\n _context?: any\n): void {\n let token: string | null = null;\n let expiresAt: string | null = null;\n try {\n token = sessionStorage.getItem(GUEST_ORDER_TOKEN_STORAGE_NAME);\n expiresAt = sessionStorage.getItem(GUEST_ORDER_EXPIRES_AT_STORAGE_NAME);\n } catch {\n // sessionStorage 접근 불가 시 무시\n }\n\n // 만료된 토큰 자동 폐기 (백엔드도 동일 시각 기준으로 거부하지만 로컬에서 미리 정리)\n // expiresAt 이 invalid 포맷이면 getTime() 이 NaN → NaN <= now 비교가 false 라\n // 만료 인식이 안 되는 회귀를 방어한다. invalid 토큰도 명시적으로 폐기.\n let expired = false;\n if (token) {\n const expiryTs = expiresAt ? new Date(expiresAt).getTime() : NaN;\n if (isNaN(expiryTs) || expiryTs <= Date.now()) {\n clearGuestOrderTokenInternal();\n token = null;\n expired = true;\n }\n }\n\n if (token) {\n // sessionStorage 에 유효 토큰이 있으면 그 값으로 _global 동기화 (새로고침/재방문 경로)\n setGlobalState({ guestOrderToken: token });\n logger.log('Guest order token loaded from sessionStorage');\n return;\n }\n\n // sessionStorage 에 토큰이 없을 때, 직전 단계(verify onSuccess saveGuestOrderToken)가\n // 이미 _global.guestOrderToken 에 동기 set 해 둔 in-memory 토큰을 보존한다.\n // 조회 폼 verify→상세 SPA 전이에서 sessionStorage 쓰기가 제때 반영되지 않거나\n // (브라우저/프라이버시 모드) 비활성인 환경에서도, navigate 로 살아남은 _global 토큰으로\n // 상세 데이터소스가 X-Guest-Order-Token 을 주입할 수 있게 한다.\n // 단, 만료로 명시 폐기된 경우(expired)는 in-memory 토큰도 비운다.\n if (!expired) {\n const G7Core = (window as any).G7Core;\n const existing = G7Core?.state?.get?.('_global')?.guestOrderToken;\n if (typeof existing === 'string' && existing !== '') {\n logger.log('Guest order token preserved from in-memory _global (sessionStorage empty)');\n return;\n }\n }\n\n setGlobalState({ guestOrderToken: null });\n logger.log('No guest order token (visitor not authenticated)');\n}\n\n// 표시 통화(preferredCurrency) 초기화 핸들러는 이커머스 모듈로 이전되었다\n// (modules/_bundled/sirsoft-ecommerce/resources/js/handlers/initPreferredCurrency.ts).\n// \"통화 = 커머스 책임\" 원칙 — 레이아웃은 `sirsoft-ecommerce.initPreferredCurrency` 로 호출한다.\n\n/**\n * 비회원 주문 토큰을 sessionStorage 에 저장하고 _global 에 동기 set 합니다.\n *\n * 토큰/주문번호/만료시각 3개 키를 함께 저장하며, _global.guestOrderToken 도 즉시 갱신해\n * 직후 호출되는 navigate 의 globalHeaders 자동 주입이 동작하도록 한다.\n *\n * @param action params.token, params.orderNumber, params.expiresAt 필수\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function saveGuestOrderTokenHandler(\n action?: any,\n _context?: any\n): void {\n const { token, orderNumber, expiresAt } = action?.params || {};\n if (!token || !orderNumber || !expiresAt) {\n logger.warn('saveGuestOrderToken: token, orderNumber, expiresAt are required');\n return;\n }\n try {\n sessionStorage.setItem(GUEST_ORDER_TOKEN_STORAGE_NAME, token);\n sessionStorage.setItem(GUEST_ORDER_NUMBER_STORAGE_NAME, orderNumber);\n sessionStorage.setItem(GUEST_ORDER_EXPIRES_AT_STORAGE_NAME, expiresAt);\n } catch {\n // sessionStorage 접근 불가 시 무시 (private 모드 등) — _global 만 set 되어 현재 페이지는 동작\n }\n setGlobalState({ guestOrderToken: token });\n}\n\n/**\n * 비회원 주문 토큰을 sessionStorage 에서 삭제하고 _global 도 비웁니다.\n *\n * 비회원 주문 취소/구매확정/명시적 로그아웃 등 토큰 무효화 시점에서 호출.\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function clearGuestOrderTokenHandler(\n _action?: any,\n _context?: any\n): void {\n clearGuestOrderTokenInternal();\n setGlobalState({ guestOrderToken: null });\n}\n\n/**\n * 비회원 주문 조회 폼(guest_order_form) 진입 시 sessionStorage 의 비회원 주문 토큰을 초기화한다.\n *\n * 비회원 주문 조회 폼은 매번 새로 본인 확인을 거치는 게 표준 패턴(eBay/Best Buy/카페24/\n * 11번가/G마켓 등). 결제 직후 자동 verify 로 받은 토큰은 완료/상세 화면에서는 유효하지만,\n * 사용자가 헤더 '비회원 주문 조회' 메뉴 등을 통해 조회 폼에 도달했을 때는 의도가\n * \"다시 조회\" 이므로 토큰을 비워 폼이 정상 노출되도록 한다.\n *\n * 만료된 토큰도 같은 경로로 자연스럽게 정리된다.\n *\n * @param _action 액션 정의 (사용하지 않음)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport function clearGuestTokenOnEntryHandler(\n _action?: any,\n _context?: any\n): void {\n clearGuestOrderTokenInternal();\n setGlobalState({ guestOrderToken: null });\n}\n","/**\n * 다중 통화 가격 표시 핸들러\n *\n * 사용자가 선택한 통화에 맞는 가격 문자열을 반환합니다.\n */\n\nimport { HandlerContext } from '../types';\n\ninterface CurrencyPrice {\n value: number;\n formatted: string;\n}\n\ninterface Product {\n selling_price: number;\n selling_price_formatted: string;\n list_price?: number;\n list_price_formatted?: string;\n multi_currency_selling_price?: Record;\n multi_currency_list_price?: Record;\n [key: string]: unknown;\n}\n\ninterface GetDisplayPriceParams {\n product: Product;\n priceField: 'selling_price' | 'list_price';\n currencyCode?: string;\n}\n\n/**\n * 선호 통화에 맞는 가격을 반환합니다.\n *\n * @param params.product - 상품 객체\n * @param params.priceField - 가격 필드 ('selling_price' | 'list_price')\n * @param params.currencyCode - 통화 코드 (선택, 미지정 시 전역 설정 사용)\n * @param context - 핸들러 컨텍스트\n * @returns 포맷팅된 가격 문자열\n *\n * @example\n * // 레이아웃 JSON에서 사용\n * {\n * \"text\": \"{{handler('getDisplayPrice', { product: product.data, priceField: 'selling_price' })}}\"\n * }\n */\nexport function getDisplayPriceHandler(\n params: GetDisplayPriceParams,\n context: HandlerContext\n): string {\n const { product, priceField, currencyCode } = params;\n const preferredCurrency = currencyCode || context.getState('_global.preferredCurrency') || 'KRW';\n\n const multiCurrencyField = `multi_currency_${priceField}` as keyof Product;\n const multiCurrencyData = product[multiCurrencyField] as Record | undefined;\n\n if (multiCurrencyData && multiCurrencyData[preferredCurrency]) {\n return multiCurrencyData[preferredCurrency].formatted;\n }\n\n // 폴백: 기본 통화\n const formattedField = `${priceField}_formatted` as keyof Product;\n return (product[formattedField] as string) || String(product[priceField]);\n}\n","/**\n * 통화 포맷팅 핸들러\n *\n * 숫자 값을 통화 형식 문자열로 변환합니다.\n */\n\nimport { HandlerContext } from '../types';\n\ninterface FormatCurrencyParams {\n value: number;\n currencyCode?: string;\n locale?: string;\n}\n\ninterface CurrencyConfig {\n code: string;\n symbol: string;\n locale: string;\n decimals: number;\n}\n\n/**\n * 통화별 기본 설정\n */\nconst CURRENCY_CONFIGS: Record = {\n KRW: { code: 'KRW', symbol: '₩', locale: 'ko-KR', decimals: 0 },\n USD: { code: 'USD', symbol: '$', locale: 'en-US', decimals: 2 },\n JPY: { code: 'JPY', symbol: '¥', locale: 'ja-JP', decimals: 0 },\n CNY: { code: 'CNY', symbol: '¥', locale: 'zh-CN', decimals: 2 },\n EUR: { code: 'EUR', symbol: '€', locale: 'de-DE', decimals: 2 },\n};\n\n/**\n * 숫자 값을 통화 형식으로 포맷팅합니다.\n *\n * @param params.value - 포맷팅할 숫자 값\n * @param params.currencyCode - 통화 코드 (KRW, USD, JPY 등)\n * @param params.locale - 로케일 (선택, 미지정 시 통화 기본 로케일 사용)\n * @param context - 핸들러 컨텍스트\n * @returns 포맷팅된 통화 문자열\n *\n * @example\n * formatCurrencyHandler({ value: 10000, currencyCode: 'KRW' }, context)\n * // => \"₩10,000\" 또는 \"10,000원\"\n *\n * formatCurrencyHandler({ value: 99.99, currencyCode: 'USD' }, context)\n * // => \"$99.99\"\n */\nexport function formatCurrencyHandler(\n params: FormatCurrencyParams,\n context: HandlerContext\n): string {\n const { value, currencyCode, locale: customLocale } = params;\n const currency = currencyCode || context.getState('_global.preferredCurrency') || 'KRW';\n\n const config = CURRENCY_CONFIGS[currency] || CURRENCY_CONFIGS.KRW;\n const locale = customLocale || config.locale;\n\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: config.code,\n minimumFractionDigits: config.decimals,\n maximumFractionDigits: config.decimals,\n }).format(value);\n } catch {\n // Intl 지원 안 되는 환경 폴백\n const formatted = value.toLocaleString(undefined, {\n minimumFractionDigits: config.decimals,\n maximumFractionDigits: config.decimals,\n });\n return `${config.symbol}${formatted}`;\n }\n}\n\n/**\n * 통화 심볼만 반환합니다.\n *\n * @param currencyCode - 통화 코드\n * @returns 통화 심볼\n */\nexport function getCurrencySymbol(currencyCode: string): string {\n return CURRENCY_CONFIGS[currencyCode]?.symbol || currencyCode;\n}\n","/**\n * 선호 통화 로드 핸들러\n *\n * localStorage에서 사용자가 선택한 통화 설정을 로드합니다.\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:Currency')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:Currency]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:Currency]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:Currency]', ...args),\n};\n\nimport { HandlerContext } from '../types';\n\nconst STORAGE_KEY = 'g7_preferred_currency';\nconst DEFAULT_CURRENCY = 'KRW';\n\ninterface LoadPreferredCurrencyParams {\n defaultCurrency?: string;\n}\n\n/**\n * localStorage에서 선호 통화를 로드하여 전역 상태에 설정합니다.\n *\n * @param params.defaultCurrency - 기본 통화 (선택, 기본값: 'KRW')\n * @param context - 핸들러 컨텍스트\n * @returns 로드된 통화 코드\n *\n * @example\n * // _user_base.json의 init_actions에서 사용\n * {\n * \"init_actions\": [\n * {\n * \"handler\": \"loadPreferredCurrency\",\n * \"params\": { \"defaultCurrency\": \"KRW\" }\n * }\n * ]\n * }\n */\nexport function loadPreferredCurrencyHandler(\n params: LoadPreferredCurrencyParams,\n context: HandlerContext\n): string {\n const { defaultCurrency = DEFAULT_CURRENCY } = params;\n\n let currency = defaultCurrency;\n\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored && isValidCurrency(stored)) {\n currency = stored;\n }\n }\n } catch {\n // localStorage 접근 불가 시 기본값 사용\n logger.warn('localStorage 접근 불가, 기본 통화 사용:', defaultCurrency);\n }\n\n // 전역 상태에 설정\n context.setState('global', { preferredCurrency: currency });\n\n return currency;\n}\n\n/**\n * 선호 통화를 localStorage에 저장합니다.\n *\n * @param currencyCode - 저장할 통화 코드\n * @param context - 핸들러 컨텍스트\n *\n * @example\n * // 통화 선택 드롭다운에서 사용\n * {\n * \"actions\": [\n * {\n * \"type\": \"click\",\n * \"handler\": \"savePreferredCurrency\",\n * \"params\": { \"currencyCode\": \"{{currency.code}}\" }\n * }\n * ]\n * }\n */\nexport function savePreferredCurrencyHandler(\n params: { currencyCode: string },\n context: HandlerContext\n): void {\n const { currencyCode } = params;\n\n if (!isValidCurrency(currencyCode)) {\n logger.warn('유효하지 않은 통화 코드:', currencyCode);\n return;\n }\n\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(STORAGE_KEY, currencyCode);\n }\n } catch {\n logger.warn('localStorage 저장 실패');\n }\n\n // 전역 상태 업데이트\n context.setState('global', { preferredCurrency: currencyCode });\n}\n\n/**\n * 유효한 통화 코드 형식인지 확인합니다.\n *\n * 관리자가 추가/삭제하는 통화를 하드코딩 목록이 막지 않도록(A1-⑥), 고정 화이트리스트가 아니라\n * ISO 4217 형식(영문 대문자 3자리)으로 검증한다. 실제 노출 통화 제한은 셀렉터가 표시하는\n * _global.availableCurrencies(is_default || exchange_rate>0)가 담당한다.\n */\nfunction isValidCurrency(code: string): boolean {\n return typeof code === 'string' && /^[A-Z]{3}$/.test(code);\n}\n","/**\n * setTheme 핸들러\n *\n * 사용자가 선택한 테마(auto/light/dark)로 변경합니다.\n * localStorage에 g7_color_scheme 값을 저장하고 즉시 적용합니다.\n *\n * sirsoft-admin_basic 템플릿과 동일한 키를 사용하여 테마 설정을 공유합니다.\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:SetTheme')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:SetTheme]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:SetTheme]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:SetTheme]', ...args),\n};\n\n/**\n * 테마 모드 타입\n */\nexport type ThemeMode = 'auto' | 'light' | 'dark';\n\n/**\n * 유효한 테마 목록\n */\nconst VALID_THEMES: ThemeMode[] = ['auto', 'light', 'dark'];\n\n/**\n * localStorage 키 (admin 템플릿과 동일)\n */\nconst STORAGE_KEY = 'g7_color_scheme';\n\n/**\n * 실제 적용될 테마 결정 (auto인 경우 시스템 설정 반영)\n */\nconst getEffectiveTheme = (mode: ThemeMode): 'light' | 'dark' => {\n if (mode === 'auto') {\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n }\n return mode;\n};\n\n/**\n * 테마 적용\n *\n * document.documentElement에 data-theme 속성과 dark 클래스를 설정합니다.\n */\nconst applyTheme = (mode: ThemeMode): void => {\n const effectiveTheme = getEffectiveTheme(mode);\n document.documentElement.setAttribute('data-theme', effectiveTheme);\n\n // dark 클래스 토글 (Tailwind CSS dark: 모드 지원)\n if (effectiveTheme === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n};\n\n/**\n * 저장된 테마를 로드하여 적용합니다.\n *\n * 템플릿 초기화 시 호출되어 localStorage에 저장된 테마를 즉시 적용합니다.\n */\nexport function initTheme(): void {\n try {\n const savedTheme = localStorage.getItem(STORAGE_KEY) as ThemeMode | null;\n const theme = savedTheme && VALID_THEMES.includes(savedTheme) ? savedTheme : 'auto';\n applyTheme(theme);\n logger.log('Initial theme applied:', theme);\n } catch (error) {\n logger.warn('Failed to load initial theme:', error);\n applyTheme('auto');\n }\n}\n\n/**\n * initTheme 핸들러\n *\n * 레이아웃의 init_actions에서 호출되어 초기 테마를 적용합니다.\n * ActionDispatcher의 커스텀 핸들러 형식을 따릅니다.\n *\n * target 파라미터가 전달되면 해당 테마로 초기화합니다.\n * target이 없거나 유효하지 않으면 localStorage 또는 'auto'를 사용합니다.\n *\n * @param action 액션 정의 (target에 테마 값 포함 가능)\n * @param _context 액션 컨텍스트 (사용하지 않음)\n */\nexport async function initThemeHandler(\n action: any,\n _context?: any\n): Promise {\n // action.target이 바인딩 해결된 값으로 전달됨 (ActionDispatcher에서 resolveValue 호출)\n const targetTheme = action?.target;\n\n // target이 유효한 테마 값인 경우 해당 테마 적용\n if (targetTheme && typeof targetTheme === 'string' && VALID_THEMES.includes(targetTheme as ThemeMode)) {\n applyTheme(targetTheme as ThemeMode);\n return;\n }\n\n // target이 없거나 유효하지 않으면 기존 로직 (localStorage 또는 auto)\n initTheme();\n}\n\n/**\n * 테마 변경 핸들러\n *\n * ActionDispatcher는 handler(action, context) 형태로 호출합니다.\n * context 객체에는 { data, event, props, state, setState, navigate } 등이 포함됩니다.\n *\n * @param action 액션 정의\n * @param context 액션 컨텍스트 (ActionContext 타입)\n */\nexport async function setThemeHandler(\n action: any,\n _context?: any\n): Promise {\n // 1. 테마 값 추출\n let theme: string | undefined;\n\n // action.target이 바인딩 해결된 값으로 전달됨 (ActionDispatcher에서 resolveValue 호출)\n if (action?.target && typeof action.target === 'string' && !action.target.includes('{{')) {\n theme = action.target;\n }\n\n // 2. 유효성 검증\n if (!theme || typeof theme !== 'string') {\n logger.warn('Invalid theme:', theme);\n return;\n }\n\n if (!VALID_THEMES.includes(theme as ThemeMode)) {\n logger.warn('Unsupported theme:', theme);\n return;\n }\n\n const validTheme = theme as ThemeMode;\n\n // 3. localStorage에 저장\n try {\n localStorage.setItem(STORAGE_KEY, validTheme);\n } catch (error) {\n logger.error('Failed to save theme to localStorage:', error);\n return;\n }\n\n // 4. 테마 즉시 적용 (페이지 새로고침 없이)\n applyTheme(validTheme);\n\n logger.log('Theme changed to:', validTheme);\n}\n","/**\n * redirectToLoginWithReturn 핸들러\n *\n * 비로그인 회원전용 게시판/비밀글 진입 시 로그인 페이지로 보내되,\n * 현재 경로(pathname + querystring)를 redirect 파라미터로 보존한다.\n * 로그인 폼은 {{query.redirect ?? '/'}} 로 복원하므로(_login_form.json:155),\n * 로그인 성공 후 원래 위치로 복귀한다.\n *\n * 배경: 게시판 목록/상세 데이터소스 401(auth_mode: optional + 토큰 없음)은\n * 코어 ApiClient 자동가드를 우회하고 errorHandling 경로로 진입하는데,\n * 그 context 에는 route/query 가 없다(TemplateApp.ts setDefaultContext 는 navigate 만 주입).\n * 따라서 레이아웃 표현식으로는 현재 경로를 캡처할 수 없으므로, 핸들러가 window.location 을\n * 직접 읽어 우회한다(identityLauncher.ts 의 window.location.href 선례와 동일 패턴).\n *\n * window.location.pathname 은 항상 '/' 로 시작하는 same-origin path 이므로 외부 URL 주입이\n * 불가능하다(open redirect 안전).\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Handler:RedirectToLoginWithReturn')) ?? {\n log: (...args: unknown[]) => console.log('[Handler:RedirectToLoginWithReturn]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:RedirectToLoginWithReturn]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:RedirectToLoginWithReturn]', ...args),\n};\n\n/**\n * 로그인 페이지로 이동하되 현재 경로를 redirect 로 보존하는 핸들러\n *\n * ActionDispatcher 는 handler(action, context) 형태로 호출하지만(ActionDispatcher.ts),\n * 이 핸들러는 action/context 를 사용하지 않는다 — 현재 경로는 window.location 에서 직접 읽는다.\n *\n * @param _action 액션 정의 (미사용)\n * @param _context 액션 컨텍스트 (미사용)\n * @return Promise\n */\nexport async function redirectToLoginWithReturnHandler(\n _action?: any,\n _context?: any\n): Promise {\n const G7Core = (window as any).G7Core;\n\n if (!G7Core?.dispatch) {\n logger.error('G7Core.dispatch 가 초기화되지 않아 로그인 리다이렉트를 실행할 수 없습니다.');\n return;\n }\n\n // 핸들러는 표현식 화이트리스트 제약 밖 — window.location 직접 접근 가능.\n // pathname + search 로 현재 경로(쿼리스트링 포함)를 보존한다.\n const returnUrl = window.location.pathname + window.location.search;\n\n await G7Core.dispatch({\n handler: 'navigate',\n params: {\n path: '/login',\n // navigate 가 params.query 를 URLSearchParams 로 인코딩(ActionDispatcher.ts handleNavigate).\n // 로그인 폼은 {{query.redirect ?? '/'}} 로 복원(_login_form.json).\n query: { redirect: returnUrl },\n },\n });\n}\n","/**\n * downloadAttachment 핸들러\n *\n * 게시판 첨부파일을 토큰 동반 요청으로 다운로드한다 (이슈 #413 item 58b).\n *\n * 배경: 기존 다운로드는 레이아웃의 브라우저 직접 링크(GET)였다.\n * G7 은 Sanctum 토큰 전용 인증인데 네비게이션에는 Authorization 헤더(토큰)가 실리지 않아,\n * download_url 이 가리키는 optional.sanctum 라우트가 요청을 guest 로 통과시켰다.\n * 그 결과 회원이 받아도 서버의 Auth::id() 가 NULL 이 되어 활동이력(attachment.download)의\n * 행위자(user_id)가 비어 있었다(upload/board.update 는 정상이었다).\n *\n * 해소: 코어 ApiClient(G7Core.api.get)로 blob 요청을 보내면 Authorization 헤더가 자동 첨부되어\n * 토큰이 실린다. 받은 blob 을 objectURL 로 변환해 클릭으로 저장한다\n * (composite/ImageGallery.tsx 의 downloadAuthenticatedFile 과 동일 패턴).\n *\n * 비회원: 토큰이 없으므로 종전과 동일하게 user_id 가 NULL 로 남는다(현행 정책 유지).\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = (window as any).G7Core?.createLogger?.('Handler:DownloadAttachment') ?? {\n log: (...args: unknown[]) => console.log('[Handler:DownloadAttachment]', ...args),\n warn: (...args: unknown[]) => console.warn('[Handler:DownloadAttachment]', ...args),\n error: (...args: unknown[]) => console.error('[Handler:DownloadAttachment]', ...args),\n};\n\n/**\n * 첨부파일을 토큰 동반 요청으로 다운로드하는 핸들러\n *\n * ActionDispatcher 는 handler(action, context) 형태로 호출한다.\n * params 는 resolveParams 로 이미 표현식이 해석된 값을 받는다.\n *\n * @param action 액션 정의 (params.url=다운로드 URL, params.filename=저장 파일명)\n * @param _context 액션 컨텍스트 (미사용)\n * @return Promise\n */\nexport async function downloadAttachmentHandler(action?: any, _context?: any): Promise {\n const G7Core = (window as any).G7Core;\n const { url, filename } = action?.params || {};\n\n if (!url) {\n logger.warn('다운로드 URL 이 없어 요청을 건너뜁니다.');\n return;\n }\n\n if (!G7Core?.api?.get) {\n logger.error('G7Core.api.get 이 초기화되지 않아 다운로드를 실행할 수 없습니다.');\n return;\n }\n\n try {\n // 코어 ApiClient 경로 → Authorization(Bearer) 헤더 자동 첨부 → 회원 토큰이 실린다.\n const blob = await G7Core.api.get(url, { responseType: 'blob' });\n\n if (blob) {\n const objectUrl = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = objectUrl;\n link.download = filename || '';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(objectUrl);\n }\n } catch (error) {\n logger.error('첨부파일 다운로드 실패', error);\n G7Core?.toast?.error?.(G7Core?.t?.('common.download_failed') ?? 'Download failed');\n }\n}\n","/**\n * sirsoft-basic 템플릿 핸들러 등록\n *\n * 이 파일에서 모든 커스텀 핸들러를 export합니다.\n * G7Core에서 자동으로 로드하여 사용할 수 있습니다.\n */\n\n// 상품 옵션 관련 핸들러\nimport {\n addSelectedItemIfCompleteHandler,\n updateSelectedItemQuantityHandler,\n removeSelectedItemHandler,\n updateNoOptionQuantityHandler,\n setBlockAdditionalOptionHandler,\n} from './productOptions';\n\n// 장바구니 관련 핸들러\nimport {\n toggleCartItemSelectionHandler,\n selectAllCartItemsHandler,\n setCartOptionHandler,\n openCartDeleteModalHandler,\n openCartOptionModalHandler,\n recalculateCartHandler,\n} from './cartHandlers';\n\n// 장바구니 옵션 변경 관련 핸들러\nimport {\n findMatchingOptionHandler,\n initCartOptionSelectionHandler,\n} from './cartOptionChange';\n\n// 스토리지 관련 핸들러\nimport {\n initCartKeyHandler,\n getCartKeyHandler,\n clearCartKeyHandler,\n regenerateCartKeyHandler,\n saveToStorageHandler,\n loadFromStorageHandler,\n initGuestOrderTokenHandler,\n saveGuestOrderTokenHandler,\n clearGuestOrderTokenHandler,\n clearGuestTokenOnEntryHandler,\n} from './storageHandlers';\n\n// 다중 통화 관련 핸들러\nimport { getDisplayPriceHandler } from './getDisplayPrice';\nimport { formatCurrencyHandler, getCurrencySymbol } from './formatCurrency';\nimport {\n loadPreferredCurrencyHandler,\n savePreferredCurrencyHandler,\n} from './loadPreferredCurrency';\n\n// 테마 관련 핸들러\nimport { setThemeHandler, initThemeHandler } from './setThemeHandler';\n\n// 인증 리다이렉트 관련 핸들러\nimport { redirectToLoginWithReturnHandler } from './redirectToLoginWithReturn';\n\n// 게시판 첨부 다운로드 핸들러 (토큰 동반 → 활동이력 행위자 기록)\nimport { downloadAttachmentHandler } from './downloadAttachment';\n\n// 언어 관련 핸들러는 엔진 레벨(ActionDispatcher)에서 처리\n// setLocale 핸들러는 ActionDispatcher에 빌트인으로 등록되어 있음\n\n/**\n * sirsoft-basic 템플릿의 모든 커스텀 핸들러\n *\n * 네이밍 규칙: 'sirsoft-basic.[핸들러명]'\n *\n * @example\n * // 레이아웃 JSON에서 사용\n * {\n * \"handler\": \"custom\",\n * \"name\": \"addSelectedItemIfComplete\",\n * \"params\": { ... }\n * }\n *\n * // 또는 풀네임으로\n * {\n * \"handler\": \"sirsoft-basic.addSelectedItemIfComplete\",\n * \"params\": { ... }\n * }\n */\nexport const handlers = {\n // 상품 옵션\n 'sirsoft-basic.addSelectedItemIfComplete': addSelectedItemIfCompleteHandler,\n 'sirsoft-basic.updateSelectedItemQuantity': updateSelectedItemQuantityHandler,\n 'sirsoft-basic.removeSelectedItem': removeSelectedItemHandler,\n 'sirsoft-basic.updateNoOptionQuantity': updateNoOptionQuantityHandler,\n 'sirsoft-basic.setBlockAdditionalOption': setBlockAdditionalOptionHandler,\n\n // 다중 통화\n 'sirsoft-basic.getDisplayPrice': getDisplayPriceHandler,\n 'sirsoft-basic.formatCurrency': formatCurrencyHandler,\n 'sirsoft-basic.getCurrencySymbol': getCurrencySymbol,\n 'sirsoft-basic.loadPreferredCurrency': loadPreferredCurrencyHandler,\n 'sirsoft-basic.savePreferredCurrency': savePreferredCurrencyHandler,\n\n // 테마\n setTheme: setThemeHandler,\n initTheme: initThemeHandler,\n\n // 인증 리다이렉트 (비로그인 게시판/비밀글 진입 → /login?redirect=현재경로)\n redirectToLoginWithReturn: redirectToLoginWithReturnHandler,\n\n // 게시판 첨부 다운로드 (토큰 동반 → 활동이력 행위자 기록)\n downloadAttachment: downloadAttachmentHandler,\n\n // 언어: setLocale은 엔진 레벨(ActionDispatcher)에서 빌트인으로 처리\n\n // 장바구니\n toggleCartItemSelection: toggleCartItemSelectionHandler,\n selectAllCartItems: selectAllCartItemsHandler,\n setCartOption: setCartOptionHandler,\n openCartDeleteModal: openCartDeleteModalHandler,\n openCartOptionModal: openCartOptionModalHandler,\n recalculateCart: recalculateCartHandler,\n\n // 장바구니 옵션 변경\n findMatchingOption: findMatchingOptionHandler,\n initCartOptionSelection: initCartOptionSelectionHandler,\n\n // 스토리지\n initCartKey: initCartKeyHandler,\n getCartKey: getCartKeyHandler,\n clearCartKey: clearCartKeyHandler,\n regenerateCartKey: regenerateCartKeyHandler,\n saveToStorage: saveToStorageHandler,\n loadFromStorage: loadFromStorageHandler,\n initGuestOrderToken: initGuestOrderTokenHandler,\n saveGuestOrderToken: saveGuestOrderTokenHandler,\n clearGuestOrderToken: clearGuestOrderTokenHandler,\n clearGuestTokenOnEntry: clearGuestTokenOnEntryHandler,\n};\n\n/**\n * 핸들러 맵 (handlerMap alias)\n *\n * index.ts에서 import할 때 사용\n */\nexport const handlerMap = handlers;\n\n/**\n * 핸들러 타입 정의 (TypeScript 자동완성용)\n */\nexport type SirsoftBasicHandlers = typeof handlers;\n\n// 개별 핸들러 export (직접 import용)\nexport {\n addSelectedItemIfCompleteHandler,\n updateSelectedItemQuantityHandler,\n removeSelectedItemHandler,\n updateNoOptionQuantityHandler,\n setBlockAdditionalOptionHandler,\n getDisplayPriceHandler,\n formatCurrencyHandler,\n getCurrencySymbol,\n loadPreferredCurrencyHandler,\n savePreferredCurrencyHandler,\n setThemeHandler,\n initThemeHandler,\n // 인증 리다이렉트\n redirectToLoginWithReturnHandler,\n // 게시판 첨부 다운로드\n downloadAttachmentHandler,\n // setLocaleHandler는 엔진 레벨에서 처리하므로 제거됨\n // 장바구니\n toggleCartItemSelectionHandler,\n selectAllCartItemsHandler,\n setCartOptionHandler,\n openCartDeleteModalHandler,\n openCartOptionModalHandler,\n recalculateCartHandler,\n // 장바구니 옵션 변경\n findMatchingOptionHandler,\n initCartOptionSelectionHandler,\n // 스토리지\n initCartKeyHandler,\n getCartKeyHandler,\n clearCartKeyHandler,\n regenerateCartKeyHandler,\n saveToStorageHandler,\n loadFromStorageHandler,\n initGuestOrderTokenHandler,\n saveGuestOrderTokenHandler,\n clearGuestOrderTokenHandler,\n clearGuestTokenOnEntryHandler,\n};\n","/**\n * IDV Modal Launcher (sirsoft-basic)\n *\n * 코어 `IdentityGuardInterceptor` 가 428 응답을 가로채면 호출하는 launcher 입니다.\n *\n * 코어 진입점은 `window.G7Core.identity.*` 를 통해 사용 — 템플릿 IIFE 번들이 코어 모듈을\n * 중복 포함하면서 정적 클래스 상태가 분리되는 사고를 방지합니다 (다음 우편번호 / CKEditor5 와 동일 패턴).\n *\n * 동작 순서:\n * 1. `external_redirect` 분기 — 코어 helper `redirectExternally` 로 위임.\n * 2. `POST /api/identity/challenges` 로 challenge 시작 → `id, expires_at, render_hint, public_payload` 획득.\n * 3. `_global.identityChallenge` 네임스페이스에 verification payload + challenge 응답 병합.\n * 4. 카운트다운 `startInterval` 등록.\n * 5. `openModal: identity-challenge-modal` 디스패치.\n * 6. `createDeferred()` Promise 반환 — 모달이 `resolveIdentityChallenge` 핸들러로 결과 통보 시 resolve.\n *\n * 외부 IDV 플러그인(KCP/PortOne 등) 은 모달 파셜의 `identity_provider_ui:*` Extension Point 슬롯에\n * 자기 컴포넌트 + scripts 를 주입하여 launcher 변경 없이 자기 SDK 를 띄울 수 있습니다.\n */\n\nconst logger = ((window as any).G7Core?.createLogger?.('Template:sirsoft-basic:IdentityLauncher')) ?? {\n log: (...args: unknown[]) => console.log('[Template:sirsoft-basic:IdentityLauncher]', ...args),\n warn: (...args: unknown[]) => console.warn('[Template:sirsoft-basic:IdentityLauncher]', ...args),\n error: (...args: unknown[]) => console.error('[Template:sirsoft-basic:IdentityLauncher]', ...args),\n};\n\n/**\n * 코어가 launcher 에 전달하는 verification payload (런타임 형태).\n * 코어 타입 import 를 피하려고 로컬에 정의 — 실제 형식은 `resources/js/core/identity/types.ts` 와 동일.\n */\ninterface IdentityVerificationTarget {\n email?: string;\n phone?: string;\n}\n\ninterface VerificationPayload {\n policy_key: string;\n purpose: string;\n provider_id?: string | null;\n render_hint?: string | null;\n challenge_start_url?: string;\n redirect_url?: string;\n return_request?: { method: string; url: string; headers_echo?: string[] } | null;\n /** 흐름이 apiCall identity_target 으로 선언한 인증 대상 — 코어 인터셉터가 병합해 전달. */\n target?: IdentityVerificationTarget | null;\n}\n\n/**\n * launcher 가 코어에 돌려주는 결과 타입 (런타임 형태).\n */\ntype VerificationResult =\n | { status: 'verified'; token: string; providerData?: Record }\n | { status: 'pending'; pollUrl: string; pollIntervalMs?: number; expiresAt: string }\n | { status: 'cancelled' }\n | { status: 'failed'; failureCode: string; reason?: string };\n\n/**\n * 인증 대상(이메일·전화)을 결정합니다.\n *\n * 우선순위 (필드별 보충 머지 — email/phone 각각 첫 비어있지 않은 값 채택):\n * 1. `payload.target` — 흐름이 apiCall `identity_target` 으로 선언한 값 (범용 진입점, 비로그인 흐름의 핵심)\n * 2. 로그인 사용자 세션 (`currentUser` / `user` / `auth.user` 의 email·phone)\n * 3. (하위호환) signup/password_reset 폼 — `identity_target` 미선언 기존 레이아웃 대비\n *\n * 흐름별 폼 경로 하드코딩을 폐기하고 선언값을 1순위로 둠으로써, 주문/게시판/임의 액션 어떤 흐름이든\n * 레이아웃이 `identity_target` 만 선언하면 launcher 변경 없이 동작한다.\n *\n * 반환값은 launcher 에서 두 곳에 사용:\n * 1) 첫 POST /api/identity/challenges body 에 동봉\n * 2) `_global.identityChallenge.target` 에 저장 — 모달 재전송 액션이 같은 target 을 재사용\n *\n * @param payload 코어 인터셉터가 전달한 verification payload (target 병합 포함)\n * @returns 인증 대상 또는 null (email·phone 둘 다 없으면 — 로그인 사용자는 서버 세션 도출)\n */\nfunction resolveTarget(payload: VerificationPayload): IdentityVerificationTarget | null {\n const G7Core = (window as any).G7Core;\n const local = G7Core?.state?.getLocal?.() ?? {};\n const global = G7Core?.state?.getGlobal?.() ?? G7Core?.state?.get?.() ?? {};\n\n const pick = (...candidates: Array): string | undefined =>\n candidates.find((v): v is string => typeof v === 'string' && v.length > 0);\n\n const email = pick(\n payload.target?.email,\n global?.currentUser?.email,\n global?.user?.email,\n global?.auth?.user?.email,\n payload.purpose === 'signup' ? local?.registerForm?.email : undefined,\n payload.purpose === 'password_reset' ? local?.passwordResetForm?.email : undefined,\n payload.purpose === 'password_reset' ? local?.email : undefined,\n );\n\n const phone = pick(\n payload.target?.phone,\n global?.currentUser?.phone,\n global?.user?.phone,\n global?.auth?.user?.phone,\n );\n\n if (!email && !phone) {\n return null;\n }\n\n const target: IdentityVerificationTarget = {};\n if (email) target.email = email;\n if (phone) target.phone = phone;\n return target;\n}\n\n/**\n * Bearer 토큰을 안전하게 추출합니다 (있으면).\n */\nfunction getAuthHeader(): Record {\n const G7Core = (window as any).G7Core;\n const token = G7Core?.api?.getToken?.() ?? null;\n return token ? { Authorization: `Bearer ${token}` } : {};\n}\n\n/**\n * 현재 앱 언어를 Accept-Language 헤더로 추출합니다 (있으면).\n *\n * challenge POST 는 ApiClient 를 우회하는 raw fetch 라, ApiClient 가 모든 요청에\n * 부착하는 `Accept-Language: g7_locale`(ApiClient.ts) 을 여기서 동일하게 부착해야\n * 서버 SetLocale 이 사용자 화면 언어로 IDV 메일을 렌더한다. 누락 시 challenge 요청이\n * 브라우저 기본 언어로 전송되어 메일이 주문 화면 언어와 달라진다(비회원 결제 등).\n */\nfunction getLocaleHeader(): Record {\n try {\n const locale =\n typeof window !== 'undefined' ? window.localStorage?.getItem('g7_locale') : null;\n return locale ? { 'Accept-Language': locale } : {};\n } catch {\n return {};\n }\n}\n\ninterface ChallengeResponseData {\n id: string;\n expires_at: string;\n render_hint: string;\n public_payload?: Record;\n redirect_url?: string;\n /** 허용 최대 시도 횟수 — 0 은 무제한 (popup/SDK 형 provider). 코어 mail provider 는 환경설정값을 반영. */\n max_attempts?: number;\n}\n\n/**\n * `POST /api/identity/challenges` 로 challenge 를 시작합니다.\n *\n * @param payload verification payload\n * @param target launcher 본체에서 1회 계산한 인증 대상 (startChallenge 와 _global 저장이 동일 값 공유)\n */\nasync function startChallenge(\n payload: VerificationPayload,\n target: IdentityVerificationTarget | null,\n): Promise {\n const body: Record = { purpose: payload.purpose };\n if (payload.provider_id) body.provider_id = payload.provider_id;\n if (target) body.target = target;\n\n const url = payload.challenge_start_url || '/api/identity/challenges';\n const res = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...getLocaleHeader(),\n ...getAuthHeader(),\n },\n body: JSON.stringify(body),\n });\n\n const json = await res.json().catch(() => null);\n if (!res.ok || !json?.success) {\n const msg = json?.message ?? `Challenge 시작 실패 (HTTP ${res.status})`;\n throw new Error(msg);\n }\n\n const data = json.data ?? json;\n return {\n id: data.id,\n expires_at: data.expires_at,\n render_hint: data.render_hint ?? payload.render_hint ?? 'text_code',\n public_payload: data.public_payload,\n redirect_url: data.redirect_url,\n max_attempts: typeof data.max_attempts === 'number' ? data.max_attempts : undefined,\n };\n}\n\n/**\n * sirsoft-basic 의 IDV launcher 본체.\n *\n * 테스트에서 직접 호출할 수 있도록 export (런타임 진입점은 registerSirsoftBasicIdentityLauncher).\n */\nexport async function sirsoftBasicIdentityLauncher(payload: VerificationPayload): Promise {\n const G7Core = (window as any).G7Core;\n const identity = G7Core?.identity;\n\n if (!G7Core?.dispatch || !G7Core?.state || !identity) {\n logger.error('G7Core 또는 G7Core.identity 가 초기화되지 않아 launcher 를 실행할 수 없습니다.');\n return { status: 'failed', failureCode: 'G7_NOT_READY' };\n }\n\n // (1) external_redirect 분기 — 모달 안 띄움\n if (payload.render_hint === 'external_redirect' || payload.redirect_url) {\n return identity.redirectExternally(payload);\n }\n\n // 인증 대상을 1회 계산 — startChallenge body 와 _global.identityChallenge.target 저장이 동일 값 공유\n // (모달 재전송이 같은 target 으로 challenge 재요청). 흐름 선언값(payload.target) 우선.\n const target = resolveTarget(payload);\n\n // (2) Challenge 시작\n let challenge: ChallengeResponseData;\n try {\n challenge = await startChallenge(payload, target);\n } catch (err) {\n logger.error('Challenge 시작 실패:', err);\n try {\n await G7Core.dispatch({\n handler: 'toast',\n params: {\n type: 'error',\n message: err instanceof Error ? err.message : '본인인증 시작에 실패했습니다.',\n },\n });\n } catch {\n /* ignore */\n }\n return {\n status: 'failed',\n failureCode: 'CHALLENGE_START_FAILED',\n reason: err instanceof Error ? err.message : String(err),\n };\n }\n\n // 응답에 redirect_url 이 있으면 외부 redirect 로 분기 (provider 가 link 대신 redirect 결정)\n if (challenge.redirect_url) {\n return identity.redirectExternally({\n ...payload,\n render_hint: 'external_redirect',\n redirect_url: challenge.redirect_url,\n });\n }\n\n // (3) _global.identityChallenge 네임스페이스 setup\n // 위에서 1회 계산한 target 을 재사용 — 모달 재전송 액션이 같은 target 으로 challenge 재요청 가능하게\n const expiresMs = challenge.expires_at ? new Date(challenge.expires_at).getTime() : 0;\n const remainingSeconds = expiresMs > 0 ? Math.max(0, Math.floor((expiresMs - Date.now()) / 1000)) : 0;\n\n // maxAttempts: 백엔드 응답값이 있으면 사용, 없으면 0(무제한 — popup/SDK 형 provider 의 기본).\n // 코어 mail provider 응답에는 환경설정의 max_attempts 가 정확히 반영되므로 화면 카운트도 정합.\n const maxAttempts = typeof challenge.max_attempts === 'number' ? challenge.max_attempts : 0;\n\n G7Core.state.set({\n identityChallenge: {\n policy_key: payload.policy_key,\n purpose: payload.purpose,\n provider_id: payload.provider_id ?? null,\n render_hint: challenge.render_hint,\n challenge_id: challenge.id,\n expires_at: challenge.expires_at,\n public_payload: challenge.public_payload ?? {},\n target: target ?? null,\n code: '',\n error: null,\n attempts: 0,\n maxAttempts,\n remainingSeconds,\n resendCooldown: 0,\n },\n });\n\n // (4) 카운트다운 타이머 — launcher 자체 setInterval 사용\n // startInterval 핸들러는 등록 시점의 dispatch context 를 클로저로 캡처하는데,\n // 직전의 G7Core.state.set 가 React 비동기 setState 라서 캡처된 context 의 _global 에는\n // identityChallenge 가 아직 없을 수 있음(stale). 그러면 매 tick 표현식에서 expires_at 가\n // undefined 로 평가되어 remainingSeconds 가 영원히 0 으로 남음. launcher 클로저에서\n // expiresMs 를 직접 보유하고 G7Core.state.set 만 매 초 호출하면 stale 경로를 우회.\n let currentExpiresMs = expiresMs;\n let resendCooldown = 0;\n const tickHandle = window.setInterval(() => {\n const remaining = currentExpiresMs > 0\n ? Math.max(0, Math.floor((currentExpiresMs - Date.now()) / 1000))\n : 0;\n resendCooldown = Math.max(0, resendCooldown - 1);\n G7Core.state.set({\n identityChallenge: {\n remainingSeconds: remaining,\n resendCooldown,\n },\n });\n }, 1000);\n\n // 모달 재전송 액션이 새 challenge 를 발급하면 expires_at 이 갱신되는데,\n // 그 시점에는 launcher 클로저의 currentExpiresMs 를 동기화해야 카운트다운이 새 만료시각을 따름.\n // G7Core.state.subscribe 로 _global.identityChallenge.expires_at 변경을 감지.\n let unsubscribe: (() => void) | null = null;\n try {\n unsubscribe = G7Core.state.subscribe?.((next: any) => {\n const updated = next?.identityChallenge?.expires_at;\n if (typeof updated === 'string') {\n const ms = new Date(updated).getTime();\n if (Number.isFinite(ms) && ms !== currentExpiresMs) {\n currentExpiresMs = ms;\n }\n }\n const cd = next?.identityChallenge?.resendCooldown;\n if (typeof cd === 'number' && cd > resendCooldown) {\n // 재전송 액션이 _global.identityChallenge.resendCooldown 을 30 으로 set 한 직후 동기화\n resendCooldown = cd;\n }\n }) ?? null;\n } catch {\n /* subscribe 미지원 환경 — 첫 만료시각 기준으로만 카운트다운 */\n }\n\n // (5) deferred Promise 생성 → 모달 open\n const deferred = identity.createDeferred() as Promise;\n try {\n await G7Core.dispatch({\n handler: 'openModal',\n target: 'identity-challenge-modal',\n });\n } catch (e) {\n logger.error('openModal 실패 — 풀페이지로 폴백:', e);\n window.clearInterval(tickHandle);\n unsubscribe?.();\n return identity.redirectExternally({\n ...payload,\n render_hint: 'external_redirect',\n redirect_url: `/identity/challenge?challenge_id=${encodeURIComponent(challenge.id)}&return=${encodeURIComponent(window.location.href)}`,\n });\n }\n\n // (6) 모달이 resolveIdentityChallenge 호출하면 deferred 가 resolve\n const result = await deferred;\n\n // 정리 — 카운트다운 중단 + subscribe 해제\n window.clearInterval(tickHandle);\n unsubscribe?.();\n\n return result;\n}\n\n/**\n * 부트스트랩 시 코어 인터셉터에 launcher 를 등록합니다.\n *\n * `initTemplate()` 의 핸들러 등록 직후에 호출 — `window.G7Core.identity.setLauncher` 를 사용해\n * 코어의 단일 IdentityGuardInterceptor 정적 클래스에 launcher 를 주입합니다.\n */\nexport function registerSirsoftBasicIdentityLauncher(): void {\n const identity = (window as any).G7Core?.identity;\n if (!identity?.setLauncher) {\n logger.warn(\n 'G7Core.identity 가 아직 초기화되지 않아 launcher 등록을 건너뜁니다. 코어 부트스트랩 순서를 확인하세요.'\n );\n return;\n }\n identity.setLauncher(sirsoftBasicIdentityLauncher);\n logger.log('IDV launcher registered (sirsoft-basic)');\n}\n","/**\n * IconPickerWidget.tsx — sirsoft-basic 템플릿 소유 아이콘 피커 위젯\n *\n * 레이아웃 편집기 [속성] 탭에서 아이콘명 prop(`Icon.name`/`IconButton.iconName` 등)을\n * **검색 가능한 그리드 드롭다운**으로 고른다. 값은 아이콘명 문자열(propValue 로\n * `node.props[propKey]` 기록).\n *\n * **소유 경계**: 아이콘 검색 그리드 UI 는 라이브러리(Font Awesome) 종속\n * 지식이므로 **템플릿이 소유**한다. 코어는 icon-picker 위젯을 제공하지 않으며, 본 위젯을\n * `G7Core.layoutEditor.registerWidget('icon-picker', ...)` 로 등록해 사용한다(코어 예약\n * 접수함이 편집기 로드 전 등록도 큐로 보존 → 편집기 로드 시 flush). 카탈로그(`control.icons`)\n * 도 템플릿 editor-spec 이 공급한다. 본 위젯은 Font Awesome 클래스(`fas fa-{value}`)로\n * 프리뷰를 직접 렌더한다(템플릿이 자기 라이브러리를 알기 때문).\n *\n * 카탈로그 미공급 시 자유입력(text) 폴백.\n */\n\nimport React from 'react';\n\n/** 코어 WidgetProps 와 호환되는 최소 형태 — 코어 타입 import 회피(IIFE 번들 분리 안전) */\ninterface IconCatalogEntry {\n value: string;\n label?: string;\n keywords?: string[];\n group?: string;\n preview?: { html?: string; className?: string };\n}\ninterface IconPickerWidgetProps {\n control: { icons?: unknown; iconColumns?: number; iconSearchPlaceholder?: string } & Record<\n string,\n unknown\n >;\n value: unknown;\n onChange: (value: unknown) => void;\n t: (key: string, params?: Record) => string;\n}\n\nfunction readCatalog(control: IconPickerWidgetProps['control']): IconCatalogEntry[] {\n const icons = control.icons;\n if (!Array.isArray(icons)) return [];\n return icons.filter(\n (e): e is IconCatalogEntry =>\n !!e && typeof e === 'object' && typeof (e as IconCatalogEntry).value === 'string',\n );\n}\n\nfunction entryLabel(entry: IconCatalogEntry, t: IconPickerWidgetProps['t']): string {\n const label = entry.label;\n if (typeof label === 'string') return label.startsWith('$t:') ? t(label.slice(3)) : label;\n return entry.value;\n}\n\nfunction matchesQuery(entry: IconCatalogEntry, label: string, q: string): boolean {\n if (q === '') return true;\n const needle = q.toLowerCase();\n if (entry.value.toLowerCase().includes(needle)) return true;\n if (label.toLowerCase().includes(needle)) return true;\n return (entry.keywords ?? []).some((k) => k.toLowerCase().includes(needle));\n}\n\n/** FA 프리뷰 — preview.html → preview.className → `fas fa-{value}` (FA 직접 렌더) → 텍스트 */\nfunction IconPreview({ entry }: { entry: IconCatalogEntry }): React.ReactElement {\n const preview = entry.preview;\n if (preview?.html) {\n return (\n \n );\n }\n if (preview?.className) {\n return ;\n }\n // 템플릿은 자기 라이브러리(Font Awesome)를 알므로 클래스 직접 합성.\n return ;\n}\n\nexport function IconPickerWidget({\n control,\n value,\n onChange,\n t,\n}: IconPickerWidgetProps): React.ReactElement {\n const catalog = readCatalog(control);\n const current = value === undefined || value === null ? '' : String(value);\n const columns = typeof control.iconColumns === 'number' ? control.iconColumns : 6;\n const searchPlaceholderKey = control.iconSearchPlaceholder;\n const searchPlaceholder =\n typeof searchPlaceholderKey === 'string' && searchPlaceholderKey.startsWith('$t:')\n ? t(searchPlaceholderKey.slice(3))\n : t('layout_editor.icon_picker.search_placeholder');\n\n const [query, setQuery] = React.useState('');\n\n // 카탈로그 미공급 → 자유입력 폴백.\n if (catalog.length === 0) {\n return (\n \n onChange(e.target.value === '' ? undefined : e.target.value)}\n style={inputStyle}\n />\n
\n );\n }\n\n const labelOf = (e: IconCatalogEntry): string => entryLabel(e, t);\n const filtered = catalog.filter((e) => matchesQuery(e, labelOf(e), query));\n\n return (\n \n setQuery(e.target.value)}\n style={inputStyle}\n />\n \n onChange(undefined)}\n aria-pressed={current === ''}\n style={current === '' ? cellSelected : cell}\n >\n —\n \n {filtered.map((entry) => {\n const selected = entry.value === current;\n return (\n onChange(entry.value)}\n style={selected ? cellSelected : cell}\n >\n \n \n );\n })}\n
\n {filtered.length === 0 && (\n
\n {t('layout_editor.icon_picker.no_results')}\n
\n )}\n
\n );\n}\n\nconst wrap: React.CSSProperties = { display: 'flex', flexDirection: 'column', gap: 6, width: '100%' };\nconst inputStyle: React.CSSProperties = { padding: '5px 8px', fontSize: 12, border: '1px solid #cbd5e1', borderRadius: 6, width: '100%' };\nconst grid: React.CSSProperties = { display: 'grid', gap: 4, maxHeight: 220, overflowY: 'auto', padding: 2 };\nconst cell: React.CSSProperties = { display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: 34, padding: 4, border: '1px solid #e2e8f0', borderRadius: 6, background: '#fff', cursor: 'pointer' };\nconst cellSelected: React.CSSProperties = { ...cell, border: '2px solid #2563eb', background: '#eff6ff' };\nconst previewBox: React.CSSProperties = { display: 'inline-flex', alignItems: 'center', justifyContent: 'center', fontSize: 16, lineHeight: 1 };\nconst previewText: React.CSSProperties = { fontSize: 10, color: '#475569', fontFamily: 'monospace', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: '100%' };\nconst emptyHint: React.CSSProperties = { fontSize: 11, color: '#94a3b8', fontStyle: 'italic', padding: '4px 2px' };\n","/**\n * registerEditorWidgets.ts — sirsoft-basic 편집기 커스텀 위젯 등록\n *\n * 템플릿 부트스트랩(initTemplate)에서 호출. `G7Core.layoutEditor` 는 코어 예약 접수함\n * (stub)이 메인 번들에서 항상 노출하므로, 편집기 셸 로드 전에 호출해도 등록이 큐에\n * 보존되었다가 편집기 로드 시 flush 된다(타이밍 안전).\n *\n * 등록 위젯:\n * - `icon-picker` — Font Awesome 검색 그리드(템플릿 소유 UI, 라이브러리 종속).\n */\n\nimport React from 'react';\nimport { IconPickerWidget } from './IconPickerWidget';\n\nconst logger = (window as any).G7Core?.createLogger?.('Template:sirsoft-basic:EditorWidgets') ?? {\n log: (...a: unknown[]) => console.log('[Template:sirsoft-basic:EditorWidgets]', ...a),\n warn: (...a: unknown[]) => console.warn('[Template:sirsoft-basic:EditorWidgets]', ...a),\n};\n\n/**\n * 편집기 커스텀 위젯을 코어 레지스트리에 등록한다. 멱등 — `G7Core.layoutEditor` 부재(코어\n * 미초기화)면 no-op(다음 호출에서 재시도하거나 stub 이 보존).\n */\nexport function registerSirsoftBasicEditorWidgets(): void {\n if (typeof window === 'undefined') return;\n const layoutEditor = (window as any).G7Core?.layoutEditor;\n if (!layoutEditor?.registerWidget) {\n logger.warn('G7Core.layoutEditor 미노출 — icon-picker 위젯 등록 보류');\n return;\n }\n // 코어 위젯 레지스트리는 React 컴포넌트를 받는다. WidgetProps 형태로 호출됨.\n layoutEditor.registerWidget('icon-picker', IconPickerWidget as React.ComponentType);\n logger.log(\"편집기 위젯 'icon-picker' 등록됨(Font Awesome 검색 그리드)\");\n}\n","// e2e:allow편집기 위젯(icon-picker) 등록을 module-load 시점으로 이동(결함#3, admin 동기 — 직접 하드로드 시 위젯 누락 해소). 단위 회귀는 registerEditorWidgets.test.ts(module-load 등록 + index.ts 최상위 호출 정적 가드).\n/**\n * Sirsoft Basic User Template\n *\n * 그누보드7 템플릿 엔진용 사용자 템플릿 컴포넌트 패키지\n * Nexibase 스타일 기반\n */\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Template:sirsoft-basic')) ?? {\n log: (...args: unknown[]) => console.log('[Template:sirsoft-basic]', ...args),\n warn: (...args: unknown[]) => console.warn('[Template:sirsoft-basic]', ...args),\n error: (...args: unknown[]) => console.error('[Template:sirsoft-basic]', ...args),\n};\n\n// Styles\nimport './styles/main.css';\n\n// Basic Components (Header, Footer는 composite에서 사용하므로 여기서는 별도 이름으로 export)\nexport {\n Button,\n type ButtonProps,\n FileInput,\n type FileInputProps,\n Input,\n type InputProps,\n PasswordInput,\n type PasswordInputProps,\n type PasswordRule,\n defaultPasswordRules,\n availablePasswordRules,\n Textarea,\n type TextareaProps,\n Label,\n type LabelProps,\n Div,\n type DivProps,\n Span,\n type SpanProps,\n P,\n type PProps,\n Img,\n type ImgProps,\n H1,\n type H1Props,\n H2,\n type H2Props,\n H3,\n type H3Props,\n H4,\n type H4Props,\n Ul,\n type UlProps,\n Ol,\n type OlProps,\n Li,\n type LiProps,\n A,\n type AProps,\n Form,\n type FormProps,\n Select,\n type SelectProps,\n Option,\n type OptionProps,\n Optgroup,\n type OptgroupProps,\n Checkbox,\n type CheckboxProps,\n Table,\n type TableProps,\n Thead,\n type TheadProps,\n Tbody,\n type TbodyProps,\n Tr,\n type TrProps,\n Th,\n type ThProps,\n Td,\n type TdProps,\n Nav,\n type NavProps,\n Section,\n type SectionProps,\n Svg,\n type SvgProps,\n Icon,\n type IconProps,\n Code,\n type CodeProps,\n Hr,\n type HrProps,\n IconName,\n type IconStyle,\n type IconSize,\n} from './components/basic';\n\n// Composite Components\nexport * from './components/composite';\n\n// Layout Components\nexport * from './components/layout';\n\n// Template Metadata\nimport templateMetadata from '../template.json';\n\n// Handlers\nimport { handlerMap } from './handlers';\n\n// IDV Modal Launcher (engine-v1.46.0+)\nimport { registerSirsoftBasicIdentityLauncher } from './handlers/identityLauncher';\n\n// 레이아웃 편집기 커스텀 위젯(icon-picker 등) 등록\nimport { registerSirsoftBasicEditorWidgets } from './layout-editor/registerEditorWidgets';\n\n// handlerMap을 전역으로 노출 (로케일 변경 시 재등록용)\nif (typeof window !== 'undefined') {\n (window as any).G7TemplateHandlers = handlerMap;\n}\n\n/**\n * 템플릿 메타데이터 export\n *\n * template.json 파일의 내용을 번들에 포함시켜 API 호출 없이\n * 코어 엔진에서 직접 접근 가능하도록 합니다.\n */\nexport { templateMetadata };\n\n/**\n * 템플릿 초기화 함수\n *\n * 코어 엔진에 커스텀 핸들러를 등록합니다.\n */\nexport function initTemplate(): void {\n // ActionDispatcher가 로드될 때까지 대기 후 핸들러 등록\n if (typeof window !== 'undefined') {\n let retryCount = 0;\n const maxRetries = 50; // 최대 5초 대기 (50 * 100ms)\n\n const registerHandlers = () => {\n const actionDispatcher = (window as any).G7Core?.getActionDispatcher?.();\n\n if (actionDispatcher) {\n // handlerMap의 모든 핸들러를 자동으로 등록\n Object.entries(handlerMap).forEach(([name, handler]) => {\n actionDispatcher.registerHandler(name, handler);\n });\n\n logger.log(`${Object.keys(handlerMap).length} custom handler(s) registered:`, Object.keys(handlerMap));\n\n // IDV Modal Launcher 등록 (window.G7Core.identity.setLauncher 사용)\n registerSirsoftBasicIdentityLauncher();\n } else {\n retryCount++;\n if (retryCount <= maxRetries) {\n logger.warn(`ActionDispatcher not found, retrying... (${retryCount}/${maxRetries})`);\n setTimeout(registerHandlers, 100);\n } else {\n logger.error('Failed to register handlers: ActionDispatcher not available after maximum retries');\n }\n }\n };\n\n // window.load 이벤트 사용 (모든 리소스 로드 완료 후)\n if (document.readyState === 'complete') {\n registerHandlers();\n } else {\n window.addEventListener('load', registerHandlers);\n }\n }\n}\n\n// 레이아웃 편집기 커스텀 위젯(icon-picker) 등록 — 모듈 로드 시점에 즉시 실행한다.\n// ActionDispatcher 가용을 기다리는 `registerHandlers`(window.load\n// 게이트) 안에서 등록하면, 편집기 URL 을 직접 하드로드한 경로에서 등록이 편집기 셸 마운트보다\n// 늦어 icon-picker 위젯이 누락된다(\"Unsupported control\"). `G7Core.layoutEditor` 예약 접수함\n// (ready 큐 stub)은 편집기 로드 전 등록도 큐로 보존했다가 flush 하므로, 핸들러 등록 타이밍과\n// 무관하게 모듈 로드 시 즉시 등록하는 것이 진입 경로(SPA 전환 / 직접 로드)와 무관하게 결정적이다.\nregisterSirsoftBasicEditorWidgets();\n\n// 템플릿 초기화 자동 실행\ninitTemplate();\n"],"names":["G7Core","Button","forwardRef","children","variant","size","className","props","ref","baseClasses","mergedClassName","jsx","Div","React","Span","Svg","Input","label","error","onChange","onKeyPress","value","defaultValue","type","checked","defaultChecked","isCheckableType","isComposingRef","useRef","internalRef","useImperativeHandle","localValue","setLocalValue","useState","useEffect","handleCompositionStart","useCallback","handleCompositionEnd","e","currentValue","changeEvent","handleChange","newValue","handleKeyPress","loadingactions","formdata","validProps","inputProps","FileInput","accept","maxSize","onError","buttonText","placeholder","disabled","inputRef","fileName","setFileName","rootEditorProps","key","val","handleClick","file","errorMsg","handleClear","IconName","iconNameMap","Icon","name","iconStyle","color","spin","pulse","fixedWidth","ariaLabel","style","styleClassMap","rawName","mappedName","iconName","classes","accessibilityLabel","t","params","availablePasswordRules","param","types","defaultPasswordRules","parseRuleString","ruleString","paramStr","rule","PasswordInput","showToggle","showValidation","isConfirmField","confirmTarget","onMatchChange","onValidityChange","rules","enableRules","showRules","wrapperClassName","validationClassName","showPassword","setShowPassword","capsLockOn","setCapsLockOn","internalValue","setInternalValue","parsedRules","useMemo","ruleStr","parsed","displayRules","validationResults","acc","isMatch","isAllValid","v","failedRules","passed","handleToggle","prev","handleKeyEvent","editorRootProps","inputRestProps","k","jsxs","labelParams","Textarea","textareaRef","textareaValueProps","Label","P","Img","alt","H1","H2","H3","H4","Ul","Ol","Li","A","Form","logger","args","getLocaleName","locale","fromAppConfig","Select","options","searchable","searchPlaceholder","editorAttrs","isOpen","setIsOpen","searchTerm","setSearchTerm","dropdownPos","setDropdownPos","containerRef","buttonRef","searchInputRef","dropdownRef","normalizedOptions","selectedLabel","opt","visibleOptions","needle","timer","updateDropdownPos","rect","spaceBelow","openUpward","handleClickOutside","event","target","handleKeyDown","handleSelect","optionValue","hasCustomStyle","hasTextColor","baseButtonClass","rootDomProps","createPortal","option","isSelected","Option","Optgroup","Checkbox","Table","Thead","Tbody","Tr","Th","Td","Nav","Section","Code","Hr","Header","getEffectiveTheme","mode","applyTheme","effectiveTheme","getInitialTheme","savedTheme","ThemeToggle","onThemeChange","autoText","lightText","darkText","id","initialTheme","currentMode","setCurrentMode","showMenu","setShowMenu","menuRef","mediaQuery","handleThemeChange","getCurrentIcon","SIZE_CLASSES","BASE_CONTAINER_CLASSES","WITHDRAWN_CLASSES","INITIAL_BG_CLASSES","Avatar","author","avatar","text","isWithdrawn","isGuest","actualAvatar","actualName","actualIsWithdrawn","actualIsGuest","containerClasses","initialBgClass","renderContent","scopeSlotChildDef","componentDef","containerId","SlotContainer","slotId","emptyContent","slotComponents","setSlotComponents","forceUpdate","getSlotContext","directSlotContext","g7Core","updateSlotComponents","slotContext","getDynamicRenderer","DynamicRenderer","registration","dataContext","parentFormContext","getParentComponentContext","translationContext","scopedDef","NotificationCenter","notifications","unreadCount","hasMore","loading","titleText","emptyText","markAllReadText","deleteAllText","unreadOnlyText","unreadOnly","onNotificationClick","onClose","onLoadMore","onMarkAllRead","onDeleteAll","onDelete","onUnreadOnlyToggle","dropdownAlign","showNotifications","setShowNotifications","notificationRef","scrollRef","sentinelRef","visibleUnreadIdsRef","onLoadMoreRef","hasMoreRef","loadingRef","notificationsCountRef","lastRequestedCountRef","observer","entry","entries","isUnread","item","displayCount","n","handleClose","unreadIds","useLayoutEffect","dropdown","vw","margin","shift","Fragment","notification","navigate","path","logo","siteName","user","cartCount","notificationCount","boards","maxVisibleBoards","onMobileMenuOpen","availableLocales","currentLocale","shopBase","notificationHasMore","notificationLoading","notificationUnreadOnly","notificationTitleText","notificationEmptyText","notificationMarkAllReadText","notificationDeleteAllText","notificationUnreadOnlyText","onNotificationClose","onNotificationLoadMore","onNotificationMarkAllRead","onNotificationDeleteAll","onNotificationDelete","onNotificationUnreadOnlyToggle","searchQuery","setSearchQuery","showUserMenu","setShowUserMenu","showMoreBoards","setShowMoreBoards","showLangMenu","setShowLangMenu","dropdownPosition","setDropdownPosition","currentPath","setCurrentPath","userMenuRef","moreButtonRef","langMenuRef","useResponsive","responsiveValue","isMobile","handlePopState","originalPushState","isActiveRoute","exact","isShopActive","base","getNavButtonClass","isActive","baseClass","visibleBoards","hiddenBoards","handleSearch","handleLogout","handleLocaleChange","HeaderBasic","board","Footer","TABLET_BREAKPOINT","DESKTOP_BREAKPOINT","siteDescription","copyrightText","socialLinks","linkGroups","currentYear","width","isDesktop","gridColumns","defaultLinkGroups","groups","socialIconMap","FooterBasic","url","group","index","link","linkIndex","MobileNav","drawerRef","isPortable","handleEscape","handleOverlayClick","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","apply","construct","x","func","thisArg","_len","_key","Func","_len2","_key2","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","_len3","_key3","_len4","_key4","addToSet","set","array","transformCaseFunc","l","element","lcElement","cleanArray","clone","object","newObject","property","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","suffix","ATTR_NAME","policyName","scriptUrl","_createHooksMap","createDOMPurify","window","DOMPurify","root","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","parentTagName","_forceRemove","node","_removeAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","body","_createNodeIterator","_isClobbered","_isNode","_executeHooks","currentNode","data","hook","_sanitizeElements","content","_isBasicCustomElement","parentNode","childNodes","childCount","i","childClone","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attributes","hookEvent","attr","namespaceURI","attrValue","initValue","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","tag","entryPoint","hookFunction","purify","usePreferredCurrency","read","state","currency","setCurrency","subscribe","unsubscribe","getStarTypes","avg","rounded","pos","ProductCard","product","onClick","preferredCurrency","getPrice","field","multiCurrencyField","multiCurrencyData","formattedField","displayName","sellingPrice","listPrice","hasDiscount","isNotOnSale","labels","sanitizeHighlight","nameHighlighted","descriptionHtml","identifier","idx","MODULE_CAROUSEL","MODULE_CONTROLLER","MODULE_NAVIGATION","MODULE_NO_SCROLL","MODULE_PORTAL","MODULE_ROOT","MODULE_TOOLBAR","PLUGIN_COUNTER","PLUGIN_FULLSCREEN","PLUGIN_SLIDESHOW","PLUGIN_THUMBNAILS","PLUGIN_ZOOM","SLIDE_STATUS_LOADING","SLIDE_STATUS_PLAYING","SLIDE_STATUS_ERROR","SLIDE_STATUS_COMPLETE","SLIDE_STATUS_PLACEHOLDER","activeSlideStatus","status","ACTIVE_SLIDE_LOADING","ACTIVE_SLIDE_PLAYING","ACTIVE_SLIDE_ERROR","ACTIVE_SLIDE_COMPLETE","CLASS_FULLSIZE","CLASS_FLEX_CENTER","CLASS_NO_SCROLL","CLASS_NO_SCROLL_PADDING","CLASS_SLIDE","CLASS_SLIDE_WRAPPER","CLASS_SLIDE_WRAPPER_INTERACTIVE","ACTION_PREV","ACTION_NEXT","ACTION_SWIPE","ACTION_CLOSE","EVENT_ON_POINTER_DOWN","EVENT_ON_POINTER_MOVE","EVENT_ON_POINTER_UP","EVENT_ON_POINTER_LEAVE","EVENT_ON_POINTER_CANCEL","EVENT_ON_KEY_DOWN","EVENT_ON_KEY_UP","EVENT_ON_WHEEL","VK_ESCAPE","VK_ARROW_LEFT","VK_ARROW_RIGHT","ELEMENT_BUTTON","ELEMENT_ICON","IMAGE_FIT_CONTAIN","IMAGE_FIT_COVER","UNKNOWN_ACTION_TYPE","cssPrefix$3","clsx","cssClass","cssVar","composePrefix","prefix","makeComposePrefix","translateLabel","defaultLabel","_a","translateSlideCounter","slides","getSlideIndex","cleanup","cleaners","cleaner","makeUseContext","contextName","context","ctx","hasWindow","round","decimals","factor","isImageSlide","slide","isImageFitCover","image","imageFit","parseInt","parseLengthPercentage","input","computeSlideRect","containerRect","padding","paddingValue","paddingPixels","devicePixelRatio","slidesCount","hasSlides","getSlide","getSlideIfPresent","getSlideKey","addToolbarButton","toolbar","button","buttons","restToolbar","buttonWithKey","result","calculatePreload","carousel","minimum","isReact19","makeInertWhen","condition","reflow","LightboxDefaultProps","createModule","component","createNode","module","traverseNode","traverse","nodes","withPlugins","plugins","augmentations","config","contains","addParent","append","addChild","precede","addSibling","addModule","replace","augment","augmentation","plugin","A11yContext","useA11yContext","A11yContextProvider","focusWithin","setFocusWithin","autoPlaying","setAutoPlaying","onFocus","onBlur","trackAndDelegate","focusWithinValue","DocumentContext","useDocumentContext","DocumentContextProvider","nodeRef","getOwnerDocument","EventsContext","useEvents","EventsProvider","subscriptions","topic","callback","cb","LightboxPropsContext","useLightboxProps","LightboxPropsProvider","LightboxStateContext","useLightboxState","LightboxDispatchContext","useLightboxDispatch","reducer","action","increment","globalIndex","currentIndex","currentSlide","animation","LightboxStateProvider","dispatch","TimeoutsContext","useTimeouts","TimeoutsProvider","timeouts","tid","removeTimeout","fn","delay","IconButton","renderIcon","rest","styles","buttonLabel","svgIcon","icon","createIcon","glyph","createIconDisabled","CloseIcon","PreviousIcon","NextIcon","LoadingIcon","_","ErrorIcon","useMotionPreference","reduceMotion","setReduceMotion","_b","listener","currentTransformation","y","z","matcher","values","useAnimation","computeAnimation","snapshot","_c","keyframes","duration","easing","onfinish","err","currentSnapshot","useContainerRect","observerRef","setContainerRect","updateContainerRect","parse","useDelay","timeoutId","setTimeout","clearTimeout","useEventCallback","setRef","useForkRef","refA","refB","refValue","useLoseFocus","focus","focused","useRTL","isRTL","setIsRTL","useSensors","subscribers","notifySubscribers","registerSensors","subscribeSensors","listeners","el","useThrottle","lastCallbackTime","delayCallback","executeCallback","slidePrefix","slideImagePrefix","ImageSlide","offset","render","imageProps","onLoad","_d","_e","_f","_g","_h","setStatus","publish","imageRef","handleLoading","img","setImageRef","handleOnLoad","handleOnError","cover","nonInfinite","fallback","maxWidth","maxHeight","defaultStyle","srcSet","a","b","estimateActualWidth","sizes","imagePropsStyle","imagePropsClassName","restImageProps","LightboxRoot","trackFocusWithin","SwipeState","usePointerEvents","onPointerDown","onPointerMove","onPointerUp","Gesture","SWIPE_THRESHOLD","usePointerSwipe","disableSwipeNavigation","closeOnBackdropClick","isSwipeValid","containerWidth","swipeAnimationDuration","onSwipeStart","onSwipeProgress","onSwipeFinish","onSwipeCancel","pullUpEnabled","pullDownEnabled","onPullStart","onPullProgress","onPullFinish","onPullCancel","pointers","activePointer","startTime","gesture","clearPointer","currentPointers","p","addPointer","lookupPointer","pointerId","exceedsPullThreshold","threshold","pointer","currentOffset","isCurrentPointer","deltaX","deltaY","startGesture","newGesture","usePreventWheelDefaults","preventDefaultWheelX","preventDefaultWheelY","horizontal","useWheelSwipe","swipeState","intent","intentCleanup","resetCleanup","wheelInertia","wheelInertiaCleanup","cancelSwipeIntentCleanup","cancelSwipeResetCleanup","handleCleanup","handleCancelSwipe","currentSwipeOffset","onWheel","setWheelInertia","inertia","currentSwipeIntent","newSwipeOffset","cssContainerPrefix","ControllerContext","useController","Controller","controller","on","closeOnPullUp","closeOnPullDown","toolbarWidth","setToolbarWidth","setSwipeState","swipeOffset","pullOffset","pullOpacity","cleanupAnimationIncrement","cleanupSwipeOffset","cleanupPullOffset","setContainerRef","handleContainerRef","carouselRef","setCarouselRef","rtl","getLightboxProps","getLightboxState","next","close","setSwipeOffset","setPullOffset","offsetValue","preparePullAnimation","translate","pull","cancel","prepareAnimation","isAnimationPlaying","parsedSpacing","spacingValue","swipe","swipeDuration","swipeEasing","direction","count","newSwipeState","newSwipeAnimationDuration","elapsedTime","expectedTime","swipeParams","pullParams","focusOnMount","onViewCallback","ControllerModule","cssPrefix$2","cssSlidePrefix","CarouselSlide","slideRect","offscreen","renderSlide","rendered","Placeholder","Carousel","preload","items","CarouselModule","useNavigationState","prevDisabled","nextDisabled","useKeyboardNavigation","throttle","NavigationButton","Navigation","buttonPrev","buttonNext","iconPrev","iconNext","NavigationModule","noScroll","noScrollPadding","isHTMLElement","padScrollbar","computedValue","originalValue","NoScroll","getOwnerWindow","ownerWindow","documentElement","scrollbar","elements","clean","NoScrollModule","cssPrefix$1","setAttribute","attribute","previousValue","Portal","portal","mounted","setMounted","visible","setVisible","restoreFocus","animationDuration","handleEnter","handleRef","PortalModule","Root","RootModule","cssPrefix","Toolbar","buttonClose","iconClose","renderCloseButton","ToolbarModule","renderNode","child","mergeAnimation","defaultAnimation","defaultAnimationEasing","restDefaultAnimation","restAnimation","Lightbox","restProps","defaultCarousel","defaultRender","defaultToolbar","defaultController","defaultNoScroll","defaultOn","defaultSlides","defaultIndex","defaultPlugins","restDefaultProps","defaultZoomProps","validateMinZoom","minZoom","resolveZoomProps","zoom","useZoomAnimation","offsetX","offsetY","zoomWrapperRef","zoomAnimation","zoomAnimationStart","zoomAnimationDuration","playZoomAnimation","useZoomCallback","onZoomCallback","useZoomProps","useZoomImageRect","imageDimensions","imageRect","maxImageRect","maxZoomPixelRatio","height","maxZoom","distance","pointerA","pointerB","scaleZoom","delta","clamp","useZoomSensors","zoomIn","zoomOut","changeZoom","changeOffsets","activePointers","lastPointerDown","pinchZoom","keyboardMoveDistance","zoomInMultiplier","wheelZoomDistanceFactor","scrollToZoom","doubleTapDelay","doubleClickDelay","doubleClickMaxStops","pinchZoomDistanceFactor","pinchZoomV4","translateCoordinates","pageX","pageY","scrollX","scrollY","left","top","onKeyDown","metaKey","ctrlKey","meta","preventDefault","move","replacePointer","timeStamp","targetZoom","initialDistance","currentDistance","coordinate","cleanupSensors","useZoomState","setZoom","setOffsetX","setOffsetY","animate","currentSource","dx","dy","newZoom","newOffsetX","newOffsetY","maxOffsetX","maxOffsetY","rapid","handleControllerRectChange","ZoomControllerContext","useZoom","ZoomContextProvider","zoomWrapper","setZoomWrapper","zoomRef","ZoomInIcon","ZoomOutIcon","ZoomButton","onLoseFocus","wasEnabled","wasFocused","zoomInCallback","zoomOutCallback","zoomDisabled","ZoomButtonsGroup","zoomInRef","zoomOutRef","focusSibling","sibling","focusZoomIn","focusZoomOut","ZoomToolbarControl","isResponsiveImageSlide","current","source","ResponsiveImage","interactive","targetWidth","pixelDensity","handleResize","targetSource","handlePreload","currentPreload","ZoomWrapper","setImageDimensions","slideProps","Zoom","zoomProps","defaultCounterProps","resolveCounterProps","counter","CounterComponent","separator","legacyClassName","legacyRest","Counter","defaultSlideshowProps","resolveSlideshowProps","slideshow","SlideshowContext","useSlideshow","SlideshowContextProvider","finite","autoplay","wasPlaying","playing","setPlaying","scheduler","slideStatus","play","pause","cancelScheduler","scheduleNextSlide","onSlideshowStart","onSlideshowStop","PlayIcon","PauseIcon","SlideshowButton","focusListeners","Slideshow","defaultFullscreenProps","resolveFullscreenProps","fullscreen","FullscreenContext","useFullscreen","FullscreenContextProvider","fullscreenProps","auto","setDisabled","setFullscreen","wasFullscreen","ownerDocument","getFullscreenElement","fullscreenElement","enter","container","exit","onEnterFullscreen","onExitFullscreen","handleAutoFullscreen","EnterFullscreenIcon","ExitFullscreenIcon","FullscreenButton","Fullscreen","defaultThumbnailsProps","resolveThumbnailsProps","thumbnails","useThumbnailsProps","cssThumbnailPrefix","VideoThumbnailIcon","UnknownThumbnailIcon","renderThumbnail","customThumbnail","imageSlideProps","thumbnailIconClass","activePrefix","fadeInPrefix","fadeOutPrefix","placeholderPrefix","DELAY","DURATION","Thumbnail","fadeIn","fadeOut","active","onLoseFocusCallback","isHorizontal","position","boxSize","dimension","getThumbnailKey","thumbnail","poster","ThumbnailsTrack","track","border","borderStyle","borderColor","borderRadius","gap","vignette","handleControllerSwipe","animationOffset","trackRect","slideIndex","fadeAnimationDuration","ThumbnailsContext","useThumbnails","ThumbnailsContextProvider","hidden","thumbnailsIcon","ThumbnailsVisible","ThumbnailsHidden","ThumbnailsButton","show","hide","Thumbnails","thumbnailsProps","I","downloadAuthenticatedFile","filename","blob","objectUrl","downloadFile","executeImageDownload","downloadUrl","DownloadButton","onDownload","isDownloading","setIsDownloading","handleDownload","ImageGallery","images","startIndex","enableZoom","enableSlideshow","enableFullscreen","showCounter","showDownload","showThumbnails","setCurrentIndex","currentIndexRef","currentImage","previewImages","useImageGallery","setImages","setStartIndex","openGallery","galleryImages","closeGallery","getImageSrc","ProductImageViewer","selectedIndex","setSelectedIndex","galleryProps","QuantitySelector","min","max","handleDecrease","handleIncrease","handleInputChange","clampedValue","handleInputBlur","isMinDisabled","isMaxDisabled","REACTION_CONFIGS","PostReactions","reactions","userReaction","postId","onReact","sizeClasses","emojiSizes","getReactionCount","r","RichTextEditor","initialValue","imageUploadUrl","minHeight","editorRef","setContent","showCodeView","setShowCodeView","showLinkModal","setShowLinkModal","linkUrl","setLinkUrl","applyFormat","format","handleImageUpload","formData","response","handleFileSelect","insertLink","toolbarButtons","headingButtons","listButtons","btn","HtmlContent","isHtml","purifyConfig","actualContent","textClasses","defaultConfig","sanitizedHtml","match","before","href","after","HtmlEditor","isHtmlProp","onIsHtmlChange","rows","showHtmlModeToggle","contentClassName","htmlFieldName","readOnly","setIsHtml","localContent","setLocalContent","previewMode","setPreviewMode","handleContentChange","newContent","handleHtmlModeChange","isHtmlMode","handlePreviewModeToggle","ExpandableContent","expandText","collapseText","isExpanded","setIsExpanded","needsExpand","setNeedsExpand","contentRef","checkHeight","scrollHeight","toggleExpand","resolvedExpandText","resolvedCollapseText","Modal","title","iconClassName","closeOnOverlayClick","showCloseButton","closeOnEscape","shouldCloseOnBackdrop","modalRef","previousFocusRef","focusableElements","firstElement","lastElement","handleTab","zIndex","ConfirmDialog","message","confirmText","cancelText","onConfirm","onCancel","confirmButtonVariant","_cancelButtonVariant","_closeOnOverlay","isLoading","loadingText","resolvedConfirmText","resolvedCancelText","resolvedLoadingText","handleConfirm","handleCancel","confirmVariantClassMap","FileUploaderContext","createContext","FileUploaderProvider","useFileUploaderContext","useContext","_mergeNamespaces","copyExifWithoutOrientation","getApp1Segment","o","s","f","c","UZIP","u","h","d","g","m","w","E","F","B","U","C","Q","M","S","R","T","O","H","L","pushV","UPNG","decodeImage","_getBPP","_decompress","_inflate","_filterZero","_paeth","_IHDR","_copyTile","addErr","N","D","dither","_main","compressPNG","compress","_prepareDiff","_updateFrame","quantize","_filterLine","getKDtree","getNearest","planeDst","stats","estats","splitPixels","vecDot","set16","set32","seek","convert","CustomFile","CustomFileReader","getFilefromDataUrl","getDataUrlFromFile","loadImage","getBrowserName","approximateBelowMaximumCanvasSizeOfBrowser","getNewCanvasAndCtx","drawImageInCanvas","isIOS","drawFileInCanvas","$Try_2_Post","$Try_2_Catch","$Try_3_Catch","canvasToFile","$If_4","$If_5","$If_6","cleanupCanvasMemory","isAutoOrientationInBrowser","getExifOrientation","handleMaxWidthOrHeight","followExifOrientation","incProgress","setProgress","$If_2","$Loop_3","$Loop_3_exit","compressOnWebWorker","imageCompression","$Try_1_Catch","formatFileSize","bytes","units","extractErrorMessage","axiosError","firstError","getFileIcon","mimeType","useFileUploader","attachmentableType","attachmentableId","collection","maxFiles","maxConcurrentUploads","compressionOptions","roleIds","autoUpload","initialFiles","endpoints","onFilesChange","onUploadComplete","onUploadError","onRemove","onReorder","uploadTriggerEvent","confirmBeforeRemove","uploadParams","existingFiles","setExistingFiles","pendingFiles","setPendingFiles","isDragOver","setIsDragOver","activeUploadsRef","deletedIdsRef","uploadedFilesRef","confirmDialogOpen","setConfirmDialogOpen","itemToDelete","setItemToDelete","isDeleting","setIsDeleting","hasReorderedRef","customOrder","setCustomOrder","prevInitialFilesRef","galleryOpen","setGalleryOpen","galleryStartIndex","setGalleryStartIndex","galleryKeyRef","authenticatedImageUrls","setAuthenticatedImageUrls","authenticatedImageUrlsRef","stableInitialFiles","filteredFiles","initialIds","sessionUploaded","compressImage","compressionOpts","handleFiles","selectedFiles","totalCount","remainingSlots","filesToAdd","overflow","ext","accepted","mimePrefix","pendingFile","compressedBlob","uploadSingleFile","fileToUpload","roleId","progressEvent","progress","errorMessage","handleUploadAll","filesToUpload","uploadedAttachments","pendingToHashMap","uploadQueue","processQueue","attachment","pendingId","invalidMsg","workers","allExisting","updatedOrder","orderMap","ordered","aOrder","bOrder","executeRemoveAttachment","deleteUrl","itemKey","handleRemove","handleRetry","handleDragEnd","arrayMove","sortable_esm","over","combined","orderedItems","aKey","bKey","oldIndex","newIndex","reordered","newExisting","newPending","reorderedFiles","orderData","imageFiles","handleOpenGallery","imageIndex","cancelled","existingImageFiles","currentIds","ImageGallery$1","allItems","hasFiles","canAddMore","clear","getPendingFiles","FileDropZone","onFiles","useCombinedRefs","refs","canUseDOM","isWindow","elementString","isNode","getWindow","_target$ownerDocument","_target$ownerDocument2","isDocument","Document","isSVGElement","useIsomorphicLayoutEffect","useEvent","handler","handlerRef","useInterval","intervalRef","useLatestValue","dependencies","valueRef","useLazyMemo","useNodeRef","onChangeHandler","setNodeRef","usePrevious","ids","useUniqueId","createAdjustmentFn","modifier","adjustments","accumulator","adjustment","valueAdjustment","add","subtract","hasViewportRelativeCoordinates","isKeyboardEvent","KeyboardEvent","isTouchEvent","TouchEvent","getEventCoordinates","CSS","transform","scaleX","scaleY","_ref","SELECTOR","findFirstFocusableNode","hiddenStyles","HiddenText","LiveRegion","announcement","ariaLiveType","visuallyHidden","useAnnouncement","setAnnouncement","DndMonitorContext","useDndMonitor","registerListener","useDndMonitorProvider","_listener$type","defaultScreenReaderInstructions","defaultAnnouncements","_ref2","_ref3","_ref4","Accessibility","announcements","hiddenTextDescribedById","screenReaderInstructions","announce","liveRegionId","_ref5","_ref6","markup","Action","noop","useSensor","sensor","sensors","defaultCoordinates","distanceBetween","p1","p2","sortCollisionsAsc","sortCollisionsDesc","cornersOfRectangle","getFirstCollision","collisions","firstCollision","centerOfRectangle","closestCenter","collisionRect","droppableRects","droppableContainers","centerRect","droppableContainer","distBetween","closestCorners","corners","rectCorners","distances","corner","effectiveDistance","getIntersectionRatio","right","bottom","targetArea","entryArea","intersectionArea","intersectionRatio","rectIntersection","adjustScale","rect1","rect2","getRectDelta","createRectAdjustmentFn","getAdjustedRect","parseTransform","transformArray","inverseTransform","transformOrigin","parsedTransform","translateX","translateY","defaultOptions","getClientRect","getTransformAgnosticClientRect","getWindowClientRect","isFixed","computedStyle","isScrollable","overflowRegex","getScrollableAncestors","limit","scrollParents","findScrollableAncestors","getFirstScrollableAncestor","firstScrollableAncestor","getScrollableElement","getScrollXCoordinate","getScrollYCoordinate","getScrollCoordinates","Direction","isDocumentScrollingElement","getScrollPosition","scrollingContainer","minScroll","dimensions","maxScroll","isTop","isLeft","isBottom","isRight","defaultThreshold","getScrollDirectionAndSpeed","scrollContainer","scrollContainerRect","acceleration","thresholdPercentage","speed","getScrollElementRect","innerWidth","innerHeight","getScrollOffsets","scrollableAncestors","getScrollXOffset","getScrollYOffset","scrollIntoViewIfNeeded","measure","properties","Rect","scrollOffsets","axis","keys","getScrollOffset","currentOffsets","scrollOffsetsDeltla","Listeners","_this$target","eventName","_this$target2","getEventListenerTarget","EventTarget","hasExceededDistance","measurement","EventName","stopPropagation","KeyboardCode","defaultKeyboardCodes","defaultKeyboardCoordinateGetter","currentCoordinates","KeyboardSensor","activeNode","onStart","keyboardCodes","coordinateGetter","scrollBehavior","code","newCoordinates","coordinatesDelta","scrollDelta","scrollElementRect","clampedCoordinates","canScrollX","canScrollY","newScrollCoordinates","canScrollToNewCoordinates","coordinates","onMove","onEnd","onActivation","activator","isDistanceConstraint","constraint","isDelayConstraint","AbstractPointerSensor","events","listenerTarget","_getEventCoordinates","activationConstraint","bypassActivationConstraint","onPending","initialCoordinates","_getEventCoordinates2","activated","onAbort","_this$document$getSel","PointerSensor","events$1","MouseButton","MouseSensor","events$2","TouchSensor","touches","AutoScrollActivator","TraversalOrder","useAutoScroller","canScroll","draggingRect","enabled","interval","order","pointerCoordinates","scrollableAncestorRects","scrollIntent","useScrollIntent","setAutoScrollInterval","clearAutoScrollInterval","scrollSpeed","scrollDirection","scrollContainerRef","autoScroll","scrollLeft","scrollTop","sortedScrollableAncestors","defaultScrollIntent","previousDelta","previousIntent","useCachedNode","draggableNodes","draggableNode","cachedNode","useCombineActivators","getSyntheticHandler","Sensor","sensorActivators","MeasuringStrategy","MeasuringFrequency","useDroppableMeasuring","containers","dragging","queue","setQueue","frequency","strategy","containersRef","isDisabled","disabledRef","measureDroppableContainers","map","useInitialValue","computeFn","useInitialRect","useMutationObserver","handleMutations","mutationObserver","MutationObserver","useResizeObserver","resizeObserver","ResizeObserver","defaultMeasure","useRect","fallbackRect","setRect","measureRect","currentRect","newRect","records","record","useRectDelta","initialRect","defaultValue$1","useScrollableAncestors","previousNode","ancestors","useScrollOffsets","scrollCoordinates","setScrollCoordinates","prevElements","handleScroll","scrollingElement","previousElements","scrollableElement","useScrollOffsetsDelta","initialScrollOffsets","hasScrollOffsets","useSensorSetup","teardownFns","teardown","useSyntheticListeners","useWindowRect","defaultValue$2","useRects","windowRect","rects","setRects","measureRects","getMeasurableNode","firstChild","useDragOverlayMeasuring","handleNodeChange","defaultSensors","defaultData","defaultMeasuringConfiguration","DroppableContainersMap","_super$get","_this$get$node$curren","_this$get","defaultPublicContext","defaultInternalContext","InternalContext","PublicContext","getInitialState","RestoreFocus","activatorEvent","previousActivatorEvent","previousActiveId","activatorNode","focusableNode","applyModifiers","modifiers","useMeasuringConfiguration","useLayoutShiftScrollCompensation","initialized","rectDelta","ActiveDraggableContext","Status","DndContext","memo","_sensorContext$curren","_dragOverlay$nodeRef$","_dragOverlay$rect","_over$rect","accessibility","collisionDetection","measuring","store","useReducer","dispatchMonitorEvent","registerMonitorListener","isInitialized","activeId","activeRects","_node$data","activeRef","activeSensor","setActiveSensor","setActivatorEvent","latestProps","draggableDescribedById","enabledDroppableContainers","measuringConfiguration","measuringScheduled","activationCoordinates","autoScrollOptions","getAutoScrollerOptions","initialActiveNodeRect","activeNodeRect","containerNodeRect","sensorContext","overNode","dragOverlay","draggingNode","draggingNodeRect","usesDragOverlay","nodeRectDelta","modifiedTranslate","scrollAdjustment","activeNodeScrollDelta","scrollAdjustedTranslate","overId","setOver","appliedTranslate","activeSensorRef","instantiateSensor","sensorInstance","onDragAbort","onDragPending","onDragStart","unstable_batchedUpdates","createHandler","cancelDrop","bindActivatorToSensorInstantiator","nativeEvent","activeDraggableNode","activationContext","activators","onDragMove","onDragOver","overContainer","publicContext","internalContext","activeSensorDisablesAutoscroll","autoScrollGloballyDisabled","NullContext","defaultRole","ID_PREFIX","useDraggable","ariaDescribedById","role","roleDescription","tabIndex","isDragging","setActivatorNodeRef","dataRef","memoizedAttributes","useDndContext","ID_PREFIX$1","defaultResizeObserverConfig","useDroppable","resizeObserverConfig","previous","resizeObserverConnected","callbackId","resizeObserverDisabled","updateMeasurementsFor","resizeObserverTimeout","newElement","previousElement","from","to","newArray","getSortedRects","isValidIndex","itemsEqual","normalizeDisabled","rectSortingStrategy","activeIndex","overIndex","newRects","oldRect","Context","SortableContext","userDefinedItems","disabledProp","useDragOverlay","previousItemsRef","itemsHaveChanged","disableTransforms","contextValue","defaultNewIndexGetter","defaultAnimateLayoutChanges","isSorting","wasDragging","previousItems","previousContainerId","transition","defaultTransition","transitionProperty","disabledTransition","defaultAttributes","useDerivedTransform","derivedTransform","setDerivedtransform","previousIndex","initial","useSortable","animateLayoutChanges","userDefinedAttributes","localDisabled","customData","getNewIndex","localStrategy","globalDisabled","sortedRects","globalStrategy","normalizeLocalDisabled","itemsAfterCurrentSortable","isOver","setDroppableNodeRef","setDraggableNodeRef","displaceItem","shouldDisplaceDragSource","dragSourceDisplacement","finalTransform","shouldAnimateLayoutChanges","getTransition","_localDisabled$dragga","_localDisabled$droppa","hasSortableData","directions","sortableKeyboardCoordinates","filteredContainers","closestId","activeDroppable","newDroppable","newNode","hasDifferentScrollAncestors","hasSameContainer","isSameContainer","isAfterActive","isAfter","rectCoordinates","SortableThumbnailItem","onRetry","onImageClick","isPrimary","onPrimaryClick","isPending","isUploading","isCompressing","hasError","preview","isImage","authenticatedImageUrl","setAuthenticatedImageUrl","isMounted","existingImageUrl","FileList","onDragEnd","onAddClick","enablePrimarySelection","primaryFileId","onPrimaryChange","isExisting","EMPTY_FILES","EMPTY_ROLE_IDS","FileUploader","confirmRemoveTitle","confirmRemoveMessage","apiEndpoints","callbackRef","wrappedOnFilesChange","files","uploader","pendingItem","attachmentItem","SocialIcon","provider","PROVIDER_CONFIGS","SocialLoginButtons","providers","handleSocialLogin","callbackUrl","getButtonText","providerName","filteredProviders","getTranslation","defaultIconMap","typeStyleMap","positionClassMap","Toast","toasts","visibleToasts","setVisibleToasts","prevState","toast","effectiveDuration","ToastItemComponent","isVisible","typeStyle","hideTranslate","PageTransitionIndicator","setIsPending","transitionManager","newIsPending","PageTransitionBlur","TAILWIND_BREAKPOINTS","DISPLAY_CLASSES","LAYOUT_CONTAINERS","TEXT_COMPONENTS","INPUT_COMPONENTS","MEDIA_COMPONENTS","COMPOSITE_SKELETONS","animClass","iterCount","filterChildren","withIf","withoutIf","positiveIf","isNegativeCondition","areMutuallyExclusiveBranches","pickRichestBranch","positive","ifExpr","trimmed","branches","baseExpressions","branch","orMatch","first","best","curr","countDescendants","sum","resolveExpressions","ternaryMatch","sanitizeClassName","sanitized","num","resolveLayoutProps","directionMap","justify","justifyMap","align","alignMap","wrap","wrapMap","cols","getAnimationClass","renderChildren","renderSkeletonNode","resolveClassName","baseClassName","resolveResponsiveDisplay","tokens","displayEntries","otherClasses","token","responsiveMatch","cls","effectiveDisplay","resolvedClassName","extractArbitraryGridCols","iteration","rawClassName","layoutClasses","exprResolved","responsive","barClass","renderedChildren","gridResult","sanitizedLeafClass","heightMap","widthMap","spacing","borderClass","PageSkeleton","components","PageLoading","isDark","bgColor","spinnerColor","textColor","Pagination","currentPage","totalPages","onPageChange","maxVisiblePages","showFirstLast","prevText","nextText","pageNumbers","pages","halfVisible","startPage","endPage","handlePageClick","page","handlePrevious","handleNext","pageNum","SearchBar","controlledValue","onSubmit","showButton","suggestions","onSuggestionClick","showSuggestions","resolvedPlaceholder","isFocused","setIsFocused","previousValueRef","shouldShowSuggestions","handleSuggestionClick","suggestion","syntheticEvent","handleSubmit","avatarSizeMap","AvatarUploader","src","fallbackText","uploadEndpoint","deleteEndpoint","onUploadSuccess","onDeleteSuccess","onDeleteError","showDeleteButton","uploadButtonText","deleteButtonText","confirmDelete","deleteConfirmMessage","confirmUpload","uploadConfirmMessage","uploadSuccessActions","uploadErrorActions","deleteSuccessActions","deleteErrorActions","setIsUploading","localAvatarUrl","setLocalAvatarUrl","setErrorMessage","showDeleteConfirm","setShowDeleteConfirm","showUploadConfirm","setShowUploadConfirm","setPendingFile","previewUrl","setPreviewUrl","inputId","getCsrfToken","getAuthToken","executeUpload","csrfToken","authToken","errorData","handleFileChange","maxBytes","executeDelete","handleDeleteClick","handleDeleteCancel","handleUploadCancel","handleUploadConfirm","currentAvatarUrl","hasAvatar","avatarSize","isConfirmMode","renderButtons","getG7Core","LAYOUT_CLASSES","createDefaultMenuItems","SubText","UserInfo","userId","subText","subTextTitle","showDropdown","clickable","profilePath","layout","menuItems","hideMenuItems","appendMenuItems","actualUserId","menuPosition","setMenuPosition","actualProfilePath","containerClass","isInsideContainer","isInsideDropdown","handleScrollOrResize","getMenuItems","updateMenuPosition","buttonRect","handleMenuItemClick","finalMenuItems","defaultColorClass","nameButtonClass","TabNavigation","tabs","activeTabId","onTabChange","hiddenTabIds","mobileBreakpoint","handleTabClick","tab","handleSelectChange","selectedId","numericId","finalId","selectedTab","visibleTabs","getTabClasses","navClasses","compositeComponents","Header$1","Footer$1","MobileNav$1","SlotContainer$1","NotificationCenter$1","ProductCard$1","ProductImageViewer$1","QuantitySelector$1","PostReactions$1","RichTextEditor$1","HtmlContent$1","HtmlEditor$1","ExpandableContent$1","ConfirmDialog$1","SocialLoginButtons$1","Toast$1","PageTransitionIndicator$1","PageTransitionBlur$1","PageSkeleton$1","PageLoading$1","ThemeToggle$1","Pagination$1","SearchBar$1","Avatar$1","AvatarUploader$1","UserInfo$1","Modal$1","TabNavigation$1","Container","Grid","rowGap","colGap","autoRows","autoCols","flow","autoRowsMap","autoColsMap","flowMap","Flex","grow","shrink","SectionLayout","subtitle","background","centered","shadow","paddingMap","backgroundMap","maxWidthMap","shadowMap","BaseSection","ThreeColumnLayout","leftWidth","rightWidth","leftSlot","centerSlot","rightSlot","leftStyle","centerStyle","rightStyle","CURRENCY_CONFIGS","formatPrice","amount","currencyCode","recalcMultiCurrencyTotal","unitPriceMap","quantity","additionalUnitKrw","krwUnit","unitValue","additionalConverted","total","buildSelectedTotalMultiCurrency","totals","mc","computeAdditionalOptionsTotal","selections","valueId","getGroupKey","getOptionValueByGroupKey","optionValues","optionValuesLocalized","groupKey","convertOptionValuesToRecord","findMatchingOption","optionGroups","currentSelection","selectedValue","addSelectedItemIfCompleteHandler","selectedOptionItems","matchedOption","optionKey","unitPrice","optionLabels","additionalOptionGroups","additionalOptionSelections","additionalOptionsTotal","blockUnitTotal","newItem","nextItems","updateSelectedItemQuantityHandler","itemIndex","newQuantity","updatedItems","totalPrice","setBlockAdditionalOptionHandler","additionalOptionId","isCustomTextMode","customTexts","removeSelectedItemHandler","updateNoOptionQuantityHandler","setLocalState","updates","getLocalState","getGlobalState","showToast","refetchCartItems","selectedItems","toggleCartItemSelectionHandler","_context","itemId","currentSelected","newSelected","allSelected","selectAllCartItemsHandler","allItemIds","setCartOptionHandler","optionName","currentOptions","openCartDeleteModalHandler","targetIds","openCartOptionModalHandler","targetItem","recalculateCartHandler","selectedOptions","findMatchingOptionHandler","initCartOptionSelectionHandler","currentOptionValues","valuesArray","CART_KEY_STORAGE_NAME","CART_KEY_API_ENDPOINT","GUEST_ORDER_TOKEN_STORAGE_NAME","GUEST_ORDER_NUMBER_STORAGE_NAME","GUEST_ORDER_EXPIRES_AT_STORAGE_NAME","issueCartKeyFromApi","setGlobalState","getCurrentUser","g7Config","initCartKeyHandler","_action","cartKey","getCartKeyHandler","clearCartKeyHandler","regenerateCartKeyHandler","newCartKey","saveToStorageHandler","loadFromStorageHandler","clearGuestOrderTokenInternal","initGuestOrderTokenHandler","expiresAt","expired","expiryTs","existing","saveGuestOrderTokenHandler","orderNumber","clearGuestOrderTokenHandler","clearGuestTokenOnEntryHandler","getDisplayPriceHandler","priceField","formatCurrencyHandler","customLocale","formatted","getCurrencySymbol","STORAGE_KEY","DEFAULT_CURRENCY","loadPreferredCurrencyHandler","defaultCurrency","stored","isValidCurrency","savePreferredCurrencyHandler","VALID_THEMES","initTheme","theme","initThemeHandler","targetTheme","setThemeHandler","validTheme","redirectToLoginWithReturnHandler","returnUrl","downloadAttachmentHandler","handlerMap","resolveTarget","payload","local","global","pick","candidates","email","phone","getAuthHeader","getLocaleHeader","startChallenge","res","json","msg","sirsoftBasicIdentityLauncher","identity","challenge","expiresMs","remainingSeconds","maxAttempts","currentExpiresMs","resendCooldown","tickHandle","remaining","updated","ms","cd","deferred","registerSirsoftBasicIdentityLauncher","readCatalog","control","icons","entryLabel","matchesQuery","q","IconPreview","previewBox","IconPickerWidget","catalog","columns","searchPlaceholderKey","query","setQuery","inputStyle","labelOf","filtered","grid","cellSelected","cell","previewText","selected","emptyHint","registerSirsoftBasicEditorWidgets","layoutEditor","initTemplate","retryCount","maxRetries","registerHandlers","actionDispatcher"],"mappings":"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","x_google_ignoreList":[45,47,48,49,50,51,52,53,66,70,71,72,73]} \ No newline at end of file +{"version":3,"file":"components.iife.js","sources":["../../src/components/basic/Button.tsx","../../src/components/basic/Div.tsx","../../src/components/basic/Span.tsx","../../src/components/basic/Svg.tsx","../../src/components/basic/Input.tsx","../../src/components/basic/FileInput.tsx","../../src/components/basic/IconTypes.ts","../../src/components/basic/Icon.tsx","../../src/components/basic/PasswordInput.tsx","../../src/components/basic/Textarea.tsx","../../src/components/basic/Label.tsx","../../src/components/basic/P.tsx","../../src/components/basic/Img.tsx","../../src/components/basic/H1.tsx","../../src/components/basic/H2.tsx","../../src/components/basic/H3.tsx","../../src/components/basic/H4.tsx","../../src/components/basic/Ul.tsx","../../src/components/basic/Ol.tsx","../../src/components/basic/Li.tsx","../../src/components/basic/A.tsx","../../src/components/basic/Form.tsx","../../src/components/basic/Select.tsx","../../src/components/basic/Option.tsx","../../src/components/basic/Optgroup.tsx","../../src/components/basic/Checkbox.tsx","../../src/components/basic/Table.tsx","../../src/components/basic/Thead.tsx","../../src/components/basic/Tbody.tsx","../../src/components/basic/Tr.tsx","../../src/components/basic/Th.tsx","../../src/components/basic/Td.tsx","../../src/components/basic/Nav.tsx","../../src/components/basic/Section.tsx","../../src/components/basic/Code.tsx","../../src/components/basic/Hr.tsx","../../src/components/basic/Header.tsx","../../src/components/composite/ThemeToggle.tsx","../../src/components/composite/Avatar.tsx","../../src/components/composite/SlotContainer.tsx","../../src/components/composite/NotificationCenter.tsx","../../src/components/composite/Header.tsx","../../src/components/basic/Footer.tsx","../../src/components/composite/Footer.tsx","../../src/components/composite/MobileNav.tsx","../../node_modules/dompurify/dist/purify.es.mjs","../../src/components/composite/ProductCard.tsx","../../node_modules/yet-another-react-lightbox/dist/types.js","../../node_modules/yet-another-react-lightbox/dist/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/zoom/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/counter/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/slideshow/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/fullscreen/index.js","../../node_modules/yet-another-react-lightbox/dist/plugins/thumbnails/index.js","../../src/components/basic/I.tsx","../../src/components/composite/ImageGallery.tsx","../../src/components/composite/ProductImageViewer.tsx","../../src/components/composite/QuantitySelector.tsx","../../src/components/composite/PostReactions.tsx","../../src/components/composite/RichTextEditor.tsx","../../src/components/composite/HtmlContent.tsx","../../src/components/composite/HtmlEditor.tsx","../../src/components/composite/ExpandableContent.tsx","../../src/components/composite/Modal.tsx","../../src/components/composite/ConfirmDialog.tsx","../../src/components/composite/FileUploader/FileUploaderContext.tsx","../../node_modules/browser-image-compression/dist/browser-image-compression.mjs","../../src/components/composite/FileUploader/utils.ts","../../src/components/composite/FileUploader/useFileUploader.ts","../../src/components/composite/FileUploader/FileDropZone.tsx","../../node_modules/@dnd-kit/utilities/dist/utilities.esm.js","../../node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js","../../node_modules/@dnd-kit/core/dist/core.esm.js","../../node_modules/@dnd-kit/sortable/dist/sortable.esm.js","../../src/components/composite/FileUploader/SortableThumbnailItem.tsx","../../src/components/composite/FileUploader/FileList.tsx","../../src/components/composite/FileUploader/FileUploader.tsx","../../src/components/composite/SocialLoginButtons.tsx","../../src/components/composite/Toast.tsx","../../src/components/composite/PageTransitionIndicator.tsx","../../src/components/composite/PageTransitionBlur.tsx","../../src/components/composite/PageSkeleton.tsx","../../src/components/composite/PageLoading.tsx","../../src/components/composite/Pagination.tsx","../../src/components/composite/SearchBar.tsx","../../src/components/composite/AvatarUploader.tsx","../../src/components/composite/UserInfo.tsx","../../src/components/composite/TabNavigation.tsx","../../src/components/composite/index.ts","../../src/components/layout/Container.tsx","../../src/components/layout/Grid.tsx","../../src/components/layout/Flex.tsx","../../src/components/layout/SectionLayout.tsx","../../src/components/layout/ThreeColumnLayout.tsx","../../src/handlers/productOptions.ts","../../src/handlers/cartHandlers.ts","../../src/handlers/cartOptionChange.ts","../../src/handlers/storageHandlers.ts","../../src/handlers/getDisplayPrice.ts","../../src/handlers/formatCurrency.ts","../../src/handlers/loadPreferredCurrency.ts","../../src/handlers/setThemeHandler.ts","../../src/handlers/redirectToLoginWithReturn.ts","../../src/handlers/downloadAttachment.ts","../../src/handlers/index.ts","../../src/handlers/identityLauncher.ts","../../src/layout-editor/IconPickerWidget.tsx","../../src/layout-editor/registerEditorWidgets.ts","../../src/index.ts"],"sourcesContent":["import React, { forwardRef } from 'react';\n\n// G7Core 전역 객체의 스타일 헬퍼 접근\nconst G7Core = () => (window as any).G7Core;\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes {\n variant?: 'primary' | 'secondary' | 'danger' | 'success';\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * 기본 버튼 컴포넌트\n */\nexport const Button = forwardRef(({\n children,\n variant = 'primary',\n size = 'md',\n className = '',\n ...props\n}, ref) => {\n const baseClasses = 'inline-flex items-center justify-center';\n\n // G7Core.style.mergeClasses를 사용하여 충돌하는 Tailwind 클래스 병합\n const mergedClassName = G7Core()?.style?.mergeClasses?.(baseClasses, className)\n ?? `${baseClasses} ${className}`;\n\n return (\n \n {children}\n \n );\n});\n\nButton.displayName = 'Button';\n","import React from 'react';\n\nexport interface DivProps extends React.HTMLAttributes {\n ref?: React.Ref;\n}\n\n/**\n * 기본 div 컴포넌트\n */\nexport const Div = React.forwardRef(({\n children,\n className = '',\n ...props\n}, ref) => {\n return (\n \n {children}\n
\n );\n});\n","import React from 'react';\n\nexport interface SpanProps extends React.HTMLAttributes {}\n\n/**\n * 기본 span 컴포넌트\n */\nexport const Span: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface SvgProps extends React.SVGAttributes {}\n\n/**\n * 기본 svg 컴포넌트\n */\nexport const Svg: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React, { useRef, useCallback, useState, useEffect, forwardRef, useImperativeHandle } from 'react';\n\nexport interface InputProps extends React.InputHTMLAttributes {\n label?: string;\n error?: string;\n}\n\n/**\n * 기본 입력 필드 컴포넌트\n *\n * IME(한글 등) 조합 중에는 외부 onChange 이벤트를 발생시키지 않습니다.\n * 내부 로컬 상태를 사용하여 입력을 처리하고, 조합이 완료되면 외부에 알립니다.\n *\n * forwardRef를 사용하여 외부에서 ref로 input 요소에 접근할 수 있습니다.\n * 예: indeterminate 상태 설정 시 ref.current.indeterminate = true\n */\nexport const Input = forwardRef(({\n label,\n error,\n className = '',\n onChange,\n onKeyPress,\n value,\n defaultValue,\n type = 'text',\n checked,\n defaultChecked,\n ...props\n}, ref) => {\n // radio/checkbox 타입인지 확인\n const isCheckableType = type === 'radio' || type === 'checkbox';\n\n // IME 조합 중인지 추적 (text input에만 필요)\n const isComposingRef = useRef(false);\n // input 요소 참조\n const internalRef = useRef(null);\n\n // 외부 ref와 내부 ref를 연결\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement);\n\n // 내부 로컬 값 (IME 조합 중에도 화면에 표시됨) - text input에만 사용\n const [localValue, setLocalValue] = useState(\n (value as string) ?? (defaultValue as string) ?? ''\n );\n\n // 외부 value prop이 변경되면 로컬 값도 동기화 (text input에만 적용)\n useEffect(() => {\n if (!isCheckableType && !isComposingRef.current && value !== undefined) {\n setLocalValue(value as string);\n }\n }, [value, isCheckableType]);\n\n const handleCompositionStart = useCallback(() => {\n isComposingRef.current = true;\n }, []);\n\n const handleCompositionEnd = useCallback(\n (e: React.CompositionEvent) => {\n isComposingRef.current = false;\n // 조합 완료 후 onChange 이벤트 발생\n if (onChange) {\n // 현재 input의 실제 값을 사용\n const currentValue = (e.target as HTMLInputElement).value;\n setLocalValue(currentValue);\n\n // 새로운 ChangeEvent 생성\n const changeEvent = new Event('change', { bubbles: true }) as unknown as React.ChangeEvent;\n Object.defineProperty(changeEvent, 'target', {\n writable: false,\n value: { value: currentValue },\n });\n Object.defineProperty(changeEvent, 'currentTarget', {\n writable: false,\n value: { value: currentValue },\n });\n\n onChange(changeEvent);\n }\n },\n [onChange]\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent) => {\n const newValue = e.target.value;\n // 항상 로컬 값은 업데이트 (화면에 입력이 보이도록)\n setLocalValue(newValue);\n\n // IME 조합 중이면 외부 onChange를 호출하지 않음\n if (isComposingRef.current) {\n return;\n }\n if (onChange) {\n onChange(e);\n }\n },\n [onChange]\n );\n\n const handleKeyPress = useCallback(\n (e: React.KeyboardEvent) => {\n // IME 조합 중이면 keypress 무시 (Enter 등)\n if (isComposingRef.current) {\n return;\n }\n if (onKeyPress) {\n onKeyPress(e);\n }\n },\n [onKeyPress]\n );\n\n // HTML 표준 속성이 아닌 것들을 필터링 (템플릿 엔진 내부 속성)\n const { loadingactions, formdata, ...validProps } = props as any;\n\n // radio/checkbox: checked 속성 사용\n // text input: value 속성 사용 (IME 처리 포함)\n if (isCheckableType) {\n return (\n \n );\n }\n\n // text input: controlled/uncontrolled 구분\n const inputProps = value !== undefined\n ? { value: localValue }\n : { defaultValue };\n\n return (\n \n );\n});\n\n// displayName 설정 (React DevTools에서 컴포넌트 이름 표시)\nInput.displayName = 'Input';","// e2e:allow편집기 passthrough 결함#2 수정(admin 동기, data-editor-*/id 를 시각적 루트 Div 로 라우팅). 단위 회귀는 FileInput.test.tsx passthrough describe.\nimport React, { forwardRef, useRef, useCallback, useState } from 'react';\nimport { Div } from './Div';\nimport { Span } from './Span';\nimport { Svg } from './Svg';\nimport { Input } from './Input';\nimport { Button } from './Button';\n\nexport interface FileInputProps extends Omit, 'type' | 'onChange' | 'onError'> {\n /** 허용되는 파일 확장자 (예: \".zip,.pdf\") */\n accept?: string;\n /** 최대 파일 크기 (MB) */\n maxSize?: number;\n /** 파일 선택 시 콜백 */\n onChange?: (file: File | null) => void;\n /** 에러 발생 시 콜백 */\n onError?: (error: string) => void;\n /** 버튼 텍스트 */\n buttonText?: string;\n /** 빈 상태 텍스트 */\n placeholder?: string;\n}\n\n/**\n * 파일 업로드 입력 컴포넌트\n *\n * ZIP 파일 등의 파일 업로드를 처리하며, 파일 크기 검증을 지원합니다.\n */\nexport const FileInput = forwardRef(({\n accept,\n maxSize,\n onChange,\n onError,\n buttonText = 'Browse',\n placeholder = 'No file selected',\n className = '',\n disabled,\n ...props\n}, ref) => {\n const internalRef = useRef(null);\n const inputRef = (ref as React.RefObject) || internalRef;\n const [fileName, setFileName] = useState('');\n\n // 레이아웃 편집기 식별 표식(data-editor-*) 과 DOM id 는 시각적 루트(
)에 부착해야\n // 캔버스에서 선택/편집이 닿는다. basic 컴포넌트라 DynamicRenderer 가 개별 data-editor-*\n // 키를 props 로 주입하는데, 숨겨진 는 0×0 이라 식별 표식이 닿아도\n // 선택 불가. 식별/표식 키만 분리해 루트로 보낸다.\n const rootEditorProps: Record = {};\n const inputProps: Record = {};\n Object.entries(props as Record).forEach(([key, val]) => {\n if (key.startsWith('data-editor-') || key === 'id' || key === 'onMouseMove' || key === 'onMouseLeave') {\n rootEditorProps[key] = val;\n } else {\n inputProps[key] = val;\n }\n });\n\n const handleClick = useCallback(() => {\n if (!disabled && inputRef.current) {\n inputRef.current.click();\n }\n }, [disabled, inputRef]);\n\n const handleChange = useCallback((e: React.ChangeEvent) => {\n const file = e.target.files?.[0] || null;\n\n if (!file) {\n setFileName('');\n onChange?.(null);\n return;\n }\n\n // 파일 크기 검증 (MB 단위)\n if (maxSize && file.size > maxSize * 1024 * 1024) {\n const errorMsg = `File size exceeds ${maxSize}MB limit`;\n onError?.(errorMsg);\n // 입력 초기화\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n setFileName('');\n return;\n }\n\n setFileName(file.name);\n onChange?.(file);\n }, [maxSize, onChange, onError, inputRef]);\n\n const handleClear = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n setFileName('');\n onChange?.(null);\n }, [onChange, inputRef]);\n\n return (\n
\n \n \n {buttonText}\n \n \n {fileName || placeholder}\n \n {fileName && !disabled && (\n \n \n \n \n \n )}\n
\n );\n});\n\nFileInput.displayName = 'FileInput';\n","/**\n * Font Awesome 아이콘 스타일\n */\nexport type IconStyle = 'solid' | 'regular' | 'light' | 'duotone' | 'brands';\n\n/**\n * Font Awesome 아이콘 크기\n */\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2x' | '3x' | '4x' | '5x';\n\n/**\n * 자주 사용되는 Font Awesome 아이콘 이름\n *\n * @example\n * // 사용 예시\n * \n * \n * \n */\nexport enum IconName {\n // 사용자 및 계정\n User = 'fa-user',\n Users = 'fa-users',\n UserCircle = 'fa-user-circle',\n UserPlus = 'fa-user-plus',\n UserMinus = 'fa-user-minus',\n UserShield = 'fa-user-shield',\n\n // 액션 아이콘\n Search = 'fa-search',\n Edit = 'fa-edit',\n Pencil = 'fa-pencil-alt',\n Trash = 'fa-trash',\n Save = 'fa-save',\n Plus = 'fa-plus',\n Minus = 'fa-minus',\n Check = 'fa-check',\n Times = 'fa-times',\n Download = 'fa-download',\n Upload = 'fa-upload',\n Copy = 'fa-copy',\n ExternalLink = 'fa-external-link-alt',\n\n // 네비게이션\n Home = 'fa-home',\n ChevronLeft = 'fa-chevron-left',\n ChevronRight = 'fa-chevron-right',\n ChevronUp = 'fa-chevron-up',\n ChevronDown = 'fa-chevron-down',\n AngleLeft = 'fa-angle-left',\n AngleRight = 'fa-angle-right',\n AngleUp = 'fa-angle-up',\n AngleDown = 'fa-angle-down',\n ArrowUp = 'fa-arrow-up',\n ArrowDown = 'fa-arrow-down',\n ArrowLeft = 'fa-arrow-left',\n ArrowRight = 'fa-arrow-right',\n Bars = 'fa-bars',\n EllipsisVertical = 'fa-ellipsis-v',\n EllipsisHorizontal = 'fa-ellipsis-h',\n\n // 상태 아이콘\n CheckCircle = 'fa-check-circle',\n TimesCircle = 'fa-times-circle',\n ExclamationCircle = 'fa-exclamation-circle',\n ExclamationTriangle = 'fa-exclamation-triangle',\n InfoCircle = 'fa-info-circle',\n QuestionCircle = 'fa-question-circle',\n XCircle = 'fa-times-circle',\n\n // 이커머스\n ShoppingCart = 'fa-shopping-cart',\n ShoppingBag = 'fa-shopping-bag',\n CreditCard = 'fa-credit-card',\n Tag = 'fa-tag',\n Tags = 'fa-tags',\n\n // 파일 및 문서\n File = 'fa-file',\n FileAlt = 'fa-file-alt',\n Folder = 'fa-folder',\n FolderOpen = 'fa-folder-open',\n\n // 통신\n Envelope = 'fa-envelope',\n Phone = 'fa-phone',\n Comment = 'fa-comment',\n Comments = 'fa-comments',\n\n // 설정\n Cog = 'fa-cog',\n Cogs = 'fa-cogs',\n Settings = 'fa-cog',\n Wrench = 'fa-wrench',\n Sliders = 'fa-sliders-h',\n\n // 미디어\n Image = 'fa-image',\n Images = 'fa-images',\n Video = 'fa-video',\n Camera = 'fa-camera',\n\n // 소셜\n Heart = 'fa-heart',\n Star = 'fa-star',\n ThumbsUp = 'fa-thumbs-up',\n ThumbsDown = 'fa-thumbs-down',\n Share = 'fa-share',\n\n // 시간\n Clock = 'fa-clock',\n Calendar = 'fa-calendar',\n CalendarAlt = 'fa-calendar-alt',\n\n // 기타\n Lock = 'fa-lock',\n Unlock = 'fa-unlock',\n Eye = 'fa-eye',\n EyeSlash = 'fa-eye-slash',\n Bell = 'fa-bell',\n Flag = 'fa-flag',\n Map = 'fa-map',\n MapMarker = 'fa-map-marker-alt',\n Globe = 'fa-globe',\n Link = 'fa-link',\n Unlink = 'fa-unlink',\n Sun = 'fa-sun',\n Moon = 'fa-moon',\n\n // 차트 및 통계\n ChartBar = 'fa-chart-bar',\n ChartLine = 'fa-chart-line',\n ChartPie = 'fa-chart-pie',\n ChartArea = 'fa-chart-area',\n\n // 스피너 (로딩)\n Spinner = 'fa-spinner',\n CircleNotch = 'fa-circle-notch',\n\n // 배지 아이콘\n CheckBadge = 'fa-badge-check',\n\n // 알림 관련\n BellSlash = 'fa-bell-slash',\n\n // 문서/책 관련\n BookOpen = 'fa-book-open',\n\n // 건물/주소 관련\n Building = 'fa-building',\n\n // 파일 관련\n FileCircleCheck = 'fa-file-circle-check',\n\n // 마법 관련\n WandMagicSparkles = 'fa-wand-magic-sparkles',\n\n // 사용자 관련\n UserXmark = 'fa-user-xmark',\n\n // 확장 시스템 (모듈/플러그인)\n Cube = 'fa-cube',\n Cubes = 'fa-cubes',\n Plug = 'fa-plug',\n PuzzlePiece = 'fa-puzzle-piece',\n\n // 추가 아이콘 (Lucide 호환)\n Fire = 'fa-fire',\n CommentDots = 'fa-comment-dots',\n DollarSign = 'fa-dollar-sign',\n Bars2 = 'fa-bars',\n X = 'fa-times',\n List = 'fa-list',\n ThLarge = 'fa-th-large',\n Inbox = 'fa-inbox',\n Box = 'fa-box',\n PaperPlane = 'fa-paper-plane',\n FileText = 'fa-file-alt',\n Paperclip = 'fa-paperclip',\n Truck = 'fa-truck',\n Sync = 'fa-sync',\n RotateLeft = 'fa-rotate-left',\n MapPin = 'fa-map-marker-alt',\n HelpCircle = 'fa-question-circle',\n}\n\n/**\n * 문자열 아이콘 이름을 IconName enum으로 매핑합니다.\n * JSON 레이아웃에서 문자열로 아이콘 이름을 지정할 때 사용합니다.\n */\nexport const iconNameMap: Record = {\n // 사용자 및 계정\n 'user': IconName.User,\n 'users': IconName.Users,\n 'user-circle': IconName.UserCircle,\n 'user-plus': IconName.UserPlus,\n 'user-minus': IconName.UserMinus,\n 'user-shield': IconName.UserShield,\n\n // 액션 아이콘\n 'search': IconName.Search,\n 'edit': IconName.Edit,\n 'pencil': IconName.Pencil,\n 'trash': IconName.Trash,\n 'save': IconName.Save,\n 'plus': IconName.Plus,\n 'minus': IconName.Minus,\n 'check': IconName.Check,\n 'times': IconName.Times,\n 'download': IconName.Download,\n 'upload': IconName.Upload,\n 'copy': IconName.Copy,\n 'external-link': IconName.ExternalLink,\n\n // 네비게이션\n 'home': IconName.Home,\n 'chevron-left': IconName.ChevronLeft,\n 'chevron-right': IconName.ChevronRight,\n 'chevron-up': IconName.ChevronUp,\n 'chevron-down': IconName.ChevronDown,\n 'angle-left': IconName.AngleLeft,\n 'angle-right': IconName.AngleRight,\n 'angle-up': IconName.AngleUp,\n 'angle-down': IconName.AngleDown,\n 'arrow-up': IconName.ArrowUp,\n 'arrow-down': IconName.ArrowDown,\n 'arrow-left': IconName.ArrowLeft,\n 'arrow-right': IconName.ArrowRight,\n 'bars': IconName.Bars,\n 'ellipsis-vertical': IconName.EllipsisVertical,\n 'ellipsis-v': IconName.EllipsisVertical,\n 'ellipsis-horizontal': IconName.EllipsisHorizontal,\n 'ellipsis-h': IconName.EllipsisHorizontal,\n\n // 상태 아이콘\n 'check-circle': IconName.CheckCircle,\n 'times-circle': IconName.TimesCircle,\n 'x-circle': IconName.XCircle,\n 'exclamation-circle': IconName.ExclamationCircle,\n 'exclamation-triangle': IconName.ExclamationTriangle,\n 'info-circle': IconName.InfoCircle,\n 'question-circle': IconName.QuestionCircle,\n\n // 이커머스\n 'shopping-cart': IconName.ShoppingCart,\n 'shopping-bag': IconName.ShoppingBag,\n 'credit-card': IconName.CreditCard,\n 'tag': IconName.Tag,\n 'tags': IconName.Tags,\n\n // 파일 및 문서\n 'file': IconName.File,\n 'file-alt': IconName.FileAlt,\n 'folder': IconName.Folder,\n 'folder-open': IconName.FolderOpen,\n\n // 통신\n 'envelope': IconName.Envelope,\n 'phone': IconName.Phone,\n 'comment': IconName.Comment,\n 'comments': IconName.Comments,\n\n // 설정\n 'cog': IconName.Cog,\n 'cogs': IconName.Cogs,\n 'settings': IconName.Settings,\n 'wrench': IconName.Wrench,\n 'sliders': IconName.Sliders,\n\n // 미디어\n 'image': IconName.Image,\n 'images': IconName.Images,\n 'video': IconName.Video,\n 'camera': IconName.Camera,\n\n // 소셜\n 'heart': IconName.Heart,\n 'star': IconName.Star,\n 'thumbs-up': IconName.ThumbsUp,\n 'thumbs-down': IconName.ThumbsDown,\n 'share': IconName.Share,\n\n // 시간\n 'clock': IconName.Clock,\n 'calendar': IconName.Calendar,\n 'calendar-alt': IconName.CalendarAlt,\n\n // 기타\n 'lock': IconName.Lock,\n 'unlock': IconName.Unlock,\n 'eye': IconName.Eye,\n 'eye-slash': IconName.EyeSlash,\n 'bell': IconName.Bell,\n 'flag': IconName.Flag,\n 'map': IconName.Map,\n 'map-marker': IconName.MapMarker,\n 'globe': IconName.Globe,\n 'link': IconName.Link,\n 'unlink': IconName.Unlink,\n 'sun': IconName.Sun,\n 'moon': IconName.Moon,\n\n // 차트 및 통계\n 'chart-bar': IconName.ChartBar,\n 'chart-line': IconName.ChartLine,\n 'chart-pie': IconName.ChartPie,\n 'chart-area': IconName.ChartArea,\n\n // 스피너 (로딩)\n 'spinner': IconName.Spinner,\n 'circle-notch': IconName.CircleNotch,\n\n // 배지 아이콘\n 'check-badge': IconName.CheckBadge,\n 'badge-check': IconName.CheckBadge,\n\n // 확장 시스템 (모듈/플러그인)\n 'cube': IconName.Cube,\n 'cubes': IconName.Cubes,\n 'plug': IconName.Plug,\n 'puzzle-piece': IconName.PuzzlePiece,\n\n // Lucide 호환 아이콘 매핑\n 'flame': IconName.Fire,\n 'fire': IconName.Fire,\n 'message-square': IconName.CommentDots,\n 'dollar-sign': IconName.DollarSign,\n 'menu': IconName.Bars,\n 'x': IconName.X,\n 'list': IconName.List,\n 'layout-grid': IconName.ThLarge,\n 'th-large': IconName.ThLarge,\n 'grid': IconName.ThLarge,\n 'inbox': IconName.Inbox,\n 'package': IconName.Box,\n 'box': IconName.Box,\n 'send': IconName.PaperPlane,\n 'paper-plane': IconName.PaperPlane,\n 'file-text': IconName.FileText,\n 'paperclip': IconName.Paperclip,\n 'truck': IconName.Truck,\n 'refresh-cw': IconName.Sync,\n 'sync': IconName.Sync,\n 'undo-2': IconName.RotateLeft,\n 'rotate-left': IconName.RotateLeft,\n 'map-pin': IconName.MapPin,\n 'help-circle': IconName.HelpCircle,\n\n // 추가 Lucide 호환 아이콘 매핑\n 'alert-triangle': IconName.ExclamationTriangle,\n 'bell-off': IconName.BellSlash,\n 'book-open': IconName.BookOpen,\n 'building': IconName.Building,\n 'edit-2': IconName.Edit,\n 'edit-3': IconName.Edit,\n 'file-check': IconName.FileCircleCheck,\n 'mail': IconName.Envelope,\n 'sparkles': IconName.WandMagicSparkles,\n 'trash-2': IconName.Trash,\n 'user-x': IconName.UserXmark,\n};\n","import React from 'react';\nimport { IconName, IconStyle, IconSize, iconNameMap } from './IconTypes';\n\nexport interface IconProps extends Omit, 'style'> {\n /**\n * 아이콘 이름 (Font Awesome 클래스명 또는 IconName enum)\n *\n * @example\n * // 문자열로 직접 지정\n * \n *\n * // enum 사용 (타입 안전)\n * \n */\n name: string | IconName;\n\n /**\n * 아이콘 스타일 (Font Awesome 5/6)\n *\n * - solid: fas (기본값)\n * - regular: far\n * - light: fal\n * - duotone: fad\n * - brands: fab\n */\n iconStyle?: IconStyle;\n\n /**\n * CSS 스타일 객체 (HTML style 속성)\n */\n style?: React.CSSProperties;\n\n /**\n * 아이콘 크기\n *\n * @default 'md'\n */\n size?: IconSize;\n\n /**\n * 색상 (Tailwind 클래스 또는 CSS 색상)\n */\n color?: string;\n\n /**\n * 회전 애니메이션 활성화\n */\n spin?: boolean;\n\n /**\n * 펄스 애니메이션 활성화 (8단계 회전)\n */\n pulse?: boolean;\n\n /**\n * 고정 너비 (아이콘 정렬 시 유용)\n */\n fixedWidth?: boolean;\n\n /**\n * 접근성 레이블 (자동 생성 가능)\n */\n ariaLabel?: string;\n}\n\n/**\n * Font Awesome 아이콘 컴포넌트\n *\n * Font Awesome 5/6 버전과 호환되며 다양한 props를 지원합니다.\n *\n * @example\n * // 기본 사용\n * \n *\n * // enum 사용 (타입 안전)\n * \n *\n * // 스타일 및 크기 지정\n * \n *\n * // 애니메이션\n * \n * \n *\n * // 색상 지정\n * \n *\n * // 접근성\n * \n */\nexport const Icon: React.FC = ({\n name,\n iconStyle = 'solid',\n size,\n color,\n spin = false,\n pulse = false,\n fixedWidth = false,\n ariaLabel,\n className = '',\n style,\n ...props\n}) => {\n // Font Awesome 스타일 클래스 매핑\n const styleClassMap: Record = {\n solid: 'fas',\n regular: 'far',\n light: 'fal',\n duotone: 'fad',\n brands: 'fab',\n };\n\n // 아이콘 이름 처리: iconNameMap을 사용하여 Lucide 스타일 이름을 FontAwesome으로 변환\n const rawName = typeof name === 'string' ? name : String(name);\n const mappedName = iconNameMap[rawName];\n // 매핑된 이름이 있으면 사용, 없으면 원본 사용 후 'fa-' 접두사 제거\n const iconName = mappedName\n ? String(mappedName).replace(/^fa-/, '')\n : rawName.replace(/^fa-/, '');\n\n // 클래스 조합\n const classes = [\n styleClassMap[iconStyle],\n `fa-${iconName}`,\n size && `fa-${size}`,\n spin && 'fa-spin',\n pulse && 'fa-pulse',\n fixedWidth && 'fa-fw',\n color,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // 접근성: ariaLabel이 없으면 name에서 생성\n const accessibilityLabel = ariaLabel || iconName.replace(/-/g, ' ');\n\n return (\n \n );\n};\n","import React, { useState, useCallback, forwardRef, useImperativeHandle, useRef, useEffect, useMemo } from 'react';\nimport { Icon } from './Icon';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as unknown as { G7Core?: { t?: (key: string, params?: Record) => string } })\n .G7Core?.t?.(key, params) ?? key;\n\n/**\n * 비밀번호 검증 규칙 정의\n */\nexport interface PasswordRule {\n /** 규칙 식별자 */\n key: string;\n /** 규칙 설명 (다국어 키) */\n labelKey: string;\n /** 검증 함수 (param은 규칙별 설정값) */\n validate: (value: string, param?: number) => boolean;\n /** 기본 파라미터 값 */\n defaultParam?: number;\n}\n\n/**\n * 사용 가능한 모든 비밀번호 검증 규칙\n *\n * JSON 레이아웃에서 enableRules prop으로 키를 지정하여 선택적으로 활성화\n * 파라미터가 있는 규칙은 \"규칙명:값\" 형식으로 지정 (예: \"minLength:12\")\n */\nexport const availablePasswordRules: Record = {\n minLength: {\n key: 'minLength',\n labelKey: 'auth.password_input.rules.minLength',\n defaultParam: 6,\n validate: (value: string, param = 6) => value.length >= param,\n },\n maxLength: {\n key: 'maxLength',\n labelKey: 'auth.password_input.rules.maxLength',\n defaultParam: 20,\n validate: (value: string, param = 20) => value.length <= param,\n },\n hasUppercase: {\n key: 'hasUppercase',\n labelKey: 'auth.password_input.rules.hasUppercase',\n validate: (value: string) => /[A-Z]/.test(value),\n },\n hasLowercase: {\n key: 'hasLowercase',\n labelKey: 'auth.password_input.rules.hasLowercase',\n validate: (value: string) => /[a-z]/.test(value),\n },\n hasNumber: {\n key: 'hasNumber',\n labelKey: 'auth.password_input.rules.hasNumber',\n validate: (value: string) => /[0-9]/.test(value),\n },\n hasSpecial: {\n key: 'hasSpecial',\n labelKey: 'auth.password_input.rules.hasSpecial',\n validate: (value: string) => /[!@#$%^&*(),.?\":{}|<>]/.test(value),\n },\n noSpaces: {\n key: 'noSpaces',\n labelKey: 'auth.password_input.rules.noSpaces',\n validate: (value: string) => !/\\s/.test(value),\n },\n minTypes: {\n key: 'minTypes',\n labelKey: 'auth.password_input.rules.minTypes',\n defaultParam: 3,\n validate: (value: string, param = 3) => {\n let types = 0;\n if (/[A-Z]/.test(value)) types++;\n if (/[a-z]/.test(value)) types++;\n if (/[0-9]/.test(value)) types++;\n if (/[!@#$%^&*(),.?\":{}|<>]/.test(value)) types++;\n return types >= param;\n },\n },\n};\n\n/**\n * 기본 비밀번호 검증 규칙\n *\n * 백엔드 검증 규칙(RegisterRequest.php)과 동일:\n * - password: required|string|min:6|confirmed\n */\nexport const defaultPasswordRules: PasswordRule[] = [\n availablePasswordRules.minLength,\n];\n\n/**\n * 파싱된 규칙 (규칙 + 파라미터)\n */\ninterface ParsedRule {\n rule: PasswordRule;\n param?: number;\n}\n\n/**\n * enableRules 문자열을 파싱하여 규칙과 파라미터를 추출\n * 예: \"minLength:12\" → { rule: minLengthRule, param: 12 }\n * 예: \"hasUppercase\" → { rule: hasUppercaseRule, param: undefined }\n *\n * @param ruleString 규칙 문자열 (예: \"minLength:12\" 또는 \"hasUppercase\")\n * @returns 파싱된 규칙 또는 null (규칙이 존재하지 않는 경우)\n */\nfunction parseRuleString(ruleString: string): ParsedRule | null {\n const [key, paramStr] = ruleString.split(':');\n const rule = availablePasswordRules[key];\n if (!rule) return null;\n\n const param = paramStr ? parseInt(paramStr, 10) : rule.defaultParam;\n return { rule, param: isNaN(param as number) ? rule.defaultParam : param };\n}\n\n/**\n * PasswordInput에서 사용하지 않는 HTML 속성 목록\n * (그누보드7 템플릿 엔진에서 전달되는 커스텀 속성)\n */\ninterface NonStandardProps {\n loadingactions?: unknown;\n formdata?: unknown;\n}\n\nexport interface PasswordInputProps extends Omit, 'type'> {\n /** 레이블 텍스트 */\n label?: string;\n /** 에러 메시지 */\n error?: string;\n /** 비밀번호 보기/숨기기 버튼 표시 */\n showToggle?: boolean;\n /** 비밀번호 조건 검증 표시 */\n showValidation?: boolean;\n /** 비밀번호 확인 모드 (확인 필드로 사용) */\n isConfirmField?: boolean;\n /** 비밀번호 확인 대상 값 (isConfirmField가 true일 때 필요) */\n confirmTarget?: string;\n /** 비밀번호 확인 일치 여부 콜백 */\n onMatchChange?: (isMatch: boolean) => void;\n /** 비밀번호 유효성 변경 콜백 */\n onValidityChange?: (isValid: boolean, failedRules: string[]) => void;\n /** 커스텀 비밀번호 규칙 (기본 규칙 대체, 코드에서만 사용) */\n rules?: PasswordRule[];\n /**\n * 활성화할 규칙 키 목록 (JSON 레이아웃에서 사용)\n * 사용 가능: minLength, maxLength, hasUppercase, hasLowercase, hasNumber, hasSpecial, noSpaces, minTypes\n * 파라미터 지정: \"규칙명:값\" 형식 (예: \"minLength:12\", \"minTypes:3\")\n * 예: [\"minLength:12\", \"hasUppercase\", \"hasSpecial\"]\n */\n enableRules?: string[];\n /** 표시할 규칙 키 목록 (지정하지 않으면 전체 표시) */\n showRules?: string[];\n /** 입력 필드 wrapper 클래스 */\n wrapperClassName?: string;\n /** 검증 결과 표시 영역 클래스 */\n validationClassName?: string;\n}\n\n/**\n * 비밀번호 입력 컴포넌트\n *\n * 비밀번호 보기/숨기기 토글, 실시간 조건 검증, 비밀번호 확인 기능을 제공합니다.\n *\n * @example\n * // 기본 사용 (보기/숨기기만)\n * \n *\n * @example\n * // 조건 검증 표시\n * console.log(isValid, failed)}\n * />\n *\n * @example\n * // 비밀번호 확인 필드\n * console.log(isMatch)}\n * />\n */\nexport const PasswordInput = forwardRef(\n (\n {\n label,\n error,\n showToggle = true,\n showValidation = false,\n isConfirmField = false,\n confirmTarget,\n onMatchChange,\n onValidityChange,\n rules,\n enableRules,\n showRules,\n wrapperClassName = '',\n validationClassName = '',\n className = '',\n onChange,\n value,\n defaultValue,\n disabled,\n ...props\n },\n ref\n ) => {\n const internalRef = useRef(null);\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement);\n\n // 비밀번호 보기/숨기기 상태\n const [showPassword, setShowPassword] = useState(false);\n\n // CapsLock 활성화 상태\n const [capsLockOn, setCapsLockOn] = useState(false);\n\n // 내부 값 상태 (controlled/uncontrolled 지원)\n const [internalValue, setInternalValue] = useState(\n (value as string) ?? (defaultValue as string) ?? ''\n );\n\n // 외부 value가 변경되면 동기화\n useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value as string);\n }\n }, [value]);\n\n // 사용할 규칙 결정: rules > enableRules > defaultPasswordRules\n const parsedRules = useMemo((): ParsedRule[] => {\n // 1. rules prop이 있으면 그대로 사용 (코드에서 직접 전달, 기본 파라미터 적용)\n if (rules && rules.length > 0) {\n return rules.map((rule) => ({ rule, param: rule.defaultParam }));\n }\n\n // 2. enableRules가 있으면 파싱하여 규칙과 파라미터 추출\n if (enableRules && enableRules.length > 0) {\n return enableRules\n .map((ruleStr) => parseRuleString(ruleStr))\n .filter((parsed): parsed is ParsedRule => parsed !== null);\n }\n\n // 3. 기본 규칙 사용\n return defaultPasswordRules.map((rule) => ({ rule, param: rule.defaultParam }));\n }, [rules, enableRules]);\n\n // 표시할 규칙 필터링\n const displayRules = useMemo(() => {\n if (!showRules || showRules.length === 0) return parsedRules;\n return parsedRules.filter((parsed) => showRules.includes(parsed.rule.key));\n }, [parsedRules, showRules]);\n\n // 비밀번호 규칙 검증 결과\n const validationResults = useMemo(() => {\n if (!showValidation || isConfirmField) return {};\n return displayRules.reduce((acc, { rule, param }) => {\n acc[rule.key] = rule.validate(internalValue, param);\n return acc;\n }, {} as Record);\n }, [internalValue, displayRules, showValidation, isConfirmField]);\n\n // 비밀번호 확인 일치 여부\n const isMatch = useMemo(() => {\n if (!isConfirmField || confirmTarget === undefined) return true;\n return internalValue === confirmTarget && internalValue.length > 0;\n }, [isConfirmField, internalValue, confirmTarget]);\n\n // 전체 유효성 (모든 규칙 통과)\n const isAllValid = useMemo(() => {\n if (!showValidation) return true;\n return Object.values(validationResults).every((v) => v);\n }, [validationResults, showValidation]);\n\n // 유효성 변경 콜백\n useEffect(() => {\n if (onValidityChange && showValidation && !isConfirmField) {\n const failedRules = Object.entries(validationResults)\n .filter(([, passed]) => !passed)\n .map(([key]) => key);\n onValidityChange(isAllValid, failedRules);\n }\n }, [isAllValid, validationResults, onValidityChange, showValidation, isConfirmField]);\n\n // 비밀번호 확인 일치 콜백\n useEffect(() => {\n if (onMatchChange && isConfirmField) {\n onMatchChange(isMatch);\n }\n }, [isMatch, onMatchChange, isConfirmField]);\n\n // 비밀번호 보기/숨기기 토글\n const handleToggle = useCallback(() => {\n setShowPassword((prev) => !prev);\n }, []);\n\n // 입력값 변경 처리\n const handleChange = useCallback(\n (e: React.ChangeEvent) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n if (onChange) {\n onChange(e);\n }\n },\n [onChange]\n );\n\n // CapsLock 상태 감지\n const handleKeyEvent = useCallback(\n (e: React.KeyboardEvent) => {\n setCapsLockOn(e.getModifierState('CapsLock'));\n },\n []\n );\n\n // HTML 표준 속성이 아닌 것들을 필터링 (타입 안전성 개선)\n const { loadingactions, formdata, ...validProps } = props as typeof props & NonStandardProps;\n\n // 레이아웃 편집기 표식/핸들러(data-editor-*, onMouseMove/Leave 등)는 시각적\n // 루트(wrapper div)에 부착해야 캔버스 선택/드래그가 컴포넌트 전체를 잡는다.\n // 내부 input 에만 spread 하면 선택 박스가 input 으로 한정되고 error/검증/토글이\n // 선택 영역 밖이 된다.\n const editorRootProps: Record = {};\n const inputRestProps: Record = {};\n for (const [k, v] of Object.entries(validProps as Record)) {\n if (k.startsWith('data-editor-') || k === 'onMouseMove' || k === 'onMouseLeave') {\n editorRootProps[k] = v;\n } else {\n inputRestProps[k] = v;\n }\n }\n\n return (\n
\n {/* 입력 필드 wrapper */}\n
\n \n\n {/* 비밀번호 보기/숨기기 버튼 */}\n {showToggle && (\n \n \n \n )}\n
\n\n {/* CapsLock 경고 */}\n {capsLockOn && !showPassword && (\n
\n \n {t('auth.password_input.caps_lock_on')}\n
\n )}\n\n {/* 비밀번호 확인 일치/불일치 표시 */}\n {isConfirmField && confirmTarget !== undefined && internalValue.length > 0 && (\n \n \n {isMatch ? t('auth.password_input.match') : t('auth.password_input.mismatch')}\n
\n )}\n\n {/* 비밀번호 조건 검증 표시 */}\n {showValidation && !isConfirmField && internalValue.length > 0 && (\n
\n {displayRules.map(({ rule, param }) => {\n const passed = validationResults[rule.key];\n // 파라미터가 있는 규칙은 라벨에 파라미터 값 전달\n const labelParams = param !== undefined ? { count: param } : undefined;\n return (\n \n \n {t(rule.labelKey, labelParams)}\n
\n );\n })}\n
\n )}\n\n {/* 에러 메시지 */}\n {error && (\n

{error}

\n )}\n
\n );\n }\n);\n\nPasswordInput.displayName = 'PasswordInput';\n","import React, { useRef, useCallback, useState, useEffect } from 'react';\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes {\n label?: string;\n error?: string;\n}\n\n/**\n * 기본 텍스트 영역 컴포넌트\n *\n * IME(한글 등) 조합 중에는 외부 onChange 이벤트를 발생시키지 않습니다.\n * 내부 로컬 상태를 사용하여 입력을 처리하고, 조합이 완료되면 외부에 알립니다.\n */\nexport const Textarea: React.FC = ({\n label,\n error,\n className = '',\n onChange,\n value,\n defaultValue,\n ...props\n}) => {\n // IME 조합 중인지 추적\n const isComposingRef = useRef(false);\n // textarea 요소 참조\n const textareaRef = useRef(null);\n\n // 내부 로컬 값 (IME 조합 중에도 화면에 표시됨)\n const [localValue, setLocalValue] = useState(\n (value as string) ?? (defaultValue as string) ?? ''\n );\n\n // 외부 value prop이 변경되면 로컬 값도 동기화\n useEffect(() => {\n if (!isComposingRef.current && value !== undefined) {\n setLocalValue(value as string);\n }\n }, [value]);\n\n const handleCompositionStart = useCallback(() => {\n isComposingRef.current = true;\n }, []);\n\n const handleCompositionEnd = useCallback(\n (e: React.CompositionEvent) => {\n isComposingRef.current = false;\n // 조합 완료 후 onChange 이벤트 발생\n if (onChange) {\n // 현재 textarea의 실제 값을 사용\n const currentValue = (e.target as HTMLTextAreaElement).value;\n setLocalValue(currentValue);\n\n // 새로운 ChangeEvent 생성\n const changeEvent = new Event('change', { bubbles: true }) as unknown as React.ChangeEvent;\n Object.defineProperty(changeEvent, 'target', {\n writable: false,\n value: { value: currentValue },\n });\n Object.defineProperty(changeEvent, 'currentTarget', {\n writable: false,\n value: { value: currentValue },\n });\n\n onChange(changeEvent);\n }\n },\n [onChange]\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent) => {\n const newValue = e.target.value;\n // 항상 로컬 값은 업데이트 (화면에 입력이 보이도록)\n setLocalValue(newValue);\n\n // IME 조합 중이면 외부 onChange를 호출하지 않음\n if (isComposingRef.current) {\n return;\n }\n if (onChange) {\n onChange(e);\n }\n },\n [onChange]\n );\n\n // HTML 표준 속성이 아닌 것들을 필터링 (템플릿 엔진 내부 속성)\n const { loadingactions, formdata, ...validProps } = props as any;\n\n // controlled/uncontrolled 구분\n const textareaValueProps = value !== undefined\n ? { value: localValue }\n : { defaultValue };\n\n return (\n \n );\n};\n","import React from 'react';\n\nexport interface LabelProps extends React.LabelHTMLAttributes {}\n\n/**\n * 기본 레이블 컴포넌트\n */\nexport const Label: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface PProps extends React.HTMLAttributes {}\n\n/**\n * 기본 p(단락) 컴포넌트\n */\nexport const P: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n

\n );\n};\n","import React from 'react';\n\nexport interface ImgProps extends React.ImgHTMLAttributes {}\n\n/**\n * 기본 이미지 컴포넌트\n */\nexport const Img: React.FC = ({\n className = '',\n alt = '',\n ...props\n}) => {\n return (\n \n );\n};\n","import React from 'react';\n\nexport interface H1Props extends React.HTMLAttributes {}\n\n/**\n * 기본 h1 제목 컴포넌트\n */\nexport const H1: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface H2Props extends React.HTMLAttributes {}\n\n/**\n * 기본 h2 제목 컴포넌트\n */\nexport const H2: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface H3Props extends React.HTMLAttributes {}\n\n/**\n * 기본 h3 제목 컴포넌트\n */\nexport const H3: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface H4Props extends React.HTMLAttributes {}\n\n/**\n * 기본 h4 제목 컴포넌트\n */\nexport const H4: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface UlProps extends React.HTMLAttributes {}\n\n/**\n * 기본 ul(순서없는 목록) 컴포넌트\n */\nexport const Ul: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface OlProps extends React.HTMLAttributes {}\n\n/**\n * 기본 ol(순서있는 목록) 컴포넌트\n */\nexport const Ol: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface LiProps extends React.LiHTMLAttributes {}\n\n/**\n * 기본 li(목록 항목) 컴포넌트\n */\nexport const Li: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface AProps extends React.AnchorHTMLAttributes {}\n\n/**\n * 기본 a(링크) 컴포넌트\n */\nexport const A: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n
\n );\n};\n","import React from 'react';\n\nexport interface FormProps extends React.FormHTMLAttributes {}\n\n/**\n * 기본 form 컴포넌트\n */\nexport const Form: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","// e2e:allow커스텀 드롭다운 루트 props spread 타입 안전 캐스팅(admin 동기). 단위 회귀는 Select.test.tsx.\nimport React, { useMemo, useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Div } from './Div';\nimport { Button } from './Button';\nimport { Span } from './Span';\nimport { Svg } from './Svg';\nimport { Input } from './Input';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:Select')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:Select]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:Select]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:Select]', ...args),\n};\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps extends Omit, 'onChange'> {\n label?: string;\n error?: string;\n options?: SelectOption[] | string[];\n onChange?: (e: React.ChangeEvent | { target: { value: string | number } }) => void;\n /** 드롭다운 내 검색 input 활성화 (engine-v1.40.0+) */\n searchable?: boolean;\n /** 검색 input placeholder */\n searchPlaceholder?: string;\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용). Select 는 커스텀 드롭다운 루트에\n * 개별 data-editor-* 키를 spread 해야 선택/편집이 닿는다(커스텀 루트\n * passthrough). basic 컴포넌트라 `{...props}` 로 DOM 표준 속성(id 등)도 함께 흐른다.\n */\n editorAttrs?: Record;\n}\n\n/**\n * 로케일 코드를 사람이 읽을 수 있는 이름으로 변환\n */\nfunction getLocaleName(locale: string): string {\n const fromAppConfig = (window as any).G7Core?.state?.get?.('_global.appConfig.localeNames')?.[locale];\n if (fromAppConfig) {\n return fromAppConfig;\n }\n const fallback: Record = {\n ko: '한국어',\n en: 'English',\n ja: '日本語',\n zh: '中文',\n es: 'Español',\n fr: 'Français',\n de: 'Deutsch',\n };\n return fallback[locale] || locale;\n}\n\n/**\n * 커스텀 Select 컴포넌트\n *\n * options prop을 사용하여 드롭다운 메뉴를 생성합니다.\n * 둥근 모서리, 그림자, 체크마크가 있는 커스텀 스타일을 지원합니다.\n */\nexport const Select: React.FC = ({\n children,\n label,\n error,\n options,\n className = '',\n value,\n onChange,\n disabled,\n searchable = false,\n searchPlaceholder,\n editorAttrs,\n ...props\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const [dropdownPos, setDropdownPos] = useState<{ top?: number; bottom?: number; left: number; width: number } | null>(null);\n const containerRef = useRef(null);\n const buttonRef = useRef(null);\n const searchInputRef = useRef(null);\n const dropdownRef = useRef(null);\n\n // options를 SelectOption[] 형식으로 정규화\n const normalizedOptions = useMemo((): SelectOption[] | null => {\n if (!options) return null;\n\n // 배열이 아닌 경우 (바인딩 에러 또는 잘못된 prop)\n if (!Array.isArray(options)) {\n logger.warn('options prop is not an array:', options);\n return null;\n }\n\n // 빈 배열인 경우\n if (options.length === 0) return [];\n\n // string[] 배열인 경우\n if (typeof options[0] === 'string') {\n return (options as string[]).map((locale): SelectOption => ({\n value: locale,\n label: getLocaleName(locale),\n }));\n }\n\n // SelectOption[] 배열인 경우 (기존 동작)\n return options as SelectOption[];\n }, [options]);\n\n // 현재 선택된 옵션의 라벨 가져오기\n const selectedLabel = useMemo(() => {\n if (!normalizedOptions) return '';\n const selected = normalizedOptions.find(opt => String(opt.value) === String(value));\n return selected?.label || '';\n }, [normalizedOptions, value]);\n\n // searchable 모드에서 검색어로 필터링된 옵션\n const visibleOptions = useMemo((): SelectOption[] | null => {\n if (!normalizedOptions) return null;\n if (!searchable || searchTerm.trim() === '') return normalizedOptions;\n const needle = searchTerm.trim().toLowerCase();\n return normalizedOptions.filter(opt =>\n opt.label.toLowerCase().includes(needle) ||\n String(opt.value).toLowerCase().includes(needle)\n );\n }, [normalizedOptions, searchable, searchTerm]);\n\n // 드롭다운 열릴 때 검색어 초기화 및 input 포커스\n useEffect(() => {\n if (isOpen && searchable) {\n setSearchTerm('');\n // 다음 tick에 포커스 (DOM 렌더 이후)\n const timer = setTimeout(() => searchInputRef.current?.focus(), 0);\n return () => clearTimeout(timer);\n }\n if (!isOpen) {\n setSearchTerm('');\n }\n }, [isOpen, searchable]);\n\n /**\n * 드롭다운 위치 계산 (버튼 기준 fixed positioning)\n * Modal 등 overflow:hidden 컨테이너 내부에서도 정상 표시\n */\n const updateDropdownPos = useCallback(() => {\n if (!buttonRef.current) return;\n const rect = buttonRef.current.getBoundingClientRect();\n const spaceBelow = window.innerHeight - rect.bottom;\n const dropdownMaxH = 280; // max-h-60(240px) + search(~40px)\n // 아래 공간 부족 시 위로 열기\n const openUpward = spaceBelow < dropdownMaxH && rect.top > spaceBelow;\n if (openUpward) {\n setDropdownPos({\n bottom: window.innerHeight - rect.top + 4,\n left: rect.left,\n width: rect.width,\n });\n } else {\n setDropdownPos({\n top: rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n });\n }\n }, []);\n\n // 드롭다운 열릴 때 위치 계산 + 스크롤/리사이즈 추적\n useEffect(() => {\n if (!isOpen) {\n setDropdownPos(null);\n return;\n }\n updateDropdownPos();\n window.addEventListener('scroll', updateDropdownPos, true);\n window.addEventListener('resize', updateDropdownPos);\n return () => {\n window.removeEventListener('scroll', updateDropdownPos, true);\n window.removeEventListener('resize', updateDropdownPos);\n };\n }, [isOpen, updateDropdownPos]);\n\n // 외부 클릭 시 드롭다운 닫기 (Portal 영역 포함)\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n if (\n containerRef.current && !containerRef.current.contains(target) &&\n (!dropdownRef.current || !dropdownRef.current.contains(target))\n ) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n // ESC 키로 드롭다운 닫기\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false);\n buttonRef.current?.focus();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen]);\n\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const handleSelect = (optionValue: string | number) => {\n if (onChange) {\n // ActionDispatcher가 이벤트를 인식할 수 있도록 preventDefault 메서드 포함\n const syntheticEvent = {\n target: { value: optionValue },\n preventDefault: () => {},\n stopPropagation: () => {},\n type: 'change',\n };\n onChange(syntheticEvent as any);\n }\n setIsOpen(false);\n buttonRef.current?.focus();\n };\n\n // options가 없으면 기본 select 사용 (children 지원)\n if (!normalizedOptions) {\n return (\n }\n disabled={disabled}\n {...editorAttrs}\n {...props}\n >\n {children}\n \n );\n }\n\n // 기본 스타일 (className이 없을 때 적용)\n const hasCustomStyle = className && className.includes('bg-');\n // 커스텀 스타일에 텍스트 색상이 없으면 기본 텍스트 색상 보충\n const hasTextColor = className && /text-(gray|red|blue|green|yellow|white|black|indigo|purple|pink|orange|amber|emerald|teal|cyan|slate)-\\d+|text-white|text-black/.test(className);\n const baseButtonClass = hasCustomStyle\n ? `${className}${hasTextColor ? '' : ' text-gray-700 dark:text-gray-200'}`\n : `w-full px-4 py-2.5 bg-gray-100 dark:bg-gray-700 border-0 rounded-xl text-gray-700 dark:text-gray-200 font-medium focus:ring-2 focus:ring-blue-500 focus:outline-none ${className}`;\n\n // props 는 SelectHTMLAttributes 기반이라 Div(HTMLDivElement) 에 직접 spread 시 타입 불일치.\n // 런타임 동작(편집기 data-editor-* / id 등 DOM 표준 속성 passthrough)은 동일하므로\n // DOM-safe 레코드로 캐스팅해 커스텀 드롭다운 루트에 전달한다.\n const rootDomProps = { ...editorAttrs, ...props } as Record;\n\n return (\n
\n \n {selectedLabel || '\\u00A0'}\n \n \n \n \n\n {isOpen && dropdownPos && createPortal(\n \n {searchable && (\n
\n ) => setSearchTerm(e.target.value)}\n placeholder={searchPlaceholder ?? 'Search...'}\n className=\"w-full px-3 py-2 bg-gray-100 dark:bg-gray-700 border-0 rounded-lg text-sm text-gray-700 dark:text-gray-200 placeholder-gray-400 dark:placeholder-gray-500 focus:ring-2 focus:ring-blue-500 focus:outline-none\"\n role=\"searchbox\"\n aria-label={searchPlaceholder ?? 'Search'}\n />\n
\n )}\n
\n {visibleOptions && visibleOptions.length === 0 && (\n
\n {searchTerm ? 'No results' : ''}\n
\n )}\n {(visibleOptions ?? []).map((option) => {\n const isSelected = String(option.value) === String(value);\n return (\n !option.disabled && handleSelect(option.value)}\n disabled={option.disabled}\n className={`w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors ${\n isSelected ? 'text-blue-600 dark:text-blue-400 font-medium' : 'text-gray-700 dark:text-gray-200'\n } ${option.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n role=\"option\"\n aria-selected={isSelected}\n >\n {option.label}\n {isSelected && (\n \n \n \n )}\n \n );\n })}\n
\n
,\n document.body\n )}\n
\n );\n};\n","import React from 'react';\n\nexport interface OptionProps extends React.OptionHTMLAttributes {}\n\n/**\n * 기본 option 컴포넌트 (Select 내부에서 사용)\n */\nexport const Option: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface OptgroupProps extends React.OptgroupHTMLAttributes {}\n\n/**\n * 기본 optgroup 컴포넌트 (Select 내부에서 옵션 그룹화)\n */\nexport const Optgroup: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React, { forwardRef } from 'react';\n\nexport interface CheckboxProps extends React.InputHTMLAttributes {\n label?: string;\n}\n\n/**\n * 기본 체크박스 컴포넌트\n *\n * forwardRef를 사용하여 ref 전달을 지원합니다.\n * indeterminate 상태 등을 설정할 때 ref가 필요합니다.\n */\nexport const Checkbox = forwardRef(\n ({ label, className = '', ...props }, ref) => {\n return (\n \n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n","import React from 'react';\n\nexport interface TableProps extends React.TableHTMLAttributes {}\n\n/**\n * 기본 table 컴포넌트\n */\nexport const Table: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface TheadProps extends React.HTMLAttributes {}\n\n/**\n * 기본 thead 컴포넌트\n */\nexport const Thead: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface TbodyProps extends React.HTMLAttributes {}\n\n/**\n * 기본 tbody 컴포넌트\n */\nexport const Tbody: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface TrProps extends React.HTMLAttributes {}\n\n/**\n * 기본 tr(테이블 행) 컴포넌트\n */\nexport const Tr: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface ThProps extends React.ThHTMLAttributes {}\n\n/**\n * 기본 th(테이블 헤더 셀) 컴포넌트\n */\nexport const Th: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface TdProps extends React.TdHTMLAttributes {}\n\n/**\n * 기본 td(테이블 데이터 셀) 컴포넌트\n */\nexport const Td: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React, { forwardRef } from 'react';\n\nexport interface NavProps extends React.HTMLAttributes {}\n\n/**\n * 기본 nav 컴포넌트\n */\nexport const Nav = forwardRef(\n ({ children, className = '', ...props }, ref) => {\n return (\n \n {children}\n \n );\n }\n);\n\nNav.displayName = 'Nav';\n","import React from 'react';\n\nexport interface SectionProps extends React.HTMLAttributes {}\n\n/**\n * 기본 section 컴포넌트\n */\nexport const Section: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface CodeProps extends React.HTMLAttributes {}\n\n/**\n * 기본 code 컴포넌트\n *\n * 인라인 코드 또는 코드 스니펫을 표시하기 위한 기본 컴포넌트입니다.\n * HTML 태그를 래핑합니다.\n */\nexport const Code: React.FC = ({\n children,\n className = '',\n ...props\n}) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\n\nexport interface HrProps extends React.HTMLAttributes {\n ref?: React.Ref;\n}\n\n/**\n * 기본 hr (수평선) 컴포넌트\n */\nexport const Hr = React.forwardRef(({\n className = '',\n ...props\n}, ref) => {\n return (\n \n );\n});\n","import React from 'react';\n\nexport interface HeaderProps extends React.HTMLAttributes {\n ref?: React.Ref;\n}\n\n/**\n * 기본 header 컴포넌트\n */\nexport const Header = React.forwardRef(({\n children,\n className = '',\n ...props\n}, ref) => {\n return (\n \n {children}\n \n );\n});\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 테마 모드 타입\n */\nexport type ThemeMode = 'auto' | 'light' | 'dark';\n\n/**\n * ThemeToggle Props\n */\nexport interface ThemeToggleProps {\n /** 테마 변경 콜백 */\n onThemeChange?: (theme: ThemeMode) => void;\n /** 추가 CSS 클래스 */\n className?: string;\n /** 자동 모드 텍스트 (다국어 키 사용 권장) */\n autoText?: string;\n /** 라이트 모드 텍스트 (다국어 키 사용 권장) */\n lightText?: string;\n /** 다크 모드 텍스트 (다국어 키 사용 권장) */\n darkText?: string;\n /** DOM id 속성 (레이아웃 편집기 코어 일괄 ID) */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * ThemeToggle 컴포넌트\n *\n * 다크/라이트 모드 전환 버튼\n * - 3가지 모드: 자동(시스템 설정 따름), 라이트, 다크\n * - localStorage에 'g7_color_scheme' 키로 저장 (admin 템플릿과 동일)\n * - 시스템 prefers-color-scheme 감지 지원\n *\n * @example\n * ```json\n * {\n * \"type\": \"composite\",\n * \"name\": \"ThemeToggle\",\n * \"props\": {\n * \"autoText\": \"$t:common.theme.auto\",\n * \"lightText\": \"$t:common.theme.light\",\n * \"darkText\": \"$t:common.theme.dark\"\n * }\n * }\n * ```\n */\n\n/**\n * 실제 적용될 테마 결정 (auto인 경우 시스템 설정 반영)\n */\nconst getEffectiveTheme = (mode: ThemeMode): 'light' | 'dark' => {\n if (mode === 'auto') {\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n }\n return mode;\n};\n\n/**\n * 테마 적용\n */\nconst applyTheme = (mode: ThemeMode) => {\n const effectiveTheme = getEffectiveTheme(mode);\n document.documentElement.setAttribute('data-theme', effectiveTheme);\n\n // dark 클래스 토글 (Tailwind CSS dark: 모드 지원)\n if (effectiveTheme === 'dark') {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n};\n\n/**\n * 초기 테마 로드 및 적용 (즉시 실행)\n * admin 템플릿과 동일한 localStorage 키 사용: 'g7_color_scheme'\n */\nconst getInitialTheme = (): ThemeMode => {\n const savedTheme = localStorage.getItem('g7_color_scheme') as ThemeMode | null;\n if (savedTheme && ['auto', 'light', 'dark'].includes(savedTheme)) {\n return savedTheme;\n }\n return 'auto';\n};\n\nexport const ThemeToggle: React.FC = ({\n onThemeChange,\n className = '',\n autoText = 'System',\n lightText = 'Light',\n darkText = 'Dark',\n id,\n editorAttrs,\n}) => {\n // 초기 테마를 즉시 로드하고 적용\n const initialTheme = getInitialTheme();\n const [currentMode, setCurrentMode] = useState(initialTheme);\n const [showMenu, setShowMenu] = useState(false);\n const menuRef = useRef(null);\n\n /**\n * 컴포넌트 마운트 시 즉시 테마 적용\n */\n useEffect(() => {\n applyTheme(currentMode);\n }, []);\n\n /**\n * 시스템 테마 변경 감지\n */\n useEffect(() => {\n if (currentMode !== 'auto') return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => {\n applyTheme('auto');\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [currentMode]);\n\n /**\n * 외부 클릭 감지\n */\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setShowMenu(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n /**\n * 테마 변경 핸들러\n * admin 템플릿과 동일한 localStorage 키 사용: 'g7_color_scheme'\n */\n const handleThemeChange = (mode: ThemeMode) => {\n setCurrentMode(mode);\n localStorage.setItem('g7_color_scheme', mode);\n applyTheme(mode);\n setShowMenu(false);\n onThemeChange?.(mode);\n };\n\n /**\n * 현재 표시할 아이콘 결정\n */\n const getCurrentIcon = (): IconName => {\n const effectiveTheme = getEffectiveTheme(currentMode);\n return effectiveTheme === 'dark' ? IconName.Moon : IconName.Sun;\n };\n\n return (\n
\n {/* 테마 토글 버튼 */}\n setShowMenu(!showMenu)}\n className=\"p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg transition-colors text-gray-600 dark:text-gray-400\"\n aria-label=\"Toggle theme\"\n >\n \n \n\n {/* 테마 선택 드롭다운 */}\n {showMenu && (\n
\n
\n {/* 자동 모드 */}\n handleThemeChange('auto')}\n className={`\n w-full px-4 py-2 text-left hover:bg-gray-50 dark:hover:bg-gray-700 flex items-center gap-3 transition-colors\n ${currentMode === 'auto' ? 'bg-gray-50 dark:bg-gray-700' : ''}\n `}\n >\n \n {autoText}\n {currentMode === 'auto' && (\n \n )}\n \n\n {/* 라이트 모드 */}\n handleThemeChange('light')}\n className={`\n w-full px-4 py-2 text-left hover:bg-gray-50 dark:hover:bg-gray-700 flex items-center gap-3 transition-colors\n ${currentMode === 'light' ? 'bg-gray-50 dark:bg-gray-700' : ''}\n `}\n >\n \n {lightText}\n {currentMode === 'light' && (\n \n )}\n \n\n {/* 다크 모드 */}\n handleThemeChange('dark')}\n className={`\n w-full px-4 py-2 text-left hover:bg-gray-50 dark:hover:bg-gray-700 flex items-center gap-3 transition-colors\n ${currentMode === 'dark' ? 'bg-gray-50 dark:bg-gray-700' : ''}\n `}\n >\n \n {darkText}\n {currentMode === 'dark' && (\n \n )}\n \n
\n
\n )}\n
\n );\n};\n\nexport default ThemeToggle;\n","import React, { useMemo } from 'react';\nimport { Div } from '../basic/Div';\nimport { Img } from '../basic/Img';\nimport { Icon } from '../basic/Icon';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 아바타 크기 타입\n */\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl';\n\n/**\n * 사이즈별 Tailwind 클래스 매핑\n * - 크기 (w/h) + 텍스트 크기 (이니셜용)\n */\nconst SIZE_CLASSES: Record = {\n xs: 'w-6 h-6 text-xs', // 24px\n sm: 'w-8 h-8 text-sm', // 32px\n md: 'w-10 h-10 text-base', // 40px\n lg: 'w-12 h-12 text-lg', // 48px\n xl: 'w-16 h-16 text-xl', // 64px\n '2xl': 'w-24 h-24 text-2xl', // 96px\n '3xl': 'w-32 h-32 text-3xl', // 128px\n '4xl': 'w-40 h-40 text-4xl', // 160px\n '5xl': 'w-48 h-48 text-5xl', // 192px\n} as const;\n\n/**\n * 기본 컨테이너 스타일 (공통)\n */\nconst BASE_CONTAINER_CLASSES = 'rounded-full overflow-hidden flex-shrink-0 border border-gray-200 dark:border-gray-700';\n\n/**\n * 탈퇴 사용자 스타일\n */\nconst WITHDRAWN_CLASSES = 'grayscale opacity-50';\n\n/**\n * 이니셜 배경 스타일\n */\nconst INITIAL_BG_CLASSES = {\n normal: 'bg-gradient-to-br from-blue-500 to-purple-600',\n withdrawn: 'bg-gray-300 dark:bg-gray-600',\n guest: 'bg-gray-200 dark:bg-gray-700',\n} as const;\n\n/**\n * Author 객체 인터페이스\n */\nexport interface AuthorInfo {\n /** 사용자 ID */\n id?: string | number;\n /** 사용자 이름 */\n name?: string;\n /** 아바타 URL */\n avatar?: string;\n /** 사용자 상태 */\n status?: 'active' | 'inactive' | 'blocked' | 'withdrawn';\n /** 비회원 여부 */\n is_guest?: boolean;\n}\n\nexport interface AvatarProps {\n /**\n * 작성자 객체 (권장)\n * API 응답의 author 객체를 그대로 전달하면 됩니다.\n * 개별 props(name, avatar 등)가 함께 전달되면 개별 props가 우선합니다.\n */\n author?: AuthorInfo;\n /** 사용자 이름 (author.name보다 우선) */\n name?: string;\n /** 아바타 이미지 URL (author.avatar보다 우선) */\n avatar?: string;\n /** 사이즈 @default 'md' */\n size?: AvatarSize;\n /** 추가 className */\n className?: string;\n /** 레이아웃 JSON text 속성 (name보다 우선) */\n text?: string;\n /** 탈퇴한 사용자 여부 (author.status === 'withdrawn'과 OR 조건) @default false */\n isWithdrawn?: boolean;\n /** 비회원 여부 (author.is_guest보다 우선) @default false */\n isGuest?: boolean;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * Avatar 컴포넌트\n *\n * 사용자 아바타를 표시하는 재사용 가능한 composite 컴포넌트입니다.\n * - 아바타 이미지가 있으면 이미지 표시\n * - 이미지가 없으면 이름의 첫 글자(이니셜) 표시\n * - 비회원: 연한 회색 배경 + 사람 실루엣 아이콘\n * - 탈퇴한 사용자: 회색 빈 원 (그레이스케일 + 투명도)\n *\n * ## Props 우선순위\n * 명시적으로 전달한 props가 author에서 추출한 값보다 우선합니다.\n * - 이름: text > name > author.name\n * - 아바타: avatar > author.avatar\n * - 비회원 여부: isGuest > author.is_guest\n * - 탈퇴 여부: isWithdrawn || author.status === 'withdrawn'\n *\n * @example\n * // 레이아웃 JSON에서 사용 (author 객체 전달 - 권장)\n * {\n * \"type\": \"composite\",\n * \"name\": \"Avatar\",\n * \"props\": {\n * \"author\": \"{{post.author}}\",\n * \"size\": \"md\"\n * }\n * }\n *\n * @example\n * // author와 개별 props 혼합 사용 (개별 props가 우선)\n * {\n * \"type\": \"composite\",\n * \"name\": \"Avatar\",\n * \"props\": {\n * \"author\": \"{{post.author}}\",\n * \"avatar\": \"/images/custom-avatar.png\",\n * \"size\": \"md\"\n * }\n * }\n * // author.avatar가 있어도 \"/images/custom-avatar.png\"이 표시됨\n */\nexport const Avatar: React.FC = ({\n author,\n name,\n avatar,\n size = 'md',\n className = '',\n text,\n isWithdrawn = false,\n isGuest = false,\n id,\n editorAttrs,\n}) => {\n // 명시적 props > author 추출값 순서로 결정\n const actualAvatar = avatar ?? author?.avatar;\n const actualName = text ?? name ?? author?.name ?? '?';\n const actualIsWithdrawn = isWithdrawn || author?.status === 'withdrawn';\n const actualIsGuest = isGuest || author?.is_guest || false;\n\n // 컨테이너 클래스 메모이제이션\n const containerClasses = useMemo(() => {\n const sizeClass = SIZE_CLASSES[size] || SIZE_CLASSES.md;\n const withdrawnClass = actualIsWithdrawn ? WITHDRAWN_CLASSES : '';\n\n return [sizeClass, BASE_CONTAINER_CLASSES, withdrawnClass, className]\n .filter(Boolean)\n .join(' ');\n }, [size, actualIsWithdrawn, className]);\n\n // 이니셜 배경 클래스\n const initialBgClass = actualIsGuest\n ? INITIAL_BG_CLASSES.guest\n : actualIsWithdrawn\n ? INITIAL_BG_CLASSES.withdrawn\n : INITIAL_BG_CLASSES.normal;\n\n // 비회원: 사람 실루엣 아이콘 (연한 회색), 탈퇴 사용자: 사람 실루엣 아이콘 (진한 회색), 일반: 이니셜\n const renderContent = () => {\n if (actualIsGuest) {\n return (\n
\n \n
\n );\n }\n if (actualIsWithdrawn) {\n return (\n
\n \n
\n );\n }\n return (\n
\n {actualName.charAt(0).toUpperCase()}\n
\n );\n };\n\n return (\n
\n {actualAvatar && !actualIsGuest && !actualIsWithdrawn ? (\n \n ) : (\n renderContent()\n )}\n
\n );\n};\n","/**\n * SlotContainer.tsx\n *\n * 동적 슬롯에 등록된 컴포넌트들을 렌더링하는 컨테이너 컴포넌트\n *\n * SlotContainer는 SlotContext에서 지정된 슬롯 ID에 등록된 모든 컴포넌트를 수집하고,\n * slotOrder 기준으로 정렬하여 렌더링합니다.\n *\n * 통짜 TSX 컴포넌트(예: Header)가 레이아웃 JSON 노드(`\"slot\": \"...\"`)로 주입된 UI를\n * 떙겨 쓰는 코어 슬롯 시스템의 소비 측 컴포넌트입니다. 빈 슬롯이면 null 을 렌더하므로\n * \"모듈 활성 시에만 노출\"이 확장 주입 인프라로 자동 충족됩니다(헤더는 주입 모듈을 모름).\n *\n * @module SlotContainer\n *\n * @example\n * ```json\n * {\n * \"type\": \"composite\",\n * \"name\": \"SlotContainer\",\n * \"props\": {\n * \"slotId\": \"header_currency\",\n * \"className\": \"flex items-center\"\n * }\n * }\n * ```\n */\n\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { Div } from '../basic/Div';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:SlotContainer')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:SlotContainer]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:SlotContainer]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:SlotContainer]', ...args),\n};\n\n/**\n * 슬롯에 주입된 컴포넌트의 root id 를 컨테이너 id 로 스코프해 고유화한다.\n *\n * 같은 슬롯 컴포넌트가 여러 SlotContainer(예: 헤더 데스크톱/모바일)에서 렌더되면 주입\n * 컴포넌트의 정적 root id 가 컨테이너마다 같은 값으로 중복 출력되어 HTML id 유일성을\n * 위반한다. 컨테이너 고유 id 가 있고 컴포넌트가 root id 를 가지면 `{id}__{containerId}`\n * 로 스코프한다. 둘 중 하나라도 없으면 원본 그대로(무영향).\n *\n * @param componentDef 주입 컴포넌트 정의\n * @param containerId 이 SlotContainer 의 DOM id (없으면 스코프 안 함)\n * @returns 스코프된(또는 원본) 컴포넌트 정의\n */\nexport function scopeSlotChildDef(\n componentDef: T,\n containerId: string | undefined,\n): T {\n if (\n containerId &&\n componentDef &&\n typeof componentDef.id === 'string' &&\n componentDef.id.length > 0\n ) {\n return { ...componentDef, id: `${componentDef.id}__${containerId}` };\n }\n return componentDef;\n}\n\n/**\n * SlotContainer Props\n */\nexport interface SlotContainerProps {\n /**\n * 슬롯 ID\n *\n * 이 슬롯에 등록된 컴포넌트들을 렌더링합니다.\n */\n slotId: string;\n\n /**\n * 컨테이너 CSS 클래스\n */\n className?: string;\n\n /**\n * 빈 슬롯일 때 표시할 내용\n */\n emptyContent?: React.ReactNode;\n\n /**\n * 인라인 스타일\n */\n style?: React.CSSProperties;\n\n /**\n * 컴포넌트 ID (DOM id)\n */\n id?: string;\n\n /**\n * 자식 컴포넌트 (children을 통한 fallback 또는 slot 컴포넌트가 아닌 정적 컨텐츠)\n */\n children?: React.ReactNode;\n}\n\n/**\n * SlotRegistration 타입 (SlotContext에서 정의된 것과 호환)\n */\ninterface SlotRegistration {\n componentDef: any;\n dataContext: Record;\n order: number;\n parentFormContext: any;\n getParentComponentContext: () => { state: Record; setState: (updates: any) => void };\n translationContext: any;\n registrationKey: string;\n}\n\n/**\n * SlotContext 값 타입\n */\ninterface SlotContextValue {\n getSlotComponents: (slotId: string) => SlotRegistration[];\n subscribeToSlot: (slotId: string, callback: () => void) => () => void;\n isEnabled: boolean;\n}\n\n/**\n * SlotContainer 컴포넌트\n *\n * SlotContext에서 지정된 슬롯 ID에 등록된 컴포넌트들을 수집하여 렌더링합니다.\n * 컴포넌트는 slotOrder 기준으로 정렬됩니다.\n *\n * 이 컴포넌트는 SlotContext를 사용하므로 SlotProvider 내부에서만 동작합니다.\n * SlotProvider는 DynamicRenderer의 루트에서 자동으로 래핑됩니다.\n *\n * @param props SlotContainerProps\n */\nexport const SlotContainer: React.FC = ({\n slotId,\n className = '',\n emptyContent,\n style,\n id,\n children,\n}) => {\n const [slotComponents, setSlotComponents] = useState([]);\n const [, forceUpdate] = useState({});\n\n // SlotContext 가져오기 (window.__slotContextValue 또는 G7Core.getSlotContext() 사용)\n const getSlotContext = useCallback((): SlotContextValue | null => {\n const directSlotContext = (window as any).__slotContextValue;\n if (directSlotContext) {\n return directSlotContext;\n }\n\n const g7Core = (window as any).G7Core;\n if (!g7Core) return null;\n\n const slotContext = g7Core.getSlotContext?.();\n return slotContext || null;\n }, []);\n\n // 슬롯 컴포넌트 업데이트 함수\n const updateSlotComponents = useCallback(() => {\n const slotContext = getSlotContext();\n if (slotContext && slotContext.isEnabled) {\n setSlotComponents(slotContext.getSlotComponents(slotId));\n }\n }, [slotId, getSlotContext]);\n\n // 슬롯 구독 및 업데이트\n useEffect(() => {\n const slotContext = getSlotContext();\n\n if (!slotContext || !slotContext.isEnabled) {\n return;\n }\n\n updateSlotComponents();\n\n const unsubscribe = slotContext.subscribeToSlot(slotId, () => {\n updateSlotComponents();\n forceUpdate({});\n });\n\n return unsubscribe;\n }, [slotId, getSlotContext, updateSlotComponents]);\n\n // G7Core에서 DynamicRenderer 가져오기\n const getDynamicRenderer = useCallback(() => {\n const g7Core = (window as any).G7Core;\n if (!g7Core) return null;\n\n return g7Core.getDynamicRenderer?.();\n }, []);\n\n // 빈 슬롯 처리\n if (slotComponents.length === 0) {\n if (emptyContent) {\n return (\n
\n {emptyContent}\n
\n );\n }\n\n if (children) {\n return (\n
\n {children}\n
\n );\n }\n\n return null;\n }\n\n const DynamicRenderer = getDynamicRenderer();\n const g7Core = (window as any).G7Core;\n\n if (!DynamicRenderer || !g7Core) {\n logger.error('G7Core or DynamicRenderer not available');\n return null;\n }\n\n return (\n
\n {slotComponents.map((registration) => {\n const {\n componentDef,\n dataContext,\n parentFormContext,\n getParentComponentContext,\n translationContext,\n } = registration;\n\n // 같은 슬롯 컴포넌트가 여러 SlotContainer(헤더 데스크톱/모바일)에서 렌더될 때\n // 주입 컴포넌트 root id 를 컨테이너 id 로 스코프해 HTML id 중복을 막는다.\n const scopedDef = scopeSlotChildDef(componentDef, id);\n\n return (\n \n );\n })}\n {children}\n
\n );\n};\n\nexport default SlotContainer;\n","import React, { useState, useRef, useEffect, useCallback, useLayoutEffect } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { Icon } from '../basic/Icon';\nimport { IconName } from '../basic/IconTypes';\nimport { Input } from '../basic/Input';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 알림 아이템 인터페이스\n */\nexport interface NotificationItem {\n id: string | number;\n title: string;\n message: string;\n time: string;\n read?: boolean;\n iconName?: IconName;\n data?: Record;\n onClick?: () => void;\n}\n\n/**\n * NotificationCenter Props\n */\nexport interface NotificationCenterProps {\n /** 알림 목록 */\n notifications?: NotificationItem[];\n /** 서버 기반 미읽음 알림 수 */\n unreadCount?: number;\n /** 추가 로드 가능 여부 */\n hasMore?: boolean;\n /** 로딩 상태 */\n loading?: boolean;\n /** 알림 제목 텍스트 */\n titleText?: string;\n /** 알림 없음 텍스트 */\n emptyText?: string;\n /** \"모두 읽음\" 버튼 텍스트 */\n markAllReadText?: string;\n /** \"모두 삭제\" 버튼 텍스트 */\n deleteAllText?: string;\n /** \"미읽음만\" 체크박스 텍스트 */\n unreadOnlyText?: string;\n /** \"미읽음만\" 체크박스 상태 */\n unreadOnly?: boolean;\n /** 알림 클릭 핸들러 (알림 전체 객체 전달) */\n onNotificationClick?: (notification: NotificationItem) => void;\n /** 드롭다운 닫힐 때 (뷰포트에 들어온 미읽음 알림 ID 목록) */\n onClose?: (visibleUnreadIds: (string | number)[]) => void;\n /** 추가 로드 요청 */\n onLoadMore?: () => void;\n /** 모두 읽음 처리 요청 */\n onMarkAllRead?: () => void;\n /** 모두 삭제 요청 */\n onDeleteAll?: () => void;\n /** 개별 알림 삭제 요청 (알림 전체 객체 전달) */\n onDelete?: (notification: NotificationItem) => void;\n /** \"미읽음만\" 체크박스 토글 */\n onUnreadOnlyToggle?: (checked: boolean) => void;\n /** 드롭다운 정렬 방향 — \"right\"(기본): 우측 정렬되어 좌측으로 확장 / \"left\": 좌측 정렬되어 우측으로 확장 */\n dropdownAlign?: 'left' | 'right';\n className?: string;\n /** DOM id 속성 (레이아웃 편집기 코어 일괄 ID) */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * NotificationCenter 컴포넌트 (User)\n *\n * 알림 센터 - 알림 목록 표시, 무한스크롤, 읽음 추적.\n * sirsoft-admin_basic의 NotificationCenter와 동일 API/동작을 제공한다.\n *\n * @example\n * ```tsx\n * \n * ```\n */\nexport const NotificationCenter: React.FC = ({\n notifications = [],\n unreadCount = 0,\n hasMore = false,\n loading = false,\n titleText = '알림',\n emptyText = '알림이 없습니다.',\n markAllReadText = '모두 읽음',\n deleteAllText = '모두 삭제',\n unreadOnlyText = '안 읽은 알림만',\n unreadOnly = false,\n onNotificationClick,\n onClose,\n onLoadMore,\n onMarkAllRead,\n onDeleteAll,\n onDelete,\n onUnreadOnlyToggle,\n dropdownAlign = 'right',\n className = '',\n id,\n editorAttrs,\n}) => {\n const [showNotifications, setShowNotifications] = useState(false);\n const notificationRef = useRef(null);\n const dropdownRef = useRef(null);\n const scrollRef = useRef(null);\n const sentinelRef = useRef(null);\n const visibleUnreadIdsRef = useRef>(new Set());\n\n // 무한스크롤 관련 최신 값 참조 (observer 재등록 없이 최신 prop 접근)\n const onLoadMoreRef = useRef(onLoadMore);\n const hasMoreRef = useRef(hasMore);\n const loadingRef = useRef(loading);\n const notificationsCountRef = useRef(notifications.length);\n // 마지막 onLoadMore 발행 시점의 notifications.length — 동일 길이에서 중복 발행 가드\n const lastRequestedCountRef = useRef(-1);\n\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore;\n hasMoreRef.current = hasMore;\n loadingRef.current = loading;\n notificationsCountRef.current = notifications.length;\n });\n\n /**\n * 무한스크롤 — IntersectionObserver\n *\n * observer는 드롭다운 열림/닫힘 전환 시에만 재등록한다.\n * 목록이 append되거나 loading/hasMore가 바뀌어도 observer를 새로 만들지 않으므로,\n * sentinel이 이미 뷰포트에 있는 상태에서 재등록 시 즉시 intersecting callback이\n * 중복 발행되던 문제를 방지한다.\n */\n useEffect(() => {\n if (!sentinelRef.current || !scrollRef.current || !showNotifications) return;\n\n // 드롭다운이 새로 열릴 때마다 중복 가드 초기화\n lastRequestedCountRef.current = -1;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (!entry.isIntersecting) return;\n if (loadingRef.current || !hasMoreRef.current) return;\n // B안 가드: 같은 length에서 이미 한 번 발행했다면 skip\n if (lastRequestedCountRef.current === notificationsCountRef.current) return;\n lastRequestedCountRef.current = notificationsCountRef.current;\n onLoadMoreRef.current?.();\n },\n { root: scrollRef.current, threshold: 0.1 }\n );\n\n observer.observe(sentinelRef.current);\n return () => observer.disconnect();\n }, [showNotifications]);\n\n /**\n * 뷰포트 내 미읽음 알림 추적 — IntersectionObserver\n */\n useEffect(() => {\n if (!scrollRef.current || !showNotifications) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const id = entry.target.getAttribute('data-notification-id');\n const isUnread = entry.target.getAttribute('data-unread') === 'true';\n if (id && isUnread && entry.isIntersecting) {\n visibleUnreadIdsRef.current.add(id);\n }\n });\n },\n {\n root: scrollRef.current,\n threshold: 0.5,\n }\n );\n\n const items = scrollRef.current.querySelectorAll('[data-notification-id]');\n items.forEach((item) => observer.observe(item));\n\n return () => observer.disconnect();\n }, [showNotifications, notifications]);\n\n /**\n * 뱃지에 표시할 카운트 (handleClose 보다 먼저 선언 — deps 참조 순서)\n */\n const displayCount = unreadCount > 0 ? unreadCount : notifications.filter((n) => !n.read).length;\n\n /**\n * 드롭다운 닫기 — 뷰포트에 들어온 미읽음 알림 ID 전달\n *\n * 불필요한 read-batch 호출 방지:\n * 1) displayCount 가 0 이면 이미 모두 읽음/삭제 처리된 상태 → 전체 skip\n * 2) 뷰포트에 나타났던 ID 중 현재 notifications 기준 여전히 unread 인 것만 전달\n * (\"모두 읽음\" onSuccess 로 notifications 가 갱신되면 필터 결과가 빈 배열이 됨)\n */\n const handleClose = useCallback(() => {\n if (showNotifications) {\n if (displayCount > 0) {\n const unreadIds = Array.from(visibleUnreadIdsRef.current).filter((id) => {\n const n = notifications.find((item) => String(item.id) === String(id));\n return n && !n.read;\n });\n if (unreadIds.length > 0) {\n onClose?.(unreadIds);\n }\n }\n visibleUnreadIdsRef.current.clear();\n setShowNotifications(false);\n }\n }, [showNotifications, onClose, displayCount, notifications]);\n\n /**\n * 외부 클릭 감지 — 드롭다운이 열려 있을 때만 리스너 등록\n * (stale closure 방지: showNotifications 변경 시 리스너 재등록)\n * 주의: handleClose가 useCallback으로 선언된 이후에 위치해야 TDZ 위반 방지\n */\n useEffect(() => {\n if (!showNotifications) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n notificationRef.current &&\n !notificationRef.current.contains(event.target as Node)\n ) {\n handleClose();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showNotifications, handleClose]);\n\n /**\n * 드롭다운 토글\n */\n const handleToggle = useCallback(() => {\n if (showNotifications) {\n handleClose();\n } else {\n setShowNotifications(true);\n }\n }, [showNotifications, handleClose]);\n\n /**\n * 드롭다운 열릴 때 뷰포트 경계 검사 후 이탈량만큼 translateX 로 보정\n *\n * class 기반 left-0/right-0 전환은 부모 컨테이너 기준이라 부모가 뷰포트 가장자리에 있을 때\n * 여전히 이탈할 수 있다. 따라서 초기 렌더 후 드롭다운의 실제 뷰포트 좌표를 측정하여\n * 이탈한 픽셀만큼 반대 방향으로 이동시키는 방식을 사용한다.\n */\n useLayoutEffect(() => {\n const dropdown = dropdownRef.current;\n if (!showNotifications || !dropdown) return;\n\n // 측정 전 기존 transform 초기화 (재측정 시 누적 방지)\n dropdown.style.transform = '';\n const rect = dropdown.getBoundingClientRect();\n const vw = typeof window !== 'undefined' ? window.innerWidth : 0;\n\n // layout 미측정(jsdom 등)에서 rect 가 0 으로 반환되는 경우 보정 스킵\n if (rect.width === 0 && rect.height === 0) return;\n\n const margin = 8;\n let shift = 0;\n if (rect.right > vw - margin) {\n shift = -(rect.right - (vw - margin));\n } else if (rect.left < margin) {\n shift = margin - rect.left;\n }\n\n if (shift !== 0) {\n dropdown.style.transform = `translateX(${shift}px)`;\n }\n }, [showNotifications, dropdownAlign, notifications.length]);\n\n return (\n
\n \n \n {displayCount > 0 && (\n \n {displayCount > 99 ? '99+' : displayCount}\n \n )}\n \n\n {/* 알림 드롭다운 */}\n {showNotifications && (\n
\n
\n
\n {titleText}\n {onUnreadOnlyToggle && (\n onUnreadOnlyToggle(!unreadOnly)}\n >\n ) => {\n e.stopPropagation();\n onUnreadOnlyToggle(e.target.checked);\n }}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n className=\"w-3.5 h-3.5 rounded border-gray-300 dark:border-gray-600 text-blue-600 dark:text-blue-400 focus:ring-blue-500 dark:focus:ring-blue-400 cursor-pointer\"\n />\n {unreadOnlyText}\n
\n )}\n
\n
\n {onMarkAllRead && displayCount > 0 && (\n {\n onMarkAllRead();\n visibleUnreadIdsRef.current.clear();\n }}\n className=\"text-xs text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 hover:underline cursor-pointer\"\n >\n {markAllReadText}\n \n )}\n {onDeleteAll && notifications.length > 0 && (\n {\n // 드롭다운은 닫지 않음 — 확인 모달이 닫히면 다시 자연스럽게 노출되어야 하고,\n // 사용자가 모달 취소 시에도 컨텍스트 유지 (요구사항)\n onDeleteAll();\n }}\n className=\"text-xs text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300 hover:underline cursor-pointer\"\n >\n {deleteAllText}\n \n )}\n
\n
\n
\n {notifications.length === 0 && !loading ? (\n
\n {emptyText}\n
\n ) : (\n <>\n {notifications.map((notification) => {\n const isUnread = !notification.read;\n return (\n {\n notification.onClick?.();\n onNotificationClick?.(notification);\n setShowNotifications(false);\n }}\n className={`group flex items-start gap-3 px-4 py-3 text-left border-b border-gray-100 dark:border-gray-700 transition-colors cursor-pointer ${\n isUnread\n ? 'bg-blue-50/70 dark:bg-blue-900/20 hover:bg-blue-50 dark:hover:bg-blue-900/30'\n : 'bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700/50 opacity-70'\n }`}\n >\n {notification.iconName && (\n \n )}\n
\n \n {notification.title}\n
\n \n {notification.message}\n
\n
\n {notification.time}\n
\n
\n
\n {isUnread && (\n \n )}\n {onDelete && (\n {\n e.stopPropagation();\n onDelete(notification);\n }}\n className=\"p-1 text-gray-400 dark:text-gray-500 hover:text-red-600 dark:hover:text-red-400 rounded hover:bg-red-50 dark:hover:bg-red-900/20 cursor-pointer opacity-0 group-hover:opacity-100 transition-opacity\"\n aria-label=\"Delete notification\"\n >\n \n \n )}\n
\n
\n );\n })}\n {/* 무한스크롤 sentinel */}\n {hasMore && (\n
\n {loading ? (\n ...\n ) : (\n \n )}\n
\n )}\n {loading && !hasMore && notifications.length > 0 && (\n
\n ...\n
\n )}\n \n )}\n
\n
\n )}\n
\n );\n};\n\nexport default NotificationCenter;\n","/**\n * Header 컴포넌트\n *\n * 사이트 상단 헤더 컴포넌트입니다.\n * 로고, 검색바, 네비게이션, 사용자 메뉴, 장바구니, 알림을 포함합니다.\n *\n * @see 화면 구성:\n * ┌─────────────────────────────────────────────────────────────────┐\n * │ [Logo] [검색바................] [🔔] [🛒(3)] [👤 닉네임 ▼] │\n * ├─────────────────────────────────────────────────────────────────┤\n * │ [홈] [🔥인기] [🛒쇼핑] [자유게시판] [질문답변] [갤러리] [더보기▼] │\n * └─────────────────────────────────────────────────────────────────┘\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\n\n// 기본 컴포넌트 import\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Input } from '../basic/Input';\nimport { Span } from '../basic/Span';\nimport { Img } from '../basic/Img';\nimport { Icon } from '../basic/Icon';\nimport { Form } from '../basic/Form';\nimport { Nav } from '../basic/Nav';\nimport { Header as HeaderBasic } from '../basic/Header';\nimport { Hr } from '../basic/Hr';\nimport { A } from '../basic/A';\n\n// ThemeToggle 컴포넌트 import\nimport { ThemeToggle } from './ThemeToggle';\n\n// Avatar 컴포넌트 import\nimport { Avatar } from './Avatar';\n\n// SlotContainer — 헤더 통화 등 모듈 주입 UI 를 떙겨 렌더 (헤더는 주입 모듈을 모름)\nimport { SlotContainer } from './SlotContainer';\n\n// NotificationCenter 컴포넌트 import\nimport { NotificationCenter, type NotificationItem } from './NotificationCenter';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n// G7Core.dispatch() navigate 헬퍼\nconst navigate = (path: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'navigate',\n params: { path },\n });\n};\n\ninterface Board {\n id: number;\n name: string;\n slug: string;\n icon?: string;\n}\n\ninterface User {\n uuid: string;\n name: string;\n avatar?: string;\n is_admin?: boolean;\n}\n\ninterface HeaderProps {\n /** 사이트 로고 URL */\n logo?: string;\n /** 사이트 이름 */\n siteName?: string;\n /** 현재 로그인된 사용자 */\n user?: User | null;\n /** 장바구니 아이템 수 */\n cartCount?: number;\n /** 읽지 않은 알림 수 */\n notificationCount?: number;\n /** 게시판 목록 */\n boards?: Board[];\n /** 탭에 표시할 최대 게시판 수 */\n maxVisibleBoards?: number;\n /** 모바일 메뉴 열기 콜백 */\n onMobileMenuOpen?: () => void;\n /** 사용 가능한 언어 목록 */\n availableLocales?: string[];\n /** 현재 언어 */\n currentLocale?: string;\n /** 쇼핑몰 기본 경로 (예: \"/shop\", \"/\") */\n shopBase?: string;\n /** 추가 CSS 클래스 */\n className?: string;\n /** 레이아웃 편집기 식별 속성(data-editor-*) — 시각적 루트에 spread */\n editorAttrs?: Record;\n\n // ===== 알림센터 드롭다운 Props =====\n /** 알림 목록 (NotificationCenter에 전달) */\n notifications?: NotificationItem[];\n /** 더 불러올 페이지 존재 여부 */\n notificationHasMore?: boolean;\n /** 알림 로딩 상태 */\n notificationLoading?: boolean;\n /** \"안 읽은 알림만\" 필터 상태 */\n notificationUnreadOnly?: boolean;\n /** 알림 드롭다운 제목 */\n notificationTitleText?: string;\n /** 알림 없음 텍스트 */\n notificationEmptyText?: string;\n /** \"모두 읽음\" 텍스트 */\n notificationMarkAllReadText?: string;\n /** \"모두 삭제\" 텍스트 */\n notificationDeleteAllText?: string;\n /** \"안 읽은 알림만\" 체크박스 텍스트 */\n notificationUnreadOnlyText?: string;\n /** 알림 드롭다운 닫힐 때 (뷰포트에 보인 미읽음 ID 배열 전달) */\n onNotificationClose?: (visibleUnreadIds: (string | number)[]) => void;\n /** 개별 알림 클릭 */\n onNotificationClick?: (notification: NotificationItem) => void;\n /** 무한 스크롤: 추가 로드 */\n onNotificationLoadMore?: () => void;\n /** \"모두 읽음\" 처리 */\n onNotificationMarkAllRead?: () => void;\n /** \"모두 삭제\" 요청 (모달 오픈) */\n onNotificationDeleteAll?: () => void;\n /** 개별 알림 삭제 */\n onNotificationDelete?: (notification: NotificationItem) => void;\n /** \"안 읽은 알림만\" 체크박스 토글 */\n onNotificationUnreadOnlyToggle?: (checked: boolean) => void;\n}\n\n/**\n * 사이트 헤더 컴포넌트\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"Header\",\n * \"props\": {\n * \"logo\": \"{{_global.settings.site_logo}}\",\n * \"siteName\": \"{{_global.settings.site_name}}\",\n * \"user\": \"{{_global.currentUser}}\",\n * \"cartCount\": \"{{_global.cartCount}}\",\n * \"notificationCount\": \"{{_global.notificationCount}}\",\n * \"boards\": \"{{boards.data}}\",\n * \"maxVisibleBoards\": 5\n * }\n * }\n * ```\n */\nconst Header: React.FC = ({\n logo,\n siteName = '그누보드7',\n user,\n cartCount = 0,\n notificationCount = 0,\n boards = [],\n maxVisibleBoards = 5,\n onMobileMenuOpen,\n availableLocales = [],\n currentLocale = 'ko',\n shopBase = '/shop',\n className = '',\n editorAttrs,\n // 알림센터\n notifications = [],\n notificationHasMore = false,\n notificationLoading = false,\n notificationUnreadOnly = false,\n notificationTitleText,\n notificationEmptyText,\n notificationMarkAllReadText,\n notificationDeleteAllText,\n notificationUnreadOnlyText,\n onNotificationClose,\n onNotificationClick,\n onNotificationLoadMore,\n onNotificationMarkAllRead,\n onNotificationDeleteAll,\n onNotificationDelete,\n onNotificationUnreadOnlyToggle,\n}) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [showUserMenu, setShowUserMenu] = useState(false);\n const [showMoreBoards, setShowMoreBoards] = useState(false);\n const [showLangMenu, setShowLangMenu] = useState(false);\n const [dropdownPosition, setDropdownPosition] = useState<{ top: number; left: number }>({ top: 0, left: 0 });\n const [currentPath, setCurrentPath] = useState(window.location.pathname);\n const userMenuRef = useRef(null);\n const moreButtonRef = useRef(null);\n const langMenuRef = useRef(null);\n\n // G7Core.useResponsive를 통해 반응형 상태 구독 (G7 표준 — 위지윅 overrideWidth 호환)\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive;\n const responsiveValue = useResponsive?.();\n const isMobile = responsiveValue\n ? responsiveValue.width < 768\n : typeof window !== 'undefined' && window.innerWidth < 768;\n\n // 경로 변경 감지 (SPA 네비게이션 대응)\n useEffect(() => {\n const handlePopState = () => setCurrentPath(window.location.pathname);\n window.addEventListener('popstate', handlePopState);\n\n // G7Core의 navigate 이벤트 감지\n const originalPushState = history.pushState;\n history.pushState = function(...args) {\n originalPushState.apply(this, args);\n setCurrentPath(window.location.pathname);\n };\n\n return () => {\n window.removeEventListener('popstate', handlePopState);\n history.pushState = originalPushState;\n };\n }, []);\n\n // 경로 매칭 헬퍼 함수\n const isActiveRoute = (path: string, exact = false): boolean => {\n if (exact) {\n return currentPath === path;\n }\n return currentPath === path || currentPath.startsWith(path + '/');\n };\n\n // 쇼핑 관련 경로 체크 (products, cart, checkout, category 등)\n const isShopActive = (): boolean => {\n const base = shopBase === '/' ? '' : shopBase;\n return currentPath.startsWith(`${base}/products`) ||\n currentPath.startsWith(`${base}/cart`) ||\n currentPath.startsWith(`${base}/checkout`) ||\n currentPath.startsWith(`${base}/category`);\n };\n\n // 네비게이션 버튼 스타일\n const getNavButtonClass = (isActive: boolean): string => {\n const baseClass = 'px-3 py-2 text-sm font-medium whitespace-nowrap cursor-pointer rounded-lg transition-colors';\n if (isActive) {\n return `${baseClass} bg-gray-900 text-white dark:bg-white dark:text-gray-900`;\n }\n return `${baseClass} text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-800`;\n };\n\n // 메뉴 외부 클릭 시 닫기\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (userMenuRef.current && !userMenuRef.current.contains(event.target as Node)) {\n setShowUserMenu(false);\n }\n if (moreButtonRef.current && !moreButtonRef.current.contains(event.target as Node)) {\n setShowMoreBoards(false);\n }\n if (langMenuRef.current && !langMenuRef.current.contains(event.target as Node)) {\n setShowLangMenu(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const visibleBoards = boards.slice(0, maxVisibleBoards);\n const hiddenBoards = boards.slice(maxVisibleBoards);\n\n const handleSearch = (e: React.FormEvent) => {\n e.preventDefault();\n if (searchQuery.trim()) {\n navigate(`/search?q=${encodeURIComponent(searchQuery)}`);\n }\n };\n\n const handleLogout = async () => {\n // G7Core.dispatch를 사용하여 logout 핸들러 호출\n // AuthManager가 토큰 삭제, 상태 초기화, 리다이렉트를 처리\n (window as any).G7Core?.dispatch?.({\n handler: 'logout',\n });\n };\n\n // 언어 변경 핸들러 — 헤더 독립 언어 버튼(코어 기능)에서 호출. setLocale 은 비회원도 동작.\n const handleLocaleChange = (locale: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'setLocale',\n target: locale,\n });\n setShowLangMenu(false);\n };\n\n // 로케일 코드 → 표시명 (활성 언어팩 native_name 우선, 폴백 사전)\n const getLocaleName = (locale: string): string =>\n (window as any).G7Core?.state?.get?.('_global.appConfig.localeNames')?.[locale] ??\n (locale === 'ko' ? '한국어' : locale === 'en' ? 'English' : locale === 'ja' ? '日本語' : locale === 'zh' ? '中文' : locale === 'es' ? 'Español' : locale === 'fr' ? 'Français' : locale === 'de' ? 'Deutsch' : locale.toUpperCase());\n\n return (\n )}\n className={`sticky top-0 z-50 bg-white dark:bg-gray-900 border-b border-gray-200 dark:border-gray-800 ${className}`}\n >\n {/* 상단 바 */}\n \n
\n
\n {/* 로고 */}\n \n\n {/* 검색바 (데스크톱 전용) */}\n {!isMobile && (\n
\n
\n setSearchQuery(e.target.value)}\n placeholder={t('common.search_placeholder')}\n className=\"w-full px-4 py-2 pl-10 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-blue-500\"\n />\n \n
\n
\n )}\n\n {/* 우측 액션 버튼들 */}\n
\n {/* 다크모드 전환 */}\n \n\n {/* 알림센터 드롭다운 — 로그인 사용자에게만 노출 */}\n {user?.uuid && (\n \n )}\n\n {/* 장바구니 */}\n \n\n {/* 언어 선택 — 헤더 독립 버튼(코어 기능, 비회원 포함 전체 노출). 공간 절약 위해 아이콘+로케일 코드만.\n 언어는 항상 존재(이커머스 무관) → 템플릿 헤더 내장. */}\n {availableLocales && availableLocales.length > 1 && (\n
\n setShowLangMenu(!showLangMenu)}\n className=\"flex items-center gap-1.5 px-2.5 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg cursor-pointer transition-colors\"\n aria-haspopup=\"listbox\"\n aria-expanded={showLangMenu}\n aria-label={t('common.language')}\n >\n \n {currentLocale}\n \n \n {showLangMenu && (\n \n {availableLocales.map((locale) => {\n const isActive = locale === currentLocale;\n return (\n handleLocaleChange(locale)}\n className={`w-full px-4 py-2.5 text-left text-sm flex items-center gap-3 cursor-pointer transition-colors ${\n isActive\n ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400'\n : 'text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700'\n }`}\n >\n \n {getLocaleName(locale)}\n {isActive && }\n \n );\n })}\n
\n )}\n
\n )}\n\n {/* 통화 선택 — 이커머스 모듈이 'header_currency' 슬롯에 주입(layout_extensions).\n 헤더는 슬롯 이름만 알고 통화/모듈을 모름. 모듈 비활성 시 빈 슬롯 → 미렌더(인프라 자동 게이트).\n id 지정 필수 — 같은 슬롯이 모바일 헤더 SlotContainer 와 동시 렌더되므로 주입 컴포넌트\n root id 가 컨테이너별로 스코프되도록(SlotContainer 가 id 로 자식 root id 를 고유화) 한다. */}\n \n\n {/* 사용자 메뉴 */}\n {user?.uuid ? (\n
\n setShowUserMenu(!showUserMenu)}\n className=\"flex items-center gap-2 p-2 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white\"\n >\n \n {user.name}\n \n \n\n {/* 드롭다운 메뉴 */}\n {showUserMenu && (\n
\n {/* 사용자 정보 헤더 */}\n
\n
\n \n
\n
{user.name}
\n
{t('common.member')}
\n
\n
\n
\n\n {/* 메뉴 항목 */}\n
\n {/* 관리자 메뉴 (is_admin일 때만 표시) - 하이퍼링크로 전체 페이지 새로고침 */}\n {user.is_admin && (\n <>\n \n \n {t('common.admin_menu')}\n \n
\n \n )}\n \n \n \n
\n\n {/* 언어 선택은 헤더 독립 버튼으로 일원화(드롭다운에서 제거) — 비회원도 헤더에서 전환 가능 */}\n\n
\n \n \n {t('auth.logout')}\n \n
\n )}\n
\n ) : (\n
\n {/* 주문조회 — 로그인 페이지로 진입. 회원은 로그인 후 redirect 파라미터로 마이페이지 주문 내역으로 이동, 비회원은 로그인 페이지의 '비회원 주문 조회' 링크로 폼 진입. 로그아웃된 회원이 비회원 페이지에서 막다른 길에 빠지는 케이스를 차단한다. */}\n navigate('/login?redirect=/mypage/orders')}\n className=\"px-2.5 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white cursor-pointer\"\n >\n {t('shop.guest_order_form.nav_link')}\n \n navigate('/login')}\n className=\"px-2.5 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white cursor-pointer\"\n >\n {t('auth.login')}\n \n navigate('/register')}\n className=\"ml-1 px-3 py-2 text-sm font-medium text-white bg-emerald-500 rounded-lg hover:bg-emerald-600 cursor-pointer\"\n >\n {t('auth.register_link')}\n \n
\n )}\n\n {/* 모바일 햄버거 메뉴 (모바일 전용) */}\n {isMobile && (\n \n \n \n )}\n
\n
\n\n {/* 탭 네비게이션 (데스크톱 전용) */}\n {!isMobile && (\n
\n \n )}\n \n );\n};\n\nexport default Header;\n","import React from 'react';\n\nexport interface FooterProps extends React.HTMLAttributes {\n ref?: React.Ref;\n}\n\n/**\n * 기본 footer 컴포넌트\n */\nexport const Footer = React.forwardRef(({\n children,\n className = '',\n ...props\n}, ref) => {\n return (\n \n {children}\n \n );\n});\n","/**\n * Footer 컴포넌트\n *\n * 사이트 하단 푸터 컴포넌트입니다.\n * 사이트 정보, 링크 그룹, 소셜 링크, 저작권 표시를 포함합니다.\n *\n * @see 화면 구성:\n * ┌─────────────────────────────────────────────────────────────────┐\n * │ [사이트명] │\n * │ 함께 성장하는 커뮤니티 │\n * ├────────────┬────────────┬────────────┬────────────────────────────┤\n * │ 커뮤니티 │ 정보 │ 정책 │ [GitHub] [Twitter] [Discord]│\n * ├─────────────────────────────────────────────────────────────────┤\n * │ © 2026 사이트명. All rights reserved. Made with ❤️ │\n * └─────────────────────────────────────────────────────────────────┘\n */\n\nimport React from 'react';\n\n// 기본 컴포넌트 import\nimport { Div } from '../basic/Div';\nimport { A } from '../basic/A';\nimport { Button } from '../basic/Button';\nimport { H3 } from '../basic/H3';\nimport { H4 } from '../basic/H4';\nimport { P } from '../basic/P';\nimport { Ul } from '../basic/Ul';\nimport { Li } from '../basic/Li';\nimport { Footer as FooterBasic } from '../basic/Footer';\nimport { Icon } from '../basic/Icon';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n// G7 표준 반응형 breakpoint — 모바일(< 768) / 데스크톱(>= 1024).\n// 레이아웃 편집기 프리뷰 호환을 위해 Tailwind md:/lg:/sm: 미디어쿼리 대신\n// G7Core.useResponsive() width 기반 분기 사용 (편집 가능 템플릿은 G7 표준\n// responsive 만 허용 — viewport 미디어쿼리는 프리뷰 overrideWidth 를 무시).\nconst TABLET_BREAKPOINT = 768;\nconst DESKTOP_BREAKPOINT = 1024;\n\n// G7Core.dispatch() navigate 헬퍼\nconst navigate = (path: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'navigate',\n params: { path },\n });\n};\n\ninterface SocialLinks {\n github?: string;\n twitter?: string;\n discord?: string;\n facebook?: string;\n instagram?: string;\n}\n\ninterface FooterLink {\n label: string;\n href: string;\n}\n\ninterface FooterLinkGroup {\n title: string;\n links: FooterLink[];\n}\n\ninterface FooterProps {\n /** 사이트 이름 */\n siteName?: string;\n /** 사이트 설명 */\n siteDescription?: string;\n /** 저작권 텍스트 */\n copyrightText?: string;\n /** 소셜 미디어 링크 */\n socialLinks?: SocialLinks;\n /** 링크 그룹 (미지정 시 기본값 사용) */\n linkGroups?: FooterLinkGroup[];\n /** 추가 CSS 클래스 */\n className?: string;\n /** 레이아웃 편집기 식별 속성(data-editor-*) — 시각적 루트에 spread */\n editorAttrs?: Record;\n}\n\n/**\n * 사이트 푸터 컴포넌트\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"Footer\",\n * \"props\": {\n * \"siteName\": \"{{_global.settings.site_name}}\",\n * \"siteDescription\": \"{{_global.settings.site_description}}\",\n * \"copyrightText\": \"{{_global.settings.copyright_text}}\",\n * \"socialLinks\": {\n * \"github\": \"https://github.com/...\",\n * \"twitter\": \"https://twitter.com/...\",\n * \"discord\": \"https://discord.gg/...\"\n * }\n * }\n * }\n * ```\n */\nconst Footer: React.FC = ({\n siteName = '그누보드7',\n siteDescription,\n copyrightText,\n socialLinks = {},\n linkGroups,\n className = '',\n editorAttrs,\n}) => {\n const currentYear = new Date().getFullYear();\n\n // G7 표준 반응형 — useResponsive() 로 프리뷰 overrideWidth 수신 (편집기 디바이스\n // 전환에 정상 반응). hook 미주입 시 window.innerWidth fallback.\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive as (() => { width: number }) | undefined;\n const responsiveValue = useResponsive?.();\n const width =\n responsiveValue?.width ??\n (typeof window !== 'undefined' ? window.innerWidth : DESKTOP_BREAKPOINT);\n const isMobile = width < TABLET_BREAKPOINT;\n const isDesktop = width >= DESKTOP_BREAKPOINT;\n // 링크 그룹 그리드 컬럼 — 모바일 1열 / 태블릿 2열 / 데스크톱 5열.\n const gridColumns = isMobile ? 1 : isDesktop ? 5 : 2;\n\n // 기본 링크 그룹\n const defaultLinkGroups: FooterLinkGroup[] = [\n {\n title: t('footer.community'),\n links: [\n { label: t('nav.home'), href: '/' },\n { label: t('nav.popular'), href: '/boards/popular' },\n { label: t('footer.all_boards'), href: '/boards' },\n ],\n },\n {\n title: t('footer.info'),\n links: [\n { label: t('footer.about'), href: '/page/about' },\n { label: t('footer.faq'), href: '/page/faq' },\n { label: t('footer.contact'), href: '/page/contact' },\n ],\n },\n {\n title: t('footer.policy'),\n links: [\n { label: t('footer.terms'), href: '/page/terms' },\n { label: t('footer.privacy'), href: '/page/privacy' },\n { label: t('footer.refund'), href: '/page/refund' },\n ],\n },\n ];\n\n const groups = linkGroups || defaultLinkGroups;\n\n // 소셜 아이콘 이름 매핑\n const socialIconMap: Record = {\n github: 'github',\n twitter: 'twitter',\n discord: 'discord',\n facebook: 'facebook',\n instagram: 'instagram',\n };\n\n return (\n )}\n className={`bg-gray-50 dark:bg-gray-900 border-t border-gray-200 dark:border-gray-800 ${className}`}\n >\n
\n \n {/* 사이트 정보 — 데스크톱(5열)에서만 2칸 차지 */}\n \n\n {/* 링크 그룹 */}\n {groups.map((group, index) => (\n
\n

\n {group.title}\n

\n
    \n {group.links.map((link, linkIndex) => (\n
  • \n navigate(link.href)}\n className=\"text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white cursor-pointer\"\n >\n {link.label}\n \n
  • \n ))}\n
\n
\n ))}\n
\n\n {/* 저작권 */}\n \n

\n {copyrightText || `© ${currentYear} ${siteName}. All rights reserved.`}\n

\n

\n {t('footer.powered_by')}\n

\n
\n
\n \n );\n};\n\nexport default Footer;\n","/**\n * MobileNav 컴포넌트\n *\n * 모바일 환경에서 표시되는 슬라이드 드로어 네비게이션입니다.\n * 햄버거 메뉴 클릭 시 좌측에서 슬라이드하며 나타납니다.\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { P } from '../basic/P';\nimport { Icon } from '../basic/Icon';\nimport { Img } from '../basic/Img';\nimport { Nav } from '../basic/Nav';\nimport { Ul } from '../basic/Ul';\nimport { Li } from '../basic/Li';\n\n/**\n * G7Core 번역 함수\n */\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\n/**\n * G7Core navigate 헬퍼\n */\nconst navigate = (path: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'navigate',\n params: { path },\n });\n};\n\ninterface Board {\n id: number;\n name: string;\n slug: string;\n icon?: string;\n}\n\ninterface User {\n id: number;\n name: string;\n avatar?: string;\n}\n\ninterface MobileNavProps {\n /** 드로어 열림 상태 */\n isOpen: boolean;\n /** 닫기 콜백 */\n onClose: () => void;\n /** 사이트 로고 URL */\n logo?: string;\n /** 사이트 이름 */\n siteName?: string;\n /** 현재 로그인된 사용자 */\n user?: User | null;\n /** 게시판 목록 */\n boards?: Board[];\n /** 장바구니 아이템 수 */\n cartCount?: number;\n}\n\n/**\n * 모바일 네비게이션 드로어\n *\n * @example\n * ```tsx\n * const [isOpen, setIsOpen] = useState(false);\n *\n * setIsOpen(false)}\n * user={currentUser}\n * boards={boards}\n * />\n * ```\n */\nconst MobileNav: React.FC = ({\n isOpen,\n onClose,\n logo,\n siteName = '그누보드7',\n user,\n boards = [],\n cartCount = 0,\n}) => {\n const drawerRef = useRef(null);\n\n // G7Core.useResponsive를 통해 반응형 상태 구독 (G7 표준 — 위지윅 overrideWidth 호환)\n const G7Core = (window as any).G7Core;\n const useResponsive = G7Core?.useResponsive;\n const responsiveValue = useResponsive?.();\n // lg 미만(< 1024px)에서만 드로어 노출 — 데스크톱은 Header의 탭 nav 사용\n const isPortable = responsiveValue\n ? responsiveValue.width < 1024\n : typeof window !== 'undefined' && window.innerWidth < 1024;\n\n // ESC 키로 닫기\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose]);\n\n // 오버레이 클릭으로 닫기\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n };\n\n if (!isOpen) return null;\n // 데스크톱(lg+)에서는 모바일 드로어 자체를 노출하지 않음 (위지윅 overrideWidth 호환)\n if (!isPortable) return null;\n\n return (\n \n {/* 오버레이 */}\n
\n\n {/* 드로어 */}\n \n {/* 헤더 */}\n
\n \n \n \n \n
\n\n {/* 사용자 정보 */}\n {user ? (\n
\n
\n {user.avatar ? (\n {user.name}\n ) : (\n
\n {(user.name || 'U').charAt(0).toUpperCase()}\n
\n )}\n
\n

{user.name}

\n \n
\n
\n
\n ) : (\n
\n
\n { onClose(); navigate('/login'); }}\n className=\"flex-1 py-2 text-center text-sm font-medium text-white bg-gray-900 dark:bg-white dark:text-gray-900 rounded-lg cursor-pointer\"\n >\n {t('auth.login')}\n \n { onClose(); navigate('/register'); }}\n className=\"flex-1 py-2 text-center text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg cursor-pointer\"\n >\n {t('auth.register')}\n \n
\n
\n )}\n\n {/* 메뉴 */}\n \n\n {/* 하단 링크 */}\n
\n
\n \n \n \n
\n
\n
\n
\n );\n};\n\nexport default MobileNav;\n","/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.1';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","/**\n * ProductCard 컴포넌트\n *\n * 상품 목록에서 개별 상품을 표시하는 카드 컴포넌트입니다.\n * 다중 통화를 지원하며, 할인율 뱃지를 표시합니다.\n */\n\nimport React, { useEffect, useState } from 'react';\n\n// @ts-ignore - DOMPurify 타입 정의 없음\nimport DOMPurify from 'dompurify';\n\n// 기본 컴포넌트 import\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { H3 } from '../basic/H3';\nimport { Img } from '../basic/Img';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * 선호 통화를 전역 상태에서 읽고, 변경을 구독하는 훅.\n *\n * 회귀 배경: 종전 `G7Core.state.get('preferredCurrency')` 는 key 를 무시하고\n * _global 전체 객체를 반환해(G7CoreGlobals: get: () => getGlobalState()) 통화 코드가\n * 아닌 객체가 들어가 multi_currency 조회가 항상 KRW 폴백되었고, 단발 get 이라 헤더에서\n * 통화를 바꿔도 카드가 리렌더되지 않았다(상품 리스트/검색/캐러셀 KRW 고정 결함).\n * → 전체 객체에서 `.preferredCurrency` 키로 접근 + state.subscribe 로 리렌더한다.\n *\n * @returns 현재 선호 통화 코드(미설정 시 'KRW')\n */\nconst usePreferredCurrency = (): string => {\n const read = (): string => {\n const state = (window as any).G7Core?.state?.get?.();\n return (state && state.preferredCurrency) || 'KRW';\n };\n const [currency, setCurrency] = useState(read);\n\n useEffect(() => {\n const subscribe = (window as any).G7Core?.state?.subscribe;\n // 구독 시점과 마운트 사이 변경분 보정\n setCurrency(read());\n if (typeof subscribe !== 'function') return;\n const unsubscribe = subscribe((state: Record) => {\n setCurrency((state && state.preferredCurrency) || 'KRW');\n });\n return typeof unsubscribe === 'function' ? unsubscribe : undefined;\n }, []);\n\n return currency;\n};\n\n// G7Core.dispatch() navigate 헬퍼\nconst navigate = (path: string) => {\n (window as any).G7Core?.dispatch?.({\n handler: 'navigate',\n params: { path },\n });\n};\n\ninterface CurrencyPrice {\n value: number;\n formatted: string;\n}\n\ninterface ProductLabel {\n name: string;\n color: string;\n}\n\ninterface ProductCardProps {\n product: {\n id: number;\n /** 상품코드 — 상세 페이지 링크 식별자 (product_code 기준 라우팅). 없으면 id 로 폴백 */\n product_code?: string;\n name?: string | Record;\n name_localized?: string;\n thumbnail_url: string;\n primary_category?: string;\n selling_price: number;\n selling_price_formatted: string;\n list_price?: number;\n list_price_formatted?: string;\n discount_rate?: number;\n multi_currency_selling_price?: Record;\n multi_currency_list_price?: Record;\n /** 검색 하이라이트된 상품명 (HTML) */\n name_highlighted?: string;\n /** 검색 하이라이트된 설명 (HTML) */\n description_highlighted?: string;\n /** 짧은 설명 */\n short_description?: string;\n /** 판매 상태 (on_sale, sold_out, suspended, coming_soon) */\n sales_status?: string;\n /** 판매 상태 번역 라벨 */\n sales_status_label?: string;\n /** 브랜드명 */\n brand_name?: string;\n /** 상품 라벨/뱃지 목록 */\n labels?: ProductLabel[];\n /** 평균 별점 (0.0 ~ 5.0, 소수점 1자리) */\n rating_avg?: number;\n /** 전시중 리뷰 수 */\n review_count?: number;\n };\n /** 클릭 시 호출되는 콜백 */\n onClick?: (productId: number) => void;\n /** 쇼핑몰 base 경로 (예: '/shop', '/store', '/') */\n shopBase?: string;\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * 상품 카드 컴포넌트\n *\n * @example\n * ```tsx\n * \n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"ProductCard\",\n * \"props\": { \"product\": \"{{product}}\" }\n * }\n * ```\n */\n/**\n * rating_avg(0~5)를 0.5 단위로 반올림하여 별 아이콘 배열을 반환합니다.\n * 반환값: 5개 원소, 각각 'full' | 'half' | 'empty'\n */\nconst getStarTypes = (avg: number): Array<'full' | 'half' | 'empty'> => {\n const rounded = Math.round(avg * 2) / 2; // 0.5 단위 반올림\n return [1, 2, 3, 4, 5].map((pos) => {\n if (rounded >= pos) return 'full';\n if (rounded >= pos - 0.5) return 'half';\n return 'empty';\n });\n};\n\nconst ProductCard: React.FC = ({\n product,\n onClick,\n shopBase = '/shop',\n className = '',\n id,\n editorAttrs,\n}) => {\n const preferredCurrency = usePreferredCurrency();\n\n /**\n * 다중 통화 가격을 가져옵니다.\n * 선호 통화가 없으면 기본 포맷 가격을 반환합니다.\n */\n const getPrice = (field: 'selling_price' | 'list_price'): string | undefined => {\n const multiCurrencyField = `multi_currency_${field}` as keyof typeof product;\n const multiCurrencyData = product[multiCurrencyField] as Record | undefined;\n\n if (multiCurrencyData && multiCurrencyData[preferredCurrency]) {\n return multiCurrencyData[preferredCurrency].formatted;\n }\n\n const formattedField = `${field}_formatted` as keyof typeof product;\n return product[formattedField] as string | undefined;\n };\n\n const displayName = product.name_localized\n ?? (typeof product.name === 'string' ? product.name : '')\n ?? '';\n const sellingPrice = getPrice('selling_price');\n const listPrice = getPrice('list_price');\n const hasDiscount = product.discount_rate && product.discount_rate > 0;\n const isNotOnSale = product.sales_status && product.sales_status !== 'on_sale';\n const labels = product.labels ?? [];\n\n /**\n * HTML 하이라이트가 있으면 sanitize하여 반환합니다.\n * mark 태그만 허용하여 XSS를 방지합니다.\n */\n const sanitizeHighlight = (html: string): string => {\n return DOMPurify.sanitize(html, {\n ALLOWED_TAGS: ['mark'],\n ALLOWED_ATTR: [],\n }) as unknown as string;\n };\n\n const nameHighlighted = product.name_highlighted;\n const descriptionHtml = product.description_highlighted ?? product.short_description;\n\n const handleClick = () => {\n if (onClick) {\n onClick(product.id);\n } else {\n const base = shopBase === '/' ? '' : shopBase;\n // 상세 페이지는 product_code 기준 라우팅. code 미제공 시 id 로 폴백(하위호환).\n const identifier = product.product_code ?? product.id;\n navigate(`${base}/products/${identifier}`);\n }\n };\n\n return (\n \n {/* 이미지 영역 */}\n
\n {/* 상품 이미지 */}\n \n\n {/* 판매 상태 오버레이 */}\n {isNotOnSale && (\n
\n \n {product.sales_status_label ?? product.sales_status}\n \n
\n )}\n\n {/* 할인율 뱃지 (좌상단) - 품절/판매중단 시 숨김 */}\n {hasDiscount && product.sales_status !== 'sold_out' && product.sales_status !== 'suspended' && (\n \n {product.discount_rate}%\n \n )}\n\n {/* 상품 라벨/뱃지 (우하단) */}\n {labels.length > 0 && (\n
\n {labels.map((label, idx) => (\n \n {label.name}\n \n ))}\n
\n )}\n
\n\n {/* 상품 정보 */}\n
\n {/* 카테고리 및 브랜드 */}\n
\n {product.primary_category && (\n \n {product.primary_category}\n \n )}\n {product.brand_name && (\n \n {product.brand_name}\n \n )}\n
\n\n {/* 상품명 */}\n {nameHighlighted ? (\n \n ) : (\n

\n {displayName}\n

\n )}\n\n {/* 상품 설명 (검색 결과 등에서 표시) */}\n {descriptionHtml && (\n \n )}\n\n {/* 별점 영역 */}\n
\n {getStarTypes(product.rating_avg ?? 0).map((type, idx) => (\n \n {type === 'full' && }\n {type === 'half' && }\n {type === 'empty' && }\n \n ))}\n \n {(product.rating_avg ?? 0).toFixed(1)}\n \n \n ({product.review_count ?? 0})\n \n
\n\n {/* 가격 영역 */}\n
\n \n {sellingPrice}\n \n {listPrice && hasDiscount && (\n \n {listPrice}\n \n )}\n
\n
\n \n );\n};\n\nexport default ProductCard;\n","const MODULE_CAROUSEL = \"carousel\";\nconst MODULE_CONTROLLER = \"controller\";\nconst MODULE_NAVIGATION = \"navigation\";\nconst MODULE_NO_SCROLL = \"no-scroll\";\nconst MODULE_PORTAL = \"portal\";\nconst MODULE_ROOT = \"root\";\nconst MODULE_TOOLBAR = \"toolbar\";\nconst PLUGIN_CAPTIONS = \"captions\";\nconst PLUGIN_COUNTER = \"counter\";\nconst PLUGIN_DOWNLOAD = \"download\";\nconst PLUGIN_FULLSCREEN = \"fullscreen\";\nconst PLUGIN_INLINE = \"inline\";\nconst PLUGIN_SHARE = \"share\";\nconst PLUGIN_SLIDESHOW = \"slideshow\";\nconst PLUGIN_THUMBNAILS = \"thumbnails\";\nconst PLUGIN_ZOOM = \"zoom\";\nconst SLIDE_STATUS_LOADING = \"loading\";\nconst SLIDE_STATUS_PLAYING = \"playing\";\nconst SLIDE_STATUS_ERROR = \"error\";\nconst SLIDE_STATUS_COMPLETE = \"complete\";\nconst SLIDE_STATUS_PLACEHOLDER = \"placeholder\";\nconst activeSlideStatus = (status) => `active-slide-${status}`;\nconst ACTIVE_SLIDE_LOADING = activeSlideStatus(SLIDE_STATUS_LOADING);\nconst ACTIVE_SLIDE_PLAYING = activeSlideStatus(SLIDE_STATUS_PLAYING);\nconst ACTIVE_SLIDE_ERROR = activeSlideStatus(SLIDE_STATUS_ERROR);\nconst ACTIVE_SLIDE_COMPLETE = activeSlideStatus(SLIDE_STATUS_COMPLETE);\nconst CLASS_FULLSIZE = \"fullsize\";\nconst CLASS_FLEX_CENTER = \"flex_center\";\nconst CLASS_NO_SCROLL = \"no_scroll\";\nconst CLASS_NO_SCROLL_PADDING = \"no_scroll_padding\";\nconst CLASS_SLIDE = \"slide\";\nconst CLASS_SLIDE_WRAPPER = \"slide_wrapper\";\nconst CLASS_SLIDE_WRAPPER_INTERACTIVE = \"slide_wrapper_interactive\";\nconst ACTION_PREV = \"prev\";\nconst ACTION_NEXT = \"next\";\nconst ACTION_SWIPE = \"swipe\";\nconst ACTION_CLOSE = \"close\";\nconst EVENT_ON_POINTER_DOWN = \"onPointerDown\";\nconst EVENT_ON_POINTER_MOVE = \"onPointerMove\";\nconst EVENT_ON_POINTER_UP = \"onPointerUp\";\nconst EVENT_ON_POINTER_LEAVE = \"onPointerLeave\";\nconst EVENT_ON_POINTER_CANCEL = \"onPointerCancel\";\nconst EVENT_ON_KEY_DOWN = \"onKeyDown\";\nconst EVENT_ON_KEY_UP = \"onKeyUp\";\nconst EVENT_ON_WHEEL = \"onWheel\";\nconst VK_ESCAPE = \"Escape\";\nconst VK_ARROW_LEFT = \"ArrowLeft\";\nconst VK_ARROW_RIGHT = \"ArrowRight\";\nconst ELEMENT_BUTTON = \"button\";\nconst ELEMENT_ICON = \"icon\";\nconst IMAGE_FIT_CONTAIN = \"contain\";\nconst IMAGE_FIT_COVER = \"cover\";\nconst UNKNOWN_ACTION_TYPE = \"Unknown action type\";\n\nexport { ACTION_CLOSE, ACTION_NEXT, ACTION_PREV, ACTION_SWIPE, ACTIVE_SLIDE_COMPLETE, ACTIVE_SLIDE_ERROR, ACTIVE_SLIDE_LOADING, ACTIVE_SLIDE_PLAYING, CLASS_FLEX_CENTER, CLASS_FULLSIZE, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, CLASS_SLIDE, CLASS_SLIDE_WRAPPER, CLASS_SLIDE_WRAPPER_INTERACTIVE, ELEMENT_BUTTON, ELEMENT_ICON, EVENT_ON_KEY_DOWN, EVENT_ON_KEY_UP, EVENT_ON_POINTER_CANCEL, EVENT_ON_POINTER_DOWN, EVENT_ON_POINTER_LEAVE, EVENT_ON_POINTER_MOVE, EVENT_ON_POINTER_UP, EVENT_ON_WHEEL, IMAGE_FIT_CONTAIN, IMAGE_FIT_COVER, MODULE_CAROUSEL, MODULE_CONTROLLER, MODULE_NAVIGATION, MODULE_NO_SCROLL, MODULE_PORTAL, MODULE_ROOT, MODULE_TOOLBAR, PLUGIN_CAPTIONS, PLUGIN_COUNTER, PLUGIN_DOWNLOAD, PLUGIN_FULLSCREEN, PLUGIN_INLINE, PLUGIN_SHARE, PLUGIN_SLIDESHOW, PLUGIN_THUMBNAILS, PLUGIN_ZOOM, SLIDE_STATUS_COMPLETE, SLIDE_STATUS_ERROR, SLIDE_STATUS_LOADING, SLIDE_STATUS_PLACEHOLDER, SLIDE_STATUS_PLAYING, UNKNOWN_ACTION_TYPE, VK_ARROW_LEFT, VK_ARROW_RIGHT, VK_ESCAPE, activeSlideStatus };\n","\"use client\";\nimport * as React from 'react';\nimport { IMAGE_FIT_COVER, IMAGE_FIT_CONTAIN, ACTION_CLOSE, MODULE_CONTROLLER, UNKNOWN_ACTION_TYPE, ELEMENT_BUTTON, ELEMENT_ICON, EVENT_ON_WHEEL, EVENT_ON_KEY_UP, EVENT_ON_KEY_DOWN, EVENT_ON_POINTER_CANCEL, EVENT_ON_POINTER_LEAVE, EVENT_ON_POINTER_UP, EVENT_ON_POINTER_MOVE, EVENT_ON_POINTER_DOWN, SLIDE_STATUS_LOADING, activeSlideStatus, SLIDE_STATUS_COMPLETE, SLIDE_STATUS_ERROR, SLIDE_STATUS_PLACEHOLDER, CLASS_SLIDE, CLASS_SLIDE_WRAPPER, ACTION_PREV, ACTION_NEXT, ACTION_SWIPE, MODULE_PORTAL, CLASS_FLEX_CENTER, MODULE_CAROUSEL, VK_ARROW_RIGHT, VK_ARROW_LEFT, VK_ESCAPE, MODULE_NAVIGATION, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, MODULE_NO_SCROLL, MODULE_ROOT, MODULE_TOOLBAR } from './types.js';\nimport { createPortal } from 'react-dom';\nexport { ACTIVE_SLIDE_COMPLETE, ACTIVE_SLIDE_ERROR, ACTIVE_SLIDE_LOADING, ACTIVE_SLIDE_PLAYING, CLASS_FULLSIZE, CLASS_SLIDE_WRAPPER_INTERACTIVE, PLUGIN_CAPTIONS, PLUGIN_COUNTER, PLUGIN_DOWNLOAD, PLUGIN_FULLSCREEN, PLUGIN_INLINE, PLUGIN_SHARE, PLUGIN_SLIDESHOW, PLUGIN_THUMBNAILS, PLUGIN_ZOOM, SLIDE_STATUS_PLAYING } from './types.js';\n\nconst cssPrefix$3 = \"yarl__\";\nfunction clsx(...classes) {\n return [...classes].filter(Boolean).join(\" \");\n}\nfunction cssClass(name) {\n return `${cssPrefix$3}${name}`;\n}\nfunction cssVar(name) {\n return `--${cssPrefix$3}${name}`;\n}\nfunction composePrefix(base, prefix) {\n return `${base}${prefix ? `_${prefix}` : \"\"}`;\n}\nfunction makeComposePrefix(base) {\n return (prefix) => composePrefix(base, prefix);\n}\nfunction translateLabel(labels, defaultLabel) {\n var _a;\n return (_a = labels === null || labels === void 0 ? void 0 : labels[defaultLabel]) !== null && _a !== void 0 ? _a : defaultLabel;\n}\nfunction label(labels, defaultLabel) {\n return translateLabel(labels, defaultLabel);\n}\nfunction translateSlideCounter(labels, slides, index) {\n return translateLabel(labels, \"{index} of {total}\")\n .replace(/\\{index}/g, `${getSlideIndex(index, slides.length) + 1}`)\n .replace(/\\{total}/g, `${slides.length}`);\n}\nfunction cleanup(...cleaners) {\n return () => {\n cleaners.forEach((cleaner) => {\n cleaner();\n });\n };\n}\nfunction makeUseContext(name, contextName, context) {\n return () => {\n const ctx = React.useContext(context);\n if (!ctx) {\n throw new Error(`${name} must be used within a ${contextName}.Provider`);\n }\n return ctx;\n };\n}\nfunction hasWindow() {\n return typeof window !== \"undefined\";\n}\nfunction round(value, decimals = 0) {\n const factor = 10 ** decimals;\n return Math.round((value + Number.EPSILON) * factor) / factor;\n}\nfunction isImageSlide(slide) {\n return slide.type === undefined || slide.type === \"image\";\n}\nfunction isImageFitCover(image, imageFit) {\n return image.imageFit === IMAGE_FIT_COVER || (image.imageFit !== IMAGE_FIT_CONTAIN && imageFit === IMAGE_FIT_COVER);\n}\nfunction parseInt(value) {\n return typeof value === \"string\" ? Number.parseInt(value, 10) : value;\n}\nfunction parseLengthPercentage(input) {\n if (typeof input === \"number\") {\n return { pixel: input };\n }\n if (typeof input === \"string\") {\n const value = parseInt(input);\n return input.endsWith(\"%\") ? { percent: value } : { pixel: value };\n }\n return { pixel: 0 };\n}\nfunction computeSlideRect(containerRect, padding) {\n const paddingValue = parseLengthPercentage(padding);\n const paddingPixels = paddingValue.percent !== undefined ? (containerRect.width / 100) * paddingValue.percent : paddingValue.pixel;\n return {\n width: Math.max(containerRect.width - 2 * paddingPixels, 0),\n height: Math.max(containerRect.height - 2 * paddingPixels, 0),\n };\n}\nfunction devicePixelRatio() {\n return (hasWindow() ? window === null || window === void 0 ? void 0 : window.devicePixelRatio : undefined) || 1;\n}\nfunction getSlideIndex(index, slidesCount) {\n return slidesCount > 0 ? ((index % slidesCount) + slidesCount) % slidesCount : 0;\n}\nfunction hasSlides(slides) {\n return slides.length > 0;\n}\nfunction getSlide(slides, index) {\n return slides[getSlideIndex(index, slides.length)];\n}\nfunction getSlideIfPresent(slides, index) {\n return hasSlides(slides) ? getSlide(slides, index) : undefined;\n}\nfunction getSlideKey(slide) {\n return isImageSlide(slide) ? slide.src : undefined;\n}\nfunction addToolbarButton(toolbar, key, button) {\n if (!button)\n return toolbar;\n const { buttons, ...restToolbar } = toolbar;\n const index = buttons.findIndex((item) => item === key);\n const buttonWithKey = React.isValidElement(button) ? React.cloneElement(button, { key }, null) : button;\n if (index >= 0) {\n const result = [...buttons];\n result.splice(index, 1, buttonWithKey);\n return { buttons: result, ...restToolbar };\n }\n return { buttons: [buttonWithKey, ...buttons], ...restToolbar };\n}\nfunction stopNavigationEventsPropagation() {\n const stopPropagation = (event) => {\n event.stopPropagation();\n };\n return { onPointerDown: stopPropagation, onKeyDown: stopPropagation, onWheel: stopPropagation };\n}\nfunction calculatePreload(carousel, slides, minimum = 0) {\n return Math.min(carousel.preload, Math.max(carousel.finite ? slides.length - 1 : Math.floor(slides.length / 2), minimum));\n}\nconst isReact19 = Number(React.version.split(\".\")[0]) >= 19;\nfunction makeInertWhen(condition) {\n const legacyValue = condition ? \"\" : undefined;\n return { inert: isReact19 ? condition : legacyValue };\n}\nfunction reflow(node) {\n node.scrollTop;\n}\n\nconst LightboxDefaultProps = {\n open: false,\n close: () => { },\n index: 0,\n slides: [],\n render: {},\n plugins: [],\n toolbar: { buttons: [ACTION_CLOSE] },\n labels: {},\n animation: {\n fade: 250,\n swipe: 500,\n easing: {\n fade: \"ease\",\n swipe: \"ease-out\",\n navigation: \"ease-in-out\",\n },\n },\n carousel: {\n finite: false,\n preload: 2,\n padding: \"16px\",\n spacing: \"30%\",\n imageFit: IMAGE_FIT_CONTAIN,\n imageProps: {},\n },\n controller: {\n ref: null,\n focus: true,\n aria: false,\n touchAction: \"none\",\n closeOnPullUp: false,\n closeOnPullDown: false,\n closeOnBackdropClick: false,\n preventDefaultWheelX: true,\n preventDefaultWheelY: false,\n disableSwipeNavigation: false,\n },\n portal: {},\n noScroll: {\n disabled: false,\n },\n on: {},\n styles: {},\n className: \"\",\n};\n\nfunction createModule(name, component) {\n return { name, component };\n}\nfunction createNode(module, children) {\n return { module, children };\n}\nfunction traverseNode(node, target, apply) {\n if (node.module.name === target) {\n return apply(node);\n }\n if (node.children) {\n return [\n createNode(node.module, node.children.flatMap((n) => { var _a; return (_a = traverseNode(n, target, apply)) !== null && _a !== void 0 ? _a : []; })),\n ];\n }\n return [node];\n}\nfunction traverse(nodes, target, apply) {\n return nodes.flatMap((node) => { var _a; return (_a = traverseNode(node, target, apply)) !== null && _a !== void 0 ? _a : []; });\n}\nfunction withPlugins(root, plugins = [], augmentations = []) {\n let config = root;\n const contains = (target) => {\n const nodes = [...config];\n while (nodes.length > 0) {\n const node = nodes.pop();\n if ((node === null || node === void 0 ? void 0 : node.module.name) === target)\n return true;\n if (node === null || node === void 0 ? void 0 : node.children)\n nodes.push(...node.children);\n }\n return false;\n };\n const addParent = (target, module) => {\n if (target === \"\") {\n config = [createNode(module, config)];\n return;\n }\n config = traverse(config, target, (node) => [createNode(module, [node])]);\n };\n const append = (target, module) => {\n config = traverse(config, target, (node) => [createNode(node.module, [createNode(module, node.children)])]);\n };\n const addChild = (target, module, precede) => {\n config = traverse(config, target, (node) => {\n var _a;\n return [\n createNode(node.module, [\n ...(precede ? [createNode(module)] : []),\n ...((_a = node.children) !== null && _a !== void 0 ? _a : []),\n ...(!precede ? [createNode(module)] : []),\n ]),\n ];\n });\n };\n const addSibling = (target, module, precede) => {\n config = traverse(config, target, (node) => [\n ...(precede ? [createNode(module)] : []),\n node,\n ...(!precede ? [createNode(module)] : []),\n ]);\n };\n const addModule = (module) => {\n append(MODULE_CONTROLLER, module);\n };\n const replace = (target, module) => {\n config = traverse(config, target, (node) => [createNode(module, node.children)]);\n };\n const remove = (target) => {\n config = traverse(config, target, (node) => node.children);\n };\n const augment = (augmentation) => {\n augmentations.push(augmentation);\n };\n plugins.forEach((plugin) => {\n plugin({\n contains,\n addParent,\n append,\n addChild,\n addSibling,\n addModule,\n replace,\n remove,\n augment,\n });\n });\n return {\n config,\n augmentation: (props) => augmentations.reduce((acc, augmentation) => augmentation(acc), props),\n };\n}\n\nconst A11yContext = React.createContext(null);\nconst useA11yContext = makeUseContext(\"useA11yContext\", \"A11yContext\", A11yContext);\nfunction A11yContextProvider({ children }) {\n const [focusWithin, setFocusWithin] = React.useState(false);\n const [autoPlaying, setAutoPlaying] = React.useState(false);\n const context = React.useMemo(() => {\n const trackFocusWithin = (onFocus, onBlur) => {\n const trackAndDelegate = (focusWithinValue) => (event) => {\n var _a;\n if (!event.currentTarget.contains(event.relatedTarget)) {\n setFocusWithin(focusWithinValue);\n }\n (_a = (focusWithinValue ? onFocus : onBlur)) === null || _a === void 0 ? void 0 : _a(event);\n };\n return {\n onFocus: trackAndDelegate(true),\n onBlur: trackAndDelegate(false),\n };\n };\n return { focusWithin, trackFocusWithin, autoPlaying, setAutoPlaying };\n }, [focusWithin, autoPlaying]);\n return React.createElement(A11yContext.Provider, { value: context }, children);\n}\n\nconst DocumentContext = React.createContext(null);\nconst useDocumentContext = makeUseContext(\"useDocument\", \"DocumentContext\", DocumentContext);\nfunction DocumentContextProvider({ nodeRef, children }) {\n const context = React.useMemo(() => {\n const getOwnerDocument = (node) => { var _a; return ((_a = (node || nodeRef.current)) === null || _a === void 0 ? void 0 : _a.ownerDocument) || document; };\n const getOwnerWindow = (node) => { var _a; return ((_a = getOwnerDocument(node)) === null || _a === void 0 ? void 0 : _a.defaultView) || window; };\n return { getOwnerDocument, getOwnerWindow };\n }, [nodeRef]);\n return React.createElement(DocumentContext.Provider, { value: context }, children);\n}\n\nconst EventsContext = React.createContext(null);\nconst useEvents = makeUseContext(\"useEvents\", \"EventsContext\", EventsContext);\nfunction EventsProvider({ children }) {\n const [subscriptions] = React.useState({});\n React.useEffect(() => () => {\n Object.keys(subscriptions).forEach((topic) => delete subscriptions[topic]);\n }, [subscriptions]);\n const context = React.useMemo(() => {\n const unsubscribe = (topic, callback) => {\n var _a;\n (_a = subscriptions[topic]) === null || _a === void 0 ? void 0 : _a.splice(0, subscriptions[topic].length, ...subscriptions[topic].filter((cb) => cb !== callback));\n };\n const subscribe = (topic, callback) => {\n if (!subscriptions[topic]) {\n subscriptions[topic] = [];\n }\n subscriptions[topic].push(callback);\n return () => unsubscribe(topic, callback);\n };\n const publish = (...[topic, event]) => {\n var _a;\n (_a = subscriptions[topic]) === null || _a === void 0 ? void 0 : _a.forEach((callback) => callback(event));\n };\n return { publish, subscribe, unsubscribe };\n }, [subscriptions]);\n return React.createElement(EventsContext.Provider, { value: context }, children);\n}\n\nconst LightboxPropsContext = React.createContext(null);\nconst useLightboxProps = makeUseContext(\"useLightboxProps\", \"LightboxPropsContext\", LightboxPropsContext);\nfunction LightboxPropsProvider({ children, ...props }) {\n return React.createElement(LightboxPropsContext.Provider, { value: props }, children);\n}\n\nconst LightboxStateContext = React.createContext(null);\nconst useLightboxState = makeUseContext(\"useLightboxState\", \"LightboxStateContext\", LightboxStateContext);\nconst LightboxDispatchContext = React.createContext(null);\nconst useLightboxDispatch = makeUseContext(\"useLightboxDispatch\", \"LightboxDispatchContext\", LightboxDispatchContext);\nfunction reducer(state, action) {\n switch (action.type) {\n case \"swipe\": {\n const { slides } = state;\n const increment = (action === null || action === void 0 ? void 0 : action.increment) || 0;\n const globalIndex = state.globalIndex + increment;\n const currentIndex = getSlideIndex(globalIndex, slides.length);\n const currentSlide = getSlideIfPresent(slides, currentIndex);\n const animation = increment || action.duration !== undefined\n ? {\n increment,\n duration: action.duration,\n easing: action.easing,\n }\n : undefined;\n return { slides, currentIndex, globalIndex, currentSlide, animation };\n }\n case \"update\":\n if (action.slides !== state.slides || action.index !== state.currentIndex) {\n return {\n slides: action.slides,\n currentIndex: action.index,\n globalIndex: action.index,\n currentSlide: getSlideIfPresent(action.slides, action.index),\n };\n }\n return state;\n default:\n throw new Error(UNKNOWN_ACTION_TYPE);\n }\n}\nfunction LightboxStateProvider({ slides, index, children }) {\n const [state, dispatch] = React.useReducer(reducer, {\n slides,\n currentIndex: index,\n globalIndex: index,\n currentSlide: getSlideIfPresent(slides, index),\n });\n React.useEffect(() => {\n dispatch({ type: \"update\", slides, index });\n }, [slides, index]);\n const context = React.useMemo(() => ({ ...state, state, dispatch }), [state, dispatch]);\n return (React.createElement(LightboxDispatchContext.Provider, { value: dispatch },\n React.createElement(LightboxStateContext.Provider, { value: context }, children)));\n}\n\nconst TimeoutsContext = React.createContext(null);\nconst useTimeouts = makeUseContext(\"useTimeouts\", \"TimeoutsContext\", TimeoutsContext);\nfunction TimeoutsProvider({ children }) {\n const [timeouts] = React.useState([]);\n React.useEffect(() => () => {\n timeouts.forEach((tid) => window.clearTimeout(tid));\n timeouts.splice(0, timeouts.length);\n }, [timeouts]);\n const context = React.useMemo(() => {\n const removeTimeout = (id) => {\n timeouts.splice(0, timeouts.length, ...timeouts.filter((tid) => tid !== id));\n };\n const setTimeout = (fn, delay) => {\n const id = window.setTimeout(() => {\n removeTimeout(id);\n fn();\n }, delay);\n timeouts.push(id);\n return id;\n };\n const clearTimeout = (id) => {\n if (id !== undefined) {\n removeTimeout(id);\n window.clearTimeout(id);\n }\n };\n return { setTimeout, clearTimeout };\n }, [timeouts]);\n return React.createElement(TimeoutsContext.Provider, { value: context }, children);\n}\n\nconst IconButton = React.forwardRef(function IconButton({ label, className, icon: Icon, renderIcon, onClick, style, ...rest }, ref) {\n const { styles, labels } = useLightboxProps();\n const buttonLabel = translateLabel(labels, label);\n return (React.createElement(\"button\", { ref: ref, type: \"button\", title: buttonLabel, \"aria-label\": buttonLabel, className: clsx(cssClass(ELEMENT_BUTTON), className), onClick: onClick, style: { ...style, ...styles.button }, ...rest }, renderIcon ? renderIcon() : React.createElement(Icon, { className: cssClass(ELEMENT_ICON), style: styles.icon })));\n});\n\nfunction svgIcon(name, children) {\n const icon = (props) => (React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 24 24\", width: \"24\", height: \"24\", \"aria-hidden\": \"true\", focusable: \"false\", ...props }, children));\n icon.displayName = name;\n return icon;\n}\nfunction createIcon(name, glyph) {\n return svgIcon(name, React.createElement(\"g\", { fill: \"currentColor\" },\n React.createElement(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" }),\n glyph));\n}\nfunction createIconDisabled(name, glyph) {\n return svgIcon(name, React.createElement(React.Fragment, null,\n React.createElement(\"defs\", null,\n React.createElement(\"mask\", { id: \"strike\" },\n React.createElement(\"path\", { d: \"M0 0h24v24H0z\", fill: \"white\" }),\n React.createElement(\"path\", { d: \"M0 0L24 24\", stroke: \"black\", strokeWidth: 4 }))),\n React.createElement(\"path\", { d: \"M0.70707 2.121320L21.878680 23.292883\", stroke: \"currentColor\", strokeWidth: 2 }),\n React.createElement(\"g\", { fill: \"currentColor\", mask: \"url(#strike)\" },\n React.createElement(\"path\", { d: \"M0 0h24v24H0z\", fill: \"none\" }),\n glyph)));\n}\nconst CloseIcon = createIcon(\"Close\", React.createElement(\"path\", { d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" }));\nconst PreviousIcon = createIcon(\"Previous\", React.createElement(\"path\", { d: \"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" }));\nconst NextIcon = createIcon(\"Next\", React.createElement(\"path\", { d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" }));\nconst LoadingIcon = createIcon(\"Loading\", React.createElement(React.Fragment, null, Array.from({ length: 8 }).map((_, index, array) => (React.createElement(\"line\", { key: index, x1: \"12\", y1: \"6.5\", x2: \"12\", y2: \"1.8\", strokeLinecap: \"round\", strokeWidth: \"2.6\", stroke: \"currentColor\", strokeOpacity: (1 / array.length) * (index + 1), transform: `rotate(${(360 / array.length) * index}, 12, 12)` })))));\nconst ErrorIcon = createIcon(\"Error\", React.createElement(\"path\", { d: \"M21.9,21.9l-8.49-8.49l0,0L3.59,3.59l0,0L2.1,2.1L0.69,3.51L3,5.83V19c0,1.1,0.9,2,2,2h13.17l2.31,2.31L21.9,21.9z M5,18 l3.5-4.5l2.5,3.01L12.17,15l3,3H5z M21,18.17L5.83,3H19c1.1,0,2,0.9,2,2V18.17z\" }));\n\nconst useLayoutEffect = hasWindow() ? React.useLayoutEffect : React.useEffect;\n\nfunction useMotionPreference() {\n const [reduceMotion, setReduceMotion] = React.useState(false);\n React.useEffect(() => {\n var _a, _b;\n const mediaQuery = (_a = window.matchMedia) === null || _a === void 0 ? void 0 : _a.call(window, \"(prefers-reduced-motion: reduce)\");\n setReduceMotion(mediaQuery === null || mediaQuery === void 0 ? void 0 : mediaQuery.matches);\n const listener = (event) => setReduceMotion(event.matches);\n (_b = mediaQuery === null || mediaQuery === void 0 ? void 0 : mediaQuery.addEventListener) === null || _b === void 0 ? void 0 : _b.call(mediaQuery, \"change\", listener);\n return () => { var _a; return (_a = mediaQuery === null || mediaQuery === void 0 ? void 0 : mediaQuery.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(mediaQuery, \"change\", listener); };\n }, []);\n return reduceMotion;\n}\n\nfunction currentTransformation(node) {\n let x = 0;\n let y = 0;\n let z = 0;\n const matrix = window.getComputedStyle(node).transform;\n const matcher = matrix.match(/matrix.*\\((.+)\\)/);\n if (matcher) {\n const values = matcher[1].split(\",\").map(parseInt);\n if (values.length === 6) {\n x = values[4];\n y = values[5];\n }\n else if (values.length === 16) {\n x = values[12];\n y = values[13];\n z = values[14];\n }\n }\n return { x, y, z };\n}\nfunction useAnimation(nodeRef, computeAnimation) {\n const snapshot = React.useRef(undefined);\n const animation = React.useRef(undefined);\n const reduceMotion = useMotionPreference();\n useLayoutEffect(() => {\n var _a, _b, _c;\n if (nodeRef.current && snapshot.current !== undefined && !reduceMotion) {\n const { keyframes, duration, easing, onfinish } = computeAnimation(snapshot.current, nodeRef.current.getBoundingClientRect(), currentTransformation(nodeRef.current)) || {};\n if (keyframes && duration) {\n (_a = animation.current) === null || _a === void 0 ? void 0 : _a.cancel();\n animation.current = undefined;\n try {\n animation.current = (_c = (_b = nodeRef.current).animate) === null || _c === void 0 ? void 0 : _c.call(_b, keyframes, { duration, easing });\n }\n catch (err) {\n console.error(err);\n }\n if (animation.current) {\n animation.current.onfinish = () => {\n animation.current = undefined;\n onfinish === null || onfinish === void 0 ? void 0 : onfinish();\n };\n }\n }\n }\n snapshot.current = undefined;\n });\n return {\n prepareAnimation: (currentSnapshot) => {\n snapshot.current = currentSnapshot;\n },\n isAnimationPlaying: () => { var _a; return ((_a = animation.current) === null || _a === void 0 ? void 0 : _a.playState) === \"running\"; },\n };\n}\n\nfunction useContainerRect() {\n const containerRef = React.useRef(null);\n const observerRef = React.useRef(undefined);\n const [containerRect, setContainerRect] = React.useState();\n const setContainerRef = React.useCallback((node) => {\n containerRef.current = node;\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = undefined;\n }\n const updateContainerRect = () => {\n if (node) {\n const styles = window.getComputedStyle(node);\n const parse = (value) => parseFloat(value) || 0;\n setContainerRect({\n width: Math.round(node.clientWidth - parse(styles.paddingLeft) - parse(styles.paddingRight)),\n height: Math.round(node.clientHeight - parse(styles.paddingTop) - parse(styles.paddingBottom)),\n });\n }\n else {\n setContainerRect(undefined);\n }\n };\n updateContainerRect();\n if (node && typeof ResizeObserver !== \"undefined\") {\n observerRef.current = new ResizeObserver(updateContainerRect);\n observerRef.current.observe(node);\n }\n }, []);\n return { setContainerRef, containerRef, containerRect };\n}\n\nfunction useDelay() {\n const timeoutId = React.useRef(undefined);\n const { setTimeout, clearTimeout } = useTimeouts();\n return React.useCallback((callback, delay) => {\n clearTimeout(timeoutId.current);\n timeoutId.current = setTimeout(callback, delay > 0 ? delay : 0);\n }, [setTimeout, clearTimeout]);\n}\n\nfunction useEventCallback(fn) {\n const ref = React.useRef(fn);\n useLayoutEffect(() => {\n ref.current = fn;\n });\n return React.useCallback((...args) => { var _a; return (_a = ref.current) === null || _a === void 0 ? void 0 : _a.call(ref, ...args); }, []);\n}\n\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n}\nfunction useForkRef(refA, refB) {\n return React.useMemo(() => refA == null && refB == null\n ? null\n : (refValue) => {\n setRef(refA, refValue);\n setRef(refB, refValue);\n }, [refA, refB]);\n}\n\nfunction useLoseFocus(focus, disabled = false) {\n const focused = React.useRef(false);\n useLayoutEffect(() => {\n if (disabled && focused.current) {\n focused.current = false;\n focus();\n }\n }, [disabled, focus]);\n const onFocus = React.useCallback(() => {\n focused.current = true;\n }, []);\n const onBlur = React.useCallback(() => {\n focused.current = false;\n }, []);\n return { onFocus, onBlur };\n}\n\nfunction useRTL() {\n const [isRTL, setIsRTL] = React.useState(false);\n useLayoutEffect(() => {\n setIsRTL(window.getComputedStyle(window.document.documentElement).direction === \"rtl\");\n }, []);\n return isRTL;\n}\n\nfunction useSensors() {\n const [subscribers] = React.useState({});\n const notifySubscribers = React.useCallback((type, event) => {\n var _a;\n (_a = subscribers[type]) === null || _a === void 0 ? void 0 : _a.forEach((listener) => {\n if (!event.isPropagationStopped())\n listener(event);\n });\n }, [subscribers]);\n const registerSensors = React.useMemo(() => ({\n onPointerDown: (event) => notifySubscribers(EVENT_ON_POINTER_DOWN, event),\n onPointerMove: (event) => notifySubscribers(EVENT_ON_POINTER_MOVE, event),\n onPointerUp: (event) => notifySubscribers(EVENT_ON_POINTER_UP, event),\n onPointerLeave: (event) => notifySubscribers(EVENT_ON_POINTER_LEAVE, event),\n onPointerCancel: (event) => notifySubscribers(EVENT_ON_POINTER_CANCEL, event),\n onKeyDown: (event) => notifySubscribers(EVENT_ON_KEY_DOWN, event),\n onKeyUp: (event) => notifySubscribers(EVENT_ON_KEY_UP, event),\n onWheel: (event) => notifySubscribers(EVENT_ON_WHEEL, event),\n }), [notifySubscribers]);\n const subscribeSensors = React.useCallback((type, callback) => {\n if (!subscribers[type]) {\n subscribers[type] = [];\n }\n subscribers[type].unshift(callback);\n return () => {\n const listeners = subscribers[type];\n if (listeners) {\n listeners.splice(0, listeners.length, ...listeners.filter((el) => el !== callback));\n }\n };\n }, [subscribers]);\n return { registerSensors, subscribeSensors };\n}\n\nfunction useThrottle(callback, delay) {\n const lastCallbackTime = React.useRef(0);\n const delayCallback = useDelay();\n const executeCallback = useEventCallback((...args) => {\n lastCallbackTime.current = Date.now();\n callback(args);\n });\n return React.useCallback((...args) => {\n delayCallback(() => {\n executeCallback(args);\n }, delay - (Date.now() - lastCallbackTime.current));\n }, [delay, executeCallback, delayCallback]);\n}\n\nconst slidePrefix = makeComposePrefix(\"slide\");\nconst slideImagePrefix = makeComposePrefix(\"slide_image\");\nfunction ImageSlide({ slide: image, offset, render, rect, imageFit, imageProps, onClick, onLoad, onError, style, }) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const [status, setStatus] = React.useState(SLIDE_STATUS_LOADING);\n const { publish } = useEvents();\n const { setTimeout } = useTimeouts();\n const imageRef = React.useRef(null);\n React.useEffect(() => {\n if (offset === 0) {\n publish(activeSlideStatus(status));\n }\n }, [offset, status, publish]);\n const handleLoading = useEventCallback((img) => {\n (\"decode\" in img ? img.decode() : Promise.resolve())\n .catch(() => { })\n .then(() => {\n if (!img.parentNode) {\n return;\n }\n setStatus(SLIDE_STATUS_COMPLETE);\n setTimeout(() => {\n onLoad === null || onLoad === void 0 ? void 0 : onLoad(img);\n }, 0);\n });\n });\n const setImageRef = React.useCallback((img) => {\n imageRef.current = img;\n if (img === null || img === void 0 ? void 0 : img.complete) {\n handleLoading(img);\n }\n }, [handleLoading]);\n const handleOnLoad = React.useCallback((event) => {\n handleLoading(event.currentTarget);\n }, [handleLoading]);\n const handleOnError = useEventCallback(() => {\n setStatus(SLIDE_STATUS_ERROR);\n onError === null || onError === void 0 ? void 0 : onError();\n });\n const cover = isImageFitCover(image, imageFit);\n const nonInfinite = (value, fallback) => (Number.isFinite(value) ? value : fallback);\n const maxWidth = nonInfinite(Math.max(...((_b = (_a = image.srcSet) === null || _a === void 0 ? void 0 : _a.map((x) => x.width)) !== null && _b !== void 0 ? _b : []).concat(image.width ? [image.width] : []).filter(Boolean)), ((_c = imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalWidth) || 0);\n const maxHeight = nonInfinite(Math.max(...((_e = (_d = image.srcSet) === null || _d === void 0 ? void 0 : _d.map((x) => x.height)) !== null && _e !== void 0 ? _e : []).concat(image.height ? [image.height] : []).filter(Boolean)), ((_f = imageRef.current) === null || _f === void 0 ? void 0 : _f.naturalHeight) || 0);\n const defaultStyle = maxWidth && maxHeight\n ? {\n maxWidth: `min(${maxWidth}px, 100%)`,\n maxHeight: `min(${maxHeight}px, 100%)`,\n }\n : {\n maxWidth: \"100%\",\n maxHeight: \"100%\",\n };\n const srcSet = (_g = image.srcSet) === null || _g === void 0 ? void 0 : _g.sort((a, b) => a.width - b.width).map((item) => `${item.src} ${item.width}w`).join(\", \");\n const estimateActualWidth = () => rect && !cover && image.width && image.height ? (rect.height / image.height) * image.width : Number.MAX_VALUE;\n const sizes = srcSet && rect && hasWindow() ? `${Math.round(Math.min(estimateActualWidth(), rect.width))}px` : undefined;\n const { style: imagePropsStyle, className: imagePropsClassName, ...restImageProps } = imageProps || {};\n return (React.createElement(React.Fragment, null,\n React.createElement(\"img\", { ref: setImageRef, onLoad: handleOnLoad, onError: handleOnError, onClick: onClick, draggable: false, className: clsx(cssClass(slideImagePrefix()), cover && cssClass(slideImagePrefix(\"cover\")), status !== SLIDE_STATUS_COMPLETE && cssClass(slideImagePrefix(\"loading\")), imagePropsClassName), style: { ...defaultStyle, ...style, ...imagePropsStyle }, ...restImageProps, alt: (_h = image.alt) !== null && _h !== void 0 ? _h : \"\", sizes: sizes, srcSet: srcSet, src: image.src }),\n status !== SLIDE_STATUS_COMPLETE && (React.createElement(\"div\", { className: cssClass(slidePrefix(SLIDE_STATUS_PLACEHOLDER)) },\n status === SLIDE_STATUS_LOADING &&\n ((render === null || render === void 0 ? void 0 : render.iconLoading) ? (render.iconLoading()) : (React.createElement(LoadingIcon, { className: clsx(cssClass(ELEMENT_ICON), cssClass(slidePrefix(SLIDE_STATUS_LOADING))) }))),\n status === SLIDE_STATUS_ERROR &&\n ((render === null || render === void 0 ? void 0 : render.iconError) ? (render.iconError()) : (React.createElement(ErrorIcon, { className: clsx(cssClass(ELEMENT_ICON), cssClass(slidePrefix(SLIDE_STATUS_ERROR))) })))))));\n}\n\nconst LightboxRoot = React.forwardRef(function LightboxRoot({ className, children, onFocus, onBlur, ...rest }, ref) {\n const nodeRef = React.useRef(null);\n const { trackFocusWithin } = useA11yContext();\n return (React.createElement(DocumentContextProvider, { nodeRef: nodeRef },\n React.createElement(\"div\", { ref: useForkRef(ref, nodeRef), className: clsx(cssClass(\"root\"), className), ...trackFocusWithin(onFocus, onBlur), ...rest }, children)));\n});\n\nvar SwipeState;\n(function (SwipeState) {\n SwipeState[SwipeState[\"NONE\"] = 0] = \"NONE\";\n SwipeState[SwipeState[\"SWIPE\"] = 1] = \"SWIPE\";\n SwipeState[SwipeState[\"PULL\"] = 2] = \"PULL\";\n SwipeState[SwipeState[\"ANIMATION\"] = 3] = \"ANIMATION\";\n})(SwipeState || (SwipeState = {}));\n\nfunction usePointerEvents(subscribeSensors, onPointerDown, onPointerMove, onPointerUp, disabled) {\n React.useEffect(() => !disabled\n ? cleanup(subscribeSensors(EVENT_ON_POINTER_DOWN, onPointerDown), subscribeSensors(EVENT_ON_POINTER_MOVE, onPointerMove), subscribeSensors(EVENT_ON_POINTER_UP, onPointerUp), subscribeSensors(EVENT_ON_POINTER_LEAVE, onPointerUp), subscribeSensors(EVENT_ON_POINTER_CANCEL, onPointerUp))\n : () => { }, [subscribeSensors, onPointerDown, onPointerMove, onPointerUp, disabled]);\n}\n\nvar Gesture;\n(function (Gesture) {\n Gesture[Gesture[\"NONE\"] = 0] = \"NONE\";\n Gesture[Gesture[\"SWIPE\"] = 1] = \"SWIPE\";\n Gesture[Gesture[\"PULL\"] = 2] = \"PULL\";\n})(Gesture || (Gesture = {}));\nconst SWIPE_THRESHOLD = 30;\nfunction usePointerSwipe({ disableSwipeNavigation, closeOnBackdropClick }, subscribeSensors, isSwipeValid, containerWidth, swipeAnimationDuration, onSwipeStart, onSwipeProgress, onSwipeFinish, onSwipeCancel, pullUpEnabled, pullDownEnabled, onPullStart, onPullProgress, onPullFinish, onPullCancel, onClose) {\n const offset = React.useRef(0);\n const pointers = React.useRef([]);\n const activePointer = React.useRef(undefined);\n const startTime = React.useRef(0);\n const gesture = React.useRef(Gesture.NONE);\n const clearPointer = React.useCallback((event) => {\n if (activePointer.current === event.pointerId) {\n activePointer.current = undefined;\n gesture.current = Gesture.NONE;\n }\n const currentPointers = pointers.current;\n currentPointers.splice(0, currentPointers.length, ...currentPointers.filter((p) => p.pointerId !== event.pointerId));\n }, []);\n const addPointer = React.useCallback((event) => {\n clearPointer(event);\n event.persist();\n pointers.current.push(event);\n }, [clearPointer]);\n const lookupPointer = React.useCallback((event) => pointers.current.find(({ pointerId }) => event.pointerId === pointerId), []);\n const onPointerDown = useEventCallback((event) => {\n addPointer(event);\n });\n const exceedsPullThreshold = (value, threshold) => (pullDownEnabled && value > threshold) || (pullUpEnabled && value < -threshold);\n const onPointerUp = useEventCallback((event) => {\n const pointer = lookupPointer(event);\n if (pointer) {\n if (activePointer.current === event.pointerId) {\n const duration = Date.now() - startTime.current;\n const currentOffset = offset.current;\n if (gesture.current === Gesture.SWIPE) {\n if (Math.abs(currentOffset) > 0.3 * containerWidth ||\n (Math.abs(currentOffset) > 5 && duration < swipeAnimationDuration)) {\n onSwipeFinish(currentOffset, duration);\n }\n else {\n onSwipeCancel(currentOffset);\n }\n }\n else if (gesture.current === Gesture.PULL) {\n if (exceedsPullThreshold(currentOffset, 2 * SWIPE_THRESHOLD)) {\n onPullFinish(currentOffset, duration);\n }\n else {\n onPullCancel(currentOffset);\n }\n }\n offset.current = 0;\n gesture.current = Gesture.NONE;\n }\n else {\n const { target } = event;\n if (closeOnBackdropClick &&\n target instanceof HTMLElement &&\n target === pointer.target &&\n (target.classList.contains(cssClass(CLASS_SLIDE)) || target.classList.contains(cssClass(CLASS_SLIDE_WRAPPER)))) {\n onClose();\n }\n }\n }\n clearPointer(event);\n });\n const onPointerMove = useEventCallback((event) => {\n const pointer = lookupPointer(event);\n if (pointer) {\n const isCurrentPointer = activePointer.current === event.pointerId;\n if (event.buttons === 0) {\n if (isCurrentPointer && offset.current !== 0) {\n onPointerUp(event);\n }\n else {\n clearPointer(pointer);\n }\n return;\n }\n const deltaX = event.clientX - pointer.clientX;\n const deltaY = event.clientY - pointer.clientY;\n if (activePointer.current === undefined) {\n const startGesture = (newGesture) => {\n addPointer(event);\n activePointer.current = event.pointerId;\n startTime.current = Date.now();\n gesture.current = newGesture;\n };\n if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > SWIPE_THRESHOLD && isSwipeValid(deltaX)) {\n if (!disableSwipeNavigation) {\n startGesture(Gesture.SWIPE);\n onSwipeStart();\n }\n }\n else if (Math.abs(deltaY) > Math.abs(deltaX) && exceedsPullThreshold(deltaY, SWIPE_THRESHOLD)) {\n startGesture(Gesture.PULL);\n onPullStart();\n }\n }\n else if (isCurrentPointer) {\n if (gesture.current === Gesture.SWIPE) {\n offset.current = deltaX;\n onSwipeProgress(deltaX);\n }\n else if (gesture.current === Gesture.PULL) {\n offset.current = deltaY;\n onPullProgress(deltaY);\n }\n }\n }\n });\n usePointerEvents(subscribeSensors, onPointerDown, onPointerMove, onPointerUp);\n}\n\nfunction usePreventWheelDefaults({ preventDefaultWheelX, preventDefaultWheelY, }) {\n const ref = React.useRef(null);\n const listener = useEventCallback((event) => {\n const horizontal = Math.abs(event.deltaX) > Math.abs(event.deltaY);\n if ((horizontal && preventDefaultWheelX) || (!horizontal && preventDefaultWheelY) || event.ctrlKey) {\n event.preventDefault();\n }\n });\n return React.useCallback((node) => {\n var _a;\n if (node) {\n node.addEventListener(\"wheel\", listener, { passive: false });\n }\n else {\n (_a = ref.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(\"wheel\", listener);\n }\n ref.current = node;\n }, [listener]);\n}\n\nfunction useWheelSwipe(swipeState, subscribeSensors, isSwipeValid, containerWidth, swipeAnimationDuration, onSwipeStart, onSwipeProgress, onSwipeFinish, onSwipeCancel) {\n const offset = React.useRef(0);\n const intent = React.useRef(0);\n const intentCleanup = React.useRef(undefined);\n const resetCleanup = React.useRef(undefined);\n const wheelInertia = React.useRef(0);\n const wheelInertiaCleanup = React.useRef(undefined);\n const startTime = React.useRef(0);\n const { setTimeout, clearTimeout } = useTimeouts();\n const cancelSwipeIntentCleanup = React.useCallback(() => {\n if (intentCleanup.current) {\n clearTimeout(intentCleanup.current);\n intentCleanup.current = undefined;\n }\n }, [clearTimeout]);\n const cancelSwipeResetCleanup = React.useCallback(() => {\n if (resetCleanup.current) {\n clearTimeout(resetCleanup.current);\n resetCleanup.current = undefined;\n }\n }, [clearTimeout]);\n const handleCleanup = useEventCallback(() => {\n if (swipeState !== SwipeState.SWIPE) {\n offset.current = 0;\n startTime.current = 0;\n cancelSwipeIntentCleanup();\n cancelSwipeResetCleanup();\n }\n });\n React.useEffect(handleCleanup, [swipeState, handleCleanup]);\n const handleCancelSwipe = useEventCallback((currentSwipeOffset) => {\n resetCleanup.current = undefined;\n if (offset.current === currentSwipeOffset) {\n onSwipeCancel(offset.current);\n }\n });\n const onWheel = useEventCallback((event) => {\n if (event.ctrlKey) {\n return;\n }\n if (Math.abs(event.deltaY) > Math.abs(event.deltaX)) {\n return;\n }\n const setWheelInertia = (inertia) => {\n wheelInertia.current = inertia;\n clearTimeout(wheelInertiaCleanup.current);\n wheelInertiaCleanup.current =\n inertia > 0\n ? setTimeout(() => {\n wheelInertia.current = 0;\n wheelInertiaCleanup.current = undefined;\n }, 300)\n : undefined;\n };\n if (swipeState === SwipeState.NONE) {\n if (Math.abs(event.deltaX) <= 1.2 * Math.abs(wheelInertia.current)) {\n setWheelInertia(event.deltaX);\n return;\n }\n if (!isSwipeValid(-event.deltaX)) {\n return;\n }\n intent.current += event.deltaX;\n cancelSwipeIntentCleanup();\n if (Math.abs(intent.current) > 30) {\n intent.current = 0;\n setWheelInertia(0);\n startTime.current = Date.now();\n onSwipeStart();\n }\n else {\n const currentSwipeIntent = intent.current;\n intentCleanup.current = setTimeout(() => {\n intentCleanup.current = undefined;\n if (currentSwipeIntent === intent.current) {\n intent.current = 0;\n }\n }, swipeAnimationDuration);\n }\n }\n else if (swipeState === SwipeState.SWIPE) {\n let newSwipeOffset = offset.current - event.deltaX;\n newSwipeOffset = Math.min(Math.abs(newSwipeOffset), containerWidth) * Math.sign(newSwipeOffset);\n offset.current = newSwipeOffset;\n onSwipeProgress(newSwipeOffset);\n cancelSwipeResetCleanup();\n if (Math.abs(newSwipeOffset) > 0.2 * containerWidth) {\n setWheelInertia(event.deltaX);\n onSwipeFinish(newSwipeOffset, Date.now() - startTime.current);\n return;\n }\n resetCleanup.current = setTimeout(() => handleCancelSwipe(newSwipeOffset), 2 * swipeAnimationDuration);\n }\n else {\n setWheelInertia(event.deltaX);\n }\n });\n React.useEffect(() => subscribeSensors(EVENT_ON_WHEEL, onWheel), [subscribeSensors, onWheel]);\n}\n\nconst cssContainerPrefix = makeComposePrefix(\"container\");\nconst ControllerContext = React.createContext(null);\nconst useController = makeUseContext(\"useController\", \"ControllerContext\", ControllerContext);\nfunction Controller({ children, ...props }) {\n var _a;\n const { carousel, animation, controller, on, styles, render } = props;\n const { closeOnPullUp, closeOnPullDown, preventDefaultWheelX, preventDefaultWheelY } = controller;\n const [toolbarWidth, setToolbarWidth] = React.useState();\n const state = useLightboxState();\n const dispatch = useLightboxDispatch();\n const [swipeState, setSwipeState] = React.useState(SwipeState.NONE);\n const swipeOffset = React.useRef(0);\n const pullOffset = React.useRef(0);\n const pullOpacity = React.useRef(1);\n const { registerSensors, subscribeSensors } = useSensors();\n const { subscribe, publish } = useEvents();\n const cleanupAnimationIncrement = useDelay();\n const cleanupSwipeOffset = useDelay();\n const cleanupPullOffset = useDelay();\n const { containerRef, setContainerRef, containerRect } = useContainerRect();\n const handleContainerRef = useForkRef(usePreventWheelDefaults({ preventDefaultWheelX, preventDefaultWheelY }), setContainerRef);\n const carouselRef = React.useRef(null);\n const setCarouselRef = useForkRef(carouselRef, undefined);\n const { getOwnerDocument } = useDocumentContext();\n const isRTL = useRTL();\n const rtl = (value) => (isRTL ? -1 : 1) * (typeof value === \"number\" ? value : 1);\n const focus = useEventCallback(() => { var _a; return (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.focus(); });\n const getLightboxProps = useEventCallback(() => props);\n const getLightboxState = useEventCallback(() => state);\n const prev = React.useCallback((params) => publish(ACTION_PREV, params), [publish]);\n const next = React.useCallback((params) => publish(ACTION_NEXT, params), [publish]);\n const close = React.useCallback(() => publish(ACTION_CLOSE), [publish]);\n const isSwipeValid = (offset) => !(carousel.finite &&\n ((rtl(offset) > 0 && state.currentIndex === 0) ||\n (rtl(offset) < 0 && state.currentIndex === state.slides.length - 1)));\n const setSwipeOffset = (offset) => {\n var _a;\n swipeOffset.current = offset;\n (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.style.setProperty(cssVar(\"swipe_offset\"), `${Math.round(offset)}px`);\n };\n const setPullOffset = (offset) => {\n var _a, _b;\n pullOffset.current = offset;\n pullOpacity.current = (() => {\n const threshold = 60;\n const minOpacity = 0.5;\n const offsetValue = (() => {\n if (closeOnPullDown && offset > 0)\n return offset;\n if (closeOnPullUp && offset < 0)\n return -offset;\n return 0;\n })();\n return Math.min(Math.max(round(1 - (offsetValue / threshold) * (1 - minOpacity), 2), minOpacity), 1);\n })();\n (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.style.setProperty(cssVar(\"pull_offset\"), `${Math.round(offset)}px`);\n (_b = containerRef.current) === null || _b === void 0 ? void 0 : _b.style.setProperty(cssVar(\"pull_opacity\"), `${pullOpacity.current}`);\n };\n const { prepareAnimation: preparePullAnimation } = useAnimation(carouselRef, (snapshot, rect, translate) => {\n if (carouselRef.current && containerRect) {\n return {\n keyframes: [\n {\n transform: `translate(0, ${snapshot.rect.y - rect.y + translate.y}px)`,\n opacity: snapshot.opacity,\n },\n { transform: \"translate(0, 0)\", opacity: 1 },\n ],\n duration: snapshot.duration,\n easing: animation.easing.fade,\n };\n }\n return undefined;\n });\n const pull = (offset, cancel) => {\n if (closeOnPullUp || closeOnPullDown) {\n setPullOffset(offset);\n let duration = 0;\n if (carouselRef.current) {\n duration = animation.fade * (cancel ? 2 : 1);\n preparePullAnimation({\n rect: carouselRef.current.getBoundingClientRect(),\n opacity: pullOpacity.current,\n duration,\n });\n }\n cleanupPullOffset(() => {\n setPullOffset(0);\n setSwipeState(SwipeState.NONE);\n }, duration);\n setSwipeState(SwipeState.ANIMATION);\n if (!cancel) {\n close();\n }\n }\n };\n const { prepareAnimation, isAnimationPlaying } = useAnimation(carouselRef, (snapshot, rect, translate) => {\n var _a;\n if (carouselRef.current && containerRect && ((_a = state.animation) === null || _a === void 0 ? void 0 : _a.duration)) {\n const parsedSpacing = parseLengthPercentage(carousel.spacing);\n const spacingValue = (parsedSpacing.percent ? (parsedSpacing.percent * containerRect.width) / 100 : parsedSpacing.pixel) || 0;\n return {\n keyframes: [\n {\n transform: `translate(${rtl(state.globalIndex - snapshot.index) * (containerRect.width + spacingValue) +\n snapshot.rect.x -\n rect.x +\n translate.x}px, 0)`,\n },\n { transform: \"translate(0, 0)\" },\n ],\n duration: state.animation.duration,\n easing: state.animation.easing,\n };\n }\n return undefined;\n });\n const swipe = useEventCallback((action) => {\n var _a, _b;\n const currentSwipeOffset = action.offset || 0;\n const swipeDuration = !currentSwipeOffset ? ((_a = animation.navigation) !== null && _a !== void 0 ? _a : animation.swipe) : animation.swipe;\n const swipeEasing = !currentSwipeOffset && !isAnimationPlaying() ? animation.easing.navigation : animation.easing.swipe;\n let { direction } = action;\n const count = (_b = action.count) !== null && _b !== void 0 ? _b : 1;\n let newSwipeState = SwipeState.ANIMATION;\n let newSwipeAnimationDuration = swipeDuration * count;\n if (!direction) {\n const containerWidth = containerRect === null || containerRect === void 0 ? void 0 : containerRect.width;\n const elapsedTime = action.duration || 0;\n const expectedTime = containerWidth\n ? (swipeDuration / containerWidth) * Math.abs(currentSwipeOffset)\n : swipeDuration;\n if (count !== 0) {\n if (elapsedTime < expectedTime) {\n newSwipeAnimationDuration =\n (newSwipeAnimationDuration / expectedTime) * Math.max(elapsedTime, expectedTime / 5);\n }\n else if (containerWidth) {\n newSwipeAnimationDuration =\n (swipeDuration / containerWidth) * (containerWidth - Math.abs(currentSwipeOffset));\n }\n direction = rtl(currentSwipeOffset) > 0 ? ACTION_PREV : ACTION_NEXT;\n }\n else {\n newSwipeAnimationDuration = swipeDuration / 2;\n }\n }\n let increment = 0;\n if (direction === ACTION_PREV) {\n if (isSwipeValid(rtl(1))) {\n increment = -count;\n }\n else {\n newSwipeState = SwipeState.NONE;\n newSwipeAnimationDuration = swipeDuration;\n }\n }\n else if (direction === ACTION_NEXT) {\n if (isSwipeValid(rtl(-1))) {\n increment = count;\n }\n else {\n newSwipeState = SwipeState.NONE;\n newSwipeAnimationDuration = swipeDuration;\n }\n }\n newSwipeAnimationDuration = Math.round(newSwipeAnimationDuration);\n cleanupSwipeOffset(() => {\n setSwipeOffset(0);\n setSwipeState(SwipeState.NONE);\n }, newSwipeAnimationDuration);\n if (carouselRef.current) {\n prepareAnimation({\n rect: carouselRef.current.getBoundingClientRect(),\n index: state.globalIndex,\n });\n }\n setSwipeState(newSwipeState);\n publish(ACTION_SWIPE, {\n type: \"swipe\",\n increment,\n duration: newSwipeAnimationDuration,\n easing: swipeEasing,\n });\n });\n React.useEffect(() => {\n var _a, _b;\n if (((_a = state.animation) === null || _a === void 0 ? void 0 : _a.increment) && ((_b = state.animation) === null || _b === void 0 ? void 0 : _b.duration)) {\n cleanupAnimationIncrement(() => dispatch({ type: \"swipe\", increment: 0 }), state.animation.duration);\n }\n }, [state.animation, dispatch, cleanupAnimationIncrement]);\n const swipeParams = [\n subscribeSensors,\n isSwipeValid,\n (containerRect === null || containerRect === void 0 ? void 0 : containerRect.width) || 0,\n animation.swipe,\n () => setSwipeState(SwipeState.SWIPE),\n (offset) => setSwipeOffset(offset),\n (offset, duration) => swipe({ offset, duration, count: 1 }),\n (offset) => swipe({ offset, count: 0 }),\n ];\n const pullParams = [\n () => {\n if (closeOnPullDown) {\n setSwipeState(SwipeState.PULL);\n }\n },\n (offset) => setPullOffset(offset),\n (offset) => pull(offset),\n (offset) => pull(offset, true),\n ];\n usePointerSwipe(controller, ...swipeParams, closeOnPullUp, closeOnPullDown, ...pullParams, close);\n useWheelSwipe(swipeState, ...swipeParams);\n const focusOnMount = useEventCallback(() => {\n if (controller.focus &&\n getOwnerDocument().querySelector(`.${cssClass(MODULE_PORTAL)} .${cssClass(cssContainerPrefix())}`)) {\n focus();\n }\n });\n React.useEffect(focusOnMount, [focusOnMount]);\n const onViewCallback = useEventCallback(() => {\n var _a;\n (_a = on.view) === null || _a === void 0 ? void 0 : _a.call(on, { index: state.currentIndex });\n });\n React.useEffect(onViewCallback, [state.globalIndex, onViewCallback]);\n React.useEffect(() => cleanup(subscribe(ACTION_PREV, (action) => swipe({ direction: ACTION_PREV, ...action })), subscribe(ACTION_NEXT, (action) => swipe({ direction: ACTION_NEXT, ...action })), subscribe(ACTION_SWIPE, (action) => dispatch(action))), [subscribe, swipe, dispatch]);\n const context = React.useMemo(() => ({\n prev,\n next,\n close,\n focus,\n slideRect: containerRect ? computeSlideRect(containerRect, carousel.padding) : { width: 0, height: 0 },\n containerRect: containerRect || { width: 0, height: 0 },\n subscribeSensors,\n containerRef,\n setCarouselRef,\n toolbarWidth,\n setToolbarWidth,\n }), [\n prev,\n next,\n close,\n focus,\n subscribeSensors,\n containerRect,\n containerRef,\n setCarouselRef,\n toolbarWidth,\n setToolbarWidth,\n carousel.padding,\n ]);\n React.useImperativeHandle(controller.ref, () => ({\n prev,\n next,\n close,\n focus,\n getLightboxProps,\n getLightboxState,\n }), [prev, next, close, focus, getLightboxProps, getLightboxState]);\n return (React.createElement(\"div\", { ref: handleContainerRef, className: clsx(cssClass(cssContainerPrefix()), cssClass(CLASS_FLEX_CENTER)), style: {\n ...(swipeState === SwipeState.SWIPE\n ? { [cssVar(\"swipe_offset\")]: `${Math.round(swipeOffset.current)}px` }\n : null),\n ...(swipeState === SwipeState.PULL\n ? {\n [cssVar(\"pull_offset\")]: `${Math.round(pullOffset.current)}px`,\n [cssVar(\"pull_opacity\")]: `${pullOpacity.current}`,\n }\n : null),\n ...(controller.touchAction !== \"none\" ? { [cssVar(\"controller_touch_action\")]: controller.touchAction } : null),\n ...styles.container,\n }, tabIndex: -1, ...registerSensors }, containerRect && (React.createElement(ControllerContext.Provider, { value: context },\n children, (_a = render.controls) === null || _a === void 0 ? void 0 :\n _a.call(render)))));\n}\nconst ControllerModule = createModule(MODULE_CONTROLLER, Controller);\n\nfunction cssPrefix$2(value) {\n return composePrefix(MODULE_CAROUSEL, value);\n}\nfunction cssSlidePrefix(value) {\n return composePrefix(CLASS_SLIDE, value);\n}\nfunction CarouselSlide({ slide, offset }) {\n const containerRef = React.useRef(null);\n const { currentIndex, slides } = useLightboxState();\n const { slideRect, focus } = useController();\n const { render, carousel: { imageFit, imageProps }, on: { click: onClick }, styles: { slide: style }, labels, } = useLightboxProps();\n const { getOwnerDocument } = useDocumentContext();\n const offscreen = offset !== 0;\n React.useEffect(() => {\n var _a;\n if (offscreen && ((_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.contains(getOwnerDocument().activeElement))) {\n focus();\n }\n }, [offscreen, focus, getOwnerDocument]);\n const renderSlide = () => {\n var _a, _b, _c, _d;\n let rendered = (_a = render.slide) === null || _a === void 0 ? void 0 : _a.call(render, { slide, offset, rect: slideRect });\n if (!rendered && isImageSlide(slide)) {\n rendered = (React.createElement(ImageSlide, { slide: slide, offset: offset, render: render, rect: slideRect, imageFit: imageFit, imageProps: imageProps, onClick: !offscreen ? () => onClick === null || onClick === void 0 ? void 0 : onClick({ index: currentIndex }) : undefined }));\n }\n return rendered ? (React.createElement(React.Fragment, null, (_b = render.slideHeader) === null || _b === void 0 ? void 0 :\n _b.call(render, { slide }),\n ((_c = render.slideContainer) !== null && _c !== void 0 ? _c : (({ children }) => children))({ slide, children: rendered }), (_d = render.slideFooter) === null || _d === void 0 ? void 0 :\n _d.call(render, { slide }))) : null;\n };\n return (React.createElement(\"div\", { ref: containerRef, className: clsx(cssClass(cssSlidePrefix()), !offscreen && cssClass(cssSlidePrefix(\"current\")), cssClass(CLASS_FLEX_CENTER)), ...makeInertWhen(offscreen), style: style, role: \"group\", \"aria-roledescription\": translateLabel(labels, \"Slide\"), \"aria-label\": translateSlideCounter(labels, slides, currentIndex + offset) }, renderSlide()));\n}\nfunction Placeholder() {\n const style = useLightboxProps().styles.slide;\n return React.createElement(\"div\", { className: cssClass(CLASS_SLIDE), style: style });\n}\nfunction Carousel({ carousel, labels }) {\n const { slides, currentIndex, globalIndex } = useLightboxState();\n const { setCarouselRef } = useController();\n const { autoPlaying, focusWithin } = useA11yContext();\n const spacingValue = parseLengthPercentage(carousel.spacing);\n const paddingValue = parseLengthPercentage(carousel.padding);\n const preload = calculatePreload(carousel, slides, 1);\n const items = [];\n if (hasSlides(slides)) {\n for (let index = currentIndex - preload; index <= currentIndex + preload; index += 1) {\n const slide = getSlide(slides, index);\n const key = globalIndex - currentIndex + index;\n const placeholder = carousel.finite && (index < 0 || index > slides.length - 1);\n items.push(!placeholder\n ? {\n key: [`${key}`, getSlideKey(slide)].filter(Boolean).join(\"|\"),\n offset: index - currentIndex,\n slide,\n }\n : { key });\n }\n }\n return (React.createElement(\"div\", { ref: setCarouselRef, className: clsx(cssClass(cssPrefix$2()), items.length > 0 && cssClass(cssPrefix$2(\"with_slides\"))), style: {\n [`${cssVar(cssPrefix$2(\"slides_count\"))}`]: items.length,\n [`${cssVar(cssPrefix$2(\"spacing_px\"))}`]: spacingValue.pixel || 0,\n [`${cssVar(cssPrefix$2(\"spacing_percent\"))}`]: spacingValue.percent || 0,\n [`${cssVar(cssPrefix$2(\"padding_px\"))}`]: paddingValue.pixel || 0,\n [`${cssVar(cssPrefix$2(\"padding_percent\"))}`]: paddingValue.percent || 0,\n }, role: \"region\", \"aria-live\": autoPlaying && !focusWithin ? \"off\" : \"polite\", \"aria-roledescription\": translateLabel(labels, \"Carousel\"), \"aria-label\": translateLabel(labels, \"Photo gallery\") }, items.map(({ key, slide, offset }) => slide ? React.createElement(CarouselSlide, { key: key, slide: slide, offset: offset }) : React.createElement(Placeholder, { key: key }))));\n}\nconst CarouselModule = createModule(MODULE_CAROUSEL, Carousel);\n\nfunction useNavigationState() {\n const { carousel } = useLightboxProps();\n const { slides, currentIndex } = useLightboxState();\n const prevDisabled = slides.length === 0 || (carousel.finite && currentIndex === 0);\n const nextDisabled = slides.length === 0 || (carousel.finite && currentIndex === slides.length - 1);\n return { prevDisabled, nextDisabled };\n}\n\nfunction useKeyboardNavigation(subscribeSensors) {\n var _a;\n const isRTL = useRTL();\n const { publish } = useEvents();\n const { animation } = useLightboxProps();\n const { prevDisabled, nextDisabled } = useNavigationState();\n const throttle = ((_a = animation.navigation) !== null && _a !== void 0 ? _a : animation.swipe) / 2;\n const prev = useThrottle(() => publish(ACTION_PREV), throttle);\n const next = useThrottle(() => publish(ACTION_NEXT), throttle);\n const handleKeyDown = useEventCallback((event) => {\n switch (event.key) {\n case VK_ESCAPE:\n publish(ACTION_CLOSE);\n break;\n case VK_ARROW_LEFT:\n if (!(isRTL ? nextDisabled : prevDisabled))\n (isRTL ? next : prev)();\n break;\n case VK_ARROW_RIGHT:\n if (!(isRTL ? prevDisabled : nextDisabled))\n (isRTL ? prev : next)();\n break;\n default:\n }\n });\n React.useEffect(() => subscribeSensors(EVENT_ON_KEY_DOWN, handleKeyDown), [subscribeSensors, handleKeyDown]);\n}\n\nfunction NavigationButton({ label, icon, renderIcon, action, onClick, disabled, style }) {\n return (React.createElement(IconButton, { label: label, icon: icon, renderIcon: renderIcon, className: cssClass(`navigation_${action}`), disabled: disabled, onClick: onClick, style: style, ...useLoseFocus(useController().focus, disabled) }));\n}\nfunction Navigation({ render: { buttonPrev, buttonNext, iconPrev, iconNext }, styles }) {\n const { prev, next, subscribeSensors } = useController();\n const { prevDisabled, nextDisabled } = useNavigationState();\n useKeyboardNavigation(subscribeSensors);\n return (React.createElement(React.Fragment, null,\n buttonPrev ? (buttonPrev()) : (React.createElement(NavigationButton, { label: \"Previous\", action: ACTION_PREV, icon: PreviousIcon, renderIcon: iconPrev, style: styles.navigationPrev, disabled: prevDisabled, onClick: prev })),\n buttonNext ? (buttonNext()) : (React.createElement(NavigationButton, { label: \"Next\", action: ACTION_NEXT, icon: NextIcon, renderIcon: iconNext, style: styles.navigationNext, disabled: nextDisabled, onClick: next }))));\n}\nconst NavigationModule = createModule(MODULE_NAVIGATION, Navigation);\n\nconst noScroll = cssClass(CLASS_NO_SCROLL);\nconst noScrollPadding = cssClass(CLASS_NO_SCROLL_PADDING);\nfunction isHTMLElement(element) {\n return \"style\" in element;\n}\nfunction padScrollbar(element, padding, rtl) {\n const styles = window.getComputedStyle(element);\n const property = rtl ? \"padding-left\" : \"padding-right\";\n const computedValue = rtl ? styles.paddingLeft : styles.paddingRight;\n const originalValue = element.style.getPropertyValue(property);\n element.style.setProperty(property, `${(parseInt(computedValue) || 0) + padding}px`);\n return () => {\n if (originalValue) {\n element.style.setProperty(property, originalValue);\n }\n else {\n element.style.removeProperty(property);\n }\n };\n}\nfunction NoScroll({ noScroll: { disabled }, children }) {\n const rtl = useRTL();\n const { getOwnerDocument, getOwnerWindow } = useDocumentContext();\n React.useEffect(() => {\n if (disabled)\n return () => { };\n const cleanup = [];\n const ownerWindow = getOwnerWindow();\n const { body, documentElement } = getOwnerDocument();\n const scrollbar = Math.round(ownerWindow.innerWidth - documentElement.clientWidth);\n if (scrollbar > 0) {\n cleanup.push(padScrollbar(body, scrollbar, rtl));\n const elements = body.getElementsByTagName(\"*\");\n for (let i = 0; i < elements.length; i += 1) {\n const element = elements[i];\n if (isHTMLElement(element) &&\n ownerWindow.getComputedStyle(element).getPropertyValue(\"position\") === \"fixed\" &&\n !element.classList.contains(noScrollPadding)) {\n cleanup.push(padScrollbar(element, scrollbar, rtl));\n }\n }\n }\n body.classList.add(noScroll);\n return () => {\n body.classList.remove(noScroll);\n cleanup.forEach((clean) => clean());\n };\n }, [rtl, disabled, getOwnerDocument, getOwnerWindow]);\n return React.createElement(React.Fragment, null, children);\n}\nconst NoScrollModule = createModule(MODULE_NO_SCROLL, NoScroll);\n\nfunction cssPrefix$1(value) {\n return composePrefix(MODULE_PORTAL, value);\n}\nfunction setAttribute(element, attribute, value) {\n const previousValue = element.getAttribute(attribute);\n element.setAttribute(attribute, value);\n return () => {\n if (previousValue) {\n element.setAttribute(attribute, previousValue);\n }\n else {\n element.removeAttribute(attribute);\n }\n };\n}\nfunction Portal({ children, animation, styles, className, on, portal, close, labels }) {\n const [mounted, setMounted] = React.useState(false);\n const [visible, setVisible] = React.useState(false);\n const cleanup = React.useRef([]);\n const restoreFocus = React.useRef(null);\n const { setTimeout } = useTimeouts();\n const { subscribe } = useEvents();\n const reduceMotion = useMotionPreference();\n const animationDuration = !reduceMotion ? animation.fade : 0;\n React.useEffect(() => {\n setMounted(true);\n return () => {\n setMounted(false);\n setVisible(false);\n };\n }, []);\n const handleCleanup = useEventCallback(() => {\n cleanup.current.forEach((clean) => clean());\n cleanup.current = [];\n });\n const handleClose = useEventCallback(() => {\n var _a;\n setVisible(false);\n handleCleanup();\n (_a = on.exiting) === null || _a === void 0 ? void 0 : _a.call(on);\n setTimeout(() => {\n var _a;\n (_a = on.exited) === null || _a === void 0 ? void 0 : _a.call(on);\n close();\n }, animationDuration);\n });\n React.useEffect(() => subscribe(ACTION_CLOSE, handleClose), [subscribe, handleClose]);\n const handleEnter = useEventCallback((node) => {\n var _a, _b, _c;\n reflow(node);\n setVisible(true);\n (_a = on.entering) === null || _a === void 0 ? void 0 : _a.call(on);\n const elements = (_c = (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.children) !== null && _c !== void 0 ? _c : [];\n for (let i = 0; i < elements.length; i += 1) {\n const element = elements[i];\n if ([\"TEMPLATE\", \"SCRIPT\", \"STYLE\"].indexOf(element.tagName) === -1 && element !== node) {\n cleanup.current.push(setAttribute(element, \"inert\", \"\"));\n cleanup.current.push(setAttribute(element, \"aria-hidden\", \"true\"));\n }\n }\n cleanup.current.push(() => {\n var _a, _b;\n (_b = (_a = restoreFocus.current) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n setTimeout(() => {\n var _a;\n (_a = on.entered) === null || _a === void 0 ? void 0 : _a.call(on);\n }, animationDuration);\n });\n const handleRef = React.useCallback((node) => {\n if (node) {\n handleEnter(node);\n }\n else {\n handleCleanup();\n }\n }, [handleEnter, handleCleanup]);\n return mounted\n ? createPortal(React.createElement(LightboxRoot, { ref: handleRef, className: clsx(className, cssClass(cssPrefix$1()), cssClass(CLASS_NO_SCROLL_PADDING), visible && cssClass(cssPrefix$1(\"open\"))), \"aria-modal\": true, role: \"dialog\", \"aria-label\": translateLabel(labels, \"Lightbox\"), style: {\n ...(animation.fade !== LightboxDefaultProps.animation.fade\n ? { [cssVar(\"fade_animation_duration\")]: `${animationDuration}ms` }\n : null),\n ...(animation.easing.fade !== LightboxDefaultProps.animation.easing.fade\n ? { [cssVar(\"fade_animation_timing_function\")]: animation.easing.fade }\n : null),\n ...styles.root,\n }, onFocus: (event) => {\n if (!restoreFocus.current) {\n restoreFocus.current = event.relatedTarget;\n }\n } }, children), portal.root || document.body)\n : null;\n}\nconst PortalModule = createModule(MODULE_PORTAL, Portal);\n\nfunction Root({ children }) {\n return React.createElement(React.Fragment, null, children);\n}\nconst RootModule = createModule(MODULE_ROOT, Root);\n\nfunction cssPrefix(value) {\n return composePrefix(MODULE_TOOLBAR, value);\n}\nfunction Toolbar({ toolbar: { buttons }, render: { buttonClose, iconClose }, styles }) {\n const { close, setToolbarWidth } = useController();\n const { setContainerRef, containerRect } = useContainerRect();\n useLayoutEffect(() => {\n setToolbarWidth(containerRect === null || containerRect === void 0 ? void 0 : containerRect.width);\n }, [setToolbarWidth, containerRect === null || containerRect === void 0 ? void 0 : containerRect.width]);\n const renderCloseButton = () => {\n if (buttonClose)\n return buttonClose();\n return React.createElement(IconButton, { key: ACTION_CLOSE, label: \"Close\", icon: CloseIcon, renderIcon: iconClose, onClick: close });\n };\n return (React.createElement(\"div\", { ref: setContainerRef, style: styles.toolbar, className: cssClass(cssPrefix()) }, buttons === null || buttons === void 0 ? void 0 : buttons.map((button) => (button === ACTION_CLOSE ? renderCloseButton() : button))));\n}\nconst ToolbarModule = createModule(MODULE_TOOLBAR, Toolbar);\n\nfunction renderNode(node, props) {\n var _a;\n return React.createElement(node.module.component, { key: node.module.name, ...props }, (_a = node.children) === null || _a === void 0 ? void 0 : _a.map((child) => renderNode(child, props)));\n}\nfunction mergeAnimation(defaultAnimation, animation = {}) {\n const { easing: defaultAnimationEasing, ...restDefaultAnimation } = defaultAnimation;\n const { easing, ...restAnimation } = animation;\n return {\n easing: { ...defaultAnimationEasing, ...easing },\n ...restDefaultAnimation,\n ...restAnimation,\n };\n}\nfunction Lightbox({ carousel, animation, render, toolbar, controller, noScroll, on, plugins, slides, index, ...restProps }) {\n const { animation: defaultAnimation, carousel: defaultCarousel, render: defaultRender, toolbar: defaultToolbar, controller: defaultController, noScroll: defaultNoScroll, on: defaultOn, slides: defaultSlides, index: defaultIndex, plugins: defaultPlugins, ...restDefaultProps } = LightboxDefaultProps;\n const { config, augmentation } = withPlugins([\n createNode(PortalModule, [\n createNode(NoScrollModule, [\n createNode(ControllerModule, [\n createNode(CarouselModule),\n createNode(ToolbarModule),\n createNode(NavigationModule),\n ]),\n ]),\n ]),\n ], plugins || defaultPlugins);\n const props = augmentation({\n animation: mergeAnimation(defaultAnimation, animation),\n carousel: { ...defaultCarousel, ...carousel },\n render: { ...defaultRender, ...render },\n toolbar: { ...defaultToolbar, ...toolbar },\n controller: { ...defaultController, ...controller },\n noScroll: { ...defaultNoScroll, ...noScroll },\n on: { ...defaultOn, ...on },\n ...restDefaultProps,\n ...restProps,\n });\n if (!props.open)\n return null;\n return (React.createElement(LightboxPropsProvider, { ...props },\n React.createElement(LightboxStateProvider, { slides: slides || defaultSlides, index: parseInt(index || defaultIndex) },\n React.createElement(TimeoutsProvider, null,\n React.createElement(EventsProvider, null,\n React.createElement(A11yContextProvider, null, renderNode(createNode(RootModule, config), props)))))));\n}\n\nexport { A11yContext, A11yContextProvider, ACTION_CLOSE, ACTION_NEXT, ACTION_PREV, ACTION_SWIPE, CLASS_FLEX_CENTER, CLASS_NO_SCROLL, CLASS_NO_SCROLL_PADDING, CLASS_SLIDE, CLASS_SLIDE_WRAPPER, Carousel, CarouselModule, CloseIcon, Controller, ControllerContext, ControllerModule, DocumentContext, DocumentContextProvider, ELEMENT_BUTTON, ELEMENT_ICON, EVENT_ON_KEY_DOWN, EVENT_ON_KEY_UP, EVENT_ON_POINTER_CANCEL, EVENT_ON_POINTER_DOWN, EVENT_ON_POINTER_LEAVE, EVENT_ON_POINTER_MOVE, EVENT_ON_POINTER_UP, EVENT_ON_WHEEL, ErrorIcon, EventsContext, EventsProvider, IMAGE_FIT_CONTAIN, IMAGE_FIT_COVER, IconButton, ImageSlide, Lightbox, LightboxDefaultProps, LightboxDispatchContext, LightboxPropsContext, LightboxPropsProvider, LightboxRoot, LightboxStateContext, LightboxStateProvider, LoadingIcon, MODULE_CAROUSEL, MODULE_CONTROLLER, MODULE_NAVIGATION, MODULE_NO_SCROLL, MODULE_PORTAL, MODULE_ROOT, MODULE_TOOLBAR, Navigation, NavigationButton, NavigationModule, NextIcon, NoScroll, NoScrollModule, Portal, PortalModule, PreviousIcon, Root, RootModule, SLIDE_STATUS_COMPLETE, SLIDE_STATUS_ERROR, SLIDE_STATUS_LOADING, SLIDE_STATUS_PLACEHOLDER, SwipeState, TimeoutsContext, TimeoutsProvider, Toolbar, ToolbarModule, UNKNOWN_ACTION_TYPE, VK_ARROW_LEFT, VK_ARROW_RIGHT, VK_ESCAPE, activeSlideStatus, addToolbarButton, calculatePreload, cleanup, clsx, composePrefix, computeSlideRect, createIcon, createIconDisabled, createModule, createNode, cssClass, cssVar, Lightbox as default, devicePixelRatio, getSlide, getSlideIfPresent, getSlideIndex, getSlideKey, hasSlides, hasWindow, isImageFitCover, isImageSlide, label, makeComposePrefix, makeInertWhen, makeUseContext, parseInt, parseLengthPercentage, reflow, round, setRef, stopNavigationEventsPropagation, translateLabel, translateSlideCounter, useA11yContext, useAnimation, useContainerRect, useController, useDelay, useDocumentContext, useEventCallback, useEvents, useForkRef, useKeyboardNavigation, useLayoutEffect, useLightboxDispatch, useLightboxProps, useLightboxState, useLoseFocus, useMotionPreference, useNavigationState, usePointerEvents, usePointerSwipe, usePreventWheelDefaults, useRTL, useSensors, useThrottle, useTimeouts, useWheelSwipe, withPlugins };","import * as React from 'react';\nimport { useLightboxProps, useMotionPreference, useEventCallback, useLayoutEffect, useLightboxState, isImageSlide, isImageFitCover, round, useDocumentContext, useController, usePointerEvents, cleanup, makeUseContext, createIcon, IconButton, devicePixelRatio, ImageSlide, clsx, cssClass, addToolbarButton, createModule } from '../../index.js';\nimport { EVENT_ON_KEY_DOWN, EVENT_ON_WHEEL, UNKNOWN_ACTION_TYPE, CLASS_FULLSIZE, CLASS_FLEX_CENTER, CLASS_SLIDE_WRAPPER, CLASS_SLIDE_WRAPPER_INTERACTIVE, PLUGIN_ZOOM } from '../../types.js';\n\nconst defaultZoomProps = {\n minZoom: 1,\n maxZoomPixelRatio: 1,\n zoomInMultiplier: 2,\n doubleTapDelay: 300,\n doubleClickDelay: 500,\n doubleClickMaxStops: 2,\n keyboardMoveDistance: 50,\n wheelZoomDistanceFactor: 100,\n pinchZoomDistanceFactor: 100,\n pinchZoomV4: false,\n scrollToZoom: false,\n};\nfunction validateMinZoom(minZoom) {\n return Math.min(Math.max(minZoom, Number.EPSILON), 1);\n}\nfunction resolveZoomProps(zoom) {\n const { minZoom, ...rest } = { ...defaultZoomProps, ...zoom };\n return { minZoom: validateMinZoom(minZoom), ...rest };\n}\n\nfunction useZoomAnimation(zoom, offsetX, offsetY, zoomWrapperRef) {\n const zoomAnimation = React.useRef(undefined);\n const zoomAnimationStart = React.useRef(undefined);\n const { zoom: zoomAnimationDuration } = useLightboxProps().animation;\n const reduceMotion = useMotionPreference();\n const playZoomAnimation = useEventCallback(() => {\n var _a, _b, _c;\n (_a = zoomAnimation.current) === null || _a === void 0 ? void 0 : _a.cancel();\n zoomAnimation.current = undefined;\n if (zoomAnimationStart.current && (zoomWrapperRef === null || zoomWrapperRef === void 0 ? void 0 : zoomWrapperRef.current)) {\n try {\n zoomAnimation.current = (_c = (_b = zoomWrapperRef.current).animate) === null || _c === void 0 ? void 0 : _c.call(_b, [\n { transform: zoomAnimationStart.current },\n { transform: `scale(${zoom}) translateX(${offsetX}px) translateY(${offsetY}px)` },\n ], {\n duration: !reduceMotion ? (zoomAnimationDuration !== null && zoomAnimationDuration !== void 0 ? zoomAnimationDuration : 500) : 0,\n easing: zoomAnimation.current ? \"ease-out\" : \"ease-in-out\",\n });\n }\n catch (err) {\n console.error(err);\n }\n zoomAnimationStart.current = undefined;\n if (zoomAnimation.current) {\n zoomAnimation.current.onfinish = () => {\n zoomAnimation.current = undefined;\n };\n }\n }\n });\n useLayoutEffect(playZoomAnimation, [zoom, offsetX, offsetY, playZoomAnimation]);\n return React.useCallback(() => {\n zoomAnimationStart.current = (zoomWrapperRef === null || zoomWrapperRef === void 0 ? void 0 : zoomWrapperRef.current)\n ? window.getComputedStyle(zoomWrapperRef.current).transform\n : undefined;\n }, [zoomWrapperRef]);\n}\n\nfunction useZoomCallback(zoom, disabled) {\n const { on } = useLightboxProps();\n const onZoomCallback = useEventCallback(() => {\n var _a;\n if (!disabled) {\n (_a = on.zoom) === null || _a === void 0 ? void 0 : _a.call(on, { zoom });\n }\n });\n React.useEffect(onZoomCallback, [zoom, onZoomCallback]);\n}\n\nfunction useZoomProps() {\n const { zoom } = useLightboxProps();\n return resolveZoomProps(zoom);\n}\n\nfunction useZoomImageRect(slideRect, imageDimensions) {\n var _a, _b;\n let imageRect = { width: 0, height: 0 };\n let maxImageRect = { width: 0, height: 0 };\n const { currentSlide } = useLightboxState();\n const { imageFit } = useLightboxProps().carousel;\n const { maxZoomPixelRatio } = useZoomProps();\n if (slideRect && currentSlide) {\n const slide = { ...currentSlide, ...imageDimensions };\n if (isImageSlide(slide)) {\n const cover = isImageFitCover(slide, imageFit);\n const width = Math.max(...(((_a = slide.srcSet) === null || _a === void 0 ? void 0 : _a.map((x) => x.width)) || []).concat(slide.width ? [slide.width] : []));\n const height = Math.max(...(((_b = slide.srcSet) === null || _b === void 0 ? void 0 : _b.map((x) => x.height)) || []).concat(slide.height ? [slide.height] : []));\n if (width > 0 && height > 0 && slideRect.width > 0 && slideRect.height > 0) {\n maxImageRect = cover\n ? {\n width: Math.round(Math.min(width, (slideRect.width / slideRect.height) * height)),\n height: Math.round(Math.min(height, (slideRect.height / slideRect.width) * width)),\n }\n : { width, height };\n maxImageRect = {\n width: maxImageRect.width * maxZoomPixelRatio,\n height: maxImageRect.height * maxZoomPixelRatio,\n };\n imageRect = cover\n ? {\n width: Math.min(slideRect.width, maxImageRect.width, width),\n height: Math.min(slideRect.height, maxImageRect.height, height),\n }\n : {\n width: Math.round(Math.min(slideRect.width, (slideRect.height / height) * width, width)),\n height: Math.round(Math.min(slideRect.height, (slideRect.width / width) * height, height)),\n };\n }\n }\n }\n const maxZoom = imageRect.width ? Math.max(round(maxImageRect.width / imageRect.width, 5), 1) : 1;\n return { imageRect, maxZoom };\n}\n\nfunction distance(pointerA, pointerB) {\n return Math.hypot(pointerA.clientX - pointerB.clientX, pointerA.clientY - pointerB.clientY);\n}\nfunction scaleZoom(value, delta, factor = 100, clamp = 2) {\n return value * Math.min(1 + Math.abs(delta / factor), clamp) ** Math.sign(delta);\n}\nfunction useZoomSensors(zoom, minZoom, maxZoom, disabled, zoomIn, zoomOut, changeZoom, changeOffsets, zoomWrapperRef) {\n const activePointers = React.useRef([]);\n const lastPointerDown = React.useRef(0);\n const pinchZoom = React.useRef(undefined);\n const { globalIndex } = useLightboxState();\n const { getOwnerWindow } = useDocumentContext();\n const { containerRef, subscribeSensors } = useController();\n const { keyboardMoveDistance, zoomInMultiplier, wheelZoomDistanceFactor, scrollToZoom, doubleTapDelay, doubleClickDelay, doubleClickMaxStops, pinchZoomDistanceFactor, pinchZoomV4, } = useZoomProps();\n const translateCoordinates = React.useCallback((event) => {\n if (containerRef.current) {\n const { pageX, pageY } = event;\n const { scrollX, scrollY } = getOwnerWindow();\n const { left, top, width, height } = containerRef.current.getBoundingClientRect();\n return [pageX - left - scrollX - width / 2, pageY - top - scrollY - height / 2];\n }\n return [];\n }, [containerRef, getOwnerWindow]);\n const onKeyDown = useEventCallback((event) => {\n const { key, metaKey, ctrlKey } = event;\n const meta = metaKey || ctrlKey;\n const preventDefault = () => {\n event.preventDefault();\n event.stopPropagation();\n };\n if (zoom > 1) {\n const move = (deltaX, deltaY) => {\n preventDefault();\n changeOffsets(deltaX, deltaY);\n };\n if (key === \"ArrowDown\") {\n move(0, keyboardMoveDistance);\n }\n else if (key === \"ArrowUp\") {\n move(0, -keyboardMoveDistance);\n }\n else if (key === \"ArrowLeft\") {\n move(-keyboardMoveDistance, 0);\n }\n else if (key === \"ArrowRight\") {\n move(keyboardMoveDistance, 0);\n }\n }\n if (key === \"+\" || (meta && key === \"=\")) {\n preventDefault();\n zoomIn();\n }\n else if (key === \"-\" || (meta && key === \"_\")) {\n preventDefault();\n zoomOut();\n }\n else if (meta && key === \"0\") {\n preventDefault();\n changeZoom(1);\n }\n });\n const onWheel = useEventCallback((event) => {\n if (event.ctrlKey || scrollToZoom) {\n if (Math.abs(event.deltaY) > Math.abs(event.deltaX)) {\n event.stopPropagation();\n changeZoom(scaleZoom(zoom, -event.deltaY, wheelZoomDistanceFactor), true, ...translateCoordinates(event));\n return;\n }\n }\n if (zoom > 1) {\n event.stopPropagation();\n if (!scrollToZoom) {\n changeOffsets(event.deltaX, event.deltaY);\n }\n }\n });\n const clearPointer = React.useCallback((event) => {\n const pointers = activePointers.current;\n pointers.splice(0, pointers.length, ...pointers.filter((p) => p.pointerId !== event.pointerId));\n }, []);\n const replacePointer = React.useCallback((event) => {\n clearPointer(event);\n event.persist();\n activePointers.current.push(event);\n }, [clearPointer]);\n const onPointerDown = useEventCallback((event) => {\n var _a;\n const pointers = activePointers.current;\n if ((event.pointerType === \"mouse\" && event.buttons > 1) ||\n !((_a = zoomWrapperRef === null || zoomWrapperRef === void 0 ? void 0 : zoomWrapperRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {\n return;\n }\n if (zoom > 1) {\n event.stopPropagation();\n }\n const { timeStamp } = event;\n if (pointers.length === 0 &&\n timeStamp - lastPointerDown.current < (event.pointerType === \"touch\" ? doubleTapDelay : doubleClickDelay)) {\n lastPointerDown.current = 0;\n const targetZoom = zoom >= 1\n ? zoom !== maxZoom\n ? zoom * Math.max(maxZoom ** (1 / doubleClickMaxStops), zoomInMultiplier)\n : 1\n : zoom !== minZoom\n ? zoom / Math.max(minZoom ** (-1 / doubleClickMaxStops), zoomInMultiplier)\n : 1;\n changeZoom(targetZoom, false, ...translateCoordinates(event));\n }\n else {\n lastPointerDown.current = timeStamp;\n }\n replacePointer(event);\n if (pointers.length === 2) {\n const initialDistance = distance(pointers[0], pointers[1]);\n pinchZoom.current = {\n previousDistance: initialDistance,\n initialDistance: Math.max(initialDistance, 1),\n initialZoom: zoom,\n };\n }\n });\n const onPointerMove = useEventCallback((event) => {\n const pointers = activePointers.current;\n const activePointer = pointers.find((p) => p.pointerId === event.pointerId);\n if (pointers.length === 2 && pinchZoom.current) {\n event.stopPropagation();\n replacePointer(event);\n const currentDistance = distance(pointers[0], pointers[1]);\n const targetZoom = pinchZoomV4\n ? (pinchZoom.current.initialZoom / pinchZoom.current.initialDistance) * currentDistance\n : scaleZoom(zoom, currentDistance - pinchZoom.current.previousDistance, pinchZoomDistanceFactor);\n changeZoom(targetZoom, true, ...pointers\n .map((x) => translateCoordinates(x))\n .reduce((acc, coordinate) => coordinate.map((x, i) => acc[i] + x / 2)));\n pinchZoom.current.previousDistance = currentDistance;\n return;\n }\n if (zoom > 1) {\n event.stopPropagation();\n if (activePointer) {\n if (pointers.length === 1) {\n changeOffsets((activePointer.clientX - event.clientX) / zoom, (activePointer.clientY - event.clientY) / zoom);\n }\n replacePointer(event);\n }\n }\n });\n const onPointerUp = React.useCallback((event) => {\n const pointers = activePointers.current;\n if (pointers.length === 2 && pointers.find((p) => p.pointerId === event.pointerId)) {\n pinchZoom.current = undefined;\n }\n clearPointer(event);\n }, [clearPointer]);\n const cleanupSensors = React.useCallback(() => {\n const pointers = activePointers.current;\n pointers.splice(0, pointers.length);\n lastPointerDown.current = 0;\n pinchZoom.current = undefined;\n }, []);\n usePointerEvents(subscribeSensors, onPointerDown, onPointerMove, onPointerUp, disabled);\n React.useEffect(cleanupSensors, [globalIndex, cleanupSensors]);\n React.useEffect(() => {\n if (!disabled) {\n return cleanup(cleanupSensors, subscribeSensors(EVENT_ON_KEY_DOWN, onKeyDown), subscribeSensors(EVENT_ON_WHEEL, onWheel));\n }\n return () => { };\n }, [disabled, subscribeSensors, cleanupSensors, onKeyDown, onWheel]);\n}\n\nfunction useZoomState(imageRect, maxZoom, zoomWrapperRef) {\n const [zoom, setZoom] = React.useState(1);\n const [offsetX, setOffsetX] = React.useState(0);\n const [offsetY, setOffsetY] = React.useState(0);\n const animate = useZoomAnimation(zoom, offsetX, offsetY, zoomWrapperRef);\n const { currentSlide, globalIndex } = useLightboxState();\n const { containerRect, slideRect } = useController();\n const { minZoom, zoomInMultiplier } = useZoomProps();\n const currentSource = currentSlide && isImageSlide(currentSlide) ? currentSlide.src : undefined;\n const disabled = !currentSource || !(zoomWrapperRef === null || zoomWrapperRef === void 0 ? void 0 : zoomWrapperRef.current);\n useLayoutEffect(() => {\n setZoom(1);\n setOffsetX(0);\n setOffsetY(0);\n }, [globalIndex, currentSource]);\n const changeOffsets = React.useCallback((dx, dy, targetZoom) => {\n const newZoom = targetZoom || zoom;\n const newOffsetX = offsetX - (dx || 0);\n const newOffsetY = offsetY - (dy || 0);\n const maxOffsetX = (imageRect.width * newZoom - slideRect.width) / 2 / newZoom;\n const maxOffsetY = (imageRect.height * newZoom - slideRect.height) / 2 / newZoom;\n setOffsetX(Math.min(Math.abs(newOffsetX), Math.max(maxOffsetX, 0)) * Math.sign(newOffsetX));\n setOffsetY(Math.min(Math.abs(newOffsetY), Math.max(maxOffsetY, 0)) * Math.sign(newOffsetY));\n }, [zoom, offsetX, offsetY, slideRect, imageRect.width, imageRect.height]);\n const changeZoom = React.useCallback((targetZoom, rapid, dx, dy) => {\n const newZoom = round(targetZoom + 0.01 < maxZoom ? (targetZoom - 0.01 > minZoom ? targetZoom : minZoom) : maxZoom, 5);\n if (!rapid) {\n animate();\n }\n changeOffsets(dx ? dx * (1 / zoom - 1 / newZoom) : 0, dy ? dy * (1 / zoom - 1 / newZoom) : 0, newZoom);\n setZoom(newZoom);\n }, [zoom, minZoom, maxZoom, changeOffsets, animate]);\n const handleControllerRectChange = useEventCallback(() => {\n if (zoom > 1) {\n if (zoom > maxZoom) {\n changeZoom(maxZoom, true);\n }\n changeOffsets();\n }\n });\n useLayoutEffect(handleControllerRectChange, [containerRect.width, containerRect.height, handleControllerRectChange]);\n const zoomIn = React.useCallback(() => {\n const targetZoom = zoom * zoomInMultiplier;\n changeZoom(zoom < 1 && targetZoom > 1 ? 1 : targetZoom);\n }, [zoom, zoomInMultiplier, changeZoom]);\n const zoomOut = React.useCallback(() => {\n const targetZoom = zoom / zoomInMultiplier;\n changeZoom(zoom > 1 && targetZoom < 1 ? 1 : targetZoom);\n }, [zoom, zoomInMultiplier, changeZoom]);\n return { zoom, offsetX, offsetY, disabled, changeOffsets, changeZoom, zoomIn, zoomOut };\n}\n\nconst ZoomControllerContext = React.createContext(null);\nconst useZoom = makeUseContext(\"useZoom\", \"ZoomControllerContext\", ZoomControllerContext);\nfunction ZoomContextProvider({ children }) {\n const [zoomWrapper, setZoomWrapper] = React.useState();\n const { slideRect } = useController();\n const { ref, minZoom } = useZoomProps();\n const { imageRect, maxZoom } = useZoomImageRect(slideRect, zoomWrapper === null || zoomWrapper === void 0 ? void 0 : zoomWrapper.imageDimensions);\n const { zoom, offsetX, offsetY, disabled, changeZoom, changeOffsets, zoomIn, zoomOut } = useZoomState(imageRect, maxZoom, zoomWrapper === null || zoomWrapper === void 0 ? void 0 : zoomWrapper.zoomWrapperRef);\n useZoomCallback(zoom, disabled);\n useZoomSensors(zoom, minZoom, maxZoom, disabled, zoomIn, zoomOut, changeZoom, changeOffsets, zoomWrapper === null || zoomWrapper === void 0 ? void 0 : zoomWrapper.zoomWrapperRef);\n const zoomRef = React.useMemo(() => ({ zoom, minZoom, maxZoom, offsetX, offsetY, disabled, zoomIn, zoomOut, changeZoom }), [zoom, minZoom, maxZoom, offsetX, offsetY, disabled, zoomIn, zoomOut, changeZoom]);\n React.useImperativeHandle(ref, () => zoomRef, [zoomRef]);\n const context = React.useMemo(() => ({ ...zoomRef, setZoomWrapper }), [zoomRef, setZoomWrapper]);\n return React.createElement(ZoomControllerContext.Provider, { value: context }, children);\n}\n\nconst ZoomInIcon = createIcon(\"ZoomIn\", React.createElement(React.Fragment, null,\n React.createElement(\"path\", { d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" }),\n React.createElement(\"path\", { d: \"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\" })));\nconst ZoomOutIcon = createIcon(\"ZoomOut\", React.createElement(\"path\", { d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z\" }));\nconst ZoomButton = React.forwardRef(function ZoomButton({ zoomIn, onLoseFocus }, ref) {\n const wasEnabled = React.useRef(false);\n const wasFocused = React.useRef(false);\n const { zoom, minZoom, maxZoom, zoomIn: zoomInCallback, zoomOut: zoomOutCallback, disabled: zoomDisabled, } = useZoom();\n const { render } = useLightboxProps();\n const disabled = zoomDisabled || (zoomIn ? zoom >= maxZoom : zoom <= minZoom);\n React.useEffect(() => {\n if (disabled && wasEnabled.current && wasFocused.current) {\n onLoseFocus();\n }\n if (!disabled) {\n wasEnabled.current = true;\n }\n }, [disabled, onLoseFocus]);\n return (React.createElement(IconButton, { ref: ref, disabled: disabled, label: zoomIn ? \"Zoom in\" : \"Zoom out\", icon: zoomIn ? ZoomInIcon : ZoomOutIcon, renderIcon: zoomIn ? render.iconZoomIn : render.iconZoomOut, onClick: zoomIn ? zoomInCallback : zoomOutCallback, onFocus: () => {\n wasFocused.current = true;\n }, onBlur: () => {\n wasFocused.current = false;\n } }));\n});\n\nfunction ZoomButtonsGroup() {\n const zoomInRef = React.useRef(null);\n const zoomOutRef = React.useRef(null);\n const { focus } = useController();\n const focusSibling = React.useCallback((sibling) => {\n var _a, _b;\n if (!((_a = sibling.current) === null || _a === void 0 ? void 0 : _a.disabled)) {\n (_b = sibling.current) === null || _b === void 0 ? void 0 : _b.focus();\n }\n else {\n focus();\n }\n }, [focus]);\n const focusZoomIn = React.useCallback(() => focusSibling(zoomInRef), [focusSibling]);\n const focusZoomOut = React.useCallback(() => focusSibling(zoomOutRef), [focusSibling]);\n return (React.createElement(React.Fragment, null,\n React.createElement(ZoomButton, { zoomIn: true, ref: zoomInRef, onLoseFocus: focusZoomOut }),\n React.createElement(ZoomButton, { ref: zoomOutRef, onLoseFocus: focusZoomIn })));\n}\n\nfunction ZoomToolbarControl() {\n const { render } = useLightboxProps();\n const zoomRef = useZoom();\n if (render.buttonZoom) {\n return React.createElement(React.Fragment, null, render.buttonZoom(zoomRef));\n }\n return React.createElement(ZoomButtonsGroup, null);\n}\n\nfunction isResponsiveImageSlide(slide) {\n var _a;\n return (((_a = slide.srcSet) === null || _a === void 0 ? void 0 : _a.length) || 0) > 0;\n}\nfunction reducer({ current, preload }, { type, source }) {\n switch (type) {\n case \"fetch\":\n if (!current) {\n return { current: source };\n }\n return { current, preload: source };\n case \"done\":\n if (source === preload) {\n return { current: source };\n }\n return { current, preload };\n default:\n throw new Error(UNKNOWN_ACTION_TYPE);\n }\n}\nfunction ResponsiveImage(props) {\n var _a, _b;\n const [{ current, preload }, dispatch] = React.useReducer(reducer, {});\n const { slide: image, rect, imageFit, render, interactive } = props;\n const srcSet = image.srcSet.sort((a, b) => a.width - b.width);\n const width = (_a = image.width) !== null && _a !== void 0 ? _a : srcSet[srcSet.length - 1].width;\n const height = (_b = image.height) !== null && _b !== void 0 ? _b : srcSet[srcSet.length - 1].height;\n const cover = isImageFitCover(image, imageFit);\n const maxWidth = Math.max(...srcSet.map((x) => x.width));\n const targetWidth = Math.min((cover ? Math.max : Math.min)(rect.width, width * (rect.height / height)), maxWidth);\n const pixelDensity = devicePixelRatio();\n const handleResize = useEventCallback(() => {\n var _a;\n const targetSource = (_a = srcSet.find((x) => x.width >= targetWidth * pixelDensity)) !== null && _a !== void 0 ? _a : srcSet[srcSet.length - 1];\n if (!current || srcSet.findIndex((x) => x.src === current) < srcSet.findIndex((x) => x === targetSource)) {\n dispatch({ type: \"fetch\", source: targetSource.src });\n }\n });\n useLayoutEffect(handleResize, [rect.width, rect.height, pixelDensity, handleResize]);\n const handlePreload = useEventCallback((currentPreload) => dispatch({ type: \"done\", source: currentPreload }));\n const style = {\n WebkitTransform: !interactive ? \"translateZ(0)\" : \"initial\",\n };\n if (!cover) {\n Object.assign(style, rect.width / rect.height < width / height ? { width: \"100%\", height: \"auto\" } : { width: \"auto\", height: \"100%\" });\n }\n return (React.createElement(React.Fragment, null,\n preload && preload !== current && (React.createElement(ImageSlide, { key: \"preload\", ...props, offset: undefined, slide: { ...image, src: preload, srcSet: undefined }, style: { position: \"absolute\", visibility: \"hidden\", ...style }, onLoad: () => handlePreload(preload), render: {\n ...render,\n iconLoading: () => null,\n iconError: () => null,\n } })),\n current && (React.createElement(ImageSlide, { key: \"current\", ...props, slide: { ...image, src: current, srcSet: undefined }, style: style }))));\n}\n\nfunction ZoomWrapper({ render, slide, offset, rect }) {\n var _a;\n const [imageDimensions, setImageDimensions] = React.useState();\n const zoomWrapperRef = React.useRef(null);\n const { zoom, maxZoom, offsetX, offsetY, setZoomWrapper } = useZoom();\n const interactive = zoom > 1;\n const { carousel, on } = useLightboxProps();\n const { currentIndex } = useLightboxState();\n useLayoutEffect(() => {\n if (offset === 0) {\n setZoomWrapper({ zoomWrapperRef, imageDimensions });\n return () => setZoomWrapper(undefined);\n }\n return () => { };\n }, [offset, imageDimensions, setZoomWrapper]);\n let rendered = (_a = render.slide) === null || _a === void 0 ? void 0 : _a.call(render, { slide, offset, rect, zoom, maxZoom });\n if (!rendered && isImageSlide(slide)) {\n const slideProps = {\n slide,\n offset,\n rect,\n render,\n imageFit: carousel.imageFit,\n imageProps: carousel.imageProps,\n onClick: offset === 0 ? () => { var _a; return (_a = on.click) === null || _a === void 0 ? void 0 : _a.call(on, { index: currentIndex }); } : undefined,\n };\n rendered = isResponsiveImageSlide(slide) ? (React.createElement(ResponsiveImage, { ...slideProps, slide: slide, interactive: interactive, rect: offset === 0 ? { width: rect.width * zoom, height: rect.height * zoom } : rect })) : (React.createElement(ImageSlide, { onLoad: (img) => setImageDimensions({ width: img.naturalWidth, height: img.naturalHeight }), ...slideProps }));\n }\n if (!rendered)\n return null;\n return (React.createElement(\"div\", { ref: zoomWrapperRef, className: clsx(cssClass(CLASS_FULLSIZE), cssClass(CLASS_FLEX_CENTER), cssClass(CLASS_SLIDE_WRAPPER), interactive && cssClass(CLASS_SLIDE_WRAPPER_INTERACTIVE)), style: offset === 0 ? { transform: `scale(${zoom}) translateX(${offsetX}px) translateY(${offsetY}px)` } : undefined }, rendered));\n}\n\nconst Zoom = ({ augment, addModule }) => {\n augment(({ zoom: zoomProps, toolbar, render, controller, ...restProps }) => {\n const zoom = resolveZoomProps(zoomProps);\n return {\n zoom,\n toolbar: addToolbarButton(toolbar, PLUGIN_ZOOM, React.createElement(ZoomToolbarControl, null)),\n render: {\n ...render,\n slide: (props) => { var _a; return isImageSlide(props.slide) ? React.createElement(ZoomWrapper, { render: render, ...props }) : (_a = render.slide) === null || _a === void 0 ? void 0 : _a.call(render, props); },\n },\n controller: { ...controller, preventDefaultWheelY: zoom.scrollToZoom },\n ...restProps,\n };\n });\n addModule(createModule(PLUGIN_ZOOM, ZoomContextProvider));\n};\n\nexport { Zoom as default };\n","import * as React from 'react';\nimport { useLightboxState, clsx, cssClass, createModule } from '../../index.js';\nimport { MODULE_CONTROLLER, PLUGIN_COUNTER } from '../../types.js';\n\nconst defaultCounterProps = {\n separator: \"/\",\n container: {},\n};\nconst resolveCounterProps = (counter) => ({\n ...defaultCounterProps,\n ...counter,\n});\n\nfunction CounterComponent({ counter }) {\n const { slides, currentIndex } = useLightboxState();\n const { separator, container: { className, ...rest }, className: legacyClassName, ...legacyRest } = resolveCounterProps(counter);\n if (slides.length === 0)\n return null;\n return (React.createElement(\"div\", { className: clsx(cssClass(\"counter\"), className || legacyClassName), ...legacyRest, ...rest, \"aria-hidden\": true },\n currentIndex + 1,\n \" \",\n separator,\n \" \",\n slides.length));\n}\nfunction Counter({ augment, addChild }) {\n augment(({ counter, ...restProps }) => ({\n counter: resolveCounterProps(counter),\n ...restProps,\n }));\n addChild(MODULE_CONTROLLER, createModule(PLUGIN_COUNTER, CounterComponent));\n}\n\nexport { Counter as default };\n","import * as React from 'react';\nimport { makeUseContext, useLightboxState, useTimeouts, useEvents, useController, useA11yContext, useEventCallback, cleanup, createIcon, useLightboxProps, useLoseFocus, IconButton, addToolbarButton, createModule } from '../../index.js';\nimport { SLIDE_STATUS_LOADING, SLIDE_STATUS_PLAYING, ACTIVE_SLIDE_LOADING, ACTIVE_SLIDE_PLAYING, ACTIVE_SLIDE_ERROR, SLIDE_STATUS_ERROR, ACTIVE_SLIDE_COMPLETE, SLIDE_STATUS_COMPLETE, PLUGIN_SLIDESHOW } from '../../types.js';\n\nconst defaultSlideshowProps = {\n autoplay: false,\n delay: 3000,\n ref: null,\n};\nconst resolveSlideshowProps = (slideshow) => ({\n ...defaultSlideshowProps,\n ...slideshow,\n});\n\nconst SlideshowContext = React.createContext(null);\nconst useSlideshow = makeUseContext(\"useSlideshow\", \"SlideshowContext\", SlideshowContext);\nfunction SlideshowContextProvider({ slideshow, carousel: { finite }, on, children }) {\n const { autoplay, delay, ref } = resolveSlideshowProps(slideshow);\n const wasPlaying = React.useRef(autoplay);\n const [playing, setPlaying] = React.useState(autoplay);\n const scheduler = React.useRef(undefined);\n const slideStatus = React.useRef(undefined);\n const { slides, currentIndex } = useLightboxState();\n const { setTimeout, clearTimeout } = useTimeouts();\n const { subscribe } = useEvents();\n const { next } = useController();\n const { setAutoPlaying } = useA11yContext();\n React.useEffect(() => setAutoPlaying(playing), [playing, setAutoPlaying]);\n const disabled = slides.length === 0 || (finite && currentIndex === slides.length - 1);\n const play = React.useCallback(() => {\n if (!playing && !disabled) {\n setPlaying(true);\n }\n }, [playing, disabled]);\n const pause = React.useCallback(() => {\n if (playing) {\n setPlaying(false);\n }\n }, [playing]);\n const cancelScheduler = React.useCallback(() => {\n clearTimeout(scheduler.current);\n scheduler.current = undefined;\n }, [clearTimeout]);\n const scheduleNextSlide = useEventCallback(() => {\n cancelScheduler();\n if (!playing ||\n disabled ||\n slideStatus.current === SLIDE_STATUS_LOADING ||\n slideStatus.current === SLIDE_STATUS_PLAYING) {\n return;\n }\n scheduler.current = setTimeout(() => {\n if (playing) {\n slideStatus.current = undefined;\n next();\n }\n }, delay);\n });\n React.useEffect(scheduleNextSlide, [currentIndex, playing, scheduleNextSlide]);\n React.useEffect(() => {\n if (playing && disabled) {\n setPlaying(false);\n }\n }, [currentIndex, playing, disabled]);\n const onSlideshowStart = useEventCallback(() => { var _a; return (_a = on.slideshowStart) === null || _a === void 0 ? void 0 : _a.call(on); });\n const onSlideshowStop = useEventCallback(() => { var _a; return (_a = on.slideshowStop) === null || _a === void 0 ? void 0 : _a.call(on); });\n React.useEffect(() => {\n if (playing) {\n onSlideshowStart();\n }\n else if (wasPlaying.current) {\n onSlideshowStop();\n }\n wasPlaying.current = playing;\n }, [playing, onSlideshowStart, onSlideshowStop]);\n React.useEffect(() => cleanup(cancelScheduler, subscribe(ACTIVE_SLIDE_LOADING, () => {\n slideStatus.current = SLIDE_STATUS_LOADING;\n cancelScheduler();\n }), subscribe(ACTIVE_SLIDE_PLAYING, () => {\n slideStatus.current = SLIDE_STATUS_PLAYING;\n cancelScheduler();\n }), subscribe(ACTIVE_SLIDE_ERROR, () => {\n slideStatus.current = SLIDE_STATUS_ERROR;\n scheduleNextSlide();\n }), subscribe(ACTIVE_SLIDE_COMPLETE, () => {\n slideStatus.current = SLIDE_STATUS_COMPLETE;\n scheduleNextSlide();\n })), [subscribe, cancelScheduler, scheduleNextSlide]);\n const context = React.useMemo(() => ({ playing, disabled, play, pause }), [playing, disabled, play, pause]);\n React.useImperativeHandle(ref, () => context, [context]);\n return React.createElement(SlideshowContext.Provider, { value: context }, children);\n}\n\nconst PlayIcon = createIcon(\"Play\", React.createElement(\"path\", { d: \"M8 5v14l11-7z\" }));\nconst PauseIcon = createIcon(\"Pause\", React.createElement(\"path\", { d: \"M6 19h4V5H6v14zm8-14v14h4V5h-4z\" }));\nfunction SlideshowButton() {\n const { playing, disabled, play, pause } = useSlideshow();\n const { render } = useLightboxProps();\n const focusListeners = useLoseFocus(useController().focus, disabled);\n if (render.buttonSlideshow) {\n return React.createElement(React.Fragment, null, render.buttonSlideshow({ playing, disabled, play, pause }));\n }\n return (React.createElement(IconButton, { label: playing ? \"Pause\" : \"Play\", icon: playing ? PauseIcon : PlayIcon, renderIcon: playing ? render.iconSlideshowPause : render.iconSlideshowPlay, onClick: playing ? pause : play, disabled: disabled, ...focusListeners }));\n}\n\nfunction Slideshow({ augment, addModule }) {\n augment(({ slideshow, toolbar, ...restProps }) => ({\n toolbar: addToolbarButton(toolbar, PLUGIN_SLIDESHOW, React.createElement(SlideshowButton, null)),\n slideshow: resolveSlideshowProps(slideshow),\n ...restProps,\n }));\n addModule(createModule(PLUGIN_SLIDESHOW, SlideshowContextProvider));\n}\n\nexport { Slideshow as default };\n","import * as React from 'react';\nimport { makeUseContext, useDocumentContext, useLayoutEffect, cleanup, useEventCallback, clsx, cssClass, createIcon, useLightboxProps, IconButton, addToolbarButton, createModule } from '../../index.js';\nimport { PLUGIN_FULLSCREEN, CLASS_FULLSIZE, PLUGIN_THUMBNAILS, MODULE_CONTROLLER } from '../../types.js';\n\nconst defaultFullscreenProps = {\n auto: false,\n ref: null,\n};\nconst resolveFullscreenProps = (fullscreen) => ({\n ...defaultFullscreenProps,\n ...fullscreen,\n});\n\nconst FullscreenContext = React.createContext(null);\nconst useFullscreen = makeUseContext(\"useFullscreen\", \"FullscreenContext\", FullscreenContext);\nfunction FullscreenContextProvider({ fullscreen: fullscreenProps, on, children }) {\n const { auto, ref } = resolveFullscreenProps(fullscreenProps);\n const containerRef = React.useRef(null);\n const [disabled, setDisabled] = React.useState();\n const [fullscreen, setFullscreen] = React.useState(false);\n const wasFullscreen = React.useRef(false);\n const { getOwnerDocument } = useDocumentContext();\n useLayoutEffect(() => {\n var _a, _b, _c, _d;\n const ownerDocument = getOwnerDocument();\n setDisabled(!((_d = (_c = (_b = (_a = ownerDocument.fullscreenEnabled) !== null && _a !== void 0 ? _a : ownerDocument.webkitFullscreenEnabled) !== null && _b !== void 0 ? _b : ownerDocument.mozFullScreenEnabled) !== null && _c !== void 0 ? _c : ownerDocument.msFullscreenEnabled) !== null && _d !== void 0 ? _d : false));\n }, [getOwnerDocument]);\n const getFullscreenElement = React.useCallback(() => {\n var _a;\n const ownerDocument = getOwnerDocument();\n const fullscreenElement = ownerDocument.fullscreenElement ||\n ownerDocument.webkitFullscreenElement ||\n ownerDocument.mozFullScreenElement ||\n ownerDocument.msFullscreenElement;\n return ((_a = fullscreenElement === null || fullscreenElement === void 0 ? void 0 : fullscreenElement.shadowRoot) === null || _a === void 0 ? void 0 : _a.fullscreenElement) || fullscreenElement;\n }, [getOwnerDocument]);\n const enter = React.useCallback(() => {\n const container = containerRef.current;\n try {\n if (container.requestFullscreen) {\n container.requestFullscreen().catch(() => { });\n }\n else if (container.webkitRequestFullscreen) {\n container.webkitRequestFullscreen();\n }\n else if (container.mozRequestFullScreen) {\n container.mozRequestFullScreen();\n }\n else if (container.msRequestFullscreen) {\n container.msRequestFullscreen();\n }\n }\n catch (_) {\n }\n }, []);\n const exit = React.useCallback(() => {\n if (!getFullscreenElement())\n return;\n const ownerDocument = getOwnerDocument();\n try {\n if (ownerDocument.exitFullscreen) {\n ownerDocument.exitFullscreen().catch(() => { });\n }\n else if (ownerDocument.webkitExitFullscreen) {\n ownerDocument.webkitExitFullscreen();\n }\n else if (ownerDocument.mozCancelFullScreen) {\n ownerDocument.mozCancelFullScreen();\n }\n else if (ownerDocument.msExitFullscreen) {\n ownerDocument.msExitFullscreen();\n }\n }\n catch (_) {\n }\n }, [getFullscreenElement, getOwnerDocument]);\n React.useEffect(() => {\n const ownerDocument = getOwnerDocument();\n const listener = () => {\n setFullscreen(getFullscreenElement() === containerRef.current);\n };\n return cleanup(...[\"fullscreenchange\", \"webkitfullscreenchange\", \"mozfullscreenchange\", \"MSFullscreenChange\"].map((event) => {\n ownerDocument.addEventListener(event, listener);\n return () => ownerDocument.removeEventListener(event, listener);\n }));\n }, [getFullscreenElement, getOwnerDocument]);\n const onEnterFullscreen = useEventCallback(() => { var _a; return (_a = on.enterFullscreen) === null || _a === void 0 ? void 0 : _a.call(on); });\n const onExitFullscreen = useEventCallback(() => { var _a; return (_a = on.exitFullscreen) === null || _a === void 0 ? void 0 : _a.call(on); });\n React.useEffect(() => {\n if (fullscreen) {\n wasFullscreen.current = true;\n }\n if (wasFullscreen.current) {\n (fullscreen ? onEnterFullscreen : onExitFullscreen)();\n }\n }, [fullscreen, onEnterFullscreen, onExitFullscreen]);\n const handleAutoFullscreen = useEventCallback(() => {\n var _a;\n (_a = (auto ? enter : null)) === null || _a === void 0 ? void 0 : _a();\n return exit;\n });\n React.useEffect(handleAutoFullscreen, [handleAutoFullscreen]);\n const context = React.useMemo(() => ({ fullscreen, disabled, enter, exit }), [fullscreen, disabled, enter, exit]);\n React.useImperativeHandle(ref, () => context, [context]);\n return (React.createElement(\"div\", { ref: containerRef, className: clsx(cssClass(PLUGIN_FULLSCREEN), cssClass(CLASS_FULLSIZE)) },\n React.createElement(FullscreenContext.Provider, { value: context }, children)));\n}\n\nconst EnterFullscreenIcon = createIcon(\"EnterFullscreen\", React.createElement(\"path\", { d: \"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\" }));\nconst ExitFullscreenIcon = createIcon(\"ExitFullscreen\", React.createElement(\"path\", { d: \"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z\" }));\nfunction FullscreenButton() {\n var _a;\n const { fullscreen, disabled, enter, exit } = useFullscreen();\n const { render } = useLightboxProps();\n if (disabled)\n return null;\n if (render.buttonFullscreen) {\n return React.createElement(React.Fragment, null, (_a = render.buttonFullscreen) === null || _a === void 0 ? void 0 : _a.call(render, { fullscreen, disabled, enter, exit }));\n }\n return (React.createElement(IconButton, { disabled: disabled, label: fullscreen ? \"Exit Fullscreen\" : \"Enter Fullscreen\", icon: fullscreen ? ExitFullscreenIcon : EnterFullscreenIcon, renderIcon: fullscreen ? render.iconExitFullscreen : render.iconEnterFullscreen, onClick: fullscreen ? exit : enter }));\n}\n\nfunction Fullscreen({ augment, contains, addParent }) {\n augment(({ fullscreen, toolbar, ...restProps }) => ({\n toolbar: addToolbarButton(toolbar, PLUGIN_FULLSCREEN, React.createElement(FullscreenButton, null)),\n fullscreen: resolveFullscreenProps(fullscreen),\n ...restProps,\n }));\n addParent(contains(PLUGIN_THUMBNAILS) ? PLUGIN_THUMBNAILS : MODULE_CONTROLLER, createModule(PLUGIN_FULLSCREEN, FullscreenContextProvider));\n}\n\nexport { Fullscreen as default };\n","import * as React from 'react';\nimport { useLightboxProps, composePrefix, createIcon, ImageSlide, isImageSlide, cssClass, makeComposePrefix, useLightboxState, useDocumentContext, useEventCallback, translateSlideCounter, cssVar, clsx, getSlideKey, useRTL, useEvents, useSensors, useKeyboardNavigation, useAnimation, cleanup, calculatePreload, hasSlides, getSlide, translateLabel, makeUseContext, LightboxPropsProvider, createIconDisabled, IconButton, addToolbarButton, createModule } from '../../index.js';\nimport { PLUGIN_THUMBNAILS, ELEMENT_ICON, CLASS_FLEX_CENTER, ACTION_SWIPE, ACTION_NEXT, ACTION_PREV, PLUGIN_FULLSCREEN, MODULE_CONTROLLER } from '../../types.js';\n\nconst defaultThumbnailsProps = {\n ref: null,\n position: \"bottom\",\n width: 120,\n height: 80,\n border: 1,\n borderRadius: 4,\n padding: 4,\n gap: 16,\n imageFit: \"contain\",\n vignette: true,\n hidden: false,\n showToggle: false,\n};\nconst resolveThumbnailsProps = (thumbnails) => ({\n ...defaultThumbnailsProps,\n ...thumbnails,\n});\nfunction useThumbnailsProps() {\n const { thumbnails } = useLightboxProps();\n return resolveThumbnailsProps(thumbnails);\n}\n\nconst cssPrefix = (value) => composePrefix(PLUGIN_THUMBNAILS, value);\nconst cssThumbnailPrefix = (value) => cssPrefix(composePrefix(\"thumbnail\", value));\n\nconst VideoThumbnailIcon = createIcon(\"VideoThumbnail\", React.createElement(\"path\", { d: \"M10 16.5l6-4.5-6-4.5v9zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\" }));\nconst UnknownThumbnailIcon = createIcon(\"UnknownThumbnail\", React.createElement(\"path\", { d: \"M23 18V6c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zM8.5 12.5l2.5 3.01L14.5 11l4.5 6H5l3.5-4.5z\" }));\nfunction renderThumbnail({ slide, render, rect, imageFit }) {\n var _a;\n const customThumbnail = (_a = render.thumbnail) === null || _a === void 0 ? void 0 : _a.call(render, { slide, render, rect, imageFit });\n if (customThumbnail) {\n return customThumbnail;\n }\n const imageSlideProps = { render, rect, imageFit };\n if (slide.thumbnail) {\n return React.createElement(ImageSlide, { slide: { src: slide.thumbnail }, ...imageSlideProps });\n }\n if (isImageSlide(slide)) {\n return React.createElement(ImageSlide, { slide: slide, ...imageSlideProps });\n }\n const thumbnailIconClass = cssClass(cssThumbnailPrefix(ELEMENT_ICON));\n if (slide.type === \"video\") {\n return (React.createElement(React.Fragment, null,\n slide.poster && React.createElement(ImageSlide, { slide: { src: slide.poster }, ...imageSlideProps }),\n React.createElement(VideoThumbnailIcon, { className: thumbnailIconClass })));\n }\n return React.createElement(UnknownThumbnailIcon, { className: thumbnailIconClass });\n}\nconst activePrefix = makeComposePrefix(\"active\");\nconst fadeInPrefix = makeComposePrefix(\"fadein\");\nconst fadeOutPrefix = makeComposePrefix(\"fadeout\");\nconst placeholderPrefix = makeComposePrefix(\"placeholder\");\nconst DELAY = \"delay\";\nconst DURATION = \"duration\";\nfunction Thumbnail({ slide, index, onClick, fadeIn, fadeOut, placeholder, onLoseFocus }) {\n const ref = React.useRef(null);\n const { render, styles, labels } = useLightboxProps();\n const { slides, globalIndex } = useLightboxState();\n const { getOwnerDocument } = useDocumentContext();\n const { width, height, imageFit } = useThumbnailsProps();\n const rect = { width, height };\n const active = index === globalIndex;\n const onLoseFocusCallback = useEventCallback(onLoseFocus);\n React.useEffect(() => {\n if (fadeOut && getOwnerDocument().activeElement === ref.current) {\n onLoseFocusCallback();\n }\n }, [fadeOut, onLoseFocusCallback, getOwnerDocument]);\n return (React.createElement(\"button\", { ref: ref, type: \"button\", className: clsx(cssClass(CLASS_FLEX_CENTER), cssClass(cssThumbnailPrefix()), active && cssClass(cssThumbnailPrefix(activePrefix())), fadeIn && cssClass(cssThumbnailPrefix(fadeInPrefix())), fadeOut && cssClass(cssThumbnailPrefix(fadeOutPrefix())), placeholder && cssClass(cssThumbnailPrefix(placeholderPrefix()))), style: {\n ...(fadeIn\n ? {\n [cssVar(cssThumbnailPrefix(fadeInPrefix(DURATION)))]: `${fadeIn.duration}ms`,\n [cssVar(cssThumbnailPrefix(fadeInPrefix(DELAY)))]: `${fadeIn.delay}ms`,\n }\n : null),\n ...(fadeOut\n ? {\n [cssVar(cssThumbnailPrefix(fadeOutPrefix(DURATION)))]: `${fadeOut.duration}ms`,\n [cssVar(cssThumbnailPrefix(fadeOutPrefix(DELAY)))]: `${fadeOut.delay}ms`,\n }\n : null),\n ...styles.thumbnail,\n }, onClick: onClick, \"aria-current\": active ? true : undefined, \"aria-label\": translateSlideCounter(labels, slides, index) }, slide && renderThumbnail({ slide, render, rect, imageFit })));\n}\n\nfunction isHorizontal(position) {\n return [\"top\", \"bottom\"].includes(position);\n}\nfunction boxSize(thumbnails, dimension) {\n return dimension + 2 * (thumbnails.border + thumbnails.padding) + thumbnails.gap;\n}\nfunction getThumbnailKey(slide) {\n const { thumbnail, poster } = slide || { thumbnail: \"placeholder\" };\n return ((typeof thumbnail === \"string\" && thumbnail) ||\n (typeof poster === \"string\" && poster) ||\n (slide && getSlideKey(slide)) ||\n undefined);\n}\nfunction ThumbnailsTrack({ visible, containerRef }) {\n const track = React.useRef(null);\n const isRTL = useRTL();\n const { publish, subscribe } = useEvents();\n const { carousel, styles, labels } = useLightboxProps();\n const { slides, globalIndex, animation } = useLightboxState();\n const { registerSensors, subscribeSensors } = useSensors();\n useKeyboardNavigation(subscribeSensors);\n const thumbnails = useThumbnailsProps();\n const { position, width, height, border, borderStyle, borderColor, borderRadius, padding, gap, vignette } = thumbnails;\n const offset = ((animation === null || animation === void 0 ? void 0 : animation.duration) !== undefined && (animation === null || animation === void 0 ? void 0 : animation.increment)) || 0;\n const animationDuration = (animation === null || animation === void 0 ? void 0 : animation.duration) || 0;\n const { prepareAnimation } = useAnimation(track, (snapshot) => ({\n keyframes: isHorizontal(position)\n ? [\n {\n transform: `translateX(${(isRTL ? -1 : 1) * boxSize(thumbnails, width) * offset + snapshot}px)`,\n },\n { transform: \"translateX(0)\" },\n ]\n : [\n {\n transform: `translateY(${boxSize(thumbnails, height) * offset + snapshot}px)`,\n },\n { transform: \"translateY(0)\" },\n ],\n duration: animationDuration,\n easing: animation === null || animation === void 0 ? void 0 : animation.easing,\n }));\n const handleControllerSwipe = useEventCallback(() => {\n let animationOffset = 0;\n if (containerRef.current && track.current) {\n const containerRect = containerRef.current.getBoundingClientRect();\n const trackRect = track.current.getBoundingClientRect();\n animationOffset = isHorizontal(position)\n ? trackRect.left - containerRect.left - (containerRect.width - trackRect.width) / 2\n : trackRect.top - containerRect.top - (containerRect.height - trackRect.height) / 2;\n }\n prepareAnimation(animationOffset);\n });\n React.useEffect(() => cleanup(subscribe(ACTION_SWIPE, handleControllerSwipe)), [subscribe, handleControllerSwipe]);\n const preload = calculatePreload(carousel, slides);\n const items = [];\n if (hasSlides(slides)) {\n for (let index = globalIndex - preload - Math.abs(offset); index <= globalIndex + preload + Math.abs(offset); index += 1) {\n const placeholder = (carousel.finite && (index < 0 || index > slides.length - 1)) ||\n (offset < 0 && index < globalIndex - preload) ||\n (offset > 0 && index > globalIndex + preload);\n const slide = !placeholder ? getSlide(slides, index) : null;\n const key = [`${index}`, getThumbnailKey(slide)].filter(Boolean).join(\"|\");\n items.push({ key, index, slide });\n }\n }\n const handleClick = (slideIndex) => () => {\n if (slideIndex > globalIndex) {\n publish(ACTION_NEXT, { count: slideIndex - globalIndex });\n }\n else if (slideIndex < globalIndex) {\n publish(ACTION_PREV, { count: globalIndex - slideIndex });\n }\n };\n return (React.createElement(\"div\", { className: clsx(cssClass(cssPrefix(\"container\")), cssClass(CLASS_FLEX_CENTER)), style: {\n ...(!visible ? { display: \"none\" } : null),\n ...(width !== defaultThumbnailsProps.width ? { [cssVar(cssThumbnailPrefix(\"width\"))]: `${width}px` } : null),\n ...(height !== defaultThumbnailsProps.height\n ? { [cssVar(cssThumbnailPrefix(\"height\"))]: `${height}px` }\n : null),\n ...(border !== defaultThumbnailsProps.border\n ? { [cssVar(cssThumbnailPrefix(\"border\"))]: `${border}px` }\n : null),\n ...(borderStyle ? { [cssVar(cssThumbnailPrefix(\"border_style\"))]: borderStyle } : null),\n ...(borderColor ? { [cssVar(cssThumbnailPrefix(\"border_color\"))]: borderColor } : null),\n ...(borderRadius !== defaultThumbnailsProps.borderRadius\n ? { [cssVar(cssThumbnailPrefix(\"border_radius\"))]: `${borderRadius}px` }\n : null),\n ...(padding !== defaultThumbnailsProps.padding\n ? { [cssVar(cssThumbnailPrefix(\"padding\"))]: `${padding}px` }\n : null),\n ...(gap !== defaultThumbnailsProps.gap ? { [cssVar(cssThumbnailPrefix(\"gap\"))]: `${gap}px` } : null),\n ...styles.thumbnailsContainer,\n } },\n React.createElement(\"nav\", { ref: track, style: styles.thumbnailsTrack, className: clsx(cssClass(cssPrefix(\"track\")), cssClass(CLASS_FLEX_CENTER)), \"aria-label\": translateLabel(labels, \"Thumbnails\"), tabIndex: -1, ...registerSensors }, items.map(({ key, index, slide }) => {\n const fadeAnimationDuration = animationDuration / Math.abs(offset || 1);\n const fadeIn = (offset > 0 && index > globalIndex + preload - offset && index <= globalIndex + preload) ||\n (offset < 0 && index < globalIndex - preload - offset && index >= globalIndex - preload)\n ? {\n duration: fadeAnimationDuration,\n delay: ((offset > 0 ? index - (globalIndex + preload - offset) : globalIndex - preload - offset - index) -\n 1) *\n fadeAnimationDuration,\n }\n : undefined;\n const fadeOut = (offset > 0 && index < globalIndex - preload) || (offset < 0 && index > globalIndex + preload)\n ? {\n duration: fadeAnimationDuration,\n delay: (offset > 0\n ? offset - (globalIndex - preload - index)\n : -offset - (index - (globalIndex + preload))) * fadeAnimationDuration,\n }\n : undefined;\n return (React.createElement(Thumbnail, { key: key, index: index, slide: slide, fadeIn: fadeIn, fadeOut: fadeOut, placeholder: !slide, onClick: handleClick(index), onLoseFocus: () => { var _a; return (_a = track.current) === null || _a === void 0 ? void 0 : _a.focus(); } }));\n })),\n vignette && React.createElement(\"div\", { className: cssClass(cssPrefix(\"vignette\")) })));\n}\n\nconst ThumbnailsContext = React.createContext(null);\nconst useThumbnails = makeUseContext(\"useThumbnails\", \"ThumbnailsContext\", ThumbnailsContext);\nfunction ThumbnailsContextProvider({ children, ...props }) {\n const { ref, position, hidden } = resolveThumbnailsProps(props.thumbnails);\n const [visible, setVisible] = React.useState(!hidden);\n const containerRef = React.useRef(null);\n const context = React.useMemo(() => ({\n visible,\n show: () => setVisible(true),\n hide: () => setVisible(false),\n }), [visible]);\n React.useImperativeHandle(ref, () => context, [context]);\n return (React.createElement(LightboxPropsProvider, { ...props },\n React.createElement(ThumbnailsContext.Provider, { value: context },\n React.createElement(\"div\", { ref: containerRef, className: clsx(cssClass(cssPrefix()), cssClass(cssPrefix(`${position}`))) },\n [\"start\", \"top\"].includes(position) && React.createElement(ThumbnailsTrack, { containerRef: containerRef, visible: visible }),\n React.createElement(\"div\", { className: cssClass(cssPrefix(\"wrapper\")) }, children),\n [\"end\", \"bottom\"].includes(position) && React.createElement(ThumbnailsTrack, { containerRef: containerRef, visible: visible })))));\n}\n\nconst thumbnailsIcon = () => (React.createElement(React.Fragment, null,\n React.createElement(\"path\", { strokeWidth: 2, stroke: \"currentColor\", strokeLinejoin: \"round\", fill: \"none\", d: \"M3 5l18 0l0 14l-18 0l0-14z\" }),\n React.createElement(\"path\", { d: \"M5 14h4v3h-4zM10 14h4v3h-4zM15 14h4v3h-4z\" })));\nconst ThumbnailsVisible = createIcon(\"ThumbnailsVisible\", thumbnailsIcon());\nconst ThumbnailsHidden = createIconDisabled(\"ThumbnailsHidden\", thumbnailsIcon());\nfunction ThumbnailsButton() {\n const { visible, show, hide } = useThumbnails();\n const { render } = useLightboxProps();\n if (render.buttonThumbnails) {\n return React.createElement(React.Fragment, null, render.buttonThumbnails({ visible, show, hide }));\n }\n return (React.createElement(IconButton, { label: visible ? \"Hide thumbnails\" : \"Show thumbnails\", icon: visible ? ThumbnailsVisible : ThumbnailsHidden, renderIcon: visible ? render.iconThumbnailsVisible : render.iconThumbnailsHidden, onClick: visible ? hide : show }));\n}\n\nfunction Thumbnails({ augment, contains, append, addParent }) {\n augment(({ thumbnails: thumbnailsProps, toolbar, ...restProps }) => {\n const thumbnails = resolveThumbnailsProps(thumbnailsProps);\n return {\n toolbar: addToolbarButton(toolbar, PLUGIN_THUMBNAILS, thumbnails.showToggle ? React.createElement(ThumbnailsButton, null) : null),\n thumbnails,\n ...restProps,\n };\n });\n const module = createModule(PLUGIN_THUMBNAILS, ThumbnailsContextProvider);\n if (contains(PLUGIN_FULLSCREEN)) {\n append(PLUGIN_FULLSCREEN, module);\n }\n else {\n addParent(MODULE_CONTROLLER, module);\n }\n}\n\nexport { Thumbnails as default };\n","import React from 'react';\n\nexport interface IProps extends React.HTMLAttributes {\n className?: string;\n children?: React.ReactNode;\n style?: React.CSSProperties;\n}\n\n/**\n * I 기본 컴포넌트\n *\n * HTML 태그를 래핑한 기본 컴포넌트입니다.\n * 주로 아이콘 폰트 (FontAwesome 등)와 함께 사용됩니다.\n *\n * @example\n * ```tsx\n * \n * \n * ```\n */\nexport const I: React.FC = ({ className = '', children, style, ...props }) => {\n return (\n \n {children}\n \n );\n};","/**\n * ImageGallery 컴포넌트\n *\n * yet-another-react-lightbox 기반 이미지 갤러리 컴포넌트입니다.\n * 줌, 슬라이드쇼, 전체화면, 다운로드 기능을 지원합니다.\n *\n * @module composite/ImageGallery\n */\n\nimport React, { useState, useCallback, useEffect, useRef } from 'react';\nimport Lightbox, { Slide } from 'yet-another-react-lightbox';\nimport Zoom from 'yet-another-react-lightbox/plugins/zoom';\nimport Counter from 'yet-another-react-lightbox/plugins/counter';\nimport Slideshow from 'yet-another-react-lightbox/plugins/slideshow';\nimport Fullscreen from 'yet-another-react-lightbox/plugins/fullscreen';\nimport Thumbnails from 'yet-another-react-lightbox/plugins/thumbnails';\nimport 'yet-another-react-lightbox/styles.css';\nimport 'yet-another-react-lightbox/plugins/counter.css';\nimport 'yet-another-react-lightbox/plugins/thumbnails.css';\n\nimport { Button } from '../basic/Button';\nimport { I } from '../basic/I';\nimport { Div } from '../basic/Div';\nimport { Img } from '../basic/Img';\nimport type { EditorAttrs } from '../../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n G7Core?.t?.(key, params) ?? key;\n\n// ========== Types ==========\n\nexport interface GalleryImage {\n /** 이미지 표시용 URL (라이트박스에서 보여줄 이미지) */\n src: string;\n /** 다운로드용 URL (src와 다를 수 있음, 없으면 src 사용) */\n downloadUrl?: string;\n /** 이미지 제목/캡션 */\n title?: string;\n /** 이미지 설명 */\n description?: string;\n /** 썸네일 URL (없으면 src 사용) */\n thumbnail?: string;\n /** 원본 파일명 (다운로드 시 사용) */\n filename?: string;\n /** 다운로드 시 인증된 요청이 필요한지 여부 (기본값: false) */\n downloadRequiresAuth?: boolean;\n}\n\nexport interface ImageGalleryProps {\n /** 갤러리에 표시할 이미지 배열 */\n images: GalleryImage[];\n /** 라이트박스 열기 여부 */\n isOpen: boolean;\n /** 라이트박스 닫기 콜백 */\n onClose: () => void;\n /** 시작 인덱스 (기본값: 0) */\n startIndex?: number;\n /** 줌 기능 활성화 (기본값: true) */\n enableZoom?: boolean;\n /** 슬라이드쇼 기능 활성화 (기본값: false) */\n enableSlideshow?: boolean;\n /** 전체화면 기능 활성화 (기본값: true) */\n enableFullscreen?: boolean;\n /** 이미지 카운터 표시 (기본값: true) */\n showCounter?: boolean;\n /** 다운로드 버튼 표시 (기본값: true) */\n showDownload?: boolean;\n /** 썸네일 네비게이션 표시 (기본값: true) */\n showThumbnails?: boolean;\n /** 커스텀 다운로드 핸들러 (제공 시 기본 다운로드 로직 대신 실행) */\n onDownload?: (image: GalleryImage, index: number) => void;\n /**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용).\n * 본 컴포넌트는 서드파티 Lightbox 모달(`createPortal` 로 body 렌더)이라 런타임에는\n * 인라인 DOM 이 없다. 편집 모드(editorAttrs 존재)에서는 캔버스 선택·속성 편집이\n * 가능하도록 인라인 placeholder(이미지 썸네일 그리드)를 대신 렌더하고 거기에\n * editorAttrs·id 를 부착한다. 런타임(editorAttrs 미주입)은 종전 Lightbox 동작 그대로.\n *\n */\n editorAttrs?: EditorAttrs;\n\n /** DOM id 속성 (레이아웃 편집기 코어 일괄 ID — 편집 placeholder 루트에 부착) */\n id?: string;\n}\n\n// ========== Helper Functions ==========\n\n/**\n * 인증된 이미지 다운로드 (Blob으로 변환 후 다운로드)\n */\nconst downloadAuthenticatedFile = async (url: string, filename: string): Promise => {\n try {\n const blob = await G7Core.api.get(url, {\n responseType: 'blob',\n });\n\n if (blob) {\n const objectUrl = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = objectUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(objectUrl);\n }\n } catch (error) {\n console.error('Failed to download file:', error);\n G7Core?.toast?.error?.(t('common.download_failed'));\n }\n};\n\n/**\n * 일반 파일 다운로드\n */\nconst downloadFile = (url: string, filename: string): void => {\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n/**\n * 이미지 다운로드 실행\n */\nexport const executeImageDownload = async (image: GalleryImage): Promise => {\n const downloadUrl = image.downloadUrl || image.src;\n const filename = image.filename || image.title || 'image';\n\n if (image.downloadRequiresAuth) {\n await downloadAuthenticatedFile(downloadUrl, filename);\n } else {\n downloadFile(downloadUrl, filename);\n }\n};\n\n// ========== Custom Download Button Component ==========\n\ninterface DownloadButtonProps {\n image: GalleryImage;\n index: number;\n onDownload?: (image: GalleryImage, index: number) => void;\n}\n\nconst DownloadButton: React.FC = ({ image, index, onDownload }) => {\n const [isDownloading, setIsDownloading] = useState(false);\n\n const handleDownload = async (e: React.MouseEvent) => {\n e.stopPropagation();\n\n if (onDownload) {\n onDownload(image, index);\n return;\n }\n\n setIsDownloading(true);\n try {\n await executeImageDownload(image);\n } finally {\n setIsDownloading(false);\n }\n };\n\n return (\n \n {isDownloading ? (\n \n ) : (\n \n )}\n \n );\n};\n\n// ========== Main Component ==========\n\nexport const ImageGallery: React.FC = ({\n images,\n isOpen,\n onClose,\n startIndex = 0,\n enableZoom = true,\n enableSlideshow = false,\n enableFullscreen = true,\n showCounter = true,\n showDownload = true,\n showThumbnails = true,\n onDownload,\n editorAttrs,\n id,\n}) => {\n // 현재 슬라이드 인덱스 (다운로드 버튼용)\n const [currentIndex, setCurrentIndex] = useState(startIndex);\n // 최신 인덱스를 ref로 추적 (클로저 문제 방지)\n const currentIndexRef = useRef(startIndex);\n\n // 이미지를 라이트박스 슬라이드 형식으로 변환 (썸네일 포함)\n const slides: Slide[] = images.map((image) => ({\n src: image.src,\n title: image.title,\n description: image.description,\n }));\n\n // 활성화할 플러그인 목록\n const plugins = [];\n if (enableZoom) plugins.push(Zoom);\n if (enableSlideshow) plugins.push(Slideshow);\n if (enableFullscreen) plugins.push(Fullscreen);\n if (showCounter) plugins.push(Counter);\n if (showThumbnails) plugins.push(Thumbnails);\n\n // 현재 이미지\n const currentImage = images[currentIndex];\n\n // currentIndex가 변경되면 ref도 업데이트\n useEffect(() => {\n currentIndexRef.current = currentIndex;\n }, [currentIndex]);\n\n // 편집 모드(편집기 캔버스) — Lightbox 모달은 인라인 DOM 이 없어 선택·편집 불가.\n // editorAttrs 가 주입되면 인라인 placeholder(썸네일 그리드)를 대신 렌더해\n // 캔버스에서 선택·속성 편집이 가능하게 한다. 런타임(editorAttrs 미주입)은 미진입.\n // (Hooks 규칙 — 모든 hook 호출 이후에 분기 return)\n if (editorAttrs) {\n const previewImages = (images ?? []).slice(0, 4);\n return (\n \n {previewImages.length > 0 ? (\n previewImages.map((image, index) => (\n \n ))\n ) : (\n
\n \n {t('editor.component.image_gallery')}\n
\n )}\n
\n );\n }\n\n return (\n {\n if (index !== currentIndexRef.current) {\n setCurrentIndex(index);\n }\n },\n }}\n zoom={{\n maxZoomPixelRatio: 3,\n zoomInMultiplier: 2,\n doubleTapDelay: 300,\n doubleClickDelay: 300,\n doubleClickMaxStops: 2,\n keyboardMoveDistance: 50,\n wheelZoomDistanceFactor: 100,\n pinchZoomDistanceFactor: 100,\n scrollToZoom: true,\n }}\n carousel={{\n finite: true,\n preload: 2,\n padding: '16px',\n spacing: '30%',\n }}\n animation={{\n fade: 250,\n swipe: 500,\n easing: {\n fade: 'ease',\n swipe: 'ease-out',\n navigation: 'ease-in-out',\n },\n }}\n controller={{\n closeOnBackdropClick: true,\n closeOnPullDown: true,\n closeOnPullUp: true,\n }}\n thumbnails={{\n position: 'bottom',\n width: 120,\n height: 80,\n border: 2,\n borderRadius: 4,\n padding: 4,\n gap: 16,\n showToggle: false,\n vignette: true,\n }}\n toolbar={{\n buttons: [\n showDownload && currentImage && (\n \n ),\n 'close',\n ].filter(Boolean),\n }}\n styles={{\n container: {\n backgroundColor: 'rgba(0, 0, 0, 0.9)',\n },\n }}\n />\n );\n};\n\n// ========== Utility Hook ==========\n\n/**\n * ImageGallery를 쉽게 사용하기 위한 커스텀 훅\n *\n * @example\n * const { openGallery, galleryProps } = useImageGallery();\n *\n * // 이미지 클릭 시\n * openGallery(images, 0)} />\n *\n * // 컴포넌트 렌더링\n * \n */\nexport const useImageGallery = () => {\n const [isOpen, setIsOpen] = useState(false);\n const [images, setImages] = useState([]);\n const [startIndex, setStartIndex] = useState(0);\n\n const openGallery = useCallback((galleryImages: GalleryImage[], index = 0) => {\n setImages(galleryImages);\n setStartIndex(index);\n setIsOpen(true);\n }, []);\n\n const closeGallery = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n return {\n isOpen,\n openGallery,\n closeGallery,\n galleryProps: {\n images,\n isOpen,\n onClose: closeGallery,\n startIndex,\n },\n };\n};\n\nImageGallery.displayName = 'ImageGallery';\n\nexport default ImageGallery;\n","/**\n * ProductImageViewer 컴포넌트\n *\n * 상품 상세 페이지용 이미지 뷰어입니다.\n * 메인 이미지 + 썸네일 리스트 + 라이트박스(ImageGallery) 연동을 지원합니다.\n *\n * @module composite/ProductImageViewer\n */\n\nimport React, { useState, useMemo } from 'react';\nimport { Div } from '../basic/Div';\nimport { Img } from '../basic/Img';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\nimport { ImageGallery, useImageGallery, GalleryImage } from './ImageGallery';\nimport type { EditorAttrs } from '../../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\nconst t = (key: string, params?: Record) =>\n G7Core?.t?.(key, params) ?? key;\n\n// ========== Types ==========\n\nexport interface ProductImage {\n /** 이미지 ID */\n id: number;\n /** 외부 URL (CDN 등, nullable) */\n url: string | null;\n /** API 서빙 URL (항상 존재) */\n download_url: string;\n /** 현재 로케일 대체 텍스트 */\n alt_text_current?: string;\n /** 대표 이미지 여부 */\n is_thumbnail?: boolean;\n /** 정렬 순서 */\n sort_order?: number;\n}\n\nexport interface ProductImageViewerProps {\n /** 상품 이미지 배열 (API 응답 그대로) */\n images: ProductImage[];\n /** 커스텀 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\n// ========== Helper ==========\n\n/**\n * 이미지 표시용 URL 반환 (url 우선, 없으면 download_url)\n */\nconst getImageSrc = (image: ProductImage): string => {\n return image.url ?? image.download_url;\n};\n\n// ========== Main Component ==========\n\nexport const ProductImageViewer: React.FC = ({\n images = [],\n className = '',\n id,\n editorAttrs,\n}) => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const { openGallery, galleryProps } = useImageGallery();\n\n // 이미지를 ImageGallery용 형식으로 변환\n const galleryImages: GalleryImage[] = useMemo(\n () =>\n images.map((img) => ({\n src: getImageSrc(img),\n title: img.alt_text_current ?? '',\n thumbnail: getImageSrc(img),\n downloadUrl: img.download_url,\n filename: img.alt_text_current ?? `image-${img.id}`,\n })),\n [images],\n );\n\n // 이미지 없음\n if (!images || images.length === 0) {\n return (\n \n
\n \n
{t('shop.no_image')}
\n
\n
\n );\n }\n\n const currentImage = images[selectedIndex] ?? images[0];\n\n return (\n
\n {/* 메인 이미지 */}\n
\n openGallery(galleryImages, selectedIndex)}\n aria-label={t('shop.view_image')}\n >\n \n \n
\n\n {/* 썸네일 리스트 (2개 이상일 때만) */}\n {images.length > 1 && (\n
\n {images.map((img, index) => (\n setSelectedIndex(index)}\n aria-label={img.alt_text_current ?? `${t('shop.image')} ${index + 1}`}\n >\n \n \n ))}\n
\n )}\n\n {/* 라이트박스 */}\n \n
\n );\n};\n\nProductImageViewer.displayName = 'ProductImageViewer';\n\nexport default ProductImageViewer;\n","/**\n * QuantitySelector 컴포넌트\n *\n * 수량 선택을 위한 +/- 버튼 컴포넌트입니다.\n * 상품 상세 페이지, 장바구니 등에서 사용됩니다.\n */\n\nimport React from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Input } from '../basic/Input';\nimport { Icon } from '../basic/Icon';\nimport type { EditorAttrs } from '../../types';\n\ninterface QuantitySelectorProps {\n /** 현재 수량 */\n value: number;\n /** 최소 수량 */\n min?: number;\n /** 최대 수량 */\n max?: number;\n /** 수량 변경 콜백 */\n onChange: (value: number) => void;\n /** 컴포넌트 크기 */\n size?: 'sm' | 'md' | 'lg';\n /** 비활성화 여부 */\n disabled?: boolean;\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * 수량 선택 컴포넌트\n *\n * @example\n * ```tsx\n * const [quantity, setQuantity] = useState(1);\n *\n * \n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"QuantitySelector\",\n * \"props\": {\n * \"value\": \"{{item.quantity}}\",\n * \"min\": 1,\n * \"max\": \"{{item.stock}}\",\n * \"size\": \"sm\"\n * },\n * \"actions\": [{\n * \"event\": \"onChange\",\n * \"type\": \"change\",\n * \"handler\": \"updateQuantity\",\n * \"params\": { \"itemId\": \"{{item.id}}\", \"quantity\": \"{{$args[0]}}\" }\n * }]\n * }\n * ```\n */\nconst QuantitySelector: React.FC = ({\n value,\n min = 1,\n max = 999,\n onChange,\n size = 'md',\n disabled = false,\n className = '',\n id,\n editorAttrs,\n}) => {\n const sizeClasses = {\n sm: {\n container: 'h-8',\n button: 'w-8 h-8 text-sm',\n input: 'w-10 text-sm',\n },\n md: {\n container: 'h-10',\n button: 'w-10 h-10',\n input: 'w-14',\n },\n lg: {\n container: 'h-12',\n button: 'w-12 h-12 text-lg',\n input: 'w-16 text-lg',\n },\n };\n\n const classes = sizeClasses[size];\n\n const handleDecrease = () => {\n if (value > min && !disabled) {\n onChange(value - 1);\n }\n };\n\n const handleIncrease = () => {\n if (value < max && !disabled) {\n onChange(value + 1);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent) => {\n const newValue = parseInt(e.target.value, 10);\n if (!isNaN(newValue)) {\n const clampedValue = Math.max(min, Math.min(max, newValue));\n onChange(clampedValue);\n }\n };\n\n const handleInputBlur = (e: React.FocusEvent) => {\n const newValue = parseInt(e.target.value, 10);\n if (isNaN(newValue) || newValue < min) {\n onChange(min);\n } else if (newValue > max) {\n onChange(max);\n }\n };\n\n const isMinDisabled = disabled || value <= min;\n const isMaxDisabled = disabled || value >= max;\n\n return (\n \n {/* 감소 버튼 */}\n \n \n \n\n {/* 수량 입력 */}\n \n\n {/* 증가 버튼 */}\n \n \n \n
\n );\n};\n\nexport default QuantitySelector;\n","/**\n * PostReactions 컴포넌트\n *\n * 게시글에 대한 리액션(이모지) 버튼 그룹입니다.\n * 좋아요, 웃겨요, 동의해요, 감사해요, 놀라워요 5종 리액션을 지원합니다.\n */\n\nimport React from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport type { EditorAttrs } from '../../types';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:PostReactions')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:PostReactions]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:PostReactions]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:PostReactions]', ...args),\n};\n\n/**\n * G7Core 번역 함수\n */\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\ntype ReactionType = 'like' | 'funny' | 'agree' | 'thanks' | 'wow';\n\ninterface ReactionCount {\n type: ReactionType;\n count: number;\n}\n\ninterface PostReactionsProps {\n /** 각 리액션별 카운트 */\n reactions: ReactionCount[];\n /** 현재 사용자의 리액션 (없으면 null) */\n userReaction?: ReactionType | null;\n /** 게시글 ID */\n postId: number;\n /** 리액션 클릭 콜백 */\n onReact?: (type: ReactionType) => void;\n /** 컴포넌트 크기 */\n size?: 'sm' | 'md' | 'lg';\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n /** 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread) */\n editorAttrs?: EditorAttrs;\n}\n\ninterface ReactionConfig {\n type: ReactionType;\n emoji: string;\n labelKey: string;\n activeColor: string;\n}\n\n/**\n * 리액션 설정\n */\nconst REACTION_CONFIGS: ReactionConfig[] = [\n { type: 'like', emoji: '👍', labelKey: 'board.reactions.like', activeColor: 'bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400' },\n { type: 'funny', emoji: '😂', labelKey: 'board.reactions.funny', activeColor: 'bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400' },\n { type: 'agree', emoji: '👌', labelKey: 'board.reactions.agree', activeColor: 'bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400' },\n { type: 'thanks', emoji: '🙏', labelKey: 'board.reactions.thanks', activeColor: 'bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400' },\n { type: 'wow', emoji: '😮', labelKey: 'board.reactions.wow', activeColor: 'bg-orange-100 dark:bg-orange-900/30 text-orange-600 dark:text-orange-400' },\n];\n\n/**\n * 게시글 리액션 컴포넌트\n *\n * @example\n * ```tsx\n * handleReact(type)}\n * />\n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"PostReactions\",\n * \"props\": {\n * \"reactions\": \"{{post.data.reactions}}\",\n * \"userReaction\": \"{{post.data.user_reaction}}\",\n * \"postId\": \"{{post.data.id}}\"\n * }\n * }\n * ```\n */\nconst PostReactions: React.FC = ({\n reactions,\n userReaction,\n postId,\n onReact,\n size = 'md',\n className = '',\n id,\n editorAttrs,\n}) => {\n const sizeClasses = {\n sm: 'px-2 py-1 text-xs gap-1',\n md: 'px-3 py-1.5 text-sm gap-1.5',\n lg: 'px-4 py-2 text-base gap-2',\n };\n\n const emojiSizes = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n };\n\n const getReactionCount = (type: ReactionType): number => {\n const reaction = reactions.find((r) => r.type === type);\n return reaction?.count ?? 0;\n };\n\n const handleClick = async (type: ReactionType) => {\n if (onReact) {\n onReact(type);\n return;\n }\n\n // 기본 API 호출\n try {\n const response = await fetch(`/api/posts/${postId}/reactions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ type }),\n credentials: 'include',\n });\n\n if (!response.ok) {\n throw new Error('리액션 처리 실패');\n }\n\n // 성공 시 페이지 새로고침 또는 상태 업데이트\n window.location.reload();\n } catch (error) {\n logger.error('리액션 오류:', error);\n }\n };\n\n return (\n
\n {REACTION_CONFIGS.map((config) => {\n const count = getReactionCount(config.type);\n const isActive = userReaction === config.type;\n\n return (\n handleClick(config.type)}\n className={`\n inline-flex items-center rounded-full border transition-colors\n ${sizeClasses[size]}\n ${isActive\n ? `${config.activeColor} border-transparent`\n : 'border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700'\n }\n `}\n title={t(config.labelKey)}\n >\n {config.emoji}\n {t(config.labelKey)}\n {count > 0 && (\n {count}\n )}\n \n );\n })}\n
\n );\n};\n\nexport default PostReactions;\n","/**\n * RichTextEditor 컴포넌트\n *\n * 게시글 작성을 위한 리치 텍스트 에디터입니다.\n * TipTap 또는 Quill 등의 외부 라이브러리를 래핑합니다.\n *\n * @note 실제 구현 시 TipTap, Quill, CKEditor 등 선택하여 래핑\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Div } from '../basic/Div';\n\n// Logger 설정 (G7Core 초기화 전에도 동작하도록 폴백 포함)\nconst logger = ((window as any).G7Core?.createLogger?.('Comp:RichTextEditor')) ?? {\n log: (...args: unknown[]) => console.log('[Comp:RichTextEditor]', ...args),\n warn: (...args: unknown[]) => console.warn('[Comp:RichTextEditor]', ...args),\n error: (...args: unknown[]) => console.error('[Comp:RichTextEditor]', ...args),\n};\nimport { Button } from '../basic/Button';\nimport { Input } from '../basic/Input';\nimport { Textarea } from '../basic/Textarea';\nimport { H3 } from '../basic/H3';\nimport { Label } from '../basic/Label';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\ninterface RichTextEditorProps {\n /** 필드 이름 */\n name: string;\n /** 초기 HTML 값 */\n initialValue?: string;\n /** 플레이스홀더 */\n placeholder?: string;\n /** 값 변경 콜백 */\n onChange?: (html: string) => void;\n /** 이미지 업로드 URL */\n imageUploadUrl?: string;\n /** 최소 높이 */\n minHeight?: string;\n /** 비활성화 여부 */\n disabled?: boolean;\n /** 추가 CSS 클래스 */\n className?: string;\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\ntype FormatType =\n | 'bold'\n | 'italic'\n | 'underline'\n | 'strike'\n | 'code'\n | 'h1'\n | 'h2'\n | 'h3'\n | 'bulletList'\n | 'orderedList'\n | 'blockquote'\n | 'link'\n | 'image';\n\n/**\n * 리치 텍스트 에디터 컴포넌트\n *\n * @example\n * ```tsx\n * setContent(html)}\n * />\n * ```\n *\n * @example\n * ```json\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"RichTextEditor\",\n * \"props\": {\n * \"name\": \"content\",\n * \"placeholder\": \"$t:board.form.content_placeholder\",\n * \"initialValue\": \"{{post.data?.content ?? ''}}\"\n * }\n * }\n * ```\n */\nconst RichTextEditor: React.FC = ({\n name,\n initialValue = '',\n placeholder,\n onChange,\n imageUploadUrl = '/api/upload/image',\n minHeight = '300px',\n disabled = false,\n className = '',\n id,\n editorAttrs,\n}) => {\n const editorRef = useRef(null);\n const [content, setContent] = useState(initialValue);\n const [showCodeView, setShowCodeView] = useState(false);\n const [showLinkModal, setShowLinkModal] = useState(false);\n const [linkUrl, setLinkUrl] = useState('');\n\n // 에디터 초기화 (실제 구현 시 TipTap/Quill 초기화)\n useEffect(() => {\n // 초기값 설정 (dangerouslySetInnerHTML 대신 직접 설정)\n if (editorRef.current && !editorRef.current.innerHTML) {\n editorRef.current.innerHTML = initialValue;\n }\n }, [initialValue]);\n\n // 값 변경 시 콜백 호출\n useEffect(() => {\n if (onChange) {\n onChange(content);\n }\n }, [content, onChange]);\n\n // 포맷 적용 (실제 구현 시 에디터 API 사용)\n const applyFormat = (format: FormatType) => {\n // TODO: 에디터 라이브러리의 포맷 API 호출\n logger.log('Apply format:', format);\n };\n\n // 이미지 업로드\n const handleImageUpload = async (file: File) => {\n const formData = new FormData();\n formData.append('file', file);\n\n try {\n const response = await fetch(imageUploadUrl, {\n method: 'POST',\n body: formData,\n credentials: 'include',\n });\n\n if (!response.ok) throw new Error('업로드 실패');\n\n const data = await response.json();\n // TODO: 에디터에 이미지 삽입\n logger.log('Image uploaded:', data.url);\n } catch (error) {\n logger.error('이미지 업로드 오류:', error);\n }\n };\n\n // 파일 선택 핸들러\n const handleFileSelect = (e: React.ChangeEvent) => {\n const file = e.target.files?.[0];\n if (file) {\n handleImageUpload(file);\n }\n };\n\n // 링크 삽입\n const insertLink = () => {\n if (linkUrl) {\n // TODO: 에디터에 링크 삽입\n logger.log('Insert link:', linkUrl);\n setShowLinkModal(false);\n setLinkUrl('');\n }\n };\n\n const toolbarButtons: { format: FormatType; icon: React.ReactNode; title: string }[] = [\n { format: 'bold', icon: 'B', title: t('editor.toolbar.bold') },\n { format: 'italic', icon: 'I', title: t('editor.toolbar.italic') },\n { format: 'underline', icon: 'U', title: t('editor.toolbar.underline') },\n { format: 'strike', icon: 'S', title: t('editor.toolbar.strike') },\n { format: 'code', icon: '', title: t('editor.toolbar.code') },\n ];\n\n const headingButtons: { format: FormatType; label: string }[] = [\n { format: 'h1', label: 'H1' },\n { format: 'h2', label: 'H2' },\n { format: 'h3', label: 'H3' },\n ];\n\n const listButtons: { format: FormatType; icon: string; title: string }[] = [\n { format: 'bulletList', icon: '•', title: t('editor.toolbar.bullet_list') },\n { format: 'orderedList', icon: '1.', title: t('editor.toolbar.ordered_list') },\n { format: 'blockquote', icon: '❝', title: t('editor.toolbar.blockquote') },\n ];\n\n return (\n
\n {/* 툴바 */}\n
\n {/* 텍스트 포맷 */}\n
\n {toolbarButtons.map((btn) => (\n applyFormat(btn.format)}\n disabled={disabled}\n className=\"w-8 h-8 flex items-center justify-center text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50\"\n title={btn.title}\n >\n {btn.icon}\n \n ))}\n
\n\n {/* 제목 */}\n
\n {headingButtons.map((btn) => (\n applyFormat(btn.format)}\n disabled={disabled}\n className=\"px-2 h-8 text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50\"\n >\n {btn.label}\n \n ))}\n
\n\n {/* 리스트 */}\n
\n {listButtons.map((btn) => (\n applyFormat(btn.format)}\n disabled={disabled}\n className=\"w-8 h-8 flex items-center justify-center text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50\"\n title={btn.title}\n >\n {btn.icon}\n \n ))}\n
\n\n {/* 미디어 */}\n
\n setShowLinkModal(true)}\n disabled={disabled}\n className=\"w-8 h-8 flex items-center justify-center text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50\"\n title={t('editor.toolbar.link')}\n >\n 🔗\n \n \n
\n\n {/* 코드 보기 토글 */}\n setShowCodeView(!showCodeView)}\n disabled={disabled}\n className={`px-2 h-8 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded disabled:opacity-50 ${\n showCodeView ? 'bg-gray-200 dark:bg-gray-700' : ''\n }`}\n >\n {''}\n {t('editor.toolbar.code_view')}\n \n
\n\n {/* 에디터 영역 */}\n {showCodeView ? (\n setContent(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className=\"w-full p-4 bg-gray-900 text-gray-100 font-mono text-sm focus:outline-none resize-none\"\n style={{ minHeight }}\n />\n ) : (\n setContent(e.currentTarget.innerHTML)}\n className=\"p-4 bg-white dark:bg-gray-900 text-gray-900 dark:text-white focus:outline-none prose dark:prose-invert max-w-none\"\n style={{ minHeight }}\n data-placeholder={placeholder}\n />\n )}\n\n {/* 숨겨진 input (폼 전송용) */}\n \n\n {/* 링크 모달 */}\n {showLinkModal && (\n
\n
\n

\n {t('editor.link_modal.title')}\n

\n setLinkUrl(e.target.value)}\n placeholder=\"https://example.com\"\n className=\"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white mb-4\"\n />\n
\n {\n setShowLinkModal(false);\n setLinkUrl('');\n }}\n className=\"px-4 py-2 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg\"\n >\n {t('common.cancel')}\n \n \n {t('editor.link_modal.insert')}\n \n
\n
\n
\n )}\n
\n );\n};\n\nexport default RichTextEditor;\n","import React, { useMemo } from 'react';\n// @ts-ignore - DOMPurify 타입 정의 없음\nimport DOMPurify from 'dompurify';\nimport { Div } from '../basic/Div';\nimport type { EditorAttrs } from '../../types';\n\nexport interface HtmlContentProps {\n /**\n * 콘텐츠 (HTML 또는 일반 텍스트)\n */\n content?: string;\n\n /**\n * 콘텐츠가 HTML 형식인지 여부\n * - true: HTML 렌더링 (DOMPurify 적용, prose 스타일)\n * - false: 일반 텍스트 (whitespace-pre-wrap으로 줄바꿈 보존)\n * @default true\n */\n isHtml?: boolean;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * DOMPurify 설정 오버라이드 (isHtml=true일 때만 사용)\n */\n purifyConfig?: any;\n\n /**\n * 레이아웃 JSON에서 text 속성으로 전달되는 콘텐츠\n * content보다 우선순위가 높음\n */\n text?: string;\n\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * HtmlContent 콘텐츠 렌더링 컴포넌트\n *\n * HTML과 일반 텍스트를 안전하게 렌더링하는 범용 composite 컴포넌트입니다.\n * - isHtml=true: DOMPurify를 사용하여 XSS 공격 방지\n * - isHtml=false: 일반 텍스트로 렌더링 (줄바꿈 보존)\n *\n * @example\n * // HTML 렌더링 (기본값)\n * 안녕하세요

\" />\n *\n * // 일반 텍스트 렌더링\n * \n *\n * // 커스텀 클래스 적용\n * 게시글 내용

\"\n * className=\"prose dark:prose-invert\"\n * />\n *\n * // DOMPurify 설정 커스터마이징 (HTML 모드)\n * 내용

\"\n * purifyConfig={{ ALLOWED_TAGS: ['p', 'br', 'strong', 'em'] }}\n * />\n */\nexport const HtmlContent: React.FC = ({\n content,\n text,\n isHtml = true,\n className = '',\n purifyConfig,\n id,\n editorAttrs,\n}) => {\n // text prop이 우선순위가 높음 (레이아웃 JSON에서 사용)\n const actualContent = text ?? content ?? '';\n\n // 빈 값 처리\n if (!actualContent || actualContent.trim() === '') {\n return null;\n }\n\n // isHtml=false: 일반 텍스트 렌더링\n if (!isHtml) {\n const textClasses = `\n whitespace-pre-wrap\n text-gray-900 dark:text-gray-100\n font-sans\n ${className}\n `.trim().replace(/\\s+/g, ' ');\n\n return (\n
\n {actualContent}\n
\n );\n }\n\n // 기본 DOMPurify 설정 (FORBID 방식: 위험 태그/속성만 차단, 나머지 허용)\n const defaultConfig: any = {\n FORBID_TAGS: [\n // 스크립트 실행\n 'script', 'noscript',\n // 외부 콘텐츠 삽입\n 'iframe', 'frame', 'frameset', 'object', 'embed', 'applet', 'portal',\n // 폼 요소 (피싱 방지)\n 'form', 'input', 'textarea', 'select', 'button',\n // 메타/스타일 조작\n 'style', 'link', 'meta', 'base',\n // 구조 태그 주입\n 'body', 'head', 'html', 'title',\n // SVG/MathML (XSS 벡터)\n 'svg', 'math',\n // 미디어 이벤트 핸들러 (onerror, onloadstart)\n 'audio', 'video', 'source', 'track', 'canvas',\n // UI 오버레이/이벤트\n 'details', 'dialog',\n // HTML 파서 혼란/sanitizer 우회\n 'plaintext', 'xmp', 'listing',\n // 레거시/비표준\n 'marquee', 'noframes', 'noembed', 'template', 'slot',\n ],\n FORBID_ATTR: [\n 'onerror', 'onload', 'onclick', 'onmouseover', 'onfocus', 'onblur',\n 'ontoggle', 'oncanplay', 'onloadstart',\n 'formaction', 'xlink:href', 'action',\n ],\n ALLOW_DATA_ATTR: true,\n ADD_ATTR: ['target'],\n };\n\n // sanitize된 HTML을 메모이제이션\n const sanitizedHtml = useMemo(() => {\n const config = purifyConfig\n ? {\n ...defaultConfig,\n ...purifyConfig,\n // 보안 기본값은 항상 유지 (사용자 설정으로 덮어쓰기 방지)\n FORBID_TAGS: [...defaultConfig.FORBID_TAGS, ...(purifyConfig.FORBID_TAGS || [])],\n FORBID_ATTR: [...defaultConfig.FORBID_ATTR, ...(purifyConfig.FORBID_ATTR || [])],\n }\n : defaultConfig;\n const cleaned = DOMPurify.sanitize(actualContent, config) as unknown as string;\n\n // target=\"_blank\" 링크에 rel 속성 추가 (보안)\n return cleaned.replace(\n /]*?)href=[\"']([^\"']+)[\"']([^>]*?)>/gi,\n (match: string, before: string, href: string, after: string) => {\n if (href.startsWith('http://') || href.startsWith('https://')) {\n if (!match.includes('rel=')) {\n return ``;\n }\n }\n return match;\n }\n );\n }, [actualContent, purifyConfig]);\n\n // 컨테이너 클래스 조합\n const containerClasses = `\n prose dark:prose-invert max-w-none\n prose-p:my-2\n prose-headings:font-bold prose-headings:mt-6 prose-headings:mb-4\n prose-h1:text-2xl prose-h2:text-xl prose-h3:text-lg\n prose-a:text-blue-600 dark:prose-a:text-blue-400\n prose-a:no-underline hover:prose-a:underline\n prose-blockquote:border-l-4 prose-blockquote:border-gray-300 dark:prose-blockquote:border-gray-600\n prose-blockquote:pl-4 prose-blockquote:italic\n prose-code:bg-gray-100 dark:prose-code:bg-gray-800\n prose-code:px-1 prose-code:py-0.5 prose-code:rounded\n prose-pre:bg-gray-100 dark:prose-pre:bg-gray-800\n prose-pre:p-4 prose-pre:rounded-lg prose-pre:overflow-x-auto\n [&_table]:w-full [&_table]:border-collapse [&_table]:border [&_table]:border-gray-300\n dark:[&_table]:border-gray-600\n [&_th]:border [&_th]:border-gray-300 [&_th]:px-4 [&_th]:py-2 [&_th]:bg-gray-100 [&_th]:text-left\n dark:[&_th]:border-gray-600 dark:[&_th]:bg-gray-800\n [&_td]:border [&_td]:border-gray-300 [&_td]:px-4 [&_td]:py-2\n dark:[&_td]:border-gray-600\n [&_tr:hover]:bg-gray-50 dark:[&_tr:hover]:bg-gray-700/50\n after:content-[''] after:block after:clear-both\n ${className}\n `.trim().replace(/\\s+/g, ' ');\n\n return (\n \n );\n};\n","import React, { useCallback, useState } from 'react';\nimport { Div } from '../basic/Div';\nimport { Label } from '../basic/Label';\nimport { Button } from '../basic/Button';\nimport { Textarea } from '../basic/Textarea';\nimport { Input } from '../basic/Input';\nimport { HtmlContent } from './HtmlContent';\nimport type { EditorAttrs } from '../../types';\n\n// G7Core 참조\nconst G7Core = () => (window as any).G7Core;\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n G7Core()?.t?.(key, params) ?? key;\n\nexport interface HtmlEditorProps {\n /**\n * 콘텐츠 값\n */\n content?: string;\n\n /**\n * 콘텐츠 변경 콜백\n * Form 자동 바인딩을 위해 이벤트 객체 형식으로 전달\n */\n onChange?: (event: { target: { name: string; value: string } }) => void;\n\n /**\n * HTML 모드 여부 (미리보기 버튼 표시 조건)\n * 자동 바인딩된 값을 Layout JSON에서 전달받아 사용\n */\n isHtml?: boolean;\n\n /**\n * HTML 모드 변경 콜백\n * Form 자동 바인딩을 위해 이벤트 객체 형식으로 전달\n */\n onIsHtmlChange?: (event: { target: { name: string; checked: boolean } }) => void;\n\n /**\n * Textarea 행 수\n * @default 15\n */\n rows?: number;\n\n /**\n * placeholder 텍스트\n */\n placeholder?: string;\n\n /**\n * 라벨 텍스트\n */\n label?: string;\n\n /**\n * HTML 모드 체크박스 표시 여부\n * @default true\n */\n showHtmlModeToggle?: boolean;\n\n /**\n * HtmlContent 렌더링 시 적용할 클래스\n */\n contentClassName?: string;\n\n /**\n * DOMPurify 설정 (HTML 모드)\n */\n purifyConfig?: any;\n\n /**\n * 추가 className\n */\n className?: string;\n\n /**\n * 콘텐츠 필드 name 속성\n * @default 'content'\n */\n name?: string;\n\n /**\n * HTML 모드 체크박스 name 속성\n * @default 'content_mode'\n */\n htmlFieldName?: string;\n\n /**\n * 읽기 전용 모드\n */\n readOnly?: boolean;\n\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * HtmlEditor 컴포넌트\n *\n * HTML과 일반 텍스트를 편집할 수 있는 범용 에디터 컴포넌트입니다.\n * - HTML 모드 체크박스는 자동 바인딩됩니다 (htmlFieldName prop 사용)\n * - HTML 모드에서는 편집/미리보기 토글 가능 (내부 상태 관리)\n * - 일반 텍스트 모드에서는 Textarea만 표시\n *\n * @example\n * // Layout JSON에서 사용 (자동 바인딩)\n * {\n * \"type\": \"composite\",\n * \"name\": \"HtmlEditor\",\n * \"props\": {\n * \"content\": \"{{_local.form?.content}}\",\n * \"name\": \"content\",\n * \"htmlFieldName\": \"content_mode\"\n * }\n * }\n */\nexport const HtmlEditor: React.FC = ({\n content = '',\n onChange,\n isHtml: isHtmlProp = false,\n onIsHtmlChange,\n rows = 15,\n placeholder = '',\n label,\n showHtmlModeToggle = true,\n contentClassName = '',\n purifyConfig,\n className = '',\n name = 'content',\n htmlFieldName = 'content_mode',\n readOnly = false,\n id,\n editorAttrs,\n}) => {\n // HTML 모드 내부 상태 (Toggle과 동기화)\n const [isHtml, setIsHtml] = useState(isHtmlProp);\n\n // 콘텐츠 내부 상태 (입력값 즉시 반영용)\n const [localContent, setLocalContent] = useState(content);\n\n // 미리보기 모드 내부 상태 (컴포넌트 자체에서 관리)\n const [previewMode, setPreviewMode] = useState(false);\n\n // Props 변경 시 내부 상태 동기화\n React.useEffect(() => {\n setIsHtml(isHtmlProp);\n }, [isHtmlProp]);\n\n // content prop 변경 시 로컬 상태 동기화\n React.useEffect(() => {\n setLocalContent(content);\n }, [content]);\n\n // 콘텐츠 변경 핸들러\n const handleContentChange = useCallback((e: React.ChangeEvent) => {\n const newContent = e.target.value;\n\n // 로컬 상태 즉시 업데이트 (입력 반응성)\n setLocalContent(newContent);\n\n // Props 콜백 호출 (G7Core.createChangeEvent 사용으로 ActionDispatcher 호환성 확보)\n if (onChange) {\n const event = G7Core()?.createChangeEvent?.({ value: newContent, name, type: 'textarea' })\n ?? { target: { name, value: newContent } };\n onChange(event);\n }\n }, [onChange, name]);\n\n // HTML 모드 변경 핸들러\n const handleHtmlModeChange = useCallback((e: React.ChangeEvent) => {\n const isHtmlMode = e.target.checked;\n\n // 로컬 상태 즉시 업데이트 (미리보기 버튼 표시용)\n setIsHtml(isHtmlMode);\n\n // HTML 모드 비활성화 시 미리보기 모드도 함께 비활성화\n if (!isHtmlMode) {\n setPreviewMode(false);\n }\n\n // Props 콜백 호출 (G7Core.createChangeEvent 사용으로 ActionDispatcher 호환성 확보)\n if (onIsHtmlChange) {\n const event = G7Core()?.createChangeEvent?.({ checked: isHtmlMode, name: htmlFieldName, type: 'checkbox' })\n ?? { target: { name: htmlFieldName, checked: isHtmlMode } };\n onIsHtmlChange(event);\n }\n }, [onIsHtmlChange, htmlFieldName]);\n\n // 미리보기 모드 토글 핸들러 (내부 상태만 변경)\n const handlePreviewModeToggle = useCallback(() => {\n setPreviewMode(prev => !prev);\n }, []);\n\n return (\n
\n {/* 라벨 및 HTML 모드 토글 */}\n
\n\n {label && (\n \n )}\n\n
\n {/* 미리보기 버튼 (HTML 모드일 때만 표시) */}\n {isHtml && !readOnly && (\n \n {previewMode ? t('common.preview_off') : t('common.preview')}\n \n )}\n\n {showHtmlModeToggle && (\n \n )}\n
\n
\n\n {/* 콘텐츠 편집 영역 */}\n {!previewMode && (\n \n )}\n\n {/* 미리보기 영역 (미리보기 모드일 때만) */}\n {previewMode && (\n
\n \n
\n )}\n\n
\n );\n};\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Span } from '../basic/Span';\nimport { Icon } from '../basic/Icon';\nimport type { EditorAttrs } from '../../types';\n\n/**\n * G7Core 다국어 헬퍼\n *\n * @param key 다국어 키\n * @return 번역된 문자열\n */\nconst t = (key: string): string =>\n (window as any).G7Core?.t?.(key) ?? key;\n\nexport interface ExpandableContentProps {\n /**\n * 접힌 상태의 최대 높이 (px)\n * @default 500\n */\n maxHeight?: number;\n\n /**\n * 펼치기 버튼 텍스트\n */\n expandText?: string;\n\n /**\n * 접기 버튼 텍스트\n */\n collapseText?: string;\n\n /**\n * 사용자 정의 클래스\n */\n className?: string;\n\n /**\n * children 렌더링\n */\n children?: React.ReactNode;\n\n /**\n * DOM id 속성 (레이아웃 편집기 코어 일괄 ID)\n */\n id?: string;\n/**\n * 레이아웃 편집기 주입 속성 (편집 모드 전용, 루트에 spread)\n */\n editorAttrs?: EditorAttrs;\n}\n\n/**\n * ExpandableContent 컴포넌트\n *\n * 콘텐츠가 maxHeight를 초과하면 그라데이션 오버레이와 펼치기/접기 버튼을 표시합니다.\n * 콘텐츠가 짧으면 버튼/그라데이션 없이 전체 콘텐츠를 그대로 표시합니다.\n *\n * @example\n * // 레이아웃 JSON에서 사용\n * {\n * \"type\": \"composite\",\n * \"name\": \"ExpandableContent\",\n * \"props\": { \"maxHeight\": 500 },\n * \"children\": [\n * {\n * \"type\": \"composite\",\n * \"name\": \"HtmlContent\",\n * \"props\": { \"content\": \"{{product.data?.description_localized ?? ''}}\" }\n * }\n * ]\n * }\n */\nexport const ExpandableContent: React.FC = ({\n maxHeight = 500,\n expandText,\n collapseText,\n className = '',\n children,\n id,\n editorAttrs,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const [needsExpand, setNeedsExpand] = useState(false);\n const contentRef = useRef(null);\n\n /**\n * 콘텐츠 높이를 측정하여 펼치기 버튼 필요 여부를 결정합니다.\n */\n const checkHeight = useCallback(() => {\n if (contentRef.current) {\n const scrollHeight = contentRef.current.scrollHeight;\n setNeedsExpand(scrollHeight > maxHeight);\n }\n }, [maxHeight]);\n\n useEffect(() => {\n checkHeight();\n\n // 이미지 로드 후 높이 재측정\n const container = contentRef.current;\n if (!container) return;\n\n const images = container.querySelectorAll('img');\n images.forEach((img) => {\n if (!img.complete) {\n img.addEventListener('load', checkHeight);\n }\n });\n\n // ResizeObserver로 동적 콘텐츠 변경 감지\n let observer: ResizeObserver | null = null;\n if (typeof ResizeObserver !== 'undefined') {\n observer = new ResizeObserver(checkHeight);\n observer.observe(container);\n }\n\n return () => {\n images.forEach((img) => {\n img.removeEventListener('load', checkHeight);\n });\n observer?.disconnect();\n };\n }, [checkHeight, children]);\n\n const toggleExpand = () => {\n setIsExpanded((prev) => !prev);\n };\n\n const resolvedExpandText = expandText || t('sirsoft-ecommerce.shop.product.expand_detail');\n const resolvedCollapseText = collapseText || t('sirsoft-ecommerce.shop.product.collapse_detail');\n\n return (\n
\n {/* 콘텐츠 컨테이너 */}\n
\n \n {children}\n
\n\n {/* 그라데이션 오버레이 */}\n {!isExpanded && needsExpand && (\n
\n )}\n
\n\n {/* 펼치기/접기 버튼 (전체 너비 바 스타일) */}\n {needsExpand && (\n \n \n {isExpanded ? resolvedCollapseText : resolvedExpandText}\n \n \n \n )}\n
\n );\n};\n\nexport default ExpandableContent;\n","import React, { useEffect, useRef } from 'react';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { Icon } from '../basic/Icon';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n /**\n * 타이틀 옆에 표시할 아이콘 이름 (Font Awesome)\n * @example \"lock\", \"trash\", \"warning\"\n */\n icon?: string;\n /**\n * 아이콘 색상 클래스 (Tailwind)\n * @default \"text-gray-500\"\n */\n iconClassName?: string;\n /**\n * Backdrop(오버레이) 클릭 시 모달 닫기 여부\n * @default true\n */\n closeOnBackdropClick?: boolean;\n /**\n * closeOnOverlayClick 별칭 (레이아웃 JSON 호환)\n * @default true\n */\n closeOnOverlayClick?: boolean;\n /**\n * 헤더 닫기 버튼 표시 여부\n * @default true\n */\n showCloseButton?: boolean;\n /**\n * ESC 키로 모달 닫기 허용 여부\n * @default true\n */\n closeOnEscape?: boolean;\n children?: React.ReactNode;\n width?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Modal 집합 컴포넌트\n *\n * Div + Button 기본 컴포넌트를 조합하여 모달 UI를 구성합니다.\n * ESC 키 닫기, 포커스 트랩, 오버레이 클릭 닫기 기능을 포함합니다.\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"Modal\",\n * \"props\": {\n * \"isOpen\": \"{{modals.userEdit}}\",\n * \"title\": \"사용자 편집\",\n * \"width\": \"600px\"\n * },\n * \"children\": [...]\n * }\n */\nexport const Modal: React.FC = ({\n isOpen,\n onClose,\n title,\n icon,\n iconClassName = 'text-gray-500 dark:text-gray-400',\n closeOnBackdropClick = true,\n closeOnOverlayClick,\n showCloseButton = true,\n closeOnEscape = true,\n children,\n width = '500px',\n className = '',\n style,\n}) => {\n // closeOnOverlayClick 별칭 지원 (레이아웃 JSON 호환)\n const shouldCloseOnBackdrop = closeOnOverlayClick !== undefined\n ? closeOnOverlayClick\n : closeOnBackdropClick;\n const modalRef = useRef(null);\n const previousFocusRef = useRef(null);\n\n // ESC 키로 모달 닫기\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen && closeOnEscape) {\n onClose();\n }\n };\n\n if (isOpen && closeOnEscape) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isOpen, onClose, closeOnEscape]);\n\n // 포커스 트랩\n useEffect(() => {\n if (isOpen && modalRef.current) {\n // 모달 열릴 때 현재 포커스 저장\n previousFocusRef.current = document.activeElement as HTMLElement;\n\n // 모달 내부 포커스 가능한 요소들\n const focusableElements = modalRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n // 첫 번째 요소에 포커스\n firstElement?.focus();\n\n // Tab 키 핸들러 (포커스 트랩)\n const handleTab = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n if (event.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement?.focus();\n }\n } else {\n // Tab\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement?.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleTab);\n\n return () => {\n document.removeEventListener('keydown', handleTab);\n // 모달 닫힐 때 이전 포커스 복원\n previousFocusRef.current?.focus();\n };\n }\n }, [isOpen]);\n\n // body 스크롤 방지\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = '';\n };\n }\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n // z-index를 style에서 가져오거나 기본값 50 사용\n const zIndex = style?.zIndex ?? 50;\n\n return (\n \n {/* Overlay */}\n \n\n {/* Modal Content */}\n e.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n >\n {/* Header */}\n {(title || icon || showCloseButton) && (\n
\n {(title || icon) && (\n \n {icon && }\n {title}\n
\n )}\n {showCloseButton && (\n \n \n \n \n \n )}\n
\n )}\n\n {/* Body */}\n
\n {children}\n
\n
\n
\n );\n};\n","import React from 'react';\nimport { Modal } from './Modal';\nimport { Div } from '../basic/Div';\nimport { Button } from '../basic/Button';\nimport { P } from '../basic/P';\nimport { Span } from '../basic/Span';\nimport { I } from '../basic/I';\n\n// G7Core.t() 번역 함수 참조\nconst t = (key: string, params?: Record) =>\n (window as any).G7Core?.t?.(key, params) ?? key;\n\nexport interface ConfirmDialogProps {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n message: string | React.ReactNode;\n confirmText?: string;\n cancelText?: string;\n onConfirm: () => void;\n onCancel?: () => void;\n confirmButtonVariant?: 'primary' | 'secondary' | 'danger' | 'ghost';\n cancelButtonVariant?: 'primary' | 'secondary' | 'danger' | 'ghost';\n width?: string;\n closeOnOverlay?: boolean;\n /** 로딩 중 여부 (확인 버튼 비활성화 및 텍스트 변경) */\n isLoading?: boolean;\n /** 로딩 중 확인 버튼에 표시할 텍스트 */\n loadingText?: string;\n}\n\n/**\n * ConfirmDialog 집합 컴포넌트\n *\n * Modal 기반 확인/취소 다이얼로그 컴포넌트.\n * 사용자에게 확인을 요청하고 확인/취소 중 하나를 선택하도록 합니다.\n *\n * 기본 컴포넌트 조합:\n * - Modal > P(message) + Button(확인) + Button(취소)\n *\n * @example\n * // 레이아웃 JSON 사용 예시\n * {\n * \"name\": \"ConfirmDialog\",\n * \"props\": {\n * \"isOpen\": \"{{dialogs.deleteConfirm}}\",\n * \"title\": \"삭제 확인\",\n * \"message\": \"정말 이 항목을 삭제하시겠습니까?\",\n * \"confirmText\": \"삭제\",\n * \"cancelText\": \"$t:common.cancel\",\n * \"confirmButtonVariant\": \"danger\"\n * }\n * }\n */\nexport const ConfirmDialog: React.FC = ({\n isOpen,\n onClose,\n title,\n message,\n confirmText,\n cancelText,\n onConfirm,\n onCancel,\n confirmButtonVariant = 'primary',\n // cancelButtonVariant는 현재 고정 스타일 사용으로 미사용\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n cancelButtonVariant: _cancelButtonVariant = 'secondary',\n width = '500px',\n // closeOnOverlay는 Modal에서 처리하므로 미사용\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n closeOnOverlay: _closeOnOverlay = true,\n isLoading = false,\n loadingText,\n}) => {\n // props로 전달된 값이 없으면 다국어 키 사용\n const resolvedConfirmText = confirmText ?? t('common.confirm');\n const resolvedCancelText = cancelText ?? t('common.cancel');\n const resolvedLoadingText = loadingText ?? t('common.loading');\n\n const handleConfirm = () => {\n onConfirm();\n };\n\n const handleCancel = () => {\n // 로딩 중에는 취소 불가\n if (isLoading) return;\n onCancel?.();\n onClose();\n };\n\n const handleClose = () => {\n // 로딩 중에는 닫기 불가\n if (isLoading) return;\n onClose();\n };\n\n // 버튼 variant별 스타일 매핑\n const confirmVariantClassMap: Record<'primary' | 'secondary' | 'danger' | 'ghost', string> = {\n primary: 'bg-blue-600 text-white hover:bg-blue-700',\n secondary: 'bg-gray-200 dark:bg-gray-700 text-gray-800 dark:text-gray-200 hover:bg-gray-300 dark:hover:bg-gray-600',\n danger: 'bg-red-600 text-white hover:bg-red-700',\n ghost: 'bg-transparent text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700',\n };\n\n return (\n \n {/* 본문 */}\n
\n {typeof message === 'string' ? (\n

{message}

\n ) : (\n message\n )}\n
\n\n {/* 푸터 (버튼 영역) */}\n
\n {/* 취소 버튼 */}\n \n {resolvedCancelText}\n \n\n {/* 확인 버튼 */}\n \n {isLoading && (\n \n )}\n {isLoading ? resolvedLoadingText : resolvedConfirmText}\n \n
\n \n );\n};\n","/**\n * FileUploader Context\n *\n * 파일 업로더의 상태와 액션을 공유하는 Context입니다.\n *\n * @module composite/FileUploader/FileUploaderContext\n */\n\nimport React, { createContext, useContext } from 'react';\nimport type { Attachment, PendingFile, ApiEndpoints } from './types';\n\n// ========== Context Types ==========\n\nexport interface FileUploaderContextValue {\n // 상태\n existingFiles: Attachment[];\n pendingFiles: PendingFile[];\n isDragOver: boolean;\n isDeleting: boolean;\n\n // 설정\n maxFiles: number;\n maxSize: number;\n accept?: string;\n endpoints: ApiEndpoints;\n confirmBeforeRemove: boolean;\n\n // 계산된 값\n totalCount: number;\n hasFiles: boolean;\n canAddMore: boolean;\n allItems: (Attachment | PendingFile)[];\n imageFiles: (Attachment | PendingFile)[];\n\n // 액션\n handleFiles: (files: FileList) => Promise;\n handleRemove: (item: PendingFile | Attachment) => Promise;\n handleRetry: (pendingFile: PendingFile) => void;\n handleUploadAll: () => Promise;\n handleOpenGallery: (item: PendingFile | Attachment) => void;\n handleDownload: (item: Attachment) => Promise;\n handleDragEnd: (event: import('@dnd-kit/core').DragEndEvent) => Promise;\n\n // 드래그 상태 설정\n setIsDragOver: (value: boolean) => void;\n\n // Input ref\n inputRef: React.RefObject;\n\n // 갤러리 상태\n galleryOpen: boolean;\n setGalleryOpen: (value: boolean) => void;\n galleryStartIndex: number;\n galleryKeyRef: React.MutableRefObject;\n\n // 삭제 확인 모달 상태\n confirmDialogOpen: boolean;\n setConfirmDialogOpen: (value: boolean) => void;\n itemToDelete: Attachment | null;\n executeRemoveAttachment: (item: Attachment) => Promise;\n\n // 인증된 이미지 URL 캐시\n authenticatedImageUrls: Map;\n}\n\n// ========== Context ==========\n\nconst FileUploaderContext = createContext(null);\n\n/**\n * FileUploader Context Provider\n */\nexport const FileUploaderProvider: React.FC<{\n value: FileUploaderContextValue;\n children: React.ReactNode;\n}> = ({ value, children }) => {\n return (\n \n {children}\n \n );\n};\n\n/**\n * FileUploader Context 사용 훅\n */\nexport const useFileUploaderContext = (): FileUploaderContextValue => {\n const context = useContext(FileUploaderContext);\n if (!context) {\n throw new Error('useFileUploaderContext must be used within FileUploaderProvider');\n }\n return context;\n};\n\nexport default FileUploaderContext;","/**\n * Browser Image Compression\n * v2.0.2\n * by Donald \n * https://github.com/Donaldcwl/browser-image-compression\n */\n\nfunction _mergeNamespaces(e,t){return t.forEach((function(t){t&&\"string\"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach((function(r){if(\"default\"!==r&&!(r in e)){var i=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,i.get?i:{enumerable:!0,get:function(){return t[r]}})}}))})),Object.freeze(e)}function copyExifWithoutOrientation(e,t){return new Promise((function(r,i){let o;return getApp1Segment(e).then((function(e){try{return o=e,r(new Blob([t.slice(0,2),o,t.slice(2)],{type:\"image/jpeg\"}))}catch(e){return i(e)}}),i)}))}const getApp1Segment=e=>new Promise(((t,r)=>{const i=new FileReader;i.addEventListener(\"load\",(({target:{result:e}})=>{const i=new DataView(e);let o=0;if(65496!==i.getUint16(o))return r(\"not a valid JPEG\");for(o+=2;;){const a=i.getUint16(o);if(65498===a)break;const s=i.getUint16(o+2);if(65505===a&&1165519206===i.getUint32(o+4)){const a=o+10;let f;switch(i.getUint16(a)){case 18761:f=!0;break;case 19789:f=!1;break;default:return r(\"TIFF header contains invalid endian\")}if(42!==i.getUint16(a+2,f))return r(\"TIFF header contains invalid version\");const l=i.getUint32(a+4,f),c=a+l+2+12*i.getUint16(a+l,f);for(let e=a+l+2;e>>24&255,i[r+1]=o>>>16&255,i[r+2]=o>>>8&255,i[r+3]=o>>>0&255,new Uint8Array(i.buffer,0,r+4)},UZIP.deflateRaw=function(e,t){null==t&&(t={level:6});var r=new Uint8Array(50+Math.floor(1.1*e.length)),i=UZIP.F.deflateRaw(e,r,i,t.level);return new Uint8Array(r.buffer,0,i)},UZIP.encode=function(e,t){null==t&&(t=!1);var r=0,i=UZIP.bin.writeUint,o=UZIP.bin.writeUshort,a={};for(var s in e){var f=!UZIP._noNeed(s)&&!t,l=e[s],c=UZIP.crc.crc(l,0,l.length);a[s]={cpr:f,usize:l.length,crc:c,file:f?UZIP.deflateRaw(l):l}}for(var s in a)r+=a[s].file.length+30+46+2*UZIP.bin.sizeUTF8(s);r+=22;var u=new Uint8Array(r),h=0,d=[];for(var s in a){var A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,0)}var g=0,p=h;for(var s in a){A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,1,d[g++])}var m=h-p;return i(u,h,101010256),h+=4,o(u,h+=4,g),o(u,h+=2,g),i(u,h+=2,m),i(u,h+=4,p),h+=4,h+=2,u.buffer},UZIP._noNeed=function(e){var t=e.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(t)},UZIP._writeHeader=function(e,t,r,i,o,a){var s=UZIP.bin.writeUint,f=UZIP.bin.writeUshort,l=i.file;return s(e,t,0==o?67324752:33639248),t+=4,1==o&&(t+=2),f(e,t,20),f(e,t+=2,0),f(e,t+=2,i.cpr?8:0),s(e,t+=2,0),s(e,t+=4,i.crc),s(e,t+=4,l.length),s(e,t+=4,i.usize),f(e,t+=4,UZIP.bin.sizeUTF8(r)),f(e,t+=2,0),t+=2,1==o&&(t+=2,t+=2,s(e,t+=6,a),t+=4),t+=UZIP.bin.writeUTF8(e,t,r),0==o&&(e.set(l,t),t+=l.length),t},UZIP.crc={table:function(){for(var e=new Uint32Array(256),t=0;t<256;t++){for(var r=t,i=0;i<8;i++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update:function(e,t,r,i){for(var o=0;o>>8;return e},crc:function(e,t,r){return 4294967295^UZIP.crc.update(4294967295,e,t,r)}},UZIP.adler=function(e,t,r){for(var i=1,o=0,a=t,s=t+r;a>8&255},readUint:function(e,t){return 16777216*e[t+3]+(e[t+2]<<16|e[t+1]<<8|e[t])},writeUint:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255,e[t+2]=r>>16&255,e[t+3]=r>>24&255},readASCII:function(e,t,r){for(var i=\"\",o=0;o>6,e[t+o+1]=128|s>>0&63,o+=2;else if(0==(4294901760&s))e[t+o]=224|s>>12,e[t+o+1]=128|s>>6&63,e[t+o+2]=128|s>>0&63,o+=3;else{if(0!=(4292870144&s))throw\"e\";e[t+o]=240|s>>18,e[t+o+1]=128|s>>12&63,e[t+o+2]=128|s>>6&63,e[t+o+3]=128|s>>0&63,o+=4}}return o},sizeUTF8:function(e){for(var t=e.length,r=0,i=0;i>>3}var d=a.lits,A=a.strt,g=a.prev,p=0,m=0,w=0,v=0,b=0,y=0;for(h>2&&(A[y=UZIP.F._hash(e,0)]=0),l=0;l14e3||m>26697)&&h-l>100&&(u>>16,B=65535&F;if(0!=F){B=65535&F;var U=s(_=F>>>16,a.of0);a.lhst[257+U]++;var C=s(B,a.df0);a.dhst[C]++,v+=a.exb[U]+a.dxb[C],d[p]=_<<23|l-u,d[p+1]=B<<16|U<<8|C,p+=2,u=l+_}else a.lhst[e[l]]++;m++}}for(w==l&&0!=e.length||(u>>3},UZIP.F._bestMatch=function(e,t,r,i,o,a){var s=32767&t,f=r[s],l=s-f+32768&32767;if(f==s||i!=UZIP.F._hash(e,t-l))return 0;for(var c=0,u=0,h=Math.min(32767,t);l<=h&&0!=--a&&f!=s;){if(0==c||e[t+c]==e[t+c-l]){var d=UZIP.F._howLong(e,t,l);if(d>c){if(u=l,(c=d)>=o)break;l+2A&&(A=m,f=p)}}}l+=(s=f)-(f=r[s])+32768&32767}return c<<16|u},UZIP.F._howLong=function(e,t,r){if(e[t]!=e[t-r]||e[t+1]!=e[t+1-r]||e[t+2]!=e[t+2-r])return 0;var i=t,o=Math.min(e.length,t+258);for(t+=3;t>>23,T=M+(8388607&S);M>16,H=O>>8&255,L=255&O;y(f,l=UZIP.F._writeLit(257+H,C,f,l),R-v.of0[H]),l+=v.exb[H],b(f,l=UZIP.F._writeLit(L,I,f,l),P-v.df0[L]),l+=v.dxb[L],M+=R}}l=UZIP.F._writeLit(256,C,f,l)}return l},UZIP.F._copyExact=function(e,t,r,i,o){var a=o>>>3;return i[a]=r,i[a+1]=r>>>8,i[a+2]=255-i[a],i[a+3]=255-i[a+1],a+=4,i.set(new Uint8Array(e.buffer,t,r),a),o+(r+4<<3)},UZIP.F.getTrees=function(){for(var e=UZIP.F.U,t=UZIP.F._hufTree(e.lhst,e.ltree,15),r=UZIP.F._hufTree(e.dhst,e.dtree,15),i=[],o=UZIP.F._lenCodes(e.ltree,i),a=[],s=UZIP.F._lenCodes(e.dtree,a),f=0;f4&&0==e.itree[1+(e.ordr[c-1]<<1)];)c--;return[t,r,l,o,s,c,i,a]},UZIP.F.getSecond=function(e){for(var t=[],r=0;r>1)+\",\");return t},UZIP.F.contSize=function(e,t){for(var r=0,i=0;i15&&(UZIP.F._putsE(r,i,s,f),i+=f)}return i},UZIP.F._lenCodes=function(e,t){for(var r=e.length;2!=r&&0==e[r-1];)r-=2;for(var i=0;i>>1,138))<11?t.push(17,c-3):t.push(18,c-11),i+=2*c-2}else if(o==f&&a==o&&s==o){for(l=i+5;l+2>>1,6);t.push(16,c-3),i+=2*c-2}else t.push(o,0)}return r>>>1},UZIP.F._hufTree=function(e,t,r){var i=[],o=e.length,a=t.length,s=0;for(s=0;sr&&(UZIP.F.restrictDepth(l,r,p),p=r),s=0;st;i++){var s=e[i].d;e[i].d=t,a+=o-(1<>>=r-t;a>0;){(s=e[i].d)=0;i--)e[i].d==t&&a<0&&(e[i].d--,a++);0!=a&&console.log(\"debt left\")},UZIP.F._goodIndex=function(e,t){var r=0;return t[16|r]<=e&&(r|=16),t[8|r]<=e&&(r|=8),t[4|r]<=e&&(r|=4),t[2|r]<=e&&(r|=2),t[1|r]<=e&&(r|=1),r},UZIP.F._writeLit=function(e,t,r,i){return UZIP.F._putsF(r,i,t[e<<1]),i+t[1+(e<<1)]},UZIP.F.inflate=function(e,t){var r=Uint8Array;if(3==e[0]&&0==e[1])return t||new r(0);var i=UZIP.F,o=i._bitsF,a=i._bitsE,s=i._decodeTiny,f=i.makeCodes,l=i.codes2map,c=i._get17,u=i.U,h=null==t;h&&(t=new r(e.length>>>2<<3));for(var d,A,g=0,p=0,m=0,w=0,v=0,b=0,y=0,E=0,F=0;0==g;)if(g=o(e,F,1),p=o(e,F+1,2),F+=3,0!=p){if(h&&(t=UZIP.F._check(t,E+(1<<17))),1==p&&(d=u.flmap,A=u.fdmap,b=511,y=31),2==p){m=a(e,F,5)+257,w=a(e,F+5,5)+1,v=a(e,F+10,4)+4,F+=14;for(var _=0;_<38;_+=2)u.itree[_]=0,u.itree[_+1]=0;var B=1;for(_=0;_B&&(B=U)}F+=3*v,f(u.itree,B),l(u.itree,B,u.imap),d=u.lmap,A=u.dmap,F=s(u.imap,(1<>>4;if(M>>>8==0)t[E++]=M;else{if(256==M)break;var x=E+M-254;if(M>264){var S=u.ldef[M-257];x=E+(S>>>3)+a(e,F,7&S),F+=7&S}var R=A[c(e,F)&y];F+=15&R;var T=R>>>4,O=u.ddef[T],P=(O>>>4)+o(e,F,15&O);for(F+=15&O,h&&(t=UZIP.F._check(t,E+(1<<17)));E>>3),L=e[H-4]|e[H-3]<<8;h&&(t=UZIP.F._check(t,E+L)),t.set(new r(e.buffer,e.byteOffset+H,L),E),F=H+L<<3,E+=L}return t.length==E?t:t.slice(0,E)},UZIP.F._check=function(e,t){var r=e.length;if(t<=r)return e;var i=new Uint8Array(Math.max(r<<1,t));return i.set(e,0),i},UZIP.F._decodeTiny=function(e,t,r,i,o,a){for(var s=UZIP.F._bitsE,f=UZIP.F._get17,l=0;l>>4;if(u<=15)a[l]=u,l++;else{var h=0,d=0;16==u?(d=3+s(i,o,2),o+=2,h=a[l-1]):17==u?(d=3+s(i,o,3),o+=3):18==u&&(d=11+s(i,o,7),o+=7);for(var A=l+d;l>>1;ao&&(o=f),a++}for(;a>1,f=e[a+1],l=s<<4|f,c=t-f,u=e[a]<>>15-t]=l,u++}},UZIP.F.revCodes=function(e,t){for(var r=UZIP.F.U.rev15,i=15-t,o=0;o>>i}},UZIP.F._putsE=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},UZIP.F._putsF=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},UZIP.F._bitsE=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},UZIP.F._get25=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},UZIP.F.U=(r=Uint16Array,i=Uint32Array,{next_code:new r(16),bl_count:new r(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new r(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new i(32),flmap:new r(512),fltree:[],fdmap:new r(32),fdtree:[],lmap:new r(32768),ltree:[],ttree:[],dmap:new r(32768),dtree:[],imap:new r(512),itree:[],rev15:new r(32768),lhst:new i(286),dhst:new i(30),ihst:new i(19),lits:new i(15e3),strt:new r(65536),prev:new r(32768)}),function(){for(var e=UZIP.F.U,t=0;t<32768;t++){var r=t;r=(4278255360&(r=(4042322160&(r=(3435973836&(r=(2863311530&r)>>>1|(1431655765&r)<<1))>>>2|(858993459&r)<<2))>>>4|(252645135&r)<<4))>>>8|(16711935&r)<<8,e.rev15[t]=(r>>>16|r<<16)>>>17}function pushV(e,t,r){for(;0!=t--;)e.push(0,r)}for(t=0;t<32;t++)e.ldef[t]=e.of0[t]<<3|e.exb[t],e.ddef[t]=e.df0[t]<<4|e.dxb[t];pushV(e.fltree,144,8),pushV(e.fltree,112,9),pushV(e.fltree,24,7),pushV(e.fltree,8,8),UZIP.F.makeCodes(e.fltree,9),UZIP.F.codes2map(e.fltree,9,e.flmap),UZIP.F.revCodes(e.fltree,9),pushV(e.fdtree,32,5),UZIP.F.makeCodes(e.fdtree,5),UZIP.F.codes2map(e.fdtree,5,e.fdmap),UZIP.F.revCodes(e.fdtree,5),pushV(e.itree,19,0),pushV(e.ltree,286,0),pushV(e.dtree,30,0),pushV(e.ttree,320,0)}()}();var UZIP=_mergeNamespaces({__proto__:null,default:e},[e]);const UPNG=function(){var e={nextZero(e,t){for(;0!=e[t];)t++;return t},readUshort:(e,t)=>e[t]<<8|e[t+1],writeUshort(e,t,r){e[t]=r>>8&255,e[t+1]=255&r},readUint:(e,t)=>16777216*e[t]+(e[t+1]<<16|e[t+2]<<8|e[t+3]),writeUint(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r},readASCII(e,t,r){let i=\"\";for(let o=0;oe.length<2?`0${e}`:e,readUTF8(t,r,i){let o,a=\"\";for(let o=0;o>3)]>>7-((7&A)<<0)&1);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E>2)]>>6-((3&A)<<1)&3);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E>1)]>>4-((1&A)<<2)&15);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E>>3)]>>>7-(7&B)&1))==255*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(2==h)for(B=0;B>>2)]>>>6-((3&B)<<1)&3))==85*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(4==h)for(B=0;B>>1)]>>>4-((1&B)<<2)&15))==17*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(8==h)for(B=0;B>3,s=Math.ceil(r*o/8),f=new Uint8Array(i*s);let l=0;const c=[0,0,4,0,2,0,1],u=[0,4,0,2,0,1,0],h=[8,8,8,4,4,2,2],d=[8,8,4,4,2,2,1];let A=0;for(;A<7;){const p=h[A],m=d[A];let w=0,v=0,b=c[A];for(;b>3])>>7-(7&i)&1,f[_*s+(t>>3)]|=g<<7-((7&t)<<0);if(2==o)g=(g=e[i>>3])>>6-(7&i)&3,f[_*s+(t>>2)]|=g<<6-((3&t)<<1);if(4==o)g=(g=e[i>>3])>>4-(7&i)&15,f[_*s+(t>>1)]|=g<<4-((1&t)<<2);if(o>=8){const r=_*s+t*a;for(let t=0;t>3)+t]}i+=o,t+=m}F++,_+=p}w*v!=0&&(l+=v*(1+E)),A+=1}return f}(r,e)),r}function _inflate(e,r){return t(new Uint8Array(e.buffer,2,e.length-6),r)}var t=function(){const e={H:{}};return e.H.N=function(t,r){const i=Uint8Array;let o,a,s=0,f=0,l=0,c=0,u=0,h=0,d=0,A=0,g=0;if(3==t[0]&&0==t[1])return r||new i(0);const p=e.H,m=p.b,w=p.e,v=p.R,b=p.n,y=p.A,E=p.Z,F=p.m,_=null==r;for(_&&(r=new i(t.length>>>2<<5));0==s;)if(s=m(t,g,1),f=m(t,g+1,2),g+=3,0!=f){if(_&&(r=e.H.W(r,A+(1<<17))),1==f&&(o=F.J,a=F.h,h=511,d=31),2==f){l=w(t,g,5)+257,c=w(t,g+5,5)+1,u=w(t,g+10,4)+4,g+=14;let e=1;for(var B=0;B<38;B+=2)F.Q[B]=0,F.Q[B+1]=0;for(B=0;Be&&(e=r)}g+=3*u,b(F.Q,e),y(F.Q,e,F.u),o=F.w,a=F.d,g=v(F.u,(1<>>4;if(i>>>8==0)r[A++]=i;else{if(256==i)break;{let e=A+i-254;if(i>264){const r=F.q[i-257];e=A+(r>>>3)+w(t,g,7&r),g+=7&r}const o=a[E(t,g)&d];g+=15&o;const s=o>>>4,f=F.c[s],l=(f>>>4)+m(t,g,15&f);for(g+=15&f;A>>3),a=t[o-4]|t[o-3]<<8;_&&(r=e.H.W(r,A+a)),r.set(new i(t.buffer,t.byteOffset+o,a),A),g=o+a<<3,A+=a}return r.length==A?r:r.slice(0,A)},e.H.W=function(e,t){const r=e.length;if(t<=r)return e;const i=new Uint8Array(r<<1);return i.set(e,0),i},e.H.R=function(t,r,i,o,a,s){const f=e.H.e,l=e.H.Z;let c=0;for(;c>>4;if(i<=15)s[c]=i,c++;else{let e=0,t=0;16==i?(t=3+f(o,a,2),a+=2,e=s[c-1]):17==i?(t=3+f(o,a,3),a+=3):18==i&&(t=11+f(o,a,7),a+=7);const r=c+t;for(;c>>1;for(;ao&&(o=r),a++}for(;a>1,s=t[e+1],f=o<<4|s,l=r-s;let c=t[e]<>>15-r]=f,c++}}},e.H.l=function(t,r){const i=e.H.m.r,o=15-r;for(let e=0;e>>o}},e.H.M=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},e.H.I=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},e.H.e=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},e.H.i=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},e.H.m=function(){const e=Uint16Array,t=Uint32Array;return{K:new e(16),j:new e(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new e(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new t(32),J:new e(512),_:[],h:new e(32),$:[],w:new e(32768),C:[],v:[],d:new e(32768),D:[],u:new e(512),Q:[],r:new e(32768),s:new t(286),Y:new t(30),a:new t(19),t:new t(15e3),k:new e(65536),g:new e(32768)}}(),function(){const t=e.H.m;for(var r=0;r<32768;r++){let e=r;e=(2863311530&e)>>>1|(1431655765&e)<<1,e=(3435973836&e)>>>2|(858993459&e)<<2,e=(4042322160&e)>>>4|(252645135&e)<<4,e=(4278255360&e)>>>8|(16711935&e)<<8,t.r[r]=(e>>>16|e<<16)>>>17}function n(e,t,r){for(;0!=t--;)e.push(0,r)}for(r=0;r<32;r++)t.q[r]=t.S[r]<<3|t.T[r],t.c[r]=t.p[r]<<4|t.z[r];n(t._,144,8),n(t._,112,9),n(t._,24,7),n(t._,8,8),e.H.n(t._,9),e.H.A(t._,9,t.J),e.H.l(t._,9),n(t.$,32,5),e.H.n(t.$,5),e.H.A(t.$,5,t.h),e.H.l(t.$,5),n(t.Q,19,0),n(t.C,286,0),n(t.D,30,0),n(t.v,320,0)}(),e.H.N}();function _getBPP(e){return[1,null,3,1,2,null,4][e.ctype]*e.depth}function _filterZero(e,t,r,i,o){let a=_getBPP(t);const s=Math.ceil(i*a/8);let f,l;a=Math.ceil(a/8);let c=e[r],u=0;if(c>1&&(e[r]=[0,0,1][c-2]),3==c)for(u=a;u>>1)&255;for(let t=0;t>>1);for(;u>>1)}else{for(;u=0&&f>=0?(h=r*t+a<<2,d=(f+r)*o+s+a<<2):(h=(-f+r)*t-s+a<<2,d=r*o+a<<2),0==l)i[d]=e[h],i[d+1]=e[h+1],i[d+2]=e[h+2],i[d+3]=e[h+3];else if(1==l){var A=e[h+3]*(1/255),g=e[h]*A,p=e[h+1]*A,m=e[h+2]*A,w=i[d+3]*(1/255),v=i[d]*w,b=i[d+1]*w,y=i[d+2]*w;const t=1-A,r=A+w*t,o=0==r?0:1/r;i[d+3]=255*r,i[d+0]=(g+v*t)*o,i[d+1]=(p+b*t)*o,i[d+2]=(m+y*t)*o}else if(2==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];A==w&&g==v&&p==b&&m==y?(i[d]=0,i[d+1]=0,i[d+2]=0,i[d+3]=0):(i[d]=g,i[d+1]=p,i[d+2]=m,i[d+3]=A)}else if(3==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];if(A==w&&g==v&&p==b&&m==y)continue;if(A<220&&w>20)return!1}return!0}return{decode:function decode(r){const i=new Uint8Array(r);let o=8;const a=e,s=a.readUshort,f=a.readUint,l={tabs:{},frames:[]},c=new Uint8Array(i.length);let u,h=0,d=0;const A=[137,80,78,71,13,10,26,10];for(var g=0;g<8;g++)if(i[g]!=A[g])throw\"The input is not a PNG file!\";for(;o>>1:r>>>=1;e[t]=r}return e}(),update(e,t,r,o){for(let a=0;a>>8;return e},crc:(e,t,r)=>4294967295^i.update(4294967295,e,t,r)};function addErr(e,t,r,i){t[r]+=e[0]*i>>4,t[r+1]+=e[1]*i>>4,t[r+2]+=e[2]*i>>4,t[r+3]+=e[3]*i>>4}function N(e){return Math.max(0,Math.min(255,e))}function D(e,t){const r=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2],a=e[3]-t[3];return r*r+i*i+o*o+a*a}function dither(e,t,r,i,o,a,s){null==s&&(s=1);const f=i.length,l=[];for(var c=0;c>>0&255,e>>>8&255,e>>>16&255,e>>>24&255])}for(c=0;c>2]=u,A[c>>2]=i[u]}}function _main(e,r,o,a,s){null==s&&(s={});const{crc:f}=i,l=t.writeUint,c=t.writeUshort,u=t.writeASCII;let h=8;const d=e.frames.length>1;let A,g=!1,p=33+(d?20:0);if(null!=s.sRGB&&(p+=13),null!=s.pHYs&&(p+=21),null!=s.iCCP&&(A=pako.deflate(s.iCCP),p+=21+A.length+4),3==e.ctype){for(var m=e.plte.length,w=0;w>>24!=255&&(g=!0);p+=8+3*m+4+(g?8+1*m+4:0)}for(var v=0;v>>8&255,a=r>>>16&255;b[h+t+0]=i,b[h+t+1]=o,b[h+t+2]=a}if(h+=3*m,l(b,h,f(b,h-3*m-4,3*m+4)),h+=4,g){l(b,h,m),h+=4,u(b,h,\"tRNS\"),h+=4;for(w=0;w>>24&255;h+=m,l(b,h,f(b,h-m-4,m+4)),h+=4}}let E=0;for(v=0;vc&&(c=t),eh&&(h=e))}-1==c&&(s=f=c=h=0),a&&(1==(1&s)&&s--,1==(1&f)&&f--);const v=(c-s+1)*(h-f+1);v>2,e>>2);F.push(_);const t=new Uint8Array(r.abuf,i,e);h&&dither(B.img,B.rect.width,B.rect.height,E,t,_),B.img.set(t),i+=e}}else for(p=0;pU&&t==e[w-U])_[w]=_[w-U];else{let e=y[t];if(null==e&&(y[t]=e=E.length,E.push(t),E.length>=300))break;_[w]=e}}}const C=E.length;C<=256&&0==u&&(A=C<=2?1:C<=4?2:C<=16?4:8,A=Math.max(A,c));for(p=0;p>1)]|=o[e+Q]<<4-4*(1&Q);else if(2==A)for(Q=0;Q>2)]|=o[e+Q]<<6-2*(3&Q);else if(1==A)for(Q=0;Q>3)]|=o[e+Q]<<7-1*(7&Q)}t=I,d=3,i=1}else if(0==v&&1==b.length){I=new Uint8Array(U*e*3);const o=U*e;for(w=0;ww&&(w=i),fv&&(v=f))}-1==w&&(p=m=w=v=0),f&&(1==(1&p)&&p--,1==(1&m)&&m--),s={x:p,y:m,width:w-p+1,height:v-m+1};const b=o[a];b.rect=s,b.blend=1,b.img=new Uint8Array(s.width*s.height*4),0==o[a-1].dispose?(e(u,r,i,b.img,s.width,s.height,-s.x,-s.y,0),_prepareDiff(A,r,i,b.img,s)):e(A,r,i,b.img,s.width,s.height,-s.x,-s.y,0)}function _prepareDiff(t,r,i,o,a){e(t,r,i,o,a.width,a.height,-a.x,-a.y,2)}function _filterZero(e,t,r,i,o,a,s){const f=[];let l,c=[0,1,2,3,4];-1!=a?c=[a]:(t*i>5e5||1==r)&&(c=[0]),s&&(l={level:0});const u=UZIP;for(var h=0;h>1)+256&255;if(4==s)for(c=a;c>1)&255;for(c=a;c>1)&255}if(4==s){for(c=0;c>2);let u;if(r.length<2e7)for(var h=0;h>2]=u.ind,o[h>>2]=u.est.rgba}else for(h=0;h>2]=u.ind,o[h>>2]=u.est.rgba}return{abuf:i.buffer,inds:c,plte:f}}function getKDtree(e,t,r){null==r&&(r=1e-4);const i=new Uint32Array(e.buffer),o={i0:0,i1:e.length,bst:null,est:null,tdst:0,left:null,right:null};o.bst=stats(e,o.i0,o.i1),o.est=estats(o.bst);const a=[o];for(;a.lengtht&&(t=a[s].est.L,o=s);if(t=l||f.i1<=l){f.est.L=0;continue}const c={i0:f.i0,i1:l,bst:null,est:null,tdst:0,left:null,right:null};c.bst=stats(e,c.i0,c.i1),c.est=estats(c.bst);const u={i0:l,i1:f.i1,bst:null,est:null,tdst:0,left:null,right:null};u.bst={R:[],m:[],N:f.bst.N-c.bst.N};for(s=0;s<16;s++)u.bst.R[s]=f.bst.R[s]-c.bst.R[s];for(s=0;s<4;s++)u.bst.m[s]=f.bst.m[s]-c.bst.m[s];u.est=estats(u.bst),f.left=c,f.right=u,a[o]=c,a.push(u)}a.sort(((e,t)=>t.bst.N-e.bst.N));for(s=0;s0&&(s=e.right,f=e.left);const l=getNearest(s,t,r,i,o);if(l.tdst<=a*a)return l;const c=getNearest(f,t,r,i,o);return c.tdsta;)i-=4;if(r>=i)break;const s=t[r>>2];t[r>>2]=t[i>>2],t[i>>2]=s,r+=4,i-=4}for(;vecDot(e,r,o)>a;)r-=4;return r+4}function vecDot(e,t,r){return e[t]*r[0]+e[t+1]*r[1]+e[t+2]*r[2]+e[t+3]*r[3]}function stats(e,t,r){const i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=[0,0,0,0],a=r-t>>2;for(let a=t;a>>0}}var o={multVec:(e,t)=>[e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7]*t[3],e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11]*t[3],e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]*t[3]],dot:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],sml:(e,t)=>[e*t[0],e*t[1],e*t[2],e*t[3]]};UPNG.encode=function encode(e,t,r,i,o,a,s){null==i&&(i=0),null==s&&(s=!1);const f=compress(e,t,r,i,[!1,!1,!1,0,s,!1]);return compressPNG(f,-1),_main(f,t,r,o,a)},UPNG.encodeLL=function encodeLL(e,t,r,i,o,a,s,f){const l={ctype:0+(1==i?0:2)+(0==o?0:4),depth:a,frames:[]},c=(i+o)*a,u=c*t;for(let i=0;i>>0),set16(1),set16(32),set32(3),set32(c),set32(2835),set32(2835),seek(8),set32(16711680),set32(65280),set32(255),set32(4278190080),set32(1466527264),function convert(){for(;b0;){for(w=122+b*l,g=0;g>>24,d.setUint32(w+g,p<<8|m),g+=4;b++}E{t(new Blob([e],{type:\"image/bmp\"}))}))},_dly:9};var i={CHROME:\"CHROME\",FIREFOX:\"FIREFOX\",DESKTOP_SAFARI:\"DESKTOP_SAFARI\",IE:\"IE\",IOS:\"IOS\",ETC:\"ETC\"},o={[i.CHROME]:16384,[i.FIREFOX]:11180,[i.DESKTOP_SAFARI]:16384,[i.IE]:8192,[i.IOS]:4096,[i.ETC]:8192};const a=\"undefined\"!=typeof window,s=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,f=a&&window.cordova&&window.cordova.require&&window.cordova.require(\"cordova/modulemapper\"),CustomFile=(a||s)&&(f&&f.getOriginalSymbol(window,\"File\")||\"undefined\"!=typeof File&&File),CustomFileReader=(a||s)&&(f&&f.getOriginalSymbol(window,\"FileReader\")||\"undefined\"!=typeof FileReader&&FileReader);function getFilefromDataUrl(e,t,r=Date.now()){return new Promise((i=>{const o=e.split(\",\"),a=o[0].match(/:(.*?);/)[1],s=globalThis.atob(o[1]);let f=s.length;const l=new Uint8Array(f);for(;f--;)l[f]=s.charCodeAt(f);const c=new Blob([l],{type:a});c.name=t,c.lastModified=r,i(c)}))}function getDataUrlFromFile(e){return new Promise(((t,r)=>{const i=new CustomFileReader;i.onload=()=>t(i.result),i.onerror=e=>r(e),i.readAsDataURL(e)}))}function loadImage(e){return new Promise(((t,r)=>{const i=new Image;i.onload=()=>t(i),i.onerror=e=>r(e),i.src=e}))}function getBrowserName(){if(void 0!==getBrowserName.cachedResult)return getBrowserName.cachedResult;let e=i.ETC;const{userAgent:t}=navigator;return/Chrom(e|ium)/i.test(t)?e=i.CHROME:/iP(ad|od|hone)/i.test(t)&&/WebKit/i.test(t)?e=i.IOS:/Safari/i.test(t)?e=i.DESKTOP_SAFARI:/Firefox/i.test(t)?e=i.FIREFOX:(/MSIE/i.test(t)||!0==!!document.documentMode)&&(e=i.IE),getBrowserName.cachedResult=e,getBrowserName.cachedResult}function approximateBelowMaximumCanvasSizeOfBrowser(e,t){const r=getBrowserName(),i=o[r];let a=e,s=t,f=a*s;const l=a>s?s/a:a/s;for(;f>i*i;){const e=(i+a)/2,t=(i+s)/2;er.toBlob(e,t))).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_5.call(this)}catch(e){return f(e)}}.bind(this),f);{if(\"function\"==typeof OffscreenCanvas&&e instanceof OffscreenCanvas)return e.convertToBlob({type:t,quality:a}).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f);{let d;return d=e.toDataURL(t,a),getFilefromDataUrl(d,i,o).then(function(e){try{return l=e,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f)}function $If_6(){return $If_5.call(this)}}function $If_5(){return $If_4.call(this)}}function $If_4(){return s(l)}}))}function cleanupCanvasMemory(e){e.width=0,e.height=0}function isAutoOrientationInBrowser(){return new Promise((function(e,t){let r,i,o,a,s;return void 0!==isAutoOrientationInBrowser.cachedResult?e(isAutoOrientationInBrowser.cachedResult):(r=\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",getFilefromDataUrl(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then((function(r){try{return i=r,drawFileInCanvas(i).then((function(r){try{return o=r[1],canvasToFile(o,i.type,i.name,i.lastModified).then((function(r){try{return a=r,cleanupCanvasMemory(o),drawFileInCanvas(a).then((function(r){try{return s=r[0],isAutoOrientationInBrowser.cachedResult=1===s.width&&2===s.height,e(isAutoOrientationInBrowser.cachedResult)}catch(e){return t(e)}}),t)}catch(e){return t(e)}}),t)}catch(e){return t(e)}}),t)}catch(e){return t(e)}}),t))}))}function getExifOrientation(e){return new Promise(((t,r)=>{const i=new CustomFileReader;i.onload=e=>{const r=new DataView(e.target.result);if(65496!=r.getUint16(0,!1))return t(-2);const i=r.byteLength;let o=2;for(;or(e),i.readAsArrayBuffer(e)}))}function handleMaxWidthOrHeight(e,t){const{width:r}=e,{height:i}=e,{maxWidthOrHeight:o}=t;let a,s=e;return isFinite(o)&&(r>o||i>o)&&([s,a]=getNewCanvasAndCtx(r,i),r>i?(s.width=o,s.height=i/r*o):(s.width=r/i*o,s.height=o),a.drawImage(e,0,0,s.width,s.height),cleanupCanvasMemory(e)),s}function followExifOrientation(e,t){const{width:r}=e,{height:i}=e,[o,a]=getNewCanvasAndCtx(r,i);switch(t>4&&t<9?(o.width=i,o.height=r):(o.width=r,o.height=i),t){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,i);break;case 4:a.transform(1,0,0,-1,0,i);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,i,0);break;case 7:a.transform(0,-1,-1,0,i,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,i),cleanupCanvasMemory(e),o}function compress(e,t,r=0){return new Promise((function(i,o){let a,s,f,l,c,u,h,d,A,g,p,m,w,v,b,y,E,F,_,B;function incProgress(e=5){if(t.signal&&t.signal.aborted)throw t.signal.reason;a+=e,t.onProgress(Math.min(a,100))}function setProgress(e){if(t.signal&&t.signal.aborted)throw t.signal.reason;a=Math.min(Math.max(e,a),100),t.onProgress(a)}return a=r,s=t.maxIteration||10,f=1024*t.maxSizeMB*1024,incProgress(),drawFileInCanvas(e,t).then(function(r){try{return[,l]=r,incProgress(),c=handleMaxWidthOrHeight(l,t),incProgress(),new Promise((function(r,i){var o;if(!(o=t.exifOrientation))return getExifOrientation(e).then(function(e){try{return o=e,$If_2.call(this)}catch(e){return i(e)}}.bind(this),i);function $If_2(){return r(o)}return $If_2.call(this)})).then(function(r){try{return u=r,incProgress(),isAutoOrientationInBrowser().then(function(r){try{return h=r?c:followExifOrientation(c,u),incProgress(),d=t.initialQuality||1,A=t.fileType||e.type,canvasToFile(h,A,e.name,e.lastModified,d).then(function(r){try{{if(g=r,incProgress(),p=g.size>f,m=g.size>e.size,!p&&!m)return setProgress(100),i(g);var a;function $Loop_3(){if(s--&&(b>f||b>w)){let t,r;return t=B?.95*_.width:_.width,r=B?.95*_.height:_.height,[E,F]=getNewCanvasAndCtx(t,r),F.drawImage(_,0,0,t,r),d*=\"image/png\"===A?.85:.95,canvasToFile(E,A,e.name,e.lastModified,d).then((function(e){try{return y=e,cleanupCanvasMemory(_),_=E,b=y.size,setProgress(Math.min(99,Math.floor((v-b)/(v-f)*100))),$Loop_3}catch(e){return o(e)}}),o)}return[1]}return w=e.size,v=g.size,b=v,_=h,B=!t.alwaysKeepResolution&&p,(a=function(e){for(;e;){if(e.then)return void e.then(a,o);try{if(e.pop){if(e.length)return e.pop()?$Loop_3_exit.call(this):e;e=$Loop_3}else e=e.call(this)}catch(e){return o(e)}}}.bind(this))($Loop_3);function $Loop_3_exit(){return cleanupCanvasMemory(_),cleanupCanvasMemory(E),cleanupCanvasMemory(c),cleanupCanvasMemory(h),cleanupCanvasMemory(l),setProgress(100),i(y)}}}catch(u){return o(u)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}))}const l=\"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n const { file, id, imageCompressionLibUrl, options } = e.data\\n options.onProgress = (progress) => self.postMessage({ progress, id })\\n try {\\n if (!scriptImported) {\\n // console.log('[worker] importScripts', imageCompressionLibUrl)\\n self.importScripts(imageCompressionLibUrl)\\n scriptImported = true\\n }\\n // console.log('[worker] self', self)\\n const compressedFile = await imageCompression(file, options)\\n self.postMessage({ file: compressedFile, id })\\n } catch (e) {\\n // console.error('[worker] error', e)\\n self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n }\\n})\\n\";let c;function compressOnWebWorker(e,t){return new Promise(((r,i)=>{c||(c=function createWorkerScriptURL(e){const t=[];return\"function\"==typeof e?t.push(`(${e})()`):t.push(e),URL.createObjectURL(new Blob(t))}(l));const o=new Worker(c);o.addEventListener(\"message\",(function handler(e){if(t.signal&&t.signal.aborted)o.terminate();else if(void 0===e.data.progress){if(e.data.error)return i(new Error(e.data.error)),void o.terminate();r(e.data.file),o.terminate()}else t.onProgress(e.data.progress)})),o.addEventListener(\"error\",i),t.signal&&t.signal.addEventListener(\"abort\",(()=>{i(t.signal.reason),o.terminate()})),o.postMessage({file:e,imageCompressionLibUrl:t.libURL,options:{...t,onProgress:void 0,signal:void 0}})}))}function imageCompression(e,t){return new Promise((function(r,i){let o,a,s,f,l,c;if(o={...t},s=0,({onProgress:f}=o),o.maxSizeMB=o.maxSizeMB||Number.POSITIVE_INFINITY,l=\"boolean\"!=typeof o.useWebWorker||o.useWebWorker,delete o.useWebWorker,o.onProgress=e=>{s=e,\"function\"==typeof f&&f(s)},!(e instanceof Blob||e instanceof CustomFile))return i(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(e.type))return i(new Error(\"The file given is not an image\"));if(c=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!l||\"function\"!=typeof Worker||c)return compress(e,o).then(function(e){try{return a=e,$If_4.call(this)}catch(e){return i(e)}}.bind(this),i);var u=function(){try{return $If_4.call(this)}catch(e){return i(e)}}.bind(this),$Try_1_Catch=function(t){try{return compress(e,o).then((function(e){try{return a=e,u()}catch(e){return i(e)}}),i)}catch(e){return i(e)}};try{return o.libURL=o.libURL||\"https://cdn.jsdelivr.net/npm/browser-image-compression@2.0.2/dist/browser-image-compression.js\",compressOnWebWorker(e,o).then((function(e){try{return a=e,u()}catch(e){return $Try_1_Catch()}}),$Try_1_Catch)}catch(e){$Try_1_Catch()}function $If_4(){try{a.name=e.name,a.lastModified=e.lastModified}catch(e){}try{o.preserveExif&&\"image/jpeg\"===e.type&&(!o.fileType||o.fileType&&o.fileType===e.type)&&(a=copyExifWithoutOrientation(e,a))}catch(e){}return r(a)}}))}imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupCanvasMemory=cleanupCanvasMemory,imageCompression.isAutoOrientationInBrowser=isAutoOrientationInBrowser,imageCompression.approximateBelowMaximumCanvasSizeOfBrowser=approximateBelowMaximumCanvasSizeOfBrowser,imageCompression.copyExifWithoutOrientation=copyExifWithoutOrientation,imageCompression.getBrowserName=getBrowserName,imageCompression.version=\"2.0.2\";export{imageCompression as default};\n//# sourceMappingURL=browser-image-compression.mjs.map\n","/**\n * FileUploader 유틸리티 함수\n *\n * @module composite/FileUploader/utils\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\n/**\n * 파일 크기를 읽기 쉬운 형식으로 변환합니다.\n */\nexport const formatFileSize = (bytes: number): string => {\n const units = ['B', 'KB', 'MB', 'GB'];\n let i = 0;\n let size = bytes;\n while (size >= 1024 && i < units.length - 1) {\n size /= 1024;\n i++;\n }\n return `${size.toFixed(2)} ${units[i]}`;\n};\n\n/**\n * API 에러 응답에서 상세 메시지를 추출합니다.\n */\nexport const extractErrorMessage = (error: unknown): string => {\n // Axios 에러 응답 구조 처리\n if (error && typeof error === 'object') {\n const axiosError = error as {\n response?: {\n data?: {\n message?: string;\n errors?: Record;\n };\n };\n message?: string;\n };\n\n // API 응답의 message 필드\n if (axiosError.response?.data?.message) {\n return axiosError.response.data.message;\n }\n\n // Laravel validation 에러 (errors 객체의 첫 번째 메시지)\n if (axiosError.response?.data?.errors) {\n const firstError = Object.values(axiosError.response.data.errors)[0];\n if (Array.isArray(firstError) && firstError[0]) {\n return firstError[0];\n }\n }\n\n // 일반 에러 메시지\n if (axiosError.message) {\n return axiosError.message;\n }\n }\n\n // Error 인스턴스\n if (error instanceof Error) {\n return error.message;\n }\n\n return '업로드 실패';\n};\n\n/**\n * MIME 타입에 따른 Font Awesome 아이콘 클래스를 반환합니다.\n */\nexport const getFileIcon = (mimeType: string): string => {\n if (!mimeType) return 'fa-file';\n if (mimeType.startsWith('image/')) return 'fa-file-image';\n if (mimeType.startsWith('video/')) return 'fa-file-video';\n if (mimeType.startsWith('audio/')) return 'fa-file-audio';\n if (mimeType === 'application/pdf') return 'fa-file-pdf';\n if (mimeType.includes('word') || mimeType.includes('document')) return 'fa-file-word';\n if (mimeType.includes('excel') || mimeType.includes('spreadsheet')) return 'fa-file-excel';\n if (mimeType.includes('zip') || mimeType.includes('compressed')) return 'fa-file-zipper';\n return 'fa-file';\n};\n\n/**\n * G7Core.t() 번역 함수 참조\n */\nexport const t = (key: string, params?: Record) =>\n G7Core?.t?.(key, params) ?? key;","/**\n * useFileUploader Hook\n *\n * FileUploader의 핵심 로직을 담당하는 훅입니다.\n * - 파일 추가/삭제/업로드\n * - 이미지 압축\n * - 병렬 업로드 큐\n * - 순서 변경\n *\n * @module composite/FileUploader/useFileUploader\n */\n\nimport { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport imageCompression from 'browser-image-compression';\n\nimport type { Attachment, PendingFile, FileUploaderProps, ApiEndpoints } from './types';\nimport { formatFileSize, extractErrorMessage, t } from './utils';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\nexport interface UseFileUploaderOptions {\n attachmentableType?: string;\n attachmentableId?: number;\n collection: string;\n maxFiles: number;\n maxSize: number;\n maxConcurrentUploads: number;\n accept?: string;\n imageCompression?: FileUploaderProps['imageCompression'];\n roleIds: number[];\n autoUpload: boolean;\n initialFiles: Attachment[];\n endpoints: ApiEndpoints;\n onFilesChange?: (files: PendingFile[]) => void;\n onUploadComplete?: (attachments: Attachment[]) => void;\n onUploadError?: (error: string, file: File) => void;\n onRemove?: (id: number | string) => void;\n onReorder?: (files: Attachment[]) => void;\n uploadTriggerEvent?: string;\n confirmBeforeRemove: boolean;\n uploadParams?: Record;\n}\n\nexport interface UseFileUploaderReturn {\n // 상태\n existingFiles: Attachment[];\n pendingFiles: PendingFile[];\n isDragOver: boolean;\n setIsDragOver: (value: boolean) => void;\n isDeleting: boolean;\n\n // 계산된 값\n totalCount: number;\n hasFiles: boolean;\n canAddMore: boolean;\n allItems: (Attachment | PendingFile)[];\n imageFiles: (Attachment | PendingFile)[];\n\n // 액션\n handleFiles: (files: FileList) => Promise;\n handleRemove: (item: PendingFile | Attachment) => Promise;\n handleRetry: (pendingFile: PendingFile) => void;\n handleUploadAll: () => Promise;\n handleOpenGallery: (item: PendingFile | Attachment) => void;\n handleDownload: (item: Attachment) => Promise;\n handleDragEnd: (event: import('@dnd-kit/core').DragEndEvent) => Promise;\n\n // Input ref\n inputRef: React.RefObject;\n\n // 갤러리 상태\n galleryOpen: boolean;\n setGalleryOpen: (value: boolean) => void;\n galleryStartIndex: number;\n galleryKeyRef: React.MutableRefObject;\n\n // 삭제 확인 모달 상태\n confirmDialogOpen: boolean;\n setConfirmDialogOpen: (value: boolean) => void;\n itemToDelete: Attachment | null;\n executeRemoveAttachment: (item: Attachment) => Promise;\n\n // 인증된 이미지 URL 캐시\n authenticatedImageUrls: Map;\n\n // 초기화\n clear: () => void;\n getPendingFiles: () => PendingFile[];\n}\n\nexport function useFileUploader(options: UseFileUploaderOptions): UseFileUploaderReturn {\n const {\n attachmentableType,\n attachmentableId,\n collection,\n maxFiles,\n maxSize,\n maxConcurrentUploads,\n accept,\n imageCompression: compressionOptions,\n roleIds,\n autoUpload,\n initialFiles,\n endpoints,\n onFilesChange,\n onUploadComplete,\n onUploadError,\n onRemove,\n onReorder,\n uploadTriggerEvent,\n confirmBeforeRemove,\n uploadParams,\n } = options;\n\n // 상태\n const [existingFiles, setExistingFiles] = useState(initialFiles);\n const [pendingFiles, setPendingFiles] = useState([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const inputRef = useRef(null);\n const activeUploadsRef = useRef(0);\n // 삭제된 파일 ID 또는 hash를 추적하여 initialFiles 동기화 시 제외\n const deletedIdsRef = useRef>(new Set());\n // 세션 중 업로드된 파일을 추적하여 initialFiles 동기화 시 유지\n const uploadedFilesRef = useRef>(new Map());\n\n // 삭제 확인 모달 상태\n const [confirmDialogOpen, setConfirmDialogOpen] = useState(false);\n const [itemToDelete, setItemToDelete] = useState(null);\n const [isDeleting, setIsDeleting] = useState(false);\n // 순서가 변경되었는지 추적 (변경 후에는 initialFiles 동기화 무시)\n const hasReorderedRef = useRef(false);\n // 드래그 순서 유지: 기존/신규 파일 간 섞인 순서를 보존하기 위한 ID 배열\n const [customOrder, setCustomOrder] = useState<(string | number)[]>([]);\n // initialFiles 참조 안정성 — 외부에서 매 렌더마다 새 배열이 전달되는 경우 방어\n const prevInitialFilesRef = useRef(initialFiles);\n\n // 이미지 갤러리 상태\n const [galleryOpen, setGalleryOpen] = useState(false);\n const [galleryStartIndex, setGalleryStartIndex] = useState(0);\n // 갤러리 리마운트용 key (열릴 때마다 증가)\n const galleryKeyRef = useRef(0);\n // 인증된 이미지 URL 캐시 (기존 첨부파일용)\n const [authenticatedImageUrls, setAuthenticatedImageUrls] = useState>(new Map());\n // ref로 URL 캐시 추적 (stale closure 방지 — cleanup/has 체크에서 항상 최신 참조)\n const authenticatedImageUrlsRef = useRef>(new Map());\n\n // 대기 파일 변경 시 콜백\n useEffect(() => {\n onFilesChange?.(pendingFiles);\n }, [pendingFiles, onFilesChange]);\n\n // initialFiles 참조 안정화 — 매 렌더마다 새 배열이 전달되어도 내용이 같으면 무시\n const stableInitialFiles = useMemo(() => {\n const prev = prevInitialFilesRef.current;\n // 동일 참조면 즉시 반환\n if (prev === initialFiles) return prev;\n // 길이가 다르면 실제 변경\n if (prev.length !== initialFiles.length) {\n prevInitialFilesRef.current = initialFiles;\n return initialFiles;\n }\n // 빈 배열끼리는 항상 동일 (가장 흔한 케이스 — 무한 루프 방지)\n if (prev.length === 0 && initialFiles.length === 0) return prev;\n // ID 기반 얕은 비교\n const changed = initialFiles.some((f, i) => f.id !== prev[i]?.id);\n if (changed) {\n prevInitialFilesRef.current = initialFiles;\n return initialFiles;\n }\n return prev;\n }, [initialFiles]);\n\n // initialFiles prop 변경 시 existingFiles 동기화 (삭제/순서변경된 경우 제외)\n useEffect(() => {\n // 순서가 변경된 후에는 initialFiles 동기화를 무시\n if (hasReorderedRef.current) {\n return;\n }\n const filteredFiles = stableInitialFiles.filter(\n (file) => !deletedIdsRef.current.has(file.id) && (!file.hash || !deletedIdsRef.current.has(file.hash))\n );\n\n // 세션 중 업로드된 파일 병합 (initialFiles에 없는 것만 추가)\n const initialIds = new Set(filteredFiles.map((f) => f.id));\n const sessionUploaded = Array.from(uploadedFilesRef.current.values()).filter(\n (f) => !initialIds.has(f.id) && !deletedIdsRef.current.has(f.id)\n );\n\n setExistingFiles([...filteredFiles, ...sessionUploaded]);\n }, [stableInitialFiles]);\n\n // 이미지 압축\n const compressImage = useCallback(\n async (file: File): Promise => {\n const compressionOpts = {\n maxSizeMB: compressionOptions?.maxSizeMB ?? 1,\n maxWidthOrHeight: compressionOptions?.maxWidthOrHeight ?? 1920,\n useWebWorker: true,\n };\n return await imageCompression(file, compressionOpts);\n },\n [compressionOptions]\n );\n\n // 파일 추가 처리\n const handleFiles = useCallback(\n async (selectedFiles: FileList) => {\n const totalCount = existingFiles.length + pendingFiles.length;\n const remainingSlots = Math.max(0, maxFiles - totalCount);\n const filesToAdd = Array.from(selectedFiles).slice(0, remainingSlots);\n\n // 개수 상한 초과분은 조용히 절단하지 않고 안내 (개수 초과 silent 무시 방지)\n if (selectedFiles.length > remainingSlots) {\n const overflow = Array.from(selectedFiles).slice(remainingSlots);\n const message = t('attachment.upload_limit_exceeded', { max: maxFiles });\n // 잘린 첫 파일을 대표로 콜백에 전달 (없으면 무시)\n onUploadError?.(message, overflow[0] ?? selectedFiles[0]);\n }\n\n for (const file of filesToAdd) {\n // 크기 검증\n if (file.size > maxSize * 1024 * 1024) {\n onUploadError?.(\n `[${file.name}] 파일 크기(${formatFileSize(file.size)})가 최대 허용 크기(${maxSize}MB)를 초과합니다.`,\n file\n );\n continue;\n }\n\n // 확장자/MIME 타입 검증\n if (accept) {\n const ext = '.' + file.name.split('.').pop()?.toLowerCase();\n const acceptedTypes = accept.split(',').map((e) => e.trim().toLowerCase());\n const isAccepted = acceptedTypes.some((accepted) => {\n // MIME 타입 와일드카드 (예: image/*, video/*, audio/*)\n if (accepted.includes('/')) {\n if (accepted.endsWith('/*')) {\n const mimePrefix = accepted.slice(0, -2);\n return file.type.toLowerCase().startsWith(mimePrefix + '/');\n }\n // 정확한 MIME 타입 매칭 (예: image/jpeg)\n return file.type.toLowerCase() === accepted;\n }\n // 확장자 매칭 (예: .jpg, .png)\n return ext === accepted;\n });\n if (!isAccepted) {\n onUploadError?.(`[${file.name}] 허용되지 않는 파일 형식입니다. (허용: ${accept})`, file);\n continue;\n }\n }\n\n const pendingFile: PendingFile = {\n id: `pending-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n file,\n original_filename: file.name,\n mime_type: file.type,\n size: file.size,\n size_formatted: formatFileSize(file.size),\n status: 'pending',\n progress: 0,\n };\n\n // 이미지 미리보기 생성\n if (file.type.startsWith('image/')) {\n pendingFile.preview = URL.createObjectURL(file);\n }\n\n setPendingFiles((prev) => [...prev, pendingFile]);\n\n // 이미지인 경우 압축 처리\n if (file.type.startsWith('image/') && compressionOptions) {\n setPendingFiles((prev) =>\n prev.map((f) => (f.id === pendingFile.id ? { ...f, status: 'compressing' } : f))\n );\n\n try {\n const compressedBlob = await compressImage(file);\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id\n ? {\n ...f,\n compressedBlob,\n size: compressedBlob.size,\n size_formatted: formatFileSize(compressedBlob.size),\n status: 'pending',\n progress: 0,\n }\n : f\n )\n );\n } catch {\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id\n ? { ...f, status: 'error', error: '이미지 압축 실패' }\n : f\n )\n );\n }\n }\n }\n },\n [existingFiles.length, pendingFiles.length, maxFiles, maxSize, accept, compressionOptions, compressImage, onUploadError]\n );\n\n // 단일 파일 업로드\n const uploadSingleFile = useCallback(\n async (pendingFile: PendingFile): Promise => {\n const formData = new FormData();\n\n // 압축된 Blob 또는 원본 파일\n const fileToUpload = pendingFile.compressedBlob\n ? new File([pendingFile.compressedBlob], pendingFile.original_filename, {\n type: pendingFile.mime_type,\n })\n : pendingFile.file;\n\n formData.append('file', fileToUpload);\n\n if (attachmentableType) {\n formData.append('attachmentable_type', attachmentableType);\n }\n if (attachmentableId) {\n formData.append('attachmentable_id', String(attachmentableId));\n }\n formData.append('collection', collection);\n\n roleIds.forEach((roleId) => {\n formData.append('role_ids[]', String(roleId));\n });\n\n // 추가 업로드 파라미터 (예: temp_key)\n if (uploadParams) {\n Object.entries(uploadParams).forEach(([key, value]) => {\n formData.append(key, value);\n });\n }\n\n try {\n const response = await G7Core.api.post(endpoints.upload, formData, {\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => {\n const progress = Math.round((progressEvent.loaded * 100) / (progressEvent.total ?? 1));\n setPendingFiles((prev) =>\n prev.map((f) => (f.id === pendingFile.id ? { ...f, progress } : f))\n );\n },\n });\n\n // ResponseHelper 이중 래핑 대응: response.data.data (래핑) 또는 response.data (비래핑)\n const attachment = response?.data?.data ?? response?.data;\n return attachment as Attachment;\n } catch (error: unknown) {\n // API 에러 응답에서 상세 메시지 추출\n const errorMessage = extractErrorMessage(error);\n throw new Error(errorMessage);\n }\n },\n [attachmentableType, attachmentableId, collection, roleIds, endpoints.upload]\n );\n\n // 모든 파일 업로드\n const handleUploadAll = useCallback(async (): Promise => {\n const filesToUpload = pendingFiles.filter(\n (f) => f.status === 'pending' || f.status === 'error'\n );\n\n if (filesToUpload.length === 0) {\n return [];\n }\n\n const uploadedAttachments: Attachment[] = [];\n // 드래그 순서 복원용: pending ID → 업로드된 hash 매핑\n const pendingToHashMap = new Map();\n const uploadQueue = [...filesToUpload];\n\n const processQueue = async () => {\n while (uploadQueue.length > 0 && activeUploadsRef.current < maxConcurrentUploads) {\n const pendingFile = uploadQueue.shift()!;\n activeUploadsRef.current++;\n\n setPendingFiles((prev) =>\n prev.map((f) => (f.id === pendingFile.id ? { ...f, status: 'uploading', progress: 0 } : f))\n );\n\n try {\n const attachment = await uploadSingleFile(pendingFile);\n if (attachment) {\n uploadedAttachments.push(attachment);\n // 드래그 순서 복원용: pending ID → 업로드된 hash 매핑\n pendingToHashMap.set(String(pendingFile.id), String(attachment.hash));\n // 세션 중 업로드된 파일 추적 (initialFiles 동기화 시 유지)\n uploadedFilesRef.current.set(attachment.id, attachment);\n setPendingFiles((prev) => prev.filter((f) => f.id !== pendingFile.id));\n setExistingFiles((prev) => [...prev, attachment]);\n\n // customOrder에 pending ID가 있으면 즉시 hash로 교체\n // → allItems useMemo가 올바른 순서로 E를 표시 (UI 플래시 방지)\n setCustomOrder((prev) => {\n if (prev.length === 0) return prev;\n const pendingId = String(pendingFile.id);\n const hasMatch = prev.some((id) => String(id) === pendingId);\n if (!hasMatch) return prev;\n return prev.map((id) => String(id) === pendingId ? String(attachment.hash) : id);\n });\n\n // 미리보기 URL 해제\n if (pendingFile.preview) {\n URL.revokeObjectURL(pendingFile.preview);\n }\n } else {\n // 업로드 API 성공이지만 응답 파싱 실패 → 에러 상태로 전환 ('uploading' 영구 잔류 방지)\n const invalidMsg = t('attachment.upload_response_invalid');\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id\n ? { ...f, status: 'error', error: invalidMsg }\n : f\n )\n );\n onUploadError?.(\n `[${pendingFile.original_filename}] ${invalidMsg}`,\n pendingFile.file\n );\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : '업로드 실패';\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id ? { ...f, status: 'error', error: errorMessage } : f\n )\n );\n onUploadError?.(`[${pendingFile.original_filename}] ${errorMessage}`, pendingFile.file);\n } finally {\n activeUploadsRef.current--;\n }\n }\n };\n\n // 병렬 업로드 시작\n const workers = Array(Math.min(maxConcurrentUploads, filesToUpload.length))\n .fill(null)\n .map(() => processQueue());\n\n await Promise.all(workers);\n\n if (uploadedAttachments.length > 0) {\n onUploadComplete?.(uploadedAttachments);\n\n // 편집 모드(reorder 엔드포인트 존재)에서 드래그 순서가 있는 경우에만 onReorder 호출\n // → form.images를 올바른 순서로 덮어쓰기 (onUploadComplete의 append 순서를 교정)\n // 복사/생성 모드에서는 호출하지 않음 (linkTempImages가 별도 처리하므로 중복 방지)\n // NOTE: customOrder의 pending ID→hash 교체는 processQueue 내에서 즉시 처리됨\n if (endpoints.reorder && customOrder.length > 0 && onReorder) {\n const allExisting = [...existingFiles, ...uploadedAttachments];\n\n // pending ID를 업로드된 hash로 교체 (이미 setCustomOrder로 갱신되었지만, 클로저 값 기준 재계산)\n const updatedOrder = customOrder.map((id) => {\n const hash = pendingToHashMap.get(String(id));\n return hash ?? id;\n });\n\n const orderMap = new Map(updatedOrder.map((id, idx) => [String(id), idx]));\n const ordered = [...allExisting]\n .sort((a, b) => {\n const aOrder = orderMap.get(String(a.hash)) ?? allExisting.length;\n const bOrder = orderMap.get(String(b.hash)) ?? allExisting.length;\n return aOrder - bOrder;\n })\n .map((item, idx) => ({ ...item, sort_order: idx, order: idx + 1 }));\n\n onReorder(ordered);\n }\n }\n\n return uploadedAttachments;\n }, [pendingFiles, maxConcurrentUploads, uploadSingleFile, onUploadComplete, onUploadError, customOrder, existingFiles, onReorder, endpoints.reorder]);\n\n // 업로드 트리거 이벤트 구독 (uploadTriggerEvent가 있는 경우)\n useEffect(() => {\n if (!uploadTriggerEvent) return;\n\n const unsubscribe = G7Core.componentEvent.on(uploadTriggerEvent, async () => {\n // 업로드할 파일이 있으면 업로드, 없으면 기존 파일 ID 반환\n const uploadedAttachments = await handleUploadAll();\n return {\n uploadedAttachments,\n existingFiles,\n allFiles: [...existingFiles, ...uploadedAttachments],\n };\n });\n\n return () => {\n unsubscribe();\n };\n }, [uploadTriggerEvent, handleUploadAll, existingFiles]);\n\n // autoUpload가 true이고 pendingFiles가 추가되면 자동 업로드\n useEffect(() => {\n if (autoUpload && pendingFiles.some((f) => f.status === 'pending')) {\n handleUploadAll();\n }\n }, [autoUpload, pendingFiles, handleUploadAll]);\n\n // 실제 삭제 실행 (기존 첨부파일)\n const executeRemoveAttachment = useCallback(\n async (item: Attachment) => {\n setIsDeleting(true);\n try {\n // id가 있는 경우만 서버 API 삭제 호출 (복사 모드 등 id 없는 이미지는 로컬 제거만)\n if (item.id && endpoints.delete) {\n const deleteUrl = endpoints.delete.replace(':id', String(item.id));\n await G7Core.api.delete(deleteUrl);\n }\n // 삭제 추적 — id와 hash 모두 기록 (복사 모드 이미지는 id 없이 hash만 존재)\n const itemKey = item.hash || item.id;\n if (item.id) {\n deletedIdsRef.current.add(item.id);\n uploadedFilesRef.current.delete(item.id);\n }\n if (item.hash) {\n deletedIdsRef.current.add(item.hash);\n }\n setExistingFiles((prev) => prev.filter((f) => (f.hash || f.id) !== itemKey));\n onRemove?.(item.hash || item.id);\n setConfirmDialogOpen(false);\n setItemToDelete(null);\n } catch {\n console.error('첨부파일 삭제 실패');\n } finally {\n setIsDeleting(false);\n }\n },\n [onRemove, endpoints.delete]\n );\n\n // 파일 삭제 핸들러 (확인 모달 또는 즉시 삭제)\n const handleRemove = useCallback(\n async (item: PendingFile | Attachment) => {\n if ('hash' in item) {\n // 기존 첨부파일\n if (confirmBeforeRemove) {\n // 확인 모달 표시\n setItemToDelete(item);\n setConfirmDialogOpen(true);\n } else {\n // 즉시 삭제\n await executeRemoveAttachment(item);\n }\n } else {\n // 대기 파일 삭제 (확인 없이 즉시)\n if (item.preview) {\n URL.revokeObjectURL(item.preview);\n }\n setPendingFiles((prev) => prev.filter((f) => f.id !== item.id));\n }\n },\n [confirmBeforeRemove, executeRemoveAttachment]\n );\n\n // 재시도 핸들러\n const handleRetry = useCallback((pendingFile: PendingFile) => {\n setPendingFiles((prev) =>\n prev.map((f) =>\n f.id === pendingFile.id ? { ...f, status: 'pending', error: undefined } : f\n )\n );\n }, []);\n\n // 순서 변경\n const handleDragEnd = useCallback(\n async (event: import('@dnd-kit/core').DragEndEvent) => {\n const { arrayMove } = await import('@dnd-kit/sortable');\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n // customOrder 기반으로 시각 순서와 일치하는 allItems 계산\n // (raw [...existingFiles, ...pendingFiles] 는 시각 순서와 다를 수 있음)\n const combined = [...existingFiles, ...pendingFiles];\n let orderedItems: (Attachment | PendingFile)[];\n if (customOrder.length === 0) {\n orderedItems = combined;\n } else {\n const orderMap = new Map(customOrder.map((id, idx) => [String(id), idx]));\n orderedItems = [...combined].sort((a, b) => {\n const aKey = 'hash' in a ? String(a.hash) : String(a.id);\n const bKey = 'hash' in b ? String(b.hash) : String(b.id);\n return (orderMap.get(aKey) ?? combined.length) - (orderMap.get(bKey) ?? combined.length);\n });\n }\n\n const oldIndex = orderedItems.findIndex((item) =>\n 'hash' in item ? item.hash === active.id : item.id === active.id\n );\n const newIndex = orderedItems.findIndex((item) =>\n 'hash' in item ? item.hash === over.id : item.id === over.id\n );\n\n const reordered = arrayMove(orderedItems, oldIndex, newIndex);\n\n // 드래그 순서 보존 (기존/신규 파일 간 섞인 순서 유지)\n setCustomOrder(reordered.map((item) => 'hash' in item ? item.hash : item.id));\n\n // 분리\n const newExisting = reordered.filter((item): item is Attachment => 'hash' in item);\n const newPending = reordered.filter((item): item is PendingFile => !('hash' in item));\n\n // 순서 변경 플래그 설정 (initialFiles 동기화 방지)\n hasReorderedRef.current = true;\n\n setExistingFiles(newExisting);\n setPendingFiles(newPending);\n\n // sort_order/order 필드를 새 인덱스로 갱신 (form.images 동기화용)\n const reorderedFiles = newExisting.map((item, idx) => ({\n ...item,\n sort_order: idx,\n order: idx + 1,\n }));\n\n // 서버에 순서 변경 요청 (기존 파일 + reorder 엔드포인트가 설정된 경우만)\n if (newExisting.length > 0 && endpoints.reorder) {\n const orderData = newExisting.map((item, index) => ({\n id: item.id,\n order: index + 1,\n }));\n\n try {\n const response = await G7Core.api.patch(endpoints.reorder, { order: orderData });\n G7Core.toast.success(response.message);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : t('attachment.reorder_failed');\n G7Core.toast.error(message);\n }\n }\n\n // API 호출 성공/스킵 무관하게 항상 콜백 호출\n onReorder?.(reorderedFiles);\n },\n [existingFiles, pendingFiles, customOrder, endpoints.reorder, onReorder]\n );\n\n // 이미지 파일만 필터링 (갤러리용)\n const imageFiles = useMemo(\n () =>\n [...existingFiles, ...pendingFiles].filter((item) => {\n if ('is_image' in item) {\n // Attachment (기존 첨부파일) - is_image 필드 우선 사용\n return (item as Attachment).is_image;\n }\n // PendingFile (대기 파일) - mime_type으로 확인\n return item.mime_type?.startsWith('image/') ?? false;\n }),\n [existingFiles, pendingFiles]\n );\n\n // 갤러리 열기 (이미지 인덱스로)\n const handleOpenGallery = useCallback(\n (item: PendingFile | Attachment) => {\n // 클릭된 아이템의 인덱스를 imageFiles에서 찾기\n const imageIndex = imageFiles.findIndex((img) => {\n // 둘 다 Attachment인 경우 (hash로 비교)\n if ('hash' in item && 'hash' in img) {\n return img.hash === item.hash;\n }\n // 둘 다 PendingFile인 경우 (id로 비교)\n if ('id' in item && 'id' in img && !('hash' in item) && !('hash' in img)) {\n return img.id === item.id;\n }\n return false;\n });\n if (imageIndex !== -1) {\n // 갤러리를 열 때마다 key 증가 (강제 리마운트)\n galleryKeyRef.current += 1;\n setGalleryStartIndex(imageIndex);\n setGalleryOpen(true);\n }\n },\n [imageFiles]\n );\n\n // 기존 첨부파일 인증된 이미지 URL 로드 (갤러리용)\n useEffect(() => {\n let cancelled = false;\n\n const loadAuthenticatedUrls = async () => {\n // is_image 필드 사용 (imageFiles 필터와 일치)\n const existingImageFiles = existingFiles.filter((f) => f.is_image);\n\n // existingFiles에서 제거된 파일의 URL 정리\n const currentIds = new Set(existingImageFiles.map((f) => f.id));\n for (const [id, url] of authenticatedImageUrlsRef.current) {\n if (!currentIds.has(id)) {\n URL.revokeObjectURL(url);\n authenticatedImageUrlsRef.current.delete(id);\n }\n }\n\n for (const file of existingImageFiles) {\n if (cancelled) break;\n // ref 기반 has 체크 (stale closure 방지)\n if (authenticatedImageUrlsRef.current.has(file.id)) continue;\n\n try {\n const blob = await G7Core.api.get(file.download_url, {\n responseType: 'blob',\n });\n if (!cancelled && blob) {\n const objectUrl = URL.createObjectURL(blob);\n authenticatedImageUrlsRef.current.set(file.id, objectUrl);\n setAuthenticatedImageUrls(new Map(authenticatedImageUrlsRef.current));\n }\n } catch (error) {\n console.error('Failed to load authenticated image:', error);\n }\n }\n };\n\n loadAuthenticatedUrls();\n\n return () => {\n cancelled = true;\n };\n }, [existingFiles]);\n\n // 언마운트 시에만 모든 인증된 이미지 URL 해제\n useEffect(() => {\n return () => {\n authenticatedImageUrlsRef.current.forEach((url) => URL.revokeObjectURL(url));\n authenticatedImageUrlsRef.current.clear();\n };\n }, []);\n\n // 파일 다운로드 실행\n const handleDownload = useCallback(async (item: Attachment) => {\n const { executeImageDownload } = await import('../ImageGallery');\n await executeImageDownload({\n src: item.download_url,\n downloadUrl: item.download_url,\n filename: item.original_filename,\n downloadRequiresAuth: true,\n });\n }, []);\n\n // 계산된 값 (customOrder가 있으면 드래그 순서 유지, 없으면 기본 순서)\n const allItems = useMemo(() => {\n const combined = [...existingFiles, ...pendingFiles];\n if (customOrder.length === 0) return combined;\n\n const orderMap = new Map(customOrder.map((id, idx) => [String(id), idx]));\n return [...combined].sort((a, b) => {\n const aKey = 'hash' in a ? String(a.hash) : String(a.id);\n const bKey = 'hash' in b ? String(b.hash) : String(b.id);\n const aOrder = orderMap.get(aKey) ?? combined.length;\n const bOrder = orderMap.get(bKey) ?? combined.length;\n return aOrder - bOrder;\n });\n }, [existingFiles, pendingFiles, customOrder]);\n const totalCount = allItems.length;\n const hasFiles = totalCount > 0;\n const canAddMore = totalCount < maxFiles;\n\n // 초기화 함수들\n const clear = useCallback(() => setPendingFiles([]), []);\n const getPendingFiles = useCallback(() => pendingFiles, [pendingFiles]);\n\n return {\n // 상태\n existingFiles,\n pendingFiles,\n isDragOver,\n setIsDragOver,\n isDeleting,\n\n // 계산된 값\n totalCount,\n hasFiles,\n canAddMore,\n allItems,\n imageFiles,\n\n // 액션\n handleFiles,\n handleRemove,\n handleRetry,\n handleUploadAll,\n handleOpenGallery,\n handleDownload,\n handleDragEnd,\n\n // Input ref\n inputRef,\n\n // 갤러리 상태\n galleryOpen,\n setGalleryOpen,\n galleryStartIndex,\n galleryKeyRef,\n\n // 삭제 확인 모달 상태\n confirmDialogOpen,\n setConfirmDialogOpen,\n itemToDelete,\n executeRemoveAttachment,\n\n // 인증된 이미지 URL 캐시\n authenticatedImageUrls,\n\n // 초기화\n clear,\n getPendingFiles,\n };\n}\n\nexport default useFileUploader;","/**\n * FileDropZone 컴포넌트\n *\n * 파일을 드래그 앤 드롭하거나 클릭하여 선택할 수 있는 영역입니다.\n *\n * @module composite/FileUploader/FileDropZone\n */\n\nimport React from 'react';\n\nimport { Div } from '../../basic/Div';\nimport { P } from '../../basic/P';\nimport { I } from '../../basic/I';\n\nimport { t } from './utils';\n\nexport interface FileDropZoneProps {\n /** 드래그 오버 상태 */\n isDragOver: boolean;\n /** 추가 가능 여부 */\n canAddMore: boolean;\n /** 파일 처리 핸들러 */\n onFiles: (files: FileList) => void;\n /** 드래그 오버 상태 설정 */\n setIsDragOver: (value: boolean) => void;\n /** Input 요소 ref */\n inputRef: React.RefObject;\n /** 허용 확장자 */\n accept?: string;\n /** 최대 파일 수 */\n maxFiles: number;\n /** 최대 파일 크기 (MB) */\n maxSize: number;\n /** 자식 요소 */\n children?: React.ReactNode;\n}\n\nexport const FileDropZone: React.FC = ({\n isDragOver,\n canAddMore,\n onFiles,\n setIsDragOver,\n inputRef,\n accept,\n maxFiles,\n maxSize,\n children,\n}) => {\n return (\n {\n e.preventDefault();\n if (canAddMore) setIsDragOver(true);\n }}\n onDragLeave={() => setIsDragOver(false)}\n onDrop={(e) => {\n e.preventDefault();\n setIsDragOver(false);\n if (canAddMore) {\n onFiles(e.dataTransfer.files);\n }\n }}\n >\n e.target.files && onFiles(e.target.files)}\n className=\"hidden\"\n />\n\n {/* 파일이 없을 때: 빈 드롭존 */}\n {!children && (\n inputRef.current?.click()}\n >\n \n

\n {t('attachment.drop_or_click')}\n

\n

\n {t('attachment.upload_limit', { maxFiles, maxSize })}\n {accept && ` (${accept})`}\n

\n
\n )}\n\n {/* 파일이 있을 때: 자식 요소 렌더링 */}\n {children}\n
\n );\n};\n\nexport default FileDropZone;","import { useMemo, useLayoutEffect, useEffect, useRef, useCallback } from 'react';\n\nfunction useCombinedRefs() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n\n return useMemo(() => node => {\n refs.forEach(ref => ref(node));\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n refs);\n}\n\n// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nconst canUseDOM = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';\n\nfunction isWindow(element) {\n const elementString = Object.prototype.toString.call(element);\n return elementString === '[object Window]' || // In Electron context the Window object serializes to [object global]\n elementString === '[object global]';\n}\n\nfunction isNode(node) {\n return 'nodeType' in node;\n}\n\nfunction getWindow(target) {\n var _target$ownerDocument, _target$ownerDocument2;\n\n if (!target) {\n return window;\n }\n\n if (isWindow(target)) {\n return target;\n }\n\n if (!isNode(target)) {\n return window;\n }\n\n return (_target$ownerDocument = (_target$ownerDocument2 = target.ownerDocument) == null ? void 0 : _target$ownerDocument2.defaultView) != null ? _target$ownerDocument : window;\n}\n\nfunction isDocument(node) {\n const {\n Document\n } = getWindow(node);\n return node instanceof Document;\n}\n\nfunction isHTMLElement(node) {\n if (isWindow(node)) {\n return false;\n }\n\n return node instanceof getWindow(node).HTMLElement;\n}\n\nfunction isSVGElement(node) {\n return node instanceof getWindow(node).SVGElement;\n}\n\nfunction getOwnerDocument(target) {\n if (!target) {\n return document;\n }\n\n if (isWindow(target)) {\n return target.document;\n }\n\n if (!isNode(target)) {\n return document;\n }\n\n if (isDocument(target)) {\n return target;\n }\n\n if (isHTMLElement(target) || isSVGElement(target)) {\n return target.ownerDocument;\n }\n\n return document;\n}\n\n/**\r\n * A hook that resolves to useEffect on the server and useLayoutEffect on the client\r\n * @param callback {function} Callback function that is invoked when the dependencies of the hook change\r\n */\n\nconst useIsomorphicLayoutEffect = canUseDOM ? useLayoutEffect : useEffect;\n\nfunction useEvent(handler) {\n const handlerRef = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n handlerRef.current = handler;\n });\n return useCallback(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return handlerRef.current == null ? void 0 : handlerRef.current(...args);\n }, []);\n}\n\nfunction useInterval() {\n const intervalRef = useRef(null);\n const set = useCallback((listener, duration) => {\n intervalRef.current = setInterval(listener, duration);\n }, []);\n const clear = useCallback(() => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n return [set, clear];\n}\n\nfunction useLatestValue(value, dependencies) {\n if (dependencies === void 0) {\n dependencies = [value];\n }\n\n const valueRef = useRef(value);\n useIsomorphicLayoutEffect(() => {\n if (valueRef.current !== value) {\n valueRef.current = value;\n }\n }, dependencies);\n return valueRef;\n}\n\nfunction useLazyMemo(callback, dependencies) {\n const valueRef = useRef();\n return useMemo(() => {\n const newValue = callback(valueRef.current);\n valueRef.current = newValue;\n return newValue;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [...dependencies]);\n}\n\nfunction useNodeRef(onChange) {\n const onChangeHandler = useEvent(onChange);\n const node = useRef(null);\n const setNodeRef = useCallback(element => {\n if (element !== node.current) {\n onChangeHandler == null ? void 0 : onChangeHandler(element, node.current);\n }\n\n node.current = element;\n }, //eslint-disable-next-line\n []);\n return [node, setNodeRef];\n}\n\nfunction usePrevious(value) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n\nlet ids = {};\nfunction useUniqueId(prefix, value) {\n return useMemo(() => {\n if (value) {\n return value;\n }\n\n const id = ids[prefix] == null ? 0 : ids[prefix] + 1;\n ids[prefix] = id;\n return prefix + \"-\" + id;\n }, [prefix, value]);\n}\n\nfunction createAdjustmentFn(modifier) {\n return function (object) {\n for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n adjustments[_key - 1] = arguments[_key];\n }\n\n return adjustments.reduce((accumulator, adjustment) => {\n const entries = Object.entries(adjustment);\n\n for (const [key, valueAdjustment] of entries) {\n const value = accumulator[key];\n\n if (value != null) {\n accumulator[key] = value + modifier * valueAdjustment;\n }\n }\n\n return accumulator;\n }, { ...object\n });\n };\n}\n\nconst add = /*#__PURE__*/createAdjustmentFn(1);\nconst subtract = /*#__PURE__*/createAdjustmentFn(-1);\n\nfunction hasViewportRelativeCoordinates(event) {\n return 'clientX' in event && 'clientY' in event;\n}\n\nfunction isKeyboardEvent(event) {\n if (!event) {\n return false;\n }\n\n const {\n KeyboardEvent\n } = getWindow(event.target);\n return KeyboardEvent && event instanceof KeyboardEvent;\n}\n\nfunction isTouchEvent(event) {\n if (!event) {\n return false;\n }\n\n const {\n TouchEvent\n } = getWindow(event.target);\n return TouchEvent && event instanceof TouchEvent;\n}\n\n/**\r\n * Returns the normalized x and y coordinates for mouse and touch events.\r\n */\n\nfunction getEventCoordinates(event) {\n if (isTouchEvent(event)) {\n if (event.touches && event.touches.length) {\n const {\n clientX: x,\n clientY: y\n } = event.touches[0];\n return {\n x,\n y\n };\n } else if (event.changedTouches && event.changedTouches.length) {\n const {\n clientX: x,\n clientY: y\n } = event.changedTouches[0];\n return {\n x,\n y\n };\n }\n }\n\n if (hasViewportRelativeCoordinates(event)) {\n return {\n x: event.clientX,\n y: event.clientY\n };\n }\n\n return null;\n}\n\nconst CSS = /*#__PURE__*/Object.freeze({\n Translate: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n const {\n x,\n y\n } = transform;\n return \"translate3d(\" + (x ? Math.round(x) : 0) + \"px, \" + (y ? Math.round(y) : 0) + \"px, 0)\";\n }\n\n },\n Scale: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n const {\n scaleX,\n scaleY\n } = transform;\n return \"scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\";\n }\n\n },\n Transform: {\n toString(transform) {\n if (!transform) {\n return;\n }\n\n return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(' ');\n }\n\n },\n Transition: {\n toString(_ref) {\n let {\n property,\n duration,\n easing\n } = _ref;\n return property + \" \" + duration + \"ms \" + easing;\n }\n\n }\n});\n\nconst SELECTOR = 'a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]';\nfunction findFirstFocusableNode(element) {\n if (element.matches(SELECTOR)) {\n return element;\n }\n\n return element.querySelector(SELECTOR);\n}\n\nexport { CSS, add, canUseDOM, findFirstFocusableNode, getEventCoordinates, getOwnerDocument, getWindow, hasViewportRelativeCoordinates, isDocument, isHTMLElement, isKeyboardEvent, isNode, isSVGElement, isTouchEvent, isWindow, subtract, useCombinedRefs, useEvent, useInterval, useIsomorphicLayoutEffect, useLatestValue, useLazyMemo, useNodeRef, usePrevious, useUniqueId };\n//# sourceMappingURL=utilities.esm.js.map\n","import React, { useState, useCallback } from 'react';\n\nconst hiddenStyles = {\n display: 'none'\n};\nfunction HiddenText(_ref) {\n let {\n id,\n value\n } = _ref;\n return React.createElement(\"div\", {\n id: id,\n style: hiddenStyles\n }, value);\n}\n\nfunction LiveRegion(_ref) {\n let {\n id,\n announcement,\n ariaLiveType = \"assertive\"\n } = _ref;\n // Hide element visually but keep it readable by screen readers\n const visuallyHidden = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: 1,\n height: 1,\n margin: -1,\n border: 0,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(100%)',\n whiteSpace: 'nowrap'\n };\n return React.createElement(\"div\", {\n id: id,\n style: visuallyHidden,\n role: \"status\",\n \"aria-live\": ariaLiveType,\n \"aria-atomic\": true\n }, announcement);\n}\n\nfunction useAnnouncement() {\n const [announcement, setAnnouncement] = useState('');\n const announce = useCallback(value => {\n if (value != null) {\n setAnnouncement(value);\n }\n }, []);\n return {\n announce,\n announcement\n };\n}\n\nexport { HiddenText, LiveRegion, useAnnouncement };\n//# sourceMappingURL=accessibility.esm.js.map\n","import React, { createContext, useContext, useEffect, useState, useCallback, useMemo, useRef, memo, useReducer, cloneElement, forwardRef } from 'react';\nimport { createPortal, unstable_batchedUpdates } from 'react-dom';\nimport { useUniqueId, getEventCoordinates, getWindow, isDocument, isHTMLElement, isSVGElement, canUseDOM, isWindow, isNode, getOwnerDocument, add, isKeyboardEvent, subtract, useLazyMemo, useInterval, usePrevious, useLatestValue, useEvent, useIsomorphicLayoutEffect, useNodeRef, findFirstFocusableNode, CSS } from '@dnd-kit/utilities';\nimport { useAnnouncement, HiddenText, LiveRegion } from '@dnd-kit/accessibility';\n\nconst DndMonitorContext = /*#__PURE__*/createContext(null);\n\nfunction useDndMonitor(listener) {\n const registerListener = useContext(DndMonitorContext);\n useEffect(() => {\n if (!registerListener) {\n throw new Error('useDndMonitor must be used within a children of ');\n }\n\n const unsubscribe = registerListener(listener);\n return unsubscribe;\n }, [listener, registerListener]);\n}\n\nfunction useDndMonitorProvider() {\n const [listeners] = useState(() => new Set());\n const registerListener = useCallback(listener => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }, [listeners]);\n const dispatch = useCallback(_ref => {\n let {\n type,\n event\n } = _ref;\n listeners.forEach(listener => {\n var _listener$type;\n\n return (_listener$type = listener[type]) == null ? void 0 : _listener$type.call(listener, event);\n });\n }, [listeners]);\n return [dispatch, registerListener];\n}\n\nconst defaultScreenReaderInstructions = {\n draggable: \"\\n To pick up a draggable item, press the space bar.\\n While dragging, use the arrow keys to move the item.\\n Press space again to drop the item in its new position, or press escape to cancel.\\n \"\n};\nconst defaultAnnouncements = {\n onDragStart(_ref) {\n let {\n active\n } = _ref;\n return \"Picked up draggable item \" + active.id + \".\";\n },\n\n onDragOver(_ref2) {\n let {\n active,\n over\n } = _ref2;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was moved over droppable area \" + over.id + \".\";\n }\n\n return \"Draggable item \" + active.id + \" is no longer over a droppable area.\";\n },\n\n onDragEnd(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (over) {\n return \"Draggable item \" + active.id + \" was dropped over droppable area \" + over.id;\n }\n\n return \"Draggable item \" + active.id + \" was dropped.\";\n },\n\n onDragCancel(_ref4) {\n let {\n active\n } = _ref4;\n return \"Dragging was cancelled. Draggable item \" + active.id + \" was dropped.\";\n }\n\n};\n\nfunction Accessibility(_ref) {\n let {\n announcements = defaultAnnouncements,\n container,\n hiddenTextDescribedById,\n screenReaderInstructions = defaultScreenReaderInstructions\n } = _ref;\n const {\n announce,\n announcement\n } = useAnnouncement();\n const liveRegionId = useUniqueId(\"DndLiveRegion\");\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n useDndMonitor(useMemo(() => ({\n onDragStart(_ref2) {\n let {\n active\n } = _ref2;\n announce(announcements.onDragStart({\n active\n }));\n },\n\n onDragMove(_ref3) {\n let {\n active,\n over\n } = _ref3;\n\n if (announcements.onDragMove) {\n announce(announcements.onDragMove({\n active,\n over\n }));\n }\n },\n\n onDragOver(_ref4) {\n let {\n active,\n over\n } = _ref4;\n announce(announcements.onDragOver({\n active,\n over\n }));\n },\n\n onDragEnd(_ref5) {\n let {\n active,\n over\n } = _ref5;\n announce(announcements.onDragEnd({\n active,\n over\n }));\n },\n\n onDragCancel(_ref6) {\n let {\n active,\n over\n } = _ref6;\n announce(announcements.onDragCancel({\n active,\n over\n }));\n }\n\n }), [announce, announcements]));\n\n if (!mounted) {\n return null;\n }\n\n const markup = React.createElement(React.Fragment, null, React.createElement(HiddenText, {\n id: hiddenTextDescribedById,\n value: screenReaderInstructions.draggable\n }), React.createElement(LiveRegion, {\n id: liveRegionId,\n announcement: announcement\n }));\n return container ? createPortal(markup, container) : markup;\n}\n\nvar Action;\n\n(function (Action) {\n Action[\"DragStart\"] = \"dragStart\";\n Action[\"DragMove\"] = \"dragMove\";\n Action[\"DragEnd\"] = \"dragEnd\";\n Action[\"DragCancel\"] = \"dragCancel\";\n Action[\"DragOver\"] = \"dragOver\";\n Action[\"RegisterDroppable\"] = \"registerDroppable\";\n Action[\"SetDroppableDisabled\"] = \"setDroppableDisabled\";\n Action[\"UnregisterDroppable\"] = \"unregisterDroppable\";\n})(Action || (Action = {}));\n\nfunction noop() {}\n\nfunction useSensor(sensor, options) {\n return useMemo(() => ({\n sensor,\n options: options != null ? options : {}\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [sensor, options]);\n}\n\nfunction useSensors() {\n for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) {\n sensors[_key] = arguments[_key];\n }\n\n return useMemo(() => [...sensors].filter(sensor => sensor != null), // eslint-disable-next-line react-hooks/exhaustive-deps\n [...sensors]);\n}\n\nconst defaultCoordinates = /*#__PURE__*/Object.freeze({\n x: 0,\n y: 0\n});\n\n/**\r\n * Returns the distance between two points\r\n */\nfunction distanceBetween(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n\nfunction getRelativeTransformOrigin(event, rect) {\n const eventCoordinates = getEventCoordinates(event);\n\n if (!eventCoordinates) {\n return '0 0';\n }\n\n const transformOrigin = {\n x: (eventCoordinates.x - rect.left) / rect.width * 100,\n y: (eventCoordinates.y - rect.top) / rect.height * 100\n };\n return transformOrigin.x + \"% \" + transformOrigin.y + \"%\";\n}\n\n/**\r\n * Sort collisions from smallest to greatest value\r\n */\nfunction sortCollisionsAsc(_ref, _ref2) {\n let {\n data: {\n value: a\n }\n } = _ref;\n let {\n data: {\n value: b\n }\n } = _ref2;\n return a - b;\n}\n/**\r\n * Sort collisions from greatest to smallest value\r\n */\n\nfunction sortCollisionsDesc(_ref3, _ref4) {\n let {\n data: {\n value: a\n }\n } = _ref3;\n let {\n data: {\n value: b\n }\n } = _ref4;\n return b - a;\n}\n/**\r\n * Returns the coordinates of the corners of a given rectangle:\r\n * [TopLeft {x, y}, TopRight {x, y}, BottomLeft {x, y}, BottomRight {x, y}]\r\n */\n\nfunction cornersOfRectangle(_ref5) {\n let {\n left,\n top,\n height,\n width\n } = _ref5;\n return [{\n x: left,\n y: top\n }, {\n x: left + width,\n y: top\n }, {\n x: left,\n y: top + height\n }, {\n x: left + width,\n y: top + height\n }];\n}\nfunction getFirstCollision(collisions, property) {\n if (!collisions || collisions.length === 0) {\n return null;\n }\n\n const [firstCollision] = collisions;\n return property ? firstCollision[property] : firstCollision;\n}\n\n/**\r\n * Returns the coordinates of the center of a given ClientRect\r\n */\n\nfunction centerOfRectangle(rect, left, top) {\n if (left === void 0) {\n left = rect.left;\n }\n\n if (top === void 0) {\n top = rect.top;\n }\n\n return {\n x: left + rect.width * 0.5,\n y: top + rect.height * 0.5\n };\n}\n/**\r\n * Returns the closest rectangles from an array of rectangles to the center of a given\r\n * rectangle.\r\n */\n\n\nconst closestCenter = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const centerRect = centerOfRectangle(collisionRect, collisionRect.left, collisionRect.top);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const distBetween = distanceBetween(centerOfRectangle(rect), centerRect);\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: distBetween\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the closest rectangles from an array of rectangles to the corners of\r\n * another rectangle.\r\n */\n\nconst closestCorners = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const corners = cornersOfRectangle(collisionRect);\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const rectCorners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner, index) => {\n return accumulator + distanceBetween(rectCorners[index], corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\n/**\r\n * Returns the intersecting rectangle area between two rectangles\r\n */\n\nfunction getIntersectionRatio(entry, target) {\n const top = Math.max(target.top, entry.top);\n const left = Math.max(target.left, entry.left);\n const right = Math.min(target.left + target.width, entry.left + entry.width);\n const bottom = Math.min(target.top + target.height, entry.top + entry.height);\n const width = right - left;\n const height = bottom - top;\n\n if (left < right && top < bottom) {\n const targetArea = target.width * target.height;\n const entryArea = entry.width * entry.height;\n const intersectionArea = width * height;\n const intersectionRatio = intersectionArea / (targetArea + entryArea - intersectionArea);\n return Number(intersectionRatio.toFixed(4));\n } // Rectangles do not overlap, or overlap has an area of zero (edge/corner overlap)\n\n\n return 0;\n}\n/**\r\n * Returns the rectangles that has the greatest intersection area with a given\r\n * rectangle in an array of rectangles.\r\n */\n\nconst rectIntersection = _ref => {\n let {\n collisionRect,\n droppableRects,\n droppableContainers\n } = _ref;\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const intersectionRatio = getIntersectionRatio(rect, collisionRect);\n\n if (intersectionRatio > 0) {\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: intersectionRatio\n }\n });\n }\n }\n }\n\n return collisions.sort(sortCollisionsDesc);\n};\n\n/**\r\n * Check if a given point is contained within a bounding rectangle\r\n */\n\nfunction isPointWithinRect(point, rect) {\n const {\n top,\n left,\n bottom,\n right\n } = rect;\n return top <= point.y && point.y <= bottom && left <= point.x && point.x <= right;\n}\n/**\r\n * Returns the rectangles that the pointer is hovering over\r\n */\n\n\nconst pointerWithin = _ref => {\n let {\n droppableContainers,\n droppableRects,\n pointerCoordinates\n } = _ref;\n\n if (!pointerCoordinates) {\n return [];\n }\n\n const collisions = [];\n\n for (const droppableContainer of droppableContainers) {\n const {\n id\n } = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect && isPointWithinRect(pointerCoordinates, rect)) {\n /* There may be more than a single rectangle intersecting\r\n * with the pointer coordinates. In order to sort the\r\n * colliding rectangles, we measure the distance between\r\n * the pointer and the corners of the intersecting rectangle\r\n */\n const corners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner) => {\n return accumulator + distanceBetween(pointerCoordinates, corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n collisions.push({\n id,\n data: {\n droppableContainer,\n value: effectiveDistance\n }\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n\nfunction adjustScale(transform, rect1, rect2) {\n return { ...transform,\n scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1,\n scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1\n };\n}\n\nfunction getRectDelta(rect1, rect2) {\n return rect1 && rect2 ? {\n x: rect1.left - rect2.left,\n y: rect1.top - rect2.top\n } : defaultCoordinates;\n}\n\nfunction createRectAdjustmentFn(modifier) {\n return function adjustClientRect(rect) {\n for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n adjustments[_key - 1] = arguments[_key];\n }\n\n return adjustments.reduce((acc, adjustment) => ({ ...acc,\n top: acc.top + modifier * adjustment.y,\n bottom: acc.bottom + modifier * adjustment.y,\n left: acc.left + modifier * adjustment.x,\n right: acc.right + modifier * adjustment.x\n }), { ...rect\n });\n };\n}\nconst getAdjustedRect = /*#__PURE__*/createRectAdjustmentFn(1);\n\nfunction parseTransform(transform) {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5]\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3]\n };\n }\n\n return null;\n}\n\nfunction inverseTransform(rect, transform, transformOrigin) {\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return rect;\n }\n\n const {\n scaleX,\n scaleY,\n x: translateX,\n y: translateY\n } = parsedTransform;\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y = rect.top - translateY - (1 - scaleY) * parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x\n };\n}\n\nconst defaultOptions = {\n ignoreTransform: false\n};\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n */\n\nfunction getClientRect(element, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n let rect = element.getBoundingClientRect();\n\n if (options.ignoreTransform) {\n const {\n transform,\n transformOrigin\n } = getWindow(element).getComputedStyle(element);\n\n if (transform) {\n rect = inverseTransform(rect, transform, transformOrigin);\n }\n }\n\n const {\n top,\n left,\n width,\n height,\n bottom,\n right\n } = rect;\n return {\n top,\n left,\n width,\n height,\n bottom,\n right\n };\n}\n/**\r\n * Returns the bounding client rect of an element relative to the viewport.\r\n *\r\n * @remarks\r\n * The ClientRect returned by this method does not take into account transforms\r\n * applied to the element it measures.\r\n *\r\n */\n\nfunction getTransformAgnosticClientRect(element) {\n return getClientRect(element, {\n ignoreTransform: true\n });\n}\n\nfunction getWindowClientRect(element) {\n const width = element.innerWidth;\n const height = element.innerHeight;\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height\n };\n}\n\nfunction isFixed(node, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = getWindow(node).getComputedStyle(node);\n }\n\n return computedStyle.position === 'fixed';\n}\n\nfunction isScrollable(element, computedStyle) {\n if (computedStyle === void 0) {\n computedStyle = getWindow(element).getComputedStyle(element);\n }\n\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n return properties.some(property => {\n const value = computedStyle[property];\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n });\n}\n\nfunction getScrollableAncestors(element, limit) {\n const scrollParents = [];\n\n function findScrollableAncestors(node) {\n if (limit != null && scrollParents.length >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if (isDocument(node) && node.scrollingElement != null && !scrollParents.includes(node.scrollingElement)) {\n scrollParents.push(node.scrollingElement);\n return scrollParents;\n }\n\n if (!isHTMLElement(node) || isSVGElement(node)) {\n return scrollParents;\n }\n\n if (scrollParents.includes(node)) {\n return scrollParents;\n }\n\n const computedStyle = getWindow(element).getComputedStyle(node);\n\n if (node !== element) {\n if (isScrollable(node, computedStyle)) {\n scrollParents.push(node);\n }\n }\n\n if (isFixed(node, computedStyle)) {\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\nfunction getFirstScrollableAncestor(node) {\n const [firstScrollableAncestor] = getScrollableAncestors(node, 1);\n return firstScrollableAncestor != null ? firstScrollableAncestor : null;\n}\n\nfunction getScrollableElement(element) {\n if (!canUseDOM || !element) {\n return null;\n }\n\n if (isWindow(element)) {\n return element;\n }\n\n if (!isNode(element)) {\n return null;\n }\n\n if (isDocument(element) || element === getOwnerDocument(element).scrollingElement) {\n return window;\n }\n\n if (isHTMLElement(element)) {\n return element;\n }\n\n return null;\n}\n\nfunction getScrollXCoordinate(element) {\n if (isWindow(element)) {\n return element.scrollX;\n }\n\n return element.scrollLeft;\n}\nfunction getScrollYCoordinate(element) {\n if (isWindow(element)) {\n return element.scrollY;\n }\n\n return element.scrollTop;\n}\nfunction getScrollCoordinates(element) {\n return {\n x: getScrollXCoordinate(element),\n y: getScrollYCoordinate(element)\n };\n}\n\nvar Direction;\n\n(function (Direction) {\n Direction[Direction[\"Forward\"] = 1] = \"Forward\";\n Direction[Direction[\"Backward\"] = -1] = \"Backward\";\n})(Direction || (Direction = {}));\n\nfunction isDocumentScrollingElement(element) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === document.scrollingElement;\n}\n\nfunction getScrollPosition(scrollingContainer) {\n const minScroll = {\n x: 0,\n y: 0\n };\n const dimensions = isDocumentScrollingElement(scrollingContainer) ? {\n height: window.innerHeight,\n width: window.innerWidth\n } : {\n height: scrollingContainer.clientHeight,\n width: scrollingContainer.clientWidth\n };\n const maxScroll = {\n x: scrollingContainer.scrollWidth - dimensions.width,\n y: scrollingContainer.scrollHeight - dimensions.height\n };\n const isTop = scrollingContainer.scrollTop <= minScroll.y;\n const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n return {\n isTop,\n isLeft,\n isBottom,\n isRight,\n maxScroll,\n minScroll\n };\n}\n\nconst defaultThreshold = {\n x: 0.2,\n y: 0.2\n};\nfunction getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, _ref, acceleration, thresholdPercentage) {\n let {\n top,\n left,\n right,\n bottom\n } = _ref;\n\n if (acceleration === void 0) {\n acceleration = 10;\n }\n\n if (thresholdPercentage === void 0) {\n thresholdPercentage = defaultThreshold;\n }\n\n const {\n isTop,\n isBottom,\n isLeft,\n isRight\n } = getScrollPosition(scrollContainer);\n const direction = {\n x: 0,\n y: 0\n };\n const speed = {\n x: 0,\n y: 0\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x\n };\n\n if (!isTop && top <= scrollContainerRect.top + threshold.height) {\n // Scroll Up\n direction.y = Direction.Backward;\n speed.y = acceleration * Math.abs((scrollContainerRect.top + threshold.height - top) / threshold.height);\n } else if (!isBottom && bottom >= scrollContainerRect.bottom - threshold.height) {\n // Scroll Down\n direction.y = Direction.Forward;\n speed.y = acceleration * Math.abs((scrollContainerRect.bottom - threshold.height - bottom) / threshold.height);\n }\n\n if (!isRight && right >= scrollContainerRect.right - threshold.width) {\n // Scroll Right\n direction.x = Direction.Forward;\n speed.x = acceleration * Math.abs((scrollContainerRect.right - threshold.width - right) / threshold.width);\n } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) {\n // Scroll Left\n direction.x = Direction.Backward;\n speed.x = acceleration * Math.abs((scrollContainerRect.left + threshold.width - left) / threshold.width);\n }\n\n return {\n direction,\n speed\n };\n}\n\nfunction getScrollElementRect(element) {\n if (element === document.scrollingElement) {\n const {\n innerWidth,\n innerHeight\n } = window;\n return {\n top: 0,\n left: 0,\n right: innerWidth,\n bottom: innerHeight,\n width: innerWidth,\n height: innerHeight\n };\n }\n\n const {\n top,\n left,\n right,\n bottom\n } = element.getBoundingClientRect();\n return {\n top,\n left,\n right,\n bottom,\n width: element.clientWidth,\n height: element.clientHeight\n };\n}\n\nfunction getScrollOffsets(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return add(acc, getScrollCoordinates(node));\n }, defaultCoordinates);\n}\nfunction getScrollXOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollXCoordinate(node);\n }, 0);\n}\nfunction getScrollYOffset(scrollableAncestors) {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollYCoordinate(node);\n }, 0);\n}\n\nfunction scrollIntoViewIfNeeded(element, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n if (!element) {\n return;\n }\n\n const {\n top,\n left,\n bottom,\n right\n } = measure(element);\n const firstScrollableAncestor = getFirstScrollableAncestor(element);\n\n if (!firstScrollableAncestor) {\n return;\n }\n\n if (bottom <= 0 || right <= 0 || top >= window.innerHeight || left >= window.innerWidth) {\n element.scrollIntoView({\n block: 'center',\n inline: 'center'\n });\n }\n}\n\nconst properties = [['x', ['left', 'right'], getScrollXOffset], ['y', ['top', 'bottom'], getScrollYOffset]];\nclass Rect {\n constructor(rect, element) {\n this.rect = void 0;\n this.width = void 0;\n this.height = void 0;\n this.top = void 0;\n this.bottom = void 0;\n this.right = void 0;\n this.left = void 0;\n const scrollableAncestors = getScrollableAncestors(element);\n const scrollOffsets = getScrollOffsets(scrollableAncestors);\n this.rect = { ...rect\n };\n this.width = rect.width;\n this.height = rect.height;\n\n for (const [axis, keys, getScrollOffset] of properties) {\n for (const key of keys) {\n Object.defineProperty(this, key, {\n get: () => {\n const currentOffsets = getScrollOffset(scrollableAncestors);\n const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets;\n return this.rect[key] + scrollOffsetsDeltla;\n },\n enumerable: true\n });\n }\n }\n\n Object.defineProperty(this, 'rect', {\n enumerable: false\n });\n }\n\n}\n\nclass Listeners {\n constructor(target) {\n this.target = void 0;\n this.listeners = [];\n\n this.removeAll = () => {\n this.listeners.forEach(listener => {\n var _this$target;\n\n return (_this$target = this.target) == null ? void 0 : _this$target.removeEventListener(...listener);\n });\n };\n\n this.target = target;\n }\n\n add(eventName, handler, options) {\n var _this$target2;\n\n (_this$target2 = this.target) == null ? void 0 : _this$target2.addEventListener(eventName, handler, options);\n this.listeners.push([eventName, handler, options]);\n }\n\n}\n\nfunction getEventListenerTarget(target) {\n // If the `event.target` element is removed from the document events will still be targeted\n // at it, and hence won't always bubble up to the window or document anymore.\n // If there is any risk of an element being removed while it is being dragged,\n // the best practice is to attach the event listeners directly to the target.\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n const {\n EventTarget\n } = getWindow(target);\n return target instanceof EventTarget ? target : getOwnerDocument(target);\n}\n\nfunction hasExceededDistance(delta, measurement) {\n const dx = Math.abs(delta.x);\n const dy = Math.abs(delta.y);\n\n if (typeof measurement === 'number') {\n return Math.sqrt(dx ** 2 + dy ** 2) > measurement;\n }\n\n if ('x' in measurement && 'y' in measurement) {\n return dx > measurement.x && dy > measurement.y;\n }\n\n if ('x' in measurement) {\n return dx > measurement.x;\n }\n\n if ('y' in measurement) {\n return dy > measurement.y;\n }\n\n return false;\n}\n\nvar EventName;\n\n(function (EventName) {\n EventName[\"Click\"] = \"click\";\n EventName[\"DragStart\"] = \"dragstart\";\n EventName[\"Keydown\"] = \"keydown\";\n EventName[\"ContextMenu\"] = \"contextmenu\";\n EventName[\"Resize\"] = \"resize\";\n EventName[\"SelectionChange\"] = \"selectionchange\";\n EventName[\"VisibilityChange\"] = \"visibilitychange\";\n})(EventName || (EventName = {}));\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction stopPropagation(event) {\n event.stopPropagation();\n}\n\nvar KeyboardCode;\n\n(function (KeyboardCode) {\n KeyboardCode[\"Space\"] = \"Space\";\n KeyboardCode[\"Down\"] = \"ArrowDown\";\n KeyboardCode[\"Right\"] = \"ArrowRight\";\n KeyboardCode[\"Left\"] = \"ArrowLeft\";\n KeyboardCode[\"Up\"] = \"ArrowUp\";\n KeyboardCode[\"Esc\"] = \"Escape\";\n KeyboardCode[\"Enter\"] = \"Enter\";\n KeyboardCode[\"Tab\"] = \"Tab\";\n})(KeyboardCode || (KeyboardCode = {}));\n\nconst defaultKeyboardCodes = {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter, KeyboardCode.Tab]\n};\nconst defaultKeyboardCoordinateGetter = (event, _ref) => {\n let {\n currentCoordinates\n } = _ref;\n\n switch (event.code) {\n case KeyboardCode.Right:\n return { ...currentCoordinates,\n x: currentCoordinates.x + 25\n };\n\n case KeyboardCode.Left:\n return { ...currentCoordinates,\n x: currentCoordinates.x - 25\n };\n\n case KeyboardCode.Down:\n return { ...currentCoordinates,\n y: currentCoordinates.y + 25\n };\n\n case KeyboardCode.Up:\n return { ...currentCoordinates,\n y: currentCoordinates.y - 25\n };\n }\n\n return undefined;\n};\n\nclass KeyboardSensor {\n constructor(props) {\n this.props = void 0;\n this.autoScrollEnabled = false;\n this.referenceCoordinates = void 0;\n this.listeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n const {\n event: {\n target\n }\n } = props;\n this.props = props;\n this.listeners = new Listeners(getOwnerDocument(target));\n this.windowListeners = new Listeners(getWindow(target));\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.attach();\n }\n\n attach() {\n this.handleStart();\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown));\n }\n\n handleStart() {\n const {\n activeNode,\n onStart\n } = this.props;\n const node = activeNode.node.current;\n\n if (node) {\n scrollIntoViewIfNeeded(node);\n }\n\n onStart(defaultCoordinates);\n }\n\n handleKeyDown(event) {\n if (isKeyboardEvent(event)) {\n const {\n active,\n context,\n options\n } = this.props;\n const {\n keyboardCodes = defaultKeyboardCodes,\n coordinateGetter = defaultKeyboardCoordinateGetter,\n scrollBehavior = 'smooth'\n } = options;\n const {\n code\n } = event;\n\n if (keyboardCodes.end.includes(code)) {\n this.handleEnd(event);\n return;\n }\n\n if (keyboardCodes.cancel.includes(code)) {\n this.handleCancel(event);\n return;\n }\n\n const {\n collisionRect\n } = context.current;\n const currentCoordinates = collisionRect ? {\n x: collisionRect.left,\n y: collisionRect.top\n } : defaultCoordinates;\n\n if (!this.referenceCoordinates) {\n this.referenceCoordinates = currentCoordinates;\n }\n\n const newCoordinates = coordinateGetter(event, {\n active,\n context: context.current,\n currentCoordinates\n });\n\n if (newCoordinates) {\n const coordinatesDelta = subtract(newCoordinates, currentCoordinates);\n const scrollDelta = {\n x: 0,\n y: 0\n };\n const {\n scrollableAncestors\n } = context.current;\n\n for (const scrollContainer of scrollableAncestors) {\n const direction = event.code;\n const {\n isTop,\n isRight,\n isLeft,\n isBottom,\n maxScroll,\n minScroll\n } = getScrollPosition(scrollContainer);\n const scrollElementRect = getScrollElementRect(scrollContainer);\n const clampedCoordinates = {\n x: Math.min(direction === KeyboardCode.Right ? scrollElementRect.right - scrollElementRect.width / 2 : scrollElementRect.right, Math.max(direction === KeyboardCode.Right ? scrollElementRect.left : scrollElementRect.left + scrollElementRect.width / 2, newCoordinates.x)),\n y: Math.min(direction === KeyboardCode.Down ? scrollElementRect.bottom - scrollElementRect.height / 2 : scrollElementRect.bottom, Math.max(direction === KeyboardCode.Down ? scrollElementRect.top : scrollElementRect.top + scrollElementRect.height / 2, newCoordinates.y))\n };\n const canScrollX = direction === KeyboardCode.Right && !isRight || direction === KeyboardCode.Left && !isLeft;\n const canScrollY = direction === KeyboardCode.Down && !isBottom || direction === KeyboardCode.Up && !isTop;\n\n if (canScrollX && clampedCoordinates.x !== newCoordinates.x) {\n const newScrollCoordinates = scrollContainer.scrollLeft + coordinatesDelta.x;\n const canScrollToNewCoordinates = direction === KeyboardCode.Right && newScrollCoordinates <= maxScroll.x || direction === KeyboardCode.Left && newScrollCoordinates >= minScroll.x;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.y) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n left: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates;\n } else {\n scrollDelta.x = direction === KeyboardCode.Right ? scrollContainer.scrollLeft - maxScroll.x : scrollContainer.scrollLeft - minScroll.x;\n }\n\n if (scrollDelta.x) {\n scrollContainer.scrollBy({\n left: -scrollDelta.x,\n behavior: scrollBehavior\n });\n }\n\n break;\n } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y;\n const canScrollToNewCoordinates = direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y || direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y;\n\n if (canScrollToNewCoordinates && !coordinatesDelta.x) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n top: newScrollCoordinates,\n behavior: scrollBehavior\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates;\n } else {\n scrollDelta.y = direction === KeyboardCode.Down ? scrollContainer.scrollTop - maxScroll.y : scrollContainer.scrollTop - minScroll.y;\n }\n\n if (scrollDelta.y) {\n scrollContainer.scrollBy({\n top: -scrollDelta.y,\n behavior: scrollBehavior\n });\n }\n\n break;\n }\n }\n\n this.handleMove(event, add(subtract(newCoordinates, this.referenceCoordinates), scrollDelta));\n }\n }\n }\n\n handleMove(event, coordinates) {\n const {\n onMove\n } = this.props;\n event.preventDefault();\n onMove(coordinates);\n }\n\n handleEnd(event) {\n const {\n onEnd\n } = this.props;\n event.preventDefault();\n this.detach();\n onEnd();\n }\n\n handleCancel(event) {\n const {\n onCancel\n } = this.props;\n event.preventDefault();\n this.detach();\n onCancel();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n }\n\n}\nKeyboardSensor.activators = [{\n eventName: 'onKeyDown',\n handler: (event, _ref, _ref2) => {\n let {\n keyboardCodes = defaultKeyboardCodes,\n onActivation\n } = _ref;\n let {\n active\n } = _ref2;\n const {\n code\n } = event.nativeEvent;\n\n if (keyboardCodes.start.includes(code)) {\n const activator = active.activatorNode.current;\n\n if (activator && event.target !== activator) {\n return false;\n }\n\n event.preventDefault();\n onActivation == null ? void 0 : onActivation({\n event: event.nativeEvent\n });\n return true;\n }\n\n return false;\n }\n}];\n\nfunction isDistanceConstraint(constraint) {\n return Boolean(constraint && 'distance' in constraint);\n}\n\nfunction isDelayConstraint(constraint) {\n return Boolean(constraint && 'delay' in constraint);\n}\n\nclass AbstractPointerSensor {\n constructor(props, events, listenerTarget) {\n var _getEventCoordinates;\n\n if (listenerTarget === void 0) {\n listenerTarget = getEventListenerTarget(props.event.target);\n }\n\n this.props = void 0;\n this.events = void 0;\n this.autoScrollEnabled = true;\n this.document = void 0;\n this.activated = false;\n this.initialCoordinates = void 0;\n this.timeoutId = null;\n this.listeners = void 0;\n this.documentListeners = void 0;\n this.windowListeners = void 0;\n this.props = props;\n this.events = events;\n const {\n event\n } = props;\n const {\n target\n } = event;\n this.props = props;\n this.events = events;\n this.document = getOwnerDocument(target);\n this.documentListeners = new Listeners(this.document);\n this.listeners = new Listeners(listenerTarget);\n this.windowListeners = new Listeners(getWindow(target));\n this.initialCoordinates = (_getEventCoordinates = getEventCoordinates(event)) != null ? _getEventCoordinates : defaultCoordinates;\n this.handleStart = this.handleStart.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleKeydown = this.handleKeydown.bind(this);\n this.removeTextSelection = this.removeTextSelection.bind(this);\n this.attach();\n }\n\n attach() {\n const {\n events,\n props: {\n options: {\n activationConstraint,\n bypassActivationConstraint\n }\n }\n } = this;\n this.listeners.add(events.move.name, this.handleMove, {\n passive: false\n });\n this.listeners.add(events.end.name, this.handleEnd);\n\n if (events.cancel) {\n this.listeners.add(events.cancel.name, this.handleCancel);\n }\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.DragStart, preventDefault);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n this.windowListeners.add(EventName.ContextMenu, preventDefault);\n this.documentListeners.add(EventName.Keydown, this.handleKeydown);\n\n if (activationConstraint) {\n if (bypassActivationConstraint != null && bypassActivationConstraint({\n event: this.props.event,\n activeNode: this.props.activeNode,\n options: this.props.options\n })) {\n return this.handleStart();\n }\n\n if (isDelayConstraint(activationConstraint)) {\n this.timeoutId = setTimeout(this.handleStart, activationConstraint.delay);\n this.handlePending(activationConstraint);\n return;\n }\n\n if (isDistanceConstraint(activationConstraint)) {\n this.handlePending(activationConstraint);\n return;\n }\n }\n\n this.handleStart();\n }\n\n detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll(); // Wait until the next event loop before removing document listeners\n // This is necessary because we listen for `click` and `selection` events on the document\n\n setTimeout(this.documentListeners.removeAll, 50);\n\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n handlePending(constraint, offset) {\n const {\n active,\n onPending\n } = this.props;\n onPending(active, constraint, this.initialCoordinates, offset);\n }\n\n handleStart() {\n const {\n initialCoordinates\n } = this;\n const {\n onStart\n } = this.props;\n\n if (initialCoordinates) {\n this.activated = true; // Stop propagation of click events once activation constraints are met\n\n this.documentListeners.add(EventName.Click, stopPropagation, {\n capture: true\n }); // Remove any text selection from the document\n\n this.removeTextSelection(); // Prevent further text selection while dragging\n\n this.documentListeners.add(EventName.SelectionChange, this.removeTextSelection);\n onStart(initialCoordinates);\n }\n }\n\n handleMove(event) {\n var _getEventCoordinates2;\n\n const {\n activated,\n initialCoordinates,\n props\n } = this;\n const {\n onMove,\n options: {\n activationConstraint\n }\n } = props;\n\n if (!initialCoordinates) {\n return;\n }\n\n const coordinates = (_getEventCoordinates2 = getEventCoordinates(event)) != null ? _getEventCoordinates2 : defaultCoordinates;\n const delta = subtract(initialCoordinates, coordinates); // Constraint validation\n\n if (!activated && activationConstraint) {\n if (isDistanceConstraint(activationConstraint)) {\n if (activationConstraint.tolerance != null && hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n\n if (hasExceededDistance(delta, activationConstraint.distance)) {\n return this.handleStart();\n }\n }\n\n if (isDelayConstraint(activationConstraint)) {\n if (hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n }\n\n this.handlePending(activationConstraint, delta);\n return;\n }\n\n if (event.cancelable) {\n event.preventDefault();\n }\n\n onMove(coordinates);\n }\n\n handleEnd() {\n const {\n onAbort,\n onEnd\n } = this.props;\n this.detach();\n\n if (!this.activated) {\n onAbort(this.props.active);\n }\n\n onEnd();\n }\n\n handleCancel() {\n const {\n onAbort,\n onCancel\n } = this.props;\n this.detach();\n\n if (!this.activated) {\n onAbort(this.props.active);\n }\n\n onCancel();\n }\n\n handleKeydown(event) {\n if (event.code === KeyboardCode.Esc) {\n this.handleCancel();\n }\n }\n\n removeTextSelection() {\n var _this$document$getSel;\n\n (_this$document$getSel = this.document.getSelection()) == null ? void 0 : _this$document$getSel.removeAllRanges();\n }\n\n}\n\nconst events = {\n cancel: {\n name: 'pointercancel'\n },\n move: {\n name: 'pointermove'\n },\n end: {\n name: 'pointerup'\n }\n};\nclass PointerSensor extends AbstractPointerSensor {\n constructor(props) {\n const {\n event\n } = props; // Pointer events stop firing if the target is unmounted while dragging\n // Therefore we attach listeners to the owner document instead\n\n const listenerTarget = getOwnerDocument(event.target);\n super(props, events, listenerTarget);\n }\n\n}\nPointerSensor.activators = [{\n eventName: 'onPointerDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (!event.isPrimary || event.button !== 0) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$1 = {\n move: {\n name: 'mousemove'\n },\n end: {\n name: 'mouseup'\n }\n};\nvar MouseButton;\n\n(function (MouseButton) {\n MouseButton[MouseButton[\"RightClick\"] = 2] = \"RightClick\";\n})(MouseButton || (MouseButton = {}));\n\nclass MouseSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$1, getOwnerDocument(props.event.target));\n }\n\n}\nMouseSensor.activators = [{\n eventName: 'onMouseDown',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n\n if (event.button === MouseButton.RightClick) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nconst events$2 = {\n cancel: {\n name: 'touchcancel'\n },\n move: {\n name: 'touchmove'\n },\n end: {\n name: 'touchend'\n }\n};\nclass TouchSensor extends AbstractPointerSensor {\n constructor(props) {\n super(props, events$2);\n }\n\n static setup() {\n // Adding a non-capture and non-passive `touchmove` listener in order\n // to force `event.preventDefault()` calls to work in dynamically added\n // touchmove event handlers. This is required for iOS Safari.\n window.addEventListener(events$2.move.name, noop, {\n capture: false,\n passive: false\n });\n return function teardown() {\n window.removeEventListener(events$2.move.name, noop);\n }; // We create a new handler because the teardown function of another sensor\n // could remove our event listener if we use a referentially equal listener.\n\n function noop() {}\n }\n\n}\nTouchSensor.activators = [{\n eventName: 'onTouchStart',\n handler: (_ref, _ref2) => {\n let {\n nativeEvent: event\n } = _ref;\n let {\n onActivation\n } = _ref2;\n const {\n touches\n } = event;\n\n if (touches.length > 1) {\n return false;\n }\n\n onActivation == null ? void 0 : onActivation({\n event\n });\n return true;\n }\n}];\n\nvar AutoScrollActivator;\n\n(function (AutoScrollActivator) {\n AutoScrollActivator[AutoScrollActivator[\"Pointer\"] = 0] = \"Pointer\";\n AutoScrollActivator[AutoScrollActivator[\"DraggableRect\"] = 1] = \"DraggableRect\";\n})(AutoScrollActivator || (AutoScrollActivator = {}));\n\nvar TraversalOrder;\n\n(function (TraversalOrder) {\n TraversalOrder[TraversalOrder[\"TreeOrder\"] = 0] = \"TreeOrder\";\n TraversalOrder[TraversalOrder[\"ReversedTreeOrder\"] = 1] = \"ReversedTreeOrder\";\n})(TraversalOrder || (TraversalOrder = {}));\n\nfunction useAutoScroller(_ref) {\n let {\n acceleration,\n activator = AutoScrollActivator.Pointer,\n canScroll,\n draggingRect,\n enabled,\n interval = 5,\n order = TraversalOrder.TreeOrder,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n delta,\n threshold\n } = _ref;\n const scrollIntent = useScrollIntent({\n delta,\n disabled: !enabled\n });\n const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval();\n const scrollSpeed = useRef({\n x: 0,\n y: 0\n });\n const scrollDirection = useRef({\n x: 0,\n y: 0\n });\n const rect = useMemo(() => {\n switch (activator) {\n case AutoScrollActivator.Pointer:\n return pointerCoordinates ? {\n top: pointerCoordinates.y,\n bottom: pointerCoordinates.y,\n left: pointerCoordinates.x,\n right: pointerCoordinates.x\n } : null;\n\n case AutoScrollActivator.DraggableRect:\n return draggingRect;\n }\n }, [activator, draggingRect, pointerCoordinates]);\n const scrollContainerRef = useRef(null);\n const autoScroll = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n\n if (!scrollContainer) {\n return;\n }\n\n const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x;\n const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;\n scrollContainer.scrollBy(scrollLeft, scrollTop);\n }, []);\n const sortedScrollableAncestors = useMemo(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]);\n useEffect(() => {\n if (!enabled || !scrollableAncestors.length || !rect) {\n clearAutoScrollInterval();\n return;\n }\n\n for (const scrollContainer of sortedScrollableAncestors) {\n if ((canScroll == null ? void 0 : canScroll(scrollContainer)) === false) {\n continue;\n }\n\n const index = scrollableAncestors.indexOf(scrollContainer);\n const scrollContainerRect = scrollableAncestorRects[index];\n\n if (!scrollContainerRect) {\n continue;\n }\n\n const {\n direction,\n speed\n } = getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, rect, acceleration, threshold);\n\n for (const axis of ['x', 'y']) {\n if (!scrollIntent[axis][direction[axis]]) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n\n if (speed.x > 0 || speed.y > 0) {\n clearAutoScrollInterval();\n scrollContainerRef.current = scrollContainer;\n setAutoScrollInterval(autoScroll, interval);\n scrollSpeed.current = speed;\n scrollDirection.current = direction;\n return;\n }\n }\n\n scrollSpeed.current = {\n x: 0,\n y: 0\n };\n scrollDirection.current = {\n x: 0,\n y: 0\n };\n clearAutoScrollInterval();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [acceleration, autoScroll, canScroll, clearAutoScrollInterval, enabled, interval, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(rect), // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(scrollIntent), setAutoScrollInterval, scrollableAncestors, sortedScrollableAncestors, scrollableAncestorRects, // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold)]);\n}\nconst defaultScrollIntent = {\n x: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n },\n y: {\n [Direction.Backward]: false,\n [Direction.Forward]: false\n }\n};\n\nfunction useScrollIntent(_ref2) {\n let {\n delta,\n disabled\n } = _ref2;\n const previousDelta = usePrevious(delta);\n return useLazyMemo(previousIntent => {\n if (disabled || !previousDelta || !previousIntent) {\n // Reset scroll intent tracking when auto-scrolling is disabled\n return defaultScrollIntent;\n }\n\n const direction = {\n x: Math.sign(delta.x - previousDelta.x),\n y: Math.sign(delta.y - previousDelta.y)\n }; // Keep track of the user intent to scroll in each direction for both axis\n\n return {\n x: {\n [Direction.Backward]: previousIntent.x[Direction.Backward] || direction.x === -1,\n [Direction.Forward]: previousIntent.x[Direction.Forward] || direction.x === 1\n },\n y: {\n [Direction.Backward]: previousIntent.y[Direction.Backward] || direction.y === -1,\n [Direction.Forward]: previousIntent.y[Direction.Forward] || direction.y === 1\n }\n };\n }, [disabled, delta, previousDelta]);\n}\n\nfunction useCachedNode(draggableNodes, id) {\n const draggableNode = id != null ? draggableNodes.get(id) : undefined;\n const node = draggableNode ? draggableNode.node.current : null;\n return useLazyMemo(cachedNode => {\n var _ref;\n\n if (id == null) {\n return null;\n } // In some cases, the draggable node can unmount while dragging\n // This is the case for virtualized lists. In those situations,\n // we fall back to the last known value for that node.\n\n\n return (_ref = node != null ? node : cachedNode) != null ? _ref : null;\n }, [node, id]);\n}\n\nfunction useCombineActivators(sensors, getSyntheticHandler) {\n return useMemo(() => sensors.reduce((accumulator, sensor) => {\n const {\n sensor: Sensor\n } = sensor;\n const sensorActivators = Sensor.activators.map(activator => ({\n eventName: activator.eventName,\n handler: getSyntheticHandler(activator.handler, sensor)\n }));\n return [...accumulator, ...sensorActivators];\n }, []), [sensors, getSyntheticHandler]);\n}\n\nvar MeasuringStrategy;\n\n(function (MeasuringStrategy) {\n MeasuringStrategy[MeasuringStrategy[\"Always\"] = 0] = \"Always\";\n MeasuringStrategy[MeasuringStrategy[\"BeforeDragging\"] = 1] = \"BeforeDragging\";\n MeasuringStrategy[MeasuringStrategy[\"WhileDragging\"] = 2] = \"WhileDragging\";\n})(MeasuringStrategy || (MeasuringStrategy = {}));\n\nvar MeasuringFrequency;\n\n(function (MeasuringFrequency) {\n MeasuringFrequency[\"Optimized\"] = \"optimized\";\n})(MeasuringFrequency || (MeasuringFrequency = {}));\n\nconst defaultValue = /*#__PURE__*/new Map();\nfunction useDroppableMeasuring(containers, _ref) {\n let {\n dragging,\n dependencies,\n config\n } = _ref;\n const [queue, setQueue] = useState(null);\n const {\n frequency,\n measure,\n strategy\n } = config;\n const containersRef = useRef(containers);\n const disabled = isDisabled();\n const disabledRef = useLatestValue(disabled);\n const measureDroppableContainers = useCallback(function (ids) {\n if (ids === void 0) {\n ids = [];\n }\n\n if (disabledRef.current) {\n return;\n }\n\n setQueue(value => {\n if (value === null) {\n return ids;\n }\n\n return value.concat(ids.filter(id => !value.includes(id)));\n });\n }, [disabledRef]);\n const timeoutId = useRef(null);\n const droppableRects = useLazyMemo(previousValue => {\n if (disabled && !dragging) {\n return defaultValue;\n }\n\n if (!previousValue || previousValue === defaultValue || containersRef.current !== containers || queue != null) {\n const map = new Map();\n\n for (let container of containers) {\n if (!container) {\n continue;\n }\n\n if (queue && queue.length > 0 && !queue.includes(container.id) && container.rect.current) {\n // This container does not need to be re-measured\n map.set(container.id, container.rect.current);\n continue;\n }\n\n const node = container.node.current;\n const rect = node ? new Rect(measure(node), node) : null;\n container.rect.current = rect;\n\n if (rect) {\n map.set(container.id, rect);\n }\n }\n\n return map;\n }\n\n return previousValue;\n }, [containers, queue, dragging, disabled, measure]);\n useEffect(() => {\n containersRef.current = containers;\n }, [containers]);\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n measureDroppableContainers();\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [dragging, disabled]);\n useEffect(() => {\n if (queue && queue.length > 0) {\n setQueue(null);\n }\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(queue)]);\n useEffect(() => {\n if (disabled || typeof frequency !== 'number' || timeoutId.current !== null) {\n return;\n }\n\n timeoutId.current = setTimeout(() => {\n measureDroppableContainers();\n timeoutId.current = null;\n }, frequency);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [frequency, disabled, measureDroppableContainers, ...dependencies]);\n return {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled: queue != null\n };\n\n function isDisabled() {\n switch (strategy) {\n case MeasuringStrategy.Always:\n return false;\n\n case MeasuringStrategy.BeforeDragging:\n return dragging;\n\n default:\n return !dragging;\n }\n }\n}\n\nfunction useInitialValue(value, computeFn) {\n return useLazyMemo(previousValue => {\n if (!value) {\n return null;\n }\n\n if (previousValue) {\n return previousValue;\n }\n\n return typeof computeFn === 'function' ? computeFn(value) : value;\n }, [computeFn, value]);\n}\n\nfunction useInitialRect(node, measure) {\n return useInitialValue(node, measure);\n}\n\n/**\r\n * Returns a new MutationObserver instance.\r\n * If `MutationObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useMutationObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleMutations = useEvent(callback);\n const mutationObserver = useMemo(() => {\n if (disabled || typeof window === 'undefined' || typeof window.MutationObserver === 'undefined') {\n return undefined;\n }\n\n const {\n MutationObserver\n } = window;\n return new MutationObserver(handleMutations);\n }, [handleMutations, disabled]);\n useEffect(() => {\n return () => mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }, [mutationObserver]);\n return mutationObserver;\n}\n\n/**\r\n * Returns a new ResizeObserver instance bound to the `onResize` callback.\r\n * If `ResizeObserver` is undefined in the execution environment, returns `undefined`.\r\n */\n\nfunction useResizeObserver(_ref) {\n let {\n callback,\n disabled\n } = _ref;\n const handleResize = useEvent(callback);\n const resizeObserver = useMemo(() => {\n if (disabled || typeof window === 'undefined' || typeof window.ResizeObserver === 'undefined') {\n return undefined;\n }\n\n const {\n ResizeObserver\n } = window;\n return new ResizeObserver(handleResize);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [disabled]);\n useEffect(() => {\n return () => resizeObserver == null ? void 0 : resizeObserver.disconnect();\n }, [resizeObserver]);\n return resizeObserver;\n}\n\nfunction defaultMeasure(element) {\n return new Rect(getClientRect(element), element);\n}\n\nfunction useRect(element, measure, fallbackRect) {\n if (measure === void 0) {\n measure = defaultMeasure;\n }\n\n const [rect, setRect] = useState(null);\n\n function measureRect() {\n setRect(currentRect => {\n if (!element) {\n return null;\n }\n\n if (element.isConnected === false) {\n var _ref;\n\n // Fall back to last rect we measured if the element is\n // no longer connected to the DOM.\n return (_ref = currentRect != null ? currentRect : fallbackRect) != null ? _ref : null;\n }\n\n const newRect = measure(element);\n\n if (JSON.stringify(currentRect) === JSON.stringify(newRect)) {\n return currentRect;\n }\n\n return newRect;\n });\n }\n\n const mutationObserver = useMutationObserver({\n callback(records) {\n if (!element) {\n return;\n }\n\n for (const record of records) {\n const {\n type,\n target\n } = record;\n\n if (type === 'childList' && target instanceof HTMLElement && target.contains(element)) {\n measureRect();\n break;\n }\n }\n }\n\n });\n const resizeObserver = useResizeObserver({\n callback: measureRect\n });\n useIsomorphicLayoutEffect(() => {\n measureRect();\n\n if (element) {\n resizeObserver == null ? void 0 : resizeObserver.observe(element);\n mutationObserver == null ? void 0 : mutationObserver.observe(document.body, {\n childList: true,\n subtree: true\n });\n } else {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n mutationObserver == null ? void 0 : mutationObserver.disconnect();\n }\n }, [element]);\n return rect;\n}\n\nfunction useRectDelta(rect) {\n const initialRect = useInitialValue(rect);\n return getRectDelta(rect, initialRect);\n}\n\nconst defaultValue$1 = [];\nfunction useScrollableAncestors(node) {\n const previousNode = useRef(node);\n const ancestors = useLazyMemo(previousValue => {\n if (!node) {\n return defaultValue$1;\n }\n\n if (previousValue && previousValue !== defaultValue$1 && node && previousNode.current && node.parentNode === previousNode.current.parentNode) {\n return previousValue;\n }\n\n return getScrollableAncestors(node);\n }, [node]);\n useEffect(() => {\n previousNode.current = node;\n }, [node]);\n return ancestors;\n}\n\nfunction useScrollOffsets(elements) {\n const [scrollCoordinates, setScrollCoordinates] = useState(null);\n const prevElements = useRef(elements); // To-do: Throttle the handleScroll callback\n\n const handleScroll = useCallback(event => {\n const scrollingElement = getScrollableElement(event.target);\n\n if (!scrollingElement) {\n return;\n }\n\n setScrollCoordinates(scrollCoordinates => {\n if (!scrollCoordinates) {\n return null;\n }\n\n scrollCoordinates.set(scrollingElement, getScrollCoordinates(scrollingElement));\n return new Map(scrollCoordinates);\n });\n }, []);\n useEffect(() => {\n const previousElements = prevElements.current;\n\n if (elements !== previousElements) {\n cleanup(previousElements);\n const entries = elements.map(element => {\n const scrollableElement = getScrollableElement(element);\n\n if (scrollableElement) {\n scrollableElement.addEventListener('scroll', handleScroll, {\n passive: true\n });\n return [scrollableElement, getScrollCoordinates(scrollableElement)];\n }\n\n return null;\n }).filter(entry => entry != null);\n setScrollCoordinates(entries.length ? new Map(entries) : null);\n prevElements.current = elements;\n }\n\n return () => {\n cleanup(elements);\n cleanup(previousElements);\n };\n\n function cleanup(elements) {\n elements.forEach(element => {\n const scrollableElement = getScrollableElement(element);\n scrollableElement == null ? void 0 : scrollableElement.removeEventListener('scroll', handleScroll);\n });\n }\n }, [handleScroll, elements]);\n return useMemo(() => {\n if (elements.length) {\n return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => add(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements);\n }\n\n return defaultCoordinates;\n }, [elements, scrollCoordinates]);\n}\n\nfunction useScrollOffsetsDelta(scrollOffsets, dependencies) {\n if (dependencies === void 0) {\n dependencies = [];\n }\n\n const initialScrollOffsets = useRef(null);\n useEffect(() => {\n initialScrollOffsets.current = null;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n dependencies);\n useEffect(() => {\n const hasScrollOffsets = scrollOffsets !== defaultCoordinates;\n\n if (hasScrollOffsets && !initialScrollOffsets.current) {\n initialScrollOffsets.current = scrollOffsets;\n }\n\n if (!hasScrollOffsets && initialScrollOffsets.current) {\n initialScrollOffsets.current = null;\n }\n }, [scrollOffsets]);\n return initialScrollOffsets.current ? subtract(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates;\n}\n\nfunction useSensorSetup(sensors) {\n useEffect(() => {\n if (!canUseDOM) {\n return;\n }\n\n const teardownFns = sensors.map(_ref => {\n let {\n sensor\n } = _ref;\n return sensor.setup == null ? void 0 : sensor.setup();\n });\n return () => {\n for (const teardown of teardownFns) {\n teardown == null ? void 0 : teardown();\n }\n };\n }, // TO-DO: Sensors length could theoretically change which would not be a valid dependency\n // eslint-disable-next-line react-hooks/exhaustive-deps\n sensors.map(_ref2 => {\n let {\n sensor\n } = _ref2;\n return sensor;\n }));\n}\n\nfunction useSyntheticListeners(listeners, id) {\n return useMemo(() => {\n return listeners.reduce((acc, _ref) => {\n let {\n eventName,\n handler\n } = _ref;\n\n acc[eventName] = event => {\n handler(event, id);\n };\n\n return acc;\n }, {});\n }, [listeners, id]);\n}\n\nfunction useWindowRect(element) {\n return useMemo(() => element ? getWindowClientRect(element) : null, [element]);\n}\n\nconst defaultValue$2 = [];\nfunction useRects(elements, measure) {\n if (measure === void 0) {\n measure = getClientRect;\n }\n\n const [firstElement] = elements;\n const windowRect = useWindowRect(firstElement ? getWindow(firstElement) : null);\n const [rects, setRects] = useState(defaultValue$2);\n\n function measureRects() {\n setRects(() => {\n if (!elements.length) {\n return defaultValue$2;\n }\n\n return elements.map(element => isDocumentScrollingElement(element) ? windowRect : new Rect(measure(element), element));\n });\n }\n\n const resizeObserver = useResizeObserver({\n callback: measureRects\n });\n useIsomorphicLayoutEffect(() => {\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n measureRects();\n elements.forEach(element => resizeObserver == null ? void 0 : resizeObserver.observe(element));\n }, [elements]);\n return rects;\n}\n\nfunction getMeasurableNode(node) {\n if (!node) {\n return null;\n }\n\n if (node.children.length > 1) {\n return node;\n }\n\n const firstChild = node.children[0];\n return isHTMLElement(firstChild) ? firstChild : node;\n}\n\nfunction useDragOverlayMeasuring(_ref) {\n let {\n measure\n } = _ref;\n const [rect, setRect] = useState(null);\n const handleResize = useCallback(entries => {\n for (const {\n target\n } of entries) {\n if (isHTMLElement(target)) {\n setRect(rect => {\n const newRect = measure(target);\n return rect ? { ...rect,\n width: newRect.width,\n height: newRect.height\n } : newRect;\n });\n break;\n }\n }\n }, [measure]);\n const resizeObserver = useResizeObserver({\n callback: handleResize\n });\n const handleNodeChange = useCallback(element => {\n const node = getMeasurableNode(element);\n resizeObserver == null ? void 0 : resizeObserver.disconnect();\n\n if (node) {\n resizeObserver == null ? void 0 : resizeObserver.observe(node);\n }\n\n setRect(node ? measure(node) : null);\n }, [measure, resizeObserver]);\n const [nodeRef, setRef] = useNodeRef(handleNodeChange);\n return useMemo(() => ({\n nodeRef,\n rect,\n setRef\n }), [rect, nodeRef, setRef]);\n}\n\nconst defaultSensors = [{\n sensor: PointerSensor,\n options: {}\n}, {\n sensor: KeyboardSensor,\n options: {}\n}];\nconst defaultData = {\n current: {}\n};\nconst defaultMeasuringConfiguration = {\n draggable: {\n measure: getTransformAgnosticClientRect\n },\n droppable: {\n measure: getTransformAgnosticClientRect,\n strategy: MeasuringStrategy.WhileDragging,\n frequency: MeasuringFrequency.Optimized\n },\n dragOverlay: {\n measure: getClientRect\n }\n};\n\nclass DroppableContainersMap extends Map {\n get(id) {\n var _super$get;\n\n return id != null ? (_super$get = super.get(id)) != null ? _super$get : undefined : undefined;\n }\n\n toArray() {\n return Array.from(this.values());\n }\n\n getEnabled() {\n return this.toArray().filter(_ref => {\n let {\n disabled\n } = _ref;\n return !disabled;\n });\n }\n\n getNodeFor(id) {\n var _this$get$node$curren, _this$get;\n\n return (_this$get$node$curren = (_this$get = this.get(id)) == null ? void 0 : _this$get.node.current) != null ? _this$get$node$curren : undefined;\n }\n\n}\n\nconst defaultPublicContext = {\n activatorEvent: null,\n active: null,\n activeNode: null,\n activeNodeRect: null,\n collisions: null,\n containerNodeRect: null,\n draggableNodes: /*#__PURE__*/new Map(),\n droppableRects: /*#__PURE__*/new Map(),\n droppableContainers: /*#__PURE__*/new DroppableContainersMap(),\n over: null,\n dragOverlay: {\n nodeRef: {\n current: null\n },\n rect: null,\n setRef: noop\n },\n scrollableAncestors: [],\n scrollableAncestorRects: [],\n measuringConfiguration: defaultMeasuringConfiguration,\n measureDroppableContainers: noop,\n windowRect: null,\n measuringScheduled: false\n};\nconst defaultInternalContext = {\n activatorEvent: null,\n activators: [],\n active: null,\n activeNodeRect: null,\n ariaDescribedById: {\n draggable: ''\n },\n dispatch: noop,\n draggableNodes: /*#__PURE__*/new Map(),\n over: null,\n measureDroppableContainers: noop\n};\nconst InternalContext = /*#__PURE__*/createContext(defaultInternalContext);\nconst PublicContext = /*#__PURE__*/createContext(defaultPublicContext);\n\nfunction getInitialState() {\n return {\n draggable: {\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n nodes: new Map(),\n translate: {\n x: 0,\n y: 0\n }\n },\n droppable: {\n containers: new DroppableContainersMap()\n }\n };\n}\nfunction reducer(state, action) {\n switch (action.type) {\n case Action.DragStart:\n return { ...state,\n draggable: { ...state.draggable,\n initialCoordinates: action.initialCoordinates,\n active: action.active\n }\n };\n\n case Action.DragMove:\n if (state.draggable.active == null) {\n return state;\n }\n\n return { ...state,\n draggable: { ...state.draggable,\n translate: {\n x: action.coordinates.x - state.draggable.initialCoordinates.x,\n y: action.coordinates.y - state.draggable.initialCoordinates.y\n }\n }\n };\n\n case Action.DragEnd:\n case Action.DragCancel:\n return { ...state,\n draggable: { ...state.draggable,\n active: null,\n initialCoordinates: {\n x: 0,\n y: 0\n },\n translate: {\n x: 0,\n y: 0\n }\n }\n };\n\n case Action.RegisterDroppable:\n {\n const {\n element\n } = action;\n const {\n id\n } = element;\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, element);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.SetDroppableDisabled:\n {\n const {\n id,\n key,\n disabled\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, { ...element,\n disabled\n });\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n case Action.UnregisterDroppable:\n {\n const {\n id,\n key\n } = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.delete(id);\n return { ...state,\n droppable: { ...state.droppable,\n containers\n }\n };\n }\n\n default:\n {\n return state;\n }\n }\n}\n\nfunction RestoreFocus(_ref) {\n let {\n disabled\n } = _ref;\n const {\n active,\n activatorEvent,\n draggableNodes\n } = useContext(InternalContext);\n const previousActivatorEvent = usePrevious(activatorEvent);\n const previousActiveId = usePrevious(active == null ? void 0 : active.id); // Restore keyboard focus on the activator node\n\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n if (!activatorEvent && previousActivatorEvent && previousActiveId != null) {\n if (!isKeyboardEvent(previousActivatorEvent)) {\n return;\n }\n\n if (document.activeElement === previousActivatorEvent.target) {\n // No need to restore focus\n return;\n }\n\n const draggableNode = draggableNodes.get(previousActiveId);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n activatorNode,\n node\n } = draggableNode;\n\n if (!activatorNode.current && !node.current) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const element of [activatorNode.current, node.current]) {\n if (!element) {\n continue;\n }\n\n const focusableNode = findFirstFocusableNode(element);\n\n if (focusableNode) {\n focusableNode.focus();\n break;\n }\n }\n });\n }\n }, [activatorEvent, disabled, draggableNodes, previousActiveId, previousActivatorEvent]);\n return null;\n}\n\nfunction applyModifiers(modifiers, _ref) {\n let {\n transform,\n ...args\n } = _ref;\n return modifiers != null && modifiers.length ? modifiers.reduce((accumulator, modifier) => {\n return modifier({\n transform: accumulator,\n ...args\n });\n }, transform) : transform;\n}\n\nfunction useMeasuringConfiguration(config) {\n return useMemo(() => ({\n draggable: { ...defaultMeasuringConfiguration.draggable,\n ...(config == null ? void 0 : config.draggable)\n },\n droppable: { ...defaultMeasuringConfiguration.droppable,\n ...(config == null ? void 0 : config.droppable)\n },\n dragOverlay: { ...defaultMeasuringConfiguration.dragOverlay,\n ...(config == null ? void 0 : config.dragOverlay)\n }\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [config == null ? void 0 : config.draggable, config == null ? void 0 : config.droppable, config == null ? void 0 : config.dragOverlay]);\n}\n\nfunction useLayoutShiftScrollCompensation(_ref) {\n let {\n activeNode,\n measure,\n initialRect,\n config = true\n } = _ref;\n const initialized = useRef(false);\n const {\n x,\n y\n } = typeof config === 'boolean' ? {\n x: config,\n y: config\n } : config;\n useIsomorphicLayoutEffect(() => {\n const disabled = !x && !y;\n\n if (disabled || !activeNode) {\n initialized.current = false;\n return;\n }\n\n if (initialized.current || !initialRect) {\n // Return early if layout shift scroll compensation was already attempted\n // or if there is no initialRect to compare to.\n return;\n } // Get the most up to date node ref for the active draggable\n\n\n const node = activeNode == null ? void 0 : activeNode.node.current;\n\n if (!node || node.isConnected === false) {\n // Return early if there is no attached node ref or if the node is\n // disconnected from the document.\n return;\n }\n\n const rect = measure(node);\n const rectDelta = getRectDelta(rect, initialRect);\n\n if (!x) {\n rectDelta.x = 0;\n }\n\n if (!y) {\n rectDelta.y = 0;\n } // Only perform layout shift scroll compensation once\n\n\n initialized.current = true;\n\n if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) {\n const firstScrollableAncestor = getFirstScrollableAncestor(node);\n\n if (firstScrollableAncestor) {\n firstScrollableAncestor.scrollBy({\n top: rectDelta.y,\n left: rectDelta.x\n });\n }\n }\n }, [activeNode, x, y, initialRect, measure]);\n}\n\nconst ActiveDraggableContext = /*#__PURE__*/createContext({ ...defaultCoordinates,\n scaleX: 1,\n scaleY: 1\n});\nvar Status;\n\n(function (Status) {\n Status[Status[\"Uninitialized\"] = 0] = \"Uninitialized\";\n Status[Status[\"Initializing\"] = 1] = \"Initializing\";\n Status[Status[\"Initialized\"] = 2] = \"Initialized\";\n})(Status || (Status = {}));\n\nconst DndContext = /*#__PURE__*/memo(function DndContext(_ref) {\n var _sensorContext$curren, _dragOverlay$nodeRef$, _dragOverlay$rect, _over$rect;\n\n let {\n id,\n accessibility,\n autoScroll = true,\n children,\n sensors = defaultSensors,\n collisionDetection = rectIntersection,\n measuring,\n modifiers,\n ...props\n } = _ref;\n const store = useReducer(reducer, undefined, getInitialState);\n const [state, dispatch] = store;\n const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider();\n const [status, setStatus] = useState(Status.Uninitialized);\n const isInitialized = status === Status.Initialized;\n const {\n draggable: {\n active: activeId,\n nodes: draggableNodes,\n translate\n },\n droppable: {\n containers: droppableContainers\n }\n } = state;\n const node = activeId != null ? draggableNodes.get(activeId) : null;\n const activeRects = useRef({\n initial: null,\n translated: null\n });\n const active = useMemo(() => {\n var _node$data;\n\n return activeId != null ? {\n id: activeId,\n // It's possible for the active node to unmount while dragging\n data: (_node$data = node == null ? void 0 : node.data) != null ? _node$data : defaultData,\n rect: activeRects\n } : null;\n }, [activeId, node]);\n const activeRef = useRef(null);\n const [activeSensor, setActiveSensor] = useState(null);\n const [activatorEvent, setActivatorEvent] = useState(null);\n const latestProps = useLatestValue(props, Object.values(props));\n const draggableDescribedById = useUniqueId(\"DndDescribedBy\", id);\n const enabledDroppableContainers = useMemo(() => droppableContainers.getEnabled(), [droppableContainers]);\n const measuringConfiguration = useMeasuringConfiguration(measuring);\n const {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled\n } = useDroppableMeasuring(enabledDroppableContainers, {\n dragging: isInitialized,\n dependencies: [translate.x, translate.y],\n config: measuringConfiguration.droppable\n });\n const activeNode = useCachedNode(draggableNodes, activeId);\n const activationCoordinates = useMemo(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]);\n const autoScrollOptions = getAutoScrollerOptions();\n const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure);\n useLayoutShiftScrollCompensation({\n activeNode: activeId != null ? draggableNodes.get(activeId) : null,\n config: autoScrollOptions.layoutShiftCompensation,\n initialRect: initialActiveNodeRect,\n measure: measuringConfiguration.draggable.measure\n });\n const activeNodeRect = useRect(activeNode, measuringConfiguration.draggable.measure, initialActiveNodeRect);\n const containerNodeRect = useRect(activeNode ? activeNode.parentElement : null);\n const sensorContext = useRef({\n activatorEvent: null,\n active: null,\n activeNode,\n collisionRect: null,\n collisions: null,\n droppableRects,\n draggableNodes,\n draggingNode: null,\n draggingNodeRect: null,\n droppableContainers,\n over: null,\n scrollableAncestors: [],\n scrollAdjustedTranslate: null\n });\n const overNode = droppableContainers.getNodeFor((_sensorContext$curren = sensorContext.current.over) == null ? void 0 : _sensorContext$curren.id);\n const dragOverlay = useDragOverlayMeasuring({\n measure: measuringConfiguration.dragOverlay.measure\n }); // Use the rect of the drag overlay if it is mounted\n\n const draggingNode = (_dragOverlay$nodeRef$ = dragOverlay.nodeRef.current) != null ? _dragOverlay$nodeRef$ : activeNode;\n const draggingNodeRect = isInitialized ? (_dragOverlay$rect = dragOverlay.rect) != null ? _dragOverlay$rect : activeNodeRect : null;\n const usesDragOverlay = Boolean(dragOverlay.nodeRef.current && dragOverlay.rect); // The delta between the previous and new position of the draggable node\n // is only relevant when there is no drag overlay\n\n const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect); // Get the window rect of the dragging node\n\n const windowRect = useWindowRect(draggingNode ? getWindow(draggingNode) : null); // Get scrollable ancestors of the dragging node\n\n const scrollableAncestors = useScrollableAncestors(isInitialized ? overNode != null ? overNode : activeNode : null);\n const scrollableAncestorRects = useRects(scrollableAncestors); // Apply modifiers\n\n const modifiedTranslate = applyModifiers(modifiers, {\n transform: {\n x: translate.x - nodeRectDelta.x,\n y: translate.y - nodeRectDelta.y,\n scaleX: 1,\n scaleY: 1\n },\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect,\n over: sensorContext.current.over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n });\n const pointerCoordinates = activationCoordinates ? add(activationCoordinates, translate) : null;\n const scrollOffsets = useScrollOffsets(scrollableAncestors); // Represents the scroll delta since dragging was initiated\n\n const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets); // Represents the scroll delta since the last time the active node rect was measured\n\n const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [activeNodeRect]);\n const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment);\n const collisionRect = draggingNodeRect ? getAdjustedRect(draggingNodeRect, modifiedTranslate) : null;\n const collisions = active && collisionRect ? collisionDetection({\n active,\n collisionRect,\n droppableRects,\n droppableContainers: enabledDroppableContainers,\n pointerCoordinates\n }) : null;\n const overId = getFirstCollision(collisions, 'id');\n const [over, setOver] = useState(null); // When there is no drag overlay used, we need to account for the\n // window scroll delta\n\n const appliedTranslate = usesDragOverlay ? modifiedTranslate : add(modifiedTranslate, activeNodeScrollDelta);\n const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect);\n const activeSensorRef = useRef(null);\n const instantiateSensor = useCallback((event, _ref2) => {\n let {\n sensor: Sensor,\n options\n } = _ref2;\n\n if (activeRef.current == null) {\n return;\n }\n\n const activeNode = draggableNodes.get(activeRef.current);\n\n if (!activeNode) {\n return;\n }\n\n const activatorEvent = event.nativeEvent;\n const sensorInstance = new Sensor({\n active: activeRef.current,\n activeNode,\n event: activatorEvent,\n options,\n // Sensors need to be instantiated with refs for arguments that change over time\n // otherwise they are frozen in time with the stale arguments\n context: sensorContext,\n\n onAbort(id) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragAbort\n } = latestProps.current;\n const event = {\n id\n };\n onDragAbort == null ? void 0 : onDragAbort(event);\n dispatchMonitorEvent({\n type: 'onDragAbort',\n event\n });\n },\n\n onPending(id, constraint, initialCoordinates, offset) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragPending\n } = latestProps.current;\n const event = {\n id,\n constraint,\n initialCoordinates,\n offset\n };\n onDragPending == null ? void 0 : onDragPending(event);\n dispatchMonitorEvent({\n type: 'onDragPending',\n event\n });\n },\n\n onStart(initialCoordinates) {\n const id = activeRef.current;\n\n if (id == null) {\n return;\n }\n\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {\n onDragStart\n } = latestProps.current;\n const event = {\n activatorEvent,\n active: {\n id,\n data: draggableNode.data,\n rect: activeRects\n }\n };\n unstable_batchedUpdates(() => {\n onDragStart == null ? void 0 : onDragStart(event);\n setStatus(Status.Initializing);\n dispatch({\n type: Action.DragStart,\n initialCoordinates,\n active: id\n });\n dispatchMonitorEvent({\n type: 'onDragStart',\n event\n });\n setActiveSensor(activeSensorRef.current);\n setActivatorEvent(activatorEvent);\n });\n },\n\n onMove(coordinates) {\n dispatch({\n type: Action.DragMove,\n coordinates\n });\n },\n\n onEnd: createHandler(Action.DragEnd),\n onCancel: createHandler(Action.DragCancel)\n });\n activeSensorRef.current = sensorInstance;\n\n function createHandler(type) {\n return async function handler() {\n const {\n active,\n collisions,\n over,\n scrollAdjustedTranslate\n } = sensorContext.current;\n let event = null;\n\n if (active && scrollAdjustedTranslate) {\n const {\n cancelDrop\n } = latestProps.current;\n event = {\n activatorEvent,\n active: active,\n collisions,\n delta: scrollAdjustedTranslate,\n over\n };\n\n if (type === Action.DragEnd && typeof cancelDrop === 'function') {\n const shouldCancel = await Promise.resolve(cancelDrop(event));\n\n if (shouldCancel) {\n type = Action.DragCancel;\n }\n }\n }\n\n activeRef.current = null;\n unstable_batchedUpdates(() => {\n dispatch({\n type\n });\n setStatus(Status.Uninitialized);\n setOver(null);\n setActiveSensor(null);\n setActivatorEvent(null);\n activeSensorRef.current = null;\n const eventName = type === Action.DragEnd ? 'onDragEnd' : 'onDragCancel';\n\n if (event) {\n const handler = latestProps.current[eventName];\n handler == null ? void 0 : handler(event);\n dispatchMonitorEvent({\n type: eventName,\n event\n });\n }\n });\n };\n }\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes]);\n const bindActivatorToSensorInstantiator = useCallback((handler, sensor) => {\n return (event, active) => {\n const nativeEvent = event.nativeEvent;\n const activeDraggableNode = draggableNodes.get(active);\n\n if ( // Another sensor is already instantiating\n activeRef.current !== null || // No active draggable\n !activeDraggableNode || // Event has already been captured\n nativeEvent.dndKit || nativeEvent.defaultPrevented) {\n return;\n }\n\n const activationContext = {\n active: activeDraggableNode\n };\n const shouldActivate = handler(event, sensor.options, activationContext);\n\n if (shouldActivate === true) {\n nativeEvent.dndKit = {\n capturedBy: sensor.sensor\n };\n activeRef.current = active;\n instantiateSensor(event, sensor);\n }\n };\n }, [draggableNodes, instantiateSensor]);\n const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator);\n useSensorSetup(sensors);\n useIsomorphicLayoutEffect(() => {\n if (activeNodeRect && status === Status.Initializing) {\n setStatus(Status.Initialized);\n }\n }, [activeNodeRect, status]);\n useEffect(() => {\n const {\n onDragMove\n } = latestProps.current;\n const {\n active,\n activatorEvent,\n collisions,\n over\n } = sensorContext.current;\n\n if (!active || !activatorEvent) {\n return;\n }\n\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n unstable_batchedUpdates(() => {\n onDragMove == null ? void 0 : onDragMove(event);\n dispatchMonitorEvent({\n type: 'onDragMove',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]);\n useEffect(() => {\n const {\n active,\n activatorEvent,\n collisions,\n droppableContainers,\n scrollAdjustedTranslate\n } = sensorContext.current;\n\n if (!active || activeRef.current == null || !activatorEvent || !scrollAdjustedTranslate) {\n return;\n }\n\n const {\n onDragOver\n } = latestProps.current;\n const overContainer = droppableContainers.get(overId);\n const over = overContainer && overContainer.rect.current ? {\n id: overContainer.id,\n rect: overContainer.rect.current,\n data: overContainer.data,\n disabled: overContainer.disabled\n } : null;\n const event = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y\n },\n over\n };\n unstable_batchedUpdates(() => {\n setOver(over);\n onDragOver == null ? void 0 : onDragOver(event);\n dispatchMonitorEvent({\n type: 'onDragOver',\n event\n });\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [overId]);\n useIsomorphicLayoutEffect(() => {\n sensorContext.current = {\n activatorEvent,\n active,\n activeNode,\n collisionRect,\n collisions,\n droppableRects,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate\n };\n activeRects.current = {\n initial: draggingNodeRect,\n translated: collisionRect\n };\n }, [active, activeNode, collisions, collisionRect, draggableNodes, draggingNode, draggingNodeRect, droppableRects, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate]);\n useAutoScroller({ ...autoScrollOptions,\n delta: translate,\n draggingRect: collisionRect,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects\n });\n const publicContext = useMemo(() => {\n const context = {\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect\n };\n return context;\n }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect]);\n const internalContext = useMemo(() => {\n const context = {\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n ariaDescribedById: {\n draggable: draggableDescribedById\n },\n dispatch,\n draggableNodes,\n over,\n measureDroppableContainers\n };\n return context;\n }, [activatorEvent, activators, active, activeNodeRect, dispatch, draggableDescribedById, draggableNodes, over, measureDroppableContainers]);\n return React.createElement(DndMonitorContext.Provider, {\n value: registerMonitorListener\n }, React.createElement(InternalContext.Provider, {\n value: internalContext\n }, React.createElement(PublicContext.Provider, {\n value: publicContext\n }, React.createElement(ActiveDraggableContext.Provider, {\n value: transform\n }, children)), React.createElement(RestoreFocus, {\n disabled: (accessibility == null ? void 0 : accessibility.restoreFocus) === false\n })), React.createElement(Accessibility, { ...accessibility,\n hiddenTextDescribedById: draggableDescribedById\n }));\n\n function getAutoScrollerOptions() {\n const activeSensorDisablesAutoscroll = (activeSensor == null ? void 0 : activeSensor.autoScrollEnabled) === false;\n const autoScrollGloballyDisabled = typeof autoScroll === 'object' ? autoScroll.enabled === false : autoScroll === false;\n const enabled = isInitialized && !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled;\n\n if (typeof autoScroll === 'object') {\n return { ...autoScroll,\n enabled\n };\n }\n\n return {\n enabled\n };\n }\n});\n\nconst NullContext = /*#__PURE__*/createContext(null);\nconst defaultRole = 'button';\nconst ID_PREFIX = 'Draggable';\nfunction useDraggable(_ref) {\n let {\n id,\n data,\n disabled = false,\n attributes\n } = _ref;\n const key = useUniqueId(ID_PREFIX);\n const {\n activators,\n activatorEvent,\n active,\n activeNodeRect,\n ariaDescribedById,\n draggableNodes,\n over\n } = useContext(InternalContext);\n const {\n role = defaultRole,\n roleDescription = 'draggable',\n tabIndex = 0\n } = attributes != null ? attributes : {};\n const isDragging = (active == null ? void 0 : active.id) === id;\n const transform = useContext(isDragging ? ActiveDraggableContext : NullContext);\n const [node, setNodeRef] = useNodeRef();\n const [activatorNode, setActivatorNodeRef] = useNodeRef();\n const listeners = useSyntheticListeners(activators, id);\n const dataRef = useLatestValue(data);\n useIsomorphicLayoutEffect(() => {\n draggableNodes.set(id, {\n id,\n key,\n node,\n activatorNode,\n data: dataRef\n });\n return () => {\n const node = draggableNodes.get(id);\n\n if (node && node.key === key) {\n draggableNodes.delete(id);\n }\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes, id]);\n const memoizedAttributes = useMemo(() => ({\n role,\n tabIndex,\n 'aria-disabled': disabled,\n 'aria-pressed': isDragging && role === defaultRole ? true : undefined,\n 'aria-roledescription': roleDescription,\n 'aria-describedby': ariaDescribedById.draggable\n }), [disabled, role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]);\n return {\n active,\n activatorEvent,\n activeNodeRect,\n attributes: memoizedAttributes,\n isDragging,\n listeners: disabled ? undefined : listeners,\n node,\n over,\n setNodeRef,\n setActivatorNodeRef,\n transform\n };\n}\n\nfunction useDndContext() {\n return useContext(PublicContext);\n}\n\nconst ID_PREFIX$1 = 'Droppable';\nconst defaultResizeObserverConfig = {\n timeout: 25\n};\nfunction useDroppable(_ref) {\n let {\n data,\n disabled = false,\n id,\n resizeObserverConfig\n } = _ref;\n const key = useUniqueId(ID_PREFIX$1);\n const {\n active,\n dispatch,\n over,\n measureDroppableContainers\n } = useContext(InternalContext);\n const previous = useRef({\n disabled\n });\n const resizeObserverConnected = useRef(false);\n const rect = useRef(null);\n const callbackId = useRef(null);\n const {\n disabled: resizeObserverDisabled,\n updateMeasurementsFor,\n timeout: resizeObserverTimeout\n } = { ...defaultResizeObserverConfig,\n ...resizeObserverConfig\n };\n const ids = useLatestValue(updateMeasurementsFor != null ? updateMeasurementsFor : id);\n const handleResize = useCallback(() => {\n if (!resizeObserverConnected.current) {\n // ResizeObserver invokes the `handleResize` callback as soon as `observe` is called,\n // assuming the element is rendered and displayed.\n resizeObserverConnected.current = true;\n return;\n }\n\n if (callbackId.current != null) {\n clearTimeout(callbackId.current);\n }\n\n callbackId.current = setTimeout(() => {\n measureDroppableContainers(Array.isArray(ids.current) ? ids.current : [ids.current]);\n callbackId.current = null;\n }, resizeObserverTimeout);\n }, //eslint-disable-next-line react-hooks/exhaustive-deps\n [resizeObserverTimeout]);\n const resizeObserver = useResizeObserver({\n callback: handleResize,\n disabled: resizeObserverDisabled || !active\n });\n const handleNodeChange = useCallback((newElement, previousElement) => {\n if (!resizeObserver) {\n return;\n }\n\n if (previousElement) {\n resizeObserver.unobserve(previousElement);\n resizeObserverConnected.current = false;\n }\n\n if (newElement) {\n resizeObserver.observe(newElement);\n }\n }, [resizeObserver]);\n const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange);\n const dataRef = useLatestValue(data);\n useEffect(() => {\n if (!resizeObserver || !nodeRef.current) {\n return;\n }\n\n resizeObserver.disconnect();\n resizeObserverConnected.current = false;\n resizeObserver.observe(nodeRef.current);\n }, [nodeRef, resizeObserver]);\n useEffect(() => {\n dispatch({\n type: Action.RegisterDroppable,\n element: {\n id,\n key,\n disabled,\n node: nodeRef,\n rect,\n data: dataRef\n }\n });\n return () => dispatch({\n type: Action.UnregisterDroppable,\n key,\n id\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [id]);\n useEffect(() => {\n if (disabled !== previous.current.disabled) {\n dispatch({\n type: Action.SetDroppableDisabled,\n id,\n key,\n disabled\n });\n previous.current.disabled = disabled;\n }\n }, [id, key, disabled, dispatch]);\n return {\n active,\n rect,\n isOver: (over == null ? void 0 : over.id) === id,\n node: nodeRef,\n over,\n setNodeRef\n };\n}\n\nfunction AnimationManager(_ref) {\n let {\n animation,\n children\n } = _ref;\n const [clonedChildren, setClonedChildren] = useState(null);\n const [element, setElement] = useState(null);\n const previousChildren = usePrevious(children);\n\n if (!children && !clonedChildren && previousChildren) {\n setClonedChildren(previousChildren);\n }\n\n useIsomorphicLayoutEffect(() => {\n if (!element) {\n return;\n }\n\n const key = clonedChildren == null ? void 0 : clonedChildren.key;\n const id = clonedChildren == null ? void 0 : clonedChildren.props.id;\n\n if (key == null || id == null) {\n setClonedChildren(null);\n return;\n }\n\n Promise.resolve(animation(id, element)).then(() => {\n setClonedChildren(null);\n });\n }, [animation, clonedChildren, element]);\n return React.createElement(React.Fragment, null, children, clonedChildren ? cloneElement(clonedChildren, {\n ref: setElement\n }) : null);\n}\n\nconst defaultTransform = {\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1\n};\nfunction NullifiedContextProvider(_ref) {\n let {\n children\n } = _ref;\n return React.createElement(InternalContext.Provider, {\n value: defaultInternalContext\n }, React.createElement(ActiveDraggableContext.Provider, {\n value: defaultTransform\n }, children));\n}\n\nconst baseStyles = {\n position: 'fixed',\n touchAction: 'none'\n};\n\nconst defaultTransition = activatorEvent => {\n const isKeyboardActivator = isKeyboardEvent(activatorEvent);\n return isKeyboardActivator ? 'transform 250ms ease' : undefined;\n};\n\nconst PositionedOverlay = /*#__PURE__*/forwardRef((_ref, ref) => {\n let {\n as,\n activatorEvent,\n adjustScale,\n children,\n className,\n rect,\n style,\n transform,\n transition = defaultTransition\n } = _ref;\n\n if (!rect) {\n return null;\n }\n\n const scaleAdjustedTransform = adjustScale ? transform : { ...transform,\n scaleX: 1,\n scaleY: 1\n };\n const styles = { ...baseStyles,\n width: rect.width,\n height: rect.height,\n top: rect.top,\n left: rect.left,\n transform: CSS.Transform.toString(scaleAdjustedTransform),\n transformOrigin: adjustScale && activatorEvent ? getRelativeTransformOrigin(activatorEvent, rect) : undefined,\n transition: typeof transition === 'function' ? transition(activatorEvent) : transition,\n ...style\n };\n return React.createElement(as, {\n className,\n style: styles,\n ref\n }, children);\n});\n\nconst defaultDropAnimationSideEffects = options => _ref => {\n let {\n active,\n dragOverlay\n } = _ref;\n const originalStyles = {};\n const {\n styles,\n className\n } = options;\n\n if (styles != null && styles.active) {\n for (const [key, value] of Object.entries(styles.active)) {\n if (value === undefined) {\n continue;\n }\n\n originalStyles[key] = active.node.style.getPropertyValue(key);\n active.node.style.setProperty(key, value);\n }\n }\n\n if (styles != null && styles.dragOverlay) {\n for (const [key, value] of Object.entries(styles.dragOverlay)) {\n if (value === undefined) {\n continue;\n }\n\n dragOverlay.node.style.setProperty(key, value);\n }\n }\n\n if (className != null && className.active) {\n active.node.classList.add(className.active);\n }\n\n if (className != null && className.dragOverlay) {\n dragOverlay.node.classList.add(className.dragOverlay);\n }\n\n return function cleanup() {\n for (const [key, value] of Object.entries(originalStyles)) {\n active.node.style.setProperty(key, value);\n }\n\n if (className != null && className.active) {\n active.node.classList.remove(className.active);\n }\n };\n};\n\nconst defaultKeyframeResolver = _ref2 => {\n let {\n transform: {\n initial,\n final\n }\n } = _ref2;\n return [{\n transform: CSS.Transform.toString(initial)\n }, {\n transform: CSS.Transform.toString(final)\n }];\n};\n\nconst defaultDropAnimationConfiguration = {\n duration: 250,\n easing: 'ease',\n keyframes: defaultKeyframeResolver,\n sideEffects: /*#__PURE__*/defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0'\n }\n }\n })\n};\nfunction useDropAnimation(_ref3) {\n let {\n config,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n } = _ref3;\n return useEvent((id, node) => {\n if (config === null) {\n return;\n }\n\n const activeDraggable = draggableNodes.get(id);\n\n if (!activeDraggable) {\n return;\n }\n\n const activeNode = activeDraggable.node.current;\n\n if (!activeNode) {\n return;\n }\n\n const measurableNode = getMeasurableNode(node);\n\n if (!measurableNode) {\n return;\n }\n\n const {\n transform\n } = getWindow(node).getComputedStyle(node);\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return;\n }\n\n const animation = typeof config === 'function' ? config : createDefaultDropAnimation(config);\n scrollIntoViewIfNeeded(activeNode, measuringConfiguration.draggable.measure);\n return animation({\n active: {\n id,\n data: activeDraggable.data,\n node: activeNode,\n rect: measuringConfiguration.draggable.measure(activeNode)\n },\n draggableNodes,\n dragOverlay: {\n node,\n rect: measuringConfiguration.dragOverlay.measure(measurableNode)\n },\n droppableContainers,\n measuringConfiguration,\n transform: parsedTransform\n });\n });\n}\n\nfunction createDefaultDropAnimation(options) {\n const {\n duration,\n easing,\n sideEffects,\n keyframes\n } = { ...defaultDropAnimationConfiguration,\n ...options\n };\n return _ref4 => {\n let {\n active,\n dragOverlay,\n transform,\n ...rest\n } = _ref4;\n\n if (!duration) {\n // Do not animate if animation duration is zero.\n return;\n }\n\n const delta = {\n x: dragOverlay.rect.left - active.rect.left,\n y: dragOverlay.rect.top - active.rect.top\n };\n const scale = {\n scaleX: transform.scaleX !== 1 ? active.rect.width * transform.scaleX / dragOverlay.rect.width : 1,\n scaleY: transform.scaleY !== 1 ? active.rect.height * transform.scaleY / dragOverlay.rect.height : 1\n };\n const finalTransform = {\n x: transform.x - delta.x,\n y: transform.y - delta.y,\n ...scale\n };\n const animationKeyframes = keyframes({ ...rest,\n active,\n dragOverlay,\n transform: {\n initial: transform,\n final: finalTransform\n }\n });\n const [firstKeyframe] = animationKeyframes;\n const lastKeyframe = animationKeyframes[animationKeyframes.length - 1];\n\n if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) {\n // The start and end keyframes are the same, infer that there is no animation needed.\n return;\n }\n\n const cleanup = sideEffects == null ? void 0 : sideEffects({\n active,\n dragOverlay,\n ...rest\n });\n const animation = dragOverlay.node.animate(animationKeyframes, {\n duration,\n easing,\n fill: 'forwards'\n });\n return new Promise(resolve => {\n animation.onfinish = () => {\n cleanup == null ? void 0 : cleanup();\n resolve();\n };\n });\n };\n}\n\nlet key = 0;\nfunction useKey(id) {\n return useMemo(() => {\n if (id == null) {\n return;\n }\n\n key++;\n return key;\n }, [id]);\n}\n\nconst DragOverlay = /*#__PURE__*/React.memo(_ref => {\n let {\n adjustScale = false,\n children,\n dropAnimation: dropAnimationConfig,\n style,\n transition,\n modifiers,\n wrapperElement = 'div',\n className,\n zIndex = 999\n } = _ref;\n const {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggableNodes,\n droppableContainers,\n dragOverlay,\n over,\n measuringConfiguration,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect\n } = useDndContext();\n const transform = useContext(ActiveDraggableContext);\n const key = useKey(active == null ? void 0 : active.id);\n const modifiedTransform = applyModifiers(modifiers, {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect: dragOverlay.rect,\n over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n transform,\n windowRect\n });\n const initialRect = useInitialValue(activeNodeRect);\n const dropAnimation = useDropAnimation({\n config: dropAnimationConfig,\n draggableNodes,\n droppableContainers,\n measuringConfiguration\n }); // We need to wait for the active node to be measured before connecting the drag overlay ref\n // otherwise collisions can be computed against a mispositioned drag overlay\n\n const ref = initialRect ? dragOverlay.setRef : undefined;\n return React.createElement(NullifiedContextProvider, null, React.createElement(AnimationManager, {\n animation: dropAnimation\n }, active && key ? React.createElement(PositionedOverlay, {\n key: key,\n id: active.id,\n ref: ref,\n as: wrapperElement,\n activatorEvent: activatorEvent,\n adjustScale: adjustScale,\n className: className,\n transition: transition,\n rect: initialRect,\n style: {\n zIndex,\n ...style\n },\n transform: modifiedTransform\n }, children) : null));\n});\n\nexport { AutoScrollActivator, DndContext, DragOverlay, KeyboardCode, KeyboardSensor, MeasuringFrequency, MeasuringStrategy, MouseSensor, PointerSensor, TouchSensor, TraversalOrder, applyModifiers, closestCenter, closestCorners, defaultAnnouncements, defaultCoordinates, defaultDropAnimationConfiguration as defaultDropAnimation, defaultDropAnimationSideEffects, defaultKeyboardCoordinateGetter, defaultScreenReaderInstructions, getClientRect, getFirstCollision, getScrollableAncestors, pointerWithin, rectIntersection, useDndContext, useDndMonitor, useDraggable, useDroppable, useSensor, useSensors };\n//# sourceMappingURL=core.esm.js.map\n","import React, { useMemo, useRef, useEffect, useState, useContext } from 'react';\nimport { useDndContext, getClientRect, useDroppable, useDraggable, closestCorners, getFirstCollision, getScrollableAncestors, KeyboardCode } from '@dnd-kit/core';\nimport { useUniqueId, useIsomorphicLayoutEffect, CSS, useCombinedRefs, isKeyboardEvent, subtract } from '@dnd-kit/utilities';\n\n/**\r\n * Move an array item to a different position. Returns a new array with the item moved to the new position.\r\n */\nfunction arrayMove(array, from, to) {\n const newArray = array.slice();\n newArray.splice(to < 0 ? newArray.length + to : to, 0, newArray.splice(from, 1)[0]);\n return newArray;\n}\n\n/**\r\n * Swap an array item to a different position. Returns a new array with the item swapped to the new position.\r\n */\nfunction arraySwap(array, from, to) {\n const newArray = array.slice();\n newArray[from] = array[to];\n newArray[to] = array[from];\n return newArray;\n}\n\nfunction getSortedRects(items, rects) {\n return items.reduce((accumulator, id, index) => {\n const rect = rects.get(id);\n\n if (rect) {\n accumulator[index] = rect;\n }\n\n return accumulator;\n }, Array(items.length));\n}\n\nfunction isValidIndex(index) {\n return index !== null && index >= 0;\n}\n\nfunction itemsEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction normalizeDisabled(disabled) {\n if (typeof disabled === 'boolean') {\n return {\n draggable: disabled,\n droppable: disabled\n };\n }\n\n return disabled;\n}\n\n// To-do: We should be calculating scale transformation\nconst defaultScale = {\n scaleX: 1,\n scaleY: 1\n};\nconst horizontalListSortingStrategy = _ref => {\n var _rects$activeIndex;\n\n let {\n rects,\n activeNodeRect: fallbackActiveRect,\n activeIndex,\n overIndex,\n index\n } = _ref;\n const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect;\n\n if (!activeNodeRect) {\n return null;\n }\n\n const itemGap = getItemGap(rects, index, activeIndex);\n\n if (index === activeIndex) {\n const newIndexRect = rects[overIndex];\n\n if (!newIndexRect) {\n return null;\n }\n\n return {\n x: activeIndex < overIndex ? newIndexRect.left + newIndexRect.width - (activeNodeRect.left + activeNodeRect.width) : newIndexRect.left - activeNodeRect.left,\n y: 0,\n ...defaultScale\n };\n }\n\n if (index > activeIndex && index <= overIndex) {\n return {\n x: -activeNodeRect.width - itemGap,\n y: 0,\n ...defaultScale\n };\n }\n\n if (index < activeIndex && index >= overIndex) {\n return {\n x: activeNodeRect.width + itemGap,\n y: 0,\n ...defaultScale\n };\n }\n\n return {\n x: 0,\n y: 0,\n ...defaultScale\n };\n};\n\nfunction getItemGap(rects, index, activeIndex) {\n const currentRect = rects[index];\n const previousRect = rects[index - 1];\n const nextRect = rects[index + 1];\n\n if (!currentRect || !previousRect && !nextRect) {\n return 0;\n }\n\n if (activeIndex < index) {\n return previousRect ? currentRect.left - (previousRect.left + previousRect.width) : nextRect.left - (currentRect.left + currentRect.width);\n }\n\n return nextRect ? nextRect.left - (currentRect.left + currentRect.width) : currentRect.left - (previousRect.left + previousRect.width);\n}\n\nconst rectSortingStrategy = _ref => {\n let {\n rects,\n activeIndex,\n overIndex,\n index\n } = _ref;\n const newRects = arrayMove(rects, overIndex, activeIndex);\n const oldRect = rects[index];\n const newRect = newRects[index];\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height\n };\n};\n\nconst rectSwappingStrategy = _ref => {\n let {\n activeIndex,\n index,\n rects,\n overIndex\n } = _ref;\n let oldRect;\n let newRect;\n\n if (index === activeIndex) {\n oldRect = rects[index];\n newRect = rects[overIndex];\n }\n\n if (index === overIndex) {\n oldRect = rects[index];\n newRect = rects[activeIndex];\n }\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height\n };\n};\n\n// To-do: We should be calculating scale transformation\nconst defaultScale$1 = {\n scaleX: 1,\n scaleY: 1\n};\nconst verticalListSortingStrategy = _ref => {\n var _rects$activeIndex;\n\n let {\n activeIndex,\n activeNodeRect: fallbackActiveRect,\n index,\n rects,\n overIndex\n } = _ref;\n const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect;\n\n if (!activeNodeRect) {\n return null;\n }\n\n if (index === activeIndex) {\n const overIndexRect = rects[overIndex];\n\n if (!overIndexRect) {\n return null;\n }\n\n return {\n x: 0,\n y: activeIndex < overIndex ? overIndexRect.top + overIndexRect.height - (activeNodeRect.top + activeNodeRect.height) : overIndexRect.top - activeNodeRect.top,\n ...defaultScale$1\n };\n }\n\n const itemGap = getItemGap$1(rects, index, activeIndex);\n\n if (index > activeIndex && index <= overIndex) {\n return {\n x: 0,\n y: -activeNodeRect.height - itemGap,\n ...defaultScale$1\n };\n }\n\n if (index < activeIndex && index >= overIndex) {\n return {\n x: 0,\n y: activeNodeRect.height + itemGap,\n ...defaultScale$1\n };\n }\n\n return {\n x: 0,\n y: 0,\n ...defaultScale$1\n };\n};\n\nfunction getItemGap$1(clientRects, index, activeIndex) {\n const currentRect = clientRects[index];\n const previousRect = clientRects[index - 1];\n const nextRect = clientRects[index + 1];\n\n if (!currentRect) {\n return 0;\n }\n\n if (activeIndex < index) {\n return previousRect ? currentRect.top - (previousRect.top + previousRect.height) : nextRect ? nextRect.top - (currentRect.top + currentRect.height) : 0;\n }\n\n return nextRect ? nextRect.top - (currentRect.top + currentRect.height) : previousRect ? currentRect.top - (previousRect.top + previousRect.height) : 0;\n}\n\nconst ID_PREFIX = 'Sortable';\nconst Context = /*#__PURE__*/React.createContext({\n activeIndex: -1,\n containerId: ID_PREFIX,\n disableTransforms: false,\n items: [],\n overIndex: -1,\n useDragOverlay: false,\n sortedRects: [],\n strategy: rectSortingStrategy,\n disabled: {\n draggable: false,\n droppable: false\n }\n});\nfunction SortableContext(_ref) {\n let {\n children,\n id,\n items: userDefinedItems,\n strategy = rectSortingStrategy,\n disabled: disabledProp = false\n } = _ref;\n const {\n active,\n dragOverlay,\n droppableRects,\n over,\n measureDroppableContainers\n } = useDndContext();\n const containerId = useUniqueId(ID_PREFIX, id);\n const useDragOverlay = Boolean(dragOverlay.rect !== null);\n const items = useMemo(() => userDefinedItems.map(item => typeof item === 'object' && 'id' in item ? item.id : item), [userDefinedItems]);\n const isDragging = active != null;\n const activeIndex = active ? items.indexOf(active.id) : -1;\n const overIndex = over ? items.indexOf(over.id) : -1;\n const previousItemsRef = useRef(items);\n const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current);\n const disableTransforms = overIndex !== -1 && activeIndex === -1 || itemsHaveChanged;\n const disabled = normalizeDisabled(disabledProp);\n useIsomorphicLayoutEffect(() => {\n if (itemsHaveChanged && isDragging) {\n measureDroppableContainers(items);\n }\n }, [itemsHaveChanged, items, isDragging, measureDroppableContainers]);\n useEffect(() => {\n previousItemsRef.current = items;\n }, [items]);\n const contextValue = useMemo(() => ({\n activeIndex,\n containerId,\n disabled,\n disableTransforms,\n items,\n overIndex,\n useDragOverlay,\n sortedRects: getSortedRects(items, droppableRects),\n strategy\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [activeIndex, containerId, disabled.draggable, disabled.droppable, disableTransforms, items, overIndex, droppableRects, useDragOverlay, strategy]);\n return React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nconst defaultNewIndexGetter = _ref => {\n let {\n id,\n items,\n activeIndex,\n overIndex\n } = _ref;\n return arrayMove(items, activeIndex, overIndex).indexOf(id);\n};\nconst defaultAnimateLayoutChanges = _ref2 => {\n let {\n containerId,\n isSorting,\n wasDragging,\n index,\n items,\n newIndex,\n previousItems,\n previousContainerId,\n transition\n } = _ref2;\n\n if (!transition || !wasDragging) {\n return false;\n }\n\n if (previousItems !== items && index === newIndex) {\n return false;\n }\n\n if (isSorting) {\n return true;\n }\n\n return newIndex !== index && containerId === previousContainerId;\n};\nconst defaultTransition = {\n duration: 200,\n easing: 'ease'\n};\nconst transitionProperty = 'transform';\nconst disabledTransition = /*#__PURE__*/CSS.Transition.toString({\n property: transitionProperty,\n duration: 0,\n easing: 'linear'\n});\nconst defaultAttributes = {\n roleDescription: 'sortable'\n};\n\n/*\r\n * When the index of an item changes while sorting,\r\n * we need to temporarily disable the transforms\r\n */\n\nfunction useDerivedTransform(_ref) {\n let {\n disabled,\n index,\n node,\n rect\n } = _ref;\n const [derivedTransform, setDerivedtransform] = useState(null);\n const previousIndex = useRef(index);\n useIsomorphicLayoutEffect(() => {\n if (!disabled && index !== previousIndex.current && node.current) {\n const initial = rect.current;\n\n if (initial) {\n const current = getClientRect(node.current, {\n ignoreTransform: true\n });\n const delta = {\n x: initial.left - current.left,\n y: initial.top - current.top,\n scaleX: initial.width / current.width,\n scaleY: initial.height / current.height\n };\n\n if (delta.x || delta.y) {\n setDerivedtransform(delta);\n }\n }\n }\n\n if (index !== previousIndex.current) {\n previousIndex.current = index;\n }\n }, [disabled, index, node, rect]);\n useEffect(() => {\n if (derivedTransform) {\n setDerivedtransform(null);\n }\n }, [derivedTransform]);\n return derivedTransform;\n}\n\nfunction useSortable(_ref) {\n let {\n animateLayoutChanges = defaultAnimateLayoutChanges,\n attributes: userDefinedAttributes,\n disabled: localDisabled,\n data: customData,\n getNewIndex = defaultNewIndexGetter,\n id,\n strategy: localStrategy,\n resizeObserverConfig,\n transition = defaultTransition\n } = _ref;\n const {\n items,\n containerId,\n activeIndex,\n disabled: globalDisabled,\n disableTransforms,\n sortedRects,\n overIndex,\n useDragOverlay,\n strategy: globalStrategy\n } = useContext(Context);\n const disabled = normalizeLocalDisabled(localDisabled, globalDisabled);\n const index = items.indexOf(id);\n const data = useMemo(() => ({\n sortable: {\n containerId,\n index,\n items\n },\n ...customData\n }), [containerId, customData, index, items]);\n const itemsAfterCurrentSortable = useMemo(() => items.slice(items.indexOf(id)), [items, id]);\n const {\n rect,\n node,\n isOver,\n setNodeRef: setDroppableNodeRef\n } = useDroppable({\n id,\n data,\n disabled: disabled.droppable,\n resizeObserverConfig: {\n updateMeasurementsFor: itemsAfterCurrentSortable,\n ...resizeObserverConfig\n }\n });\n const {\n active,\n activatorEvent,\n activeNodeRect,\n attributes,\n setNodeRef: setDraggableNodeRef,\n listeners,\n isDragging,\n over,\n setActivatorNodeRef,\n transform\n } = useDraggable({\n id,\n data,\n attributes: { ...defaultAttributes,\n ...userDefinedAttributes\n },\n disabled: disabled.draggable\n });\n const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef);\n const isSorting = Boolean(active);\n const displaceItem = isSorting && !disableTransforms && isValidIndex(activeIndex) && isValidIndex(overIndex);\n const shouldDisplaceDragSource = !useDragOverlay && isDragging;\n const dragSourceDisplacement = shouldDisplaceDragSource && displaceItem ? transform : null;\n const strategy = localStrategy != null ? localStrategy : globalStrategy;\n const finalTransform = displaceItem ? dragSourceDisplacement != null ? dragSourceDisplacement : strategy({\n rects: sortedRects,\n activeNodeRect,\n activeIndex,\n overIndex,\n index\n }) : null;\n const newIndex = isValidIndex(activeIndex) && isValidIndex(overIndex) ? getNewIndex({\n id,\n items,\n activeIndex,\n overIndex\n }) : index;\n const activeId = active == null ? void 0 : active.id;\n const previous = useRef({\n activeId,\n items,\n newIndex,\n containerId\n });\n const itemsHaveChanged = items !== previous.current.items;\n const shouldAnimateLayoutChanges = animateLayoutChanges({\n active,\n containerId,\n isDragging,\n isSorting,\n id,\n index,\n items,\n newIndex: previous.current.newIndex,\n previousItems: previous.current.items,\n previousContainerId: previous.current.containerId,\n transition,\n wasDragging: previous.current.activeId != null\n });\n const derivedTransform = useDerivedTransform({\n disabled: !shouldAnimateLayoutChanges,\n index,\n node,\n rect\n });\n useEffect(() => {\n if (isSorting && previous.current.newIndex !== newIndex) {\n previous.current.newIndex = newIndex;\n }\n\n if (containerId !== previous.current.containerId) {\n previous.current.containerId = containerId;\n }\n\n if (items !== previous.current.items) {\n previous.current.items = items;\n }\n }, [isSorting, newIndex, containerId, items]);\n useEffect(() => {\n if (activeId === previous.current.activeId) {\n return;\n }\n\n if (activeId != null && previous.current.activeId == null) {\n previous.current.activeId = activeId;\n return;\n }\n\n const timeoutId = setTimeout(() => {\n previous.current.activeId = activeId;\n }, 50);\n return () => clearTimeout(timeoutId);\n }, [activeId]);\n return {\n active,\n activeIndex,\n attributes,\n data,\n rect,\n index,\n newIndex,\n items,\n isOver,\n isSorting,\n isDragging,\n listeners,\n node,\n overIndex,\n over,\n setNodeRef,\n setActivatorNodeRef,\n setDroppableNodeRef,\n setDraggableNodeRef,\n transform: derivedTransform != null ? derivedTransform : finalTransform,\n transition: getTransition()\n };\n\n function getTransition() {\n if ( // Temporarily disable transitions for a single frame to set up derived transforms\n derivedTransform || // Or to prevent items jumping to back to their \"new\" position when items change\n itemsHaveChanged && previous.current.newIndex === index) {\n return disabledTransition;\n }\n\n if (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent) || !transition) {\n return undefined;\n }\n\n if (isSorting || shouldAnimateLayoutChanges) {\n return CSS.Transition.toString({ ...transition,\n property: transitionProperty\n });\n }\n\n return undefined;\n }\n}\n\nfunction normalizeLocalDisabled(localDisabled, globalDisabled) {\n var _localDisabled$dragga, _localDisabled$droppa;\n\n if (typeof localDisabled === 'boolean') {\n return {\n draggable: localDisabled,\n // Backwards compatibility\n droppable: false\n };\n }\n\n return {\n draggable: (_localDisabled$dragga = localDisabled == null ? void 0 : localDisabled.draggable) != null ? _localDisabled$dragga : globalDisabled.draggable,\n droppable: (_localDisabled$droppa = localDisabled == null ? void 0 : localDisabled.droppable) != null ? _localDisabled$droppa : globalDisabled.droppable\n };\n}\n\nfunction hasSortableData(entry) {\n if (!entry) {\n return false;\n }\n\n const data = entry.data.current;\n\n if (data && 'sortable' in data && typeof data.sortable === 'object' && 'containerId' in data.sortable && 'items' in data.sortable && 'index' in data.sortable) {\n return true;\n }\n\n return false;\n}\n\nconst directions = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left];\nconst sortableKeyboardCoordinates = (event, _ref) => {\n let {\n context: {\n active,\n collisionRect,\n droppableRects,\n droppableContainers,\n over,\n scrollableAncestors\n }\n } = _ref;\n\n if (directions.includes(event.code)) {\n event.preventDefault();\n\n if (!active || !collisionRect) {\n return;\n }\n\n const filteredContainers = [];\n droppableContainers.getEnabled().forEach(entry => {\n if (!entry || entry != null && entry.disabled) {\n return;\n }\n\n const rect = droppableRects.get(entry.id);\n\n if (!rect) {\n return;\n }\n\n switch (event.code) {\n case KeyboardCode.Down:\n if (collisionRect.top < rect.top) {\n filteredContainers.push(entry);\n }\n\n break;\n\n case KeyboardCode.Up:\n if (collisionRect.top > rect.top) {\n filteredContainers.push(entry);\n }\n\n break;\n\n case KeyboardCode.Left:\n if (collisionRect.left > rect.left) {\n filteredContainers.push(entry);\n }\n\n break;\n\n case KeyboardCode.Right:\n if (collisionRect.left < rect.left) {\n filteredContainers.push(entry);\n }\n\n break;\n }\n });\n const collisions = closestCorners({\n active,\n collisionRect: collisionRect,\n droppableRects,\n droppableContainers: filteredContainers,\n pointerCoordinates: null\n });\n let closestId = getFirstCollision(collisions, 'id');\n\n if (closestId === (over == null ? void 0 : over.id) && collisions.length > 1) {\n closestId = collisions[1].id;\n }\n\n if (closestId != null) {\n const activeDroppable = droppableContainers.get(active.id);\n const newDroppable = droppableContainers.get(closestId);\n const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null;\n const newNode = newDroppable == null ? void 0 : newDroppable.node.current;\n\n if (newNode && newRect && activeDroppable && newDroppable) {\n const newScrollAncestors = getScrollableAncestors(newNode);\n const hasDifferentScrollAncestors = newScrollAncestors.some((element, index) => scrollableAncestors[index] !== element);\n const hasSameContainer = isSameContainer(activeDroppable, newDroppable);\n const isAfterActive = isAfter(activeDroppable, newDroppable);\n const offset = hasDifferentScrollAncestors || !hasSameContainer ? {\n x: 0,\n y: 0\n } : {\n x: isAfterActive ? collisionRect.width - newRect.width : 0,\n y: isAfterActive ? collisionRect.height - newRect.height : 0\n };\n const rectCoordinates = {\n x: newRect.left,\n y: newRect.top\n };\n const newCoordinates = offset.x && offset.y ? rectCoordinates : subtract(rectCoordinates, offset);\n return newCoordinates;\n }\n }\n }\n\n return undefined;\n};\n\nfunction isSameContainer(a, b) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n return a.data.current.sortable.containerId === b.data.current.sortable.containerId;\n}\n\nfunction isAfter(a, b) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n if (!isSameContainer(a, b)) {\n return false;\n }\n\n return a.data.current.sortable.index < b.data.current.sortable.index;\n}\n\nexport { SortableContext, arrayMove, arraySwap, defaultAnimateLayoutChanges, defaultNewIndexGetter, hasSortableData, horizontalListSortingStrategy, rectSortingStrategy, rectSwappingStrategy, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy };\n//# sourceMappingURL=sortable.esm.js.map\n","/**\n * SortableThumbnailItem 컴포넌트\n *\n * 드래그 앤 드롭이 가능한 파일 썸네일 아이템입니다.\n *\n * @module composite/FileUploader/SortableThumbnailItem\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nimport { Div } from '../../basic/Div';\nimport { Button } from '../../basic/Button';\nimport { Span } from '../../basic/Span';\nimport { P } from '../../basic/P';\nimport { I } from '../../basic/I';\nimport { Img } from '../../basic/Img';\n\nimport type { Attachment, PendingFile } from './types';\nimport { getFileIcon, t } from './utils';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst G7Core = (window as any).G7Core;\n\nexport interface SortableThumbnailItemProps {\n file: PendingFile | (Attachment & { status?: string });\n onRemove: () => void;\n onRetry?: () => void;\n /** 이미지 클릭 시 갤러리 열기 */\n onImageClick?: () => void;\n /** 비이미지 파일 클릭/다운로드 시 호출 */\n onDownload?: () => void;\n /** 대표 이미지 여부 */\n isPrimary?: boolean;\n /** 대표 이미지 설정 클릭 핸들러 */\n onPrimaryClick?: () => void;\n}\n\nexport const SortableThumbnailItem: React.FC = ({\n file,\n onRemove,\n onRetry,\n onImageClick,\n onDownload,\n isPrimary,\n onPrimaryClick,\n}) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: 'hash' in file ? file.hash : file.id,\n });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n const isPending = 'status' in file && file.status !== undefined;\n const status = isPending ? (file as PendingFile).status : 'done';\n const isUploading = status === 'uploading';\n const isCompressing = status === 'compressing';\n const hasError = status === 'error';\n const progress = isPending ? (file as PendingFile).progress : 100;\n const preview = isPending ? (file as PendingFile).preview : undefined;\n // 기존 첨부파일: is_image 필드 우선 사용, 대기 파일: mime_type 확인\n const isImage = !isPending\n ? (file as Attachment).is_image\n : (file.mime_type?.startsWith('image/') ?? false);\n\n // 인증된 이미지 로딩을 위한 상태\n const [authenticatedImageUrl, setAuthenticatedImageUrl] = useState(undefined);\n const downloadUrl = !isPending && isImage ? (file as Attachment).download_url : undefined;\n\n // 기존 첨부파일의 경우 인증된 요청으로 이미지 로드\n useEffect(() => {\n if (!downloadUrl) {\n setAuthenticatedImageUrl(undefined);\n return;\n }\n\n let isMounted = true;\n let objectUrl: string | undefined;\n\n const loadAuthenticatedImage = async () => {\n try {\n const blob = await G7Core.api.get(downloadUrl, {\n responseType: 'blob',\n });\n if (isMounted && blob) {\n objectUrl = URL.createObjectURL(blob);\n setAuthenticatedImageUrl(objectUrl);\n }\n } catch (error) {\n console.error('Failed to load authenticated image:', error);\n }\n };\n\n loadAuthenticatedImage();\n\n return () => {\n isMounted = false;\n if (objectUrl) {\n URL.revokeObjectURL(objectUrl);\n }\n };\n }, [downloadUrl]);\n\n // 기존 첨부파일의 경우 인증된 URL 사용\n const existingImageUrl = authenticatedImageUrl;\n\n return (\n \n {/* 썸네일 영역 */}\n {\n // 업로드 중/압축 중이면 클릭 무시\n if (isUploading || isCompressing) return;\n\n if (isImage && onImageClick) {\n // 이미지는 갤러리 열기\n onImageClick();\n } else if (!isPending && onDownload) {\n // 비이미지 기존 파일은 다운로드\n onDownload();\n }\n }}\n >\n {/* 이미지 미리보기 */}\n {(preview || existingImageUrl) ? (\n \n ) : (\n /* 파일 아이콘 */\n \n )}\n\n {/* 업로드/압축 진행률 오버레이 */}\n {(isUploading || isCompressing) && (\n
\n
\n \n
\n {progress}%\n
\n )}\n\n {/* 에러 오버레이 */}\n {hasError && (\n
\n \n
\n )}\n\n {/* 대표 이미지 뱃지 */}\n {onPrimaryClick && (\n {\n e.stopPropagation();\n onPrimaryClick();\n }}\n className={`absolute top-1.5 left-1.5 z-10 p-1 rounded-full transition-colors ${\n isPrimary\n ? 'bg-yellow-500 text-white'\n : 'bg-gray-800/50 text-gray-300 hover:bg-yellow-500 hover:text-white opacity-0 group-hover:opacity-100'\n }`}\n title={isPrimary ? t('attachment.primary_image') : t('attachment.set_as_primary')}\n >\n \n \n )}\n\n {/* 호버 시 액션 버튼들 */}\n
\n {/* 드래그 핸들 */}\n e.stopPropagation()}\n >\n \n \n\n {/* 다운로드 버튼 (기존 첨부파일만) */}\n {!isPending && onDownload && (\n {\n e.stopPropagation();\n onDownload();\n }}\n className=\"p-1.5 bg-white/90 dark:bg-gray-800/90 rounded text-blue-500 hover:bg-white\"\n title={t('common.download')}\n >\n \n \n )}\n\n {/* 재시도 버튼 */}\n {hasError && onRetry && (\n {\n e.stopPropagation();\n onRetry();\n }}\n className=\"p-1.5 bg-white/90 dark:bg-gray-800/90 rounded text-orange-500 hover:bg-white\"\n title={t('common.retry')}\n >\n \n \n )}\n\n {/* 삭제 버튼 */}\n {\n e.stopPropagation();\n onRemove();\n }}\n disabled={isUploading || isCompressing}\n className=\"p-1.5 bg-white/90 dark:bg-gray-800/90 rounded text-red-500 hover:bg-white disabled:opacity-50\"\n title={t('common.delete')}\n >\n \n \n
\n