@avenue-ticketing/ui 0.11.0 → 0.12.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -0
- package/dist/badge-types-B67wcd4m.d.ts +22 -0
- package/dist/react/app-store-buttons-outline.d.ts +17 -0
- package/dist/react/app-store-buttons-outline.js +582 -0
- package/dist/react/app-store-buttons-outline.js.map +1 -0
- package/dist/react/app-store-buttons.d.ts +20 -0
- package/dist/react/app-store-buttons.js +817 -0
- package/dist/react/app-store-buttons.js.map +1 -0
- package/dist/react/avatar-label-group.d.ts +14 -0
- package/dist/react/avatar-label-group.js +183 -0
- package/dist/react/avatar-label-group.js.map +1 -0
- package/dist/react/avatar-profile-photo.d.ts +9 -0
- package/dist/react/avatar-profile-photo.js +202 -0
- package/dist/react/avatar-profile-photo.js.map +1 -0
- package/dist/react/avatar.d.ts +66 -40
- package/dist/react/avatar.js +159 -149
- package/dist/react/avatar.js.map +1 -1
- package/dist/react/badge-groups.d.ts +25 -0
- package/dist/react/badge-groups.js +162 -0
- package/dist/react/badge-groups.js.map +1 -0
- package/dist/react/badge.d.ts +123 -59
- package/dist/react/badge.js +314 -86
- package/dist/react/badge.js.map +1 -1
- package/dist/react/button-group.d.ts +43 -0
- package/dist/react/button-group.js +108 -0
- package/dist/react/button-group.js.map +1 -0
- package/dist/react/button-utility.d.ts +47 -0
- package/dist/react/button-utility.js +158 -0
- package/dist/react/button-utility.js.map +1 -0
- package/dist/react/button.d.ts +112 -37
- package/dist/react/button.js +270 -55
- package/dist/react/button.js.map +1 -1
- package/dist/react/checkbox.d.ts +25 -8
- package/dist/react/checkbox.js +112 -110
- package/dist/react/checkbox.js.map +1 -1
- package/dist/react/close-button.d.ts +25 -0
- package/dist/react/close-button.js +54 -0
- package/dist/react/close-button.js.map +1 -0
- package/dist/react/combobox.d.ts +17 -0
- package/dist/react/combobox.js +322 -0
- package/dist/react/combobox.js.map +1 -0
- package/dist/react/dialog.d.ts +15 -15
- package/dist/react/dialog.js +43 -108
- package/dist/react/dialog.js.map +1 -1
- package/dist/react/dropdown-account-breadcrumb.d.ts +5 -0
- package/dist/react/dropdown-account-breadcrumb.js +319 -0
- package/dist/react/dropdown-account-breadcrumb.js.map +1 -0
- package/dist/react/dropdown-account-button.d.ts +5 -0
- package/dist/react/dropdown-account-button.js +773 -0
- package/dist/react/dropdown-account-button.js.map +1 -0
- package/dist/react/dropdown-account-card-md.d.ts +5 -0
- package/dist/react/dropdown-account-card-md.js +549 -0
- package/dist/react/dropdown-account-card-md.js.map +1 -0
- package/dist/react/dropdown-account-card-sm.d.ts +5 -0
- package/dist/react/dropdown-account-card-sm.js +527 -0
- package/dist/react/dropdown-account-card-sm.js.map +1 -0
- package/dist/react/dropdown-account-card-xs.d.ts +5 -0
- package/dist/react/dropdown-account-card-xs.js +507 -0
- package/dist/react/dropdown-account-card-xs.js.map +1 -0
- package/dist/react/dropdown-avatar.d.ts +5 -0
- package/dist/react/dropdown-avatar.js +790 -0
- package/dist/react/dropdown-avatar.js.map +1 -0
- package/dist/react/dropdown-button-advanced.d.ts +5 -0
- package/dist/react/dropdown-button-advanced.js +799 -0
- package/dist/react/dropdown-button-advanced.js.map +1 -0
- package/dist/react/dropdown-button-link.d.ts +5 -0
- package/dist/react/dropdown-button-link.js +501 -0
- package/dist/react/dropdown-button-link.js.map +1 -0
- package/dist/react/dropdown-button-simple.d.ts +5 -0
- package/dist/react/dropdown-button-simple.js +754 -0
- package/dist/react/dropdown-button-simple.js.map +1 -0
- package/dist/react/dropdown-icon-advanced.d.ts +5 -0
- package/dist/react/dropdown-icon-advanced.js +543 -0
- package/dist/react/dropdown-icon-advanced.js.map +1 -0
- package/dist/react/dropdown-icon-simple.d.ts +5 -0
- package/dist/react/dropdown-icon-simple.js +505 -0
- package/dist/react/dropdown-icon-simple.js.map +1 -0
- package/dist/react/dropdown-integration.d.ts +5 -0
- package/dist/react/dropdown-integration.js +1325 -0
- package/dist/react/dropdown-integration.js.map +1 -0
- package/dist/react/dropdown-search-advanced.d.ts +5 -0
- package/dist/react/dropdown-search-advanced.js +998 -0
- package/dist/react/dropdown-search-advanced.js.map +1 -0
- package/dist/react/dropdown-search-simple.d.ts +5 -0
- package/dist/react/dropdown-search-simple.js +960 -0
- package/dist/react/dropdown-search-simple.js.map +1 -0
- package/dist/react/dropdown.d.ts +32 -133
- package/dist/react/dropdown.js +404 -1351
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/file-upload-trigger.d.ts +34 -0
- package/dist/react/file-upload-trigger.js +39 -0
- package/dist/react/file-upload-trigger.js.map +1 -0
- package/dist/react/form.d.ts +10 -0
- package/dist/react/form.js +11 -0
- package/dist/react/form.js.map +1 -0
- package/dist/react/hint-text.d.ts +17 -0
- package/dist/react/hint-text.js +36 -0
- package/dist/react/hint-text.js.map +1 -0
- package/dist/react/hook-form.d.ts +35 -0
- package/dist/react/hook-form.js +50 -0
- package/dist/react/hook-form.js.map +1 -0
- package/dist/react/input-date.d.ts +43 -0
- package/dist/react/input-date.js +306 -0
- package/dist/react/input-date.js.map +1 -0
- package/dist/react/input-file.d.ts +45 -0
- package/dist/react/input-file.js +748 -0
- package/dist/react/input-file.js.map +1 -0
- package/dist/react/input-group.d.ts +37 -0
- package/dist/react/input-group.js +251 -0
- package/dist/react/input-group.js.map +1 -0
- package/dist/react/input-number.d.ts +32 -0
- package/dist/react/input-number.js +553 -0
- package/dist/react/input-number.js.map +1 -0
- package/dist/react/input-payment.d.ts +16 -0
- package/dist/react/input-payment.js +593 -0
- package/dist/react/input-payment.js.map +1 -0
- package/dist/react/input-tags-outer.d.ts +53 -0
- package/dist/react/input-tags-outer.js +607 -0
- package/dist/react/input-tags-outer.js.map +1 -0
- package/dist/react/input-tags.d.ts +53 -0
- package/dist/react/input-tags.js +565 -0
- package/dist/react/input-tags.js.map +1 -0
- package/dist/react/input.d.ts +71 -22
- package/dist/react/input.js +332 -45
- package/dist/react/input.js.map +1 -1
- package/dist/react/label.d.ts +18 -0
- package/dist/react/label.js +112 -0
- package/dist/react/label.js.map +1 -0
- package/dist/react/multi-select.d.ts +89 -0
- package/dist/react/multi-select.js +1036 -0
- package/dist/react/multi-select.js.map +1 -0
- package/dist/react/pin-input.d.ts +59 -0
- package/dist/react/pin-input.js +229 -0
- package/dist/react/pin-input.js.map +1 -0
- package/dist/react/popover.d.ts +7 -73
- package/dist/react/popover.js +23 -569
- package/dist/react/popover.js.map +1 -1
- package/dist/react/progress-circle.d.ts +9 -0
- package/dist/react/progress-circle.js +36 -0
- package/dist/react/progress-circle.js.map +1 -0
- package/dist/react/progress-circles.d.ts +14 -0
- package/dist/react/progress-circles.js +160 -0
- package/dist/react/progress-circles.js.map +1 -0
- package/dist/react/progress-indicators.d.ts +52 -0
- package/dist/react/progress-indicators.js +78 -0
- package/dist/react/progress-indicators.js.map +1 -0
- package/dist/react/radio-buttons.d.ts +35 -0
- package/dist/react/radio-buttons.js +116 -0
- package/dist/react/radio-buttons.js.map +1 -0
- package/dist/react/scroll-header.d.ts +6 -0
- package/dist/react/scroll-header.js +42 -61
- package/dist/react/scroll-header.js.map +1 -1
- package/dist/react/scroll-wheel.d.ts +4 -5
- package/dist/react/scroll-wheel.js +19 -15
- package/dist/react/scroll-wheel.js.map +1 -1
- package/dist/react/select-item.d.ts +13 -0
- package/dist/react/select-item.js +336 -0
- package/dist/react/select-item.js.map +1 -0
- package/dist/react/select-native.d.ts +17 -0
- package/dist/react/select-native.js +203 -0
- package/dist/react/select-native.js.map +1 -0
- package/dist/react/select.d.ts +18 -61
- package/dist/react/select.js +625 -923
- package/dist/react/select.js.map +1 -1
- package/dist/react/sheet.d.ts +19 -19
- package/dist/react/sheet.js +97 -219
- package/dist/react/sheet.js.map +1 -1
- package/dist/react/slider.d.ts +15 -0
- package/dist/react/slider.js +66 -0
- package/dist/react/slider.js.map +1 -0
- package/dist/react/social-button.d.ts +55 -0
- package/dist/react/social-button.js +263 -0
- package/dist/react/social-button.js.map +1 -0
- package/dist/react/social-logos.d.ts +20 -0
- package/dist/react/social-logos.js +131 -0
- package/dist/react/social-logos.js.map +1 -0
- package/dist/react/switch.d.ts +21 -36
- package/dist/react/switch.js +121 -109
- package/dist/react/switch.js.map +1 -1
- package/dist/react/tag-select.d.ts +44 -0
- package/dist/react/tag-select.js +1062 -0
- package/dist/react/tag-select.js.map +1 -0
- package/dist/react/tags.d.ts +30 -0
- package/dist/react/tags.js +228 -0
- package/dist/react/tags.js.map +1 -0
- package/dist/react/textarea.d.ts +40 -4
- package/dist/react/textarea.js +193 -27
- package/dist/react/textarea.js.map +1 -1
- package/dist/react/tooltip.d.ts +30 -43
- package/dist/react/tooltip.js +65 -521
- package/dist/react/tooltip.js.map +1 -1
- package/dist/select-shared-B3Y5SMXU.d.ts +62 -0
- package/package.json +28 -21
- package/source.css +2 -13
- package/theme.css +883 -79
- package/dist/react/calendar.d.ts +0 -13
- package/dist/react/calendar.js +0 -4639
- package/dist/react/calendar.js.map +0 -1
- package/dist/react/card.d.ts +0 -11
- package/dist/react/card.js +0 -113
- package/dist/react/card.js.map +0 -1
- package/dist/react/datetime-picker.d.ts +0 -21
- package/dist/react/datetime-picker.js +0 -6142
- package/dist/react/datetime-picker.js.map +0 -1
- package/dist/react/pagination.d.ts +0 -28
- package/dist/react/pagination.js +0 -262
- package/dist/react/pagination.js.map +0 -1
- package/dist/react/table-pagination.d.ts +0 -15
- package/dist/react/table-pagination.js +0 -1247
- package/dist/react/table-pagination.js.map +0 -1
- package/dist/react/table-view/column-menu.d.ts +0 -15
- package/dist/react/table-view/column-menu.js +0 -1049
- package/dist/react/table-view/column-menu.js.map +0 -1
- package/dist/react/table-view/index.d.ts +0 -70
- package/dist/react/table-view/index.js +0 -2284
- package/dist/react/table-view/index.js.map +0 -1
- package/dist/react/table.d.ts +0 -86
- package/dist/react/table.js +0 -414
- package/dist/react/table.js.map +0 -1
- package/dist/react/tabs.d.ts +0 -34
- package/dist/react/tabs.js +0 -423
- package/dist/react/tabs.js.map +0 -1
- package/dist/react/time-picker.d.ts +0 -22
- package/dist/react/time-picker.js +0 -856
- package/dist/react/time-picker.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/button.tsx","../../src/react/checkbox.tsx","../../src/lib/typeahead.ts","../../src/react/dropdown.tsx"],"names":["React","jsx","React2","useState","useRef","useLayoutEffect"],"mappings":";;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACDA,IAAM,SAAA,GAAY;AAAA,EAChB,EAAA,EAAI,qFAAA;AAAA,EACJ,OAAA,EACE,uFAAA;AAAA,EACF,EAAA,EAAI;AACN,CAAA;AAGA,IAAM,iBAAA,GAAoB;AAAA,EACxB,EAAA,EAAI,uEAAA;AAAA,EACJ,OAAA,EACE,0EAAA;AAAA,EACF,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,YAAA,GAAe;AAAA,EACnB,IAAA,EAAM,cAAA;AAAA,EACN,EAAA,EAAI,YAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,YAAA,GAAe;AAAA,EACnB,OAAA,EACE,+FAAA;AAAA,EACF,SAAA,EACE,wEAAA;AAAA,EACF,WAAA,EACE,wEAAA;AAAA,EACF,OAAA,EACE;AACJ,CAAA;AAuBA,IAAM,MAAA,GAAeA,MAAA,CAAA,UAAA;AAAA,EACnB,CACE;AAAA,IACE,SAAA;AAAA,IACA,IAAA,GAAO,QAAA;AAAA,IACP,OAAA,GAAU,WAAA;AAAA,IACV,OAAA,EAAS,WAAA;AAAA,IACT,IAAA,GAAO,SAAA;AAAA,IACP,QAAA,GAAW,KAAA;AAAA,IACX,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,OAAA,GAAU,WAAA,KAAgB,QAAA,GAAW,IAAA,GAAO,MAAA,CAAA;AAElD,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA,EAAU,QAAA;AAAA,QACV,gBAAA,EAAgB,WAAW,EAAA,GAAK,MAAA;AAAA,QAChC,SAAA,EAAW,EAAA;AAAA,UACT,iSAAA;AAAA,UACA,8EAAA;AAAA,UACA,4GAAA;AAAA,UACA,QAAA,GAAW,iBAAA,CAAkB,IAAI,CAAA,GAAI,UAAU,IAAI,CAAA;AAAA,UACnD,aAAa,OAAO,CAAA;AAAA,UACpB,aAAa,OAAO,CAAA;AAAA,UACpB;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;ACvFrB,IAAM,sBAAA,GAAyB,EAAA;AAC/B,IAAM,qBAAA,GAAwB,GAAA;AAE9B,SAAS,yBAAA,GAA4B;AACnC,EAAA,MAAM,OAAA,GAAU,OAA2B,IAAI,CAAA;AAE/C,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,CAAK,mBAAmB,UAAA,EAAY;AACxD,IAAA,MAAM,GAAA,GAAM,KAAK,cAAA,EAAe;AAChC,IAAA,IAAI,OAAO,CAAA,EAAG;AAEd,IAAA,IAAA,CAAK,KAAA,CAAM,eAAA,GAAkB,CAAA,EAAG,GAAG,CAAA,CAAA;AACnC,IAAA,IAAA,CAAK,KAAA,CAAM,gBAAA,GAAmB,CAAA,EAAG,GAAG,CAAA,CAAA;AAEpC,IAAA,IAAI,OAAO,IAAA,CAAK,OAAA,KAAY,UAAA,EAAY;AACtC,MAAA,IAAA,CAAK,MAAM,gBAAA,GAAmB,GAAA;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,IAAA,CAAK,OAAA;AAAA,MAChB,CAAC,EAAE,gBAAA,EAAkB,GAAA,IAAO,EAAE,gBAAA,EAAkB,GAAG,CAAA;AAAA,MACnD;AAAA,QACE,QAAA,EAAU,qBAAA;AAAA,QACV,KAAA,EAAO,sBAAA;AAAA,QACP,MAAA,EAAQ,+BAAA;AAAA,QACR,IAAA,EAAM;AAAA;AACR,KACF;AACA,IAAA,OAAO,MAAM,KAAK,MAAA,EAAO;AAAA,EAC3B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,kCAAA;AAAA,MACV,OAAA,EAAQ,WAAA;AAAA,MACR,aAAA,EAAW,IAAA;AAAA,MAEX,QAAA,kBAAAA,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,OAAA;AAAA,UACL,MAAA,EAAO,gBAAA;AAAA,UACP,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA,GACF;AAEJ;AAaA,IAAM,QAAA,GAAiBC,MAAA,CAAA,UAAA;AAAA,EACrB,CACE;AAAA,IACE,OAAA,EAAS,WAAA;AAAA,IACT,cAAA,GAAiB,KAAA;AAAA,IACjB,eAAA;AAAA,IACA,aAAA,GAAgB,KAAA;AAAA,IAChB,QAAA,GAAW,KAAA;AAAA,IACX,SAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,eAAe,WAAA,KAAgB,MAAA;AACrC,IAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAChD,SAAS,cAAc,CAAA;AACzB,IAAA,MAAM,OAAA,GAAU,eAAe,WAAA,GAAc,mBAAA;AAC7C,IAAA,MAAM,WAAA,GAAiC,aAAA,GACnC,OAAA,GACA,OAAA,GACE,IAAA,GACA,KAAA;AAEN,IAAA,uBACED,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,UAAA;AAAA,QACL,WAAA,EAAU,UAAA;AAAA,QACV,YAAA,EACE,aAAA,GAAgB,eAAA,GAAkB,OAAA,GAAU,SAAA,GAAY,WAAA;AAAA,QAE1D,QAAA;AAAA,QACA,cAAA,EAAc,WAAA;AAAA,QACd,SAAA,EAAW,EAAA;AAAA,UACT,yKAAA;AAAA,UACA,kDAAA;AAAA,UACA,6BAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,OAAA,GAAU,CAAC,CAAA;AACX,UAAA,IAAI,EAAE,gBAAA,EAAkB;AACxB,UAAA,IAAI,QAAA,EAAU;AACd,UAAA,IAAI,YAAA,EAAc;AAChB,YAAA,eAAA,GAAkB,CAAC,OAAO,CAAA;AAC1B,YAAA;AAAA,UACF;AACA,UAAA,sBAAA,CAAuB,CAAC,IAAA,KAAS;AAC/B,YAAA,MAAM,OAAO,CAAC,IAAA;AACd,YAAA,eAAA,GAAkB,IAAI,CAAA;AACtB,YAAA,OAAO,IAAA;AAAA,UACT,CAAC,CAAA;AAAA,QACH,CAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBACd,QAAA,kBAAAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAW,IAAA;AAAA,YACX,SAAA,EAAW,EAAA;AAAA,cACT,uEAAA;AAAA,cACA,CAAC,QAAA,KACE,aAAA,GACG,2CAAA,GACA,UACE,2CAAA,GACA,iCAAA,CAAA;AAAA,cACR,QAAA,KACG,aAAA,GACG,0DAAA,GACA,OAAA,GACE,0DAAA,GACA,+BAAA;AAAA,aACV;AAAA,YAEC,0CACCA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,wEAAA;AAAA,gBACV,aAAA,EAAW;AAAA;AAAA,aACb,GACE,OAAA,mBACFA,GAAAA,CAAC,6BAA0B,CAAA,GACzB;AAAA;AAAA,SACN,EACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;;;AC9JhB,IAAM,oBAAA,GAAuB,GAAA;AAO7B,SAAS,oBAAA,GAAuC;AACrD,EAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,KAAA,EAAO,IAAA,EAAK;AACnC;AAEO,SAAS,eAAe,KAAA,EAA6B;AAC1D,EAAA,KAAA,CAAM,MAAA,GAAS,EAAA;AACf,EAAA,IAAI,MAAM,KAAA,EAAO;AACf,IAAA,YAAA,CAAa,MAAM,KAAK,CAAA;AACxB,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,EAChB;AACF;AAEO,SAAS,aAAa,IAAA,EAA2B;AACtD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,YAAA,CAAa,YAAY,GAAG,IAAA,EAAK;AACnD,EAAA,IAAI,MAAM,OAAO,IAAA;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAA2B,mBAAmB,CAAA;AAClE,EAAA,IAAI,MAAA,EAAQ,aAAa,OAAO,MAAA,CAAO,YAAY,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CAAE,IAAA,EAAK;AAE7E,EAAA,OAAA,CAAQ,KAAK,WAAA,IAAe,EAAA,EAAI,QAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AAC5D;AAEA,SAAS,gBAAgB,KAAA,EAAuB;AAC9C,EAAA,OAAO,KAAA,CAAM,IAAA,EAAK,CAAE,iBAAA,EAAkB;AACxC;AAEA,SAAS,kBAAkB,MAAA,EAAqC;AAC9D,EAAA,IAAI,EAAE,MAAA,YAAkB,WAAA,CAAA,EAAc,OAAO,IAAA;AAC7C,EAAA,IAAI,MAAA,CAAO,mBAAmB,OAAO,KAAA;AACrC,EAAA,MAAM,MAAM,MAAA,CAAO,OAAA;AACnB,EAAA,OAAO,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,UAAA,IAAc,GAAA,KAAQ,QAAA;AAC1D;AAMO,SAAS,sBAAA,CACd,KAAA,EACA,KAAA,EACA,KAAA,EACA,OAAA,EACS;AACT,EAAA,IAAI,SAAS,OAAA,KAAY,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,KAAA;AAC7D,EAAA,IAAI,MAAM,OAAA,IAAW,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,QAAQ,OAAO,KAAA;AAC3D,EAAA,IAAI,KAAA,CAAM,IAAI,MAAA,KAAW,CAAA,IAAK,CAAC,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,EAAG,OAAO,KAAA;AAEvE,EAAA,KAAA,CAAM,cAAA,EAAe;AAErB,EAAA,MAAM,SAAA,GAAY,SAAS,SAAA,IAAa,oBAAA;AACxC,EAAA,MAAM,OAAO,KAAA,CAAM,GAAA;AACnB,EAAA,MAAM,aAAa,KAAA,CAAM,MAAA;AACzB,EAAA,MAAM,gBAAA,GACJ,UAAA,CAAW,MAAA,KAAW,CAAA,IAAK,UAAA,KAAe,IAAA;AAE5C,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,KAAA,CAAM,MAAA,GAAS,UAAA;AAAA,EACjB,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,SAAS,UAAA,GAAa,IAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,KAAA,CAAM,KAAA,EAAO,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AACzC,EAAA,KAAA,CAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,IAAA,KAAA,CAAM,MAAA,GAAS,EAAA;AACf,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,EAChB,GAAG,SAAS,CAAA;AAEZ,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,CAAC,SAAS,eAAA,CAAgB,YAAA,CAAa,IAAI,CAAC,CAAC,CAAA;AACtE,EAAA,IAAI,MAAA,GAAS,eAAA,CAAgB,KAAA,CAAM,MAAM,CAAA;AAEzC,EAAA,IAAI,OAAA,GAAU,MACX,GAAA,CAAI,CAAC,MAAM,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA,EAAG,CAAE,CAAA,CAC7D,MAAA,CAAO,CAAC,EAAE,OAAM,KAAM,KAAA,CAAM,UAAA,CAAW,MAAM,CAAC,CAAA;AAEjD,EAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA,EAAG;AACnD,IAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,IAAA,MAAA,GAAS,gBAAgB,IAAI,CAAA;AAC7B,IAAA,OAAA,GAAU,KAAA,CACP,IAAI,CAAC,IAAA,EAAM,WAAW,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,KAAK,GAAG,CAAE,CAAA,CAC7D,OAAO,CAAC,EAAE,OAAM,KAAM,KAAA,CAAM,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA,EACnD;AAEA,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEjC,EAAA,MAAM,UAAU,QAAA,CAAS,aAAA;AACzB,EAAA,MAAM,YAAA,GAAe,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,EAAA;AAExD,EAAA,IAAI,gBAAA,IAAoB,iBAAiB,EAAA,EAAI;AAC3C,IAAA,MAAM,eAAe,OAAA,CAAQ,SAAA;AAAA,MAC3B,CAAC,EAAE,KAAA,EAAM,KAAM,KAAA,KAAU;AAAA,KAC3B;AACA,IAAA,IAAI,iBAAiB,EAAA,EAAI;AACvB,MAAA,MAAM,IAAA,GAAO,OAAA,CAAA,CAAS,YAAA,GAAe,CAAA,IAAK,QAAQ,MAAM,CAAA;AACxD,MAAA,IAAA,EAAM,KAAK,KAAA,EAAM;AACjB,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,IAAI,iBAAiB,EAAA,EAAI;AACvB,IAAA,MAAM,cAAA,GAAiB,QAAQ,IAAA,CAAK,CAAC,EAAE,KAAA,EAAM,KAAM,QAAQ,YAAY,CAAA;AACvE,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,cAAA,CAAe,KAAK,KAAA,EAAM;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,IAAA,CAAK,KAAA,EAAM;AACvB,EAAA,OAAO,IAAA;AACT;AC/FA,IAAM,0BAAA,GAA6B,6BAAA;AACnC,IAAM,2BAAA,GAA8B,6BAAA;AAGpC,IAAM,0BAAA,GAA6B,GAAA;AAEnC,IAAM,0BAAA,GAA6B,GAAA;AAGnC,IAAM,4BAAA,GAA+B,IAAA;AAErC,IAAM,+BAAA,GAAkC,GAAA;AACxC,IAAM,kCAAA,GAAqC,gCAAA;AAC3C,IAAM,iCAAA,GAAoC,gCAAA;AAG1C,IAAM,sDAAA,GAAyD,GAAA;AAsB/D,SAAS,2BACP,aAAA,EACA;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,eAAe,KAAA,IAAS,IAAA;AAAA,IAC/B,OAAO,aAAA,EAAe,KAAA;AAAA,IACtB,qBAAqB,aAAA,EAAe,SAAA;AAAA,IACpC,kBAAkB,aAAA,EAAe;AAAA,GACnC;AACF;AAGA,IAAM,yBAAA,GAA4B,2BAAA;AAOlC,IAAM,qBAAA,GACJ,4JAAA;AASF,IAAM,qBAAA,GACJ,uFAAA;AAUF,SAAS,qBAAA,CAAsB,MAAmB,CAAA,EAAe;AAC/D,EAAA,IAAI,KAAyB,CAAA,CAAE,MAAA;AAC/B,EAAA,OAAO,EAAA,IAAM,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA,EAAG;AAC9B,IAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,EAAE,CAAA,CAAE,SAAA;AAChC,IAAA,IAAA,CACG,OAAO,MAAA,IAAU,EAAA,KAAO,aACzB,EAAA,CAAG,YAAA,GAAe,GAAG,YAAA,EACrB;AACA,MAAA,MAAM,KAAA,GAAQ,GAAG,SAAA,IAAa,CAAA;AAC9B,MAAA,MAAM,QAAA,GACJ,EAAA,CAAG,SAAA,GAAY,EAAA,CAAG,gBAAgB,EAAA,CAAG,YAAA;AACvC,MAAA,IAAK,CAAA,CAAE,SAAS,CAAA,IAAK,CAAC,SAAW,CAAA,CAAE,MAAA,GAAS,CAAA,IAAK,CAAC,QAAA,EAAW;AAC7D,MAAA;AAAA,IACF;AACA,IAAA,EAAA,GAAK,EAAA,CAAG,aAAA;AAAA,EACV;AACA,EAAA,CAAA,CAAE,cAAA,EAAe;AACnB;AAMA,IAAM,wBAAA,GAA2B,wBAAA;AACjC,IAAM,4BAAA,GAA+B,sBAAA;AACrC,IAAM,8BAAA,GAAiC,sBAAA;AAgBvC,IAAM,uBAAA,GAAgD;AAAA,EACpD,MAAA,EAAQ,YAAA;AAAA,EACR,GAAA,EAAK,eAAA;AAAA,EACL,IAAA,EAAM,cAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AACA,IAAM,uBAAA,GAAgD;AAAA,EACpD,MAAA,EAAQ,8BAAA;AAAA,EACR,GAAA,EAAK,6BAAA;AAAA,EACL,IAAA,EAAM,6BAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAGA,IAAM,kBAAA,GAA2C;AAAA,EAC/C,MAAA,EAAQ,YAAA;AAAA,EACR,GAAA,EAAK,eAAA;AAAA,EACL,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEA,SAAS,WACP,OAAA,EACA,IAAA,EACA,IAAA,EACA,KAAA,EACA,QACA,GAAA,EACK;AACL,EAAA,MAAM,EAAA,GAAK,QAAQ,qBAAA,EAAsB;AACzC,EAAA,MAAM,EAAA,GAAK,KAAK,qBAAA,EAAsB;AACtC,EAAA,MAAM,gBAAgB,IAAA,CAAK,YAAA;AAC3B,EAAA,MAAM,KAAK,MAAA,CAAO,UAAA;AAClB,EAAA,MAAM,KAAK,MAAA,CAAO,WAAA;AAClB,EAAA,MAAM,KAAK,MAAA,CAAO,OAAA;AAClB,EAAA,MAAM,KAAK,MAAA,CAAO,OAAA;AAElB,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,aAAA,GAAgB,IAAA;AACpB,EAAA,IAAI,SAAA;AAEJ,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,EAAS,MAAA,KAAmB;AACjD,IAAA,IAAI,CAAA,KAAM,QAAA,EAAU,GAAA,GAAM,EAAA,CAAG,SAAS,EAAA,GAAK,MAAA;AAAA,SACtC,GAAA,GAAM,EAAA,CAAG,GAAA,GAAM,EAAA,GAAK,MAAA,GAAS,MAAA;AAClC,IAAA,IAAI,KAAA,KAAU,OAAA,EAAS,IAAA,GAAO,EAAA,CAAG,IAAA,GAAO,EAAA;AAAA,SAAA,IAC/B,UAAU,KAAA,EAAO,IAAA,GAAO,EAAA,CAAG,KAAA,GAAQ,KAAK,EAAA,CAAG,KAAA;AAAA,SAC/C,IAAA,GAAO,GAAG,IAAA,GAAO,EAAA,GAAK,GAAG,KAAA,GAAQ,CAAA,GAAI,GAAG,KAAA,GAAQ,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,EAAS,MAAA,GAAS,aAAA,KAAkB;AAChD,IAAA,QAAQ,CAAA;AAAG,MACT,KAAK,QAAA;AAAA,MACL,KAAK,KAAA;AACH,QAAA,aAAA,CAAc,GAAG,MAAM,CAAA;AACvB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAA,GAAO,EAAA,CAAG,QAAQ,EAAA,GAAK,MAAA;AACvB,QAAA,IAAI,KAAA,KAAU,OAAA,EAAS,GAAA,GAAM,EAAA,CAAG,GAAA,GAAM,EAAA;AAAA,aAAA,IAC7B,UAAU,KAAA,EAAO,GAAA,GAAM,EAAA,CAAG,MAAA,GAAS,KAAK,EAAA,CAAG,MAAA;AAAA,aAC/C,GAAA,GAAM,GAAG,GAAA,GAAM,EAAA,GAAK,GAAG,MAAA,GAAS,CAAA,GAAI,GAAG,MAAA,GAAS,CAAA;AACrD,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,IAAA,GAAO,EAAA,CAAG,IAAA,GAAO,EAAA,GAAK,EAAA,CAAG,KAAA,GAAQ,MAAA;AACjC,QAAA,IAAI,KAAA,KAAU,OAAA,EAAS,GAAA,GAAM,EAAA,CAAG,GAAA,GAAM,EAAA;AAAA,aAAA,IAC7B,UAAU,KAAA,EAAO,GAAA,GAAM,EAAA,CAAG,MAAA,GAAS,KAAK,EAAA,CAAG,MAAA;AAAA,aAC/C,GAAA,GAAM,GAAG,GAAA,GAAM,EAAA,GAAK,GAAG,MAAA,GAAS,CAAA,GAAI,GAAG,MAAA,GAAS,CAAA;AACrD,QAAA;AAAA;AACJ,EACF,CAAA;AAEA,EAAA,IAAA,CAAK,IAAI,CAAA;AAET,EAAA,MAAM,UAAA,GAAa,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,GAAM,EAAA,CAAG,SAAS,MAAM,CAAA;AAC5D,EAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,GAAG,EAAA,CAAG,GAAA,GAAM,SAAS,GAAG,CAAA;AAEpD,EAAA,IAAI,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,KAAA,EAAO;AACvC,IAAA,MAAM,YAAA,GAAe,IAAA,KAAS,QAAA,GAAW,UAAA,GAAa,UAAA;AACtD,IAAA,MAAM,cAAA,GAAiB,IAAA,KAAS,QAAA,GAAW,UAAA,GAAa,UAAA;AACxD,IAAA,MAAM,aAAA,GAAsB,IAAA,KAAS,QAAA,GAAW,KAAA,GAAQ,QAAA;AAExD,IAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,MAAA,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,YAAY,CAAA;AAChD,MAAA,IAAA,CAAK,MAAM,SAAS,CAAA;AAAA,IACtB;AAEA,IAAA,IACE,aAAA,GAAgB,YAAA,IAChB,YAAA,GAAe,0BAAA,IACf,iBAAiB,YAAA,EACjB;AACA,MAAA,aAAA,GAAgB,aAAA;AAChB,MAAA,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,cAAc,CAAA;AAClD,MAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA,IAC/B;AAAA,EACF,CAAA,MAAA,IAAW,SAAS,OAAA,IAAW,IAAA,GAAO,GAAG,KAAA,GAAQ,EAAA,GAAK,KAAK,GAAA,EAAK;AAC9D,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,IAAA,GAAO,EAAA,GAAK,GAAG,KAAA,GAAQ,MAAA;AACrC,IAAA,IAAI,EAAA,IAAM,KAAK,GAAA,EAAK;AAClB,MAAA,aAAA,GAAgB,MAAA;AAChB,MAAA,IAAA,GAAO,EAAA;AAAA,IACT;AAAA,EACF,CAAA,MAAA,IAAW,IAAA,KAAS,MAAA,IAAU,IAAA,GAAO,KAAK,GAAA,EAAK;AAC7C,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,KAAA,GAAQ,EAAA,GAAK,MAAA;AAC3B,IAAA,IAAI,EAAA,GAAK,EAAA,CAAG,KAAA,IAAS,EAAA,GAAK,KAAK,GAAA,EAAK;AAClC,MAAA,aAAA,GAAgB,OAAA;AAChB,MAAA,IAAA,GAAO,EAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,eAAe,SAAA,EAAU;AACrD;AAIA,SAAS,WAAA,CAAY,aAAa,IAAA,EAAe;AAO/C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIE,SAAS,MAAM;AAC7C,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,OAAO,UAAA,CAAW,CAAA,YAAA,EAAe,UAAA,GAAa,CAAC,KAAK,CAAA,CAAE,OAAA;AAAA,EAC/D,CAAC,CAAA;AACD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,KAAK,MAAA,CAAO,UAAA,CAAW,CAAA,YAAA,EAAe,UAAA,GAAa,CAAC,CAAA,GAAA,CAAK,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAA2B,WAAA,CAAY,EAAE,OAAO,CAAA;AACjE,IAAA,EAAA,CAAG,gBAAA,CAAiB,UAAU,OAAO,CAAA;AACrC,IAAA,OAAO,MAAM,EAAA,CAAG,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,EACvD,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAA,OAAO,QAAA;AACT;AAYA,IAAM,eAAA,GAAkBH,eAAAA,CAAM,aAAA,CAAuC,MAAS,CAAA;AAE9E,SAAS,WAAA,GAAc;AACrB,EAAA,MAAM,GAAA,GAAMA,eAAAA,CAAM,UAAA,CAAW,eAAe,CAAA;AAC5C,EAAA,IAAI,CAAC,GAAA;AACH,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AACxE,EAAA,OAAO,GAAA;AACT;AAUA,IAAM,UAAA,GAAaA,eAAAA,CAAM,aAAA,CAAkC,MAAS,CAAA;AAU7D,IAAM,WAAoC,CAAC;AAAA,EAChD,QAAA;AAAA,EACA,IAAA,EAAM,cAAA;AAAA,EACN;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIG,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,YAAA;AAC7C,EAAA,MAAM,UAAA,GAAaC,OAA2B,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAID,QAAAA,CAAiC,EAAE,CAAA;AAEzE,EAAA,MAAM,OAAA,GAAU,WAAA;AAAA,IACd,CAAC,CAAA,KAAe;AACd,MAAA,IAAI,CAAC,YAAA,EAAc,eAAA,CAAgB,CAAC,CAAA;AACpC,MAAA,YAAA,GAAe,CAAC,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,GAC7B;AAEA,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,CAAC,KAAA,EAAe,KAAA,KAAkB;AAClE,IAAA,cAAA,CAAe,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,EACxD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,GAAA,GAAM,OAAA;AAAA,IACV,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,aAAa,aAAA,EAAc,CAAA;AAAA,IAC/D,CAAC,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,aAAa;AAAA,GAC5C;AAEA,EAAA,uBACEF,GAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,KAAM,QAAA,EAAS,CAAA;AAEpD;AAYA,SAAS,eAAA,CACP,UAAA,EACA,IAAA,EACA,QAAA,EACA;AACA,EAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,EAAA,IAAI,OAAO,QAAA,KAAa,UAAA,EAAY,QAAA,CAAS,IAAI,CAAA;AAAA,OAAA,IACxC,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA;AACvC,IAAC,SAAwD,OAAA,GAAU,IAAA;AACvE;AAEO,IAAM,kBAAkBD,eAAAA,CAAM,UAAA;AAAA,EAInC,CACE;AAAA,IACE,QAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA,EAAS,WAAA;AAAA,IACT,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,KAAe,WAAA,EAAY;AAElD,IAAA,MAAM,WAAA,GAAc,WAAA;AAAA,MAClB,CAAC,CAAA,KAAqC;AACpC,QAAA,WAAA,GAAc,CAAwC,CAAA;AACtD,QAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,QAAA,IAAI,QAAA,EAAU;AACd,QAAA,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,MACf,CAAA;AAAA,MACA,CAAC,QAAA,EAAU,WAAA,EAAa,IAAA,EAAM,OAAO;AAAA,KACvC;AAEA,IAAA,MAAM,YAAA,GAAe,WAAA;AAAA,MACnB,CAAC,EAAA,KAAiC;AAChC,QAAA,UAAA,CAAW,OAAA,GAAU,EAAA;AACrB,QAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,EAAE,CAAA;AAAA,aAAA,IAC5B,GAAA,MAAS,OAAA,GAAU,EAAA;AAAA,MAC9B,CAAA;AAAA,MACA,CAAC,KAAK,UAAU;AAAA,KAClB;AAEA,IAAA,IAAI,OAAA,IAAWA,eAAAA,CAAM,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,MAAA,MAAM,KAAA,GAAQ,QAAA;AAQd,MAAA,OAAOA,eAAAA,CAAM,aAAa,KAAA,EAAO;AAAA,QAC/B,GAAA,EAAK,CAAC,IAAA,KAA6B;AACjC,UAAA,eAAA;AAAA,YACE,UAAA;AAAA,YACA,IAAA;AAAA,YAEE,KAAA,CAGA;AAAA,WACJ;AAAA,QACF,CAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,KAAA,CAAM,MAAM,SAAS,CAAA;AAAA,QAC5C,OAAA,EAAS,CAAC,CAAA,KAAqC;AAC7C,UAAA,KAAA,CAAM,KAAA,CAAM,UAAU,CAAC,CAAA;AACvB,UAAA,WAAA,CAAY,CAAC,CAAA;AAAA,QACf,CAAA;AAAA,QACA,eAAA,EAAiB,IAAA;AAAA,QACjB,eAAA,EAAiB,MAAA;AAAA,QACjB,YAAA,EAAc,OAAO,MAAA,GAAS,QAAA;AAAA,QAC9B,GAAI,aAAa,MAAA,GACb;AAAA,UACE;AAAA,YAEF;AAAC,OACyB,CAAA;AAAA,IAClC;AAEA,IAAA,uBACEC,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,YAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACJ,GAAG,WAAA;AAAA,QACJ,QAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA;AAAA,QAChC,eAAA,EAAe,IAAA;AAAA,QACf,eAAA,EAAc,MAAA;AAAA,QACd,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,QAC5B,OAAA,EAAS,WAAA;AAAA,QAER;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAGvB,SAAS,eAAA,CAAgB;AAAA,EAC9B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6C;AAC3C,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,WAAA,EAAY;AAC7B,EAAA,uBACEA,GAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,IAAA,IAAQ,cAAc,SAAS,CAAA;AAAA,MAC/D,GAAG;AAAA;AAAA,GACN;AAEJ;AAUO,IAAM,mBAAA,GAAsBD,eAAAA,CAAM,UAAA,CAGvC,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACnD,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,sJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,wBACxBA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA,GACjC;AAEJ,CAAC;AACD,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AAgClC,SAAS,+BAAA,CAAgC;AAAA,EACvC,IAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,mBAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA,GAAmB,MAAA;AAAA,EACnB,WAAA,GAAc,KAAA;AAAA,EACd,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyC;AACvC,EAAA,MAAM,WAAA,GAAc,OAChB,kCAAA,GACA,iCAAA;AACJ,EAAA,MAAM,oBAAA,GAAuB,aAAA,GACzB,CAAA,WAAA,EAAc,aAAa,CAAA,GAAA,CAAA,GAC3B,kBAAA;AAEJ,EAAA,OAAO,YAAA;AAAA,oBACL,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAI,cAAc,EAAE,CAAC,yBAAyB,GAAG,EAAA,KAAO,EAAC;AAAA,QAC1D,SAAA,EAAW,EAAA;AAAA,UACT,iDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,6CAAA;AAAA,gBACA,cAAc,aAAA,GAAgB;AAAA,eAChC;AAAA,cACA,KAAA,EAAO;AAAA,gBACL,kBAAA,EAAoB,SAAA;AAAA,gBACpB,kBAAA,EAAoB,GAAG,+BAA+B,CAAA,EAAA,CAAA;AAAA,gBACtD,wBAAA,EAA0B;AAAA,eAC5B;AAAA,cACA,OAAA,EAAS;AAAA;AAAA,WACX;AAAA,0BACA,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACE,GAAG,UAAA;AAAA,cACJ,GAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAW,EAAA;AAAA,gBACT,2KAAA;AAAA,gBACA,6DAAA;AAAA,gBACA,qBAAA;AAAA,gBACA,mBAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW,cAAc,eAAA,GAAkB,oBAAA;AAAA,gBAC3C,OAAA,EAAS,cAAc,CAAA,GAAI,CAAA;AAAA,gBAC3B,kBAAA,EAAoB,oBAAA;AAAA,gBACpB,kBAAA,EAAoB,GAAG,+BAA+B,CAAA,EAAA,CAAA;AAAA,gBACtD,wBAAA,EAA0B,WAAA;AAAA,gBAC1B,GAAG;AAAA,eACL;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,IAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,kDAAA;AAAA,sBACA,aAAa,uBAAA,GAA0B;AAAA,qBACzC;AAAA,oBAEC,QAAA,EAAA;AAAA,sBAAA,UAAA,mBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iEAAA,EACV,sBACH,CAAA,GACE,IAAA;AAAA,sCACJA,GAAAA;AAAA,wBAAC,mBAAA;AAAA,wBAAA;AAAA,0BACC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,4BAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,4BAAA,cAAA,EAAe;AAAA,0BACjB;AAAA;AAAA;AACF;AAAA;AAAA,iBACF;AAAA,gCACAA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,gFAAA;AAAA,sBACA;AAAA,qBACF;AAAA,oBAEC;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AAmCO,IAAM,kBAAkD,CAAC;AAAA,EAC9D,QAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,KAAA,GAAQ,OAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,QAAA,GAAW,EAAA;AAAA,EACX,eAAA,GAAkB,CAAA;AAAA,EAClB,aAAA,GAAgB,IAAA;AAAA,EAChB,QAAA,GAAW,SAAA;AAAA,EACX,IAAA,GAAO,IAAA;AAAA,EACP,SAAA,GAAY,IAAA;AAAA,EACZ,aAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,qBAAA,EAAuB,yBAAA;AAAA,EACvB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,4BAAA,GAA+B,CAAC,CAAA;AAC7D,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,KAAe,WAAA,EAAY;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIE,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIA,QAAAA,CAAc,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AACrE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,CAAC,CAAA;AAC1C,EAAA,MAAM,OAAA,GAAUC,OAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,iBAAA,GAAoBA,MAAAA,CAAO,oBAAA,EAAsB,CAAA;AAEvD,EAAA,MAAM,cAAA,GAAiB,2BAA2B,aAAa,CAAA;AAC/D,EAAA,MAAM,aAAA,GAAgB,YAAY,cAAA,CAAe,KAAA;AACjD,EAAA,MAAM,gBACJ,yBAAA,IACA,sDAAA;AAKF,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,MAAA;AAAA,IACF;AACA,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,MAAM,CAAA,GAAI,UAAA;AAAA,MACR,MAAM,gBAAgB,KAAK,CAAA;AAAA,MAC3B;AAAA,KACF;AACA,IAAA,OAAO,MAAM,aAAa,CAAC,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAExB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,IAAA,EAAM;AAC5B,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,MAAM,IAAA,GAAO,sBAAsB,MAAM;AACvC,MAAA,IAAA,GAAO,qBAAA,CAAsB,MAAM,cAAA,CAAe,IAAI,CAAC,CAAA;AAAA,IACzD,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,MAAA,IAAI,IAAA,uBAA2B,IAAI,CAAA;AAAA,IACrC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,IAAI,CAAC,CAAA;AAGvB,EAAAC,gBAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,WAAW,OAAA,IAAW,CAAC,QAAQ,OAAA,EAAS;AAC9D,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,IAAI,CAAC,UAAA,CAAW,OAAA,IAAW,CAAC,QAAQ,OAAA,EAAS;AAC7C,MAAA,WAAA,CAAY,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAsB,CAAE,KAAK,CAAA;AAC5D,MAAA,MAAA;AAAA,QACE,UAAA;AAAA,UACE,UAAA,CAAW,OAAA;AAAA,UACX,OAAA,CAAQ,OAAA;AAAA,UACR,IAAA;AAAA,UACA,KAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,EAAO;AACP,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACxC,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,MAAM,CAAA;AAAA,IAC7C,CAAA;AAAA,EACF,GAAG,CAAC,YAAA,EAAc,MAAM,KAAA,EAAO,MAAA,EAAQ,eAAe,CAAC,CAAA;AAIvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAQ,aAAA,EAAe;AAC5B,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KACpB,CAAA,YAAa,IAAA,KACZ,CAAC,CAAC,OAAA,CAAQ,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,IAC5B,CAAC,CAAC,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,IAC/B,CAAA,YAAa,OAAA,IACZ,CAAC,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAA,EAAI,yBAAyB,CAAA,CAAA,CAAG,CAAA,CAAA;AAClD,IAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAa;AAC7B,MAAA,IAAI,CAAC,YAAA,CAAa,CAAA,CAAE,MAAM,CAAA,UAAW,KAAK,CAAA;AAAA,IAC5C,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,QAAA,EAAU,IAAI,CAAA;AAChD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,UAAU,IAAI,CAAA;AAAA,EAClE,GAAG,CAAC,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,UAAU,CAAC,CAAA;AAI7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,gBAAgB,aAAA,EAAe;AACpC,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAkB,qBAAA,CAAsB,MAAM,CAAC,CAAA;AAChE,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAS,OAAA,EAAS,EAAE,OAAA,EAAS,OAAO,CAAA;AAC1D,IAAA,OAAO,MAAM,IAAA,CAAK,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,YAAA,EAAc,aAAa,CAAC,CAAA;AAIhC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAA,IAAe,QAAQ,OAAA,EAAS;AAClC,MAAA,OAAA,CAAQ,QAAQ,KAAA,EAAM;AAAA,IACxB;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM,cAAA,CAAe,iBAAA,CAAkB,OAAO,CAAA;AAAA,EACrD,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAkB;AACjC,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,CAAS,CAAC,KAAK,UAAA,CAAW,OAAA,EAAS,SAAS,CAAC,CAAA;AAChE,QAAA;AACF,MAAA,MAAM,EAAA,GAAK,CAAA,CAAE,MAAA,YAAkB,OAAA,GAAU,EAAE,MAAA,GAAS,IAAA;AACpD,MAAA,IAAI,EAAA,EAAI,OAAA,GAAU,CAAA,CAAA,EAAI,yBAAyB,GAAG,CAAA,EAAG;AACrD,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,OAAO,CAAA;AAC9C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,OAAO,CAAA;AAAA,EAChE,CAAA,EAAG,CAAC,IAAA,EAAM,OAAA,EAAS,UAAU,CAAC,CAAA;AAG9B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAqB;AACpC,MAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,YAAY,QAAA,CAAS,aAAA;AAE3B,MAAA,IAAI,SAAA,IAAa,CAAC,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC5C,MAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAC3B,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,SAAU,CAAA;AAEpC,MAAA,QAAQ,EAAE,GAAA;AAAK,QACb,KAAK,QAAA;AACH,UAAA,IAAI,aAAA,EAAe;AACjB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,OAAA,CAAQ,KAAK,CAAA;AACb,YAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAAA,UAC5B;AACA,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,UAAA,IAAI,GAAA,KAAQ,EAAA,IAAO,GAAA,KAAQ,KAAA,CAAM,SAAS,CAAA,IAAK,IAAA;AAC7C,YAAA,KAAA,CAAM,CAAC,GAAG,KAAA,EAAM;AAAA,eAAA,IACT,GAAA,GAAM,MAAM,MAAA,GAAS,CAAA,QAAS,GAAA,GAAM,CAAC,GAAG,KAAA,EAAM;AACvD,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,UAAA,IAAI,GAAA,IAAO,KAAK,IAAA,EAAM,KAAA,CAAM,MAAM,MAAA,GAAS,CAAC,GAAG,KAAA,EAAM;AAAA,eAAA,IAC5C,MAAM,CAAA,EAAG,KAAA,CAAM,GAAA,GAAM,CAAC,GAAG,KAAA,EAAM;AACxC,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,KAAA,CAAM,CAAC,GAAG,KAAA,EAAM;AAChB,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,EAAG,KAAA,EAAM;AAC/B,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,OAAA,CAAQ,KAAK,CAAA;AACb,UAAA;AAAA,QACF;AACE,UAAA,sBAAA,CAAuB,CAAA,EAAG,KAAA,EAAO,iBAAA,CAAkB,OAAA,EAAS;AAAA,YAC1D,OAAA,EAAS;AAAA,WACV,CAAA;AACD,UAAA;AAAA;AACJ,IACF,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,OAAO,CAAA;AAC1C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,OAAO,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAW,OAAA,EAAS,UAAU,CAAC,CAAA;AAG9D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,aAAA,EAAe;AAC7B,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAC/B,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAAA,IACjC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAExB,EAAA,IAAI,CAAC,YAAA,IAAgB,OAAO,QAAA,KAAa,aAAa,OAAO,IAAA;AAG7D,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,uBACEJ,GAAAA;AAAA,MAAC,+BAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,IAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,aAAA;AAAA,QACA,YAAY,cAAA,CAAe,KAAA;AAAA,QAC3B,qBAAqB,cAAA,CAAe,mBAAA;AAAA,QACpC,kBAAkB,cAAA,CAAe,gBAAA;AAAA,QACjC,cAAA,EAAgB,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,QACnC,OAAA;AAAA,QACA,gBAAA,EAAiB,MAAA;AAAA,QACjB,SAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA,EAAK,MAAA;AAAA,QACL,kBAAA,EAAiB,UAAA;AAAA,QACjB,QAAA,EAAU,EAAA;AAAA,QAET;AAAA;AAAA,KACH;AAAA,EAEJ;AAGA,EAAA,MAAM,eACJ,QAAA,KAAa,SAAA,GACT,KAAK,GAAA,CAAI,QAAA,EAAU,0BAA0B,CAAA,GAC7C,QAAA;AAEN,EAAA,OAAO,YAAA;AAAA,oBACLA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,GAAA,EAAK,OAAA;AAAA,QACL,IAAA,EAAK,MAAA;AAAA,QACL,kBAAA,EAAiB,UAAA;AAAA,QACjB,QAAA,EAAU,EAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,oFAAA;AAAA,UACA,qBAAA;AAAA,UACA,qBAAA;AAAA,UACA,SAAA;AAAA,UACA,GAAA,CAAI,SAAA,IAAa,IAAA,GAAO,iBAAA,GAAoB;AAAA,SAC9C;AAAA,QACA,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,UAAA;AAAA,UACV,KAAK,GAAA,CAAI,GAAA;AAAA,UACT,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,QAAA,EAAU,YAAA;AAAA,UACV,WAAW,GAAA,CAAI,SAAA;AAAA,UACf,eAAA,EAAiB,uBAAA,CAAwB,GAAA,CAAI,IAAI,CAAA;AAAA,UACjD,SAAA,EAAW,WAAA,GAAc,MAAA,GAAS,uBAAA,CAAwB,IAAI,IAAI,CAAA;AAAA,UAClE,OAAA,EAAS,cAAc,CAAA,GAAI,CAAA;AAAA,UAC3B,kBAAA,EAAoB,oBAAA;AAAA,UACpB,kBAAA,EAAoB,GAAG,QAAQ,CAAA,EAAA,CAAA;AAAA,UAC/B,wBAAA,EAA0B,cACtB,0BAAA,GACA,2BAAA;AAAA,UACJ,GAAG;AAAA,SACL;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AAGA,SAAS,SAAS,IAAA,EAAkC;AAClD,EAAA,OAAO,KAAA,CAAM,IAAA;AAAA,IACX,IAAA,CAAK,gBAAA;AAAA,MACH;AAAA;AAGF,GACF;AACF;AAcO,IAAM,eAA4C,CAAC;AAAA,EACxD,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAc,KAAA;AAAA,EACd,IAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,KAAA,GAAQ,KAAA;AAAA,EACR,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,WAAA,EAAY;AAEhC,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwC;AAC3D,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,OAAA,GAAU,CAAC,CAAA;AACX,IAAA,IAAI,aAAA,UAAuB,KAAK,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2C;AAChE,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,WAAA,CAAY,CAAgD,CAAA;AAAA,IAC9D;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,IAAA,EAAK,UAAA;AAAA,MACL,QAAA,EAAU,WAAW,MAAA,GAAY,EAAA;AAAA,MACjC,eAAA,EAAe,QAAA;AAAA,MACf,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,4HAAA;AAAA,QACA,wBAAA;AAAA,QACA,KAAA,IAAS,MAAA;AAAA,QACT,CAAC,QAAA,IAAY,gBAAA;AAAA,QACb,QAAA,IAAY,uBAAA;AAAA,QACZ,CAAC,QAAA,IACC,CAAC,WAAA,IACD,uHAAA;AAAA,QACF,CAAC,YACC,WAAA,IACA,mMAAA;AAAA,QACF,QAAA,IACE,CAAC,WAAA,IACD,4CAAA;AAAA,QACF,YACE,WAAA,IACA,4GAAA;AAAA,QACF;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBAEFA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gBAAA,EAAiB,iBAAA,EAAe,MAC7C,QAAA,EACH,CAAA;AAAA,QACC,2BACCA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,iCAAA;AAAA,cACA,4BAAA;AAAA,cACA,cACI,yDAAA,GACA;AAAA,aACN;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;AAIO,IAAM,oBAET,CAAC,EAAE,WAAW,GAAG,KAAA,uBACnBA,GAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,IAAA,EAAK,WAAA;AAAA,IACL,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,SAAS,CAAA;AAAA,IAC3D,GAAG;AAAA;AACN;AAKK,IAAM,aAAA,GAET,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,uBAC1BA,GAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,+CAAA;AAAA,MACA,8BAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN;AAUK,IAAM,uBAA4D,CAAC;AAAA,EACxE,QAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,eAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA,EAChB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,WAAA,EAAY;AAEhC,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwC;AAC3D,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,eAAA,GAAkB,CAAC,OAAO,CAAA;AAC1B,IAAA,OAAA,GAAU,CAAC,CAAA;AACX,IAAA,IAAI,aAAA,UAAuB,KAAK,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2C;AAChE,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,WAAA,CAAY,CAAgD,CAAA;AAAA,IAC9D;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,IAAA,EAAK,kBAAA;AAAA,MACL,cAAA,EAAc,OAAA;AAAA,MACd,QAAA,EAAU,WAAW,MAAA,GAAY,EAAA;AAAA,MACjC,eAAA,EAAe,QAAA;AAAA,MACf,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,mHAAA;AAAA,QACA,wBAAA;AAAA,QACA,CAAC,QAAA,IACC,sIAAA;AAAA,QACF,QAAA,IACE,kEAAA;AAAA,QACF;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EAA4B,aAAA,EAAW,MACrD,QAAA,kBAAAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,QAAA;AAAA,YACA,QAAA,EAAU,EAAA;AAAA,YACV,SAAA,EAAU;AAAA;AAAA,SACZ,EACF,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gBAAA,EAAiB,iBAAA,EAAe,MAC7C,QAAA,EACH,CAAA;AAAA,QACC,4BACCA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,4CAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AAIO,IAAM,qBAKR,CAAC,EAAE,UAAU,KAAA,EAAO,aAAA,EAAe,OAAM,KAAM;AAClD,EAAA,MAAM,EAAE,aAAA,EAAe,WAAA,EAAY,GAAI,WAAA,EAAY;AAEnD,EAAA,MAAM,aAAA,GAAgB,KAAA,IAAS,WAAA,CAAY,KAAK,CAAA,IAAK,EAAA;AAErD,EAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,IACxB,CAAC,CAAA,KAAc;AACb,MAAA,aAAA,CAAc,OAAO,CAAC,CAAA;AACtB,MAAA,aAAA,GAAgB,CAAC,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,aAAA,EAAe,aAAa;AAAA,GACtC;AAEA,EAAA,MAAM,QAAA,GAAW,OAAA;AAAA,IACf,OAAO;AAAA,MACL,KAAA;AAAA,MACA,KAAA,EAAO,aAAA;AAAA,MACP,aAAA,EAAe;AAAA,KACjB,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,aAAA,EAAe,iBAAiB;AAAA,GAC1C;AAEA,EAAA,uBACEA,GAAAA,CAAC,iBAAA,CAAkB,UAAlB,EAA2B,KAAA,EAAO,UAChC,QAAA,EACH,CAAA;AAEJ;AAOA,IAAM,oBAAoBD,eAAAA,CAAM,aAAA;AAAA,EAC9B;AACF,CAAA;AAEA,SAAS,aAAA,GAAgB;AACvB,EAAA,MAAM,GAAA,GAAMA,eAAAA,CAAM,UAAA,CAAW,iBAAiB,CAAA;AAC9C,EAAA,IAAI,CAAC,GAAA;AACH,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AACvE,EAAA,OAAO,GAAA;AACT;AAMO,IAAM,oBAAsD,CAAC;AAAA,EAClE,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA,EAChB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,WAAA,EAAY;AAChC,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,aAAA,KAAkB,aAAA,EAAc;AAC3D,EAAA,MAAM,UAAU,UAAA,KAAe,KAAA;AAE/B,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwC;AAC3D,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,OAAA,GAAU,CAAC,CAAA;AACX,IAAA,IAAI,aAAA,UAAuB,KAAK,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2C;AAChE,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,WAAA,CAAY,CAAgD,CAAA;AAAA,IAC9D;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,IAAA,EAAK,eAAA;AAAA,MACL,cAAA,EAAc,OAAA;AAAA,MACd,QAAA,EAAU,WAAW,MAAA,GAAY,EAAA;AAAA,MACjC,eAAA,EAAe,QAAA;AAAA,MACf,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,4HAAA;AAAA,QACA,wBAAA;AAAA,QACA,CAAC,QAAA,IACC,sIAAA;AAAA,QACF,QAAA,IACE,kEAAA;AAAA,QACF;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAiB,iBAAA,EAAe,MAC7C,QAAA,EACH,CAAA;AAAA,QACC,2BACCA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,6CAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH,GACE,IAAA;AAAA,wBACJA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,kDAAA;AAAA,YACV,aAAA,EAAW,IAAA;AAAA,YAEV,QAAA,EAAA,OAAA,mBAAUA,GAAAA,CAAC,KAAA,EAAA,EAAM,WAAU,UAAA,EAAW,WAAA,EAAa,KAAK,CAAA,GAAK;AAAA;AAAA;AAChE;AAAA;AAAA,GACF;AAEJ;AAWO,IAAM,cAGR,CAAC,EAAE,QAAA,EAAU,WAAA,GAAc,MAAK,KAAM;AACzC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIE,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,UAAA,GAAaC,OAA2B,IAAI,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS,OAAA;AAAA,IACb,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,YAAY,WAAA,EAAY,CAAA;AAAA,IAChD,CAAC,IAAA,EAAM,OAAA,EAAS,WAAW;AAAA,GAC7B;AACA,EAAA,uBAAOH,GAAAA,CAAC,UAAA,CAAW,UAAX,EAAoB,KAAA,EAAO,QAAS,QAAA,EAAS,CAAA;AACvD;AAEO,IAAM,kBAAA,GAMT,CAAC,EAAE,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO,QAAA,GAAW,KAAA,EAAO,SAAA,EAAW,GAAG,KAAA,EAAM,KAAM;AACxE,EAAA,MAAM,GAAA,GAAMD,eAAAA,CAAM,UAAA,CAAW,UAAU,CAAA;AACvC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,+CAA+C,CAAA;AACzE,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,aAAY,GAAI,GAAA;AAEnD,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,4BAAA,GAA+B,CAAC,CAAA;AAE7D,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA,EAAK,CAAC,EAAA,KAAO;AACX,QAAA,UAAA,CAAW,OAAA,GAAU,EAAA;AAAA,MACvB,CAAA;AAAA,MACA,IAAA,EAAK,UAAA;AAAA,MACL,eAAA,EAAc,MAAA;AAAA,MACd,eAAA,EAAe,IAAA;AAAA,MACf,QAAA,EAAU,WAAW,MAAA,GAAY,EAAA;AAAA,MACjC,eAAA,EAAe,QAAA;AAAA,MACf,cAAc,MAAM;AAClB,QAAA,IAAI,QAAA,IAAY,QAAA,IAAY,CAAC,WAAA,EAAa;AAC1C,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,MACd,CAAA;AAAA,MACA,cAAc,MAAM;AAClB,QAAA,IAAI,QAAA,IAAY,CAAC,WAAA,EAAa;AAC9B,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,QAAA,EAAU;AACd,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,YAAA,IAAgB,CAAA,CAAE,QAAQ,OAAA,EAAS;AAC/C,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd;AAAA,MACF,CAAA;AAAA,MACA,SAAS,MAAM;AACb,QAAA,IAAI,QAAA,EAAU;AACd,QAAA,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,MACf,CAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,4HAAA;AAAA,QACA,wBAAA;AAAA,QACA,KAAA,IAAS,MAAA;AAAA,QACT,CAAC,QAAA,IACC,sIAAA;AAAA,QACF,QAAA,IACE,kEAAA;AAAA,QACF;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,oBACCC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBAEFA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gBAAA,EAAiB,iBAAA,EAAe,MAC7C,QAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,oCAAA,EAAqC;AAAA;AAAA;AAAA,GAC/D;AAEJ;AAEO,IAAM,qBAYT,CAAC;AAAA,EACH,QAAA;AAAA,EACA,QAAA,GAAW,EAAA;AAAA,EACX,eAAA,GAAkB,CAAA;AAAA,EAClB,aAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,qBAAA,EAAuB,yBAAA;AAAA,EACvB,SAAA,GAAY,IAAA;AAAA,EACZ,SAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,EAAW,aAAA;AAAA,EACX,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,GAAA,GAAMD,eAAAA,CAAM,UAAA,CAAW,UAAU,CAAA;AACvC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,+CAA+C,CAAA;AACzE,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,aAAY,GAAI,GAAA;AAEnD,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,4BAAA,GAA+B,CAAC,CAAA;AAC7D,EAAA,MAAM,cAAA,GAAiB,2BAA2B,aAAa,CAAA;AAC/D,EAAA,MAAM,aAAA,GAAgB,YAAY,cAAA,CAAe,KAAA;AACjD,EAAA,MAAM,gBACJ,yBAAA,IACA,sDAAA;AAEF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIG,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIA,QAAAA,CAAc;AAAA,IAClC,GAAA,EAAK,KAAA;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACP,CAAA;AACD,EAAA,MAAM,OAAA,GAAUC,OAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,iBAAA,GAAoBA,MAAAA,CAAO,oBAAA,EAAsB,CAAA;AAIvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,MAAA;AAAA,IACF;AACA,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,MAAM,CAAA,GAAI,UAAA;AAAA,MACR,MAAM,gBAAgB,KAAK,CAAA;AAAA,MAC3B;AAAA,KACF;AACA,IAAA,OAAO,MAAM,aAAa,CAAC,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAExB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,IAAA,EAAM;AAC5B,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,MAAM,IAAA,GAAO,sBAAsB,MAAM;AACvC,MAAA,IAAA,GAAO,qBAAA,CAAsB,MAAM,cAAA,CAAe,IAAI,CAAC,CAAA;AAAA,IACzD,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,MAAA,IAAI,IAAA,uBAA2B,IAAI,CAAA;AAAA,IACrC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,IAAI,CAAC,CAAA;AAEvB,EAAAC,gBAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,gBAAgB,aAAA,EAAe;AACpC,IAAA,IAAI,CAAC,UAAA,CAAW,OAAA,IAAW,CAAC,QAAQ,OAAA,EAAS;AAC7C,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,IAAI,CAAC,UAAA,CAAW,OAAA,IAAW,CAAC,QAAQ,OAAA,EAAS;AAC7C,MAAA,MAAA;AAAA,QACE,UAAA;AAAA,UACE,UAAA,CAAW,OAAA;AAAA,UACX,OAAA,CAAQ,OAAA;AAAA,UACR,OAAA;AAAA,UACA,OAAA;AAAA,UACA,EAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,EAAO;AACP,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACxC,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,MAAM,CAAA;AAAA,IAC7C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,eAAA,EAAiB,aAAa,CAAC,CAAA;AAMjD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAQ,aAAA,EAAe;AAC5B,IAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAa;AAC7B,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,EAAE,CAAA,YAAa,IAAA,CAAA,IAAS,QAAQ,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AAC1D,MAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,MAAA,IAAI,OAAA,KAAY,MAAM,OAAA,IAAW,CAAA,CAAE,SAAS,OAAO,CAAA,CAAA,UAAY,KAAK,CAAA;AAAA,IACtE,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,QAAA,EAAU,IAAI,CAAA;AAChD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,UAAU,IAAI,CAAA;AAAA,EAClE,GAAG,CAAC,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,UAAU,CAAC,CAAA;AAG7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,gBAAgB,aAAA,EAAe;AACpC,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAkB,qBAAA,CAAsB,MAAM,CAAC,CAAA;AAChE,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAS,OAAA,EAAS,EAAE,OAAA,EAAS,OAAO,CAAA;AAC1D,IAAA,OAAO,MAAM,IAAA,CAAK,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,YAAA,EAAc,aAAa,CAAC,CAAA;AAEhC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAA,IAAe,QAAQ,OAAA,EAAS;AAClC,MAAA,OAAA,CAAQ,QAAQ,KAAA,EAAM;AAAA,IACxB;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM,cAAA,CAAe,iBAAA,CAAkB,OAAO,CAAA;AAAA,EACrD,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAkB;AACjC,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,CAAS,CAAC,KAAK,UAAA,CAAW,OAAA,EAAS,SAAS,CAAC,CAAA;AAChE,QAAA;AACF,MAAA,MAAM,EAAA,GAAK,CAAA,CAAE,MAAA,YAAkB,OAAA,GAAU,EAAE,MAAA,GAAS,IAAA;AACpD,MAAA,MAAM,QAAA,GAAW,EAAA,EAAI,OAAA,GAAU,CAAA,CAAA,EAAI,yBAAyB,CAAA,CAAA,CAAG,CAAA;AAC/D,MAAA,IAAI,QAAA,IAAY,QAAA,KAAa,OAAA,CAAQ,OAAA,EAAS;AAC9C,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,OAAO,CAAA;AAC9C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,OAAO,CAAA;AAAA,EAChE,CAAA,EAAG,CAAC,IAAA,EAAM,OAAA,EAAS,UAAU,CAAC,CAAA;AAE9B,EAAA,MAAM,oBAAA,GAAuB,WAAA;AAAA,IAC3B,CAAC,CAAA,KAA2C;AAC1C,MAAA,aAAA,GAAgB,CAAC,CAAA;AACjB,MAAA,IAAI,EAAE,gBAAA,EAAkB;AACxB,MAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAC3B,MAAA,MAAM,UAAU,QAAA,CAAS,aAAA;AACzB,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAEjC,MAAA,QAAQ,EAAE,GAAA;AAAK,QACb,KAAK,WAAA;AAAA,QACL,KAAK,QAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,CAAQ,KAAK,CAAA;AACb,UAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAC1B,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,UAAA,IAAI,GAAA,KAAQ,MAAM,GAAA,KAAQ,KAAA,CAAM,SAAS,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,eACvD,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA,EAAG,KAAA,EAAM;AAC3B,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,UAAA,IAAI,OAAO,CAAA,EAAG,KAAA,CAAM,MAAM,MAAA,GAAS,CAAC,GAAG,KAAA,EAAM;AAAA,eACxC,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA,EAAG,KAAA,EAAM;AAC3B,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,KAAA,CAAM,CAAC,GAAG,KAAA,EAAM;AAChB,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,EAAG,KAAA,EAAM;AAC/B,UAAA;AAAA,QACF;AACE,UAAA,sBAAA,CAAuB,CAAA,CAAE,WAAA,EAAa,KAAA,EAAO,iBAAA,CAAkB,OAAA,EAAS;AAAA,YACtE,OAAA,EAAS;AAAA,WACV,CAAA;AACD,UAAA;AAAA;AACJ,IACF,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,OAAA,EAAS,UAAA,EAAY,SAAS;AAAA,GAChD;AAEA,EAAA,IAAI,CAAC,YAAA,IAAgB,OAAO,QAAA,KAAa,aAAa,OAAO,IAAA;AAE7D,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,uBACEJ,GAAAA;AAAA,MAAC,+BAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,IAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,aAAA;AAAA,QACA,YAAY,cAAA,CAAe,KAAA;AAAA,QAC3B,qBAAqB,cAAA,CAAe,mBAAA;AAAA,QACpC,kBAAkB,cAAA,CAAe,gBAAA;AAAA,QACjC,cAAA,EAAgB,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,QACnC,OAAA;AAAA,QACA,gBAAA,EAAiB,QAAA;AAAA,QACjB,WAAA,EAAW,IAAA;AAAA,QACX,SAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA,EAAK,MAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,SAAA,EAAW,oBAAA;AAAA,QACX,2BAAA,EAA0B,EAAA;AAAA,QAEzB;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,OAAO,YAAA;AAAA,oBACLA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,GAAA,EAAK,OAAA;AAAA,QACL,IAAA,EAAK,MAAA;AAAA,QACL,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAc,WAAA,GAAc,MAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,MAAA;AAAA,QAClD,YAAA,EAAc,WAAA,GAAc,MAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,MAAA;AAAA,QACnD,SAAA,EAAW,oBAAA;AAAA,QACX,2BAAA,EAA0B,EAAA;AAAA,QAC1B,SAAA,EAAW,EAAA;AAAA,UACT,oFAAA;AAAA,UACA,qBAAA;AAAA,UACA,qBAAA;AAAA,UACA,SAAA;AAAA,UACA,GAAA,CAAI,SAAA,IAAa,IAAA,GAAO,iBAAA,GAAoB;AAAA,SAC9C;AAAA,QACA,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,UAAA;AAAA,UACV,KAAK,GAAA,CAAI,GAAA;AAAA,UACT,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,QAAA,EAAU,0BAAA;AAAA,UACV,WAAW,GAAA,CAAI,SAAA;AAAA,UACf,eAAA,EAAiB,kBAAA,CAAmB,GAAA,CAAI,IAAI,CAAA;AAAA,UAC5C,SAAA,EAAW,WAAA,GAAc,MAAA,GAAS,uBAAA,CAAwB,IAAI,IAAI,CAAA;AAAA,UAClE,OAAA,EAAS,cAAc,CAAA,GAAI,CAAA;AAAA,UAC3B,kBAAA,EAAoB,oBAAA;AAAA,UACpB,kBAAA,EAAoB,GAAG,QAAQ,CAAA,EAAA,CAAA;AAAA,UAC/B,wBAAA,EAA0B,cACtB,0BAAA,GACA,2BAAA;AAAA,UACJ,GAAG;AAAA,SACL;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF","file":"dropdown.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nconst sizeClass = {\n xs: \"h-8 min-h-8 gap-2 px-4 text-sm has-[>svg]:px-3 [&_svg:not([class*='size-'])]:size-3\",\n default:\n \"h-10 min-h-10 gap-2 px-5 text-sm has-[>svg]:px-4 [&_svg:not([class*='size-'])]:size-4\",\n lg: \"h-11 min-h-11 gap-2 px-6 text-base has-[>svg]:px-5 [&_svg:not([class*='size-'])]:size-5\",\n} as const;\n\n/** Square hit targets for `iconOnly` — same keys as `sizeClass` (`default` | `lg`). */\nconst iconOnlySizeClass = {\n xs: \"size-8 min-h-8 min-w-8 gap-0 p-0 [&_svg:not([class*='size-'])]:size-3\",\n default:\n \"size-10 min-h-10 min-w-10 gap-0 p-0 [&_svg:not([class*='size-'])]:size-4\",\n lg: \"size-11 min-h-11 min-w-11 gap-0 p-0 [&_svg:not([class*='size-'])]:size-5\",\n} as const;\n\nconst roundedClass = {\n full: \"rounded-full\",\n lg: \"rounded-lg\",\n md: \"rounded-md\",\n} as const;\n\nconst variantClass = {\n primary:\n \"bg-primary text-background border border-transparent hover:bg-primary/90 active:bg-primary/85\",\n secondary:\n \"bg-background text-primary border border-primary/10 hover:bg-primary/5\",\n destructive:\n \"bg-background text-red-500 border border-red-500/25 hover:bg-red-500/5\",\n success:\n \"bg-background text-green-500 border border-green-500/25 hover:bg-green-500/5\",\n} as const;\n\nexport type ButtonProps = React.ComponentProps<\"button\"> & {\n /**\n * Visual style: neutral (`secondary`, `primary`), or outline (`destructive`,\n * `success`) using Tailwind `red-500` / `green-500` text and matching borders on\n * `bg-background` (no solid fill).\n */\n variant?: keyof typeof variantClass;\n /**\n * Corner radius. Labeled buttons default to `full` (pill). `iconOnly` buttons\n * default to `md` (square corners) unless you pass `rounded` explicitly.\n */\n rounded?: keyof typeof roundedClass;\n /** Height and horizontal padding: `default` or `lg` only. */\n size?: keyof typeof sizeClass;\n /**\n * Square icon-only control; same `size` presets (`default` | `lg`). Pair with\n * `aria-label` (or `title`) when there is no visible text.\n */\n iconOnly?: boolean;\n};\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n type = \"button\",\n variant = \"secondary\",\n rounded: roundedProp,\n size = \"default\",\n iconOnly = false,\n disabled,\n ...props\n },\n ref,\n ) => {\n const rounded = roundedProp ?? (iconOnly ? \"md\" : \"full\");\n\n return (\n <button\n type={type}\n disabled={disabled}\n data-slot=\"button\"\n data-icon-only={iconOnly ? \"\" : undefined}\n className={cn(\n \"inline-flex shrink-0 cursor-pointer items-center justify-center whitespace-nowrap outline-none scale-100 transition-[color,background-color,box-shadow,transform] duration-150 ease-out active:scale-[0.98] active:duration-100 active:ease-linear [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring font-medium lg:tracking-wide focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n iconOnly ? iconOnlySizeClass[size] : sizeClass[size],\n roundedClass[rounded],\n variantClass[variant],\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nconst CHECKBOX_TICK_DELAY_MS = 60;\nconst CHECKBOX_TICK_DRAW_MS = 100;\n\nfunction CheckboxAnimatedCheckMark() {\n const lineRef = useRef<SVGPolylineElement>(null);\n\n useLayoutEffect(() => {\n const poly = lineRef.current;\n if (!poly || typeof poly.getTotalLength !== \"function\") return;\n const len = poly.getTotalLength();\n if (len <= 0) return;\n\n poly.style.strokeDasharray = `${len}`;\n poly.style.strokeDashoffset = `${len}`;\n\n if (typeof poly.animate !== \"function\") {\n poly.style.strokeDashoffset = \"0\";\n return;\n }\n\n const anim = poly.animate(\n [{ strokeDashoffset: len }, { strokeDashoffset: 0 }],\n {\n duration: CHECKBOX_TICK_DRAW_MS,\n delay: CHECKBOX_TICK_DELAY_MS,\n easing: \"cubic-bezier(0.45, 0, 0.2, 1)\",\n fill: \"forwards\",\n },\n );\n return () => anim.cancel();\n }, []);\n\n return (\n <svg\n className=\"size-4 shrink-0 overflow-visible\"\n viewBox=\"0 0 24 24\"\n aria-hidden\n >\n <polyline\n ref={lineRef}\n points=\"4 12 9 17 20 6\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport type CheckboxProps = Omit<\n React.ComponentProps<\"button\">,\n \"type\" | \"role\" | \"aria-checked\" | \"children\"\n> & {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (next: boolean) => void;\n // tri-state: same frame as checked; center shows a visible “blank” (inner surface)\n indeterminate?: boolean;\n};\n\nconst Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\n (\n {\n checked: checkedProp,\n defaultChecked = false,\n onCheckedChange,\n indeterminate = false,\n disabled = false,\n className,\n onClick,\n ...rest\n },\n ref,\n ) => {\n const isControlled = checkedProp !== undefined;\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const checked = isControlled ? checkedProp : uncontrolledChecked;\n const ariaChecked: boolean | \"mixed\" = indeterminate\n ? \"mixed\"\n : checked\n ? true\n : false;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"checkbox\"\n data-slot=\"checkbox\"\n data-state={\n indeterminate ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\"\n }\n disabled={disabled}\n aria-checked={ariaChecked}\n className={cn(\n \"ring-offset-background focus-visible:ring-primary/40 inline-flex shrink-0 items-center justify-center rounded-md border border-transparent p-0 outline-none select-none\",\n \"focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n if (disabled) return;\n if (isControlled) {\n onCheckedChange?.(!checked);\n return;\n }\n setUncontrolledChecked((prev) => {\n const next = !prev;\n onCheckedChange?.(next);\n return next;\n });\n }}\n {...rest}\n >\n <span className=\"pointer-events-none\">\n <span\n aria-hidden\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-[4px] border\",\n !disabled &&\n (indeterminate\n ? \"border-primary bg-primary text-background\"\n : checked\n ? \"border-primary bg-primary text-background\"\n : \"border-primary/20 bg-background\"),\n disabled &&\n (indeterminate\n ? \"border-transparent bg-primary/45 text-primary-foreground\"\n : checked\n ? \"border-transparent bg-primary/45 text-primary-foreground\"\n : \"border-primary/10 bg-muted/25\"),\n )}\n >\n {indeterminate ? (\n <span\n className=\"size-2.5 shrink-0 rounded-[2px] border border-primary/20 bg-background\"\n aria-hidden\n />\n ) : checked ? (\n <CheckboxAnimatedCheckMark />\n ) : null}\n </span>\n </span>\n </button>\n );\n },\n);\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n","/** How long typed characters accumulate before the search buffer resets. */\nexport const TYPEAHEAD_TIMEOUT_MS = 500;\n\nexport type TypeaheadState = {\n search: string;\n timer: ReturnType<typeof setTimeout> | null;\n};\n\nexport function createTypeaheadState(): TypeaheadState {\n return { search: \"\", timer: null };\n}\n\nexport function resetTypeahead(state: TypeaheadState): void {\n state.search = \"\";\n if (state.timer) {\n clearTimeout(state.timer);\n state.timer = null;\n }\n}\n\nexport function getItemLabel(item: HTMLElement): string {\n const aria = item.getAttribute(\"aria-label\")?.trim();\n if (aria) return aria;\n\n const marked = item.querySelector<HTMLElement>(\"[data-menu-label]\");\n if (marked?.textContent) return marked.textContent.replace(/\\s+/g, \" \").trim();\n\n return (item.textContent ?? \"\").replace(/\\s+/g, \" \").trim();\n}\n\nfunction normalizeSearch(value: string): string {\n return value.trim().toLocaleLowerCase();\n}\n\nfunction isTypeaheadTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return true;\n if (target.isContentEditable) return false;\n const tag = target.tagName;\n return tag !== \"INPUT\" && tag !== \"TEXTAREA\" && tag !== \"SELECT\";\n}\n\n/**\n * Focus the next matching item for printable keys.\n * Returns `true` when the key was consumed.\n */\nexport function handleTypeaheadKeyDown(\n event: KeyboardEvent,\n items: HTMLElement[],\n state: TypeaheadState,\n options?: { enabled?: boolean; timeoutMs?: number },\n): boolean {\n if (options?.enabled === false || items.length === 0) return false;\n if (event.ctrlKey || event.metaKey || event.altKey) return false;\n if (event.key.length !== 1 || !isTypeaheadTarget(event.target)) return false;\n\n event.preventDefault();\n\n const timeoutMs = options?.timeoutMs ?? TYPEAHEAD_TIMEOUT_MS;\n const char = event.key;\n const prevSearch = state.search;\n const repeatSingleChar =\n prevSearch.length === 1 && prevSearch === char;\n\n if (repeatSingleChar) {\n state.search = prevSearch;\n } else {\n state.search = prevSearch + char;\n }\n\n if (state.timer) clearTimeout(state.timer);\n state.timer = setTimeout(() => {\n state.search = \"\";\n state.timer = null;\n }, timeoutMs);\n\n const labels = items.map((item) => normalizeSearch(getItemLabel(item)));\n let needle = normalizeSearch(state.search);\n\n let matches = items\n .map((item, index) => ({ item, index, label: labels[index]! }))\n .filter(({ label }) => label.startsWith(needle));\n\n if (matches.length === 0 && state.search.length > 1) {\n state.search = char;\n needle = normalizeSearch(char);\n matches = items\n .map((item, index) => ({ item, index, label: labels[index]! }))\n .filter(({ label }) => label.startsWith(needle));\n }\n\n if (matches.length === 0) return true;\n\n const focused = document.activeElement as HTMLElement | null;\n const focusedIndex = focused ? items.indexOf(focused) : -1;\n\n if (repeatSingleChar && focusedIndex !== -1) {\n const currentMatch = matches.findIndex(\n ({ index }) => index === focusedIndex,\n );\n if (currentMatch !== -1) {\n const next = matches[(currentMatch + 1) % matches.length];\n next?.item.focus();\n return true;\n }\n }\n\n if (focusedIndex !== -1) {\n const nextAfterFocus = matches.find(({ index }) => index > focusedIndex);\n if (nextAfterFocus) {\n nextAfterFocus.item.focus();\n return true;\n }\n }\n\n matches[0]?.item.focus();\n return true;\n}\n","\"use client\";\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Check, ChevronDown, ChevronRight, X } from \"lucide-react\";\nimport { Button, type ButtonProps } from \"./button\";\nimport { Checkbox } from \"./checkbox\";\nimport {\n createTypeaheadState,\n handleTypeaheadKeyDown,\n resetTypeahead,\n} from \"../lib/typeahead\";\nimport { cn } from \"../lib/utils\";\n\n/** Panel transform motion — matches `sheet.tsx` `PANEL_OPEN_EASING` / `PANEL_CLOSE_EASING`. */\nconst DROPDOWN_PANEL_OPEN_EASING = \"cubic-bezier(0,0.55,0.45,1)\";\nconst DROPDOWN_PANEL_CLOSE_EASING = \"cubic-bezier(0.55,0,1,0.45)\";\n\n/** Floor for `minWidth=\"trigger\"` so narrow triggers don’t produce an overly tight menu (12rem). */\nconst DROPDOWN_MENU_MIN_WIDTH_PX = 192;\n/** Shrink on the preferred side until space drops below ~2 rows; then allow flip. */\nconst DROPDOWN_FLIP_MIN_SPACE_PX = 100;\n\n/** Mobile menu as bottom sheet — matches `dialog.tsx` (`DIALOG_MOBILE_BOTTOM_SHEET_MAX_PX` + `DIALOG_MOTION_MS`). */\nconst DROPDOWN_MOBILE_SHEET_MAX_PX = 1024;\n/** Mobile sheet panel + backdrop (slightly under `DIALOG_MOTION_MS` for snappier feel). */\nconst DROPDOWN_MOBILE_SHEET_MOTION_MS = 175;\nconst DROPDOWN_MOBILE_SHEET_ENTRY_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nconst DROPDOWN_MOBILE_SHEET_EXIT_EASING = \"cubic-bezier(0.85, 0, 1, 0.15)\";\n\n/** Default slide distance for mobile sheet when `slideEntrance` — matches `SLIDE_ENTRANCE_OFFSET_PX.full` in `dialog.tsx`. */\nconst DROPDOWN_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX = 120;\n\n/**\n * Narrow-viewport (≤1024px) bottom-sheet options for {@link DropdownContent}\n * and {@link DropdownSubContent}. `className` merges onto the same panel as\n * `DropdownContent`’s root `className` (after base sheet styles); use it for\n * overrides such as `max-h-[…]`.\n */\nexport interface DropdownMobileSheetOptions {\n /** When `false`, keep the floating menu on narrow viewports. Default `true`. */\n sheet?: boolean;\n /** Optional header title on the same row as the close control. */\n title?: string;\n /** Extra classes on the sheet panel (merged after base sheet styles, before root `className`). */\n className?: string;\n /**\n * Extra classes on the scrollable body below the header (merged after the\n * default `pb-20` and safe-area bottom padding).\n */\n contentClassName?: string;\n}\n\nfunction resolveDropdownMobileSheet(\n mobileOptions: DropdownMobileSheetOptions | undefined,\n) {\n return {\n sheet: mobileOptions?.sheet ?? true,\n title: mobileOptions?.title,\n sheetExtraClassName: mobileOptions?.className,\n contentClassName: mobileOptions?.contentClassName,\n };\n}\n\n/** Mark portaled sub-menus so root outside-dismiss ignores clicks inside them. */\nconst DROPDOWN_SUB_CONTENT_ATTR = \"data-dropdown-sub-content\";\n\n/**\n * Reshaped-style \"elevated\" popover shadow — soft long shadow + tight contact\n * shadow gives depth without the harsh dark halo of `shadow-2xl`. Shared by\n * the root menu and sub-menu panels.\n */\nconst DROPDOWN_PANEL_SHADOW =\n \"shadow-[0_12px_32px_-8px_rgba(0,0,0,0.18),0_2px_6px_-2px_rgba(0,0,0,0.06)] dark:shadow-[0_12px_32px_-8px_rgba(0,0,0,0.55),0_2px_6px_-2px_rgba(0,0,0,0.35)]\";\n\n/**\n * Hide scrollbars and contain overscroll on every scrollable descendant.\n * Native `overscroll-behavior: contain` covers the touch / scrollable-inner\n * cases; {@link preventMenuWheelChain} handles wheel on non-scrollable\n * surfaces, which the CSS property can't reach (it only applies to actual\n * scroll containers).\n */\nconst DROPDOWN_PANEL_SCROLL =\n \"[&_*]:[scrollbar-width:none] [&_*::-webkit-scrollbar]:hidden [&_*]:overscroll-contain\";\n\n/**\n * Wheel handler attached to the menu surface. Walks up from the wheel target\n * looking for a scrollable ancestor inside `menu`; if one is found AND can\n * scroll in the wheel direction, lets the browser handle it. Otherwise calls\n * `preventDefault()` so the wheel never chains to the page. Covers both the\n * \"short menu with nothing to scroll\" case and the \"scrollable inner at\n * boundary\" case in one rule.\n */\nfunction preventMenuWheelChain(menu: HTMLElement, e: WheelEvent) {\n let el: HTMLElement | null = e.target as HTMLElement | null;\n while (el && menu.contains(el)) {\n const oy = getComputedStyle(el).overflowY;\n if (\n (oy === \"auto\" || oy === \"scroll\") &&\n el.scrollHeight > el.clientHeight\n ) {\n const atTop = el.scrollTop <= 0;\n const atBottom =\n el.scrollTop + el.clientHeight >= el.scrollHeight;\n if ((e.deltaY < 0 && !atTop) || (e.deltaY > 0 && !atBottom)) return;\n break;\n }\n el = el.parentElement;\n }\n e.preventDefault();\n}\n\n/**\n * Slightly larger menu copy when viewport ≤1024px — same cutoff as the mobile\n * bottom sheet (`DROPDOWN_MOBILE_SHEET_MAX_PX`). Padding unchanged.\n */\nconst DROPDOWN_SHEET_MENU_TEXT = \"max-[1024px]:text-base\";\nconst DROPDOWN_SHEET_MENU_SHORTCUT = \"max-[1024px]:text-sm\";\nconst DROPDOWN_SHEET_MENU_LABEL_TEXT = \"max-[1024px]:text-sm\";\n\n//////////////////////////////////////////////// Positioning helpers\n\ntype Side = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype Align = \"start\" | \"center\" | \"end\";\n\ninterface Pos {\n top: number;\n left: number;\n side: Side;\n /** When set, the panel is shorter than its content and scrolls internally. */\n maxHeight?: number;\n}\n\n/** `transformOrigin` / pre-mount transform for the root floating menu (not sub-menus). */\nconst DROPDOWN_CONTENT_ORIGIN: Record<Side, string> = {\n bottom: \"top center\",\n top: \"bottom center\",\n left: \"right center\",\n right: \"left center\",\n};\nconst DROPDOWN_CONTENT_HIDDEN: Record<Side, string> = {\n bottom: \"translateY(-4px) scale(0.97)\",\n top: \"translateY(4px) scale(0.97)\",\n left: \"translateX(4px) scale(0.97)\",\n right: \"translateX(-4px) scale(0.97)\",\n};\n\n/** Sub-menu flyout uses a different origin on the horizontal axis. */\nconst SUB_CONTENT_ORIGIN: Record<Side, string> = {\n bottom: \"top center\",\n top: \"bottom center\",\n left: \"right top\",\n right: \"left top\",\n};\n\nfunction computePos(\n trigger: HTMLElement,\n menu: HTMLElement,\n side: Side,\n align: Align,\n offset: number,\n pad: number,\n): Pos {\n const tr = trigger.getBoundingClientRect();\n const mr = menu.getBoundingClientRect();\n const contentHeight = menu.scrollHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const sx = window.scrollX;\n const sy = window.scrollY;\n\n let top = 0;\n let left = 0;\n let effectiveSide = side;\n let maxHeight: number | undefined;\n\n const placeVertical = (s: Side, height: number) => {\n if (s === \"bottom\") top = tr.bottom + sy + offset;\n else top = tr.top + sy - height - offset;\n if (align === \"start\") left = tr.left + sx;\n else if (align === \"end\") left = tr.right + sx - mr.width;\n else left = tr.left + sx + tr.width / 2 - mr.width / 2;\n };\n\n const calc = (s: Side, height = contentHeight) => {\n switch (s) {\n case \"bottom\":\n case \"top\":\n placeVertical(s, height);\n break;\n case \"right\":\n left = tr.right + sx + offset;\n if (align === \"start\") top = tr.top + sy;\n else if (align === \"end\") top = tr.bottom + sy - mr.height;\n else top = tr.top + sy + tr.height / 2 - mr.height / 2;\n break;\n case \"left\":\n left = tr.left + sx - mr.width - offset;\n if (align === \"start\") top = tr.top + sy;\n else if (align === \"end\") top = tr.bottom + sy - mr.height;\n else top = tr.top + sy + tr.height / 2 - mr.height / 2;\n break;\n }\n };\n\n calc(side);\n\n const spaceBelow = Math.max(0, vh - pad - tr.bottom - offset);\n const spaceAbove = Math.max(0, tr.top - offset - pad);\n\n if (side === \"bottom\" || side === \"top\") {\n const primarySpace = side === \"bottom\" ? spaceBelow : spaceAbove;\n const alternateSpace = side === \"bottom\" ? spaceAbove : spaceBelow;\n const alternateSide: Side = side === \"bottom\" ? \"top\" : \"bottom\";\n\n if (contentHeight > primarySpace) {\n maxHeight = Math.min(contentHeight, primarySpace);\n calc(side, maxHeight);\n }\n\n if (\n contentHeight > primarySpace &&\n primarySpace < DROPDOWN_FLIP_MIN_SPACE_PX &&\n alternateSpace > primarySpace\n ) {\n effectiveSide = alternateSide;\n maxHeight = Math.min(contentHeight, alternateSpace);\n calc(alternateSide, maxHeight);\n }\n } else if (side === \"right\" && left + mr.width > vw + sx - pad) {\n const fl = tr.left + sx - mr.width - offset;\n if (fl >= sx + pad) {\n effectiveSide = \"left\";\n left = fl;\n }\n } else if (side === \"left\" && left < sx + pad) {\n const fl = tr.right + sx + offset;\n if (fl + mr.width <= vw + sx - pad) {\n effectiveSide = \"right\";\n left = fl;\n }\n }\n\n return { top, left, side: effectiveSide, maxHeight };\n}\n\n//////////////////////////////////////////////// Mobile detection\n\nfunction useIsMobile(breakpoint = 1025): boolean {\n // Read matchMedia synchronously on mount so the first render of a freshly\n // mounted sub-trigger already knows it's on a mobile viewport. Without this,\n // the synthetic `mouseenter` that fires when a sub-sheet slides under the\n // cursor (right after a tap on the parent trigger) would auto-open the row\n // beneath, because the `if (isMobile) return` guard would still see `false`\n // until the effect below runs on the next tick.\n const [isMobile, setIsMobile] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(`(max-width: ${breakpoint - 1}px)`).matches;\n });\n useEffect(() => {\n const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, [breakpoint]);\n return isMobile;\n}\n\n//////////////////////////////////////////////// Context\n\ntype DropdownCtx = {\n open: boolean;\n setOpen: (v: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n radioValues: Record<string, string>;\n setRadioValue: (group: string, value: string) => void;\n};\n\nconst DropdownContext = React.createContext<DropdownCtx | undefined>(undefined);\n\nfunction useDropdown() {\n const ctx = React.useContext(DropdownContext);\n if (!ctx)\n throw new Error(\"Dropdown components must be used within <Dropdown />\");\n return ctx;\n}\n\n// Sub-menu context (for nested menus)\ntype SubCtx = {\n open: boolean;\n setOpen: (v: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n /** When `false`, hover does not open/close the sub. See {@link DropdownSub}. */\n openOnHover: boolean;\n};\nconst SubContext = React.createContext<SubCtx | undefined>(undefined);\n\n//////////////////////////////////////////////// Root\n\ninterface DropdownProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n children,\n open: controlledOpen,\n onOpenChange,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const triggerRef = useRef<HTMLElement | null>(null);\n const [radioValues, setRadioValues] = useState<Record<string, string>>({});\n\n const setOpen = useCallback(\n (v: boolean) => {\n if (!isControlled) setInternalOpen(v);\n onOpenChange?.(v);\n },\n [isControlled, onOpenChange],\n );\n\n const setRadioValue = useCallback((group: string, value: string) => {\n setRadioValues((prev) => ({ ...prev, [group]: value }));\n }, []);\n\n const ctx = useMemo(\n () => ({ open, setOpen, triggerRef, radioValues, setRadioValue }),\n [open, setOpen, radioValues, setRadioValue],\n );\n\n return (\n <DropdownContext.Provider value={ctx}>{children}</DropdownContext.Provider>\n );\n};\n\n//////////////////////////////////////////////// Trigger\n\nexport type DropdownTriggerProps = Omit<ButtonProps, \"type\"> & {\n /**\n * Merge trigger behavior onto a single child (e.g. your own `Button`).\n * Without `asChild`, the trigger renders the shared `Button` primitive.\n */\n asChild?: boolean;\n};\n\nfunction mergeTriggerRef(\n triggerRef: React.RefObject<HTMLElement | null>,\n node: HTMLElement | null,\n childRef: React.Ref<HTMLElement> | undefined,\n) {\n triggerRef.current = node;\n if (typeof childRef === \"function\") childRef(node);\n else if (childRef && typeof childRef === \"object\")\n (childRef as React.MutableRefObject<HTMLElement | null>).current = node;\n}\n\nexport const DropdownTrigger = React.forwardRef<\n HTMLButtonElement,\n DropdownTriggerProps\n>(\n (\n {\n children,\n asChild,\n className,\n onClick: onClickProp,\n disabled,\n ...buttonProps\n },\n ref,\n ) => {\n const { open, setOpen, triggerRef } = useDropdown();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n onClickProp?.(e as React.MouseEvent<HTMLButtonElement>);\n e.stopPropagation();\n if (disabled) return;\n setOpen(!open);\n },\n [disabled, onClickProp, open, setOpen],\n );\n\n const setButtonRef = useCallback(\n (el: HTMLButtonElement | null) => {\n triggerRef.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref, triggerRef],\n );\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{\n onClick?: React.MouseEventHandler<HTMLElement>;\n ref?: React.Ref<HTMLElement>;\n className?: string;\n \"aria-expanded\"?: boolean;\n \"aria-haspopup\"?: string;\n \"data-state\"?: string;\n }>;\n return React.cloneElement(child, {\n ref: (node: HTMLElement | null) => {\n mergeTriggerRef(\n triggerRef,\n node,\n (\n child as React.ReactElement<unknown> & {\n ref?: React.Ref<HTMLElement>;\n }\n ).ref,\n );\n },\n className: cn(\"group\", child.props.className),\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n child.props.onClick?.(e);\n handleClick(e);\n },\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"data-state\": open ? \"open\" : \"closed\",\n ...(disabled !== undefined\n ? {\n disabled,\n }\n : {}),\n } as Partial<typeof child.props>);\n }\n\n return (\n <Button\n ref={setButtonRef}\n type=\"button\"\n {...buttonProps}\n disabled={disabled}\n className={cn(\"group\", className)}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n data-state={open ? \"open\" : \"closed\"}\n onClick={handleClick as React.MouseEventHandler<HTMLButtonElement>}\n >\n {children}\n </Button>\n );\n },\n);\nDropdownTrigger.displayName = \"DropdownTrigger\";\n\n/** Chevron for menu triggers; rotates 180° when the menu is open. */\nexport function DropdownChevron({\n className,\n ...props\n}: React.ComponentProps<typeof ChevronDown>) {\n const { open } = useDropdown();\n return (\n <ChevronDown\n aria-hidden\n className={cn(\"size-4 shrink-0\", open && \"rotate-180\", className)}\n {...props}\n />\n );\n}\n\n//////////////////////////////////////////////// Mobile sheet close\n\nexport interface DropdownMobileCloseProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * Dismiss control for the mobile bottom-sheet menu. Styling matches\n * {@link DialogCloseButton} (circular hit target, X icon).\n */\nexport const DropdownMobileClose = React.forwardRef<\n HTMLButtonElement,\n DropdownMobileCloseProps\n>(({ className, type = \"button\", ...props }, ref) => {\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n \"z-100 flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full transition-all hover:bg-secondary-background active:scale-[0.96]\",\n className,\n )}\n {...props}\n >\n <X className=\"size-5.5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n );\n});\nDropdownMobileClose.displayName = \"DropdownMobileClose\";\n\n//////////////////////////////////////////////// Mobile bottom sheet (shared root + sub)\n\ninterface DropdownMobileBottomSheetPortalProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"ref\"\n> {\n children: React.ReactNode;\n open: boolean;\n isAnimating: boolean;\n slideEntrance: boolean;\n slideOffsetPx: number;\n sheetTitle?: string;\n /** Merged onto the sheet panel after base classes (from `mobileOptions.className`). */\n sheetExtraClassName?: string;\n /** Merged onto the scrollable region below the header. */\n contentClassName?: string;\n onRequestClose: () => void;\n menuRef: React.RefObject<HTMLDivElement | null>;\n /** Root menu uses `z-50`; nested sub-menu sheet should stack above (e.g. `z-[70]`). */\n portalZClassName?: string;\n /**\n * When `true`, marks the portal **wrapper** (which contains the scrim) with\n * `data-dropdown-sub-content` so outside-click handlers recognize a tap on\n * a stacked sub-sheet's scrim as \"still inside a sub\" and don't cascade-close\n * parent sheets. Root sheets leave this `false` so a tap on the root scrim\n * still closes the root.\n */\n isSubPortal?: boolean;\n}\n\nfunction DropdownMobileBottomSheetPortal({\n open,\n isAnimating,\n slideEntrance,\n slideOffsetPx,\n sheetTitle,\n sheetExtraClassName,\n contentClassName,\n onRequestClose,\n menuRef,\n portalZClassName = \"z-50\",\n isSubPortal = false,\n children,\n className,\n style,\n ...panelProps\n}: DropdownMobileBottomSheetPortalProps) {\n const sheetMotion = open\n ? DROPDOWN_MOBILE_SHEET_ENTRY_EASING\n : DROPDOWN_MOBILE_SHEET_EXIT_EASING;\n const sheetHiddenTransform = slideEntrance\n ? `translateY(${slideOffsetPx}px)`\n : \"translateY(100%)\";\n\n return createPortal(\n <div\n {...(isSubPortal ? { [DROPDOWN_SUB_CONTENT_ATTR]: \"\" } : {})}\n className={cn(\n \"fixed inset-0 flex items-end justify-center p-0\",\n portalZClassName,\n )}\n >\n <div\n className={cn(\n \"fixed inset-0 bg-black/40 dark:bg-primary/4\",\n isAnimating ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{\n transitionProperty: \"opacity\",\n transitionDuration: `${DROPDOWN_MOBILE_SHEET_MOTION_MS}ms`,\n transitionTimingFunction: sheetMotion,\n }}\n onClick={onRequestClose}\n />\n <div\n {...panelProps}\n ref={menuRef}\n className={cn(\n \"bg-background border-primary/8 relative z-10 flex w-full max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] flex-col overflow-hidden shadow-2xl outline-none\",\n \"rounded-t-2xl rounded-b-none border-x-0 border-b-0 border-t\",\n DROPDOWN_PANEL_SCROLL,\n sheetExtraClassName,\n className,\n )}\n style={{\n transform: isAnimating ? \"translateY(0)\" : sheetHiddenTransform,\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${DROPDOWN_MOBILE_SHEET_MOTION_MS}ms`,\n transitionTimingFunction: sheetMotion,\n ...style,\n }}\n >\n <div\n className={cn(\n \"flex w-full shrink-0 items-center py-2 pl-4 pr-2\",\n sheetTitle ? \"justify-between gap-3\" : \"justify-end\",\n )}\n >\n {sheetTitle ? (\n <p className=\"text-foreground min-w-0 flex-1 truncate text-base font-semibold\">\n {sheetTitle}\n </p>\n ) : null}\n <DropdownMobileClose\n onClick={(e) => {\n e.stopPropagation();\n onRequestClose();\n }}\n />\n </div>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto pb-[calc(5rem+env(safe-area-inset-bottom,0px))]\",\n contentClassName,\n )}\n >\n {children}\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n\n//////////////////////////////////////////////// Content\n\ninterface DropdownContentProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: Side;\n align?: Align;\n /** Gap in px between the trigger and the menu edge (default 10). */\n offset?: number;\n duration?: number;\n viewportPadding?: number;\n closeOnEscape?: boolean;\n /** Minimum width in px, or `\"trigger\"` to match the trigger (never below 192px). */\n minWidth?: number | \"trigger\";\n /** Loop keyboard focus at list boundaries */\n loop?: boolean;\n /** Type characters to jump to matching items (default true). */\n typeahead?: boolean;\n /**\n * Mobile (≤1024px) bottom-sheet configuration (`sheet`, `title`, panel\n * `className`, optional scroll body `contentClassName` after default `pb-20`\n * + safe area).\n */\n mobileOptions?: DropdownMobileSheetOptions;\n /**\n * Mobile bottom sheet only. When `true` (default), panel motion matches Dialog\n * `slideEntrance`: `translateY(slideEntranceOffsetPx)` + opacity, with the same\n * double-RAF open timing as `DialogContent`. When `false`, uses full\n * `translateY(100%)` like Dialog’s default narrow-viewport bottom sheet.\n */\n slideEntrance?: boolean;\n /** Mobile sheet only; defaults to 120px (same as Dialog `slideEntrance` for `size=\"full\"`). */\n slideEntranceOffsetPx?: number;\n}\n\nexport const DropdownContent: React.FC<DropdownContentProps> = ({\n children,\n side = \"bottom\",\n align = \"start\",\n offset = 10,\n duration = 80,\n viewportPadding = 8,\n closeOnEscape = true,\n minWidth = \"trigger\",\n loop = true,\n typeahead = true,\n mobileOptions,\n slideEntrance = true,\n slideEntranceOffsetPx: slideEntranceOffsetPxProp,\n className,\n style,\n ...props\n}) => {\n const isMobile = useIsMobile(DROPDOWN_MOBILE_SHEET_MAX_PX + 1);\n const { open, setOpen, triggerRef } = useDropdown();\n const [shouldRender, setShouldRender] = useState(false);\n const [isAnimating, setIsAnimating] = useState(false);\n const [pos, setPos] = useState<Pos>({ top: -9999, left: -9999, side });\n const [triggerW, setTriggerW] = useState(0);\n const menuRef = useRef<HTMLDivElement>(null);\n const typeaheadStateRef = useRef(createTypeaheadState());\n\n const resolvedMobile = resolveDropdownMobileSheet(mobileOptions);\n const isMobileSheet = isMobile && resolvedMobile.sheet;\n const slideOffsetPx =\n slideEntranceOffsetPxProp ??\n DROPDOWN_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX;\n\n // Desktop = instant unmount on close (Fresha/Reshaped — holding a fade\n // after a pick reads as lag). Mobile sheet keeps its slide-down + scrim\n // exit so the dismissal feels natural on touch.\n useEffect(() => {\n if (open) {\n setShouldRender(true);\n return;\n }\n if (!isMobileSheet) {\n setShouldRender(false);\n return;\n }\n setIsAnimating(false);\n const t = setTimeout(\n () => setShouldRender(false),\n DROPDOWN_MOBILE_SHEET_MOTION_MS,\n );\n return () => clearTimeout(t);\n }, [open, isMobileSheet]);\n\n useEffect(() => {\n if (!shouldRender || !open) return;\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsAnimating(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }, [shouldRender, open]);\n\n // Position\n useLayoutEffect(() => {\n if (!shouldRender || !triggerRef.current || !menuRef.current) return;\n const update = () => {\n if (!triggerRef.current || !menuRef.current) return;\n setTriggerW(triggerRef.current.getBoundingClientRect().width);\n setPos(\n computePos(\n triggerRef.current,\n menuRef.current,\n side,\n align,\n offset,\n viewportPadding,\n ),\n );\n };\n update();\n window.addEventListener(\"resize\", update);\n return () => {\n window.removeEventListener(\"resize\", update);\n };\n }, [shouldRender, side, align, offset, viewportPadding]);\n\n // Close on outside scroll; the wheel handler below + CSS `overscroll-contain`\n // keep internal scrolls (including portaled sub-menus) from chaining out.\n useEffect(() => {\n if (!open || isMobileSheet) return;\n const isInsideMenu = (t: EventTarget | null) =>\n t instanceof Node &&\n (!!menuRef.current?.contains(t) ||\n !!triggerRef.current?.contains(t) ||\n (t instanceof Element &&\n !!t.closest(`[${DROPDOWN_SUB_CONTENT_ATTR}]`)));\n const onScroll = (e: Event) => {\n if (!isInsideMenu(e.target)) setOpen(false);\n };\n window.addEventListener(\"scroll\", onScroll, true);\n return () => window.removeEventListener(\"scroll\", onScroll, true);\n }, [open, isMobileSheet, setOpen, triggerRef]);\n\n // Contain wheel: never let scrolling inside the menu chain to the page,\n // whether or not anything inside actually scrolls.\n useEffect(() => {\n if (!shouldRender || isMobileSheet) return;\n const menu = menuRef.current;\n if (!menu) return;\n const onWheel = (e: WheelEvent) => preventMenuWheelChain(menu, e);\n menu.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => menu.removeEventListener(\"wheel\", onWheel);\n }, [shouldRender, isMobileSheet]);\n\n // Focus the menu surface on open (not the first item) so nothing looks\n // “selected” until the user arrows or hovers. ArrowDown moves to items[0].\n useEffect(() => {\n if (isAnimating && menuRef.current) {\n menuRef.current.focus();\n }\n }, [isAnimating]);\n\n useEffect(() => {\n if (!open) resetTypeahead(typeaheadStateRef.current);\n }, [open]);\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const t = e.target as Node;\n if (menuRef.current?.contains(t) || triggerRef.current?.contains(t))\n return;\n const el = e.target instanceof Element ? e.target : null;\n if (el?.closest?.(`[${DROPDOWN_SUB_CONTENT_ATTR}]`)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, setOpen, triggerRef]);\n\n // Keyboard navigation\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n const menu = menuRef.current;\n if (!menu) return;\n const focusedEl = document.activeElement as HTMLElement | null;\n // Sub-menus portal outside `menu`; don't hijack keys meant for them\n if (focusedEl && !menu.contains(focusedEl)) return;\n const items = getItems(menu);\n const idx = items.indexOf(focusedEl!);\n\n switch (e.key) {\n case \"Escape\":\n if (closeOnEscape) {\n e.preventDefault();\n setOpen(false);\n triggerRef.current?.focus();\n }\n break;\n case \"ArrowDown\":\n e.preventDefault();\n if (items.length === 0) break;\n if (idx === -1 || (idx === items.length - 1 && loop))\n items[0]?.focus();\n else if (idx < items.length - 1) items[idx + 1]?.focus();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (items.length === 0) break;\n if (idx <= 0 && loop) items[items.length - 1]?.focus();\n else if (idx > 0) items[idx - 1]?.focus();\n break;\n case \"Home\":\n e.preventDefault();\n items[0]?.focus();\n break;\n case \"End\":\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n case \"Tab\":\n setOpen(false);\n break;\n default:\n handleTypeaheadKeyDown(e, items, typeaheadStateRef.current, {\n enabled: typeahead,\n });\n break;\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [open, closeOnEscape, loop, typeahead, setOpen, triggerRef]);\n\n // Body scroll lock — only attaches when the mobile sheet is actually open.\n useEffect(() => {\n if (!open || !isMobileSheet) return;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [open, isMobileSheet]);\n\n if (!shouldRender || typeof document === \"undefined\") return null;\n\n // ─── Mobile bottom-sheet mode (chrome + motion match `Dialog` bottom sheet) ─\n if (isMobileSheet) {\n return (\n <DropdownMobileBottomSheetPortal\n {...props}\n open={open}\n isAnimating={isAnimating}\n slideEntrance={slideEntrance}\n slideOffsetPx={slideOffsetPx}\n sheetTitle={resolvedMobile.title}\n sheetExtraClassName={resolvedMobile.sheetExtraClassName}\n contentClassName={resolvedMobile.contentClassName}\n onRequestClose={() => setOpen(false)}\n menuRef={menuRef}\n portalZClassName=\"z-50\"\n className={className}\n style={style}\n role=\"menu\"\n aria-orientation=\"vertical\"\n tabIndex={-1}\n >\n {children}\n </DropdownMobileBottomSheetPortal>\n );\n }\n\n // ─── Desktop floating menu mode ──────────────────────────────────────────\n const resolvedMinW =\n minWidth === \"trigger\"\n ? Math.max(triggerW, DROPDOWN_MENU_MIN_WIDTH_PX)\n : minWidth;\n\n return createPortal(\n <div\n {...props}\n ref={menuRef}\n role=\"menu\"\n aria-orientation=\"vertical\"\n tabIndex={-1}\n className={cn(\n \"bg-background border-primary/8 absolute z-50 rounded-xl border py-1.5 outline-none\",\n DROPDOWN_PANEL_SHADOW,\n DROPDOWN_PANEL_SCROLL,\n className,\n pos.maxHeight != null ? \"overflow-y-auto\" : \"overflow-hidden\",\n )}\n style={{\n position: \"absolute\",\n top: pos.top,\n left: pos.left,\n minWidth: resolvedMinW,\n maxHeight: pos.maxHeight,\n transformOrigin: DROPDOWN_CONTENT_ORIGIN[pos.side],\n transform: isAnimating ? \"none\" : DROPDOWN_CONTENT_HIDDEN[pos.side],\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"opacity, transform\",\n transitionDuration: `${duration}ms`,\n transitionTimingFunction: isAnimating\n ? DROPDOWN_PANEL_OPEN_EASING\n : DROPDOWN_PANEL_CLOSE_EASING,\n ...style,\n }}\n >\n {children}\n </div>,\n document.body,\n );\n};\n\n/** Returns all focusable menu items, excluding disabled ones */\nfunction getItems(menu: HTMLElement): HTMLElement[] {\n return Array.from(\n menu.querySelectorAll<HTMLElement>(\n '[role=\"menuitem\"]:not([aria-disabled=\"true\"]),' +\n '[role=\"menuitemcheckbox\"]:not([aria-disabled=\"true\"]),' +\n '[role=\"menuitemradio\"]:not([aria-disabled=\"true\"])',\n ),\n );\n}\n\n//////////////////////////////////////////////// Item\n\ninterface DropdownItemProps extends React.HTMLAttributes<HTMLDivElement> {\n disabled?: boolean;\n destructive?: boolean;\n icon?: React.ReactNode;\n shortcut?: string;\n /** Close menu on click (default true) */\n closeOnSelect?: boolean;\n inset?: boolean;\n}\n\nexport const DropdownItem: React.FC<DropdownItemProps> = ({\n children,\n disabled = false,\n destructive = false,\n icon,\n shortcut,\n closeOnSelect = true,\n inset = false,\n className,\n onClick,\n ...props\n}) => {\n const { setOpen } = useDropdown();\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n onClick?.(e);\n if (closeOnSelect) setOpen(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n return (\n <div\n {...props}\n role=\"menuitem\"\n tabIndex={disabled ? undefined : -1}\n aria-disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={cn(\n \"relative mx-1.5 flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors duration-0 outline-none select-none\",\n DROPDOWN_SHEET_MENU_TEXT,\n inset && \"pl-9\",\n !disabled && \"cursor-pointer\",\n disabled && \"lg:cursor-not-allowed\",\n !disabled &&\n !destructive &&\n \"text-foreground hover:bg-primary/8 focus-visible:bg-primary/8 dark:hover:bg-primary/4 dark:focus-visible:bg-primary/4\",\n !disabled &&\n destructive &&\n \"text-destructive hover:bg-destructive/10 focus-visible:bg-destructive/10 dark:text-destructive-foreground dark:hover:bg-destructive-foreground/18 dark:focus-visible:bg-destructive-foreground/18\",\n disabled &&\n !destructive &&\n \"text-foreground/45 dark:text-foreground/50\",\n disabled &&\n destructive &&\n \"bg-destructive/5 text-destructive/75 dark:bg-destructive-foreground/12 dark:text-destructive-foreground/78\",\n className,\n )}\n >\n {icon && (\n <span className=\"flex size-4 shrink-0 items-center justify-center\">\n {icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1\" data-menu-label>\n {children}\n </span>\n {shortcut ? (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest\",\n DROPDOWN_SHEET_MENU_SHORTCUT,\n destructive\n ? \"text-destructive/70 dark:text-destructive-foreground/80\"\n : \"opacity-40\",\n )}\n >\n {shortcut}\n </span>\n ) : null}\n </div>\n );\n};\n\n//////////////////////////////////////////////// Separator\n\nexport const DropdownSeparator: React.FC<\n React.HTMLAttributes<HTMLDivElement>\n> = ({ className, ...props }) => (\n <div\n role=\"separator\"\n className={cn(\"border-primary/10 my-1.5 border-t\", className)}\n {...props}\n />\n);\n\n//////////////////////////////////////////////// Label\n\nexport const DropdownLabel: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { inset?: boolean }\n> = ({ className, inset, ...props }) => (\n <div\n className={cn(\n \"text-primary/50 px-4 py-2 text-xs font-medium\",\n DROPDOWN_SHEET_MENU_LABEL_TEXT,\n inset && \"pl-9\",\n className,\n )}\n {...props}\n />\n);\n\n//////////////////////////////////////////////// Checkbox Item\n\ninterface DropdownCheckboxItemProps extends Omit<DropdownItemProps, \"icon\"> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const DropdownCheckboxItem: React.FC<DropdownCheckboxItemProps> = ({\n children,\n checked = false,\n onCheckedChange,\n disabled = false,\n shortcut,\n closeOnSelect = false,\n className,\n onClick,\n ...props\n}) => {\n const { setOpen } = useDropdown();\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n onCheckedChange?.(!checked);\n onClick?.(e);\n if (closeOnSelect) setOpen(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n return (\n <div\n {...props}\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n tabIndex={disabled ? undefined : -1}\n aria-disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={cn(\n \"mx-1.5 flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors duration-0 outline-none select-none\",\n DROPDOWN_SHEET_MENU_TEXT,\n !disabled &&\n \"cursor-pointer text-foreground hover:bg-primary/8 focus-visible:bg-primary/8 dark:hover:bg-primary/4 dark:focus-visible:bg-primary/4\",\n disabled &&\n \"lg:cursor-not-allowed text-foreground/45 dark:text-foreground/50\",\n className,\n )}\n >\n <span className=\"mr-1 inline-flex shrink-0\" aria-hidden>\n <Checkbox\n checked={checked}\n disabled={disabled}\n tabIndex={-1}\n className=\"pointer-events-none\"\n />\n </span>\n <span className=\"min-w-0 flex-1\" data-menu-label>\n {children}\n </span>\n {shortcut && (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest opacity-40\",\n DROPDOWN_SHEET_MENU_SHORTCUT,\n )}\n >\n {shortcut}\n </span>\n )}\n </div>\n );\n};\n\n//////////////////////////////////////////////// Radio Group + Item\n\nexport const DropdownRadioGroup: React.FC<{\n children: React.ReactNode;\n value?: string;\n onValueChange?: (value: string) => void;\n group: string;\n}> = ({ children, value, onValueChange, group }) => {\n const { setRadioValue, radioValues } = useDropdown();\n\n const resolvedValue = value ?? radioValues[group] ?? \"\";\n\n const handleValueChange = useCallback(\n (v: string) => {\n setRadioValue(group, v);\n onValueChange?.(v);\n },\n [group, onValueChange, setRadioValue],\n );\n\n const radioCtx = useMemo(\n () => ({\n group,\n value: resolvedValue,\n onValueChange: handleValueChange,\n }),\n [group, resolvedValue, handleValueChange],\n );\n\n return (\n <RadioGroupContext.Provider value={radioCtx}>\n {children}\n </RadioGroupContext.Provider>\n );\n};\n\ntype RadioGroupCtx = {\n group: string;\n value: string;\n onValueChange: (v: string) => void;\n};\nconst RadioGroupContext = React.createContext<RadioGroupCtx | undefined>(\n undefined,\n);\n\nfunction useRadioGroup() {\n const ctx = React.useContext(RadioGroupContext);\n if (!ctx)\n throw new Error(\"DropdownRadioItem must be inside DropdownRadioGroup\");\n return ctx;\n}\n\ninterface DropdownRadioItemProps extends Omit<DropdownItemProps, \"icon\"> {\n value: string;\n}\n\nexport const DropdownRadioItem: React.FC<DropdownRadioItemProps> = ({\n children,\n value,\n disabled = false,\n shortcut,\n closeOnSelect = false,\n className,\n onClick,\n ...props\n}) => {\n const { setOpen } = useDropdown();\n const { value: groupValue, onValueChange } = useRadioGroup();\n const checked = groupValue === value;\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n onValueChange(value);\n onClick?.(e);\n if (closeOnSelect) setOpen(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n return (\n <div\n {...props}\n role=\"menuitemradio\"\n aria-checked={checked}\n tabIndex={disabled ? undefined : -1}\n aria-disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={cn(\n \"relative mx-1.5 flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors duration-0 outline-none select-none\",\n DROPDOWN_SHEET_MENU_TEXT,\n !disabled &&\n \"cursor-pointer text-foreground hover:bg-primary/8 focus-visible:bg-primary/8 dark:hover:bg-primary/4 dark:focus-visible:bg-primary/4\",\n disabled &&\n \"lg:cursor-not-allowed text-foreground/45 dark:text-foreground/50\",\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\" data-menu-label>\n {children}\n </span>\n {shortcut ? (\n <span\n className={cn(\n \"shrink-0 text-xs tracking-widest opacity-40\",\n DROPDOWN_SHEET_MENU_SHORTCUT,\n )}\n >\n {shortcut}\n </span>\n ) : null}\n <span\n className=\"flex size-4 shrink-0 items-center justify-center\"\n aria-hidden\n >\n {checked ? <Check className=\"size-3.5\" strokeWidth={2.5} /> : null}\n </span>\n </div>\n );\n};\n\n//////////////////////////////////////////////// Sub-menu\n\n/**\n * `openOnHover` (default `true`) controls whether moving a mouse onto the\n * `DropdownSubTrigger` (or off the `DropdownSubContent`) opens / closes the\n * sub. Set to `false` for menus rendered inside a scrollable container, where\n * rows passing under a stationary cursor would otherwise toggle the sub on\n * every scroll tick. Click, Enter, ArrowRight always open regardless.\n */\nexport const DropdownSub: React.FC<{\n children: React.ReactNode;\n openOnHover?: boolean;\n}> = ({ children, openOnHover = true }) => {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLElement | null>(null);\n const subCtx = useMemo(\n () => ({ open, setOpen, triggerRef, openOnHover }),\n [open, setOpen, openOnHover],\n );\n return <SubContext.Provider value={subCtx}>{children}</SubContext.Provider>;\n};\n\nexport const DropdownSubTrigger: React.FC<\n React.HTMLAttributes<HTMLDivElement> & {\n icon?: React.ReactNode;\n inset?: boolean;\n disabled?: boolean;\n }\n> = ({ children, icon, inset, disabled = false, className, ...props }) => {\n const sub = React.useContext(SubContext);\n if (!sub) throw new Error(\"DropdownSubTrigger must be inside DropdownSub\");\n const { open, setOpen, triggerRef, openOnHover } = sub;\n /** Same cutoff as mobile bottom sheet — touch / narrow viewports must not use hover. */\n const isMobile = useIsMobile(DROPDOWN_MOBILE_SHEET_MAX_PX + 1);\n\n return (\n <div\n {...props}\n ref={(el) => {\n triggerRef.current = el;\n }}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n tabIndex={disabled ? undefined : -1}\n aria-disabled={disabled}\n onMouseEnter={() => {\n if (disabled || isMobile || !openOnHover) return;\n setOpen(true);\n }}\n onMouseLeave={() => {\n if (isMobile || !openOnHover) return;\n setOpen(false);\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === \"ArrowRight\" || e.key === \"Enter\") {\n e.preventDefault();\n setOpen(true);\n }\n }}\n onClick={() => {\n if (disabled) return;\n setOpen(!open);\n }}\n className={cn(\n \"relative mx-1.5 flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors duration-0 outline-none select-none\",\n DROPDOWN_SHEET_MENU_TEXT,\n inset && \"pl-9\",\n !disabled &&\n \"cursor-pointer text-foreground hover:bg-primary/8 focus-visible:bg-primary/8 dark:hover:bg-primary/4 dark:focus-visible:bg-primary/4\",\n disabled &&\n \"lg:cursor-not-allowed text-foreground/45 dark:text-foreground/50\",\n className,\n )}\n >\n {icon && (\n <span className=\"flex size-4 shrink-0 items-center justify-center\">\n {icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1\" data-menu-label>\n {children}\n </span>\n <ChevronRight className=\"ml-auto size-4 shrink-0 opacity-50\" />\n </div>\n );\n};\n\nexport const DropdownSubContent: React.FC<\n React.HTMLAttributes<HTMLDivElement> & {\n duration?: number;\n viewportPadding?: number;\n /** Same meaning as {@link DropdownContent}. */\n mobileOptions?: DropdownMobileSheetOptions;\n /** Same as {@link DropdownContent} slideEntrance; default true. */\n slideEntrance?: boolean;\n slideEntranceOffsetPx?: number;\n /** Same as {@link DropdownContent}; default true. */\n typeahead?: boolean;\n }\n> = ({\n children,\n duration = 80,\n viewportPadding = 8,\n mobileOptions,\n slideEntrance = true,\n slideEntranceOffsetPx: slideEntranceOffsetPxProp,\n typeahead = true,\n className,\n style,\n onKeyDown: onKeyDownProp,\n ...props\n}) => {\n const sub = React.useContext(SubContext);\n if (!sub) throw new Error(\"DropdownSubContent must be inside DropdownSub\");\n const { open, setOpen, triggerRef, openOnHover } = sub;\n\n const isMobile = useIsMobile(DROPDOWN_MOBILE_SHEET_MAX_PX + 1);\n const resolvedMobile = resolveDropdownMobileSheet(mobileOptions);\n const isMobileSheet = isMobile && resolvedMobile.sheet;\n const slideOffsetPx =\n slideEntranceOffsetPxProp ??\n DROPDOWN_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX;\n\n const [shouldRender, setShouldRender] = useState(false);\n const [isAnimating, setIsAnimating] = useState(false);\n const [pos, setPos] = useState<Pos>({\n top: -9999,\n left: -9999,\n side: \"right\",\n });\n const menuRef = useRef<HTMLDivElement>(null);\n const typeaheadStateRef = useRef(createTypeaheadState());\n\n // Same lifecycle as `DropdownContent`: instant on desktop, animated on the\n // mobile sheet.\n useEffect(() => {\n if (open) {\n setShouldRender(true);\n return;\n }\n if (!isMobileSheet) {\n setShouldRender(false);\n return;\n }\n setIsAnimating(false);\n const t = setTimeout(\n () => setShouldRender(false),\n DROPDOWN_MOBILE_SHEET_MOTION_MS,\n );\n return () => clearTimeout(t);\n }, [open, isMobileSheet]);\n\n useEffect(() => {\n if (!shouldRender || !open) return;\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsAnimating(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }, [shouldRender, open]);\n\n useLayoutEffect(() => {\n if (!shouldRender || isMobileSheet) return;\n if (!triggerRef.current || !menuRef.current) return;\n const update = () => {\n if (!triggerRef.current || !menuRef.current) return;\n setPos(\n computePos(\n triggerRef.current,\n menuRef.current,\n \"right\",\n \"start\",\n -8,\n viewportPadding,\n ),\n );\n };\n update();\n window.addEventListener(\"resize\", update);\n return () => {\n window.removeEventListener(\"resize\", update);\n };\n }, [shouldRender, viewportPadding, isMobileSheet]);\n\n // Close when a container that holds the sub-trigger scrolls — without this\n // the flyout would drift off its row. The root handles document/window\n // scrolls; the wheel handler below keeps internal scrolls from chaining\n // out, so a single `scroll` listener is enough.\n useEffect(() => {\n if (!open || isMobileSheet) return;\n const onScroll = (e: Event) => {\n const t = e.target;\n if (!(t instanceof Node) || menuRef.current?.contains(t)) return;\n const trigger = triggerRef.current;\n if (trigger && (t === trigger || t.contains(trigger))) setOpen(false);\n };\n window.addEventListener(\"scroll\", onScroll, true);\n return () => window.removeEventListener(\"scroll\", onScroll, true);\n }, [open, isMobileSheet, setOpen, triggerRef]);\n\n // Contain wheel inside the sub-panel; same rule as the root.\n useEffect(() => {\n if (!shouldRender || isMobileSheet) return;\n const menu = menuRef.current;\n if (!menu) return;\n const onWheel = (e: WheelEvent) => preventMenuWheelChain(menu, e);\n menu.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => menu.removeEventListener(\"wheel\", onWheel);\n }, [shouldRender, isMobileSheet]);\n\n useEffect(() => {\n if (isAnimating && menuRef.current) {\n menuRef.current.focus();\n }\n }, [isAnimating]);\n\n useEffect(() => {\n if (!open) resetTypeahead(typeaheadStateRef.current);\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const t = e.target as Node;\n if (menuRef.current?.contains(t) || triggerRef.current?.contains(t))\n return;\n const el = e.target instanceof Element ? e.target : null;\n const subPanel = el?.closest?.(`[${DROPDOWN_SUB_CONTENT_ATTR}]`);\n if (subPanel && subPanel !== menuRef.current) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, setOpen, triggerRef]);\n\n const handleSubMenuKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDownProp?.(e);\n if (e.defaultPrevented) return;\n const menu = menuRef.current;\n if (!menu) return;\n const items = getItems(menu);\n const focused = document.activeElement as HTMLElement;\n const idx = items.indexOf(focused);\n\n switch (e.key) {\n case \"ArrowLeft\":\n case \"Escape\":\n e.preventDefault();\n setOpen(false);\n triggerRef.current?.focus();\n break;\n case \"ArrowDown\":\n e.preventDefault();\n if (items.length === 0) break;\n if (idx === -1 || idx === items.length - 1) items[0]?.focus();\n else items[idx + 1]?.focus();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (items.length === 0) break;\n if (idx <= 0) items[items.length - 1]?.focus();\n else items[idx - 1]?.focus();\n break;\n case \"Home\":\n e.preventDefault();\n items[0]?.focus();\n break;\n case \"End\":\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n default:\n handleTypeaheadKeyDown(e.nativeEvent, items, typeaheadStateRef.current, {\n enabled: typeahead,\n });\n break;\n }\n },\n [onKeyDownProp, setOpen, triggerRef, typeahead],\n );\n\n if (!shouldRender || typeof document === \"undefined\") return null;\n\n if (isMobileSheet) {\n return (\n <DropdownMobileBottomSheetPortal\n {...props}\n open={open}\n isAnimating={isAnimating}\n slideEntrance={slideEntrance}\n slideOffsetPx={slideOffsetPx}\n sheetTitle={resolvedMobile.title}\n sheetExtraClassName={resolvedMobile.sheetExtraClassName}\n contentClassName={resolvedMobile.contentClassName}\n onRequestClose={() => setOpen(false)}\n menuRef={menuRef}\n portalZClassName=\"z-[70]\"\n isSubPortal\n className={className}\n style={style}\n role=\"menu\"\n tabIndex={-1}\n onKeyDown={handleSubMenuKeyDown}\n data-dropdown-sub-content=\"\"\n >\n {children}\n </DropdownMobileBottomSheetPortal>\n );\n }\n\n return createPortal(\n <div\n {...props}\n ref={menuRef}\n role=\"menu\"\n tabIndex={-1}\n onMouseEnter={openOnHover ? () => setOpen(true) : undefined}\n onMouseLeave={openOnHover ? () => setOpen(false) : undefined}\n onKeyDown={handleSubMenuKeyDown}\n data-dropdown-sub-content=\"\"\n className={cn(\n \"bg-background border-primary/8 absolute z-60 rounded-xl border py-1.5 outline-none\",\n DROPDOWN_PANEL_SHADOW,\n DROPDOWN_PANEL_SCROLL,\n className,\n pos.maxHeight != null ? \"overflow-y-auto\" : \"overflow-hidden\",\n )}\n style={{\n position: \"absolute\",\n top: pos.top,\n left: pos.left,\n minWidth: DROPDOWN_MENU_MIN_WIDTH_PX,\n maxHeight: pos.maxHeight,\n transformOrigin: SUB_CONTENT_ORIGIN[pos.side],\n transform: isAnimating ? \"none\" : DROPDOWN_CONTENT_HIDDEN[pos.side],\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"opacity, transform\",\n transitionDuration: `${duration}ms`,\n transitionTimingFunction: isAnimating\n ? DROPDOWN_PANEL_OPEN_EASING\n : DROPDOWN_PANEL_CLOSE_EASING,\n ...style,\n }}\n >\n {children}\n </div>,\n document.body,\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../utils/cx.ts","../../../../components/base/avatar/base-components/avatar-online-indicator.tsx","../../../../components/base/avatar/base-components/verified-tick.tsx","../../../../components/base/avatar/base-components/avatar-count.tsx","../../../../components/base/avatar/avatar.tsx","../../../../components/base/checkbox/checkbox.tsx","../../../../components/base/radio-buttons/radio-buttons.tsx","../../../../components/base/toggle/toggle.tsx","../../../../components/base/dropdown/dropdown.tsx"],"names":["jsx","jsxs","sizes","User01","useRef","useLayoutEffect","focusRingShadow","styles","Check","AriaMenuItem","ChevronRight","AriaMenu","AriaPopover","AriaSeparator","AriaButton","DotsVertical","AriaMenuTrigger","AriaMenuSection","AriaHeader"],"mappings":"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","file":"dropdown.js","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\nconst sizes = {\n xs: \"size-1.5\",\n sm: \"size-2\",\n md: \"size-2.5\",\n lg: \"size-3\",\n xl: \"size-3.5\",\n \"2xl\": \"size-4\",\n \"3xl\": \"size-4.5\",\n \"4xl\": \"size-5\",\n};\n\ninterface AvatarOnlineIndicatorProps {\n size: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\n status: \"online\" | \"offline\";\n className?: string;\n}\n\nexport const AvatarOnlineIndicator = ({ size, status, className }: AvatarOnlineIndicatorProps) => (\n <span\n className={cx(\n \"absolute right-0 bottom-0 flex justify-center rounded-full ring-[1.5px] ring-bg-primary\",\n status === \"online\" ? \"bg-fg-success-secondary\" : \"bg-utility-neutral-300\",\n sizes[size],\n className,\n )}\n style={{\n backgroundImage:\n \"radial-gradient(43.75% 43.75% at 50% 28.75%, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.00) 100%), radial-gradient(50% 50% at 50% 50%, rgba(255, 255, 255, 0.00) 74.66%, rgba(255, 255, 255, 0.18) 100%), radial-gradient(75% 75% at 50% 0%, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.08) 99%, rgba(255, 255, 255, 0.00) 100%)\",\n }}\n >\n {/* Reflection */}\n <svg viewBox=\"0 0 7.2 2.85\" fill=\"none\" className=\"mt-[10%] h-[20%] w-[60%]\">\n <path\n d=\"M7.2 1.83107C7.2 2.84235 5.58823 2.19729 3.6 2.19729C1.61177 2.19729 0 2.84235 0 1.83107C0 0.8198 1.61177 0 3.6 0C5.58823 0 7.2 0.8198 7.2 1.83107Z\"\n fill=\"url(#reflection-gradient)\"\n fillOpacity=\"0.4\"\n />\n <defs>\n <linearGradient id=\"reflection-gradient\" x1=\"3.6\" y1=\"0\" x2=\"3.6\" y2=\"2.4\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"white\" />\n <stop offset=\"1\" stopColor=\"white\" stopOpacity=\"0.1\" />\n </linearGradient>\n </defs>\n </svg>\n </span>\n);\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\nconst sizes = {\n xs: \"size-2.5\",\n sm: \"size-3\",\n md: \"size-3.5\",\n lg: \"size-4\",\n xl: \"size-4.5\",\n \"2xl\": \"size-5\",\n \"3xl\": \"size-6\",\n \"4xl\": \"size-8\",\n};\n\ninterface VerifiedTickProps {\n size: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\n className?: string;\n}\n\nexport const VerifiedTick = ({ size, className }: VerifiedTickProps) => (\n <svg className={cx(\"z-10 text-utility-blue-500\", sizes[size], className)} viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M7.72237 1.77098C7.81734 2.00068 7.99965 2.18326 8.2292 2.27858L9.03413 2.61199C9.26384 2.70714 9.44635 2.88965 9.5415 3.11936C9.63665 3.34908 9.63665 3.60718 9.5415 3.83689L9.20833 4.64125C9.11313 4.87106 9.113 5.12943 9.20863 5.35913L9.54122 6.16325C9.58839 6.27702 9.61268 6.39897 9.6127 6.52214C9.61272 6.6453 9.58847 6.76726 9.54134 6.88105C9.4942 6.99484 9.42511 7.09823 9.33801 7.18531C9.2509 7.27238 9.14749 7.34144 9.03369 7.38854L8.22934 7.72171C7.99964 7.81669 7.81706 7.99899 7.72174 8.22855L7.38833 9.03348C7.29318 9.26319 7.11067 9.4457 6.88096 9.54085C6.65124 9.636 6.39314 9.636 6.16343 9.54085L5.35907 9.20767C5.12935 9.11276 4.87134 9.11295 4.64177 9.20821L3.83684 9.54115C3.60725 9.63608 3.34937 9.636 3.11984 9.54092C2.89032 9.44585 2.70791 9.26356 2.6127 9.03409L2.27918 8.22892C2.18421 7.99923 2.0019 7.81665 1.77235 7.72133L0.967421 7.38792C0.737807 7.29281 0.555355 7.11041 0.460169 6.88083C0.364983 6.65125 0.364854 6.39327 0.45981 6.16359L0.792984 5.35924C0.8879 5.12952 0.887707 4.87151 0.792445 4.64193L0.459749 3.83642C0.41258 3.72265 0.388291 3.60069 0.388272 3.47753C0.388252 3.35436 0.412501 3.2324 0.459634 3.11861C0.506767 3.00482 0.57586 2.90144 0.662965 2.81436C0.75007 2.72728 0.853479 2.65822 0.967283 2.61113L1.77164 2.27795C2.00113 2.18306 2.1836 2.00099 2.27899 1.7717L2.6124 0.966768C2.70755 0.737054 2.89006 0.554547 3.11978 0.459397C3.34949 0.364246 3.60759 0.364246 3.83731 0.459397L4.64166 0.792571C4.87138 0.887487 5.12939 0.887293 5.35897 0.792031L6.16424 0.459913C6.39392 0.364816 6.65197 0.364836 6.88164 0.459968C7.11131 0.555099 7.29379 0.737554 7.38895 0.967208L7.72247 1.77238L7.72237 1.77098Z\"\n className=\"fill-current\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.95829 3.68932C7.02509 3.58439 7.04747 3.45723 7.02051 3.3358C6.99356 3.21437 6.91946 3.10862 6.81454 3.04182C6.70961 2.97502 6.58245 2.95264 6.46102 2.97959C6.33959 3.00655 6.23384 3.08064 6.16704 3.18557L4.33141 6.06995L3.49141 5.01995C3.41375 4.92281 3.30069 4.8605 3.17709 4.84673C3.05349 4.83296 2.92949 4.86885 2.83235 4.94651C2.73522 5.02417 2.67291 5.13723 2.65914 5.26083C2.64536 5.38443 2.68125 5.50843 2.75891 5.60557L4.00891 7.16807C4.0555 7.22638 4.11533 7.27271 4.18344 7.30323C4.25154 7.33375 4.32595 7.34757 4.40047 7.34353C4.47499 7.3395 4.54747 7.31773 4.61188 7.28004C4.67629 7.24234 4.73077 7.18981 4.77079 7.12682L6.95829 3.68932Z\"\n fill=\"white\"\n />\n </svg>\n);\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\ninterface AvatarCountProps {\n count: number;\n className?: string;\n}\n\nexport const AvatarCount = ({ count, className }: AvatarCountProps) => (\n <div className={cx(\"absolute right-0 bottom-0 p-px\", className)}>\n <div className=\"flex size-3.5 items-center justify-center rounded-full bg-fg-error-primary text-center text-[10px] leading-[13px] font-bold text-white\">\n {count}\n </div>\n </div>\n);\n","\"use client\";\n\n/** Figma: Avatar (18:1350) */\n\nimport { type FC, type ReactNode, useState } from \"react\";\nimport { UserIcon as User01 } from \"@phosphor-icons/react/dist/csr/User\";\nimport { cx } from \"@/utils/cx\";\nimport { AvatarOnlineIndicator, VerifiedTick } from \"./base-components\";\nimport { AvatarCount } from \"./base-components/avatar-count\";\n\nexport interface AvatarProps {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n className?: string;\n /**\n * The class name for the main child of the avatar.\n */\n contentClassName?: string;\n src?: string | null;\n alt?: string;\n /**\n * Display an inner contrast border around the avatar image.\n */\n contrastBorder?: boolean;\n /**\n * Whether the avatar should be rounded.\n * @default true\n */\n rounded?: boolean;\n /**\n * Display an outer border around the avatar.\n */\n border?: boolean;\n /**\n * Display a badge (i.e. company logo).\n */\n badge?: ReactNode;\n /**\n * Display a status indicator.\n */\n status?: \"online\" | \"offline\";\n /**\n * Display a verified tick icon.\n *\n * @default false\n */\n verified?: boolean;\n /**\n * Display a count badge.\n */\n count?: number;\n /**\n * The initials of the user to display if no image is available.\n */\n initials?: string;\n /**\n * An icon to display if no image is available.\n */\n placeholderIcon?: FC<{ className?: string }>;\n /**\n * A placeholder to display if no image is available.\n */\n placeholder?: ReactNode;\n\n /**\n * Whether the avatar should show a focus ring when the parent group is in focus.\n * For example, when the avatar is wrapped inside a link.\n *\n * @default false\n */\n focusable?: boolean;\n}\n\nconst styles = {\n xs: { root: \"size-6\", rootWithBorder: \"p-px\", initials: \"text-xs font-semibold\", icon: \"size-4\" },\n sm: { root: \"size-8\", rootWithBorder: \"p-px\", initials: \"text-sm font-semibold\", icon: \"size-5\" },\n md: { root: \"size-10\", rootWithBorder: \"p-px\", initials: \"text-md font-semibold\", icon: \"size-6\" },\n lg: { root: \"size-12\", rootWithBorder: \"p-[1.5px]\", initials: \"text-lg font-semibold\", icon: \"size-7\" },\n xl: { root: \"size-14\", rootWithBorder: \"p-0.5\", initials: \"text-xl font-semibold\", icon: \"size-8\" },\n \"2xl\": { root: \"size-16\", rootWithBorder: \"p-0.5\", initials: \"text-display-xs font-semibold\", icon: \"size-8\" },\n};\n\nexport const Avatar = ({\n size = \"md\",\n src,\n alt,\n initials,\n placeholder,\n placeholderIcon: PlaceholderIcon,\n border,\n badge,\n status,\n verified,\n count,\n focusable = false,\n rounded = true,\n className,\n contentClassName,\n}: AvatarProps) => {\n const [isFailed, setIsFailed] = useState(false);\n\n const canShowImage = src && !isFailed;\n\n const renderMainContent = () => {\n if (canShowImage) {\n return <img data-avatar-img className=\"size-full object-cover\" src={src} alt={alt} onError={() => setIsFailed(true)} />;\n }\n\n if (initials) {\n return <span className={cx(\"text-quaternary\", styles[size].initials)}>{initials}</span>;\n }\n\n if (PlaceholderIcon) {\n return <PlaceholderIcon className={cx(\"text-fg-quaternary\", styles[size].icon)} />;\n }\n\n return placeholder || <User01 className={cx(\"text-fg-quaternary\", styles[size].icon)} />;\n };\n\n const renderBadgeContent = () => {\n if (status) {\n return <AvatarOnlineIndicator status={status} size={size} />;\n }\n\n if (verified) {\n return <VerifiedTick size={size} className={cx(\"absolute right-0 bottom-0\", size === \"xs\" && \"-right-px -bottom-px\")} />;\n }\n\n if (count) {\n return <AvatarCount count={count} />;\n }\n\n return badge;\n };\n\n return (\n <div\n data-avatar\n className={cx(\n \"relative inline-flex shrink-0 rounded-[7px]\",\n rounded && \"rounded-full\",\n // Focus styles\n focusable &&\n \"outline-none group-focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\",\n border && \"ring-1 ring-secondary_alt\",\n border && styles[size].rootWithBorder,\n styles[size].root,\n className,\n )}\n >\n <div\n className={cx(\n \"relative inline-flex size-full shrink-0 items-center justify-center overflow-hidden rounded-md bg-tertiary outline-[0.5px] -outline-offset-[0.5px] outline-black/16 before:inset-[0.5px]\",\n rounded && \"rounded-full\",\n canShowImage &&\n size !== \"xs\" &&\n \"before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-white/32 before:mask-[linear-gradient(to_bottom,black_0%,transparent_25%,transparent_75%,black_100%)]\",\n contentClassName,\n )}\n >\n {renderMainContent()}\n </div>\n {renderBadgeContent()}\n </div>\n );\n};\n","\"use client\";\n\nimport { useLayoutEffect, useRef, type ReactNode, type Ref } from \"react\";\nimport { Checkbox as AriaCheckbox, type CheckboxProps as AriaCheckboxProps } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\nconst CHECKBOX_TICK_DELAY_MS = 60;\nconst CHECKBOX_TICK_DRAW_MS = 100;\n\n/** Draw-on-check tick animation — remounts when checked so it replays each time. */\nfunction CheckboxAnimatedCheckMark({ className }: { className?: string }) {\n const pathRef = useRef<SVGPathElement>(null);\n\n useLayoutEffect(() => {\n const path = pathRef.current;\n if (!path || typeof path.getTotalLength !== \"function\") return;\n const len = path.getTotalLength();\n if (len <= 0) return;\n\n path.style.strokeDasharray = `${len}`;\n path.style.strokeDashoffset = `${len}`;\n\n if (typeof path.animate !== \"function\") {\n path.style.strokeDashoffset = \"0\";\n return;\n }\n\n const anim = path.animate([{ strokeDashoffset: len }, { strokeDashoffset: 0 }], {\n duration: CHECKBOX_TICK_DRAW_MS,\n delay: CHECKBOX_TICK_DELAY_MS,\n easing: \"cubic-bezier(0.45, 0, 0.2, 1)\",\n fill: \"forwards\",\n });\n return () => anim.cancel();\n }, []);\n\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 14 14\" fill=\"none\" className={cx(\"block shrink-0\", className)}>\n <path\n ref={pathRef}\n d=\"M2.33325 7L5.24992 9.91667L11.6666 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n/** Figma Focus rings/focus-ring — 2px surface gap + 4px brand ring (matches Button). */\nconst focusRingShadow =\n \"outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nexport interface CheckboxBaseProps {\n size?: \"sm\" | \"md\";\n className?: string;\n isFocusVisible?: boolean;\n isSelected?: boolean;\n isDisabled?: boolean;\n isIndeterminate?: boolean;\n}\n\nexport const CheckboxBase = ({ className, isSelected, isDisabled, isIndeterminate, size = \"sm\", isFocusVisible = false }: CheckboxBaseProps) => {\n const isChecked = isSelected || isIndeterminate;\n const iconClassName = size === \"sm\" ? \"size-2.5\" : \"size-3.5\";\n\n return (\n <div\n className={cx(\n \"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center border border-solid border-primary\",\n size === \"sm\" ? \"size-4 rounded-xs\" : \"size-5 rounded-sm\",\n isChecked ? \"border-transparent bg-brand-solid\" : \"bg-primary\",\n isDisabled && \"cursor-not-allowed opacity-50\",\n isDisabled && !isChecked && \"bg-tertiary\",\n isFocusVisible && !isDisabled && focusRingShadow,\n className,\n )}\n >\n {isIndeterminate && (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n className={cx(\"pointer-events-none block shrink-0 text-fg-white\", iconClassName)}\n >\n <path d=\"M2.91675 7H11.0834\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n\n {isSelected && !isIndeterminate && (\n <CheckboxAnimatedCheckMark className={cx(\"pointer-events-none text-fg-white\", iconClassName)} />\n )}\n </div>\n );\n};\nCheckboxBase.displayName = \"CheckboxBase\";\n\ninterface CheckboxProps extends AriaCheckboxProps {\n ref?: Ref<HTMLLabelElement>;\n size?: \"sm\" | \"md\";\n label?: ReactNode;\n hint?: ReactNode;\n}\n\nexport const Checkbox = ({ label, hint, size = \"sm\", className, ...ariaCheckboxProps }: CheckboxProps) => {\n const sizes = {\n sm: {\n root: \"gap-2\",\n textWrapper: \"\",\n label: \"text-sm font-medium\",\n hint: \"text-sm\",\n },\n md: {\n root: \"gap-3\",\n textWrapper: \"gap-0.5 break-words\",\n label: \"text-md font-medium\",\n hint: \"text-md\",\n },\n };\n\n return (\n <AriaCheckbox\n {...ariaCheckboxProps}\n className={(state) =>\n cx(\n \"relative flex items-start\",\n state.isDisabled && \"cursor-not-allowed\",\n sizes[size].root,\n typeof className === \"function\" ? className(state) : className,\n )\n }\n >\n {({ isSelected, isIndeterminate, isDisabled, isFocusVisible }) => (\n <>\n <CheckboxBase\n size={size}\n isSelected={isSelected}\n isIndeterminate={isIndeterminate}\n isDisabled={isDisabled}\n isFocusVisible={isFocusVisible}\n className={label || hint ? \"mt-0.5\" : \"\"}\n />\n {(label || hint) && (\n <div className={cx(\"inline-flex flex-col\", sizes[size].textWrapper)}>\n {label && <p className={cx(\"text-secondary select-none\", sizes[size].label)}>{label}</p>}\n {hint && (\n <span className={cx(\"text-tertiary\", sizes[size].hint)} onClick={(event) => event.stopPropagation()}>\n {hint}\n </span>\n )}\n </div>\n )}\n </>\n )}\n </AriaCheckbox>\n );\n};\nCheckbox.displayName = \"Checkbox\";\n","\"use client\";\n\nimport { useLayoutEffect, useRef, type ReactNode, type Ref, createContext, useContext } from \"react\";\nimport {\n Radio as AriaRadio,\n RadioGroup as AriaRadioGroup,\n type RadioGroupProps as AriaRadioGroupProps,\n type RadioProps as AriaRadioProps,\n} from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\nconst RADIO_DOT_DELAY_MS = 60;\nconst RADIO_DOT_POP_MS = 100;\n\n/** Pop-in dot animation — remounts when selected so it replays each time (matches Checkbox tick timing). */\nfunction RadioAnimatedDot({ className }: { className?: string }) {\n const dotRef = useRef<HTMLDivElement>(null);\n\n useLayoutEffect(() => {\n const dot = dotRef.current;\n if (!dot) return;\n\n if (typeof dot.animate !== \"function\") {\n dot.style.opacity = \"1\";\n dot.style.transform = \"scale(1)\";\n return;\n }\n\n const anim = dot.animate(\n [\n { opacity: 0, transform: \"scale(0)\" },\n { opacity: 1, transform: \"scale(1)\" },\n ],\n {\n duration: RADIO_DOT_POP_MS,\n delay: RADIO_DOT_DELAY_MS,\n easing: \"cubic-bezier(0.45, 0, 0.2, 1)\",\n fill: \"forwards\",\n },\n );\n return () => anim.cancel();\n }, []);\n\n return <div ref={dotRef} aria-hidden=\"true\" className={cx(\"rounded-full bg-fg-white\", className)} style={{ opacity: 0, transform: \"scale(0)\" }} />;\n}\n\n/** Figma: _Radio button base (1097:63638) — spread focus ring (2px surface gap + 4px focus-ring). */\nconst focusRingShadow =\n \"outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nexport interface RadioGroupContextType {\n size?: \"sm\" | \"md\";\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextType | null>(null);\n\nexport interface RadioButtonBaseProps {\n size?: \"sm\" | \"md\";\n className?: string;\n isFocusVisible?: boolean;\n isSelected?: boolean;\n isDisabled?: boolean;\n}\n\nexport const RadioButtonBase = ({ className, isFocusVisible, isSelected, isDisabled, size = \"sm\" }: RadioButtonBaseProps) => {\n const dotClassName = size === \"sm\" ? \"size-1.5\" : \"size-2\";\n\n return (\n <div\n className={cx(\n \"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip rounded-full border border-solid border-primary bg-primary\",\n size === \"sm\" ? \"size-4\" : \"size-5\",\n isSelected && \"border-transparent bg-brand-solid\",\n isDisabled && \"cursor-not-allowed opacity-50\",\n isDisabled && !isSelected && \"bg-tertiary\",\n isFocusVisible && !isDisabled && focusRingShadow,\n className,\n )}\n >\n {isSelected && <RadioAnimatedDot className={cx(\"pointer-events-none\", dotClassName)} />}\n </div>\n );\n};\nRadioButtonBase.displayName = \"RadioButtonBase\";\n\ninterface RadioButtonProps extends AriaRadioProps {\n size?: \"sm\" | \"md\";\n label?: ReactNode;\n hint?: ReactNode;\n ref?: Ref<HTMLLabelElement>;\n}\n\nexport const RadioButton = ({ label, hint, className, size = \"sm\", ...ariaRadioProps }: RadioButtonProps) => {\n const context = useContext(RadioGroupContext);\n\n size = context?.size ?? size;\n\n const sizes = {\n sm: {\n root: \"gap-2\",\n textWrapper: \"\",\n label: \"text-sm font-medium\",\n hint: \"text-sm\",\n },\n md: {\n root: \"gap-3\",\n textWrapper: \"gap-0.5\",\n label: \"text-md font-medium\",\n hint: \"text-md\",\n },\n };\n\n return (\n <AriaRadio\n {...ariaRadioProps}\n className={(state) =>\n cx(\n \"relative flex items-start\",\n state.isDisabled && \"cursor-not-allowed\",\n sizes[size].root,\n typeof className === \"function\" ? className(state) : className,\n )\n }\n >\n {({ isSelected, isDisabled, isFocusVisible }) => (\n <>\n <RadioButtonBase\n size={size}\n isSelected={isSelected}\n isDisabled={isDisabled}\n isFocusVisible={isFocusVisible}\n className={label || hint ? \"mt-0.5\" : \"\"}\n />\n {(label || hint) && (\n <div className={cx(\"inline-flex flex-col\", sizes[size].textWrapper)}>\n {label && <p className={cx(\"text-secondary select-none\", sizes[size].label)}>{label}</p>}\n {hint && (\n <span className={cx(\"text-tertiary\", sizes[size].hint)} onClick={(event) => event.stopPropagation()}>\n {hint}\n </span>\n )}\n </div>\n )}\n </>\n )}\n </AriaRadio>\n );\n};\nRadioButton.displayName = \"RadioButton\";\n\ninterface RadioGroupProps extends RadioGroupContextType, AriaRadioGroupProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const RadioGroup = ({ children, className, size = \"sm\", ...props }: RadioGroupProps) => {\n return (\n <RadioGroupContext.Provider value={{ size }}>\n <AriaRadioGroup {...props} className={cx(\"flex flex-col gap-4\", className)}>\n {children}\n </AriaRadioGroup>\n </RadioGroupContext.Provider>\n );\n};\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { SwitchProps as AriaSwitchProps } from \"react-aria-components\";\nimport { Switch as AriaSwitch } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\n/** Figma: Toggle (1102:4631) — spread focus ring (2px surface gap + 4px focus-ring). */\nconst focusRingShadow =\n \"outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\ninterface ToggleBaseProps {\n size?: \"sm\" | \"md\";\n slim?: boolean;\n className?: string;\n isHovered?: boolean;\n isFocusVisible?: boolean;\n isSelected?: boolean;\n isDisabled?: boolean;\n}\n\nexport const ToggleBase = ({ className, isHovered, isDisabled, isFocusVisible, isSelected, slim, size = \"sm\" }: ToggleBaseProps) => {\n const styles = {\n default: {\n sm: {\n track: \"h-5 w-9 p-0.5\",\n thumb: \"size-4\",\n thumbPosition: isSelected ? \"left-[calc(100%-1rem-0.125rem)]\" : \"left-0.5\",\n },\n md: {\n track: \"h-6 w-11 p-0.5\",\n thumb: \"size-5\",\n thumbPosition: isSelected ? \"left-[calc(100%-1.25rem-0.125rem)]\" : \"left-0.5\",\n },\n },\n slim: {\n sm: {\n track: \"h-4 w-8\",\n thumb: \"size-4\",\n thumbPosition: isSelected ? \"left-4\" : \"left-0\",\n },\n md: {\n track: \"h-5 w-10\",\n thumb: \"size-5\",\n thumbPosition: isSelected ? \"left-5\" : \"left-0\",\n },\n },\n };\n\n const classes = slim ? styles.slim[size] : styles.default[size];\n\n const offTrackBackground = (() => {\n if (isDisabled) return \"bg-tertiary\";\n if (isHovered) return slim ? \"bg-tertiary\" : \"bg-brand-primary\";\n return \"bg-quaternary\";\n })();\n\n return (\n <div\n className={cx(\n \"relative inline-flex shrink-0 cursor-pointer overflow-clip rounded-full outline-none transition duration-150 ease-linear\",\n !isSelected && offTrackBackground,\n !slim && \"ring-[0.5px] ring-secondary ring-inset\",\n slim && \"ring-1 ring-secondary ring-inset\",\n isSelected && \"bg-brand-solid\",\n isSelected && isHovered && \"bg-brand-solid_hover\",\n isSelected && \"ring-transparent\",\n isDisabled && \"cursor-not-allowed opacity-50\",\n isFocusVisible && !isDisabled && focusRingShadow,\n classes.track,\n className,\n )}\n >\n <div\n className={cx(\n \"absolute rounded-full bg-fg-white shadow-sm transition-[left] duration-150 ease-in-out\",\n slim ? \"top-0 shadow-xs\" : \"top-0.5\",\n slim && \"border border-toggle-border\",\n slim && isSelected && \"border-toggle-slim-border_pressed\",\n slim && isSelected && isHovered && \"border-toggle-slim-border_pressed-hover\",\n classes.thumb,\n classes.thumbPosition,\n )}\n />\n </div>\n );\n};\n\nconst styles = {\n sm: {\n root: \"gap-2\",\n textWrapper: \"\",\n label: \"text-sm font-medium\",\n hint: \"text-sm\",\n },\n md: {\n root: \"gap-3\",\n textWrapper: \"gap-0.5\",\n label: \"text-md font-medium\",\n hint: \"text-md\",\n },\n};\n\ninterface ToggleProps extends AriaSwitchProps {\n size?: \"sm\" | \"md\";\n label?: string;\n hint?: ReactNode;\n slim?: boolean;\n}\n\nexport const Toggle = ({ label, hint, className, size = \"sm\", slim, ...ariaSwitchProps }: ToggleProps) => {\n return (\n <AriaSwitch\n {...ariaSwitchProps}\n className={(state) =>\n cx(\n \"relative flex w-max items-start\",\n state.isDisabled && \"cursor-not-allowed\",\n styles[size].root,\n typeof className === \"function\" ? className(state) : className,\n )\n }\n >\n {({ isSelected, isDisabled, isFocusVisible, isHovered }) => (\n <>\n <ToggleBase\n slim={slim}\n size={size}\n isHovered={isHovered}\n isDisabled={isDisabled}\n isFocusVisible={isFocusVisible}\n isSelected={isSelected}\n className={label || hint ? \"mt-0.5\" : \"\"}\n />\n\n {(label || hint) && (\n <div className={cx(\"flex flex-col\", styles[size].textWrapper)}>\n {label && <p className={cx(\"text-secondary select-none\", styles[size].label)}>{label}</p>}\n {hint && (\n <span className={cx(\"text-tertiary\", styles[size].hint)} onClick={(event) => event.stopPropagation()}>\n {hint}\n </span>\n )}\n </div>\n )}\n </>\n )}\n </AriaSwitch>\n );\n};\n","\"use client\";\n\n/** Figma: Dropdown (18:0) */\n\nimport { type FC, type RefAttributes, useCallback } from \"react\";\nimport { CheckIcon as Check } from \"@phosphor-icons/react/dist/csr/Check\";\nimport { CaretRightIcon as ChevronRight } from \"@phosphor-icons/react/dist/csr/CaretRight\";\nimport { DotsThreeVerticalIcon as DotsVertical } from \"@phosphor-icons/react/dist/csr/DotsThreeVertical\";\nimport type {\n ButtonProps as AriaButtonProps,\n MenuItemProps as AriaMenuItemProps,\n MenuProps as AriaMenuProps,\n PopoverProps as AriaPopoverProps,\n SeparatorProps as AriaSeparatorProps,\n MenuItemRenderProps,\n} from \"react-aria-components\";\nimport {\n Button as AriaButton,\n Header as AriaHeader,\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n MenuSection as AriaMenuSection,\n MenuTrigger as AriaMenuTrigger,\n Popover as AriaPopover,\n Separator as AriaSeparator,\n} from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\nimport { Avatar } from \"../avatar/avatar\";\nimport { CheckboxBase } from \"../checkbox/checkbox\";\nimport { RadioButtonBase } from \"../radio-buttons/radio-buttons\";\nimport { ToggleBase } from \"../toggle/toggle\";\n\nconst focusShadowPlain =\n \"focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nconst focusShadowInset =\n \"[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\ninterface DropdownItemProps extends AriaMenuItemProps {\n /** The label of the item to be displayed. */\n label?: string;\n /** An addon to be displayed on the right side of the item. */\n addon?: string;\n /** If true, the item will not have any styles. */\n unstyled?: boolean;\n /** An icon to be displayed on the left side of the item. */\n icon?: FC<{ className?: string }>;\n /** Avatar URL to be displayed on the left side of the item. */\n avatarUrl?: string;\n /** The selection indicator to be displayed on the item. */\n selectionIndicator?: \"checkmark\" | \"checkbox\" | \"radio\" | \"toggle\" | \"none\";\n}\n\nconst DropdownItem = ({ label, children, addon, icon: Icon, avatarUrl, unstyled, selectionIndicator = \"checkmark\", ...props }: DropdownItemProps) => {\n const SelectionIndicator = useCallback(\n (state: MenuItemRenderProps & { className?: string }) => {\n if (selectionIndicator === \"checkmark\") {\n return (\n <Check\n aria-hidden=\"true\"\n className={cx(\"size-4 shrink-0 stroke-[2.25px] text-fg-brand-primary\", !state.isSelected && \"invisible\", state.className)}\n />\n );\n }\n if (selectionIndicator === \"checkbox\") {\n return (\n <CheckboxBase\n isSelected={state.isSelected && !state.hasSubmenu}\n isIndeterminate={state.isSelected && state.hasSubmenu}\n size=\"sm\"\n className={cx(\"shrink-0\", state.className)}\n />\n );\n }\n if (selectionIndicator === \"radio\") {\n return <RadioButtonBase isSelected={state.isSelected} className={cx(\"shrink-0\", state.className)} />;\n }\n if (selectionIndicator === \"toggle\") {\n return <ToggleBase slim size=\"sm\" isSelected={state.isSelected} className={cx(\"shrink-0\", state.className)} />;\n }\n return null;\n },\n [selectionIndicator],\n );\n\n if (unstyled) {\n return <AriaMenuItem id={label} textValue={label} {...props} />;\n }\n\n return (\n <AriaMenuItem\n {...props}\n className={(state) =>\n cx(\n \"group block cursor-pointer px-1.5 py-px outline-hidden\",\n state.isDisabled && \"cursor-not-allowed opacity-50\",\n typeof props.className === \"function\" ? props.className(state) : props.className,\n )\n }\n >\n {(state) => (\n <div\n className={cx(\n \"relative flex items-center rounded-md px-2.5 py-2 transition duration-100 ease-linear\",\n !state.isDisabled && \"group-hover:bg-primary_hover\",\n state.isFocused && \"bg-primary_hover\",\n state.isFocusVisible && focusShadowInset,\n state.hasSubmenu && \"pr-1.5\",\n )}\n >\n {state.selectionMode !== \"none\" && !avatarUrl && !Icon && <SelectionIndicator {...state} className=\"mr-2\" />}\n\n {avatarUrl && (\n <div className=\"mr-2 flex size-4 items-center justify-center\">\n <Avatar aria-hidden=\"true\" size=\"xs\" src={avatarUrl} alt={label} className=\"size-5\" />\n </div>\n )}\n\n {Icon && <Icon aria-hidden=\"true\" className=\"mr-2 size-4 shrink-0 stroke-[2.25px] text-fg-quaternary\" />}\n\n <span className={cx(\"grow truncate text-sm font-semibold text-secondary\", state.isFocused && \"text-secondary_hover\")}>\n {label || (typeof children === \"function\" ? children(state) : children)}\n </span>\n\n {addon && <span className=\"ml-1 shrink-0 pr-1 text-xs font-medium text-quaternary\">{addon}</span>}\n\n {state.selectionMode !== \"none\" && (avatarUrl || Icon) && <SelectionIndicator {...state} className=\"ml-1\" />}\n\n {state.hasSubmenu && <ChevronRight aria-hidden=\"true\" className=\"ml-auto size-4 shrink-0 stroke-[2.25px] text-fg-quaternary\" />}\n </div>\n )}\n </AriaMenuItem>\n );\n};\n\ninterface DropdownMenuProps<T extends object> extends AriaMenuProps<T> {}\n\nconst DropdownMenu = <T extends object>(props: DropdownMenuProps<T>) => {\n return (\n <AriaMenu\n {...props}\n className={(state) =>\n cx(\"h-min overflow-y-auto py-1 outline-hidden select-none\", typeof props.className === \"function\" ? props.className(state) : props.className)\n }\n />\n );\n};\n\ninterface DropdownPopoverProps extends AriaPopoverProps {}\n\nconst DropdownPopover = (props: DropdownPopoverProps) => {\n return (\n <AriaPopover\n placement=\"bottom right\"\n {...props}\n className={(state) =>\n cx(\n \"w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform\",\n state.isEntering &&\n \"duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5\",\n state.isExiting &&\n \"duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5\",\n typeof props.className === \"function\" ? props.className(state) : props.className,\n )\n }\n >\n {props.children}\n </AriaPopover>\n );\n};\n\nconst DropdownSeparator = (props: AriaSeparatorProps) => {\n return <AriaSeparator {...props} className={cx(\"my-1 h-px w-full bg-border-secondary\", props.className)} />;\n};\n\nconst DropdownDotsButton = (props: AriaButtonProps & RefAttributes<HTMLButtonElement>) => {\n return (\n <AriaButton\n {...props}\n aria-label=\"Open menu\"\n className={(state) =>\n cx(\n \"cursor-pointer rounded-md text-fg-quaternary transition duration-100 ease-linear\",\n (state.isPressed || state.isHovered) && \"text-fg-quaternary_hover\",\n focusShadowPlain,\n typeof props.className === \"function\" ? props.className(state) : props.className,\n )\n }\n >\n <DotsVertical className=\"size-5 transition-inherit-all\" />\n </AriaButton>\n );\n};\n\nexport const Dropdown = {\n Root: AriaMenuTrigger,\n Popover: DropdownPopover,\n Menu: DropdownMenu,\n Section: AriaMenuSection,\n SectionHeader: AriaHeader,\n Item: DropdownItem,\n Separator: DropdownSeparator,\n DotsButton: DropdownDotsButton,\n};\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import react__default, { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
interface FileTriggerProps {
|
|
4
|
+
/**
|
|
5
|
+
* Specifies what mime type of files are allowed.
|
|
6
|
+
*/
|
|
7
|
+
acceptedFileTypes?: Array<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Whether multiple files can be selected.
|
|
10
|
+
*/
|
|
11
|
+
allowsMultiple?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Specifies the use of a media capture mechanism to capture the media on the spot.
|
|
14
|
+
*/
|
|
15
|
+
defaultCamera?: "user" | "environment";
|
|
16
|
+
/**
|
|
17
|
+
* Handler when a user selects a file.
|
|
18
|
+
*/
|
|
19
|
+
onSelect?: (files: FileList | null) => void;
|
|
20
|
+
/**
|
|
21
|
+
* The children of the component.
|
|
22
|
+
*/
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
/**
|
|
25
|
+
* Enables the selection of directories instead of individual files.
|
|
26
|
+
*/
|
|
27
|
+
acceptDirectory?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A FileTrigger allows a user to access the file system with any pressable React Aria or React Spectrum component, or custom components built with usePress.
|
|
31
|
+
*/
|
|
32
|
+
declare const FileTrigger: (props: FileTriggerProps) => react__default.JSX.Element;
|
|
33
|
+
|
|
34
|
+
export { FileTrigger };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React, { useRef, cloneElement } from 'react';
|
|
2
|
+
import { filterDOMProps } from '@react-aria/utils';
|
|
3
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var FileTrigger = (props) => {
|
|
6
|
+
const { children, onSelect, acceptedFileTypes, allowsMultiple, defaultCamera, acceptDirectory, ...rest } = props;
|
|
7
|
+
const inputRef = useRef(null);
|
|
8
|
+
const domProps = filterDOMProps(rest);
|
|
9
|
+
const clonableElement = React.Children.only(children);
|
|
10
|
+
const mainElement = cloneElement(clonableElement, {
|
|
11
|
+
onClick: () => {
|
|
12
|
+
if (inputRef.current?.value) {
|
|
13
|
+
inputRef.current.value = "";
|
|
14
|
+
}
|
|
15
|
+
inputRef.current?.click();
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19
|
+
mainElement,
|
|
20
|
+
/* @__PURE__ */ jsx(
|
|
21
|
+
"input",
|
|
22
|
+
{
|
|
23
|
+
...domProps,
|
|
24
|
+
type: "file",
|
|
25
|
+
ref: inputRef,
|
|
26
|
+
style: { display: "none" },
|
|
27
|
+
accept: acceptedFileTypes?.toString(),
|
|
28
|
+
onChange: (e) => onSelect?.(e.target.files),
|
|
29
|
+
capture: defaultCamera,
|
|
30
|
+
multiple: allowsMultiple,
|
|
31
|
+
webkitdirectory: acceptDirectory ? "" : void 0
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
] });
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { FileTrigger };
|
|
38
|
+
//# sourceMappingURL=file-upload-trigger.js.map
|
|
39
|
+
//# sourceMappingURL=file-upload-trigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../components/base/file-upload-trigger/file-upload-trigger.tsx"],"names":[],"mappings":";;;;AAoCO,IAAM,WAAA,GAAc,CAAC,KAAA,KAA4B;AACpD,EAAA,MAAM,EAAE,UAAU,QAAA,EAAU,iBAAA,EAAmB,gBAAgB,aAAA,EAAe,eAAA,EAAiB,GAAG,IAAA,EAAK,GAAI,KAAA;AAE3G,EAAA,MAAM,QAAA,GAAW,OAAgC,IAAI,CAAA;AACrD,EAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AAGpC,EAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA;AAGpD,EAAA,MAAM,WAAA,GAAc,aAAa,eAAA,EAAuF;AAAA,IACpH,SAAS,MAAM;AACX,MAAA,IAAI,QAAA,CAAS,SAAS,KAAA,EAAO;AACzB,QAAA,QAAA,CAAS,QAAQ,KAAA,GAAQ,EAAA;AAAA,MAC7B;AACA,MAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,IAC5B;AAAA,GACH,CAAA;AAED,EAAA,uBACI,IAAA,CAAA,QAAA,EAAA,EACK,QAAA,EAAA;AAAA,IAAA,WAAA;AAAA,oBACD,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACI,GAAG,QAAA;AAAA,QACJ,IAAA,EAAK,MAAA;AAAA,QACL,GAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAO;AAAA,QACzB,MAAA,EAAQ,mBAAmB,QAAA,EAAS;AAAA,QACpC,UAAU,CAAC,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QAC1C,OAAA,EAAS,aAAA;AAAA,QACT,QAAA,EAAU,cAAA;AAAA,QAEV,eAAA,EAAiB,kBAAkB,EAAA,GAAK;AAAA;AAAA;AAC5C,GAAA,EACJ,CAAA;AAER","file":"file-upload-trigger.js","sourcesContent":["\"use client\";\n\nimport type { DetailedReactHTMLElement, HTMLAttributes, ReactNode } from \"react\";\nimport React, { cloneElement, useRef } from \"react\";\nimport { filterDOMProps } from \"@react-aria/utils\";\n\ninterface FileTriggerProps {\n /**\n * Specifies what mime type of files are allowed.\n */\n acceptedFileTypes?: Array<string>;\n /**\n * Whether multiple files can be selected.\n */\n allowsMultiple?: boolean;\n /**\n * Specifies the use of a media capture mechanism to capture the media on the spot.\n */\n defaultCamera?: \"user\" | \"environment\";\n /**\n * Handler when a user selects a file.\n */\n onSelect?: (files: FileList | null) => void;\n /**\n * The children of the component.\n */\n children: ReactNode;\n /**\n * Enables the selection of directories instead of individual files.\n */\n acceptDirectory?: boolean;\n}\n\n/**\n * A FileTrigger allows a user to access the file system with any pressable React Aria or React Spectrum component, or custom components built with usePress.\n */\nexport const FileTrigger = (props: FileTriggerProps) => {\n const { children, onSelect, acceptedFileTypes, allowsMultiple, defaultCamera, acceptDirectory, ...rest } = props;\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const domProps = filterDOMProps(rest);\n\n // Make sure that only one child is passed to the component.\n const clonableElement = React.Children.only(children);\n\n // Clone the child element and add an `onClick` handler to open the file dialog.\n const mainElement = cloneElement(clonableElement as DetailedReactHTMLElement<HTMLAttributes<HTMLElement>, HTMLElement>, {\n onClick: () => {\n if (inputRef.current?.value) {\n inputRef.current.value = \"\";\n }\n inputRef.current?.click();\n },\n });\n\n return (\n <>\n {mainElement}\n <input\n {...domProps}\n type=\"file\"\n ref={inputRef}\n style={{ display: \"none\" }}\n accept={acceptedFileTypes?.toString()}\n onChange={(e) => onSelect?.(e.target.files)}\n capture={defaultCamera}\n multiple={allowsMultiple}\n // @ts-expect-error\n webkitdirectory={acceptDirectory ? \"\" : undefined}\n />\n </>\n );\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ComponentPropsWithRef } from 'react';
|
|
3
|
+
import { Form as Form$1 } from 'react-aria-components';
|
|
4
|
+
|
|
5
|
+
declare const Form: {
|
|
6
|
+
(props: ComponentPropsWithRef<typeof Form$1>): react.JSX.Element;
|
|
7
|
+
displayName: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { Form };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Form as Form$1 } from 'react-aria-components';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
var Form = (props) => {
|
|
5
|
+
return /* @__PURE__ */ jsx(Form$1, { ...props });
|
|
6
|
+
};
|
|
7
|
+
Form.displayName = "Form";
|
|
8
|
+
|
|
9
|
+
export { Form };
|
|
10
|
+
//# sourceMappingURL=form.js.map
|
|
11
|
+
//# sourceMappingURL=form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../components/base/form/form.tsx"],"names":["AriaForm"],"mappings":";;;AAKO,IAAM,IAAA,GAAO,CAAC,KAAA,KAAkD;AACnE,EAAA,uBAAO,GAAA,CAACA,MAAA,EAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAChC;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA","file":"form.js","sourcesContent":["\"use client\";\n\nimport type { ComponentPropsWithRef } from \"react\";\nimport { Form as AriaForm } from \"react-aria-components\";\n\nexport const Form = (props: ComponentPropsWithRef<typeof AriaForm>) => {\n return <AriaForm {...props} />;\n};\n\nForm.displayName = \"Form\";\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { Ref, ReactNode } from 'react';
|
|
3
|
+
import { TextProps } from 'react-aria-components';
|
|
4
|
+
|
|
5
|
+
interface HintTextProps extends TextProps {
|
|
6
|
+
/** Indicates that the hint text is an error message. */
|
|
7
|
+
isInvalid?: boolean;
|
|
8
|
+
ref?: Ref<HTMLElement>;
|
|
9
|
+
size?: "sm" | "md";
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
declare const HintText: {
|
|
13
|
+
({ isInvalid, className, size, ...props }: HintTextProps): react.JSX.Element;
|
|
14
|
+
displayName: string;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export { HintText };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Text } from 'react-aria-components';
|
|
2
|
+
import { extendTailwindMerge } from 'tailwind-merge';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var twMerge = extendTailwindMerge({
|
|
6
|
+
extend: {
|
|
7
|
+
theme: {
|
|
8
|
+
text: ["display-xs", "display-sm", "display-md", "display-lg", "display-xl", "display-2xl"]
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var cx = twMerge;
|
|
13
|
+
var HintText = ({ isInvalid, className, size = "md", ...props }) => {
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
15
|
+
Text,
|
|
16
|
+
{
|
|
17
|
+
...props,
|
|
18
|
+
slot: isInvalid ? "errorMessage" : "description",
|
|
19
|
+
className: cx(
|
|
20
|
+
"text-sm text-tertiary",
|
|
21
|
+
// Size
|
|
22
|
+
size === "sm" && "text-xs",
|
|
23
|
+
"in-data-[input-size=sm]:text-xs",
|
|
24
|
+
// Invalid state
|
|
25
|
+
isInvalid && "text-error-primary",
|
|
26
|
+
"group-invalid:text-error-primary",
|
|
27
|
+
className
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
};
|
|
32
|
+
HintText.displayName = "HintText";
|
|
33
|
+
|
|
34
|
+
export { HintText };
|
|
35
|
+
//# sourceMappingURL=hint-text.js.map
|
|
36
|
+
//# sourceMappingURL=hint-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../utils/cx.ts","../../../../components/base/input/hint-text.tsx"],"names":["AriaText"],"mappings":";;;;AAEA,IAAM,UAAU,mBAAA,CAAoB;AAAA,EAChC,MAAA,EAAQ;AAAA,IACJ,KAAA,EAAO;AAAA,MACH,MAAM,CAAC,YAAA,EAAc,cAAc,YAAA,EAAc,YAAA,EAAc,cAAc,aAAa;AAAA;AAC9F;AAER,CAAC,CAAA;AAMM,IAAM,EAAA,GAAK,OAAA;ACCX,IAAM,QAAA,GAAW,CAAC,EAAE,SAAA,EAAW,WAAW,IAAA,GAAO,IAAA,EAAM,GAAG,KAAA,EAAM,KAAqB;AACxF,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,KAAA;AAAA,MACJ,IAAA,EAAM,YAAY,cAAA,GAAiB,aAAA;AAAA,MACnC,SAAA,EAAW,EAAA;AAAA,QACP,uBAAA;AAAA;AAAA,QAGA,SAAS,IAAA,IAAQ,SAAA;AAAA,QACjB,iCAAA;AAAA;AAAA,QAGA,SAAA,IAAa,oBAAA;AAAA,QACb,kCAAA;AAAA,QAEA;AAAA;AACJ;AAAA,GACJ;AAER;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"hint-text.js","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport type { ReactNode, Ref } from \"react\";\nimport type { TextProps as AriaTextProps } from \"react-aria-components\";\nimport { Text as AriaText } from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\ninterface HintTextProps extends AriaTextProps {\n /** Indicates that the hint text is an error message. */\n isInvalid?: boolean;\n ref?: Ref<HTMLElement>;\n size?: \"sm\" | \"md\";\n children: ReactNode;\n}\n\nexport const HintText = ({ isInvalid, className, size = \"md\", ...props }: HintTextProps) => {\n return (\n <AriaText\n {...props}\n slot={isInvalid ? \"errorMessage\" : \"description\"}\n className={cx(\n \"text-sm text-tertiary\",\n\n // Size\n size === \"sm\" && \"text-xs\",\n \"in-data-[input-size=sm]:text-xs\",\n\n // Invalid state\n isInvalid && \"text-error-primary\",\n \"group-invalid:text-error-primary\",\n\n className,\n )}\n />\n );\n};\n\nHintText.displayName = \"HintText\";\n"]}
|