@bizapps/design-system-testing 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/Alert/alert.tsx","../src/components/ui/Avatar/avatar.tsx","../src/components/ui/Status/badge.tsx","../src/components/ui/Status/status.tsx","../src/components/ui/Badge/badge.tsx","../src/components/ui/Breadcrumb/breadcrumb.tsx","../src/components/ui/Button/button.tsx","../src/components/ui/Calendar/calendar.tsx","../src/components/ui/MiniCalendar/mini-calendar.tsx","../src/components/ui/Card/card.tsx","../src/components/ui/Carousel/carousel.tsx","../src/components/compounds/Form/form.tsx","../src/components/ui/Input/input.tsx","../src/utils/urlSecurity.ts","../src/components/ui/Link/link.tsx","../src/components/ui/PinInput/pin-input.tsx","../src/components/ui/Toggle/toggle.tsx","../src/components/compounds/SegmentedControl/segmented-control.tsx","../src/components/ui/Select/select.tsx","../src/components/ui/Separator/separator.tsx","../src/components/ui/Progress/progress.tsx","../src/components/ui/Skeleton/skeleton.tsx","../src/components/ui/Slider/slider.tsx","../src/components/ui/Switch/switch.tsx","../src/tokens/animation.ts","../src/components/ui/Tabs/tabs.tsx","../src/components/ui/Toast/toast.tsx","../src/components/ui/ToggleGroup/toggle-group.tsx","../src/components/ui/Tooltip/tooltip.tsx","../src/components/ui/Popover/popover.tsx","../src/components/ui/Text/text.tsx","../src/components/ui/Dialog/dialog.tsx","../src/components/ui/AlertDialog/alert-dialog.tsx","../src/components/ui/Accordion/accordion.tsx","../src/components/ui/Combobox/combobox.tsx","../src/components/ui/DropdownMenu/dropdown-menu.tsx","../src/components/ui/Dropzone/dropzone.tsx","../src/components/ui/Empty/empty.tsx","../src/components/ui/Item/item.tsx","../src/components/ui/Radio/radio-group.tsx","../src/components/ui/Spinner/spinner.tsx","../src/components/compounds/ColorPicker/button.tsx","../src/components/compounds/ColorPicker/input.tsx","../src/components/compounds/ColorPicker/select.tsx","../src/components/compounds/ColorPicker/color-picker.tsx","../src/components/compounds/DatePicker/date-picker.tsx","../src/components/compounds/NavBar/navbar.tsx","../src/components/compounds/NavBar/navigation-menu.tsx","../src/components/ui/Sidebar/sidebar.tsx","../src/components/compounds/SideBar/sidebar.tsx","../src/components/compounds/TextArea/textarea.tsx","../src/components/compounds/EventCalendar/event-calendar-context.ts","../src/components/compounds/EventCalendar/event-calendar.styles.ts","../src/components/compounds/EventCalendar/hooks/use-event-calendar.ts","../src/components/compounds/EventCalendar/event-calendar.tsx","../src/lib/form.ts","../src/lib/cdn.ts","../src/components/ui/Table/table.tsx","../src/components/ui/Checkbox/checkbox.tsx","../src/components/compounds/Pagination/pagination.tsx","../src/lib/use-media-query.ts","../src/components/compounds/Table/data-table-context.ts","../src/components/compounds/Table/data-table-card-view.tsx","../src/components/compounds/Table/utils/filter-utils.ts","../src/components/compounds/Table/data-table-column-filter.tsx","../src/components/compounds/Table/hooks/use-column-filter.ts","../src/components/compounds/Table/data-table-header-cell.tsx","../src/components/compounds/Table/data-table-skeleton.tsx","../src/components/compounds/Table/hooks/use-table-sorting.ts","../src/components/compounds/Table/hooks/use-table-filtering.ts","../src/components/compounds/Table/hooks/use-table-selection.ts","../src/components/compounds/Table/hooks/use-table-global-filter.ts","../src/components/compounds/Table/hooks/use-table-visibility.ts","../src/components/compounds/Table/hooks/use-table-sizing.ts","../src/components/compounds/Table/hooks/use-table-persistence.ts","../src/components/compounds/Table/data-table.tsx","../src/components/compounds/Table/hooks/use-table-data.ts","../src/components/compounds/Table/utils/sorting-transform.ts","../src/components/compounds/Table/utils/filtering-transform.ts","../src/components/compounds/Table/data-table-row-actions.tsx","../src/components/compounds/Table/data-table-footer.tsx","../src/components/compounds/Table/data-table-toolbar.tsx","../src/components/compounds/Table/data-table-search.tsx","../src/components/authorization/Can/ability-context.tsx","../src/components/authorization/Can/can.tsx"],"names":["twMerge","clsx","cva","jsx","jsxs","X","AvatarPrimitive","Slot","Fragment","badgeVariants","Badge","ChevronRightIcon","MoreHorizontalIcon","LoaderCircle","getDefaultClassNames","DayPicker","className","props","ChevronLeftIcon","ChevronDownIcon","useRef","useEffect","useState","useCallback","createContext","useContext","addDays","format","isSameDay","isToday","useEmblaCarousel","api","ArrowLeft","ArrowRight","ExternalLinkIcon","TogglePrimitive","useId","ToggleGroup","motion","SelectPrimitive","CheckIcon","ChevronUpIcon","SeparatorPrimitive","ProgressPrimitive","useMemo","SliderPrimitive","SwitchPrimitive","TabsPrimitive","AnimatePresence","CircleCheckIcon","OctagonXIcon","TriangleAlertIcon","InfoIcon","Loader2Icon","XIcon","ToggleGroupPrimitive","TooltipPrimitive","PopoverPrimitive","DialogPrimitive","AlertDialogPrimitive","AccordionPrimitive","ChevronsUpDownIcon","Command","SearchIcon","DropdownMenuPrimitive","useDropzone","UploadIcon","RadioGroupPrimitive","LoaderIcon","buttonVariants","Button","Input","Select","SelectValue","SelectTrigger","SelectContent","SelectScrollUpButton","SelectScrollDownButton","SelectItem","Color","memo","Slider","hue","alpha","PipetteIcon","CalendarIcon","forwardRef","BellIcon","CircleHelpIcon","NavigationMenuPrimitive","Menu","Children","isValidElement","cloneElement","House","Plane","Wallet","LayoutDashboardIcon","Temporal","useLayoutEffect","eventsService","createEventsServicePlugin","eventModal","createEventModalPlugin","calendarControls","createCalendarControlsPlugin","createCalendar","viewMonthGrid","viewWeek","viewDay","viewMonthAgenda","ScheduleXCalendar","useForm","zodResolver","CheckboxPrimitive","MinusIcon","flexRender","FilterOption","Funnel","ArrowUp","ArrowDown","ArrowUpDown","_","table","useReactTable","getCoreRowModel","getSortedRowModel","getFilteredRowModel","Ellipsis","hasActiveFilters","Rows2","Eye","Search"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AACxC,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC/B;ACAA,IAAM,aAAA,GAAgBC,2BAAI,sDAAA,EAAwD;AAAA,EAC9E,QAAA,EAAU;AAAA,IACN,OAAA,EAAS;AAAA,MACL,OAAA,EAAS,4DAAA;AAAA,MACT,IAAA,EAAM,4DAAA;AAAA,MACN,OAAA,EAAS,wEAAA;AAAA,MACT,OAAA,EAAS,gEAAA;AAAA,MACT,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,OAAA,EAAS;AAAA;AAEjB,CAAC;AAYD,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,OAAA,EAAS,MAAM,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAe;AACpF,EAAA,uBACIC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,OAAA;AAAA,MACV,gBAAc,OAAA,IAAW,SAAA;AAAA,MACzB,IAAA,EAAK,OAAA;AAAA,MACL,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACV,QAAA,EAAA;AAAA,QAAA,IAAA,mCACI,KAAA,EAAA,EAAI,WAAA,EAAU,YAAA,EAAa,SAAA,EAAU,mBACjC,QAAA,EAAA,IAAA,EACL,CAAA;AAAA,uCAEH,KAAA,EAAA,EAAI,WAAA,EAAU,eAAA,EAAgB,SAAA,EAAU,kBACpC,QAAA,EACL,CAAA;AAAA,QACC,SAAA,oBACGD,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACG,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,SAAA;AAAA,YACX,OAAA,EAAS,SAAA;AAAA,YACT,SAAA,EAAU,kKAAA;AAAA,YACV,QAAA,kBAAAA,cAAA,CAACE,aAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA;AAC1B,OAAA,EAER;AAAA;AAAA,GACJ;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AAC1D,EAAA,uBACIF,cAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA;AAAA,MACvE,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACtE,EAAA,uBACIA,cAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA;AAAA,MAC5C,GAAG;AAAA;AAAA,GACR;AAER;ACzEA,IAAM,cAAA,GAAiBD,2BAAI,kEAAA,EAAoE;AAAA,EAC3F,QAAA,EAAU;AAAA,IACN,IAAA,EAAM;AAAA,MACF,EAAA,EAAI,oBAAA;AAAA,MACJ,EAAA,EAAI,gBAAA;AAAA,MACJ,EAAA,EAAI,iBAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACR,GACJ;AAAA,EACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA;AAC7B,CAAC;AAED,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,GAAG;AACP,CAAA,EAAsF;AAClF,EAAA,uBACIC,cAAAA;AAAA,IAACG,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,WAAW,EAAA,CAAG,cAAA,CAAe,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAChD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiD;AACxF,EAAA,uBACIH,cAAAA;AAAA,IAACG,cAAA,CAAgB,KAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA;AAAA,MAC9D,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAoD;AAChD,EAAA,uBACIH,cAAAA;AAAA,IAACG,cAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,kHAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AAClE,EAAA,uBACIH,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,2JAAA;AAAA,QACA,+EAAA;AAAA,QACA,iFAAA;AAAA,QACA,+EAAA;AAAA,QACA,mFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACtE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,sIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AC9FA,IAAM,aAAA,GAAgBD,0BAAAA;AAAA,EAClB,4eAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,4DAAA;AAAA,QACT,SAAA,EAAW,kEAAA;AAAA,QACX,WAAA,EACI,gKAAA;AAAA,QACJ,OAAA,EACI,kFAAA;AAAA,QACJ,KAAA,EAAO,mEAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACV,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS;AAAA;AACb;AAER,CAAA;AAEA,SAAS,KAAA,CAAM;AAAA,EACX,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACP,CAAA,EAAwF;AACpF,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUK,YAAA,CAAK,IAAA,GAAO,MAAA;AAEnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,OAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACR;AAER;ACnCO,IAAM,MAAA,GAAS,CAAC,EAAE,SAAA,EAAW,QAAQ,GAAG,KAAA,uBAC3CA,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,OAAA,EAAS,QAAQ,SAAS,CAAA;AAAA,IACnE,OAAA,EAAQ,SAAA;AAAA,IACP,GAAG;AAAA;AACR;AAKG,IAAM,kBAAkB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBAClDC,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA,EAAI,GAAG,KAAA,EACzD,QAAA,EAAA;AAAA,kBAAAD,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,yEAAA;AAAA,QACA,gCAAA;AAAA,QACA,6BAAA;AAAA,QACA,kCAAA;AAAA,QACA;AAAA;AACJ;AAAA,GACJ;AAAA,kBACAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,2CAAA;AAAA,QACA,gCAAA;AAAA,QACA,6BAAA;AAAA,QACA,kCAAA;AAAA,QACA;AAAA;AACJ;AAAA;AACJ,CAAA,EACJ;AAKG,IAAM,WAAA,GAAc,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,uBAClDA,cAAAA,CAAC,UAAK,SAAA,EAAW,EAAA,CAAG,yBAAyB,SAAS,CAAA,EAAI,GAAG,KAAA,EACxD,QAAA,EAAA,QAAA,oBACGC,eAAAA,CAAAI,mBAAA,EAAA,EACI,QAAA,EAAA;AAAA,kBAAAL,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAA+B,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,kBACrDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,kBACvDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAoC,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,kBAC/DA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAiC,QAAA,EAAA,UAAA,EAAQ;AAAA,CAAA,EAC7D,CAAA,EAER;AC/CJ,IAAMM,cAAAA,GAAgBP,0BAAAA;AAAA,EAClB,wcAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,gCAAA;AAAA,QACT,IAAA,EAAM,2BAAA;AAAA,QACN,OAAA,EAAS,6BAAA;AAAA,QACT,OAAA,EAAS,+BAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACX;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,sCAAA;AAAA,QACJ,EAAA,EAAI,qCAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAEA,SAASQ,MAAAA,CAAM;AAAA,EACX,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACP,CAAA,EAAwF;AACpF,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUH,YAAAA,CAAK,IAAA,GAAO,MAAA;AAEnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,OAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAGM,cAAAA,CAAc,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA,GACR;AAER;ACtCA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIN,cAAAA,CAAC,KAAA,EAAA,EAAI,YAAA,EAAW,YAAA,EAAa,WAAA,EAAU,YAAA,EAAa,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEjG;AAMA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyB;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,uFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAMA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyB;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACR;AAER;AASA,SAAS,cAAA,CAAe;AAAA,EACpB,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUI,YAAAA,CAAK,IAAA,GAAO,GAAA;AAEnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,8JAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAMA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AACrE,EAAA,uBACIA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,IAAA,EAAK,MAAA;AAAA,MACL,eAAA,EAAc,MAAA;AAAA,MACd,cAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACR;AAER;AAOA,SAAS,oBAAoB,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,OAAM,EAAyB;AAClF,EAAA,uBACIA,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,MACzD,GAAG,KAAA;AAAA,MACH,QAAA,EAAA,QAAA,oBAAYA,cAAAA,CAACQ,4BAAA,EAAA,EAAiB;AAAA;AAAA,GACnC;AAER;AAMA,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AACzE,EAAA,uBACIP,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACP,uEAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,eAACS,8BAAA,EAAA,EAAmB,CAAA;AAAA,wBACpBT,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,MAAA,EAAI;AAAA;AAAA;AAAA,GAClC;AAER;AC1HA,IAAM,cAAA,GAAiBD,0BAAAA;AAAA,EACnB,woBAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EACI,qGAAA;AAAA,QACJ,SAAA,EACI,0HAAA;AAAA,QACJ,MAAA,EAAQ,2HAAA;AAAA,QACR,OAAA,EACI,6GAAA;AAAA,QACJ,KAAA,EAAO,0HAAA;AAAA,QACP,WAAA,EACI;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,SAAA,EAAW;AAAA;AACf,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAMA,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACP,CAAA,EAIO;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUK,YAAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,SAAS,YAAY,CAAA,EAAkC;AACnD,IAAA,IAAI,SAAA,EAAW;AACX,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA;AAAA,IACJ;AACA,IAAA,OAAA,GAAU,CAAC,CAAA;AAAA,EACf;AAEA,EAAA,uBACIH,eAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,gBAAc,SAAA,IAAa,MAAA;AAAA,MAC3B,aAAW,SAAA,IAAa,MAAA;AAAA,MACxB,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MAC1D,OAAA,EAAS,WAAA;AAAA,MACR,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,SAAA,oBAAaD,eAACU,wBAAA,EAAA,EAAa,IAAA,EAAM,IAAI,SAAA,EAAU,cAAA,EAAe,eAAY,MAAA,EAAO,CAAA;AAAA,QACjF;AAAA;AAAA;AAAA,GACL;AAER;ACxEA,SAAS,QAAA,CAAS;AAAA,EACd,SAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,aAAA,GAAgB,UAAA;AAAA,EAChB,aAAA,GAAgB,OAAA;AAAA,EAChB,MAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,EAIG;AACC,EAAA,MAAM,oBAAoBC,mCAAA,EAAqB;AAE/C,EAAA,uBACIX,cAAAA;AAAA,IAACY,wBAAA;AAAA,IAAA;AAAA,MACG,eAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,iMAAA;AAAA,QACA,MAAA,CAAO,GAAA,CAAA,yCAAA,CAAA;AAAA,QACP,MAAA,CAAO,GAAA,CAAA,6CAAA,CAAA;AAAA,QACP;AAAA,OACJ;AAAA,MACA,aAAA;AAAA,MACA,UAAA,EAAY,IAAI,IAAA,CAAK,QAAA,IAAY,MAAM,CAAC,CAAA;AAAA,MACxC,QAAA,EAAU,IAAI,IAAA,CAAK,MAAA,IAAU,MAAM,EAAE,CAAA;AAAA,MACrC,MAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACR,mBAAA,EAAqB,CAAC,IAAA,KAClB,IAAA,CAAK,cAAA,CAAe,QAAQ,IAAA,EAAM,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,QACxD,GAAG;AAAA,OACP;AAAA,MACA,UAAA,EAAY;AAAA,QACR,IAAA,EAAM,EAAA,CAAG,OAAA,EAAS,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACxC,MAAA,EAAQ,EAAA,CAAG,0CAAA,EAA4C,iBAAA,CAAkB,MAAM,CAAA;AAAA,QAC/E,KAAA,EAAO,EAAA,CAAG,4BAAA,EAA8B,iBAAA,CAAkB,KAAK,CAAA;AAAA,QAC/D,GAAA,EAAK,EAAA;AAAA,UACD,yEAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,eAAA,EAAiB,EAAA;AAAA,UACb,cAAA,CAAe,EAAE,OAAA,EAAS,aAAA,EAAe,CAAA;AAAA,UACzC,8GAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACT,cAAA,CAAe,EAAE,OAAA,EAAS,aAAA,EAAe,CAAA;AAAA,UACzC,8GAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,aAAA,EAAe,EAAA;AAAA,UACX,yFAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACP,uFAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,aAAA,EAAe,EAAA;AAAA,UACX,kCAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,QAAA,EAAU,EAAA,CAAG,uCAAA,EAAyC,iBAAA,CAAkB,QAAQ,CAAA;AAAA,QAChF,aAAA,EAAe,EAAA;AAAA,UACX,2BAAA;AAAA,UACA,aAAA,KAAkB,UACZ,SAAA,GACA,wGAAA;AAAA,UACN,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,QAAA,EAAU,EAAA,CAAG,YAAA,EAAc,iBAAA,CAAkB,QAAQ,CAAA;AAAA,QACrD,OAAA,EAAS,EAAA;AAAA,UACL,gHAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,IAAA,EAAM,EAAA,CAAG,wBAAA,EAA0B,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACzD,kBAAA,EAAoB,EAAA;AAAA,UAChB,6BAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACT,qDAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,GAAA,EAAK,EAAA;AAAA,UACD,wKAAA;AAAA,UACA,KAAA,CAAM,iBACA,uEAAA,GACA,sEAAA;AAAA,UACN,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACT,0HAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,YAAA,EAAc,EAAA,CAAG,2BAAA,EAA6B,iBAAA,CAAkB,YAAY,CAAA;AAAA,QAC5E,SAAA,EAAW,EAAA;AAAA,UACP,yHAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,KAAA,EAAO,EAAA,CAAG,6CAAA,EAA+C,iBAAA,CAAkB,KAAK,CAAA;AAAA,QAChF,OAAA,EAAS,EAAA;AAAA,UACL,iEAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,QAAA,EAAU,EAAA,CAAG,qCAAA,EAAuC,iBAAA,CAAkB,QAAQ,CAAA;AAAA,QAC9E,MAAA,EAAQ,EAAA,CAAG,WAAA,EAAa,iBAAA,CAAkB,MAAM,CAAA;AAAA,QAChD,GAAG;AAAA,OACP;AAAA,MACA,UAAA,EAAY;AAAA,QACR,IAAA,EAAM,CAAC,EAAE,SAAA,EAAAC,YAAW,OAAA,EAAS,GAAGC,QAAM,KAAM;AACxC,UAAA,uBACId,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,WAAA,EAAU,UAAA;AAAA,cACV,GAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAW,GAAGa,UAAS,CAAA;AAAA,cACtB,GAAGC;AAAA;AAAA,WACR;AAAA,QAER,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,EAAE,SAAA,EAAAD,YAAW,WAAA,EAAa,GAAGC,QAAM,KAAM;AAC/C,UAAA,IAAI,gBAAgB,MAAA,EAAQ;AACxB,YAAA,uBAAOd,eAACe,2BAAA,EAAA,EAAgB,SAAA,EAAW,GAAG,QAAA,EAAUF,UAAS,CAAA,EAAI,GAAGC,MAAAA,EAAO,CAAA;AAAA,UAC3E;AAEA,UAAA,IAAI,gBAAgB,OAAA,EAAS;AACzB,YAAA,uBAAOd,cAAAA,CAACQ,4BAAAA,EAAA,EAAiB,SAAA,EAAW,GAAG,QAAA,EAAUK,UAAS,CAAA,EAAI,GAAGC,MAAAA,EAAO,CAAA;AAAA,UAC5E;AAEA,UAAA,uBAAOd,eAACgB,2BAAA,EAAA,EAAgB,SAAA,EAAW,GAAG,QAAA,EAAUH,UAAS,CAAA,EAAI,GAAGC,MAAAA,EAAO,CAAA;AAAA,QAC3E,CAAA;AAAA,QACA,SAAA,EAAW,CAAC,EAAE,GAAGA,MAAAA,EAAM,qBAAMd,cAAAA,CAAC,iBAAA,EAAA,EAAkB,MAAA,EAAiB,GAAGc,MAAAA,EAAO,CAAA;AAAA,QAC3E,YAAY,CAAC,EAAE,QAAA,EAAU,GAAGA,QAAM,KAAM;AACpC,UAAA,uBACId,cAAAA,CAAC,IAAA,EAAA,EAAI,GAAGc,MAAAA,EACJ,QAAA,kBAAAd,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACV,QAAA,EACL,CAAA,EACJ,CAAA;AAAA,QAER,CAAA;AAAA,QACA,GAAG;AAAA,OACP;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAoE;AAChE,EAAA,MAAM,oBAAoBW,mCAAA,EAAqB;AAE/C,EAAA,MAAM,GAAA,GAAMM,aAA0B,IAAI,CAAA;AAC1C,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,SAAA,CAAU,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,KAAA,EAAM;AAAA,EAC9C,CAAA,EAAG,CAAC,SAAA,CAAU,OAAO,CAAC,CAAA;AAEtB,EAAA,uBACIlB,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,SAAA;AAAA,MACL,UAAA,EAAU,GAAA,CAAI,IAAA,CAAK,kBAAA,CAAmB,QAAQ,IAAI,CAAA;AAAA,MAClD,sBAAA,EACI,SAAA,CAAU,QAAA,IACV,CAAC,SAAA,CAAU,eACX,CAAC,SAAA,CAAU,SAAA,IACX,CAAC,SAAA,CAAU,YAAA;AAAA,MAEf,oBAAkB,SAAA,CAAU,WAAA;AAAA,MAC5B,kBAAgB,SAAA,CAAU,SAAA;AAAA,MAC1B,qBAAmB,SAAA,CAAU,YAAA;AAAA,MAC7B,SAAA,EAAW,EAAA;AAAA,QACP,8/BAAA;AAAA,QACA,iBAAA,CAAkB,GAAA;AAAA,QAClB;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AChLA,SAAS,oBAAA,CAAwB;AAAA,EAC7B,IAAA;AAAA,EACA,WAAA;AAAA,EACA;AACJ,CAAA,EAIuC;AACnC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAImB,eAAwB,WAAW,CAAA;AAC3E,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,eAAe,IAAA,GAAO,YAAA;AAEpC,EAAA,MAAM,WAAA,GAAcF,aAAO,QAAQ,CAAA;AACnC,EAAAC,gBAAU,MAAM;AACZ,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EAC1B,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAWE,iBAAA;AAAA,IACb,CAAC,IAAA,KAAY;AACT,MAAA,IAAI,CAAC,YAAA,EAAc,eAAA,CAAgB,IAAI,CAAA;AACvC,MAAA,WAAA,CAAY,UAAU,IAAI,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACjB;AAEA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AAC3B;AAWA,IAAM,mBAAA,GAAsBC,oBAA8C,IAAI,CAAA;AAE9E,IAAM,kBAAkB,MAAM;AAC1B,EAAA,MAAM,OAAA,GAAUC,iBAAW,mBAAmB,CAAA;AAE9C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC9E;AAEA,EAAA,OAAO,OAAA;AACX,CAAA;AAGA,IAAM,OAAA,GAAU,CAAC,SAAA,EAAiB,KAAA,KAA0B;AACxD,EAAA,MAAM,OAAe,EAAC;AACtB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC5B,IAAA,IAAA,CAAK,IAAA,CAAKC,eAAA,CAAQ,SAAA,EAAW,CAAC,CAAC,CAAA;AAAA,EACnC;AACA,EAAA,OAAO,IAAA;AACX,CAAA;AAGA,IAAM,UAAA,GAAa,CAAC,IAAA,KAAe;AAC/B,EAAA,MAAM,KAAA,GAAQC,cAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAChC,EAAA,MAAM,GAAA,GAAMA,cAAA,CAAO,IAAA,EAAM,GAAG,CAAA;AAE5B,EAAA,OAAO,EAAE,OAAO,GAAA,EAAI;AACxB,CAAA;AAYO,IAAM,eAAe,CAAC;AAAA,EACzB,KAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA,uBAAuB,IAAA,EAAK;AAAA,EAC5B,iBAAA;AAAA,EACA,IAAA,GAAO,CAAA;AAAA,EACP,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAyB;AACrB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,oBAAA,CAAuC;AAAA,IAC3E,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,YAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACb,CAAA;AAED,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,oBAAA,CAAqB;AAAA,IACjE,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,gBAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACb,CAAA;AAED,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAe;AACrC,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,SAAA,KAA+B;AACnD,IAAA,MAAM,YAAA,GAAeD,eAAA;AAAA,MACjB,gBAAA,wBAAwB,IAAA,EAAK;AAAA,MAC7B,SAAA,KAAc,MAAA,GAAS,IAAA,GAAO,CAAC;AAAA,KACnC;AACA,IAAA,mBAAA,CAAoB,YAAY,CAAA;AAAA,EACpC,CAAA;AAEA,EAAA,MAAM,YAAA,GAAwC;AAAA,IAC1C,cAAc,YAAA,IAAgB,IAAA;AAAA,IAC9B,YAAA,EAAc,gBAAA;AAAA,IACd,SAAA,EAAW,gBAAA,oBAAoB,IAAI,IAAA,EAAK;AAAA,IACxC,UAAA,EAAY,cAAA;AAAA,IACZ;AAAA,GACJ;AAEA,EAAA,uBACIvB,cAAAA,CAAC,mBAAA,CAAoB,UAApB,EAA6B,KAAA,EAAO,cACjC,QAAA,kBAAAA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA;AAAA,MACvE,GAAG,KAAA;AAAA,MACH;AAAA;AAAA,GACL,EACJ,CAAA;AAER;AAOO,IAAM,yBAAyB,CAAC;AAAA,EACnC,SAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAmC;AAC/B,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,IAAA,GAAO,SAAA,KAAc,MAAA,GAASe,2BAAAA,GAAkBP,4BAAAA;AAEtD,EAAA,MAAM,WAAA,GAAoD,CAAC,KAAA,KAAU;AACjE,IAAA,UAAA,CAAW,SAAS,CAAA;AACpB,IAAA,OAAA,GAAU,KAAK,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,uBACIR,eAACI,YAAAA,CAAK,IAAA,EAAL,EAAU,OAAA,EAAS,WAAA,EAAc,GAAG,KAAA,EAChC,QAAA,EACL,CAAA;AAAA,EAER;AAEA,EAAA,uBACIJ,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAS,WAAA;AAAA,MACT,IAAA,EAAM,UAAU,MAAA,GAAY,SAAA;AAAA,MAC5B,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,UAAU,MAAA,GAAY,OAAA;AAAA,MAC/B,SAAA,EAAW,EAAA,CAAG,OAAA,GAAU,KAAA,GAAQ,KAAK,CAAA;AAAA,MACpC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA,QAAA,oBAAYA,cAAAA,CAAC,IAAA,EAAA,EAAK,WAAU,QAAA,EAAS;AAAA;AAAA,GAC1C;AAER;AAMO,IAAM,mBAAmB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,OAAM,KAA6B;AAC1F,EAAA,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,QAAA,KAAa,eAAA,EAAgB;AACtD,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,SAAA,EAAW,QAAQ,CAAA;AAExC,EAAA,uBACIA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,2BAA2B,SAAS,CAAA,EAAI,GAAG,KAAA,EACzD,eAAK,GAAA,CAAI,CAAC,SAAS,QAAA,CAAS,IAAI,CAAC,CAAA,EACtC,CAAA;AAER;AAMO,IAAM,kBAAkB,CAAC,EAAE,MAAM,SAAA,EAAW,GAAG,OAAM,KAA4B;AACpF,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAa,GAAI,eAAA,EAAgB;AACvD,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,WAAW,IAAI,CAAA;AACtC,EAAA,MAAM,UAAA,GAAa,YAAA,IAAgByB,iBAAA,CAAU,IAAA,EAAM,YAAY,CAAA;AAC/D,EAAA,MAAM,WAAA,GAAcC,gBAAQ,IAAI,CAAA;AAEhC,EAAA,uBACIzB,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,gDAAA;AAAA,QACA,WAAA,IAAe,CAAC,UAAA,IAAc,4BAAA;AAAA,QAC9B;AAAA,OACJ;AAAA,MACA,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MAChC,IAAA,EAAK,IAAA;AAAA,MACL,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,aAAa,SAAA,GAAY,OAAA;AAAA,MACjC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,+CAAA;AAAA,cACA,UAAA,IAAc;AAAA,aAClB;AAAA,YACC,QAAA,EAAA;AAAA;AAAA,SACL;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAA,GAAA,EAAI;AAAA;AAAA;AAAA,GACjD;AAER;AC7OA,SAAS,IAAA,CAAK;AAAA,EACV,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACP,ySAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gaAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAC/D,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,MACrE,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACrE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gEAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,MAC7D,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,iIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AC9DA,IAAM,eAAA,GAAkBqB,oBAA2C,IAAI,CAAA;AAEvE,SAAS,WAAA,GAAc;AACnB,EAAA,MAAM,OAAA,GAAUC,iBAAW,eAAe,CAAA;AAE1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,OAAA;AACX;AAMA,SAAS,QAAA,CAAS;AAAA,EACd,WAAA,GAAc,YAAA;AAAA,EACd,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA0C;AACtC,EAAA,MAAM,CAAC,WAAA,EAAa,GAAG,CAAA,GAAIK,iCAAA;AAAA,IACvB;AAAA,MACI,GAAG,IAAA;AAAA,MACH,IAAA,EAAM,WAAA,KAAgB,YAAA,GAAe,GAAA,GAAM;AAAA,KAC/C;AAAA,IACA;AAAA,GACJ;AACA,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIR,eAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAExD,EAAA,MAAM,QAAA,GAAWC,iBAAAA,CAAY,CAACQ,IAAAA,KAAqB;AAC/C,IAAA,IAAI,CAACA,IAAAA,EAAK;AACV,IAAA,gBAAA,CAAiBA,IAAAA,CAAI,eAAe,CAAA;AACpC,IAAA,gBAAA,CAAiBA,IAAAA,CAAI,eAAe,CAAA;AAAA,EACxC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaR,kBAAY,MAAM;AACjC,IAAA,GAAA,EAAK,UAAA,EAAW;AAAA,EACpB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,UAAA,GAAaA,kBAAY,MAAM;AACjC,IAAA,GAAA,EAAK,UAAA,EAAW;AAAA,EACpB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,aAAA,GAAgBA,iBAAAA;AAAA,IAClB,CAAC,KAAA,KAAyC;AACtC,MAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC3B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACf,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,YAAA,EAAc;AACnC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACf;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,YAAY,UAAU;AAAA,GAC3B;AAEA,EAAAF,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,MAAA,EAAQ;AACrB,IAAA,MAAA,CAAO,GAAG,CAAA;AAAA,EACd,CAAA,EAAG,CAAC,GAAA,EAAK,MAAM,CAAC,CAAA;AAEhB,EAAAA,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,QAAA,CAAS,GAAG,CAAA;AACZ,IAAA,GAAA,CAAI,EAAA,CAAG,UAAU,QAAQ,CAAA;AACzB,IAAA,GAAA,CAAI,EAAA,CAAG,UAAU,QAAQ,CAAA;AAEzB,IAAA,OAAO,MAAM;AACT,MAAA,GAAA,EAAK,GAAA,CAAI,UAAU,QAAQ,CAAA;AAAA,IAC/B,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,GAAA,EAAK,QAAQ,CAAC,CAAA;AAElB,EAAA,uBACIlB,cAAAA;AAAA,IAAC,eAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACG,KAAA,EAAO;AAAA,QACH,WAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA,EAAa,WAAA,KAAgB,IAAA,EAAM,IAAA,KAAS,MAAM,UAAA,GAAa,YAAA,CAAA;AAAA,QAC/D,UAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,gBAAA,EAAkB,aAAA;AAAA,UAClB,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,UACnC,IAAA,EAAK,QAAA;AAAA,UACL,sBAAA,EAAqB,UAAA;AAAA,UACrB,WAAA,EAAU,UAAA;AAAA,UACT,GAAG,KAAA;AAAA,UACH;AAAA;AAAA;AACL;AAAA,GACJ;AAER;AAKA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACrE,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAY,GAAI,WAAA,EAAY;AAEjD,EAAA,uBACIA,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,aAAa,SAAA,EAAU,iBAAA,EAAkB,WAAA,EAAU,kBAAA,EACzD,QAAA,kBAAAA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,MAAA;AAAA,QACA,WAAA,KAAgB,eAAe,OAAA,GAAU,gBAAA;AAAA,QACzC;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAKA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAClE,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,WAAA,EAAY;AAEpC,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,OAAA;AAAA,MACL,sBAAA,EAAqB,OAAA;AAAA,MACrB,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,oCAAA;AAAA,QACA,WAAA,KAAgB,eAAe,MAAA,GAAS,MAAA;AAAA,QACxC;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAMA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACP,CAAA,EAAkC;AAC9B,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACIC,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,6BAAA;AAAA,QACA,WAAA,KAAgB,eACV,mCAAA,GACA,6CAAA;AAAA,QACN;AAAA,OACJ;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MACT,YAAA,EAAW,gBAAA;AAAA,MACV,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC6B,qBAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,wBACjD7B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,gBAAA,EAAc;AAAA;AAAA;AAAA,GAC5C;AAER;AAMA,SAAS,YAAA,CAAa;AAAA,EAClB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACP,CAAA,EAAkC;AAC9B,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACIC,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,6BAAA;AAAA,QACA,WAAA,KAAgB,eACV,oCAAA,GACA,gDAAA;AAAA,QACN;AAAA,OACJ;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MACT,YAAA,EAAW,YAAA;AAAA,MACV,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC8B,sBAAA,EAAA,EAAW,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,wBAClD9B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA;AAAA,GACxC;AAER;ACzOA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAC3D,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAChG;AAGA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA4B;AAClE,EAAA,uBACIA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,kDAAA;AAAA,QACA,2DAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAGA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAwB;AACpE,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACR;AAER;AAGA,SAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,SAAA,EAAU,EAA+C;AACnF,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,IAAA;AAE3C,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA;AAAA,MAC9D,QAAA,EAAA,MAAA,CACI,GAAA;AAAA,QAAI,CAAC,CAAA,KACF,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC;AAAA,OACzE,CACC,KAAK,IAAI;AAAA;AAAA,GAClB;AAER;AAGA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,aAAA,EAAc,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEjG;ACrDA,SAAS,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAA4B;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACG,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,8IAAA;AAAA,QACA,mCAAA;AAAA,QACA,2EAAA;AAAA,QACA,8EAAA;AAAA,QACA,sFAAA;AAAA,QACA,+EAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;;;ACnBA,IAAM,mBAAA,uBAA0B,GAAA,CAAI,CAAC,UAAU,OAAA,EAAS,SAAA,EAAW,MAAM,CAAC,CAAA;AAkBnE,SAAS,aAAa,IAAA,EAA8C;AACvE,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,IACK,IAAA,CAAK,WAAW,GAAG,CAAA,IAAK,CAAC,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,IAC9C,IAAA,CAAK,WAAW,GAAG,CAAA,IACnB,KAAK,UAAA,CAAW,IAAI,KACpB,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EACvB;AACE,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI;AACA,IAAA,OAAO,mBAAA,CAAoB,IAAI,IAAI,GAAA,CAAI,IAAI,CAAA,CAAE,QAAQ,IAAI,IAAA,GAAO,GAAA;AAAA,EACpE,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,GAAA;AAAA,EACX;AACJ;AC1BA,IAAM,YAAA,GAAeD,0BAAAA;AAAA,EACjB,iQAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,UAAA,EACI,4OAAA;AAAA,QACJ,KAAA,EAAO;AAAA,OACX;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,eAAA;AAAA,QACJ,EAAA,EAAI,eAAA;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAEA,SAAS,IAAA,CAAK;AAAA,EACV,SAAA;AAAA,EACA,OAAA,GAAU,YAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,QAAA,GAAW,KAAA;AAAA,EACX,MAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACP,CAAA,EAMO;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,IAAW,CAAC,QAAA,GAAWK,aAAK,IAAA,GAAO,GAAA;AAChD,EAAA,MAAM,aAAa,MAAA,KAAW,QAAA;AAC9B,EAAA,MAAM,WAAA,GAAc,GAAA,KAAQ,MAAA,KAAW,QAAA,GAAW,qBAAA,GAAwB,MAAA,CAAA;AAE1E,EAAA,SAAS,YAAY,CAAA,EAA4B;AAC7C,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA;AAAA,IACJ;AACA,IAAA,OAAA,GAAU,CAAC,CAAA;AAAA,EACf;AAEA,EAAA,MAAM,mBAAmB,IAAA,KAAS,IAAA,GAAO,EAAA,GAAK,IAAA,KAAS,OAAO,EAAA,GAAK,EAAA;AAEnE,EAAA,uBACIH,eAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,QAAA,GAAW,MAAA,GAAY,YAAA,CAAa,IAAI,CAAA;AAAA,MAC9C,MAAA;AAAA,MACA,GAAA,EAAK,WAAA;AAAA,MACL,QAAA,EAAU,WAAW,EAAA,GAAK,MAAA;AAAA,MAC1B,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,EAAA;AAAA,QACP,YAAA,CAAa,EAAE,OAAA,EAAS,IAAA,EAAM,WAAW,CAAA;AAAA,QACzC,QAAA,IAAY;AAAA,OAChB;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA,mBACGD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gEAAA,EACX,UACL,CAAA,GAEA,QAAA;AAAA,QAEH,cAAc,CAAC,QAAA,oBACZC,eAAAA,CAAAI,qBAAA,EACI,QAAA,EAAA;AAAA,0BAAAL,cAAAA;AAAA,YAAC+B,4BAAA;AAAA,YAAA;AAAA,cACG,aAAA,EAAY,MAAA;AAAA,cACZ,IAAA,EAAM,gBAAA;AAAA,cACN,SAAA,EAAU;AAAA;AAAA,WACd;AAAA,0BACA/B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,oBAAA,EAAkB;AAAA,SAAA,EAChD;AAAA;AAAA;AAAA,GAER;AAER;ACtFA,SAAS,QAAA,CAAS;AAAA,EACd,MAAA,GAAS,CAAA;AAAA,EACT,KAAA,GAAQ,EAAA;AAAA,EACR,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,KAAA;AAAA,EACV,IAAA,GAAO,KAAA;AAAA,EACP,SAAA;AAAA,EACA;AACJ,CAAA,EAAkB;AACd,EAAA,MAAM,MAAA,GAASiB,YAAAA,CAAoC,EAAE,CAAA;AACrD,EAAA,MAAM,OAAO,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,MAAM,CAAA;AAE5C,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAkB;AAC/B,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,EACpE,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAe,IAAA,KAAiB;AAClD,IAAA,MAAM,QAAQ,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,CAAA,CAAE,MAAM,EAAE,CAAA;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAK,KAAA,EAAM;AACxB,IAAA,IAAA,CAAK,KAAK,CAAA,GAAI,KAAA;AACd,IAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,MAAM,CAAA;AAC5C,IAAA,QAAA,GAAW,MAAM,CAAA;AACjB,IAAA,IAAI,SAAS,KAAA,GAAQ,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAe,CAAA,KAAuC;AACzE,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACvB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,IAAA,CAAK,KAAK,CAAA,EAAG;AACb,QAAA,MAAM,IAAA,GAAO,KAAK,KAAA,EAAM;AACxB,QAAA,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA;AACd,QAAA,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,MAC5B,CAAA,MAAO;AACH,QAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,MACrB;AAAA,IACJ,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,WAAA,EAAa;AAC9B,MAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc;AAC/B,MAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,IACrB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAsB;AACvC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA;AACjF,IAAA,QAAA,GAAW,MAAM,CAAA;AACjB,IAAA,OAAA,CAAQ,KAAK,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,uBACIjB,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA,EAClD,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG,sBAC5BA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MAEG,GAAA,EAAK,CAAC,EAAA,KAAO;AACT,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,MACxB,CAAA;AAAA,MACA,IAAA,EAAM,OAAO,UAAA,GAAa,MAAA;AAAA,MAC1B,SAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,CAAA;AAAA,MACX,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,IAAK,EAAA;AAAA,MAClB,QAAA;AAAA,MACA,cAAA,EAAc,OAAA;AAAA,MACd,UAAU,CAAC,CAAA,KAAM,aAAa,CAAA,EAAG,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MAC/C,SAAA,EAAW,CAAC,CAAA,KAAM,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,MACpC,OAAA,EAAS,WAAA;AAAA,MACT,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAA,EAAO;AAAA,MAChC,SAAA,EAAW,EAAA;AAAA,QACP,qJAAA;AAAA,QACA,2EAAA;AAAA,QACA,8EAAA;AAAA,QACA,sFAAA;AAAA,QACA;AAAA;AACJ,KAAA;AAAA,IApBK;AAAA,GAsBZ,CAAA,EACL,CAAA;AAER;ACxFA,IAAM,cAAA,GAAiBD,0BAAAA;AAAA,EACnB,ocAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,iBAAA;AAAA,QACT,OAAA,EACI;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,oBAAA;AAAA,QACJ,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAEA,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAsF;AAClF,EAAA,uBACIC,cAAAA;AAAA,IAACgC,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACR;AAER;AC3BA,IAAM,0BAA0BX,mBAAAA,CAA4C;AAAA,EACxE,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,kBAAA,EAAoB,MAAA;AAAA,EACpB,YAAA,EAAc;AAClB,CAAC,CAAA;AAuBD,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,IAAA,GAAO,MAAM,QAAA,EAAU,GAAG,OAAM,EAA0B;AAC7F,EAAA,MAAM,eAAeY,WAAA,EAAM;AAC3B,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,KAAS,QAAA;AAChC,EAAA,MAAM,WAAA,GAAc,WAAY,KAAA,GAAwC,IAAA;AAExE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAId,cAAAA;AAAA,IAClC,WAAA,EAAa,SAAS,WAAA,EAAa;AAAA,GACvC;AAEA,EAAAD,gBAAU,MAAM;AACZ,IAAA,IAAI,WAAA,EAAa,UAAU,MAAA,EAAW;AAClC,MAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,IACpC;AAAA,EACJ,CAAA,EAAG,CAAC,WAAA,EAAa,KAAK,CAAC,CAAA;AAEvB,EAAA,MAAM,SAAA,GAAY;AAAA,IACd,GAAI,KAAA;AAAA,IACJ,GAAI,QAAA,IAAY;AAAA,MACZ,aAAA,EAAe,CAAC,GAAA,KAAgB;AAC5B,QAAA,cAAA,CAAe,GAAG,CAAA;AAClB,QAAA,WAAA,EAAa,gBAAgB,GAAG,CAAA;AAAA,MACpC;AAAA;AACJ,GACJ;AAEA,EAAA,uBACIlB,cAAAA;AAAA,IAACkC,mBAAA,CAAY,IAAA;AAAA,IAAZ;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,4DAAA,EAA8D,SAAS,CAAA;AAAA,MACpF,GAAI,SAAA;AAAA,MACL,QAAA,kBAAAlC,cAAAA;AAAA,QAAC,uBAAA,CAAwB,QAAA;AAAA,QAAxB;AAAA,UACG,KAAA,EAAO;AAAA,YACH,IAAA;AAAA,YACA,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,kBAAA,EAAoB,WAAA;AAAA,YACpB;AAAA,WACJ;AAAA,UACC;AAAA;AAAA;AACL;AAAA,GACJ;AAER;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC1B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAkF;AAC9E,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,oBAAoB,YAAA,EAAa,GACjDsB,iBAAW,uBAAuB,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,IAAA,KAAS,QAAA,IAAY,kBAAA,KAAuB,KAAA;AAE7D,EAAA,uBACIrB,eAAAA;AAAA,IAACiC,mBAAA,CAAY,IAAA;AAAA,IAAZ;AAAA,MACG,WAAA,EAAU,wBAAA;AAAA,MACV,KAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,cAAA,CAAe,EAAE,OAAA,EAAS,SAAA,EAAW,MAAM,CAAA;AAAA,QAC3C,iFAAA;AAAA,QACA,2CAAA;AAAA,QACA,sDAAA;AAAA,QACA,+BAAA;AAAA,QACA,uDAAA;AAAA,QACA,SAAS,UAAA,IAAc;AAAA,UACnB,0BAAA;AAAA,UACA,2BAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA,oBACGlC,cAAAA;AAAA,UAACmC,cAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACG,QAAA,EAAU,YAAA;AAAA,YACV,SAAA,EAAU,gDAAA;AAAA,YACV,YAAY,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,GAAA,EAAK,QAAQ,GAAA;AAAI;AAAA,SAC7D;AAAA,wBAEJnC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAiB,QAAA,EAAS;AAAA;AAAA;AAAA,GAC9C;AAER;ACtHA,SAAS,MAAA,CAAO,EAAE,GAAG,KAAA,EAAM,EAAgD;AACvE,EAAA,uBAAOA,eAACoC,cAAA,CAAgB,IAAA,EAAhB,EAAqB,WAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC/D;AAEA,SAAS,aAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACInC,eAAAA;AAAA,IAACmC,cAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,yKAAA;AAAA,QACA,mCAAA;AAAA,QACA,2EAAA;AAAA,QACA,8EAAA;AAAA,QACA,sFAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDpC,cAAAA,CAACoC,cAAA,CAAgB,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EACzB,QAAA,kBAAApC,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB,SAAA,EAAU,yCAAwC,CAAA,EACvE;AAAA;AAAA;AAAA,GACJ;AAER;AAEA,SAAS,aAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,QAAA;AAAA,EACX,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACIhB,cAAAA,CAACoC,cAAA,CAAgB,MAAA,EAAhB,EACG,QAAA,kBAAAnC,eAAAA;AAAA,IAACmC,cAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,2LAAA;AAAA,QACA,uFAAA;AAAA,QACA,gGAAA;AAAA,QACA,iEAAA;AAAA,QACA,aAAa,QAAA,IAAY,kCAAA;AAAA,QACzB;AAAA,OACJ;AAAA,MACA,QAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAApC,eAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,wBACtBA,cAAAA;AAAA,UAACoC,cAAA,CAAgB,QAAA;AAAA,UAAhB;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,KAAA;AAAA,cACA,aAAa,QAAA,IAAY;AAAA,aAC7B;AAAA,YACC;AAAA;AAAA,SACL;AAAA,wBACApC,eAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAAA,GAC5B,EACJ,CAAA;AAER;AAEA,SAAS,UAAA,CAAW;AAAA,EAChB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAgD;AAC5C,EAAA,uBACIC,eAAAA;AAAA,IAACmC,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qHAAA;AAAA,QACA,8CAAA;AAAA,QACA,gEAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAApC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EACZ,0BAAAA,cAAAA,CAACoC,cAAA,CAAgB,aAAA,EAAhB,EACG,0BAAApC,cAAAA,CAACqC,qBAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,GAClC,CAAA,EACJ,CAAA;AAAA,wBACArC,cAAAA,CAACoC,cAAA,CAAgB,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AAAA,GACxC;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiD;AACxF,EAAA,uBACIpC,cAAAA;AAAA,IAACoC,cAAA,CAAgB,KAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uDAAA,EAAyD,SAAS,CAAA;AAAA,MAC/E,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,eAAA,CAAgB;AAAA,EACrB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAqD;AACjD,EAAA,uBACIpC,cAAAA;AAAA,IAACoC,cAAA,CAAgB,SAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA;AAAA,MACnD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA0D;AACtD,EAAA,uBACIpC,cAAAA;AAAA,IAACoC,cAAA,CAAgB,cAAA;AAAA,IAAhB;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA;AAAA,MAC9E,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApC,cAAAA,CAACsC,yBAAA,EAAA,EAAc,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,GACtC;AAER;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACItC,cAAAA;AAAA,IAACoC,cAAA,CAAgB,gBAAA;AAAA,IAAhB;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA;AAAA,MAC9E,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApC,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB,WAAU,QAAA,EAAS;AAAA;AAAA,GACxC;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,GAAG,KAAA,EAAM,EAAiD;AAC7E,EAAA,uBAAOhB,eAACoC,cAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACtE;AAEA,SAAS,WAAA,CAAY,EAAE,GAAG,KAAA,EAAM,EAAiD;AAC7E,EAAA,uBAAOpC,eAACoC,cAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACtE;AChJA,SAAS,SAAA,CAAU;AAAA,EACf,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACIpC,cAAAA;AAAA,IAACuC,iBAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,WAAA;AAAA,MACV,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,4IAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACjBA,IAAM,gBAAA,GAAmBxC,2BAAI,kEAAA,EAAoE;AAAA,EAC7F,QAAA,EAAU;AAAA,IACN,OAAA,EAAS;AAAA,MACL,OAAA,EAAS,4BAAA;AAAA,MACT,OAAA,EAAS,6BAAA;AAAA,MACT,OAAA,EAAS,8BAAA;AAAA,MACT,MAAA,EAAQ,2BAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAAA,IACA,IAAA,EAAM;AAAA,MACF,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACR,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM;AAAA;AAEd,CAAC;AAED,IAAM,yBAAA,GAA4BA,2BAAI,iCAAA,EAAmC;AAAA,EACrE,QAAA,EAAU;AAAA,IACN,OAAA,EAAS;AAAA,MACL,OAAA,EAAS,qCAAA;AAAA,MACT,OAAA,EAAS,uCAAA;AAAA,MACT,OAAA,EAAS,uCAAA;AAAA,MACT,MAAA,EAAQ,sCAAA;AAAA,MACR,MAAA,EAAQ;AAAA;AACZ,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,OAAA,EAAS;AAAA;AAEjB,CAAC;AAOD,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,KAAA,EAAO,OAAA,GAAU,WAAW,IAAA,GAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAAkB;AAC/F,EAAA,uBACIC,cAAAA;AAAA,IAACwC,gBAAA,CAAkB,IAAA;AAAA,IAAlB;AAAA,MACG,WAAA,EAAU,UAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,gBAAA,CAAiB,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC3D,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAxC,cAAAA;AAAA,QAACwC,gBAAA,CAAkB,SAAA;AAAA,QAAlB;AAAA,UACG,WAAA,EAAU,oBAAA;AAAA,UACV,WAAW,EAAA,CAAG,yBAAA,CAA0B,EAAE,OAAA,EAAS,CAAC,CAAA;AAAA,UACpD,OAAO,EAAE,SAAA,EAAW,eAAe,GAAA,IAAO,KAAA,IAAS,EAAE,CAAA,EAAA,CAAA;AAAK;AAAA;AAC9D;AAAA,GACJ;AAER;ACzDA,IAAM,gBAAA,GAAmBzC,2BAAI,gCAAA,EAAkC;AAAA,EAC3D,QAAA,EAAU;AAAA,IACN,OAAA,EAAS;AAAA,MACL,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ;AAAA;AACZ,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,OAAA,EAAS;AAAA;AAEjB,CAAC;AAED,SAAS,QAAA,CAAS;AAAA,EACd,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAkE;AAC9D,EAAA,uBACIC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,UAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,aAAA,EAAY,MAAA;AAAA,MACZ,WAAW,EAAA,CAAG,gBAAA,CAAiB,EAAE,OAAA,EAAS,SAAA,EAAW,CAAC,CAAA;AAAA,MACrD,GAAG;AAAA;AAAA,GACR;AAER;AC3BA,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA,GAAM,CAAA;AAAA,EACN,GAAA,GAAM,GAAA;AAAA,EACN,GAAG;AACP,CAAA,EAAgD;AAC5C,EAAA,MAAM,OAAA,GAAUyC,aAAA;AAAA,IACZ,MACI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GAAI,YAAA,GAAe,CAAC,KAAK,GAAG,CAAA;AAAA,IACzF,CAAC,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,GAAG;AAAA,GAClC;AAEA,EAAA,uBACIxC,eAAAA;AAAA,IAACyC,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,YAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,2KAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA1C,cAAAA;AAAA,UAAC0C,cAAA,CAAgB,KAAA;AAAA,UAAhB;AAAA,YACG,WAAA,EAAU,cAAA;AAAA,YACV,SAAA,EAAU,0IAAA;AAAA,YACV,QAAA,kBAAA1C,cAAAA;AAAA,cAAC0C,cAAA,CAAgB,KAAA;AAAA,cAAhB;AAAA,gBACG,WAAA,EAAU,cAAA;AAAA,gBACV,SAAA,EAAU;AAAA;AAAA;AACd;AAAA,SACJ;AAAA,QACC,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAO,EAAG,CAAC,CAAA,EAAG,KAAA,qBACxC1C,cAAAA;AAAA,UAAC0C,cAAA,CAAgB,KAAA;AAAA,UAAhB;AAAA,YACG,WAAA,EAAU,cAAA;AAAA,YAEV,SAAA,EAAU;AAAA,WAAA;AAAA,UADL;AAAA,SAGZ;AAAA;AAAA;AAAA,GACL;AAER;AC5CA,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACI1C,cAAAA;AAAA,IAAC2C,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACP,iJAAA;AAAA,QACA,2EAAA;AAAA,QACA,iDAAA;AAAA,QACA,yDAAA;AAAA,QACA,yCAAA;AAAA,QACA,iEAAA;AAAA,QACA,yCAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAA3C,cAAAA;AAAA,QAAC2C,cAAA,CAAgB,KAAA;AAAA,QAAhB;AAAA,UACG,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACP,kFAAA;AAAA,YACA,yCAAA;AAAA,YACA,oCAAA;AAAA,YACA,mDAAA;AAAA,YACA,sCAAA;AAAA,YACA,iDAAA;AAAA,YACA;AAAA;AACJ;AAAA;AACJ;AAAA,GACJ;AAER;;;AC7BO,IAAM,QAAA,GAAW;AAAA,EACpB,OAAA,EAAS,GAAA;AAAA,EACT,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ,IAAA;AAAA,EACR,IAAA,EAAM;AACV;AAQO,IAAM,IAAA,GAAO;AAAA,EAChB,MAAA,EAAQ,CAAC,GAAA,EAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EACvB,KAAA,EAAO,CAAC,CAAA,EAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EACtB,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAK,CAAC,CAAA;AAAA,EACrB,MAAA,EAAQ,CAAC,CAAA,EAAK,CAAA,EAAG,GAAK,CAAC;AAC3B;AAOO,IAAM,MAAA,GAAS;AAAA,EAClB,QAAQ,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA,EACtD,QAAQ,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AACvD;AAMO,IAAM,UAAA,GAAa;AAAA;AAAA,EAEtB,MAAA,EAAQ;AAAA,IACJ,UAAU,QAAA,CAAS,OAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,MAAA,EAAQ;AAAA,IACJ,GAAG,MAAA,CAAO;AAAA,GACd;AAAA;AAAA,EAGA,KAAA,EAAO;AAAA,IACH,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,QAAA,EAAU;AAAA,IACN,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,KAAA,EAAO;AAAA,IACH,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,KAAA,EAAO;AAAA,IACH,GAAG,MAAA,CAAO;AAAA,GACd;AAAA;AAAA,EAGA,OAAA,EAAS;AAAA,IACL,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,IAAA,EAAM;AAAA,IACF,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA;AAEnB;AAKO,IAAM,MAAA,GAAS;AAAA,EAClB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,WAAW,QAAA,EAAS;AAAA,EACvD,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,EAAE,QAAA,EAAU,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK;AAC/E;AAEO,IAAM,OAAA,GAAU;AAAA,EACnB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC3B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,WAAW,QAAA,EAAS;AAAA,EAC7D,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,EAAE,QAAA,EAAU,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAK;AACrF;AAEO,IAAM,UAAA,GAAa;AAAA,EACtB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,WAAW,OAAA,EAAQ;AAAA,EAC5D,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAK,UAAA,EAAY,EAAE,QAAA,EAAU,QAAA,CAAS,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,MAAK;AACzF;AAEO,IAAM,OAAA,GAAU;AAAA,EACnB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,EAClC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAG,UAAA,EAAY,WAAW,KAAA,EAAM;AAAA,EAC9D,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAM,UAAA,EAAY,EAAE,QAAA,EAAU,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAK;AAC5F;AAIO,IAAM,OAAA,GAAU;AAAA,EACnB,SAAA,EAAW;AAAA,IACP,QAAQ,EAAC;AAAA,IACT,OAAA,EAAS,EAAE,UAAA,EAAY,EAAE,iBAAiB,IAAA,EAAM,aAAA,EAAe,MAAK;AAAE,GAC1E;AAAA,EACA,IAAA,EAAM;AAAA,IACF,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAC3B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,WAAW,IAAA;AAAK;AAEjE;AAGO,IAAM,SAAA,GAAY;AAAA,EACrB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAU,EAAE,MAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,SAAS,OAAA;AACtD;ACjIA,IAAM,cAActB,mBAAAA,CAAgC;AAAA,EAChD,WAAA,EAAa,EAAA;AAAA,EACb,MAAA,EAAQ;AACZ,CAAC,CAAA;AAED,SAAS,cAAA,GAAiB;AACtB,EAAA,OAAOC,iBAAW,WAAW,CAAA;AACjC;AAEA,SAAS,IAAA,CAAK;AAAA,EACV,YAAA;AAAA,EACA,KAAA,EAAO,eAAA;AAAA,EACP,aAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA8C;AAC1C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,IAAIH,cAAAA,CAAS,eAAA,IAAmB,gBAAgB,EAAE,CAAA;AACxF,EAAA,MAAM,cAAc,eAAA,IAAmB,aAAA;AACvC,EAAA,MAAM,SAASc,WAAAA,EAAM;AAErB,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAc;AACrC,IAAA,IAAI,eAAA,KAAoB,MAAA,EAAW,gBAAA,CAAiB,CAAC,CAAA;AACrD,IAAA,aAAA,GAAgB,CAAC,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,uBACIjC,cAAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,OAAO,EAAE,WAAA,EAAa,MAAA,EAAO,EAC/C,QAAA,kBAAAA,cAAAA;AAAA,IAAC4C,YAAA,CAAc,IAAA;AAAA,IAAd;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,KAAA,EAAO,WAAA;AAAA,MACP,aAAA,EAAe,iBAAA;AAAA,MACd,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAEA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8C;AAClF,EAAA,uBACI5C,cAAAA;AAAA,IAAC4C,YAAA,CAAc,IAAA;AAAA,IAAd;AAAA,MACG,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY;AAAA,EACjB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAiD;AAC7C,EAAA,MAAM,EAAE,WAAA,EAAa,MAAA,EAAO,GAAI,cAAA,EAAe;AAC/C,EAAA,MAAM,WAAW,WAAA,KAAgB,KAAA;AAEjC,EAAA,uBACI3C,eAAAA;AAAA,IAAC2C,YAAA,CAAc,OAAA;AAAA,IAAd;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,KAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,6GAAA;AAAA,QACA,0CAAA;AAAA,QACA,qGAAA;AAAA,QACA,kDAAA;AAAA,QACA,yJAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA5C,cAAAA,CAAC6C,uBAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACrB,sCACG7C,cAAAA;AAAA,UAACmC,cAAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACG,WAAA,EAAU,mBAAA;AAAA,YACV,QAAA,EAAU,GAAG,MAAM,CAAA,KAAA,CAAA;AAAA,YACnB,SAAA,EAAU,oDAAA;AAAA,YACV,YAAY,MAAA,CAAO;AAAA;AAAA,SACvB,EAER,CAAA;AAAA,wBACAnC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAA2C,QAAA,EAAS;AAAA;AAAA;AAAA,GACxE;AAER;AAEA,SAAS,WAAA,CAAY;AAAA,EACjB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAiD;AAC7C,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,cAAA,EAAe;AACvC,EAAA,MAAM,WAAW,WAAA,KAAgB,KAAA;AAEjC,EAAA,uBACIA,cAAAA;AAAA,IAAC4C,YAAA,CAAc,OAAA;AAAA,IAAd;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,4HAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAA5C,eAAC6C,uBAAA,EAAA,EAAgB,IAAA,EAAK,QAAO,OAAA,EAAS,KAAA,EACjC,sCACG7C,cAAAA;AAAA,QAACmC,cAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEG,SAAA,EAAU,MAAA;AAAA,UACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UAC5B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,UAC1B,YAAY,EAAE,QAAA,EAAU,SAAS,IAAA,EAAM,IAAA,EAAM,KAAK,MAAA,EAAO;AAAA,UACxD;AAAA,SAAA;AAAA,QANI;AAAA,OAOT,EAER;AAAA;AAAA,GACJ;AAER;ACpFA,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,UAAA,GAAa,CAAA;AAEnB,SAAS,WAAA,GAAqB;AAC1B,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA2C;AAE9D,EAAA,MAAM,KAAA,GAAe;AAAA,IACjB,QAAQ,EAAC;AAAA,IACT,WAAW,EAAC;AAAA,IAEZ,GAAA,CAAI,MAAM,EAAA,EAAI;AACV,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACxD,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAExD,MAAA,IAAI,MAAA,EAAQ;AACR,QAAA,KAAA,CAAM,MAAA,GAAS,MAAM,MAAA,CAAO,GAAA;AAAA,UAAI,CAAC,CAAA,KAC7B,CAAA,CAAE,EAAA,KAAO,OAAA,GAAU,EAAE,GAAG,CAAA,EAAG,GAAG,IAAA,EAAM,EAAA,EAAI,OAAA,EAAQ,GAAI;AAAA,SACxD;AAAA,MACJ,CAAA,MAAO;AACH,QAAA,KAAA,CAAM,MAAA,GAAS,CAAC,EAAE,EAAA,EAAI,SAAS,GAAG,IAAA,EAAK,EAAG,GAAG,KAAA,CAAM,MAAM,CAAA,CAAE,KAAA,CAAM,GAAG,UAAU,CAAA;AAAA,MAClF;AAEA,MAAA,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AACnD,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,QAAA,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,OAAO,CAAC,CAAA;AAChC,QAAA,MAAA,CAAO,GAAA,CAAI,OAAA,EAAS,UAAA,CAAW,MAAM,KAAA,CAAM,OAAO,OAAO,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,MAC9E;AACA,MAAA,OAAO,OAAA;AAAA,IACX,CAAA;AAAA,IAEA,OAAO,EAAA,EAAI;AACP,MAAA,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,EAAE,CAAC,CAAA;AAC3B,MAAA,MAAA,CAAO,OAAO,EAAE,CAAA;AAChB,MAAA,KAAA,CAAM,MAAA,GAAS,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AACrD,MAAA,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AAAA,IACvD,CAAA;AAAA,IAEA,UAAU,QAAA,EAAU;AAChB,MAAA,KAAA,CAAM,SAAA,CAAU,KAAK,QAAQ,CAAA;AAC7B,MAAA,OAAO,MAAM;AACT,QAAA,KAAA,CAAM,YAAY,KAAA,CAAM,SAAA,CAAU,OAAO,CAAC,CAAA,KAAM,MAAM,QAAQ,CAAA;AAAA,MAClE,CAAA;AAAA,IACJ;AAAA,GACJ;AACA,EAAA,OAAO,KAAA;AACX;AAIA,IAAM,iBAAA,GAAoBd,oBAA4B,IAAI,CAAA;AAE1D,SAAS,QAAA,GAAkB;AACvB,EAAA,MAAM,KAAA,GAAQC,iBAAW,iBAAiB,CAAA;AAC1C,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,4CAA4C,CAAA;AACxE,EAAA,OAAO,KAAA;AACX;AAYO,SAAS,QAAA,GAAW;AACvB,EAAA,MAAM,QAAQ,QAAA,EAAS;AAEvB,EAAA,SAAS,MAAA,CAAO,OAAe,OAAA,EAAwB;AACnD,IAAA,OAAO,KAAA,CAAM,GAAA;AAAA,MACT,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,gBAAA,EAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ;AAAA,MACjE,OAAA,EAAS;AAAA,KACb;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA,CAAO,OAAO,MAAA,EAAQ;AAAA,IACzB,OAAA,EAAS,CAAC,KAAA,EAAe,OAAA,KACrB,KAAA,CAAM,GAAA;AAAA,MACF,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,gBAAA,EAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ;AAAA,MACjE,OAAA,EAAS;AAAA,KACb;AAAA,IAEJ,KAAA,EAAO,CAAC,KAAA,EAAe,OAAA,KACnB,KAAA,CAAM,GAAA;AAAA,MACF,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,gBAAA,EAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ;AAAA,MAC/D,OAAA,EAAS;AAAA,KACb;AAAA,IAEJ,OAAA,EAAS,CAAC,KAAA,EAAe,OAAA,KACrB,KAAA,CAAM,GAAA;AAAA,MACF,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,gBAAA,EAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ;AAAA,MACjE,OAAA,EAAS;AAAA,KACb;AAAA,IAEJ,MAAM,CAAC,KAAA,EAAe,OAAA,KAClB,KAAA,CAAM,IAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,kBAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,SAAS,EAAE,CAAA;AAAA,IAE1F,SAAS,CAAC,KAAA,EAAe,OAAA,KACrB,KAAA,CAAM,IAAI,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,SAAS,EAAE,CAAA;AAAA,IAE9E,OAAA,EAAS,CAAC,EAAA,KAAe,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,IAExC,OAAA,EAAS,CAAK,OAAA,EAAqB,QAAA,KAAiC;AAChE,MAAA,MAAM,EAAA,GAAK,KAAA,CAAM,GAAA,CAAI,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,CAAA,EAAG,KAAA,EAAO,QAAA,CAAS,OAAA,EAAS,CAAA;AAC9E,MAAA,OAAA,CACK,IAAA,CAAK,CAAC,IAAA,KAAS;AACZ,QAAA,MAAM,KAAA,GACF,OAAO,QAAA,CAAS,OAAA,KAAY,aACtB,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,GACrB,QAAA,CAAS,OAAA;AACnB,QAAA,KAAA,CAAM,GAAA,CAAI,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,gBAAA,EAAkB,KAAA,IAAS,EAAE,CAAA;AAAA,MACxE,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACZ,QAAA,MAAM,KAAA,GACF,OAAO,QAAA,CAAS,KAAA,KAAU,aAAa,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,GAAI,QAAA,CAAS,KAAA;AAC1E,QAAA,KAAA,CAAM,GAAA,CAAI,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,gBAAA,EAAkB,KAAA,IAAS,EAAE,CAAA;AAAA,MACtE,CAAC,CAAA;AACL,MAAA,OAAO,EAAA;AAAA,IACX;AAAA,GACH,CAAA;AACL;AAIA,IAAM,KAAA,GAAsC;AAAA,EACxC,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,kBAAStB,cAAAA,CAAC8C,2BAAA,EAAA,EAAgB,WAAU,QAAA,EAAS,CAAA;AAAA,EAC7C,KAAA,kBAAO9C,cAAAA,CAAC+C,wBAAA,EAAA,EAAa,WAAU,QAAA,EAAS,CAAA;AAAA,EACxC,OAAA,kBAAS/C,cAAAA,CAACgD,6BAAA,EAAA,EAAkB,WAAU,QAAA,EAAS,CAAA;AAAA,EAC/C,IAAA,kBAAMhD,cAAAA,CAACiD,oBAAA,EAAA,EAAS,WAAU,QAAA,EAAS,CAAA;AAAA,EACnC,OAAA,kBAASjD,cAAAA,CAACkD,uBAAA,EAAA,EAAY,WAAU,qBAAA,EAAsB;AAC1D,CAAA;AAEA,IAAM,iBAAA,GAA+C;AAAA,EACjD,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,iDAAA;AAAA,EACT,KAAA,EAAO,yCAAA;AAAA,EACP,OAAA,EAAS,6CAAA;AAAA,EACT,IAAA,EAAM,2CAAA;AAAA,EACN,OAAA,EAAS;AACb,CAAA;AAEA,IAAM,gBAAA,GAA8C;AAAA,EAChD,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,qCAAA;AAAA,EACT,KAAA,EAAO,iCAAA;AAAA,EACP,OAAA,EAAS,mCAAA;AAAA,EACT,IAAA,EAAM,kCAAA;AAAA,EACN,OAAA,EAAS;AACb,CAAA;AAIA,SAAS,UAAU,EAAE,EAAA,EAAI,MAAM,KAAA,EAAO,WAAA,EAAa,QAAO,EAAc;AACpE,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,IAAA,GAAO,MAAM,IAAI,CAAA;AAEvB,EAAA,uBACIjD,eAAAA;AAAA,IAACkC,cAAAA,CAAO,EAAA;AAAA,IAAP;AAAA,MACG,MAAA,EAAM,IAAA;AAAA,MACN,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,OAAO,IAAA,EAAK;AAAA,MAC1C,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,MACtC,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,OAAO,IAAA,EAAK;AAAA,MACvC,YAAY,UAAA,CAAW,KAAA;AAAA,MACvB,SAAA,EAAW,EAAA;AAAA,QACP,6KAAA;AAAA,QACA,iBAAiB,IAAI;AAAA,OACzB;AAAA,MACC,QAAA,EAAA;AAAA,QAAA,IAAA,oBAAQnC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,YAAY,iBAAA,CAAkB,IAAI,CAAC,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBAEzEC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACX,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAsC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACxD,+BACGA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8CAA8C,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,UAE1E,0BACGA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACG,SAAS,MAAA,CAAO,OAAA;AAAA,cAChB,SAAA,EAAU,yHAAA;AAAA,cACT,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACZ,SAAA,EAER,CAAA;AAAA,wBAEAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACG,OAAA,EAAS,MAAM,KAAA,CAAM,MAAA,CAAO,EAAE,CAAA;AAAA,YAC9B,YAAA,EAAW,SAAA;AAAA,YACX,SAAA,EAAU,2GAAA;AAAA,YACV,QAAA,kBAAAA,cAAAA,CAACmD,iBAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA;AAChC;AAAA;AAAA,GACJ;AAER;AAYA,IAAM,cAAA,GAAkD;AAAA,EACpD,WAAA,EAAa,yBAAA;AAAA,EACb,UAAA,EAAY,0BAAA;AAAA,EACZ,YAAA,EAAc,8CAAA;AAAA,EACd,cAAA,EAAgB,4BAAA;AAAA,EAChB,aAAA,EAAe,6BAAA;AAAA,EACf,eAAA,EAAiB;AACrB,CAAA;AAUA,SAAS,OAAA,CAAQ,EAAE,QAAA,GAAW,cAAA,EAAgB,UAAS,EAAiB;AACpE,EAAA,MAAM,CAAC,KAAK,CAAA,GAAIhC,cAAAA,CAAgB,WAAW,CAAA;AAC3C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAAsB,EAAE,CAAA;AAEpD,EAAAD,eAAAA,CAAU,MAAM,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEnD,EAAA,uBACIjB,eAAAA,CAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,OAAO,KAAA,EAC9B,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBACDD,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,WAAA,EAAU,QAAA;AAAA,QACV,YAAA,EAAW,eAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACP,uDAAA;AAAA,UACA,eAAe,QAAQ;AAAA,SAC3B;AAAA,QACA,QAAA,kBAAAA,cAAAA,CAAC6C,uBAAAA,EAAA,EAAgB,IAAA,EAAK,MAAA,EAAO,OAAA,EAAS,KAAA,EACjC,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,qBACT7C,eAAC,KAAA,EAAA,EAAe,SAAA,EAAU,qBAAA,EACtB,QAAA,kBAAAA,cAAAA,CAAC,SAAA,EAAA,EAAW,GAAG,CAAA,EAAG,CAAA,EAAA,EADZ,CAAA,CAAE,EAEZ,CACH,CAAA,EACL;AAAA;AAAA;AACJ,GAAA,EACJ,CAAA;AAER;ACjSA,IAAM,qBAAqBqB,mBAAAA,CAKzB;AAAA,EACE,IAAA,EAAM,IAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,WAAA,EAAa;AACjB,CAAC,CAAA;AAED,SAASa,YAAAA,CAAY;AAAA,EACjB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV,WAAA,GAAc,YAAA;AAAA,EACd,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAIO;AACH,EAAA,uBACIlC,cAAAA;AAAA,IAACoD,mBAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,cAAA,EAAc,OAAA;AAAA,MACd,kBAAA,EAAkB,WAAA;AAAA,MAClB,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAQ;AAAA,MAC1B,SAAA,EAAW,EAAA;AAAA,QACP,uLAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApD,cAAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,WAAA,EAAY,EACrE,QAAA,EACL;AAAA;AAAA,GACJ;AAER;AAEA,SAAS,eAAA,CAAgB;AAAA,EACrB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,GAAG;AACP,CAAA,EAA2F;AACvF,EAAA,MAAM,OAAA,GAAUsB,iBAAW,kBAAkB,CAAA;AAE7C,EAAA,uBACItB,cAAAA;AAAA,IAACoD,mBAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAc,QAAQ,OAAA,IAAW,OAAA;AAAA,MACjC,WAAA,EAAW,QAAQ,IAAA,IAAQ,IAAA;AAAA,MAC3B,gBAAc,OAAA,CAAQ,OAAA;AAAA,MACtB,SAAA,EAAW,EAAA;AAAA,QACP,k7BAAA;AAAA,QACA,cAAA,CAAe;AAAA,UACX,OAAA,EAAS,QAAQ,OAAA,IAAW,OAAA;AAAA,UAC5B,IAAA,EAAM,QAAQ,IAAA,IAAQ;AAAA,SACzB,CAAA;AAAA,QACD;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH;AAAA;AAAA,GACL;AAER;ACzEA,IAAM,sBAAA,GAAyBrD,0BAAAA;AAAA,EAC3B,ksBAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,+BAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACb;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,WAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAEA,IAAM,oBAAA,GAAuBA,0BAAAA;AAAA,EACzB,kJAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,+BAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACb,KACJ;AAAA,IACA,eAAA,EAAiB,EAAE,OAAA,EAAS,SAAA;AAAU;AAE9C,CAAA;AAEA,SAAS,eAAA,CAAgB;AAAA,EACrB,aAAA,GAAgB,GAAA;AAAA,EAChB,GAAG;AACP,CAAA,EAAqD;AACjD,EAAA,uBACIC,cAAAA;AAAA,IAACqD,eAAA,CAAiB,QAAA;AAAA,IAAjB;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,aAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,OAAA,CAAQ,EAAE,GAAG,KAAA,EAAM,EAAiD;AACzE,EAAA,uBAAOrD,eAACqD,eAAA,CAAiB,IAAA,EAAjB,EAAsB,WAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AACjE;AAEA,SAAS,cAAA,CAAe,EAAE,GAAG,KAAA,EAAM,EAAoD;AACnF,EAAA,uBAAOrD,eAACqD,eAAA,CAAiB,OAAA,EAAjB,EAAyB,WAAA,EAAU,iBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AAC5E;AAEA,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EACiD;AAC7C,EAAA,uBACIrD,cAAAA,CAACqD,eAAA,CAAiB,MAAA,EAAjB,EACG,QAAA,kBAAApD,eAAAA;AAAA,IAACoD,eAAA,CAAiB,OAAA;AAAA,IAAjB;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,UAAA;AAAA,MACA,SAAA,EAAW,GAAG,sBAAA,CAAuB,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MACjE,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDrD,cAAAA,CAACqD,eAAA,CAAiB,KAAA,EAAjB,EAAuB,SAAA,EAAW,EAAA,CAAG,oBAAA,CAAqB,EAAE,OAAA,EAAS,CAAC,CAAA,EAAG;AAAA;AAAA;AAAA,GAC9E,EACJ,CAAA;AAER;AC9EA,SAAS,OAAA,CAAQ,EAAE,GAAG,KAAA,EAAM,EAAiD;AACzE,EAAA,uBAAOrD,eAACsD,eAAA,CAAiB,IAAA,EAAjB,EAAsB,WAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AACjE;AAEA,SAAS,cAAA,CAAe,EAAE,GAAG,KAAA,EAAM,EAAoD;AACnF,EAAA,uBAAOtD,eAACsD,eAAA,CAAiB,OAAA,EAAjB,EAAyB,WAAA,EAAU,iBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AAC5E;AAEA,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,KAAA,GAAQ,QAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACP,CAAA,EAAoD;AAChD,EAAA,uBACItD,cAAAA,CAACsD,eAAA,CAAiB,MAAA,EAAjB,EACG,QAAA,kBAAAtD,cAAAA;AAAA,IAACsD,eAAA,CAAiB,OAAA;AAAA,IAAjB;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,4hBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAEA,SAAS,aAAA,CAAc,EAAE,GAAG,KAAA,EAAM,EAAmD;AACjF,EAAA,uBAAOtD,eAACsD,eAAA,CAAiB,MAAA,EAAjB,EAAwB,WAAA,EAAU,gBAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AAC1E;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACnE,EAAA,uBACItD,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA;AAAA,MACrD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyB;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,MAC/C,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAwB;AACtE,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,MAC/C,GAAG;AAAA;AAAA,GACR;AAER;AChEA,IAAM,UAAA,GAAa,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAE;AAC1D,IAAM,YAAA,GAAe,CAAC,GAAA,EAAK,GAAA,EAAK,KAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG;AAqB5D,SAAS,IAAA,CAAK;AAAA,EACV,IAAI,GAAA,GAAM,GAAA;AAAA,EACV,IAAA,GAAO,EAAA;AAAA,EACP,MAAA,GAAS,GAAA;AAAA,EACT,MAAA,GAAS,KAAA;AAAA,EACT,KAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAc;AACV,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACzC,KAAA,EAAO;AAAA,QACH,UAAA,EAAY,8BAAA;AAAA,QACZ,QAAA,EAAU,GAAG,IAAI,CAAA,EAAA,CAAA;AAAA,QACjB,UAAA,EAAY,MAAA;AAAA,QACZ,SAAA,EAAW,SAAS,QAAA,GAAW,QAAA;AAAA,QAC/B,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,QACzB,GAAG;AAAA,OACP;AAAA,MACC,GAAI,KAAA;AAAA,MACJ;AAAA;AAAA,GACL;AAER;ACzCA,IAAM,aAAA,GAAgBqB,oBAAc,KAAK,CAAA;AAIzC,SAAS,MAAA,CAAO,EAAE,QAAA,EAAU,GAAG,OAAM,EAAgD;AACjF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAIF,cAAAA,CAAS,KAAA,CAAM,eAAe,KAAK,CAAA;AAE3E,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,KAAS,MAAA,GAAY,MAAM,IAAA,GAAO,YAAA;AAEvD,EAAA,uBACInB,cAAAA,CAAC,aAAA,CAAc,UAAd,EAAuB,KAAA,EAAO,QAC3B,QAAA,kBAAAA,cAAAA;AAAA,IAACuD,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,CAAA,KAAM;AACjB,QAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,QAAA,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,MAC1B,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACH;AAAA;AAAA,GACL,EACJ,CAAA;AAER;AAIA,SAAS,aAAA,CAAc,EAAE,GAAG,KAAA,EAAM,EAAmD;AACjF,EAAA,uBAAOvD,eAACuD,cAAA,CAAgB,OAAA,EAAhB,EAAwB,WAAA,EAAU,gBAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AAC1E;AAIA,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,OAAM,EAAkD;AACzF,EAAA,MAAM,MAAA,GAASjC,iBAAW,aAAa,CAAA;AAEvC,EAAA,uBACItB,cAAAA,CAACuD,cAAA,CAAgB,QAAhB,EAAuB,WAAA,EAAU,iBAAgB,UAAA,EAAU,IAAA,EAAE,GAAG,KAAA,EAC7D,QAAA,kBAAAvD,eAAC6C,uBAAAA,EAAA,EAAgB,MAAK,MAAA,EAAQ,QAAA,EAAA,MAAA,IAAU,UAAS,CAAA,EACrD,CAAA;AAER;AAIA,SAAS,WAAA,CAAY,EAAE,GAAG,KAAA,EAAM,EAAiD;AAC7E,EAAA,uBAAO7C,eAACuD,cAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACtE;AAIA,SAAS,aAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACIvD,cAAAA,CAACuD,cAAA,CAAgB,OAAA,EAAhB,EAAwB,WAAA,EAAU,gBAAA,EAAiB,OAAA,EAAO,IAAA,EAAC,UAAA,EAAU,IAAA,EAAE,GAAG,OACvE,QAAA,kBAAAvD,cAAAA;AAAA,IAACmC,cAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,kFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,YAAY,EAAE,QAAA,EAAU,SAAS,MAAA,EAAQ,IAAA,EAAM,KAAK,MAAA;AAAO;AAAA,GAC/D,EACJ,CAAA;AAER;AAIA,SAAS,aAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACIlC,gBAAC,YAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAD,eAAC,aAAA,EAAA,EAAc,CAAA;AAAA,oBACfA,cAAAA;AAAA,MAACuD,cAAA,CAAgB,OAAA;AAAA,MAAhB;AAAA,QACG,WAAA,EAAU,gBAAA;AAAA,QACV,OAAA,EAAO,IAAA;AAAA,QACP,UAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACP,mQAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,QAAA,kBAAAtD,eAAAA;AAAA,UAACkC,cAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,4BAAA;AAAA,YACV,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,YACzC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,YACtC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,YACtC,YAAY,UAAA,CAAW,KAAA;AAAA,YACtB,QAAA,EAAA;AAAA,cAAA,QAAA;AAAA,cACA,eAAA,oBACGnC,cAAAA,CAACuD,cAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAe,OAAA,EAAO,IAAA,EACnD,QAAA,kBAAAtD,eAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACG,OAAA,EAAQ,OAAA;AAAA,kBACR,SAAA,EAAU,wBAAA;AAAA,kBACV,IAAA,EAAK,SAAA;AAAA,kBACL,QAAA,EAAA;AAAA,oCAAAD,cAAAA,CAACmD,mBAAA,EAAM,CAAA;AAAA,oCACPnD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA,eACnC,EACJ;AAAA;AAAA;AAAA;AAER;AAAA;AACJ,GAAA,EACJ,CAAA;AAER;AAIA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAClE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,wCAAA,EAA0C,SAAS,CAAA;AAAA,MAChE,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,YAAA,CAAa;AAAA,EAClB,SAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACIC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,uHAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,eAAA,oBACGD,cAAAA,CAACuD,cAAA,CAAgB,OAAhB,EAAsB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAvD,cAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,mBAAK,CAAA,EACrC;AAAA;AAAA;AAAA,GAER;AAER;AAIA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiD;AACxF,EAAA,uBACIA,cAAAA;AAAA,IAACuD,cAAA,CAAgB,KAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,MACrE,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAuD;AACnD,EAAA,uBACIvD,cAAAA;AAAA,IAACuD,cAAA,CAAgB,WAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,oGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACzLA,IAAM,kBAAA,GAAqBlC,oBAAc,KAAK,CAAA;AAI9C,SAAS,WAAA,CAAY;AAAA,EACjB,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAqD;AACjD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAIF,cAAAA,CAAS,KAAA,CAAM,eAAe,KAAK,CAAA;AAE3E,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,KAAS,MAAA,GAAY,MAAM,IAAA,GAAO,YAAA;AAEvD,EAAA,uBACInB,cAAAA,CAAC,kBAAA,CAAmB,UAAnB,EAA4B,KAAA,EAAO,QAChC,QAAA,kBAAAA,cAAAA;AAAA,IAACwD,mBAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,CAAA,KAAM;AACjB,QAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,QAAA,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,MAC1B,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACH;AAAA;AAAA,GACL,EACJ,CAAA;AAER;AAIA,SAAS,kBAAA,CAAmB;AAAA,EACxB,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBAAOxD,eAACwD,mBAAA,CAAqB,OAAA,EAArB,EAA6B,WAAA,EAAU,sBAAA,EAAwB,GAAG,KAAA,EAAO,CAAA;AACrF;AAIA,SAAS,iBAAA,CAAkB;AAAA,EACvB,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAuD;AACnD,EAAA,MAAM,MAAA,GAASlC,iBAAW,kBAAkB,CAAA;AAE5C,EAAA,uBACItB,cAAAA,CAACwD,mBAAA,CAAqB,QAArB,EAA4B,WAAA,EAAU,uBAAsB,UAAA,EAAU,IAAA,EAAE,GAAG,KAAA,EACxE,QAAA,kBAAAxD,eAAC6C,uBAAAA,EAAA,EAAgB,MAAK,MAAA,EAAQ,QAAA,EAAA,MAAA,IAAU,UAAS,CAAA,EACrD,CAAA;AAER;AAIA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACI7C,cAAAA;AAAA,IAACwD,mBAAA,CAAqB,OAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,OAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAU,IAAA;AAAA,MACT,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAxD,cAAAA;AAAA,QAACmC,cAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACG,SAAA,EAAW,EAAA;AAAA,YACP,0EAAA;AAAA,YACA;AAAA,WACJ;AAAA,UACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,UACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,UACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,UACnB,YAAY,EAAE,QAAA,EAAU,SAAS,MAAA,EAAQ,IAAA,EAAM,KAAK,MAAA;AAAO;AAAA;AAC/D;AAAA,GACJ;AAER;AAIA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAIG;AACC,EAAA,uBACIlC,gBAAC,iBAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,EAAA,CAAG,OAAA,KAAY,YAAA,IAAgB,gCAAgC;AAAA;AAAA,KAC9E;AAAA,oBACAA,cAAAA;AAAA,MAACwD,mBAAA,CAAqB,OAAA;AAAA,MAArB;AAAA,QACG,WAAA,EAAU,sBAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,cAAA,EAAc,OAAA;AAAA,QACd,OAAA,EAAO,IAAA;AAAA,QACP,UAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACP,kJAAA;AAAA,UACA,sFAAA;AAAA,UACA,YAAY,SAAA,IACR,qFAAA;AAAA,UACJ,YAAY,YAAA,IACR,gEAAA;AAAA,UACJ;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,QAAA,kBAAAvD,eAAAA;AAAA,UAACkC,cAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACG,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,YACzC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,YACtC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,YACtC,YAAY,UAAA,CAAW,KAAA;AAAA,YACtB,QAAA,EAAA;AAAA,cAAA,SAAA,oBACGnC,cAAAA,CAACwD,mBAAA,CAAqB,MAAA,EAArB,EAA4B,OAAA,EAAO,IAAA,EAChC,QAAA,kBAAAvD,eAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,oLAAA,EACd,QAAA,EAAA;AAAA,gCAAAD,cAAAA,CAACmD,iBAAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,gCAC5BnD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA,eAAA,EACnC,CAAA,EACJ,CAAA;AAAA,cAEH;AAAA;AAAA;AAAA;AACL;AAAA;AACJ,GAAA,EACJ,CAAA;AAER;AAIA,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACvE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,wNAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACvE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,6JAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACtE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,uKAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAsD;AAClD,EAAA,uBACIA,cAAAA;AAAA,IAACwD,mBAAA,CAAqB,KAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACIxD,cAAAA;AAAA,IAACwD,mBAAA,CAAqB,WAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,0BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,OAAA,GAAU,QAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAC6D;AACzD,EAAA,uBACIxD,eAACwD,mBAAA,CAAqB,MAAA,EAArB,EAA4B,WAAA,EAAU,qBAAA,EAAsB,SAAO,IAAA,EAAE,GAAG,OACrE,QAAA,kBAAAxD,cAAAA,CAAC,UAAO,OAAA,EAAkB,IAAA,EAAY,WAAW,EAAA,CAAG,SAAS,CAAA,EACxD,QAAA,EACL,CAAA,EACJ,CAAA;AAER;AAIA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,OAAA,GAAU,OAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAC6D;AACzD,EAAA,uBACIA,eAACwD,mBAAA,CAAqB,MAAA,EAArB,EAA4B,WAAA,EAAU,qBAAA,EAAsB,SAAO,IAAA,EAAE,GAAG,OACrE,QAAA,kBAAAxD,cAAAA,CAAC,UAAO,OAAA,EAAkB,IAAA,EAAY,WAAW,EAAA,CAAG,SAAS,CAAA,EACxD,QAAA,EACL,CAAA,EACJ,CAAA;AAER;AC3PA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmD;AACxF,EAAA,uBACIA,cAAAA;AAAA,IAACyD,iBAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,uFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,aAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACIzD,cAAAA;AAAA,IAACyD,iBAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA;AAAA,MACvE,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAsD;AAClD,EAAA,uBACIzD,cAAAA,CAACyD,iBAAA,CAAmB,QAAnB,EAA0B,SAAA,EAAU,QACjC,QAAA,kBAAAxD,eAAAA;AAAA,IAACwD,iBAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,yNAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDzD,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB,WAAU,yEAAA,EAA0E;AAAA;AAAA;AAAA,GACzG,EACJ,CAAA;AAER;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAsD;AAClD,EAAA,uBACIhB,cAAAA;AAAA,IAACyD,iBAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAU,iIAAA;AAAA,MACT,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAzD,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,SAAA,EAAW,EAAA;AAAA,YACP,iHAAA;AAAA,YACA;AAAA,WACJ;AAAA,UACC;AAAA;AAAA;AACL;AAAA,GACJ;AAER;AC3CA,SAAS,QAAA,CAAS;AAAA,EACd,OAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA,GAAc,qBAAA;AAAA,EACd,iBAAA,GAAoB,WAAA;AAAA,EACpB,YAAA,GAAe,mBAAA;AAAA,EACf,QAAA,GAAW,KAAA;AAAA,EACX;AACJ,CAAA,EAAkB;AACd,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAImB,eAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,WAAW,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,KAAK,CAAA;AAE1D,EAAA,uBACIlB,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACnB,QAAA,kBAAAC,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,OAAA,EAAQ,WAAA;AAAA,QACR,QAAA;AAAA,QACA,eAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAW,EAAA;AAAA,UACP,uFAAA;AAAA,UACA,uEAAA;AAAA,UACA,CAAC,QAAA,IAAY,uBAAA;AAAA,UACb;AAAA,SACJ;AAAA,QACA,QAAA,EAAA;AAAA,0BAAAD,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAY,QAAA,EAAA,QAAA,GAAW,QAAA,CAAS,QAAQ,WAAA,EAAY,CAAA;AAAA,0BACpEA,cAAAA,CAAC0D,8BAAA,EAAA,EAAmB,IAAA,EAAM,EAAA,EAAI,WAAU,gCAAA,EAAiC;AAAA;AAAA;AAAA,KAC7E,EACJ,CAAA;AAAA,oBACA1D,cAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,qBAAA,EAAsB,KAAA,EAAM,OAAA,EAClD,QAAA,kBAAAC,eAAAA,CAAC0D,YAAA,EAAA,EAAQ,SAAA,EAAU,YAAA,EACf,QAAA,EAAA;AAAA,sBAAA1D,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EACX,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC4D,sBAAA,EAAA,EAAW,IAAA,EAAM,EAAA,EAAI,WAAU,gCAAA,EAAiC,CAAA;AAAA,wBACjE5D,cAAAA;AAAA,UAAC2D,YAAA,CAAQ,KAAA;AAAA,UAAR;AAAA,YACG,WAAA,EAAa,iBAAA;AAAA,YACb,SAAA,EAAU;AAAA;AAAA;AACd,OAAA,EACJ,CAAA;AAAA,sBACA1D,eAAAA,CAAC0D,YAAA,CAAQ,IAAA,EAAR,EAAa,WAAU,8BAAA,EACpB,QAAA,EAAA;AAAA,wBAAA3D,eAAC2D,YAAA,CAAQ,KAAA,EAAR,EAAc,SAAA,EAAU,kDACpB,QAAA,EAAA,YAAA,EACL,CAAA;AAAA,QACC,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACV1D,eAAAA;AAAA,UAAC0D,YAAA,CAAQ,IAAA;AAAA,UAAR;AAAA,YAEG,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,QAAA,EAAU,CAAC,MAAA,CAAO,KAAK,CAAA;AAAA,YACvB,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,UAAU,MAAM;AACZ,cAAA,aAAA,GAAgB,MAAA,CAAO,KAAA,KAAU,KAAA,GAAQ,EAAA,GAAK,OAAO,KAAK,CAAA;AAC1D,cAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,YACjB,CAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACP,mHAAA;AAAA,cACA,4EAAA;AAAA,cACA,0EAAA;AAAA,cACA;AAAA,aACJ;AAAA,YACA,QAAA,EAAA;AAAA,8BAAA3D,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,cACnB,KAAA,KAAU,MAAA,CAAO,KAAA,oBACdA,cAAAA;AAAA,gBAACqC,qBAAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAM,EAAA;AAAA,kBACN,SAAA,EAAU;AAAA;AAAA;AACd;AAAA,WAAA;AAAA,UAnBC,MAAA,CAAO;AAAA,SAsBnB;AAAA,OAAA,EACL;AAAA,KAAA,EACJ,CAAA,EACJ;AAAA,GAAA,EACJ,CAAA;AAER;ACjGA,SAAS,YAAA,CAAa,EAAE,GAAG,KAAA,EAAM,EAAsD;AACnF,EAAA,uBAAOrC,cAAAA,CAAC6D,oBAAA,CAAsB,IAAA,EAAtB,EAA4B,GAAG,KAAA,EAAO,CAAA;AAClD;AAEA,SAAS,kBAAA,CAAmB;AAAA,EACxB,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBAAO7D,cAAAA,CAAC6D,oBAAA,CAAsB,MAAA,EAAtB,EAA8B,GAAG,KAAA,EAAO,CAAA;AACpD;AAEA,SAAS,mBAAA,CAAoB;AAAA,EACzB,GAAG;AACP,CAAA,EAAyD;AACrD,EAAA,uBAAO7D,eAAC6D,oBAAA,CAAsB,OAAA,EAAtB,EAA8B,WAAA,EAAU,uBAAA,EAAyB,GAAG,KAAA,EAAO,CAAA;AACvF;AAEA,SAAS,mBAAA,CAAoB;AAAA,EACzB,SAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACP,CAAA,EAAyD;AACrD,EAAA,uBACI7D,cAAAA,CAAC6D,oBAAA,CAAsB,MAAA,EAAtB,EACG,QAAA,kBAAA7D,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,OAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,uBAAA;AAAA,MACV,UAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,0rBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAEA,SAAS,iBAAA,CAAkB,EAAE,GAAG,KAAA,EAAM,EAAuD;AACzF,EAAA,uBAAO7D,eAAC6D,oBAAA,CAAsB,KAAA,EAAtB,EAA4B,WAAA,EAAU,qBAAA,EAAuB,GAAG,KAAA,EAAO,CAAA;AACnF;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACP,CAAA,EAGG;AACC,EAAA,uBACI7D,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,IAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA,QACP,ypBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,wBAAA,CAAyB;AAAA,EAC9B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACI5D,eAAAA;AAAA,IAAC4D,oBAAA,CAAsB,YAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,6BAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACP,yWAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,OAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA7D,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAU,uEAAA;AAAA,YACV,WAAA,EAAU,uCAAA;AAAA,YACV,QAAA,kBAAAA,cAAAA,CAAC6D,oBAAA,CAAsB,aAAA,EAAtB,EACG,QAAA,kBAAA7D,cAAAA,CAACqC,qBAAAA,EAAA,EAAU,aAAA,EAAY,MAAA,EAAO,CAAA,EAClC;AAAA;AAAA,SACJ;AAAA,QACC;AAAA;AAAA;AAAA,GACL;AAER;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBAAOrC,eAAC6D,oBAAA,CAAsB,UAAA,EAAtB,EAAiC,WAAA,EAAU,2BAAA,EAA6B,GAAG,KAAA,EAAO,CAAA;AAC9F;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC3B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACI5D,eAAAA;AAAA,IAAC4D,oBAAA,CAAsB,SAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,0BAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACP,yWAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA7D,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAU,uEAAA;AAAA,YACV,WAAA,EAAU,oCAAA;AAAA,YACV,QAAA,kBAAAA,cAAAA,CAAC6D,oBAAA,CAAsB,aAAA,EAAtB,EACG,QAAA,kBAAA7D,cAAAA,CAACqC,qBAAAA,EAAA,EAAU,aAAA,EAAY,MAAA,EAAO,CAAA,EAClC;AAAA;AAAA,SACJ;AAAA,QACC;AAAA;AAAA;AAAA,GACL;AAER;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACIrC,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,KAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,6DAAA,EAA+D,SAAS,CAAA;AAAA,MACrF,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC3B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA2D;AACvD,EAAA,uBACI7D,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,SAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,oBAAA,CAAqB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AAC3E,EAAA,uBACI7D,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,6GAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,eAAA,CAAgB,EAAE,GAAG,KAAA,EAAM,EAAqD;AACrF,EAAA,uBAAOA,eAAC6D,oBAAA,CAAsB,GAAA,EAAtB,EAA0B,WAAA,EAAU,mBAAA,EAAqB,GAAG,KAAA,EAAO,CAAA;AAC/E;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACI5D,eAAAA;AAAA,IAAC4D,oBAAA,CAAsB,UAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,2BAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACP,kYAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD7D,cAAAA,CAACQ,4BAAAA,EAAA,EAAiB,SAAA,EAAU,SAAA,EAAU,eAAY,MAAA,EAAO;AAAA;AAAA;AAAA,GAC7D;AAER;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACIR,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,UAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qiBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AC5MA,IAAM,WAAA,GAAc,CAAC,KAAA,KAAkB;AACnC,EAAA,MAAM,QAAQ,CAAC,GAAA,EAAK,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAChD,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,OAAO,IAAA,IAAQ,IAAA,IAAQ,SAAA,GAAY,KAAA,CAAM,SAAS,CAAA,EAAG;AACjD,IAAA,IAAA,IAAQ,IAAA;AACR,IAAA,SAAA,EAAA;AAAA,EACJ;AAEA,EAAA,OAAO,CAAA,EAAG,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAChD,CAAA;AAEA,IAAM,eAAA,GAAkBxC,oBAA+C,MAAS,CAAA;AAEhF,IAAM,gBAAA,GAAmBtB,2BAAI,EAAA,EAAI;AAAA,EAC7B,QAAA,EAAU;AAAA,IACN,MAAA,EAAQ;AAAA,MACJ,OAAA,EAAS,cAAA;AAAA,MACT,MAAA,EAAQ;AAAA;AACZ,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,MAAA,EAAQ;AAAA;AAEhB,CAAC,CAAA;AAUM,IAAM,WAAW,CAAC;AAAA,EACrB,MAAA;AAAA,EACA,QAAA,GAAW,CAAA;AAAA,EACX,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAqB;AACjB,EAAA,MAAM,EAAE,YAAA,EAAc,aAAA,EAAe,YAAA,KAAiB+D,yBAAA,CAAY;AAAA,IAC9D,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA,EAAQ,CAAC,aAAA,EAAe,cAAA,EAAgB,KAAA,KAAU;AAC9C,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC3B,QAAA,MAAM,OAAA,GAAU,eAAe,EAAA,CAAG,CAAC,GAAG,MAAA,CAAO,EAAA,CAAG,CAAC,CAAA,EAAG,OAAA;AACpD,QAAA,OAAA,GAAU,IAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,MAChC;AACA,MAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC1B,QAAA,MAAA,GAAS,aAAA,EAAe,gBAAgB,KAAK,CAAA;AAAA,MACjD;AAAA,IACJ,CAAA;AAAA,IACA,GAAG;AAAA,GACN,CAAA;AAED,EAAA,uBACI9D,cAAAA;AAAA,IAAC,eAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MAEG,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,OAAA,EAAS,SAAS,QAAA,EAAS;AAAA,MACjD,QAAA,kBAAAC,eAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,WAAA,EAAU,UAAA;AAAA,UACV,eAAa,MAAA,IAAU,SAAA;AAAA,UACvB,SAAA,EAAW,EAAA;AAAA,YACP,qDAAA;AAAA,YACA,gBAAA,CAAiB,EAAE,MAAA,EAAQ,CAAA;AAAA,YAC3B,YAAA,IAAgB,uBAAA;AAAA,YAChB;AAAA,WACJ;AAAA,UACA,QAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,SAAA;AAAA,UACP,GAAG,YAAA,EAAa;AAAA,UACjB,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,OAAA,EAAA,EAAO,GAAG,aAAA,IAAiB,QAAA,EAAoB,CAAA;AAAA,YAC/C;AAAA;AAAA;AAAA;AACL,KAAA;AAAA,IAjBK,IAAA,CAAK,UAAU,GAAG;AAAA,GAkB3B;AAER;AAEA,IAAM,qBAAqB,MAAM;AAC7B,EAAA,MAAM,OAAA,GAAUsB,iBAAW,eAAe,CAAA;AAE1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACvE;AAEA,EAAA,OAAO,OAAA;AACX,CAAA;AAOA,IAAM,aAAA,GAAgB,CAAA;AAEf,IAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAU,WAAU,KAA4B;AAC9E,EAAA,MAAM,EAAE,GAAA,EAAI,GAAI,kBAAA,EAAmB;AAEnC,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,OAAO,QAAA;AAAA,EACX;AAEA,EAAA,uBACIrB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA,EACrE,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,SAAI,SAAA,EAAU,mFAAA,EACX,0BAAAA,cAAAA,CAAC+D,sBAAA,EAAA,EAAW,IAAA,EAAM,EAAA,EAAI,CAAA,EAC1B,CAAA;AAAA,oBACA/D,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0DAAA,EACR,QAAA,EAAA,GAAA,CAAI,MAAA,GAAS,aAAA,GACR,CAAA,EAAG,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA;AAAA,MACzB,GAAA,CAAI,MAAM,CAAA,EAAG,aAAa,EAAE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI;AAAA,KACtD,CAAA,KAAA,EAAQ,GAAA,CAAI,SAAS,aAAa,CAAA,KAAA,CAAA,GACnC,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA,CAAO,IAAI,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,EACvE,CAAA;AAAA,oBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8DAA6D,QAAA,EAAA,mCAAA,EAE1E;AAAA,GAAA,EACJ,CAAA;AAER;AAOO,IAAM,kBAAA,GAAqB,CAAC,EAAE,QAAA,EAAU,WAAU,KAA+B;AACpF,EAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAQ,SAAS,OAAA,EAAS,QAAA,KAAa,kBAAA,EAAmB;AAEvE,EAAA,IAAI,GAAA,EAAK;AACL,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,OAAO,QAAA;AAAA,EACX;AAEA,EAAA,IAAI,OAAA,GAAU,EAAA;AAEd,EAAA,IAAI,MAAA,EAAQ;AACR,IAAA,OAAA,IAAW,UAAA;AACX,IAAA,OAAA,IAAW,IAAI,KAAK,UAAA,CAAW,IAAI,EAAE,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EACnE;AAEA,EAAA,IAAI,WAAW,OAAA,EAAS;AACpB,IAAA,OAAA,IAAW,YAAY,WAAA,CAAY,OAAO,CAAC,CAAA,KAAA,EAAQ,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA;AAAA,EAC3E,WAAW,OAAA,EAAS;AAChB,IAAA,OAAA,IAAW,CAAA,UAAA,EAAa,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA;AAAA,EAChD,WAAW,OAAA,EAAS;AAChB,IAAA,OAAA,IAAW,CAAA,WAAA,EAAc,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA;AAAA,EACjD;AAEA,EAAA,uBACIC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA,EACrE,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,SAAI,SAAA,EAAU,mFAAA,EACX,0BAAAA,cAAAA,CAAC+D,sBAAA,EAAA,EAAW,IAAA,EAAM,EAAA,EAAI,CAAA,EAC1B,CAAA;AAAA,oBACA9D,eAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uEAAA,EAAwE,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MACzE,QAAA,KAAa,IAAI,QAAA,GAAW;AAAA,KAAA,EACxC,CAAA;AAAA,oBACAD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mEAAkE,QAAA,EAAA,kCAAA,EAE/E,CAAA;AAAA,IAEC,OAAA,oBACGC,eAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,qDAAA,EAAuD,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MAAQ;AAAA,KAAA,EAAC;AAAA,GAAA,EAErF,CAAA;AAER;ACxMA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACjE,EAAA,uBACID,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,6HAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACvE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA;AAAA,MACnE,GAAG;AAAA;AAAA,GACR;AAER;AAEA,IAAM,kBAAA,GAAqBD,0BAAAA;AAAA,EACvB,6FAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,gBAAA;AAAA,QACT,IAAA,EAAM;AAAA;AACV,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS;AAAA;AACb;AAER,CAAA;AAEA,SAAS,UAAA,CAAW;AAAA,EAChB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACP,CAAA,EAA0E;AACtE,EAAA,uBACIC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,YAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAW,EAAA,CAAG,kBAAA,CAAmB,EAAE,OAAA,EAAS,SAAA,EAAW,CAAC,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACtE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oDAAA,EAAsD,SAAS,CAAA;AAAA,MAC5E,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8B;AAC1E,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,yGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,iFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACpFA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAC/D,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,iGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAqC;AAC9E,EAAA,uBACIA,cAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,WAAA,EAAY,YAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC9B,GAAG;AAAA;AAAA,GACR;AAER;AAEA,IAAM,YAAA,GAAeD,0BAAAA;AAAA,EACjB,6OAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,qCAAA;AAAA,QACT,OAAA,EAAS,sBAAA;AAAA,QACT,KAAA,EAAO,kDAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,IAAA,EAAM;AAAA,QACF,OAAA,EAAS,qBAAA;AAAA,QACT,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEA,SAAS,IAAA,CAAK;AAAA,EACV,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACP,CAAA,EAAsF;AAClF,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUK,YAAAA,CAAK,IAAA,GAAO,KAAA;AACnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,YAAA,CAAa,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,IAAM,iBAAA,GAAoBD,0BAAAA;AAAA,EACtB,gMAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,gBAAA;AAAA,QACT,IAAA,EAAM,sCAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACX,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS;AAAA;AACb;AAER,CAAA;AAEA,SAAS,SAAA,CAAU;AAAA,EACf,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACP,CAAA,EAAmE;AAC/D,EAAA,uBACIC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,YAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAW,EAAA,CAAG,iBAAA,CAAkB,EAAE,OAAA,EAAS,SAAA,EAAW,CAAC,CAAA;AAAA,MACtD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAC/D,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAwB;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,oIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oDAAA,EAAsD,SAAS,CAAA;AAAA,MAC5E,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oDAAA,EAAsD,SAAS,CAAA;AAAA,MAC5E,GAAG;AAAA;AAAA,GACR;AAER;ACvKA,SAAS,UAAA,CAAW;AAAA,EAChB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAoD;AAChD,EAAA,uBACIA,cAAAA;AAAA,IAACgE,kBAAA,CAAoB,IAAA;AAAA,IAApB;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA;AAAA,MAC3C,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAoD;AAChD,EAAA,uBACIhE,cAAAA;AAAA,IAACgE,kBAAA,CAAoB,IAAA;AAAA,IAApB;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,skBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAhE,cAAAA;AAAA,QAACgE,kBAAA,CAAoB,SAAA;AAAA,QAApB;AAAA,UACG,WAAA,EAAU,uBAAA;AAAA,UACV,SAAA,EAAU,yCAAA;AAAA,UACV,QAAA,kBAAAhE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qHAAA,EAAsH;AAAA;AAAA;AAC1I;AAAA,GACJ;AAER;AC5BA,IAAM,YAAA,GAAe;AAAA,EACjB,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAMA,IAAM,eAAA,GAAkBD,2BAAI,uBAAA,EAAyB;AAAA,EACjD,QAAA,EAAU;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,cAAA;AAAA,MACT,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,uBAAA;AAAA,MACP,WAAA,EAAa,kBAAA;AAAA,MACb,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEf,CAAC;AAKD,SAAS,QAAQ,EAAE,SAAA,EAAW,MAAM,KAAA,EAAO,GAAG,OAAM,EAAiB;AACjE,EAAA,uBACIC,cAAAA;AAAA,IAACkD,uBAAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,SAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,GAAG,eAAA,CAAgB,EAAE,MAAM,KAAA,EAAO,GAAG,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA,GACR;AAER;AAMA,IAAM,qBAAA,GAAwBnD,2BAAI,uBAAA,EAAyB;AAAA,EACvD,QAAA,EAAU;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,cAAA;AAAA,MACT,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,uBAAA;AAAA,MACP,WAAA,EAAa,kBAAA;AAAA,MACb,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEf,CAAC;AAOD,SAAS,cAAc,EAAE,SAAA,EAAW,MAAM,KAAA,EAAO,GAAG,OAAM,EAAuB;AAC7E,EAAA,uBACIC,cAAAA;AAAA,IAACiE,sBAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,GAAG,qBAAA,CAAsB,EAAE,MAAM,KAAA,EAAO,GAAG,SAAS,CAAA;AAAA,MAC9D,GAAG;AAAA;AAAA,GACR;AAER;AAMA,IAAM,mBAAA,GAAsBlE,2BAAI,mBAAA,EAAqB;AAAA,EACjD,QAAA,EAAU;AAAA,IACN,IAAA,EAAM;AAAA,MACF,EAAA,EAAI,6BAAA;AAAA,MACJ,EAAA,EAAI,2BAAA;AAAA,MACJ,EAAA,EAAI,4BAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACR;AAAA,IACA,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,cAAA;AAAA,MACT,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,uBAAA;AAAA,MACP,WAAA,EAAa,kBAAA;AAAA,MACb,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEf,CAAC;AAMD,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,IAAA,EAAM,OAAM,EAAqB;AAC/D,EAAA,uBACIE,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,GAAG,mBAAA,CAAoB,EAAE,MAAM,KAAA,EAAO,GAAG,SAAS,CAAA;AAAA,MAC5D,QAAA,EAAA;AAAA,QAAA,CAAC,GAAG,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,sBACZD,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEG,SAAA,EAAU,yBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACH,SAAA,EAAW,mCAAA;AAAA,cACX,cAAA,EAAgB,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,CAAA;AAAA;AAC9B,WAAA;AAAA,UALK;AAAA,SAOZ,CAAA;AAAA,wBACDA,eAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,EAKZ;AAAA;AAAA;AAAA,GACA;AAER;AC3IA,IAAMkE,eAAAA,GAAiBnE,0BAAAA;AAAA,EACnB,6lBAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,wDAAA;AAAA,QACT,OAAA,EACI,kKAAA;AAAA,QACJ,SAAA,EACI,gLAAA;AAAA,QACJ,KAAA,EAAO,kHAAA;AAAA,QACP,WAAA,EACI,6NAAA;AAAA,QACJ,IAAA,EAAM;AAAA,OAEV;AAAA,MACA,IAAA,EAAM;AAAA,QACF,OAAA,EACI,wFAAA;AAAA,QACJ,EAAA,EAAI,iIAAA;AAAA,QACJ,EAAA,EAAI,kFAAA;AAAA,QACJ,EAAA,EAAI,qFAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,6CAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW;AAAA;AACf,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEA,SAASoE,OAAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACP,CAAA,EAGO;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,GAAU/D,YAAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAGkE,eAAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACR;AAER;AC1DA,SAASE,OAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAA4B;AACnE,EAAA,uBACIpE,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACG,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,4mBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACVA,SAASqE,OAAAA,CAAO,EAAE,GAAG,KAAA,EAAM,EAAgD;AACvE,EAAA,uBAAOrE,eAACoC,cAAAA,CAAgB,IAAA,EAAhB,EAAqB,WAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC/D;AAYA,SAASkC,YAAAA,CAAY,EAAE,GAAG,KAAA,EAAM,EAAiD;AAC7E,EAAA,uBAAOtE,eAACoC,cAAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACtE;AAEA,SAASmC,cAAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACItE,eAAAA;AAAA,IAACmC,cAAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACP,uxBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDpC,cAAAA,CAACoC,cAAAA,CAAgB,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EACzB,QAAA,kBAAApC,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB,SAAA,EAAU,oDAAmD,CAAA,EAClF;AAAA;AAAA;AAAA,GACJ;AAER;AAEA,SAASwD,cAAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,cAAA;AAAA,EACX,KAAA,GAAQ,QAAA;AAAA,EACR,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACIxE,cAAAA,CAACoC,cAAAA,CAAgB,MAAA,EAAhB,EACG,QAAA,kBAAAnC,eAAAA;AAAA,IAACmC,cAAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,sBAAoB,QAAA,KAAa,cAAA;AAAA,MACjC,SAAA,EAAW,EAAA;AAAA,QACP,0oBAAA;AAAA,QACA,aAAa,QAAA,IACT,iIAAA;AAAA,QACJ;AAAA,OACJ;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAApC,cAAAA,CAACyE,uBAAA,EAAqB,CAAA;AAAA,wBACtBzE,cAAAA;AAAA,UAACoC,cAAAA,CAAgB,QAAA;AAAA,UAAhB;AAAA,YACG,eAAA,EAAe,QAAA;AAAA,YACf,SAAA,EAAW,EAAA;AAAA,cACP,oJAAA;AAAA,cACA,aAAa,QAAA,IAAY;AAAA,aAC7B;AAAA,YACC;AAAA;AAAA,SACL;AAAA,wBACApC,cAAAA,CAAC0E,uBAAAA,EAAA,EAAuB;AAAA;AAAA;AAAA,GAC5B,EACJ,CAAA;AAER;AAYA,SAASC,WAAAA,CAAW;AAAA,EAChB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAgD;AAC5C,EAAA,uBACI1E,eAAAA;AAAA,IAACmC,cAAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qaAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAApC,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8EAAA,EACZ,QAAA,kBAAAA,eAACoC,cAAAA,CAAgB,aAAA,EAAhB,EACG,QAAA,kBAAApC,eAACqC,qBAAAA,EAAA,EAAU,SAAA,EAAU,qBAAA,EAAsB,GAC/C,CAAA,EACJ,CAAA;AAAA,wBACArC,cAAAA,CAACoC,cAAAA,CAAgB,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AAAA,GACxC;AAER;AAeA,SAASqC,qBAAAA,CAAqB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA0D;AACtD,EAAA,uBACIzE,cAAAA;AAAA,IAACoC,cAAAA,CAAgB,cAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,2GAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApC,cAAAA,CAACsC,yBAAAA,EAAA,EAAc;AAAA;AAAA,GACnB;AAER;AAEA,SAASoC,uBAAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACI1E,cAAAA;AAAA,IAACoC,cAAAA,CAAgB,gBAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,2GAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApC,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB;AAAA;AAAA,GACrB;AAER;AC5HA,IAAM,kBAAA,GAAqBK,oBAAmD,MAAS,CAAA;AAEhF,IAAM,iBAAiB,MAAM;AAChC,EAAA,MAAM,OAAA,GAAUC,iBAAW,kBAAkB,CAAA;AAE7C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC9E;AAEA,EAAA,OAAO,OAAA;AACX;AAQO,IAAM,cAAc,CAAC;AAAA,EACxB,KAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAwB;AACpB,EAAA,MAAM,YAAY,KAAA,KAAU,MAAA,GAAYsD,uBAAM,KAAK,CAAA,GAAIA,uBAAM,YAAY,CAAA;AAEzE,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,IAAIzD,cAAAA,CAAS,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,IAAIA,cAAAA,CAAS,SAAA,CAAU,aAAa,CAAA;AACpE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,IAAIA,cAAAA,CAAS,SAAA,CAAU,WAAW,CAAA;AAChE,EAAA,MAAM,CAAC,OAAO,QAAQ,CAAA,GAAIA,eAAS,SAAA,CAAU,KAAA,KAAU,GAAG,CAAA;AAC1D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,WAAA,GAAcF,aAAO,QAAQ,CAAA;AACnC,EAAA,MAAM,OAAA,GAAUA,aAAO,KAAK,CAAA;AAC5B,EAAAC,gBAAU,MAAM;AACZ,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EAC1B,CAAC,CAAA;AAGD,EAAAA,gBAAU,MAAM;AACZ,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,MAAM,KAAA,GAAQ0D,uBAAM,KAAK,CAAA;AAEzB,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAClB,MAAA,aAAA,CAAc,KAAA,CAAM,aAAa,CAAA;AACjC,MAAA,YAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AAC9B,MAAA,QAAA,CAAS,KAAA,CAAM,KAAA,EAAM,GAAI,GAAG,CAAA;AAAA,IAChC;AAAA,EACJ,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAA1D,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AAClB,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,YAAY,OAAA,EAAS;AACrB,MAAA,MAAM,KAAA,GAAQ0D,uBAAM,GAAA,CAAI,GAAA,EAAK,YAAY,SAAS,CAAA,CAAE,KAAA,CAAM,KAAA,GAAQ,GAAG,CAAA;AACrE,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,EAAI,CAAE,KAAA,EAAM;AAE/B,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA,GAAQ,GAAG,CAAC,CAAA;AAAA,IAChE;AAAA,EACJ,GAAG,CAAC,GAAA,EAAK,UAAA,EAAY,SAAA,EAAW,KAAK,CAAC,CAAA;AAEtC,EAAA,uBACI5E,cAAAA;AAAA,IAAC,kBAAA,CAAmB,QAAA;AAAA,IAAnB;AAAA,MACG,KAAA,EAAO;AAAA,QACH,GAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA;AAAA,QACA,aAAA;AAAA,QACA,YAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,+BAAA,EAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAAA;AAAA,GAC/E;AAER;AAIO,IAAM,uBAAuB6E,UAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAiC;AAC7F,EAAA,MAAM,YAAA,GAAe5D,aAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIE,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,EAAE,GAAA,EAAK,aAAA,EAAe,YAAA,KAAiB,cAAA,EAAe;AAE5D,EAAA,MAAM,kBAAA,GAAqBsB,cAAQ,MAAM;AACrC,IAAA,OAAO,CAAA;AAAA;AAAA,gBAAA,EAEG,GAAG,CAAA,YAAA,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,iBAAA,GAAoBrB,iBAAAA;AAAA,IACtB,CAAC,KAAA,KAAwB;AACrB,MAAA,IAAI,EAAE,UAAA,IAAc,YAAA,CAAa,OAAA,CAAA,EAAU;AACvC,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,OAAA,CAAQ,qBAAA,EAAsB;AACxD,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,CAAC,CAAA;AAC3E,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAC3E,MAAA,YAAA,CAAa,CAAC,CAAA;AACd,MAAA,YAAA,CAAa,CAAC,CAAA;AACd,MAAA,aAAA,CAAc,IAAI,GAAG,CAAA;AACrB,MAAA,MAAM,eAAe,CAAA,GAAI,IAAA,GAAO,GAAA,GAAM,EAAA,GAAK,MAAM,CAAA,GAAI,CAAA,CAAA;AACrD,MAAA,MAAM,SAAA,GAAY,gBAAgB,CAAA,GAAI,CAAA,CAAA;AAEtC,MAAA,YAAA,CAAa,SAAS,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,aAAA,EAAe,YAAY;AAAA,GAC5C;AAEA,EAAAF,gBAAU,MAAM;AACZ,IAAA,MAAM,eAAA,GAAkB,MAAM,aAAA,CAAc,KAAK,CAAA;AAEjD,IAAA,IAAI,UAAA,EAAY;AACZ,MAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,iBAAiB,CAAA;AACxD,MAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,eAAe,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,MAAM;AACT,MAAA,MAAA,CAAO,mBAAA,CAAoB,eAAe,iBAAiB,CAAA;AAC3D,MAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,eAAe,CAAA;AAAA,IAC3D,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,UAAA,EAAY,iBAAiB,CAAC,CAAA;AAElC,EAAA,uBACIlB,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,MACtE,aAAA,EAAe,CAAC,CAAA,KAAM;AAClB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,aAAA,CAAc,IAAI,CAAA;AAClB,QAAA,iBAAA,CAAkB,EAAE,WAAW,CAAA;AAAA,MACnC,CAAA;AAAA,MACA,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO;AAAA,QACH,UAAA,EAAY;AAAA,OAChB;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,SAAA,EAAU,2GAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACH,IAAA,EAAM,CAAA,EAAG,SAAA,GAAY,GAAG,CAAA,CAAA,CAAA;AAAA,YACxB,GAAA,EAAK,CAAA,EAAG,SAAA,GAAY,GAAG,CAAA,CAAA,CAAA;AAAA,YACvB,SAAA,EAAW;AAAA;AACf;AAAA;AACJ;AAAA,GACJ;AAER,CAAC;AAED,oBAAA,CAAqB,WAAA,GAAc,sBAAA;AAI5B,IAAM,iBAAiB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAA2B;AAC5E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAO,GAAI,cAAA,EAAe;AAEvC,EAAA,uBACIC,eAAAA;AAAA,IAAC6E,cAAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,MAC9D,GAAA,EAAK,GAAA;AAAA,MACL,eAAe,CAAC,CAACC,IAAG,CAAA,KAAM,OAAOA,IAAG,CAAA;AAAA,MACpC,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,CAAC,GAAG,CAAA;AAAA,MACV,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA/E,cAAAA,CAAC8E,cAAAA,CAAO,KAAA,EAAP,EAAa,SAAA,EAAU,kIAAA,EACpB,QAAA,kBAAA9E,cAAAA,CAAC8E,cAAAA,CAAO,KAAA,EAAP,EAAa,SAAA,EAAU,mBAAkB,CAAA,EAC9C,CAAA;AAAA,wBACA9E,cAAAA,CAAC8E,cAAAA,CAAO,KAAA,EAAP,EAAa,WAAU,qNAAA,EAAsN;AAAA;AAAA;AAAA,GAClP;AAER;AAIO,IAAM,mBAAmB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAA6B;AAChF,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,KAAK,UAAA,EAAY,SAAA,KAAc,cAAA,EAAe;AACvE,EAAA,MAAM,aAAaF,sBAAA,CAAM,GAAA,CAAI,KAAK,UAAA,EAAY,SAAS,EAAE,GAAA,EAAI;AAE7D,EAAA,uBACI3E,eAAAA;AAAA,IAAC6E,cAAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,MAC9D,GAAA,EAAK,GAAA;AAAA,MACL,eAAe,CAAC,CAACE,MAAK,CAAA,KAAM,SAASA,MAAK,CAAA;AAAA,MAC1C,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,CAAC,KAAK,CAAA;AAAA,MACZ,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA/E,eAAAA;AAAA,UAAC6E,cAAAA,CAAO,KAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,8CAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACH,UAAA,EACI;AAAA,aACR;AAAA,YACA,QAAA,EAAA;AAAA,8BAAA9E,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACG,SAAA,EAAU,+BAAA;AAAA,kBACV,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAA,CAAA;AAAI;AAAA,eACjF;AAAA,8BACAA,cAAAA,CAAC8E,cAAAA,CAAO,KAAA,EAAP,EAAa,WAAU,6CAAA,EAA8C;AAAA;AAAA;AAAA,SAC1E;AAAA,wBACA9E,cAAAA;AAAA,UAAC8E,cAAAA,CAAO,KAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,uMAAA;AAAA,YACV,KAAA,EAAO,EAAE,eAAA,EAAiB,UAAA;AAAW;AAAA;AACzC;AAAA;AAAA,GACJ;AAER;AAIO,IAAM,wBAAwB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAkC;AAC1F,EAAA,MAAM,EAAE,MAAA,EAAQ,aAAA,EAAe,YAAA,EAAc,QAAA,KAAa,cAAA,EAAe;AAEzE,EAAA,MAAM,mBAAmB,YAAY;AACjC,IAAA,IAAI;AAEA,MAAA,MAAM,UAAA,GAAa,IAAI,UAAA,EAAW;AAClC,MAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,IAAA,EAAK;AACrC,MAAA,MAAM,KAAA,GAAQF,sBAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AAClC,MAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAC,IAAI,KAAA,CAAM,GAAA,GAAM,KAAA,EAAM;AAEpC,MAAA,MAAA,CAAO,CAAC,CAAA;AACR,MAAA,aAAA,CAAc,CAAC,CAAA;AACf,MAAA,YAAA,CAAa,CAAC,CAAA;AACd,MAAA,QAAA,CAAS,GAAG,CAAA;AAAA,IAChB,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,KAAK,CAAA;AAAA,IAC7C;AAAA,EACJ,CAAA;AAEA,EAAA,uBACI5E,cAAAA;AAAA,IAACmE,OAAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MACzD,OAAA,EAAS,gBAAA;AAAA,MACT,IAAA,EAAK,MAAA;AAAA,MACL,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAQ,SAAA;AAAA,MACP,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAnE,cAAAA,CAACiF,uBAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,GAC3B;AAER;AAIA,IAAM,OAAA,GAAU,CAAC,KAAA,EAAO,KAAK,CAAA;AAEtB,IAAM,iBAAA,GAAoB,CAAC,EAAE,GAAG,OAAM,KAA8B;AACvE,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,cAAA,EAAe;AAEzC,EAAA,uBACIhF,eAAAA,CAACoE,OAAAA,EAAA,EAAO,aAAA,EAAe,OAAA,EAAS,OAAO,IAAA,EACnC,QAAA,EAAA;AAAA,oBAAArE,cAAAA;AAAA,MAACuE,cAAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAU,oDAAA;AAAA,QACT,GAAG,KAAA;AAAA,QACJ,QAAA,kBAAAvE,cAAAA,CAACsE,YAAAA,EAAA,EAAY,aAAY,MAAA,EAAO;AAAA;AAAA,KACpC;AAAA,oBACAtE,eAACwE,cAAAA,EAAA,EACI,kBAAQ,GAAA,CAAI,CAAChD,4BACVxB,cAAAA;AAAA,MAAC2E,WAAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAU,oCAAA;AAAA,QAEV,KAAA,EAAOnD,OAAAA;AAAA,QACN,QAAA,EAAAA,QAAO,WAAA;AAAY,OAAA;AAAA,MAFfA;AAAA,KAIZ,CAAA,EACL;AAAA,GAAA,EACJ,CAAA;AAER;AAOA,IAAM,eAAA,GAAkB,CAAC,EAAE,KAAA,EAAO,UAAU,SAAA,EAAW,GAAG,OAAM,KAA4B;AACxF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,IAAIL,cAAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAE1D,EAAAD,gBAAU,MAAM;AACZ,IAAA,aAAA,CAAc,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA2C;AAC7D,IAAA,MAAM,GAAA,GAAM,EAAE,MAAA,CAAO,KAAA;AAErB,IAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,GAAG,CAAA,EAAG;AAE9B,IAAA,MAAM,GAAA,GAAM,WAAW,GAAG,CAAA;AAE1B,IAAA,IAAI,MAAM,GAAA,EAAK;AACX,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,QAAA,CAAS,GAAG,CAAA;AACZ,MAAA;AAAA,IACJ;AAEA,IAAA,aAAA,CAAc,GAAG,CAAA;AACjB,IAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG;AACb,MAAA,QAAA,CAAS,GAAG,CAAA;AAAA,IAChB;AAAA,EACJ,CAAA;AAEA,EAAA,uBACIjB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAACoE,MAAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAU,SAAA;AAAA,QACV,KAAA,EAAO,UAAA;AAAA,QACP,QAAA,EAAU,YAAA;AAAA,QACT,GAAG,KAAA;AAAA,QACJ,SAAA,EAAW,EAAA;AAAA,UACP,kLAAA;AAAA,UACA;AAAA;AACJ;AAAA,KACJ;AAAA,oBACApE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2EAA0E,QAAA,EAAA,GAAA,EAE1F;AAAA,GAAA,EACJ,CAAA;AAER,CAAA;AAIO,IAAM,oBAAoB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAA8B;AAClF,EAAA,MAAM,EAAE,KAAK,UAAA,EAAY,SAAA,EAAW,OAAO,QAAA,EAAU,IAAA,KAAS,cAAA,EAAe;AAC7E,EAAA,MAAM,QAAQ4E,sBAAA,CAAM,GAAA,CAAI,KAAK,UAAA,EAAY,SAAA,EAAW,QAAQ,GAAG,CAAA;AAE/D,EAAA,IAAI,SAAS,KAAA,EAAO;AAChB,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,EAAI;AACtB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,MAAO,GAAG,CAAA,CAC1C,QAAA,CAAS,EAAE,CAAA,CACX,QAAA,CAAS,CAAA,EAAG,GAAG,EACf,WAAA,EAAY;AACjB,IAAA,MAAM,aAAa,KAAA,GAAQ,GAAA,GAAM,GAAG,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,GAAK,GAAA;AAEvD,IAAA,uBACI3E,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,EAAA;AAAA,UACP,gEAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,QAAA,EAAA;AAAA,0BAAAD,cAAAA;AAAA,YAACoE,MAAAA;AAAA,YAAA;AAAA,cACG,SAAA,EAAU,+CAAA;AAAA,cACV,QAAA,EAAQ,IAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO;AAAA;AAAA,WACX;AAAA,0BACApE,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,KAAA,EAAO,UAAU,QAAA,EAAU;AAAA;AAAA;AAAA,KACvD;AAAA,EAER;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAChB,IAAA,MAAM,GAAA,GAAM,KAAA,CACP,GAAA,EAAI,CACJ,KAAA,EAAM,CACN,GAAA,CAAI,CAAC,KAAA,KAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAErC,IAAA,uBACIA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,qBAAqB,SAAS,CAAA,EAAI,GAAG,KAAA,EACpD,QAAA,kBAAAA,cAAAA;AAAA,MAACoE,MAAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAU,yDAAA;AAAA,QACV,QAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,OAAO,CAAA,KAAA,EAAQ,GAAA,CAAI,KAAK,IAAI,CAAC,KAAK,KAAK,CAAA,EAAA,CAAA;AAAA,QACtC,GAAG;AAAA;AAAA,KACR,EACJ,CAAA;AAAA,EAER;AACA,EAAA,OAAO,IAAA;AACX;AAMO,IAAM,qBAAqB,CAAC,EAAE,QAAQ,SAAA,EAAW,GAAG,OAAM,KAA+B;AAC5F,EAAA,MAAM,EAAE,GAAA,EAAK,UAAA,EAAY,SAAA,EAAW,KAAA,EAAO,QAAQ,aAAA,EAAe,YAAA,EAAc,QAAA,EAAS,GACrF,cAAA,EAAe;AACnB,EAAA,MAAM,UAAA,GAAaQ,uBAAM,GAAA,CAAI,GAAA,EAAK,YAAY,SAAA,EAAW,KAAA,GAAQ,GAAG,CAAA,CAAE,GAAA,EAAI;AAE1E,EAAA,uBACI5E,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA,EAAI,GAAG,KAAA,EACxD,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,IAAA,MAAM,QAAA,GAAW4E,uBAAM,GAAG,CAAA,CAAE,KAAI,CAAE,WAAA,EAAY,KAAM,UAAA,CAAW,WAAA,EAAY;AAE3E,IAAA,uBACI5E,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEG,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACP,2DAAA;AAAA,UACA,iCAAA;AAAA,UACA,QAAA,IAAY;AAAA,SAChB;AAAA,QACA,KAAA,EAAO,EAAE,eAAA,EAAiB,GAAA,EAAI;AAAA,QAC9B,SAAS,MAAM;AACX,UAAA,MAAM,KAAA,GAAQ4E,uBAAM,GAAG,CAAA;AACvB,UAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAC,IAAI,KAAA,CAAM,GAAA,GAAM,KAAA,EAAM;AAEpC,UAAA,MAAA,CAAO,CAAC,CAAA;AACR,UAAA,aAAA,CAAc,CAAC,CAAA;AACf,UAAA,YAAA,CAAa,CAAC,CAAA;AACd,UAAA,QAAA,CAAS,GAAG,CAAA;AAAA,QAChB,CAAA;AAAA,QACA,YAAA,EAAY,GAAA;AAAA,QACZ,KAAA,EAAO;AAAA,OAAA;AAAA,MAlBF;AAAA,KAmBT;AAAA,EAER,CAAC,CAAA,EACL,CAAA;AAER;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;ACnajC,SAAS,UAAA,CAAW;AAAA,EAChB,IAAA,GAAO,QAAA;AAAA,EACP,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,aAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACJ,CAAA,EAAoB;AAChB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIzD,eAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,KAAA,GAAQsB,cAAQ,MAAM;AACxB,IAAA,IAAI,SAAS,OAAA,EAAS;AAClB,MAAA,MAAM,KAAA,GAAQ,QAAA;AACd,MAAA,IAAI,KAAA,EAAO,QAAQ,KAAA,EAAO,EAAA;AACtB,QAAA,OAAO,CAAA,EAAGjB,cAAAA,CAAO,KAAA,CAAM,IAAA,EAAM,aAAa,CAAC,CAAA,QAAA,EAAMA,cAAAA,CAAO,KAAA,CAAM,EAAA,EAAI,aAAa,CAAC,CAAA,CAAA;AACpF,MAAA,IAAI,KAAA,EAAO,MAAM,OAAO,CAAA,EAAGA,eAAO,KAAA,CAAM,IAAA,EAAM,aAAa,CAAC,CAAA,cAAA,CAAA;AAC5D,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,MAAM,IAAA,GAAO,QAAA;AACb,IAAA,OAAO,IAAA,GAAOA,cAAAA,CAAO,IAAA,EAAM,aAAa,CAAA,GAAI,WAAA;AAAA,EAChD,CAAA,EAAG,CAAC,IAAA,EAAM,QAAA,EAAU,WAAW,CAAC,CAAA;AAEhC,EAAA,MAAM,QAAA,GACF,SAAS,OAAA,GACH,CAAC,CAAE,QAAA,EAAoC,IAAA,GACvC,CAAC,CAAE,QAAA;AAEb,EAAA,uBACIvB,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACnB,QAAA,kBAAAC,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,WAAA,EAAU,qBAAA;AAAA,QACV,OAAA,EAAQ,SAAA;AAAA,QACR,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACP,sCAAA;AAAA,UACA,CAAC,QAAA,IAAY,YAAA;AAAA,UACb;AAAA,SACJ;AAAA,QACA,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAACkF,wBAAA,EAAA,EAAa,SAAA,EAAU,iBAAA,EAAkB,CAAA;AAAA,0BAC1ClF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAY,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,KACtC,EACJ,CAAA;AAAA,oBACAA,cAAAA,CAAC,cAAA,EAAA,EAAe,WAAA,EAAU,qBAAA,EAAsB,SAAA,EAAU,YAAA,EAAa,KAAA,EAAM,OAAA,EACxE,QAAA,EAAA,IAAA,KAAS,OAAA,mBACNA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACI,GAAI;AAAA,UACD,IAAA,EAAM,OAAA;AAAA,UACN,QAAA;AAAA,UACA,QAAA,EAAU,CAAC,KAAA,KAAiC;AACxC,YAAC,WAAgD,KAAK,CAAA;AACtD,YAAA,IAAI,KAAA,EAAO,EAAA,EAAI,OAAA,CAAQ,KAAK,CAAA;AAAA,UAChC,CAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,UACA,cAAA,EAAgB,CAAA;AAAA,UAChB,YAAA,EAAc;AAAA;AAClB;AAAA,wBAGJA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACI,GAAI;AAAA,UACD,IAAA,EAAM,QAAA;AAAA,UACN,QAAA;AAAA,UACA,QAAA,EAAU,CAAC,IAAA,KAA2B;AAClC,YAAC,WAAiD,IAAI,CAAA;AACtD,YAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,UACjB,CAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,UACA,YAAA,EAAc;AAAA;AAClB;AAAA,KACJ,EAER;AAAA,GAAA,EACJ,CAAA;AAER;ACzEA,IAAM,IAAA,GAAO,CAAC,KAAA,qBACVC,eAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,YAAA,EAAW,MAAA;AAAA,IACX,IAAA,EAAK,KAAA;AAAA,IACL,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,KAAA;AAAA,IACP,OAAA,EAAQ,aAAA;AAAA,IACR,KAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAM,4BAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACJ,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,KAAA,EAAM,EAAA,EAAG,OAAA,EAAQ,KAAA,EAAM,KAAA,EAAM,CAAA,EAAE,KAAA,EAAM,CAAA;AAAA,sBACtEA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,KAAA,EAAM,IAAG,OAAA,EAAQ,IAAA,EAAK,OAAA,EAAQ,CAAA,EAAE,IAAA,EAAK;AAAA;AAAA;AACpD;AAOJ,IAAM,mBAAA,GAA2C;AAAA,EAC7C,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,YAAA,EAAa;AAAA,EACxC,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,WAAA,EAAY;AAAA,EACzC,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,UAAA;AAChC,CAAA;AAEA,IAAM,sBAAA,GAA0C;AAAA,EAC5C,EAAE,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,MAAA,EAAO;AAAA,EAC3B;AAAA,IACI,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,WAAA;AAAA,IACP,aAAA,EAAe;AAAA,MACX,EAAE,IAAA,EAAM,oBAAA,EAAsB,KAAA,EAAO,kBAAA,EAAmB;AAAA,MACxD,EAAE,IAAA,EAAM,oBAAA,EAAsB,KAAA,EAAO,SAAA,EAAU;AAAA,MAC/C,EAAE,IAAA,EAAM,qBAAA,EAAuB,KAAA,EAAO,UAAA;AAAW;AACrD,GACJ;AAAA,EACA,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,SAAA,EAAW,QAAQ,IAAA,EAAK;AAAA,EACnD,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA;AAC5B,CAAA;AAMA,SAAS,WAAA,CAAY;AAAA,EACjB,IAAA;AAAA,EACA;AACJ,CAAA,EAGG;AACC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAImB,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,GAAA,GAAMF,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,WAAA,GAAc,CAAC,CAAC,IAAA,CAAK,aAAA,EAAe,MAAA;AAE1C,EAAA,uBACIhB,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAU,iCAAA;AAAA,MACV,YAAA,EAAc,MAAM,WAAA,IAAe,OAAA,CAAQ,IAAI,CAAA;AAAA,MAC/C,YAAA,EAAc,MAAM,WAAA,IAAe,OAAA,CAAQ,KAAK,CAAA;AAAA,MAChD,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACG,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAAA,YAC5B,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,cAAA,CAAA,CAAE,cAAA,EAAe;AACjB,cAAA,cAAA,GAAiB,KAAK,IAAI,CAAA;AAAA,YAC9B,CAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACP,oFAAA;AAAA,cACA,IAAA,CAAK,SACC,0IAAA,GACA;AAAA,aACV;AAAA,YACC,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,IAAA;AAAA,cACL,IAAA,CAAK,KAAA;AAAA,cACL,+BACGD,cAAAA;AAAA,gBAACgB,2BAAAA;AAAA,gBAAA;AAAA,kBACG,SAAA,EAAW,EAAA;AAAA,oBACP,0CAAA;AAAA,oBACA,IAAA,IAAQ;AAAA;AACZ;AAAA;AACJ;AAAA;AAAA,SAER;AAAA,QAGC,+BACGhB,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,yHAAA;AAAA,cACA,OACM,+CAAA,GACA;AAAA,aACV;AAAA,YACA,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACV,QAAA,EAAA,IAAA,CAAK,aAAA,CAAe,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAC5BC,eAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBAEG,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAAA,gBAC5B,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,kBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,kBAAA,cAAA,GAAiB,KAAK,IAAI,CAAA;AAC1B,kBAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,gBACjB,CAAA;AAAA,gBACA,SAAA,EAAU,uGAAA;AAAA,gBACT,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,IAAA;AAAA,kBACL,IAAA,CAAK;AAAA;AAAA,eAAA;AAAA,cATD;AAAA,aAWZ,CAAA,EACL;AAAA;AAAA;AACJ;AAAA;AAAA,GAER;AAER;AAMO,IAAM,MAAA,GAASkF,gBAAA;AAAA,EAClB,CACI;AAAA,IACI,SAAA;AAAA,IACA,IAAA,mBAAOnF,cAAAA,CAAC,IAAA,EAAA,EAAK,CAAA;AAAA,IACb,SAAA,GAAY,cAAA;AAAA,IACZ,YAAA,GAAe,mBAAA;AAAA,IACf,eAAA,GAAkB,sBAAA;AAAA,IAClB,iBAAA,GAAoB,CAAA;AAAA,IACpB,SAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,GAAG;AAAA,KAEP,GAAA,KACC;AACD,IAAA,MAAM,YAAA,GAAeiB,aAAoB,IAAI,CAAA;AAC7C,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIE,eAAS,KAAK,CAAA;AAE9C,IAAAD,gBAAU,MAAM;AACZ,MAAA,MAAM,aAAa,MAAM;AACrB,QAAA,IAAI,aAAa,OAAA,EAAS;AACtB,UAAA,WAAA,CAAY,YAAA,CAAa,OAAA,CAAQ,WAAA,GAAc,GAAG,CAAA;AAAA,QACtD;AAAA,MACJ,CAAA;AACA,MAAA,UAAA,EAAW;AACX,MAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,UAAU,CAAA;AACxC,MAAA,IAAI,YAAA,CAAa,OAAA,EAAS,EAAA,CAAG,OAAA,CAAQ,aAAa,OAAO,CAAA;AACzD,MAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,IAC/B,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,WAAA,GAAcE,iBAAAA;AAAA,MAChB,CAAC,IAAA,KAA6B;AAC1B,QAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,QAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,aAAA,IAC9B,GAAA,MAAS,OAAA,GAAU,IAAA;AAAA,MAChC,CAAA;AAAA,MACA,CAAC,GAAG;AAAA,KACR;AAEA,IAAA,uBACInB,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,GAAA,EAAK,WAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACP,wEAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,SAAI,SAAA,EAAU,mDAAA,EACX,0BAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iFAAA,EAEX,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACX,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6DAAA,EACX,QAAA,EAAA,IAAA,EACL,CAAA;AAAA,cACC,CAAC,QAAA,oBACEA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAA0B,QAAA,EAAA,SAAA,EAAU;AAAA,aAAA,EAE5D,CAAA;AAAA,YAGC,CAAC,QAAA,oBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACX,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC4D,sBAAAA,EAAA,EAAW,SAAA,EAAU,gGAAA,EAAiG,CAAA;AAAA,8BACvH5D,cAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAK,MAAA;AAAA,kBACL,WAAA,EAAY,mCAAA;AAAA,kBACZ,OAAA,EAAS,aAAA;AAAA,kBACT,SAAA,EAAU;AAAA;AAAA;AACd,aAAA,EACJ,CAAA;AAAA,4BAIJA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACV,0BAAgB,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACxBA,cAAAA,CAAC,WAAA,EAAA,EAAoB,MAAY,cAAA,EAAA,EAAf,CAA+C,CACpE,CAAA,EACL;AAAA,WAAA,EACJ,CAAA,EACJ,CAAA;AAAA,0BAEAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDACX,QAAA,kBAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACX,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACV,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACrBC,eAAAA,CAACI,cAAAA,EAAA,EACI,QAAA,EAAA;AAAA,cAAA,CAAA,GAAI,qBACDL,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAA+B,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,8BAEpDA,cAAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAAA,kBAC5B,SAAA,EAAU,uEAAA;AAAA,kBACT,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACV,aAAA,EAAA,EARW,CASf,CACH,CAAA,EACL,CAAA;AAAA,4BAEAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACX,QAAA,EAAA;AAAA,8BAAAA,eAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAK,QAAA;AAAA,kBACL,SAAA,EAAU,yJAAA;AAAA,kBACV,QAAA,EAAA;AAAA,oCAAAD,cAAAA,CAACoF,oBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,oBAC9B,oBAAoB,CAAA,oBACjBpF,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gEAAA,EAAiE;AAAA;AAAA;AAAA,eAEzF;AAAA,8BACAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,WAAA;AAAA,kBACT,SAAA,EAAU,gJAAA;AAAA,kBACV,QAAA,kBAAAA,cAAAA,CAACqF,0BAAA,EAAA,EAAe,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,eACzC;AAAA,cAAA,CACE,SAAA,IAAa,mCACXrF,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,aAAA;AAAA,kBACT,SAAA,EAAU,kCAAA;AAAA,kBACV,QAAA,kBAAAC,eAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EACR,QAAA,EAAA;AAAA,oBAAA,SAAA,oBAAaD,cAAAA,CAAC,WAAA,EAAA,EAAY,KAAK,SAAA,EAAW,GAAA,EAAK,kBAAkB,aAAA,EAAe,CAAA;AAAA,oCACjFA,cAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,cAAA,EAAe;AAAA,mBAAA,EACpC;AAAA;AAAA;AACJ,aAAA,EAER;AAAA,WAAA,EACJ,CAAA,EACJ;AAAA;AAAA;AAAA,KACJ;AAAA,EAER;AACJ;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AC5SrB,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACIC,eAAAA;AAAA,IAACqF,sBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,eAAA,EAAe,QAAA;AAAA,MACf,SAAA,EAAW,EAAA;AAAA,QACP,kFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,QAAA,oBAAYtF,cAAAA,CAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAAA,GACzC;AAER;AAEA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACIA,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,+DAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACItF,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,IAAM,0BAAA,GAA6BvF,0BAAAA;AAAA,EAC/B;AACJ;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC3B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA2D;AACvD,EAAA,uBACIE,eAAAA;AAAA,IAACqF,sBAAA,CAAwB,OAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA2B,EAAG,SAAS,SAAS,CAAA;AAAA,MAC7D,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAU,GAAA;AAAA,wBACXtF,cAAAA;AAAA,UAACgB,2BAAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAU,iKAAA;AAAA,YACV,aAAA,EAAY;AAAA;AAAA;AAChB;AAAA;AAAA,GACJ;AAER;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC3B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA2D;AACvD,EAAA,uBACIhB,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,OAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qiDAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACItF,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,2DAA2D,GAC1E,QAAA,kBAAAA,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,QAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,0BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qYAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAEA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACItF,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gXAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,uBAAA,CAAwB;AAAA,EAC7B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA6D;AACzD,EAAA,uBACItF,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,SAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,4LAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAtF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EAAyE;AAAA;AAAA,GAC5F;AAER;ACnIA,IAAM,iBAAiBqB,mBAAAA,CAAmC;AAAA,EACtD,IAAA,EAAM,IAAA;AAAA,EACN,SAAS,MAAM;AAAA,EAAC,CAAA;AAAA,EAChB,QAAA,EAAU;AACd,CAAC,CAAA;AAEM,SAAS,UAAA,GAAa;AACzB,EAAA,OAAOC,iBAAW,cAAc,CAAA;AACpC;AAYO,IAAM,eAAA,GAAkB6D,gBAAAA;AAAA,EAC3B,CACI,EAAE,WAAA,GAAc,IAAA,EAAM,IAAA,EAAM,cAAA,EAAgB,YAAA,EAAc,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EACxF,GAAA,KACC;AACD,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIhE,eAAS,WAAW,CAAA;AAC5D,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9C,IAAA,MAAM,YAAA,GAAeF,aAAuB,IAAI,CAAA;AAEhD,IAAA,MAAM,OAAO,cAAA,IAAkB,YAAA;AAC/B,IAAA,MAAM,OAAA,GAAUG,iBAAAA;AAAA,MACZ,CAAC,KAAA,KAAmB;AAChB,QAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,QAAA,YAAA,GAAe,KAAK,CAAA;AAAA,MACxB,CAAA;AAAA,MACA,CAAC,YAAY;AAAA,KACjB;AAEA,IAAAF,gBAAU,MAAM;AACZ,MAAA,MAAM,QAAQ,MAAM;AAChB,QAAA,MAAM,KAAK,YAAA,CAAa,OAAA;AACxB,QAAA,IAAI,EAAA,EAAI,WAAA,CAAY,EAAA,CAAG,WAAA,GAAc,GAAG,CAAA;AAAA,MAC5C,CAAA;AACA,MAAA,KAAA,EAAM;AACN,MAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,KAAK,CAAA;AACnC,MAAA,IAAI,YAAA,CAAa,OAAA,EAAS,EAAA,CAAG,OAAA,CAAQ,aAAa,OAAO,CAAA;AACzD,MAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,IAC/B,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,uBACIlB,cAAAA,CAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAS,EACtD,QAAA,kBAAAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,GAAA,EAAK,CAAC,IAAA,KAAS;AACX,UAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,UAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,eAAA,IAC9B,GAAA,MAAS,OAAA,GAAU,IAAA;AAAA,QAChC,CAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,QAC5D,GAAG,KAAA;AAAA,QACH;AAAA;AAAA,KACL,EACJ,CAAA;AAAA,EAER;AACJ;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAWvB,IAAM,OAAA,GAAUmF,gBAAAA;AAAA,EACnB,CAAC,EAAE,WAAA,GAAc,WAAA,EAAa,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACnE,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,UAAA,EAAW;AAE5B,IAAA,uBACInF,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,GAAA;AAAA,QACA,YAAA,EAAY,OAAO,UAAA,GAAa,WAAA;AAAA,QAChC,SAAA,EAAW,EAAA;AAAA,UACP,kJAAA;AAAA,UACA,IAAA,GAAO,MAAA,GAAS,WAAA,KAAgB,MAAA,GAAS,MAAA,GAAS,qBAAA;AAAA,UAClD;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACH;AAAA;AAAA,KACL;AAAA,EAER;AACJ,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,SAAA;AAMf,IAAM,cAAA,GAAiBmF,iBAG5B,CAAC,EAAE,WAAW,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzC,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,UAAA,EAAW;AACrC,EAAA,uBACIlF,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MACnC,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,QAAA,OAAA,GAAU,CAAC,CAAA;AACX,QAAA,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,MACjB,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAACuF,gBAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBACzBvF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,gBAAA,EAAc;AAAA;AAAA;AAAA,GAC5C;AAER,CAAC;AACD,cAAA,CAAe,WAAA,GAAc,gBAAA;AAMtB,IAAM,aAAA,GAAgBmF,gBAAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACtBnF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGhB,CAAA;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAErB,IAAM,cAAA,GAAiBmF,iBAG5B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBnF,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,GAAA;AAAA,IACA,WAAA,EAAU,iBAAA;AAAA,IACV,SAAA,EAAW,EAAA;AAAA,MACP,kEAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH,CAAA;AACD,cAAA,CAAe,WAAA,GAAc,gBAAA;AAEtB,IAAM,aAAA,GAAgBmF,gBAAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACtBnF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGhB,CAAA;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAMrB,IAAM,YAAA,GAAemF,gBAAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACtBnF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA;AAGhB,CAAA;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;AAEpB,IAAM,iBAAA,GAAoBmF,iBAG/B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBnF,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACP,mFAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH,CAAA;AACD,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAEzB,IAAM,mBAAA,GAAsBmF,iBAGjC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBnF,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,GAAA;AAAA,IACA,WAAA,EAAU,uBAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,IAC/C,GAAG;AAAA;AACR,CACH,CAAA;AACD,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AAM3B,IAAM,WAAA,GAAcmF,iBAGzB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBnF,cAAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACG,GAAA;AAAA,IACA,WAAA,EAAU,cAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA;AAAA,IACjE,GAAG;AAAA;AACR,CACH,CAAA;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAEnB,IAAM,eAAA,GAAkBmF,gBAAAA;AAAA,EAC3B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACtBnF,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG;AAAA;AAAA;AAGhB,CAAA;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAWvB,IAAM,iBAAA,GAAoBmF,gBAAAA;AAAA,EAC7B,CAAC,EAAE,OAAA,EAAS,QAAA,EAAU,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,UAAA,EAAW;AAC5B,IAAA,MAAM,IAAA,GAAO,OAAA,GAAU/E,YAAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,IAAA,uBACIJ,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,GAAA;AAAA,QACA,eAAa,QAAA,IAAY,MAAA;AAAA,QACzB,SAAA,EAAW,EAAA;AAAA,UACP,uHAAA;AAAA,UACA,yFAAA;AAAA,UACA,kGAAA;AAAA,UACA,CAAC,IAAA,IAAQ,qBAAA;AAAA,UACT;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACH,QAAA,EAAAwF,cAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAC,OAAO,CAAA,KAAM;AAClC,UAAA,IAAI,CAAA,KAAM,CAAA,IAAKC,oBAAA,CAAuC,KAAK,CAAA,EAAG;AAC1D,YAAA,OAAOC,mBAAa,KAAA,EAAO;AAAA,cACvB,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,KAAA,CAAM,MAAM,SAAS;AAAA,aACzD,CAAA;AAAA,UACL;AACA,UAAA,IAAI,CAAA,GAAI,CAAA,IAAK,CAAC,IAAA,EAAM,OAAO,IAAA;AAC3B,UAAA,OAAO,KAAA;AAAA,QACX,CAAC;AAAA;AAAA,KACL;AAAA,EAER;AACJ,CAAA;AACA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AClQhC,IAAM,YAAA,GAA8B;AAAA,EAChC,EAAE,KAAA,EAAO,MAAA,EAAQ,sBAAM1F,cAAAA,CAAC2F,qBAAM,CAAA,EAAG;AAAA,EACjC,EAAE,KAAA,EAAO,WAAA,EAAa,sBAAM3F,cAAAA,CAAC4F,qBAAM,CAAA,EAAG;AAAA,EACtC,EAAE,KAAA,EAAO,SAAA,EAAW,sBAAM5F,cAAAA,CAAC6F,sBAAO,CAAA,EAAG;AAAA,EACrC,EAAE,KAAA,EAAO,MAAA,EAAQ,sBAAM7F,cAAAA,CAAC8F,mCAAoB,CAAA;AAChD,CAAA;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAU,EAA0B;AACxD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,UAAA,EAAW;AAC5B,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,uBACI7F,eAAAA,CAAAI,mBAAAA,EAAA,EACI,QAAA,EAAA;AAAA,oBAAAL,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oHACV,QAAA,EAAA,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EACvB,CAAA;AAAA,oBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAkC,QAAA,EAAA,SAAA,EAAU;AAAA,GAAA,EAChE,CAAA;AAER;AAEO,SAAS,OAAA,CAAQ;AAAA,EACpB,KAAA,GAAQ,YAAA;AAAA,EACR,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA,GAAY,cAAA;AAAA,EACZ,UAAA,GAAa,IAAA;AAAA,EACb,SAAA;AAAA,EACA;AACJ,CAAA,EAAiB;AACb,EAAA,uBACIC,eAAAA,CAAC,eAAA,EAAA,EAAgB,WAAW,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA,EAC/C,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAQ,WAAA,EAAY,MAAA,EACjB,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sCAAA,EACrB,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAQ,SAAA,EAAU,WAAU,iBAAA,EAAkB,CAAA;AAAA,wBAC9DA,cAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAsB;AAAA,OAAA,EACxC,CAAA;AAAA,sBACAA,cAAAA,CAAC,cAAA,EAAA,EACG,0BAAAA,cAAAA,CAAC,YAAA,EAAA,EACG,0BAAAA,cAAAA,CAAC,mBAAA,EAAA,EACG,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EACI,gBAAM,GAAA,CAAI,CAAC,yBACRA,cAAAA,CAAC,mBACG,QAAA,kBAAAC,eAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACG,QAAA,EAAU,UAAA,KAAe,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,MAAA;AAAA,UAC5C,SAAS,MAAM;AACX,YAAA,IAAA,CAAK,OAAA,IAAU;AACf,YAAA,WAAA,GAAc,KAAK,KAAK,CAAA;AAAA,UAC5B,CAAA;AAAA,UACC,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,IAAA;AAAA,4BACND,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA;AAAA;AAAA,WARJ,IAAA,CAAK,KAU3B,CACH,CAAA,EACL,CAAA,EACJ,GACJ,CAAA,EACJ;AAAA,KAAA,EACJ,CAAA;AAAA,oBACAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACV,QAAA,EAAA;AAAA,MAAA,UAAA,oBACGD,cAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,sDAAA,EACd,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,SAAA,EAAU,CAAA,EACrD,CAAA;AAAA,sBAEJA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA8B,QAAA,EAAS;AAAA,KAAA,EAC3D;AAAA,GAAA,EACJ,CAAA;AAER;ACtGA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,wJAAA;AAAA,QACA,mCAAA;AAAA,QACA,2EAAA;AAAA,QACA,8EAAA;AAAA,QACA,sFAAA;AAAA,QACA,+EAAA;AAAA,QAEA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACdA,IAAM,oBAAA,GAAuBqB,oBAAgD,IAAI,CAAA;;;ACK1E,IAAM,mBAAA,GAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAA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","file":"main.cjs","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 { X } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nconst alertVariants = cva('relative w-full rounded-lg border border-l-[3px] p-4', {\n variants: {\n variant: {\n default: 'border-border border-l-border bg-card text-card-foreground',\n info: 'border-blue-200 border-l-blue-400 bg-blue-50 text-blue-700',\n success: 'border-emerald-200 border-l-emerald-400 bg-emerald-50 text-emerald-700',\n warning: 'border-amber-200 border-l-amber-400 bg-amber-50 text-amber-700',\n error: 'border-red-200 border-l-red-500 bg-red-50 text-red-700',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\ninterface AlertProps\n extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {\n icon?: ReactNode;\n onDismiss?: () => void;\n}\n\ntype AlertTitleProps = HTMLAttributes<HTMLHeadingElement>;\n\ntype AlertDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nfunction Alert({ className, variant, icon, onDismiss, children, ...props }: AlertProps) {\n return (\n <div\n data-slot='alert'\n data-variant={variant ?? 'default'}\n role='alert'\n className={cn(alertVariants({ variant }), className)}\n {...props}>\n <div className='flex items-start gap-3'>\n {icon && (\n <div data-slot='alert-icon' className='mt-0.5 shrink-0'>\n {icon}\n </div>\n )}\n <div data-slot='alert-content' className='min-w-0 flex-1'>\n {children}\n </div>\n {onDismiss && (\n <button\n type='button'\n aria-label='Dismiss'\n onClick={onDismiss}\n className='focus-visible:ring-ring -mt-1 -mr-1 ml-auto shrink-0 rounded p-1 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:outline-none'>\n <X className='size-4' />\n </button>\n )}\n </div>\n </div>\n );\n}\n\nfunction AlertTitle({ className, ...props }: AlertTitleProps) {\n return (\n <h5\n data-slot='alert-title'\n className={cn('mb-1 leading-tight font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: AlertDescriptionProps) {\n return (\n <p\n data-slot='alert-description'\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Avatar as AvatarPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst avatarVariants = cva('group/avatar relative flex shrink-0 overflow-hidden rounded-full', {\n variants: {\n size: {\n sm: 'size-6 text-[10px]',\n md: 'size-8 text-xs',\n lg: 'size-10 text-sm',\n xl: 'size-12 text-base',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nfunction Avatar({\n className,\n size = 'md',\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Root> & VariantProps<typeof avatarVariants>) {\n return (\n <AvatarPrimitive.Root\n data-slot='avatar'\n data-size={size}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot='avatar-image'\n className={cn('aspect-square size-full object-cover', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot='avatar-fallback'\n className={cn(\n 'bg-primary text-primary-foreground flex size-full items-center justify-center rounded-full font-medium uppercase',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='avatar-badge'\n className={cn(\n 'bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=md]/avatar:size-2.5 group-data-[size=md]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n 'group-data-[size=xl]/avatar:size-3.5 group-data-[size=xl]/avatar:[&>svg]:size-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='avatar-group'\n className={cn(\n 'group/avatar-group *:data-[slot=avatar]:ring-background flex -space-x-2 *:data-[slot=avatar]:ring-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='avatar-group-count'\n className={cn(\n 'bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-xs ring-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n avatarVariants,\n};\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-3xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n secondary: 'bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80',\n destructive:\n 'bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20',\n outline:\n 'border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground',\n ghost: 'hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import type { ComponentProps, HTMLAttributes } from 'react';\nimport { Badge } from '@/components/ui/Status/badge';\nimport { cn } from '@/lib/utils';\n\nexport type StatusProps = ComponentProps<typeof Badge> & {\n status: 'online' | 'offline' | 'maintenance' | 'degraded';\n};\n\nexport const Status = ({ className, status, ...props }: StatusProps) => (\n <Badge\n className={cn('flex items-center gap-2', 'group', status, className)}\n variant='outline'\n {...props}\n />\n);\n\nexport type StatusIndicatorProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusIndicator = ({ className, ...props }: StatusIndicatorProps) => (\n <span className={cn('relative flex h-2 w-2', className)} {...props}>\n <span\n className={cn(\n 'absolute inline-flex h-full w-full animate-ping rounded-full opacity-75',\n 'group-[.online]:bg-emerald-500',\n 'group-[.offline]:bg-red-500',\n 'group-[.maintenance]:bg-blue-500',\n 'group-[.degraded]:bg-amber-500',\n )}\n />\n <span\n className={cn(\n 'relative inline-flex h-2 w-2 rounded-full',\n 'group-[.online]:bg-emerald-500',\n 'group-[.offline]:bg-red-500',\n 'group-[.maintenance]:bg-blue-500',\n 'group-[.degraded]:bg-amber-500',\n )}\n />\n </span>\n);\n\nexport type StatusLabelProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusLabel = ({ className, children, ...props }: StatusLabelProps) => (\n <span className={cn('text-muted-foreground', className)} {...props}>\n {children ?? (\n <>\n <span className='hidden group-[.online]:block'>Online</span>\n <span className='hidden group-[.offline]:block'>Offline</span>\n <span className='hidden group-[.maintenance]:block'>Maintenance</span>\n <span className='hidden group-[.degraded]:block'>Degraded</span>\n </>\n )}\n </span>\n);\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'group/badge inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',\n {\n variants: {\n variant: {\n default: 'bg-muted text-muted-foreground',\n info: 'bg-blue-100 text-blue-500',\n success: 'bg-green-100 text-green-800',\n warning: 'bg-yellow-200 text-yellow-900',\n error: 'bg-red-100 text-red-800',\n },\n size: {\n sm: 'h-4 text-xs px-1.5 py-0.5 rounded-md',\n md: 'h-5 text-xs px-2 py-0.5 rounded-3xl',\n lg: 'h-6 text-sm px-2.5 py-1.5 rounded-3xl',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'default',\n size = 'md',\n asChild = false,\n ...props\n}: ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n data-size={size}\n className={cn(badgeVariants({ variant, size }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import { type ComponentProps } from 'react';\nimport { Slot } from 'radix-ui';\nimport { ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\n/**\n * Root landmark for a breadcrumb trail. Renders a `<nav aria-label=\"breadcrumb\">`\n * and wraps a single {@link BreadcrumbList}.\n */\nfunction Breadcrumb({ className, ...props }: ComponentProps<'nav'>) {\n return (\n <nav aria-label='breadcrumb' data-slot='breadcrumb' className={cn(className)} {...props} />\n );\n}\n\n/**\n * Ordered list (`<ol>`) holding the trail. Lays the items out in a wrapping,\n * gapped flex row and sets the default `text-main-grey` color and `text-sm` scale.\n */\nfunction BreadcrumbList({ className, ...props }: ComponentProps<'ol'>) {\n return (\n <ol\n data-slot='breadcrumb-list'\n className={cn(\n 'text-main-grey flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * A single segment (`<li>`) of the trail. Wraps a {@link BreadcrumbLink},\n * {@link BreadcrumbPage}, or {@link BreadcrumbEllipsis}.\n */\nfunction BreadcrumbItem({ className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='breadcrumb-item'\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n );\n}\n\n/**\n * Navigable ancestor in the trail. Renders an `<a>` by default; pass `asChild`\n * to delegate to a router link (e.g. React Router / Next.js `Link`) while keeping\n * the hover and focus styles.\n *\n * @param asChild - Render the child element instead of an `<a>` (Radix `Slot`).\n */\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: ComponentProps<'a'> & {\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot='breadcrumb-link'\n className={cn(\n 'hover:text-main-blue-primary focus-visible:ring-ring rounded-sm transition-colors duration-150 outline-none focus-visible:ring-2 focus-visible:ring-offset-1',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * The current page — the last, non-interactive segment. Renders a `<span>` with\n * `aria-current=\"page\"` and emphasized `text-main-blue-primary` color.\n */\nfunction BreadcrumbPage({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='breadcrumb-page'\n role='link'\n aria-disabled='true'\n aria-current='page'\n className={cn('text-main-blue-primary font-medium', className)}\n {...props}\n />\n );\n}\n\n/**\n * Visual divider between items. Defaults to a `ChevronRight` icon; pass any node\n * as children to override it. Always `aria-hidden`, so overrides never reach\n * assistive tech.\n */\nfunction BreadcrumbSeparator({ children, className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='breadcrumb-separator'\n role='presentation'\n aria-hidden='true'\n className={cn('text-main-grey [&>svg]:size-3.5', className)}\n {...props}>\n {children ?? <ChevronRightIcon />}\n </li>\n );\n}\n\n/**\n * Truncation marker (`…`) that collapses hidden middle segments of a long trail.\n * Pair it with a `DropdownMenu` to make the collapsed segments navigable.\n */\nfunction BreadcrumbEllipsis({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='breadcrumb-ellipsis'\n role='presentation'\n aria-hidden='true'\n className={cn(\n 'text-main-grey flex size-5 items-center justify-center [&>svg]:size-4',\n className,\n )}\n {...props}>\n <MoreHorizontalIcon />\n <span className='sr-only'>More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","import { type ComponentProps, type MouseEvent } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport {LoaderCircle} from 'lucide-react'\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n 'group/button inline-flex shrink-0 items-center justify-center gap-2 rounded-lg border border-transparent bg-clip-padding text-sm font-semibold whitespace-nowrap transition-all duration-150 outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 data-[loading]:cursor-not-allowed data-[loading]:opacity-80 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'cursor-pointer bg-primary text-primary-foreground hover:bg-primary/80 focus-visible:ring-primary/30',\n secondary:\n 'cursor-pointer bg-secondary text-secondary-foreground hover:bg-[var(--color-orange-700)] focus-visible:ring-secondary/30',\n cancel: 'cursor-pointer bg-destructive text-secondary-foreground hover:bg-[var(--color-red-600)] focus-visible:ring-destructive/30',\n outline:\n ' border-2 border-foreground/50 bg-transparent text-muted-foreground hover:bg-foreground/50 hover:text-white',\n ghost: 'cursor-pointer bg-transparent text-muted-foreground hover:bg-foreground/10 hover:text-primary focus-visible:ring-ring/30',\n cancelGhost:\n 'cursor-pointer bg-destructive/10 text-red-600 hover:bg-destructive/15 hover:text-red-600 focus-visible:ring-ring/30',\n },\n size: {\n sm: 'h-8 px-3 text-xs',\n md: 'h-9 px-4 text-sm',\n lg: 'h-10 px-6 text-sm',\n 'icon-sm': 'size-8 rounded-full p-0',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n },\n);\n\n/**\n * Interactive button with 6 variants and 4 sizes. Use `asChild` to render as any element via Radix Slot.\n * When `isLoading` is true, a spinner is shown and clicks are blocked while keeping the not-allowed cursor.\n */\nfunction Button({\n className,\n variant = 'primary',\n size = 'md',\n asChild = false,\n isLoading = false,\n children,\n onClick,\n ...props\n}: ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n isLoading?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n if (isLoading) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n }\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n data-loading={isLoading || undefined}\n aria-busy={isLoading || undefined}\n className={cn(buttonVariants({ variant, size, className }))}\n onClick={handleClick}\n {...props}>\n {isLoading && <LoaderCircle size={16} className='animate-spin' aria-hidden='true' />}\n {children}\n </Comp>\n );\n}\n\nexport { Button, buttonVariants };\n","import { useEffect, useRef, type ComponentProps } from 'react';\nimport { DayPicker, getDefaultClassNames, type DayButton, type Locale } from 'react-day-picker';\n\nimport { cn } from '@/lib/utils';\nimport { Button, buttonVariants } from '@/components/ui/Button/button';\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from 'lucide-react';\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'dropdown',\n buttonVariant = 'ghost',\n locale,\n formatters,\n components,\n fromYear,\n toYear,\n ...props\n}: ComponentProps<typeof DayPicker> & {\n buttonVariant?: ComponentProps<typeof Button>['variant'];\n fromYear?: number;\n toYear?: number;\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'group/calendar bg-background p-3 font-sans [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className,\n )}\n captionLayout={captionLayout}\n startMonth={new Date(fromYear ?? 1900, 0)}\n endMonth={new Date(toYear ?? 2100, 11)}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(locale?.code, { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex flex-col gap-3 md:flex-row', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-3', defaultClassNames.month),\n nav: cn(\n 'absolute inset-x-0 top-0 flex w-full items-center justify-between gap-2',\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex h-(--cell-size) w-full items-center justify-center px-(--cell-size) tracking-tight',\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n 'flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-semibold',\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n 'relative rounded-(--cell-radius)',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn('absolute inset-0 bg-popover opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'font-semibold select-none',\n captionLayout === 'label'\n ? 'text-sm'\n : 'flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground',\n defaultClassNames.caption_label,\n ),\n weekdays: cn('flex gap-1', defaultClassNames.weekdays),\n weekday: cn(\n 'flex-1 rounded-(--cell-radius) text-[0.75rem] font-semibold text-muted-foreground/70 select-none tracking-wide',\n defaultClassNames.weekday,\n ),\n week: cn('mt-2 flex w-full gap-1', defaultClassNames.week),\n week_number_header: cn(\n 'w-(--cell-size) select-none',\n defaultClassNames.week_number_header,\n ),\n week_number: cn(\n 'text-[0.75rem] text-muted-foreground/50 select-none',\n defaultClassNames.week_number,\n ),\n day: cn(\n 'group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)',\n props.showWeekNumber\n ? '[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)'\n : '[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)',\n defaultClassNames.day,\n ),\n range_start: cn(\n 'relative isolate z-0 rounded-l-md bg-primary/8 after:absolute after:inset-y-0 after:right-0 after:w-3 after:bg-primary/8',\n defaultClassNames.range_start,\n ),\n range_middle: cn('rounded-none bg-primary/8', defaultClassNames.range_middle),\n range_end: cn(\n 'relative isolate z-0 rounded-r-md bg-primary/8 after:absolute after:inset-y-0 after:left-0 after:w-3 after:bg-primary/8',\n defaultClassNames.range_end,\n ),\n today: cn('rounded-md bg-accent text-accent-foreground', defaultClassNames.today),\n outside: cn(\n 'text-muted-foreground/50 aria-selected:text-muted-foreground/50',\n defaultClassNames.outside,\n ),\n disabled: cn('text-muted-foreground/40 opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot='calendar'\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n );\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <ChevronLeftIcon className={cn('size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('size-4', className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...props} />;\n },\n DayButton: ({ ...props }) => <CalendarDayButton locale={locale} {...props} />,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className='flex size-(--cell-size) items-center justify-center text-center'>\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n locale,\n ...props\n}: ComponentProps<typeof DayButton> & { locale?: Partial<Locale> }) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant='ghost'\n size='icon-sm'\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'group-data-[focused=true]/day:ring-primary/40 data-[range-end=true]:!bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:!bg-primary/8 data-[range-middle=true]:text-foreground data-[range-start=true]:!bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:!bg-primary data-[selected-single=true]:text-primary-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 !rounded-md border-0 !bg-transparent leading-none font-normal transition-colors duration-150 group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:rounded-md group-data-[focused=true]/day:ring-[2px] hover:!bg-transparent data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[selected-single=true]:rounded-md [&>span]:text-xs [&>span]:font-medium [&>span]:opacity-75',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","import { Slot } from 'radix-ui';\nimport { addDays, format, isSameDay, isToday } from 'date-fns';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n type MouseEventHandler,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\n// Local controlled/uncontrolled state hook. Avoids coupling to the mangled\n// `useControllableState` export only reachable via `radix-ui/internal`.\nfunction useControllableState<T>({\n prop,\n defaultProp,\n onChange,\n}: {\n prop?: T;\n defaultProp?: T;\n onChange?: (value: T) => void;\n}): [T | undefined, (next: T) => void] {\n const [uncontrolled, setUncontrolled] = useState<T | undefined>(defaultProp);\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolled;\n\n const onChangeRef = useRef(onChange);\n useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n\n// Context for sharing state between components\ninterface MiniCalendarContextType {\n selectedDate: Date | null | undefined;\n onDateSelect: (date: Date) => void;\n startDate: Date;\n onNavigate: (direction: 'prev' | 'next') => void;\n days: number;\n}\n\nconst MiniCalendarContext = createContext<MiniCalendarContextType | null>(null);\n\nconst useMiniCalendar = () => {\n const context = useContext(MiniCalendarContext);\n\n if (!context) {\n throw new Error('MiniCalendar components must be used within MiniCalendar');\n }\n\n return context;\n};\n\n// Helper function to get array of consecutive dates\nconst getDays = (startDate: Date, count: number): Date[] => {\n const days: Date[] = [];\n for (let i = 0; i < count; i++) {\n days.push(addDays(startDate, i));\n }\n return days;\n};\n\n// Helper function to format date\nconst formatDate = (date: Date) => {\n const month = format(date, 'MMM');\n const day = format(date, 'd');\n\n return { month, day };\n};\n\nexport type MiniCalendarProps = HTMLAttributes<HTMLDivElement> & {\n value?: Date;\n defaultValue?: Date;\n onValueChange?: (date: Date | undefined) => void;\n startDate?: Date;\n defaultStartDate?: Date;\n onStartDateChange?: (date: Date | undefined) => void;\n days?: number;\n};\n\nexport const MiniCalendar = ({\n value,\n defaultValue,\n onValueChange,\n startDate,\n defaultStartDate = new Date(),\n onStartDateChange,\n days = 5,\n className,\n children,\n ...props\n}: MiniCalendarProps) => {\n const [selectedDate, setSelectedDate] = useControllableState<Date | undefined>({\n prop: value,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n\n const [currentStartDate, setCurrentStartDate] = useControllableState({\n prop: startDate,\n defaultProp: defaultStartDate,\n onChange: onStartDateChange,\n });\n\n const handleDateSelect = (date: Date) => {\n setSelectedDate(date);\n };\n\n const handleNavigate = (direction: 'prev' | 'next') => {\n const newStartDate = addDays(\n currentStartDate || new Date(),\n direction === 'next' ? days : -days,\n );\n setCurrentStartDate(newStartDate);\n };\n\n const contextValue: MiniCalendarContextType = {\n selectedDate: selectedDate || null,\n onDateSelect: handleDateSelect,\n startDate: currentStartDate || new Date(),\n onNavigate: handleNavigate,\n days,\n };\n\n return (\n <MiniCalendarContext.Provider value={contextValue}>\n <div\n className={cn('flex items-center gap-2 rounded-lg border p-2', className)}\n {...props}>\n {children}\n </div>\n </MiniCalendarContext.Provider>\n );\n};\n\nexport type MiniCalendarNavigationProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n direction: 'prev' | 'next';\n asChild?: boolean;\n};\n\nexport const MiniCalendarNavigation = ({\n direction,\n asChild = false,\n children,\n onClick,\n ...props\n}: MiniCalendarNavigationProps) => {\n const { onNavigate } = useMiniCalendar();\n const Icon = direction === 'prev' ? ChevronLeftIcon : ChevronRightIcon;\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n onNavigate(direction);\n onClick?.(event);\n };\n\n if (asChild) {\n return (\n <Slot.Root onClick={handleClick} {...props}>\n {children}\n </Slot.Root>\n );\n }\n\n return (\n <Button\n onClick={handleClick}\n size={asChild ? undefined : 'icon-sm'}\n type='button'\n variant={asChild ? undefined : 'ghost'}\n className={cn(asChild ? 'p-2' : 'p-2')}\n {...props}>\n {children ?? <Icon className='size-4' />}\n </Button>\n );\n};\n\nexport type MiniCalendarDaysProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: (date: Date) => ReactNode;\n};\n\nexport const MiniCalendarDays = ({ className, children, ...props }: MiniCalendarDaysProps) => {\n const { startDate, days: dayCount } = useMiniCalendar();\n const days = getDays(startDate, dayCount);\n\n return (\n <div className={cn('flex items-center gap-1', className)} {...props}>\n {days.map((date) => children(date))}\n </div>\n );\n};\n\nexport type MiniCalendarDayProps = ComponentProps<typeof Button> & {\n date: Date;\n};\n\nexport const MiniCalendarDay = ({ date, className, ...props }: MiniCalendarDayProps) => {\n const { selectedDate, onDateSelect } = useMiniCalendar();\n const { month, day } = formatDate(date);\n const isSelected = selectedDate && isSameDay(date, selectedDate);\n const isTodayDate = isToday(date);\n\n return (\n <Button\n className={cn(\n 'h-auto min-w-[3rem] flex-col gap-0 p-2 text-xs',\n isTodayDate && !isSelected && 'bg-primary/10 text-primary',\n className,\n )}\n onClick={() => onDateSelect(date)}\n size='sm'\n type='button'\n variant={isSelected ? 'primary' : 'ghost'}\n {...props}>\n <span\n className={cn(\n 'text-muted-foreground text-[10px] font-medium',\n isSelected && 'text-white',\n )}>\n {month}\n </span>\n <span className='text-sm font-semibold'>{day}</span>\n </Button>\n );\n};\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Card({\n className,\n size = 'default',\n ...props\n}: ComponentProps<'div'> & { size?: 'default' | 'sm' }) {\n return (\n <div\n data-slot='card'\n data-size={size}\n className={cn(\n 'group/card bg-card text-card-foreground ring-foreground/5 dark:ring-foreground/10 flex flex-col gap-6 overflow-hidden rounded-4xl py-6 text-sm shadow-md ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-4xl *:[img:last-child]:rounded-b-4xl',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-header'\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1.5 rounded-t-4xl px-6 group-data-[size=sm]/card:px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-action]:flex-row has-data-[slot=card-action]:items-start has-data-[slot=card-action]:justify-between has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-title'\n className={cn('font-heading text-primary text-lg font-bold', className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-description'\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-action'\n className={cn(\n 'col-start-2 row-span-2 row-start-1 self-start justify-self-end',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-content'\n className={cn('px-6 group-data-[size=sm]/card:px-4', className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-footer'\n className={cn(\n 'flex items-center rounded-b-4xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent };\n","import { createContext, useCallback, useContext, useEffect, useState, type ComponentProps, type KeyboardEvent } from 'react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: 'horizontal' | 'vertical';\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = useContext(CarouselContext);\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />');\n }\n\n return context;\n}\n\n/**\n * Carousel root. Wraps Embla Carousel with keyboard navigation, scroll state, and context.\n * Use `orientation` for vertical mode and `opts` to pass Embla options directly.\n */\nfunction Carousel({\n orientation = 'horizontal',\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: ComponentProps<'div'> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = useState(false);\n const [canScrollNext, setCanScrollNext] = useState(false);\n\n const onSelect = useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\n api?.off('select', onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}>\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role='region'\n aria-roledescription='carousel'\n data-slot='carousel'\n {...props}>\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/**\n * Scrollable track wrapper. Direct child of `Carousel`. Wraps `CarouselItem` children.\n */\nfunction CarouselContent({ className, ...props }: ComponentProps<'div'>) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className='overflow-hidden' data-slot='carousel-content'>\n <div\n className={cn(\n 'flex',\n orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\n/**\n * Individual slide. Use `className` with `basis-*` utilities to control how many slides are visible.\n */\nfunction CarouselItem({ className, ...props }: ComponentProps<'div'>) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role='group'\n aria-roledescription='slide'\n data-slot='carousel-item'\n className={cn(\n 'min-w-0 shrink-0 grow-0 basis-full',\n orientation === 'horizontal' ? 'pl-4' : 'pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Previous-slide button. Positioned absolutely to the left (horizontal) or top (vertical).\n * Disabled automatically when there are no previous slides.\n */\nfunction CarouselPrevious({\n className,\n variant = 'outline',\n size = 'icon-sm',\n ...props\n}: ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot='carousel-previous'\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n aria-label='Previous slide'\n {...props}>\n <ArrowLeft className='size-4' aria-hidden='true' />\n <span className='sr-only'>Previous slide</span>\n </Button>\n );\n}\n\n/**\n * Next-slide button. Positioned absolutely to the right (horizontal) or bottom (vertical).\n * Disabled automatically when there are no next slides.\n */\nfunction CarouselNext({\n className,\n variant = 'outline',\n size = 'icon-sm',\n ...props\n}: ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot='carousel-next'\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n aria-label='Next slide'\n {...props}>\n <ArrowRight className='size-4' aria-hidden='true' />\n <span className='sr-only'>Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n};\n","import { type ComponentProps } from 'react';\nimport { cn } from '@/lib/utils';\n\n// Field — wrapper container for a single form field\nfunction Field({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot='field' className={cn('flex flex-col gap-1.5', className)} {...props} />;\n}\n\n// FieldLabel — label for a form field\nfunction FieldLabel({ className, ...props }: ComponentProps<'label'>) {\n return (\n <label\n data-slot='field-label'\n className={cn(\n 'text-foreground text-sm leading-none font-medium',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className,\n )}\n {...props}\n />\n );\n}\n\n// FieldDescription — helper text below a field\nfunction FieldDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='field-description'\n className={cn('text-muted-foreground text-xs', className)}\n {...props}\n />\n );\n}\n\n// FieldError — validation error message\nfunction FieldError({ errors, className }: { errors?: unknown[]; className?: string }) {\n if (!errors || errors.length === 0) return null;\n\n return (\n <p\n data-slot='field-error'\n className={cn('text-destructive text-xs font-medium', className)}>\n {errors\n .map((e) =>\n typeof e === 'string' ? e : e instanceof Error ? e.message : String(e),\n )\n .join(', ')}\n </p>\n );\n}\n\n// FieldGroup — groups multiple fields together vertically\nfunction FieldGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div data-slot='field-group' className={cn('flex flex-col gap-4', className)} {...props} />\n );\n}\n\nexport { Field, FieldLabel, FieldDescription, FieldError, FieldGroup };\n","import { type ComponentProps } from 'react';\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot='input'\n className={cn(\n 'border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n 'dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","const SAFE_EXTERNAL_PROTOCOLS = new Set(['https:', 'http:']);\nconst SAFE_HREF_PROTOCOLS = new Set(['https:', 'http:', 'mailto:', 'tel:']);\n\n/**\n * Returns true only for http/https URLs. Blocks javascript: and all other protocols.\n * Use before window.location.href or window.open with consumer-supplied paths.\n */\nexport function isSafeExternalUrl(url: string): boolean {\n try {\n return SAFE_EXTERNAL_PROTOCOLS.has(new URL(url).protocol);\n } catch {\n return false;\n }\n}\n\n/**\n * Sanitizes an anchor href. Passes through relative paths and safe protocols.\n * Returns '#' for javascript: or any other unsafe protocol.\n */\nexport function sanitizeHref(href: string | undefined): string | undefined {\n if (!href) return href;\n if (\n (href.startsWith('/') && !href.startsWith('//')) ||\n href.startsWith('#') ||\n href.startsWith('./') ||\n href.startsWith('../')\n ) {\n return href;\n }\n try {\n return SAFE_HREF_PROTOCOLS.has(new URL(href).protocol) ? href : '#';\n } catch {\n return '#';\n }\n}\n","import { type ComponentProps, type MouseEvent, type MouseEventHandler } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport { ExternalLinkIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { sanitizeHref } from '@/utils/urlSecurity';\n\nconst linkVariants = cva(\n 'group/link inline-flex items-center rounded-sm outline-none transition-colors duration-150 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:opacity-50',\n {\n variants: {\n variant: {\n underlined:\n 'underline underline-offset-2 decoration-[1px] text-main-grey hover:text-main-blue-primary active:translate-y-px active:text-main-orange-primary visited:text-main-orange-primary visited:underline focus-visible:outline-main-blue-primary',\n plain: 'no-underline text-main-grey hover:text-main-blue-primary hover:underline hover:underline-offset-2 hover:decoration-[1px] active:translate-y-px active:text-main-orange-primary active:underline focus-visible:outline-main-blue-primary',\n },\n size: {\n xs: 'gap-1 text-xs',\n sm: 'gap-1 text-sm',\n md: 'gap-1.5 text-base',\n lg: 'gap-2 text-lg',\n },\n },\n defaultVariants: {\n variant: 'underlined',\n size: 'md',\n },\n },\n);\n\nfunction Link({\n className,\n variant = 'underlined',\n size = 'md',\n asChild = false,\n disabled = false,\n target,\n rel,\n href,\n truncate = false,\n children,\n onClick,\n ...props\n}: Omit<ComponentProps<'a'>, 'onClick'> &\n VariantProps<typeof linkVariants> & {\n asChild?: boolean;\n disabled?: boolean;\n truncate?: boolean;\n onClick?: MouseEventHandler<HTMLElement>;\n }) {\n const Comp = asChild && !disabled ? Slot.Root : 'a';\n const isExternal = target === '_blank';\n const resolvedRel = rel || (target === '_blank' ? 'noopener noreferrer' : undefined);\n\n function handleClick(e: MouseEvent<HTMLElement>) {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n }\n\n const externalIconSize = size === 'lg' ? 16 : size === 'xs' ? 10 : 12;\n\n return (\n <Comp\n data-slot='link'\n data-variant={variant}\n data-size={size}\n href={disabled ? undefined : sanitizeHref(href)}\n target={target}\n rel={resolvedRel}\n tabIndex={disabled ? -1 : undefined}\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n className={cn(\n linkVariants({ variant, size, className }),\n truncate && 'max-w-full overflow-hidden',\n )}\n {...props}>\n {truncate ? (\n <span className='min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap'>\n {children}\n </span>\n ) : (\n children\n )}\n {isExternal && !disabled && (\n <>\n <ExternalLinkIcon\n aria-hidden='true'\n size={externalIconSize}\n className='shrink-0'\n />\n <span className='sr-only'>(opens in new tab)</span>\n </>\n )}\n </Comp>\n );\n}\n\nexport { Link, linkVariants };\n","import { useRef, type ClipboardEvent, type KeyboardEvent } from 'react';\nimport { cn } from '@/lib/utils';\n\ninterface PinInputProps {\n length?: number;\n value?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n invalid?: boolean;\n mask?: boolean;\n className?: string;\n inputClassName?: string;\n}\n\nfunction PinInput({\n length = 6,\n value = '',\n onChange,\n disabled = false,\n invalid = false,\n mask = false,\n className,\n inputClassName,\n}: PinInputProps) {\n const inputs = useRef<(HTMLInputElement | null)[]>([]);\n const pins = value.split('').slice(0, length);\n\n const focusAt = (index: number) => {\n inputs.current[Math.max(0, Math.min(index, length - 1))]?.focus();\n };\n\n const handleChange = (index: number, char: string) => {\n const digit = char.replace(/\\D/g, '').slice(-1);\n const next = pins.slice();\n next[index] = digit;\n const newVal = next.join('').slice(0, length);\n onChange?.(newVal);\n if (digit && index < length - 1) focusAt(index + 1);\n };\n\n const handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (pins[index]) {\n const next = pins.slice();\n next[index] = '';\n onChange?.(next.join(''));\n } else {\n focusAt(index - 1);\n }\n } else if (e.key === 'ArrowLeft') {\n focusAt(index - 1);\n } else if (e.key === 'ArrowRight') {\n focusAt(index + 1);\n }\n };\n\n const handlePaste = (e: ClipboardEvent) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length);\n onChange?.(pasted);\n focusAt(Math.min(pasted.length, length - 1));\n };\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n {Array.from({ length }).map((_, i) => (\n <input\n key={i}\n ref={(el) => {\n inputs.current[i] = el;\n }}\n type={mask ? 'password' : 'text'}\n inputMode='numeric'\n maxLength={1}\n value={pins[i] ?? ''}\n disabled={disabled}\n aria-invalid={invalid}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={(e) => e.target.select()}\n className={cn(\n 'border-input flex h-10 w-10 rounded-md border bg-transparent text-center text-sm font-semibold shadow-xs transition-[color,box-shadow] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n inputClassName,\n )}\n />\n ))}\n </div>\n );\n}\n\nexport { PinInput };\nexport type { PinInputProps };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Toggle as TogglePrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\n\nconst toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n {\n variants: {\n variant: {\n default: 'bg-foreground/5',\n outline:\n 'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n sm: 'h-8 min-w-8 px-1.5',\n md: 'h-9 min-w-9 px-2',\n lg: 'h-10 min-w-10 px-2.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot='toggle'\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n","import { createContext, useContext, useEffect, useId, useState, type ComponentProps, type ReactNode } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { ToggleGroup } from 'radix-ui';\nimport { motion } from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { toggleVariants } from '@/components/ui/Toggle/toggle';\n\ntype SegmentedControlContextValue = VariantProps<typeof toggleVariants> & {\n type: 'single' | 'multiple';\n currentSingleValue?: string;\n pillLayoutId: string;\n};\n\nconst SegmentedControlContext = createContext<SegmentedControlContextValue>({\n size: 'md',\n type: 'single',\n currentSingleValue: undefined,\n pillLayoutId: '',\n});\n\ntype SegmentedControlSingleProps = {\n type: 'single';\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n};\n\ntype SegmentedControlMultipleProps = {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n};\n\ntype SegmentedControlProps = (SegmentedControlSingleProps | SegmentedControlMultipleProps) &\n VariantProps<typeof toggleVariants> & {\n disabled?: boolean;\n className?: string;\n children?: ReactNode;\n };\n\nfunction SegmentedControl({ className, size = 'md', children, ...props }: SegmentedControlProps) {\n const pillLayoutId = useId();\n const isSingle = props.type === 'single';\n const singleProps = isSingle ? (props as SegmentedControlSingleProps) : null;\n\n const [activeValue, setActiveValue] = useState<string | undefined>(\n singleProps?.value ?? singleProps?.defaultValue,\n );\n\n useEffect(() => {\n if (singleProps?.value !== undefined) {\n setActiveValue(singleProps.value);\n }\n }, [singleProps?.value]);\n\n const rootProps = {\n ...(props as ComponentProps<typeof ToggleGroup.Root>),\n ...(isSingle && {\n onValueChange: (val: string) => {\n setActiveValue(val);\n singleProps?.onValueChange?.(val);\n },\n }),\n };\n\n return (\n <ToggleGroup.Root\n data-slot='segmented-control'\n className={cn('flex w-full items-center gap-1 rounded-lg bg-[#e8e8ed] p-1', className)}\n {...(rootProps as ComponentProps<typeof ToggleGroup.Root>)}>\n <SegmentedControlContext.Provider\n value={{\n size,\n type: props.type,\n currentSingleValue: activeValue,\n pillLayoutId,\n }}>\n {children}\n </SegmentedControlContext.Provider>\n </ToggleGroup.Root>\n );\n}\n\nfunction SegmentedControlItem({\n className,\n children,\n value,\n ...props\n}: ComponentProps<typeof ToggleGroup.Item> & VariantProps<typeof toggleVariants>) {\n const { size, type, currentSingleValue, pillLayoutId } =\n useContext(SegmentedControlContext);\n const isActive = type === 'single' && currentSingleValue === value;\n\n return (\n <ToggleGroup.Item\n data-slot='segmented-control-item'\n value={value}\n className={cn(\n toggleVariants({ variant: 'default', size }),\n 'relative h-7 flex-1 cursor-pointer rounded-md border-0 bg-transparent px-4 py-0',\n 'text-muted-foreground text-sm font-medium',\n 'hover:text-foreground transition-colors duration-150',\n 'focus:z-10 focus-visible:z-10',\n 'data-[state=on]:text-[var(--color-main-blue-primary)]',\n type === 'multiple' && [\n 'data-[state=on]:bg-white',\n 'data-[state=on]:shadow-sm',\n 'data-[state=on]:hover:bg-white',\n ],\n className,\n )}\n {...props}>\n {isActive && (\n <motion.span\n layoutId={pillLayoutId}\n className='absolute inset-0 rounded-md bg-white shadow-sm'\n transition={{ type: 'spring', duration: 0.5, bounce: 0.1 }}\n />\n )}\n <span className='relative z-10'>{children}</span>\n </ToggleGroup.Item>\n );\n}\n\nexport { SegmentedControl, SegmentedControlItem };\nexport type { SegmentedControlProps };\n","import { type ComponentProps } from 'react';\nimport { Select as SelectPrimitive } from 'radix-ui';\nimport { ChevronDownIcon, ChevronUpIcon, CheckIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nfunction Select({ ...props }: ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot='select' {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger\n data-slot='select-trigger'\n className={cn(\n 'border-input flex h-9 w-full items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n '[&>span]:truncate',\n className,\n )}\n {...props}>\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className='text-muted-foreground size-4 shrink-0' />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot='select-content'\n className={cn(\n 'border-border bg-popover text-popover-foreground relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-md border shadow-md',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1',\n position === 'popper' && 'w-[--radix-select-trigger-width]',\n className,\n )}\n position={position}\n {...props}>\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' && 'h-[--radix-select-trigger-height]',\n )}>\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n className={cn(\n 'relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none',\n 'focus:bg-accent focus:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}>\n <span className='absolute right-2 flex size-3.5 items-center justify-center'>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className='size-4' />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectLabel({ className, ...props }: ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-2 py-1.5 text-xs font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}>\n <ChevronUpIcon className='size-4' />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}>\n <ChevronDownIcon className='size-4' />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nfunction SelectValue({ ...props }: ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot='select-value' {...props} />;\n}\n\nfunction SelectGroup({ ...props }: ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot='select-group' {...props} />;\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { type ComponentProps } from 'react';\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot='separator'\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-foreground/20 flex h-10 shrink-0 items-center data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import { type ComponentProps } from 'react';\nimport { Progress as ProgressPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst progressVariants = cva('relative flex w-full items-center overflow-x-hidden rounded-full', {\n variants: {\n variant: {\n default: 'bg-[var(--color-dark-100)]',\n success: 'bg-[var(--color-green-100)]',\n warning: 'bg-[var(--color-yellow-100)]',\n danger: 'bg-[var(--color-red-100)]',\n orange: 'bg-[var(--color-orange-100)]',\n },\n size: {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n});\n\nconst progressIndicatorVariants = cva('size-full flex-1 transition-all', {\n variants: {\n variant: {\n default: 'bg-[var(--color-main-blue-primary)]',\n success: 'bg-[var(--color-main-positive-state)]',\n warning: 'bg-[var(--color-main-yellow-primary)]',\n danger: 'bg-[var(--color-main-warning-state)]',\n orange: 'bg-[var(--color-main-orange-primary)]',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface ProgressProps\n extends\n ComponentProps<typeof ProgressPrimitive.Root>,\n VariantProps<typeof progressVariants> {}\n\nfunction Progress({ className, value, variant = 'default', size = 'md', ...props }: ProgressProps) {\n return (\n <ProgressPrimitive.Root\n data-slot='progress'\n data-variant={variant}\n data-size={size}\n className={cn(progressVariants({ variant, size }), className)}\n {...props}>\n <ProgressPrimitive.Indicator\n data-slot='progress-indicator'\n className={cn(progressIndicatorVariants({ variant }))}\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\nexport { Progress, progressVariants, progressIndicatorVariants };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst skeletonVariants = cva('animate-pulse bg-foreground/10', {\n variants: {\n variant: {\n default: 'rounded-md',\n text: 'h-4 rounded-full',\n avatar: 'rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nfunction Skeleton({\n className,\n variant,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof skeletonVariants>) {\n return (\n <div\n data-slot='skeleton'\n data-variant={variant}\n aria-hidden='true'\n className={cn(skeletonVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nexport { Skeleton, skeletonVariants };\n","import { useMemo, type ComponentProps } from 'react';\nimport { Slider as SliderPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = useMemo(\n () =>\n Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],\n [value, defaultValue, min, max],\n );\n\n return (\n <SliderPrimitive.Root\n data-slot='slider'\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n 'relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col',\n className,\n )}\n {...props}>\n <SliderPrimitive.Track\n data-slot='slider-track'\n className='bg-input/90 relative grow overflow-hidden rounded-full data-horizontal:h-2 data-horizontal:w-full data-vertical:h-full data-vertical:w-2'>\n <SliderPrimitive.Range\n data-slot='slider-range'\n className='bg-primary absolute select-none data-horizontal:h-full data-vertical:w-full'\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot='slider-thumb'\n key={index}\n className='hover:ring-ring/30 focus-visible:ring-ring/30 block size-4 shrink-0 rounded-full bg-white shadow-md ring-1 ring-black/10 transition-[color,box-shadow,background-color] select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50'\n />\n ))}\n </SliderPrimitive.Root>\n );\n}\n\nexport { Slider };\n","import { type ComponentProps } from 'react';\nimport { Switch as SwitchPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot='switch'\n data-size={size}\n className={cn(\n 'peer group/switch inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[size=default]:h-[1.15rem] data-[size=default]:w-8',\n 'data-[size=sm]:h-3.5 data-[size=sm]:w-6',\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n 'dark:data-[state=unchecked]:bg-input/80',\n className,\n )}\n {...props}>\n <SwitchPrimitive.Thumb\n data-slot='switch-thumb'\n className={cn(\n 'bg-background pointer-events-none block rounded-full ring-0 transition-transform',\n 'group-data-[size=default]/switch:size-4',\n 'group-data-[size=sm]/switch:size-3',\n 'data-[state=checked]:translate-x-[calc(100%-2px)]',\n 'data-[state=unchecked]:translate-x-0',\n 'dark:data-[state=checked]:bg-primary-foreground',\n 'dark:data-[state=unchecked]:bg-foreground',\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","// ─────────────────────────────────────────────\n// tcce-design-system · animation tokens\n// Motion (ex Framer Motion) — sutil y profesional\n// ─────────────────────────────────────────────\n\n// ── Durations ────────────────────────────────\n// Usa la escala más corta posible para cada caso.\n// instant → feedback táctil (hover, active, focus ring)\n// fast → elementos pequeños que entran/salen (badge, tooltip, switch)\n// normal → componentes de tamaño medio (dropdown, toast, input state)\n// slow → overlays y transiciones de página (modal backdrop, sidebar)\nexport const duration = {\n instant: 0.1,\n fast: 0.15,\n normal: 0.25,\n slow: 0.4,\n} as const;\n\n// ── Easings ──────────────────────────────────\n// Curvas estándar de Material Design adaptadas para uso profesional.\n// smooth → entrada y salida equilibrada (la más usada)\n// enter → aceleración suave al entrar (elementos que aparecen)\n// exit → desaceleración al salir (elementos que desaparecen)\n// linear → progreso, loaders, skeleton shimmer\nexport const ease = {\n smooth: [0.4, 0, 0.2, 1] as const,\n enter: [0.0, 0, 0.2, 1] as const,\n exit: [0.4, 0, 1.0, 1] as const,\n linear: [0.0, 0, 1.0, 1] as const,\n} as const;\n\n// ── Spring configs ────────────────────────────\n// Solo para componentes que necesitan sensación física ligera.\n// gentle → modales, drawers, paneles deslizantes\n// snappy → switches, toggles, checkboxes\n// NO usar spring en: toasts, tooltips, dropdowns (demasiado movimiento)\nexport const spring = {\n gentle: { type: 'spring', stiffness: 260, damping: 28 } as const,\n snappy: { type: 'spring', stiffness: 400, damping: 30 } as const,\n} as const;\n\n// ── Transitions predefinidas ──────────────────\n// Combinaciones listas para usar en cada tipo de componente.\n// Importa la que corresponda en lugar de armar la config cada vez.\n\nexport const transition = {\n // Botones — feedback instantáneo en hover/tap\n button: {\n duration: duration.instant,\n ease: ease.smooth,\n },\n\n // Switch / toggle / checkbox\n toggle: {\n ...spring.snappy,\n },\n\n // Inputs — cambio de borde en focus, estados de error\n input: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Dropdown / select / popover\n dropdown: {\n duration: duration.fast,\n ease: ease.enter,\n },\n\n // Toast / notification — entra rápido, sale más rápido aún\n toast: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Modal / dialog — más lento para dar peso al overlay\n modal: {\n ...spring.gentle,\n },\n\n // Sidebar / navigation drawer\n sidebar: {\n duration: duration.slow,\n ease: ease.smooth,\n },\n\n // Cards — hover sutil, sin spring\n card: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n} as const;\n\n// ── Variants Motion reutilizables ─────────────\n// Úsalos directamente en <motion.div variants={fadeIn}>\n\nexport const fadeIn = {\n hidden: { opacity: 0 },\n visible: { opacity: 1, transition: transition.dropdown },\n exit: { opacity: 0, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\nexport const slideUp = {\n hidden: { opacity: 0, y: 8 },\n visible: { opacity: 1, y: 0, transition: transition.dropdown },\n exit: { opacity: 0, y: 4, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\nexport const slideRight = {\n hidden: { opacity: 0, x: -12 },\n visible: { opacity: 1, x: 0, transition: transition.sidebar },\n exit: { opacity: 0, x: -12, transition: { duration: duration.normal, ease: ease.exit } },\n} as const;\n\nexport const scaleIn = {\n hidden: { opacity: 0, scale: 0.97 },\n visible: { opacity: 1, scale: 1, transition: transition.modal },\n exit: { opacity: 0, scale: 0.97, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\n// ── Stagger (para listas y grids) ─────────────\n// Úsalo en el contenedor padre con variants + staggerChildren\nexport const stagger = {\n container: {\n hidden: {},\n visible: { transition: { staggerChildren: 0.06, delayChildren: 0.05 } },\n },\n item: {\n hidden: { opacity: 0, y: 6 },\n visible: { opacity: 1, y: 0, transition: transition.card },\n },\n} as const;\n\n// ── Export agrupado ───────────────────────────\nexport const animation = {\n duration,\n ease,\n spring,\n transition,\n variants: { fadeIn, slideUp, slideRight, scaleIn, stagger },\n} as const;\n\nexport type AnimationTokens = typeof animation;\n","import { createContext, useContext, useId, useState, type ComponentProps } from 'react';\nimport { Tabs as TabsPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { spring, duration, ease } from '@/tokens/animation';\n\ninterface TabsContextValue {\n activeValue: string;\n listId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n activeValue: '',\n listId: '',\n});\n\nfunction useTabsContext() {\n return useContext(TabsContext);\n}\n\nfunction Tabs({\n defaultValue,\n value: controlledValue,\n onValueChange,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Root>) {\n const [internalValue, setInternalValue] = useState(controlledValue ?? defaultValue ?? '');\n const activeValue = controlledValue ?? internalValue;\n const listId = useId();\n\n const handleValueChange = (v: string) => {\n if (controlledValue === undefined) setInternalValue(v);\n onValueChange?.(v);\n };\n\n return (\n <TabsContext.Provider value={{ activeValue, listId }}>\n <TabsPrimitive.Root\n data-slot='tabs'\n value={activeValue}\n onValueChange={handleValueChange}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nfunction TabsList({ className, ...props }: ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot='tabs-list'\n className={cn(\n 'text-muted-foreground inline-flex h-9 items-center justify-center gap-1 rounded-lg bg-[#e8e8ed] p-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n value,\n children,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { activeValue, listId } = useTabsContext();\n const isActive = activeValue === value;\n\n return (\n <TabsPrimitive.Trigger\n data-slot='tabs-trigger'\n value={value}\n className={cn(\n 'relative inline-flex items-center justify-center rounded-md px-4 py-1 text-sm font-medium whitespace-nowrap',\n 'ring-offset-background transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'data-[state=inactive]:text-muted-foreground hover:text-foreground transition-all duration-150 data-[state=active]:text-[var(--color-main-blue-primary)]',\n className,\n )}\n {...props}>\n <AnimatePresence initial={false}>\n {isActive && (\n <motion.span\n data-slot='tabs-trigger-pill'\n layoutId={`${listId}-pill`}\n className='absolute inset-0 z-0 rounded-md bg-white shadow-sm'\n transition={spring.snappy}\n />\n )}\n </AnimatePresence>\n <span className='relative z-10 flex items-center gap-1.5'>{children}</span>\n </TabsPrimitive.Trigger>\n );\n}\n\nfunction TabsContent({\n className,\n value,\n children,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Content>) {\n const { activeValue } = useTabsContext();\n const isActive = activeValue === value;\n\n return (\n <TabsPrimitive.Content\n data-slot='tabs-content'\n value={value}\n forceMount\n className={cn(\n 'ring-offset-background focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n className,\n )}\n {...props}>\n <AnimatePresence mode='wait' initial={false}>\n {isActive && (\n <motion.div\n key={value}\n className='mt-2'\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={{ duration: duration.fast, ease: ease.smooth }}>\n {children}\n </motion.div>\n )}\n </AnimatePresence>\n </TabsPrimitive.Content>\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { createContext, useContext, useEffect, useState, type ReactNode } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n CircleCheckIcon,\n InfoIcon,\n TriangleAlertIcon,\n OctagonXIcon,\n Loader2Icon,\n XIcon,\n} from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { transition } from '@/tokens/animation';\n\n// ─── Tipos ────────────────────────────────────────────────────────────────────\n\nexport type ToastType = 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading';\n\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface ToastItem {\n id: string;\n type: ToastType;\n title: string;\n description?: string;\n duration: number;\n action?: ToastAction;\n}\n\n// ─── Store por instancia ──────────────────────────────────────────────────────\n// Cada Toaster crea su propio store — no hay singleton global.\n// La función toast() imperativa se conecta al store del Toaster\n// más cercano via contexto.\n\ntype Listener = (toasts: ToastItem[]) => void;\n\ninterface Store {\n toasts: ToastItem[];\n listeners: Listener[];\n add: (item: Omit<ToastItem, 'id'>, id?: string) => string;\n remove: (id: string) => void;\n subscribe: (l: Listener) => () => void;\n}\n\nconst DEFAULT_DURATION = 3000;\nconst MAX_TOASTS = 5;\n\nfunction createStore(): Store {\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n const store: Store = {\n toasts: [],\n listeners: [],\n\n add(item, id) {\n const toastId = id ?? Math.random().toString(36).slice(2);\n const exists = store.toasts.find((t) => t.id === toastId);\n\n if (exists) {\n store.toasts = store.toasts.map((t) =>\n t.id === toastId ? { ...t, ...item, id: toastId } : t,\n );\n } else {\n store.toasts = [{ id: toastId, ...item }, ...store.toasts].slice(0, MAX_TOASTS);\n }\n\n store.listeners.forEach((l) => l([...store.toasts]));\n if (item.duration > 0) {\n clearTimeout(timers.get(toastId));\n timers.set(toastId, setTimeout(() => store.remove(toastId), item.duration));\n }\n return toastId;\n },\n\n remove(id) {\n clearTimeout(timers.get(id));\n timers.delete(id);\n store.toasts = store.toasts.filter((t) => t.id !== id);\n store.listeners.forEach((l) => l([...store.toasts]));\n },\n\n subscribe(listener) {\n store.listeners.push(listener);\n return () => {\n store.listeners = store.listeners.filter((l) => l !== listener);\n };\n },\n };\n return store;\n}\n\n// ─── Contexto ─────────────────────────────────────────────────────────────────\n\nconst ToastStoreContext = createContext<Store | null>(null);\n\nfunction useStore(): Store {\n const store = useContext(ToastStoreContext);\n if (!store) throw new Error('<Toaster /> must be mounted to use toast()');\n return store;\n}\n\n// ─── Hook público ─────────────────────────────────────────────────────────────\n\ntype ToastOptions = Partial<Omit<ToastItem, 'id' | 'title' | 'type'>> & { id?: string };\n\ninterface PromiseMessages<T> {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((err: unknown) => string);\n}\n\nexport function useToast() {\n const store = useStore();\n\n function create(title: string, options?: ToastOptions) {\n return store.add(\n { type: 'default', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n );\n }\n\n return Object.assign(create, {\n success: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'success', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n error: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'error', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n warning: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'warning', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n info: (title: string, options?: ToastOptions) =>\n store.add({ type: 'info', duration: DEFAULT_DURATION, title, ...options }, options?.id),\n\n loading: (title: string, options?: ToastOptions) =>\n store.add({ type: 'loading', duration: 0, title, ...options }, options?.id),\n\n dismiss: (id: string) => store.remove(id),\n\n promise: <T,>(promise: Promise<T>, messages: PromiseMessages<T>) => {\n const id = store.add({ type: 'loading', duration: 0, title: messages.loading });\n promise\n .then((data) => {\n const title =\n typeof messages.success === 'function'\n ? messages.success(data)\n : messages.success;\n store.add({ type: 'success', duration: DEFAULT_DURATION, title }, id);\n })\n .catch((err) => {\n const title =\n typeof messages.error === 'function' ? messages.error(err) : messages.error;\n store.add({ type: 'error', duration: DEFAULT_DURATION, title }, id);\n });\n return id;\n },\n });\n}\n\n// ─── Icono por tipo ───────────────────────────────────────────────────────────\n\nconst icons: Record<ToastType, ReactNode> = {\n default: null,\n success: <CircleCheckIcon className='size-4' />,\n error: <OctagonXIcon className='size-4' />,\n warning: <TriangleAlertIcon className='size-4' />,\n info: <InfoIcon className='size-4' />,\n loading: <Loader2Icon className='size-4 animate-spin' />,\n};\n\nconst iconWrapperStyles: Record<ToastType, string> = {\n default: '',\n success: 'rounded-lg bg-emerald-50 p-1.5 text-emerald-600',\n error: 'rounded-lg bg-red-50 p-1.5 text-red-600',\n warning: 'rounded-lg bg-amber-50 p-1.5 text-amber-600',\n info: 'rounded-lg bg-blue-50 p-1.5 text-blue-600',\n loading: 'rounded-lg bg-muted p-1.5 text-muted-foreground',\n};\n\nconst cardAccentStyles: Record<ToastType, string> = {\n default: '',\n success: 'border-l-[3px] border-l-emerald-400',\n error: 'border-l-[3px] border-l-red-500',\n warning: 'border-l-[3px] border-l-amber-400',\n info: 'border-l-[3px] border-l-blue-400',\n loading: 'border-l-[3px] border-l-muted-foreground/40',\n};\n\n// ─── ToastCard ────────────────────────────────────────────────────────────────\n\nfunction ToastCard({ id, type, title, description, action }: ToastItem) {\n const store = useStore();\n const icon = icons[type];\n\n return (\n <motion.li\n layout\n initial={{ opacity: 0, y: 16, scale: 0.96 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: -8, scale: 0.96 }}\n transition={transition.toast}\n className={cn(\n 'border-border bg-popover text-popover-foreground relative flex w-full max-w-[400px] min-w-[300px] items-start gap-3 overflow-hidden rounded-xl border px-4 py-3.5 shadow-lg',\n cardAccentStyles[type],\n )}>\n {icon && <span className={cn('shrink-0', iconWrapperStyles[type])}>{icon}</span>}\n\n <div className='flex min-w-0 flex-1 flex-col gap-1'>\n <p className='text-sm leading-snug font-semibold'>{title}</p>\n {description && (\n <p className='text-muted-foreground text-xs leading-snug'>{description}</p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className='bg-muted text-foreground hover:bg-muted/70 mt-1 self-start rounded-md px-2.5 py-1 text-xs font-medium transition-colors'>\n {action.label}\n </button>\n )}\n </div>\n\n <button\n onClick={() => store.remove(id)}\n aria-label='Dismiss'\n className='text-muted-foreground/60 hover:bg-muted hover:text-foreground shrink-0 rounded-full p-1 transition-colors'>\n <XIcon className='size-3.5' />\n </button>\n </motion.li>\n );\n}\n\n// ─── Toaster ──────────────────────────────────────────────────────────────────\n\nexport type ToasterPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\nconst positionStyles: Record<ToasterPosition, string> = {\n 'top-right': 'top-4 right-4 items-end',\n 'top-left': 'top-4 left-4 items-start',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-4 right-4 items-end',\n 'bottom-left': 'bottom-4 left-4 items-start',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 items-center',\n};\n\nexport interface ToasterProps {\n position?: ToasterPosition;\n richColors?: boolean;\n closeButton?: boolean;\n duration?: number;\n children?: ReactNode;\n}\n\nfunction Toaster({ position = 'bottom-right', children }: ToasterProps) {\n const [store] = useState<Store>(createStore);\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n useEffect(() => store.subscribe(setToasts), [store]);\n\n return (\n <ToastStoreContext.Provider value={store}>\n {children}\n <ol\n aria-live='polite'\n aria-label='Notifications'\n className={cn(\n 'pointer-events-none fixed z-[100] flex flex-col gap-2',\n positionStyles[position],\n )}>\n <AnimatePresence mode='sync' initial={false}>\n {toasts.map((t) => (\n <div key={t.id} className='pointer-events-auto'>\n <ToastCard {...t} />\n </div>\n ))}\n </AnimatePresence>\n </ol>\n </ToastStoreContext.Provider>\n );\n}\n\nexport { Toaster };\n","import { createContext, useContext, type CSSProperties, type ComponentProps } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { toggleVariants } from '../Toggle/toggle';\n\nconst ToggleGroupContext = createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }\n>({\n size: 'md',\n variant: 'default',\n spacing: 2,\n orientation: 'horizontal',\n});\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 2,\n orientation = 'horizontal',\n children,\n ...props\n}: ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot='toggle-group'\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ '--gap': spacing } as CSSProperties}\n className={cn(\n 'group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-vertical:flex-col data-vertical:items-stretch data-[spacing=0]:data-[variant=outline]:rounded-md',\n className,\n )}\n {...props}>\n <ToggleGroupContext.Provider value={{ variant, size, spacing, orientation }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = 'default',\n size = 'md',\n ...props\n}: ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n const context = useContext(ToggleGroupContext);\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot='toggle-group-item'\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n 'shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-3 group-data-[spacing=0]/toggle-group:shadow-none focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-2.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-2.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t',\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className,\n )}\n {...props}>\n {children}\n </ToggleGroupPrimitive.Item>\n );\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst tooltipContentVariants = cva(\n 'z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-xl text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-lg data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n {\n variants: {\n variant: {\n default: 'bg-foreground text-background',\n primary: 'bg-primary text-primary-foreground',\n },\n size: {\n sm: 'px-2 py-1',\n md: 'px-3 py-1.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nconst tooltipArrowVariants = cva(\n 'z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] data-[side=left]:translate-x-[-1.5px] data-[side=right]:translate-x-[1.5px]',\n {\n variants: {\n variant: {\n default: 'bg-foreground fill-foreground',\n primary: 'bg-primary fill-primary',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nfunction TooltipProvider({\n delayDuration = 100,\n ...props\n}: ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot='tooltip-provider'\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\nfunction Tooltip({ ...props }: ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot='tooltip' {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot='tooltip-trigger' {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 6,\n variant = 'default',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof TooltipPrimitive.Content> &\n VariantProps<typeof tooltipContentVariants>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot='tooltip-content'\n data-variant={variant}\n data-size={size}\n sideOffset={sideOffset}\n className={cn(tooltipContentVariants({ variant, size }), className)}\n {...props}>\n {children}\n <TooltipPrimitive.Arrow className={cn(tooltipArrowVariants({ variant }))} />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, tooltipContentVariants };\n","import { type ComponentProps } from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Popover({ ...props }: ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot='popover' {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot='popover-trigger' {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot='popover-content'\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-1 rounded-3xl p-4 text-sm shadow-lg ring-1 outline-hidden duration-100',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot='popover-anchor' {...props} />;\n}\n\nfunction PopoverHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='popover-header'\n className={cn('flex flex-col gap-1 text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverTitle({ className, ...props }: ComponentProps<'h2'>) {\n return (\n <div\n data-slot='popover-title'\n className={cn('text-base font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='popover-description'\n className={cn('text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n};\n","import { type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nconst TEXT_SIZES = [12, 14, 16, 18, 20, 24, 28, 32, 40, 48] as const;\nconst TEXT_WEIGHTS = [100, 200, 300, 400, 500, 700, 800, 900] as const;\n\nexport type TextSize = (typeof TEXT_SIZES)[number];\nexport type TextWeight = (typeof TEXT_WEIGHTS)[number];\nexport type TextAs = 'p' | 'span' | 'label' | 'small' | 'strong' | 'em';\n\nexport interface TextProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {\n /** HTML element to render */\n as?: TextAs;\n /** Font size in pixels */\n size?: TextSize;\n /** Font weight */\n weight?: TextWeight;\n /** Italic style */\n italic?: boolean;\n /** Optional CSS color value */\n color?: string;\n /** Text content */\n children: ReactNode;\n}\n\nfunction Text({\n as: Tag = 'p',\n size = 16,\n weight = 400,\n italic = false,\n color,\n className,\n style,\n children,\n ...props\n}: TextProps) {\n return (\n <Tag\n data-slot='text'\n className={cn('leading-normal', className)}\n style={{\n fontFamily: \"'Helvetica Neue', sans-serif\",\n fontSize: `${size}px`,\n fontWeight: weight,\n fontStyle: italic ? 'italic' : 'normal',\n ...(color ? { color } : {}),\n ...style,\n }}\n {...(props as HTMLAttributes<HTMLElement>)}>\n {children}\n </Tag>\n );\n}\n\nexport { Text, TEXT_SIZES, TEXT_WEIGHTS };\n","import { createContext, useContext, useState, type ComponentProps } from 'react';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { XIcon } from 'lucide-react';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Contexto interno ─────────────────────────────────────────────────────────\n\nconst DialogContext = createContext(false);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction Dialog({ children, ...props }: ComponentProps<typeof DialogPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = props.open !== undefined ? props.open : internalOpen;\n\n return (\n <DialogContext.Provider value={isOpen}>\n <DialogPrimitive.Root\n data-slot='dialog'\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n props.onOpenChange?.(v);\n }}\n {...props}>\n {children}\n </DialogPrimitive.Root>\n </DialogContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction DialogTrigger({ ...props }: ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot='dialog-trigger' {...props} />;\n}\n\n// ─── Portal — AnimatePresence vive aquí ──────────────────────────────────────\n\nfunction DialogPortal({ children, ...props }: ComponentProps<typeof DialogPrimitive.Portal>) {\n const isOpen = useContext(DialogContext);\n\n return (\n <DialogPrimitive.Portal data-slot='dialog-portal' forceMount {...props}>\n <AnimatePresence mode='wait'>{isOpen && children}</AnimatePresence>\n </DialogPrimitive.Portal>\n );\n}\n\n// ─── Close ───────────────────────────────────────────────────────────────────\n\nfunction DialogClose({ ...props }: ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot='dialog-close' {...props} />;\n}\n\n// ─── Overlay — fade independiente ────────────────────────────────────────────\n\nfunction DialogOverlay({\n className,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay data-slot='dialog-overlay' asChild forceMount {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 isolate z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </DialogPrimitive.Overlay>\n );\n}\n\n// ─── Content — scale + fade + slideUp con spring ─────────────────────────────\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = false,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot='dialog-content'\n asChild\n forceMount\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 fixed top-1/2 left-1/2 z-50 flex max-h-[85vh] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-lg text-sm shadow-xl ring-1 outline-none sm:max-w-sm',\n className,\n )}\n {...props}>\n <motion.div\n className='flex max-h-[85vh] flex-col'\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.96, y: 4 }}\n transition={transition.modal}>\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot='dialog-close' asChild>\n <Button\n variant='ghost'\n className='absolute top-4 right-4'\n size='icon-sm'>\n <XIcon />\n <span className='sr-only'>Close</span>\n </Button>\n </DialogPrimitive.Close>\n )}\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction DialogHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='dialog-header'\n className={cn('flex shrink-0 flex-col gap-3 px-6 pt-6', className)}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: ComponentProps<'div'> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot='dialog-footer'\n className={cn(\n 'border-border bg-muted/40 flex shrink-0 flex-wrap items-center justify-end gap-2 rounded-b-lg border-t px-6 pt-4 pb-4',\n className,\n )}\n {...props}>\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant='secondary'>Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction DialogTitle({ className, ...props }: ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot='dialog-title'\n className={cn('font-heading text-lg leading-none font-bold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction DialogDescription({\n className,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot='dialog-description'\n className={cn(\n 'text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import { createContext, useContext, useState, type ComponentProps } from 'react';\nimport { AlertDialog as AlertDialogPrimitive } from 'radix-ui';\nimport { XIcon } from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Contexto interno — comparte isOpen con el Portal sin tocar el Trigger ───\n\nconst AlertDialogContext = createContext(false);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction AlertDialog({\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = props.open !== undefined ? props.open : internalOpen;\n\n return (\n <AlertDialogContext.Provider value={isOpen}>\n <AlertDialogPrimitive.Root\n data-slot='alert-dialog'\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n props.onOpenChange?.(v);\n }}\n {...props}>\n {children}\n </AlertDialogPrimitive.Root>\n </AlertDialogContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction AlertDialogTrigger({\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot='alert-dialog-trigger' {...props} />;\n}\n\n// ─── Portal — AnimatePresence vive aquí, no en el root ───────────────────────\n\nfunction AlertDialogPortal({\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n const isOpen = useContext(AlertDialogContext);\n\n return (\n <AlertDialogPrimitive.Portal data-slot='alert-dialog-portal' forceMount {...props}>\n <AnimatePresence mode='wait'>{isOpen && children}</AnimatePresence>\n </AlertDialogPrimitive.Portal>\n );\n}\n\n// ─── Overlay — fade independiente ────────────────────────────────────────────\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot='alert-dialog-overlay'\n asChild\n forceMount\n {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </AlertDialogPrimitive.Overlay>\n );\n}\n\n// ─── Content — scale + fade + slideUp con spring ─────────────────────────────\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n variant = 'default',\n showClose = false,\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: 'default' | 'sm';\n variant?: 'default' | 'dark-glass';\n showClose?: boolean;\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay\n className={cn(variant === 'dark-glass' && 'bg-primary/60 backdrop-blur-md')}\n />\n <AlertDialogPrimitive.Content\n data-slot='alert-dialog-content'\n data-size={size}\n data-variant={variant}\n asChild\n forceMount\n className={cn(\n 'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg p-6 shadow-xl outline-none',\n 'data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md',\n variant === 'default' &&\n 'bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 ring-1',\n variant === 'dark-glass' &&\n 'bg-primary/80 text-white ring-1 ring-white/10 backdrop-blur-xl',\n className,\n )}\n {...props}>\n <motion.div\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.96, y: 4 }}\n transition={transition.modal}>\n {showClose && (\n <AlertDialogPrimitive.Cancel asChild>\n <button className='text-muted-foreground hover:bg-muted hover:text-foreground absolute top-4 right-4 inline-flex size-6 items-center justify-center rounded-full transition-colors focus:outline-none'>\n <XIcon className='size-3.5' />\n <span className='sr-only'>Close</span>\n </button>\n </AlertDialogPrimitive.Cancel>\n )}\n {children}\n </motion.div>\n </AlertDialogPrimitive.Content>\n </AlertDialogPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-header'\n className={cn(\n 'flex flex-col items-center gap-2 text-center has-data-[slot=alert-dialog-media]:items-center sm:group-data-[size=default]/alert-dialog-content:items-start sm:group-data-[size=default]/alert-dialog-content:text-left',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-footer'\n className={cn(\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Media ───────────────────────────────────────────────────────────────────\n\nfunction AlertDialogMedia({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-media'\n className={cn(\n \"bg-muted inline-flex size-16 items-center justify-center rounded-xl sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot='alert-dialog-title'\n className={cn('font-heading text-lg font-bold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot='alert-dialog-description'\n className={cn(\n 'text-muted-foreground *:[a]:hover:text-foreground text-xs text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Action ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogAction({\n className,\n variant = 'cancel',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <AlertDialogPrimitive.Action data-slot='alert-dialog-action' asChild {...props}>\n <Button variant={variant} size={size} className={cn(className)}>\n {children}\n </Button>\n </AlertDialogPrimitive.Action>\n );\n}\n\n// ─── Cancel ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogCancel({\n className,\n variant = 'ghost',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <AlertDialogPrimitive.Cancel data-slot='alert-dialog-cancel' asChild {...props}>\n <Button variant={variant} size={size} className={cn(className)}>\n {children}\n </Button>\n </AlertDialogPrimitive.Cancel>\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","import { type ComponentProps } from 'react';\nimport { Accordion as AccordionPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction Accordion({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Root>) {\n return (\n <AccordionPrimitive.Root\n data-slot='accordion'\n className={cn(\n 'divide-foreground/20 flex w-full flex-col divide-y overflow-hidden rounded-2xl border',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot='accordion-item'\n className={cn('data-[state=open]:bg-muted/50 overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className='flex'>\n <AccordionPrimitive.Trigger\n data-slot='accordion-trigger'\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 px-4 py-4 text-left text-sm font-medium transition-all outline-none hover:underline disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}>\n {children}\n <ChevronDownIcon className='text-muted-foreground size-4 shrink-0 transition-transform duration-200' />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot='accordion-content'\n className='text-muted-foreground data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm'\n {...props}>\n <div\n className={cn(\n '[&_a]:hover:text-foreground px-4 pt-0 pb-4 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4',\n className,\n )}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import { useState } from 'react';\nimport { CheckIcon, ChevronsUpDownIcon, SearchIcon } from 'lucide-react';\nimport { Command } from 'cmdk';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyMessage?: string;\n disabled?: boolean;\n className?: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction Combobox({\n options,\n value,\n onValueChange,\n placeholder = 'Select an option...',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n disabled = false,\n className,\n}: ComboboxProps) {\n const [open, setOpen] = useState(false);\n\n const selected = options.find((opt) => opt.value === value);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant='secondary'\n disabled={disabled}\n aria-expanded={open}\n className={cn(\n 'border-input w-64 justify-between border bg-transparent text-sm font-normal shadow-xs',\n 'hover:text-foreground focus-visible:ring-ring/30 hover:bg-transparent',\n !selected && 'text-muted-foreground',\n className,\n )}>\n <span className='truncate'>{selected ? selected.label : placeholder}</span>\n <ChevronsUpDownIcon size={14} className='text-muted-foreground shrink-0' />\n </Button>\n </PopoverTrigger>\n <PopoverContent className='w-64 rounded-lg p-0' align='start'>\n <Command className='rounded-lg'>\n <div className='border-border flex items-center gap-2 border-b px-3'>\n <SearchIcon size={14} className='text-muted-foreground shrink-0' />\n <Command.Input\n placeholder={searchPlaceholder}\n className='placeholder:text-muted-foreground flex h-9 w-full bg-transparent py-2 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50'\n />\n </div>\n <Command.List className='max-h-56 overflow-y-auto p-1'>\n <Command.Empty className='text-muted-foreground py-4 text-center text-sm'>\n {emptyMessage}\n </Command.Empty>\n {options.map((option) => (\n <Command.Item\n key={option.value}\n value={option.value}\n keywords={[option.label]}\n disabled={option.disabled}\n onSelect={() => {\n onValueChange?.(option.value === value ? '' : option.value);\n setOpen(false);\n }}\n className={cn(\n 'relative flex cursor-pointer items-center justify-between rounded-md px-2 py-1.5 text-sm outline-none select-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n 'hover:bg-accent hover:text-accent-foreground',\n )}>\n <span>{option.label}</span>\n {value === option.value && (\n <CheckIcon\n size={14}\n className='text-[var(--color-main-blue-primary)]'\n />\n )}\n </Command.Item>\n ))}\n </Command.List>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { Combobox };\n","import { type ComponentProps } from 'react';\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { CheckIcon, ChevronRightIcon } from 'lucide-react';\n\nfunction DropdownMenu({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root {...props} />;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal {...props} />;\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot='dropdown-menu-trigger' {...props} />;\n}\n\nfunction DropdownMenuContent({\n className,\n align = 'start',\n sideOffset = 4,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot='dropdown-menu-content'\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-48 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-3xl p-1.5 shadow-lg ring-1 duration-100 data-[state=closed]:overflow-hidden',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot='dropdown-menu-group' {...props} />;\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot='dropdown-menu-item'\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:*:[svg]:text-destructive relative flex cursor-default items-center gap-2.5 rounded-2xl px-3 py-2 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot='dropdown-menu-checkbox-item'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}>\n <span\n className='pointer-events-none absolute right-2 flex items-center justify-center'\n data-slot='dropdown-menu-checkbox-item-indicator'>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon aria-hidden='true' />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot='dropdown-menu-radio-group' {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot='dropdown-menu-radio-item'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <span\n className='pointer-events-none absolute right-2 flex items-center justify-center'\n data-slot='dropdown-menu-radio-item-indicator'>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon aria-hidden='true' />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot='dropdown-menu-label'\n data-inset={inset}\n className={cn('text-muted-foreground px-3 py-2.5 text-xs data-inset:pl-9.5', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot='dropdown-menu-separator'\n className={cn('bg-border/50 -mx-1.5 my-1.5 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='dropdown-menu-shortcut'\n className={cn(\n 'text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot='dropdown-menu-sub' {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot='dropdown-menu-sub-trigger'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center gap-2 rounded-2xl px-3 py-2 text-sm font-medium outline-hidden select-none data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n {children}\n <ChevronRightIcon className='ml-auto' aria-hidden='true' />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot='dropdown-menu-sub-content'\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 min-w-36 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-3xl p-1.5 shadow-lg ring-1 duration-100',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import { UploadIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { DropEvent, DropzoneOptions, FileRejection } from 'react-dropzone';\nimport { useDropzone } from 'react-dropzone';\nimport { cva } from 'class-variance-authority';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\ninterface DropzoneContextType {\n src?: File[];\n accept?: DropzoneOptions['accept'];\n maxSize?: DropzoneOptions['maxSize'];\n minSize?: DropzoneOptions['minSize'];\n maxFiles?: DropzoneOptions['maxFiles'];\n}\n\nconst renderBytes = (bytes: number) => {\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(2)}${units[unitIndex]}`;\n};\n\nconst DropzoneContext = createContext<DropzoneContextType | undefined>(undefined);\n\nconst dropzoneVariants = cva('', {\n variants: {\n border: {\n default: 'border-solid',\n dashed: 'border-dashed border-foreground/50',\n },\n },\n defaultVariants: {\n border: 'default',\n },\n});\n\nexport type DropzoneProps = Omit<DropzoneOptions, 'onDrop'> & {\n src?: File[];\n className?: string;\n border?: 'default' | 'dashed';\n onDrop?: (acceptedFiles: File[], fileRejections: FileRejection[], event: DropEvent) => void;\n children?: ReactNode;\n};\n\nexport const Dropzone = ({\n accept,\n maxFiles = 1,\n maxSize,\n minSize,\n onDrop,\n onError,\n disabled,\n src,\n className,\n children,\n border,\n ...props\n}: DropzoneProps) => {\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n accept,\n maxFiles,\n maxSize,\n minSize,\n onError,\n disabled,\n onDrop: (acceptedFiles, fileRejections, event) => {\n if (fileRejections.length > 0) {\n const message = fileRejections.at(0)?.errors.at(0)?.message;\n onError?.(new Error(message));\n }\n if (acceptedFiles.length > 0) {\n onDrop?.(acceptedFiles, fileRejections, event);\n }\n },\n ...props,\n });\n\n return (\n <DropzoneContext.Provider\n key={JSON.stringify(src)}\n value={{ src, accept, maxSize, minSize, maxFiles }}>\n <Button\n data-slot='dropzone'\n data-border={border ?? 'default'}\n className={cn(\n 'relative h-auto w-full flex-col overflow-hidden p-8',\n dropzoneVariants({ border }),\n isDragActive && 'bg-muted outline-none',\n className,\n )}\n disabled={disabled}\n type='button'\n variant='outline'\n {...getRootProps()}>\n <input {...getInputProps()} disabled={disabled} />\n {children}\n </Button>\n </DropzoneContext.Provider>\n );\n};\n\nconst useDropzoneContext = () => {\n const context = useContext(DropzoneContext);\n\n if (!context) {\n throw new Error('useDropzoneContext must be used within a Dropzone');\n }\n\n return context;\n};\n\nexport interface DropzoneContentProps {\n children?: ReactNode;\n className?: string;\n}\n\nconst maxLabelItems = 3;\n\nexport const DropzoneContent = ({ children, className }: DropzoneContentProps) => {\n const { src } = useDropzoneContext();\n\n if (!src) {\n return null;\n }\n\n if (children) {\n return children;\n }\n\n return (\n <div className={cn('flex flex-col items-center justify-center', className)}>\n <div className='bg-muted text-muted-foreground flex size-8 items-center justify-center rounded-md'>\n <UploadIcon size={16} />\n </div>\n <p className='text-foreground my-2 w-full truncate text-sm font-medium'>\n {src.length > maxLabelItems\n ? `${new Intl.ListFormat('en').format(\n src.slice(0, maxLabelItems).map((file) => file.name),\n )} and ${src.length - maxLabelItems} more`\n : new Intl.ListFormat('en').format(src.map((file) => file.name))}\n </p>\n <p className='text-muted-foreground w-full text-xs font-normal text-wrap'>\n Drag and drop or click to replace\n </p>\n </div>\n );\n};\n\nexport interface DropzoneEmptyStateProps {\n children?: ReactNode;\n className?: string;\n}\n\nexport const DropzoneEmptyState = ({ children, className }: DropzoneEmptyStateProps) => {\n const { src, accept, maxSize, minSize, maxFiles } = useDropzoneContext();\n\n if (src) {\n return null;\n }\n\n if (children) {\n return children;\n }\n\n let caption = '';\n\n if (accept) {\n caption += 'Accepts ';\n caption += new Intl.ListFormat('en').format(Object.keys(accept));\n }\n\n if (minSize && maxSize) {\n caption += ` between ${renderBytes(minSize)} and ${renderBytes(maxSize)}`;\n } else if (minSize) {\n caption += ` at least ${renderBytes(minSize)}`;\n } else if (maxSize) {\n caption += ` less than ${renderBytes(maxSize)}`;\n }\n\n return (\n <div className={cn('flex flex-col items-center justify-center', className)}>\n <div className='bg-muted text-muted-foreground flex size-8 items-center justify-center rounded-md'>\n <UploadIcon size={16} />\n </div>\n <p className='text-foreground my-2 w-full text-center text-sm font-medium text-wrap'>\n Upload {maxFiles === 1 ? 'a file' : 'files'}\n </p>\n <p className='text-muted-foreground text-center text-xs font-normal text-wrap'>\n Drag and drop or click to upload\n </p>\n\n {caption && (\n <p className='text-muted-foreground text-xs font-normal text-wrap'>{caption}.</p>\n )}\n </div>\n );\n};\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nfunction Empty({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty'\n className={cn(\n 'flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-header'\n className={cn('flex max-w-sm flex-col items-center gap-2', className)}\n {...props}\n />\n );\n}\n\nconst emptyMediaVariants = cva(\n 'mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"flex size-9 shrink-0 items-center justify-center rounded-lg bg-foreground/10 text-muted-foreground [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction EmptyMedia({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot='empty-icon'\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-title'\n className={cn('cn-font-heading text-sm font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return (\n <div\n data-slot='empty-description'\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-content'\n className={cn(\n 'flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Empty, EmptyHeader, EmptyTitle, EmptyDescription, EmptyContent, EmptyMedia };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { Separator } from '@/components/ui/Separator/separator';\n\nfunction ItemGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n role='list'\n data-slot='item-group'\n className={cn(\n 'group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemSeparator({ className, ...props }: ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot='item-separator'\n orientation='horizontal'\n className={cn('my-2', className)}\n {...props}\n />\n );\n}\n\nconst itemVariants = cva(\n 'group/item flex w-full flex-wrap items-center rounded-2xl border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted',\n {\n variants: {\n variant: {\n default: 'border-foreground/5 bg-foreground/5',\n outline: 'border-foreground/30',\n muted: 'border-transparent bg-background dark:text-black',\n highlighted: 'border-orange-500 bg-orange-50 dark:bg-orange-500/10',\n },\n size: {\n default: 'gap-3.5 px-4 py-3.5',\n sm: 'gap-3.5 px-3.5 py-3',\n xs: 'gap-2.5 px-3 py-2.5 in-data-[slot=dropdown-menu-content]:p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Item({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n return (\n <Comp\n data-slot='item'\n data-variant={variant}\n data-size={size}\n className={cn(itemVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nconst itemMediaVariants = cva(\n 'flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"[&_svg:not([class*='size-'])]:size-4\",\n image: 'size-10 overflow-hidden rounded-xl group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 group-data-[size=xs]/item:rounded-lg [&_img]:size-full [&_img]:object-cover',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction ItemMedia({\n className,\n variant = 'default',\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof itemMediaVariants>) {\n return (\n <div\n data-slot='item-media'\n data-variant={variant}\n className={cn(itemMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction ItemContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-content'\n className={cn(\n 'flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0.5 [&+[data-slot=item-content]]:flex-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemTitle({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-title'\n className={cn(\n 'line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='item-description'\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary line-clamp-2 text-left text-sm font-normal [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemActions({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-actions'\n className={cn('flex items-center gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction ItemHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-header'\n className={cn('flex basis-full items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction ItemFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-footer'\n className={cn('flex basis-full items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\nexport {\n Item,\n ItemMedia,\n ItemContent,\n ItemActions,\n ItemGroup,\n ItemSeparator,\n ItemTitle,\n ItemDescription,\n ItemHeader,\n ItemFooter,\n};\n","import { type ComponentProps } from 'react';\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction RadioGroup({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot='radio-group'\n className={cn('grid w-full gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot='radio-group-item'\n className={cn(\n 'group/radio-group-item peer border-input/60 bg-input/20 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary relative flex aspect-square size-4 shrink-0 rounded-full border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3',\n className,\n )}\n {...props}>\n <RadioGroupPrimitive.Indicator\n data-slot='radio-group-indicator'\n className='flex size-4 items-center justify-center'>\n <span className='bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full dark:size-2.5' />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from '@/lib/variants';\nimport { cn } from '@/lib/utils';\nimport { Loader2Icon, LoaderIcon } from 'lucide-react';\n\n// ---------------------------------------------------------------------------\n// Shared size map — reutilizado por los tres componentes\n// ---------------------------------------------------------------------------\n\nconst spinnerSizes = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-6',\n xl: 'size-8',\n} as const;\n\n// ---------------------------------------------------------------------------\n// Spinner — Loader2Icon (círculo con corte)\n// ---------------------------------------------------------------------------\n\nconst spinnerVariants = cva('animate-spin shrink-0', {\n variants: {\n size: spinnerSizes,\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerProps\n extends Omit<ComponentProps<'svg'>, 'color'>, VariantProps<typeof spinnerVariants> {}\n\nfunction Spinner({ className, size, color, ...props }: SpinnerProps) {\n return (\n <Loader2Icon\n data-slot='spinner'\n role='status'\n aria-label='Loading'\n className={cn(spinnerVariants({ size, color }), className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// SpinnerLoader — LoaderIcon (líneas rotatorias)\n// ---------------------------------------------------------------------------\n\nconst spinnerLoaderVariants = cva('animate-spin shrink-0', {\n variants: {\n size: spinnerSizes,\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerLoaderProps\n extends\n Omit<ComponentProps<'svg'>, 'color'>,\n VariantProps<typeof spinnerLoaderVariants> {}\n\nfunction SpinnerLoader({ className, size, color, ...props }: SpinnerLoaderProps) {\n return (\n <LoaderIcon\n data-slot='spinner-loader'\n role='status'\n aria-label='Loading'\n className={cn(spinnerLoaderVariants({ size, color }), className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// SpinnerDots — tres puntos con animación de ola\n// ---------------------------------------------------------------------------\n\nconst spinnerDotsVariants = cva('flex items-center', {\n variants: {\n size: {\n sm: 'gap-[2px] [&>span]:size-1.5',\n md: 'gap-[3px] [&>span]:size-2',\n lg: 'gap-1 [&>span]:size-2.5',\n xl: 'gap-1.5 [&>span]:size-3',\n },\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerDotsProps extends VariantProps<typeof spinnerDotsVariants> {\n className?: string;\n}\n\nfunction SpinnerDots({ className, size, color }: SpinnerDotsProps) {\n return (\n <span\n data-slot='spinner-dots'\n role='status'\n aria-label='Loading'\n className={cn(spinnerDotsVariants({ size, color }), className)}>\n {[0, 1, 2].map((i) => (\n <span\n key={i}\n className='rounded-full bg-current'\n style={{\n animation: 'dotWave 1.2s ease-in-out infinite',\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes dotWave {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.3; }\n 30% { transform: translateY(-4px); opacity: 1; }\n }\n `}</style>\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n\nexport {\n Spinner,\n SpinnerLoader,\n SpinnerDots,\n spinnerVariants,\n spinnerLoaderVariants,\n spinnerDotsVariants,\n};\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-4xl border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-transparent dark:hover:bg-input/30',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost: 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50',\n destructive:\n 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40',\n link: 'text-primary underline-offset-4 hover:underline',\n\n },\n size: {\n default:\n 'h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5',\n xs: \"h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3\",\n sm: 'h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n lg: 'h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n icon: 'size-9',\n 'icon-xs': \"size-6 [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot='input'\n className={cn(\n 'bg-input/50 file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 h-9 w-full min-w-0 rounded-3xl border border-transparent px-3 py-1 text-base transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { type ComponentProps } from 'react';\nimport { Select as SelectPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon, CheckIcon, ChevronUpIcon } from 'lucide-react';\n\nfunction Select({ ...props }: ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot='select' {...props} />;\n}\n\nfunction SelectGroup({ className, ...props }: ComponentProps<typeof SelectPrimitive.Group>) {\n return (\n <SelectPrimitive.Group\n data-slot='select-group'\n className={cn('scroll-my-1.5 p-1.5', className)}\n {...props}\n />\n );\n}\n\nfunction SelectValue({ ...props }: ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot='select-value' {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot='select-trigger'\n data-size={size}\n className={cn(\n \"bg-input/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex w-fit items-center justify-between gap-1.5 rounded-3xl border border-transparent px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow,background-color] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className='text-muted-foreground pointer-events-none size-4' />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'item-aligned',\n align = 'center',\n ...props\n}: ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot='select-content'\n data-align-trigger={position === 'item-aligned'}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-3xl shadow-lg ring-1 duration-100 data-[align-trigger=true]:animate-none',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n align={align}\n {...props}>\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n data-position={position}\n className={cn(\n 'data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)',\n position === 'popper' && '',\n )}>\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-3 py-2.5 text-xs', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n className={cn(\n \"rounded-2x3 focus:bg-muted not-data-[variant=destructive]:focus:**:text-accent-muted-foreground relative flex w-full cursor-default items-center gap-2 py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}>\n <span className='pointer-events-none absolute right-2 flex size-4 items-center justify-center'>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className='pointer-events-none' />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border pointer-events-none -mx-1.5 my-1.5 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot='select-scroll-up-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot='select-scroll-down-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import Color from 'color';\nimport { PipetteIcon } from 'lucide-react';\nimport { Slider } from 'radix-ui';\nimport {\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Button } from '@/components/compounds/ColorPicker/button';\nimport { Input } from '@/components/compounds/ColorPicker/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/compounds/ColorPicker/select';\nimport { cn } from '@/lib/utils';\n\ninterface ColorPickerContextValue {\n hue: number;\n saturation: number;\n lightness: number;\n alpha: number;\n mode: string;\n setHue: (hue: number) => void;\n setSaturation: (saturation: number) => void;\n setLightness: (lightness: number) => void;\n setAlpha: (alpha: number) => void;\n setMode: (mode: string) => void;\n}\n\nconst ColorPickerContext = createContext<ColorPickerContextValue | undefined>(undefined);\n\nexport const useColorPicker = () => {\n const context = useContext(ColorPickerContext);\n\n if (!context) {\n throw new Error('useColorPicker must be used within a ColorPickerProvider');\n }\n\n return context;\n};\n\nexport type ColorPickerProps = Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n value?: Parameters<typeof Color>[0];\n defaultValue?: Parameters<typeof Color>[0];\n onChange?: (value: [number, number, number, number]) => void;\n};\n\nexport const ColorPicker = ({\n value,\n defaultValue = '#000000',\n onChange,\n className,\n ...props\n}: ColorPickerProps) => {\n const baseColor = value !== undefined ? Color(value) : Color(defaultValue);\n\n const [hue, setHue] = useState(baseColor.hue());\n const [saturation, setSaturation] = useState(baseColor.saturationl());\n const [lightness, setLightness] = useState(baseColor.lightness());\n const [alpha, setAlpha] = useState(baseColor.alpha() * 100);\n const [mode, setMode] = useState('hex');\n\n const onChangeRef = useRef(onChange);\n const mounted = useRef(false);\n useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n // Update color when controlled value changes\n useEffect(() => {\n if (value) {\n const color = Color(value);\n\n setHue(color.hue());\n setSaturation(color.saturationl());\n setLightness(color.lightness());\n setAlpha(color.alpha() * 100);\n }\n }, [value]);\n\n // Notify parent of changes — onChange ref avoids infinite loop when caller passes inline arrow fn\n useEffect(() => {\n if (!mounted.current) {\n mounted.current = true;\n return;\n }\n if (onChangeRef.current) {\n const color = Color.hsl(hue, saturation, lightness).alpha(alpha / 100);\n const rgba = color.rgb().array();\n\n onChangeRef.current([rgba[0], rgba[1], rgba[2], alpha / 100]);\n }\n }, [hue, saturation, lightness, alpha]);\n\n return (\n <ColorPickerContext.Provider\n value={{\n hue,\n saturation,\n lightness,\n alpha,\n mode,\n setHue,\n setSaturation,\n setLightness,\n setAlpha,\n setMode,\n }}>\n <div className={cn('flex size-full flex-col gap-4', className)} {...props} />\n </ColorPickerContext.Provider>\n );\n};\n\nexport type ColorPickerSelectionProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ColorPickerSelection = memo(({ className, ...props }: ColorPickerSelectionProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [positionX, setPositionX] = useState(0);\n const [positionY, setPositionY] = useState(0);\n const { hue, setSaturation, setLightness } = useColorPicker();\n\n const backgroundGradient = useMemo(() => {\n return `linear-gradient(0deg, rgba(0,0,0,1), rgba(0,0,0,0)),\n linear-gradient(90deg, rgba(255,255,255,1), rgba(255,255,255,0)),\n hsl(${hue}, 100%, 50%)`;\n }, [hue]);\n\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n if (!(isDragging && containerRef.current)) {\n return;\n }\n const rect = containerRef.current.getBoundingClientRect();\n const x = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n const y = Math.max(0, Math.min(1, (event.clientY - rect.top) / rect.height));\n setPositionX(x);\n setPositionY(y);\n setSaturation(x * 100);\n const topLightness = x < 0.01 ? 100 : 50 + 50 * (1 - x);\n const lightness = topLightness * (1 - y);\n\n setLightness(lightness);\n },\n [isDragging, setSaturation, setLightness],\n );\n\n useEffect(() => {\n const handlePointerUp = () => setIsDragging(false);\n\n if (isDragging) {\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n }\n\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n };\n }, [isDragging, handlePointerMove]);\n\n return (\n <div\n className={cn('relative size-full cursor-crosshair rounded', className)}\n onPointerDown={(e) => {\n e.preventDefault();\n setIsDragging(true);\n handlePointerMove(e.nativeEvent);\n }}\n ref={containerRef}\n style={{\n background: backgroundGradient,\n }}\n {...props}>\n <div\n className='pointer-events-none absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white'\n style={{\n left: `${positionX * 100}%`,\n top: `${positionY * 100}%`,\n boxShadow: '0 0 0 1px rgba(0,0,0,0.5)',\n }}\n />\n </div>\n );\n});\n\nColorPickerSelection.displayName = 'ColorPickerSelection';\n\nexport type ColorPickerHueProps = ComponentProps<typeof Slider.Root>;\n\nexport const ColorPickerHue = ({ className, ...props }: ColorPickerHueProps) => {\n const { hue, setHue } = useColorPicker();\n\n return (\n <Slider.Root\n className={cn('relative flex h-4 w-full touch-none', className)}\n max={360}\n onValueChange={([hue]) => setHue(hue)}\n step={1}\n value={[hue]}\n {...props}>\n <Slider.Track className='relative my-0.5 h-3 w-full grow rounded-full bg-[linear-gradient(90deg,#FF0000,#FFFF00,#00FF00,#00FFFF,#0000FF,#FF00FF,#FF0000)]'>\n <Slider.Range className='absolute h-full' />\n </Slider.Track>\n <Slider.Thumb className='border-primary/50 bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50' />\n </Slider.Root>\n );\n};\n\nexport type ColorPickerAlphaProps = ComponentProps<typeof Slider.Root>;\n\nexport const ColorPickerAlpha = ({ className, ...props }: ColorPickerAlphaProps) => {\n const { alpha, setAlpha, hue, saturation, lightness } = useColorPicker();\n const solidColor = Color.hsl(hue, saturation, lightness).hex();\n\n return (\n <Slider.Root\n className={cn('relative flex h-4 w-full touch-none', className)}\n max={100}\n onValueChange={([alpha]) => setAlpha(alpha)}\n step={1}\n value={[alpha]}\n {...props}>\n <Slider.Track\n className='relative my-0.5 h-3 w-full grow rounded-full'\n style={{\n background:\n 'url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==\") left center',\n }}>\n <div\n className='absolute inset-0 rounded-full'\n style={{ background: `linear-gradient(to right, transparent, ${solidColor})` }}\n />\n <Slider.Range className='absolute h-full rounded-full bg-transparent' />\n </Slider.Track>\n <Slider.Thumb\n className='border-primary/50 focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50'\n style={{ backgroundColor: solidColor }}\n />\n </Slider.Root>\n );\n};\n\nexport type ColorPickerEyeDropperProps = ComponentProps<typeof Button>;\n\nexport const ColorPickerEyeDropper = ({ className, ...props }: ColorPickerEyeDropperProps) => {\n const { setHue, setSaturation, setLightness, setAlpha } = useColorPicker();\n\n const handleEyeDropper = async () => {\n try {\n // @ts-expect-error - EyeDropper API is experimental\n const eyeDropper = new EyeDropper();\n const result = await eyeDropper.open();\n const color = Color(result.sRGBHex);\n const [h, s, l] = color.hsl().array();\n\n setHue(h);\n setSaturation(s);\n setLightness(l);\n setAlpha(100);\n } catch (error) {\n console.error('EyeDropper failed:', error);\n }\n };\n\n return (\n <Button\n className={cn('text-muted-foreground shrink-0', className)}\n onClick={handleEyeDropper}\n size='icon'\n type='button'\n variant='outline'\n {...props}>\n <PipetteIcon size={16} />\n </Button>\n );\n};\n\nexport type ColorPickerOutputProps = ComponentProps<typeof SelectTrigger>;\n\nconst formats = ['hex', 'css'];\n\nexport const ColorPickerOutput = ({ ...props }: ColorPickerOutputProps) => {\n const { mode, setMode } = useColorPicker();\n\n return (\n <Select onValueChange={setMode} value={mode}>\n <SelectTrigger\n className='bg-background h-4 w-19 shrink-0 rounded-sm text-xs'\n {...props}>\n <SelectValue placeholder='Mode' />\n </SelectTrigger>\n <SelectContent>\n {formats.map((format) => (\n <SelectItem\n className='bg-background rounded-none text-xs'\n key={format}\n value={format}>\n {format.toUpperCase()}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n};\n\ntype PercentageInputProps = Omit<ComponentProps<typeof Input>, 'onChange' | 'value'> & {\n value: number;\n onChange: (value: number) => void;\n};\n\nconst PercentageInput = ({ value, onChange, className, ...props }: PercentageInputProps) => {\n const [localValue, setLocalValue] = useState(String(value));\n\n useEffect(() => {\n setLocalValue(String(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n\n if (!/^\\d*\\.?\\d*$/.test(raw)) return;\n\n const num = parseFloat(raw);\n\n if (num > 100) {\n setLocalValue('100');\n onChange(100);\n return;\n }\n\n setLocalValue(raw);\n if (!isNaN(num)) {\n onChange(num);\n }\n };\n\n return (\n <div className='relative'>\n <Input\n type='text'\n inputMode='decimal'\n value={localValue}\n onChange={handleChange}\n {...props}\n className={cn(\n 'bg-muted h-8 w-[3.5rem] [appearance:textfield] rounded-md px-2 text-xs shadow-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\n className,\n )}\n />\n <span className='text-muted-foreground absolute top-1/2 right-2 -translate-y-1/2 text-xs'>\n %\n </span>\n </div>\n );\n};\n\nexport type ColorPickerFormatProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ColorPickerFormat = ({ className, ...props }: ColorPickerFormatProps) => {\n const { hue, saturation, lightness, alpha, setAlpha, mode } = useColorPicker();\n const color = Color.hsl(hue, saturation, lightness, alpha / 100);\n\n if (mode === 'hex') {\n const hex = color.hex();\n const alphaHex = Math.round((alpha / 100) * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase();\n const displayHex = alpha < 100 ? `${hex}${alphaHex}` : hex;\n\n return (\n <div\n className={cn(\n 'relative flex w-full items-center gap-1 -space-x-px rounded-md',\n className,\n )}\n {...props}>\n <Input\n className='bg-muted h-8 w-[5rem] rounded-md px-2 text-xs'\n readOnly\n type='text'\n value={displayHex}\n />\n <PercentageInput value={alpha} onChange={setAlpha} />\n </div>\n );\n }\n\n if (mode === 'css') {\n const rgb = color\n .rgb()\n .array()\n .map((value) => Math.round(value));\n\n return (\n <div className={cn('w-full rounded-md', className)} {...props}>\n <Input\n className='bg-muted h-8 w-full rounded-md px-2 text-xs shadow-none'\n readOnly\n type='text'\n value={`rgba(${rgb.join(', ')}, ${alpha}%)`}\n {...props}\n />\n </div>\n );\n }\n return null;\n};\n\nexport type ColorPickerPresetsProps = HTMLAttributes<HTMLDivElement> & {\n colors: string[];\n};\n\nexport const ColorPickerPresets = ({ colors, className, ...props }: ColorPickerPresetsProps) => {\n const { hue, saturation, lightness, alpha, setHue, setSaturation, setLightness, setAlpha } =\n useColorPicker();\n const currentHex = Color.hsl(hue, saturation, lightness, alpha / 100).hex();\n\n return (\n <div className={cn('flex flex-wrap gap-1.5', className)} {...props}>\n {colors.map((hex) => {\n const isActive = Color(hex).hex().toUpperCase() === currentHex.toUpperCase();\n\n return (\n <button\n key={hex}\n type='button'\n className={cn(\n 'size-5 cursor-pointer rounded-[3px] border transition-all',\n 'hover:scale-110 hover:shadow-md',\n isActive && 'ring-ring ring-offset-background ring-2 ring-offset-1',\n )}\n style={{ backgroundColor: hex }}\n onClick={() => {\n const color = Color(hex);\n const [h, s, l] = color.hsl().array();\n\n setHue(h);\n setSaturation(s);\n setLightness(l);\n setAlpha(100);\n }}\n aria-label={hex}\n title={hex}\n />\n );\n })}\n </div>\n );\n};\n\nColorPickerPresets.displayName = 'ColorPickerPresets';\n","import { useMemo, useState, type ComponentProps } from 'react';\nimport { format } from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\nimport type { DateRange } from 'react-day-picker';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Calendar } from '@/components/ui/Calendar/calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\ninterface DatePickerSingleProps {\n mode?: 'single';\n selected?: Date;\n onSelect?: (date: Date | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n fromDate?: Date;\n toDate?: Date;\n}\n\ninterface DatePickerRangeProps {\n mode: 'range';\n selected?: DateRange;\n onSelect?: (range: DateRange | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n fromDate?: Date;\n toDate?: Date;\n}\n\ninterface DatePickerProps {\n mode?: 'single' | 'range';\n selected?: Date | DateRange;\n onSelect?: ((date: Date | undefined) => void) | ((range: DateRange | undefined) => void);\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n fromDate?: Date;\n toDate?: Date;\n}\n\nfunction DatePicker({\n mode = 'single',\n selected,\n onSelect,\n placeholder = 'Pick a date',\n disabled = false,\n className,\n fromDate,\n toDate,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n\n const label = useMemo(() => {\n if (mode === 'range') {\n const range = selected as DateRange | undefined;\n if (range?.from && range?.to)\n return `${format(range.from, 'MMM d, yyyy')} – ${format(range.to, 'MMM d, yyyy')}`;\n if (range?.from) return `${format(range.from, 'MMM d, yyyy')} – …`;\n return placeholder;\n }\n const date = selected as Date | undefined;\n return date ? format(date, 'MMM d, yyyy') : placeholder;\n }, [mode, selected, placeholder]);\n\n const hasValue =\n mode === 'range'\n ? !!(selected as DateRange | undefined)?.from\n : !!(selected as Date | undefined);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n data-slot='date-picker-trigger'\n variant='primary'\n disabled={disabled}\n className={cn(\n 'w-60 justify-start gap-2 font-normal',\n !hasValue && 'text-white',\n className,\n )}>\n <CalendarIcon className='size-4 shrink-0' />\n <span className='truncate'>{label}</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent data-slot='date-picker-content' className='w-auto p-0' align='start'>\n {mode === 'range' ? (\n <Calendar\n {...({\n mode: 'range',\n selected: selected as DateRange | undefined,\n onSelect: (range: DateRange | undefined) => {\n (onSelect as DatePickerRangeProps['onSelect'])?.(range);\n if (range?.to) setOpen(false);\n },\n fromDate,\n toDate,\n numberOfMonths: 2,\n initialFocus: true,\n } as unknown as ComponentProps<typeof Calendar>)}\n />\n ) : (\n <Calendar\n {...({\n mode: 'single',\n selected: selected as Date | undefined,\n onSelect: (date: Date | undefined) => {\n (onSelect as DatePickerSingleProps['onSelect'])?.(date);\n setOpen(false);\n },\n fromDate,\n toDate,\n initialFocus: true,\n } as unknown as ComponentProps<typeof Calendar>)}\n />\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DatePicker };\nexport type { DatePickerProps, DatePickerSingleProps, DatePickerRangeProps, DateRange };\n","import { Fragment, forwardRef, useCallback, type HTMLAttributes, type ReactNode, type SVGAttributes } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { BellIcon, CircleHelpIcon, ChevronDownIcon, SearchIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { sanitizeHref } from '@/utils/urlSecurity';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/Avatar/avatar';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface NavbarDropdownItem {\n href: string;\n label: string;\n icon?: ReactNode;\n}\n\nexport interface NavbarNavLink {\n href: string;\n label: string;\n active?: boolean;\n icon?: ReactNode;\n /** If provided, hovering this link shows a dropdown */\n dropdownItems?: NavbarDropdownItem[];\n}\n\nexport interface NavbarUtilityLink {\n href: string;\n label: string;\n}\n\nexport interface NavbarProps extends HTMLAttributes<HTMLElement> {\n logo?: ReactNode;\n brandName?: string;\n utilityLinks?: NavbarUtilityLink[];\n navigationLinks?: NavbarNavLink[];\n notificationCount?: number;\n avatarSrc?: string;\n avatarFallback?: string;\n onNavLinkClick?: (href: string) => void;\n onSearchClick?: () => void;\n onHelpClick?: () => void;\n onAvatarClick?: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Default Logo\n// ---------------------------------------------------------------------------\n\nconst Logo = (props: SVGAttributes<SVGElement>) => (\n <svg\n aria-label='Logo'\n role='img'\n fill='none'\n height='1em'\n viewBox='0 0 324 323'\n width='1em'\n xmlns='http://www.w3.org/2000/svg'\n {...props}>\n <rect fill='currentColor' height='323' rx='161.5' width='323' x='0.5' />\n <circle cx='162' cy='161.5' fill='white' r='60' />\n </svg>\n);\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst defaultUtilityLinks: NavbarUtilityLink[] = [\n { href: '#profile', label: 'My profile' },\n { href: '#documents', label: 'Documents' },\n { href: '#settings', label: 'Settings' },\n];\n\nconst defaultNavigationLinks: NavbarNavLink[] = [\n { href: '#', label: 'Home' },\n {\n href: '#vacations',\n label: 'Vacations',\n dropdownItems: [\n { href: '#vacations/request', label: 'Request vacation' },\n { href: '#vacations/history', label: 'History' },\n { href: '#vacations/calendar', label: 'Calendar' },\n ],\n },\n { href: '#payroll', label: 'Payroll', active: true },\n { href: '#apps', label: 'Apps' },\n { href: '#help', label: 'Help' },\n];\n\n// ---------------------------------------------------------------------------\n// NavLink with optional hover dropdown\n// ---------------------------------------------------------------------------\n\nfunction NavLinkItem({\n link,\n onNavLinkClick,\n}: {\n link: NavbarNavLink;\n onNavLinkClick?: (href: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const hasDropdown = !!link.dropdownItems?.length;\n\n return (\n <div\n ref={ref}\n className='relative flex h-14 items-center'\n onMouseEnter={() => hasDropdown && setOpen(true)}\n onMouseLeave={() => hasDropdown && setOpen(false)}>\n <a\n href={sanitizeHref(link.href)}\n onClick={(e) => {\n e.preventDefault();\n onNavLinkClick?.(link.href);\n }}\n className={cn(\n 'relative flex h-14 items-center gap-1.5 px-4 text-sm transition-colors select-none',\n link.active\n ? 'text-foreground after:bg-secondary font-semibold after:absolute after:right-0 after:bottom-0 after:left-0 after:h-0.5 after:rounded-full'\n : 'text-muted-foreground hover:text-foreground',\n )}>\n {link.icon}\n {link.label}\n {hasDropdown && (\n <ChevronDownIcon\n className={cn(\n 'size-3 transition-transform duration-200',\n open && 'rotate-180',\n )}\n />\n )}\n </a>\n\n {/* Dropdown */}\n {hasDropdown && (\n <div\n className={cn(\n 'border-border bg-popover absolute top-full left-0 z-50 min-w-44 rounded-lg border shadow-lg transition-all duration-150',\n open\n ? 'pointer-events-auto translate-y-0 opacity-100'\n : 'pointer-events-none -translate-y-1 opacity-0',\n )}>\n <div className='p-1'>\n {link.dropdownItems!.map((item, i) => (\n <a\n key={i}\n href={sanitizeHref(item.href)}\n onClick={(e) => {\n e.preventDefault();\n onNavLinkClick?.(item.href);\n setOpen(false);\n }}\n className='text-foreground hover:bg-muted flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors'>\n {item.icon}\n {item.label}\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Navbar\n// ---------------------------------------------------------------------------\n\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(\n (\n {\n className,\n logo = <Logo />,\n brandName = 'Total Portal',\n utilityLinks = defaultUtilityLinks,\n navigationLinks = defaultNavigationLinks,\n notificationCount = 1,\n avatarSrc,\n avatarFallback,\n onNavLinkClick,\n onSearchClick,\n onHelpClick,\n onAvatarClick,\n ...props\n },\n ref,\n ) => {\n const containerRef = useRef<HTMLElement>(null);\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => {\n const checkWidth = () => {\n if (containerRef.current) {\n setIsMobile(containerRef.current.offsetWidth < 768);\n }\n };\n checkWidth();\n const ro = new ResizeObserver(checkWidth);\n if (containerRef.current) ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, []);\n\n const combinedRef = useCallback(\n (node: HTMLElement | null) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n return (\n <header\n ref={combinedRef}\n className={cn(\n 'sticky top-0 z-50 w-full overflow-visible shadow-sm [&_*]:no-underline',\n className,\n )}\n {...props}>\n {/* ── Row 2: Brand + Nav bar ── */}\n <div className='bg-background border-border border-b px-4 md:px-6'>\n <div className='relative mx-auto flex h-14 max-w-screen-2xl items-center gap-6 overflow-visible'>\n {/* Logo + brand name */}\n <div className='flex shrink-0 items-center gap-3'>\n <span className='flex size-30 items-center justify-center text-xl text-white'>\n {logo}\n </span>\n {!isMobile && (\n <span className='text-primary font-bold'>{brandName}</span>\n )}\n </div>\n\n {/* Search */}\n {!isMobile && (\n <div className='relative w-80'>\n <SearchIcon className='text-muted-foreground/50 pointer-events-none absolute top-1/2 left-3 size-3.5 -translate-y-1/2' />\n <input\n type='text'\n placeholder='Search people, apps, requests ...'\n onClick={onSearchClick}\n className='border-border bg-muted text-foreground placeholder:text-muted-foreground/60 focus:border-primary h-8 w-full rounded-full border pr-4 pl-10 text-sm transition-colors outline-none'\n />\n </div>\n )}\n\n {/* Nav links */}\n <nav className='ml-auto flex h-full items-center'>\n {navigationLinks.map((link, i) => (\n <NavLinkItem key={i} link={link} onNavLinkClick={onNavLinkClick} />\n ))}\n </nav>\n </div>\n </div>\n {/* ── Row 1: Utility bar ── */}\n <div className='bg-background border-border border-b px-4 md:px-6'>\n <div className='mx-auto flex h-9 max-w-screen-2xl items-center justify-between'>\n <nav className='flex items-center'>\n {utilityLinks.map((link, i) => (\n <Fragment key={i}>\n {i > 0 && (\n <span className='text-border mx-3 select-none'>|</span>\n )}\n <a\n href={sanitizeHref(link.href)}\n className='text-muted-foreground hover:text-foreground text-xs transition-colors'>\n {link.label}\n </a>\n </Fragment>\n ))}\n </nav>\n\n <div className='flex items-center gap-1'>\n <button\n type='button'\n className='text-muted-foreground hover:text-foreground hover:bg-muted relative flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors'>\n <BellIcon className='size-3.5' />\n {notificationCount > 0 && (\n <span className='bg-secondary absolute top-1 right-1 flex size-1.5 rounded-full' />\n )}\n </button>\n <button\n type='button'\n onClick={onHelpClick}\n className='text-muted-foreground hover:text-foreground hover:bg-muted flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors'>\n <CircleHelpIcon className='size-3.5' />\n </button>\n {(avatarSrc || avatarFallback) && (\n <button\n type='button'\n onClick={onAvatarClick}\n className='ml-1 cursor-pointer rounded-full'>\n <Avatar size='sm'>\n {avatarSrc && <AvatarImage src={avatarSrc} alt={avatarFallback ?? 'User avatar'} />}\n <AvatarFallback>{avatarFallback}</AvatarFallback>\n </Avatar>\n </button>\n )}\n </div>\n </div>\n </div>\n </header>\n );\n },\n);\n\nNavbar.displayName = 'Navbar';\n\nexport { Logo };\n","import { type ComponentProps } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { NavigationMenu as NavigationMenuPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean;\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot='navigation-menu'\n data-viewport={viewport}\n className={cn(\n 'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',\n className,\n )}\n {...props}>\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n );\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot='navigation-menu-list'\n className={cn(\n 'group flex flex-1 list-none items-center justify-center gap-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot='navigation-menu-item'\n className={cn('relative', className)}\n {...props}\n />\n );\n}\n\nconst navigationMenuTriggerStyle = cva(\n 'group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-3xl px-4.5 py-2.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/30 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-[state=open]:bg-muted/50 data-[state=open]:hover:bg-muted data-[state=open]:focus:bg-muted',\n);\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot='navigation-menu-trigger'\n className={cn(navigationMenuTriggerStyle(), 'group', className)}\n {...props}>\n {children}{' '}\n <ChevronDownIcon\n className='relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180'\n aria-hidden='true'\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot='navigation-menu-content'\n className={cn(\n 'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:ring-foreground/5 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out group-data-[viewport=false]/navigation-menu:dark:ring-foreground/10 group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 top-0 left-0 w-full p-2.5 pr-3 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-3xl group-data-[viewport=false]/navigation-menu:shadow-lg group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div className={cn('absolute top-full left-0 isolate z-50 flex justify-center')}>\n <NavigationMenuPrimitive.Viewport\n data-slot='navigation-menu-viewport'\n className={cn(\n 'origin-top-center bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:zoom-in-90 data-[state=closed]:animate-out data-[state=closed]:zoom-out-90 relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden rounded-3xl shadow-lg ring-1 duration-100 md:w-(--radix-navigation-menu-viewport-width)',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot='navigation-menu-link'\n className={cn(\n \"hover:bg-muted focus:bg-muted focus-visible:ring-ring/30 data-[active=true]:bg-muted/50 data-[active=true]:hover:bg-muted data-[active=true]:focus:bg-muted flex items-center gap-1.5 rounded-3xl p-3 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-2xl [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot='navigation-menu-indicator'\n className={cn(\n 'data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in top-full z-1 flex h-1.5 items-end justify-center overflow-hidden',\n className,\n )}\n {...props}>\n <div className='bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md' />\n </NavigationMenuPrimitive.Indicator>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n};\n","import { Children, cloneElement, createContext, forwardRef, isValidElement, useCallback, useContext, useEffect, useRef, useState, type ButtonHTMLAttributes, type ComponentProps, type HTMLAttributes, type Ref } from 'react';\nimport { Slot } from 'radix-ui';\nimport { Menu } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface SidebarContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n isMobile: boolean;\n}\n\nconst SidebarContext = createContext<SidebarContextValue>({\n open: true,\n setOpen: () => {},\n isMobile: false,\n});\n\nexport function useSidebar() {\n return useContext(SidebarContext);\n}\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\nexport interface SidebarProviderProps extends HTMLAttributes<HTMLDivElement> {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const SidebarProvider = forwardRef<HTMLDivElement, SidebarProviderProps>(\n (\n { defaultOpen = true, open: controlledOpen, onOpenChange, className, children, ...props },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [isMobile, setIsMobile] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const open = controlledOpen ?? internalOpen;\n const setOpen = useCallback(\n (value: boolean) => {\n setInternalOpen(value);\n onOpenChange?.(value);\n },\n [onOpenChange],\n );\n\n useEffect(() => {\n const check = () => {\n const el = containerRef.current;\n if (el) setIsMobile(el.offsetWidth < 768);\n };\n check();\n const ro = new ResizeObserver(check);\n if (containerRef.current) ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, []);\n\n return (\n <SidebarContext.Provider value={{ open, setOpen, isMobile }}>\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn('flex h-full w-full overflow-hidden', className)}\n {...props}>\n {children}\n </div>\n </SidebarContext.Provider>\n );\n },\n);\nSidebarProvider.displayName = 'SidebarProvider';\n\n// ---------------------------------------------------------------------------\n// Sidebar\n// ---------------------------------------------------------------------------\n\nexport interface SidebarProps extends HTMLAttributes<HTMLDivElement> {\n collapsible?: 'offcanvas' | 'icon' | 'none';\n side?: 'left' | 'right';\n}\n\nexport const Sidebar = forwardRef<HTMLDivElement, SidebarProps>(\n ({ collapsible = 'offcanvas', className, children, ...props }, ref) => {\n const { open } = useSidebar();\n\n return (\n <div\n ref={ref}\n data-state={open ? 'expanded' : 'collapsed'}\n className={cn(\n 'bg-sidebar text-sidebar-foreground border-sidebar-border relative flex h-full shrink-0 flex-col border-r transition-all duration-300 ease-in-out',\n open ? 'w-64' : collapsible === 'icon' ? 'w-12' : 'w-0 overflow-hidden',\n className,\n )}\n {...props}>\n {children}\n </div>\n );\n },\n);\nSidebar.displayName = 'Sidebar';\n\n// ---------------------------------------------------------------------------\n// SidebarTrigger\n// ---------------------------------------------------------------------------\n\nexport const SidebarTrigger = forwardRef<\n HTMLButtonElement,\n ComponentProps<typeof Button>\n>(({ className, onClick, ...props }, ref) => {\n const { open, setOpen } = useSidebar();\n return (\n <Button\n ref={ref}\n variant='ghost'\n size='md'\n className={cn('shrink-0', className)}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}>\n <Menu className='size-4' />\n <span className='sr-only'>Toggle sidebar</span>\n </Button>\n );\n});\nSidebarTrigger.displayName = 'SidebarTrigger';\n\n// ---------------------------------------------------------------------------\n// SidebarHeader / Content / Footer\n// ---------------------------------------------------------------------------\n\nexport const SidebarHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-header'\n className={cn('flex shrink-0 flex-col gap-2 p-3', className)}\n {...props}\n />\n ),\n);\nSidebarHeader.displayName = 'SidebarHeader';\n\nexport const SidebarContent = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-content'\n className={cn(\n 'flex flex-1 flex-col gap-2 overflow-x-hidden overflow-y-auto p-2',\n className,\n )}\n {...props}\n />\n));\nSidebarContent.displayName = 'SidebarContent';\n\nexport const SidebarFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-footer'\n className={cn('flex shrink-0 flex-col gap-2 p-3', className)}\n {...props}\n />\n ),\n);\nSidebarFooter.displayName = 'SidebarFooter';\n\n// ---------------------------------------------------------------------------\n// SidebarGroup\n// ---------------------------------------------------------------------------\n\nexport const SidebarGroup = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-group'\n className={cn('flex flex-col gap-1', className)}\n {...props}\n />\n ),\n);\nSidebarGroup.displayName = 'SidebarGroup';\n\nexport const SidebarGroupLabel = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'text-sidebar-foreground/50 px-2 py-1 text-xs font-medium tracking-wider uppercase',\n className,\n )}\n {...props}\n />\n));\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\n\nexport const SidebarGroupContent = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-group-content'\n className={cn('flex flex-col gap-0.5', className)}\n {...props}\n />\n));\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\n// ---------------------------------------------------------------------------\n// SidebarMenu\n// ---------------------------------------------------------------------------\n\nexport const SidebarMenu = forwardRef<\n HTMLUListElement,\n HTMLAttributes<HTMLUListElement>\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-slot='sidebar-menu'\n className={cn('m-0 flex list-none flex-col gap-0.5 p-0', className)}\n {...props}\n />\n));\nSidebarMenu.displayName = 'SidebarMenu';\n\nexport const SidebarMenuItem = forwardRef<HTMLLIElement, HTMLAttributes<HTMLLIElement>>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-slot='sidebar-menu-item'\n className={cn('relative', className)}\n {...props}\n />\n ),\n);\nSidebarMenuItem.displayName = 'SidebarMenuItem';\n\n// ---------------------------------------------------------------------------\n// SidebarMenuButton\n// ---------------------------------------------------------------------------\n\nexport interface SidebarMenuButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean;\n isActive?: boolean;\n}\n\nexport const SidebarMenuButton = forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n ({ asChild, isActive, className, children, ...props }, ref) => {\n const { open } = useSidebar();\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n ref={ref as Ref<HTMLButtonElement>}\n data-active={isActive || undefined}\n className={cn(\n 'flex w-full cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm font-normal transition-colors outline-none',\n 'text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'data-[active]:bg-sidebar-primary/10 data-[active]:text-sidebar-primary data-[active]:font-normal',\n !open && 'justify-center px-2',\n className,\n )}\n {...props}>\n {Children.map(children, (child, i) => {\n if (i === 0 && isValidElement<{ className?: string }>(child)) {\n return cloneElement(child, {\n className: cn('size-4 shrink-0', child.props.className),\n });\n }\n if (i > 0 && !open) return null;\n return child;\n })}\n </Comp>\n );\n },\n);\nSidebarMenuButton.displayName = 'SidebarMenuButton';\n","import {\n House,\n LayoutDashboardIcon,\n Plane,\n Wallet,\n} from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n useSidebar,\n} from '@/components/ui/Sidebar/sidebar';\n\nexport interface SideBarItem {\n label: string;\n icon?: React.ReactNode;\n active?: boolean;\n onClick?: () => void;\n}\n\nexport interface SideBarProps {\n items?: SideBarItem[];\n activeItem?: string;\n onItemClick?: (label: string) => void;\n brandName?: string;\n showHeader?: boolean;\n className?: string;\n children?: React.ReactNode;\n}\n\nconst defaultItems: SideBarItem[] = [\n { label: 'Home', icon: <House /> },\n { label: 'Vacations', icon: <Plane /> },\n { label: 'Payroll', icon: <Wallet /> },\n { label: 'Apps', icon: <LayoutDashboardIcon /> },\n];\n\nfunction SidebarBrand({ brandName }: { brandName: string }) {\n const { open } = useSidebar();\n if (!open) return null;\n return (\n <>\n <div className='bg-primary text-primary-foreground flex size-7 shrink-0 items-center justify-center rounded-md text-xs font-bold'>\n {brandName.charAt(0)}\n </div>\n <span className='truncate text-sm font-semibold'>{brandName}</span>\n </>\n );\n}\n\nexport function SideBar({\n items = defaultItems,\n activeItem,\n onItemClick,\n brandName = 'Total Portal',\n showHeader = true,\n className,\n children,\n}: SideBarProps) {\n return (\n <SidebarProvider className={cn('min-h-0', className)}>\n <Sidebar collapsible='icon'>\n <SidebarHeader className='flex flex-row items-center gap-2 p-2'>\n <SidebarTrigger variant='outline' className='size-8 shrink-0' />\n <SidebarBrand brandName={brandName} />\n </SidebarHeader>\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupContent>\n <SidebarMenu>\n {items.map((item) => (\n <SidebarMenuItem key={item.label}>\n <SidebarMenuButton\n isActive={activeItem === item.label || item.active}\n onClick={() => {\n item.onClick?.();\n onItemClick?.(item.label);\n }}>\n {item.icon}\n <span>{item.label}</span>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n </SidebarContent>\n </Sidebar>\n <div className='flex flex-1 flex-col'>\n {showHeader && (\n <header className='flex h-14 items-center justify-between border-b px-4'>\n <span className='text-sm font-medium'>{brandName}</span>\n </header>\n )}\n <main className='overflow-y-auto flex-1 p-6'>{children}</main>\n </div>\n </SidebarProvider>\n );\n}\n\nexport { SidebarTrigger, SidebarProvider };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Textarea({ className, ...props }: ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot='textarea'\n className={cn(\n 'border-input flex min-h-[80px] w-full resize-y rounded-md border bg-transparent px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n 'dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import { createContext, useContext } from 'react';\nimport type { CalendarView } from './event-calendar.types';\n\ninterface EventCalendarContextValue {\n currentView: CalendarView;\n}\n\nconst EventCalendarContext = createContext<EventCalendarContextValue | null>(null);\n\n/**\n * Consume EventCalendar context from sub-components (e.g. a future EventCalendar.Toolbar).\n * Not exported from the public package barrel — internal use only.\n */\nfunction useEventCalendarContext(): EventCalendarContextValue {\n const ctx = useContext(EventCalendarContext);\n if (!ctx) {\n throw new Error('useEventCalendarContext must be used within EventCalendar');\n }\n return ctx;\n}\n\nexport { EventCalendarContext, useEventCalendarContext };\nexport type { EventCalendarContextValue };\n","/**\n * TCCE EventCalendar — @schedule-x theme overrides, scoped to `.sx-tcce`.\n *\n * Shipped as a string (not a .css file) and injected by the EventCalendar\n * component through React 19's hoisted `<style precedence>`. This keeps the\n * calendar styles bundled with the component: consumers who use EventCalendar\n * get them automatically, and consumers who don't tree-shake them away — no\n * separate stylesheet import or build step required.\n *\n * All values reference the library design tokens (`--color-*`) defined in the\n * main bundle, so the calendar inherits the consumer's theme.\n */\nexport const eventCalendarStyles = `\n/* ── Design tokens ────────────────────────────────────────────────────────── */\n.sx-tcce {\n --sx-color-primary: var(--color-primary);\n --sx-color-on-primary: var(--color-primary-foreground);\n --sx-color-primary-container: color-mix(in srgb, var(--color-primary) 10%, transparent);\n --sx-color-on-primary-container: var(--color-primary);\n --sx-color-surface: var(--color-background);\n --sx-color-background: var(--color-background);\n --sx-color-on-surface: var(--color-foreground);\n --sx-color-on-background: var(--color-foreground);\n --sx-color-outline: var(--color-border);\n --sx-color-outline-variant: var(--color-border);\n --sx-internal-color-text: var(--color-foreground);\n font-size: 13px;\n font-family: var(--font-sans, inherit);\n}\n\n/* ── Outer wrapper ────────────────────────────────────────────────────────── */\n.sx-tcce .sx__calendar-wrapper {\n border-radius: var(--border-radius-article, 0.875rem);\n border: 1px solid var(--color-border);\n overflow: hidden;\n}\n\n/* ── Header bar ───────────────────────────────────────────────────────────── */\n.sx-tcce .sx__calendar-header {\n padding: 8px 14px;\n min-height: 52px;\n border-bottom: 1px solid var(--color-border);\n background: var(--color-background);\n display: flex;\n align-items: center;\n}\n\n/* Range title — \"June 2026\" */\n.sx-tcce .sx__range-heading {\n font-size: 15px;\n font-weight: 700;\n letter-spacing: -0.02em;\n color: var(--color-foreground);\n font-family: var(--font-heading, inherit);\n}\n\n/* \"Today\" button — primary style */\n.sx-tcce .sx__today-button {\n font-size: 12px;\n font-weight: 600;\n height: 32px;\n padding: 0 14px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n border: none;\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n cursor: pointer;\n transition: opacity 150ms;\n}\n.sx-tcce .sx__today-button:hover {\n opacity: 0.88;\n}\n.sx-tcce .sx__today-button:active {\n opacity: 0.72;\n}\n\n/* Prev / Next arrow buttons */\n.sx-tcce .sx__chevron-wrapper {\n width: 32px;\n height: 32px;\n min-width: 32px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n border: 1px solid var(--color-border);\n background: var(--color-background);\n transition: background 150ms;\n}\n.sx-tcce .sx__chevron-wrapper:hover {\n background: var(--color-muted);\n}\n\n/* ── View selector ────────────────────────────────────────────────────────── */\n/* Hide the \"View\" text label (kept in DOM for a11y) */\n.sx-tcce .sx__view-selection-label {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n\n/* The active view button, e.g. \"Month ▼\" */\n.sx-tcce .sx__view-selection-selected-item {\n font-size: 12px;\n font-weight: 600;\n height: 32px;\n padding: 0 12px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n border: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n transition: opacity 150ms;\n}\n.sx-tcce .sx__view-selection-selected-item:hover,\n.sx-tcce .sx__view-selection-selected-item:focus,\n.sx-tcce .sx__view-selection-selected-item:active {\n opacity: 0.85;\n}\n\n/* Chevron image inside the view button */\n.sx-tcce .sx__view-selection-chevron {\n width: 13px;\n height: 13px;\n opacity: 0.6;\n filter: brightness(0) invert(1);\n}\n\n/* Dropdown list of views */\n.sx-tcce .sx__view-selection-items {\n border-radius: var(--border-radius-outline, 0.5rem);\n border: 1px solid var(--color-border);\n padding: 4px;\n gap: 2px;\n background: var(--color-background);\n}\n.sx-tcce .sx__view-selection-item {\n font-size: 12px;\n font-weight: 500;\n padding: 5px 12px;\n border-radius: 5px;\n cursor: pointer;\n transition: background 100ms;\n}\n.sx-tcce .sx__view-selection-item:hover {\n background: color-mix(in srgb, var(--color-primary) 8%, transparent);\n}\n\n/* ── Date input (top-right \"6/5/2026 ▼\") ─────────────────────────────────── */\n/* Hide the \"Date\" text label */\n.sx-tcce .sx__date-input-label {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n\n.sx-tcce .sx__date-input-wrapper {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n height: 32px;\n padding: 0 8px;\n border: 1px solid var(--color-border);\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n background: var(--color-background);\n cursor: pointer;\n transition: border-color 150ms;\n overflow: hidden;\n}\n.sx-tcce .sx__date-input-wrapper:focus-within {\n border-color: var(--color-primary);\n}\n\n.sx-tcce .sx__date-input {\n font-size: 12px;\n font-weight: 500;\n background: transparent;\n border: none;\n outline: none;\n width: 80px;\n cursor: pointer;\n color: var(--color-foreground);\n padding: 0;\n font-family: inherit;\n}\n\n.sx-tcce .sx__date-input-chevron-wrapper {\n padding: 0;\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n appearance: none;\n}\n.sx-tcce .sx__date-input-chevron {\n width: 12px;\n height: 12px;\n opacity: 0.45;\n}\n\n/* Date picker popup (the calendar that drops when clicking the date input) */\n.sx-tcce .sx__date-picker-popup {\n border-radius: var(--border-radius-article, 0.875rem);\n border: 1px solid var(--color-border);\n overflow: hidden;\n font-size: 12px;\n background: var(--color-background);\n}\n.sx-tcce .sx__date-picker__month-view-header {\n padding: 10px 12px 6px;\n}\n.sx-tcce .sx__date-picker__month-view-header__month-year {\n font-size: 13px;\n font-weight: 700;\n}\n.sx-tcce .sx__date-picker__day-names {\n padding: 0 4px;\n}\n.sx-tcce .sx__date-picker__day-name {\n width: 32px;\n font-size: 10px;\n font-weight: 600;\n color: var(--color-muted-foreground);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.sx-tcce .sx__date-picker__day {\n width: 32px;\n height: 32px;\n font-size: 12px;\n border-radius: 6px;\n transition: background 100ms;\n}\n.sx-tcce .sx__date-picker__day--today {\n font-weight: 700;\n color: var(--color-primary);\n}\n.sx-tcce .sx__date-picker__day--selected {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n border-radius: 50% !important;\n}\n\n/* ── Month grid ───────────────────────────────────────────────────────────── */\n\n/* Week rows: horizontal grid lines — skip first (header border-bottom covers it) */\n.sx-tcce .sx__month-grid-week:not(:first-child) {\n border-top: 1px solid var(--color-border);\n}\n\n/* Day cells: vertical grid line on right, consistent height */\n.sx-tcce .sx__month-grid-day {\n border-right: 1px solid var(--color-border);\n min-height: 96px;\n}\n\n/* Remove right border from last column */\n.sx-tcce .sx__month-grid-day.sx__sunday {\n border-right: 0;\n}\n\n/* Out-of-bounds (prev/next month) days — muted background */\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing {\n background-color: var(--color-muted);\n}\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing .sx__month-grid-day__header-date,\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing .sx__month-grid-day__header-day-name {\n opacity: 0.4;\n}\n\n/* Day cell header */\n.sx-tcce .sx__month-grid-day__header {\n padding: 5px 8px 3px;\n}\n.sx-tcce .sx__month-grid-day__header-day-name {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__month-grid-day__header-date {\n font-size: 13px;\n font-weight: 500;\n width: 26px;\n height: 26px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 150ms;\n}\n\n/* Today highlight */\n.sx-tcce .sx__is-today .sx__month-grid-day__header-date {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n font-weight: 700;\n}\n\n/* Selected day highlight (not today) */\n.sx-tcce .sx__month-grid-day.is-selected:not(.sx__is-today) .sx__month-grid-day__header-date {\n background: color-mix(in srgb, var(--color-primary) 12%, transparent);\n color: var(--color-primary);\n font-weight: 600;\n}\n\n/* Month grid event pills */\n.sx-tcce .sx__month-grid-event {\n border-radius: 3px;\n margin: 1px 4px;\n padding: 1px 5px;\n font-size: 11px;\n font-weight: 500;\n background-color: transparent !important;\n border-inline-start-width: 3px !important;\n cursor: pointer;\n}\n.sx-tcce .sx__month-grid-event-time {\n font-size: 10px;\n opacity: 0.7;\n}\n.sx-tcce .sx__month-grid-event-title {\n font-size: 11px;\n}\n\n/* ── Week / Day header ────────────────────────────────────────────────────── */\n.sx-tcce .sx__week-grid__day-name {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__week-grid__date-number {\n font-size: 14px;\n font-weight: 500;\n width: 34px;\n height: 34px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 150ms;\n}\n.sx-tcce .sx__week-grid__date--is-today .sx__week-grid__date-number {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n font-weight: 700;\n}\n\n/* Subtle column highlight for today in week view */\n.sx-tcce .sx__time-grid-day.sx__is-today {\n background: color-mix(in srgb, var(--color-primary) 3%, transparent);\n}\n\n/* ── Time grid (Week / Day events) ───────────────────────────────────────── */\n.sx-tcce .sx__week-grid__hour-text {\n font-size: 10px;\n font-weight: 500;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__time-grid-event {\n border-radius: 6px;\n cursor: pointer;\n}\n.sx-tcce .sx__time-grid-event-inner {\n padding: 4px 7px;\n}\n.sx-tcce .sx__time-grid-event-title {\n font-size: 11px;\n font-weight: 600;\n line-height: 1.3;\n}\n.sx-tcce .sx__time-grid-event-time {\n font-size: 10px;\n opacity: 0.72;\n line-height: 1.4;\n}\n.sx-tcce .sx__title-and-time-compact {\n font-size: 10px;\n font-weight: 600;\n}\n\n/* ── Event modal ──────────────────────────────────────────────────────────── */\n.sx-tcce .sx__event-modal {\n border-radius: var(--border-radius-article, 0.875rem);\n border: 1px solid var(--color-border);\n font-size: 13px;\n min-width: 220px;\n max-width: 300px;\n background: var(--color-background);\n}\n.sx-tcce .sx__event-modal__title {\n font-size: 14px;\n font-weight: 700;\n letter-spacing: -0.01em;\n font-family: var(--font-heading, inherit);\n}\n.sx-tcce .sx__event-modal__time {\n font-size: 12px;\n color: var(--color-muted-foreground);\n}\n`;\n","import { useRef, useEffect, useLayoutEffect } from 'react';\nimport {\n createCalendar,\n viewMonthGrid,\n viewWeek,\n viewDay,\n viewMonthAgenda,\n} from '@schedule-x/calendar';\nimport { createEventsServicePlugin } from '@schedule-x/events-service';\nimport { createEventModalPlugin } from '@schedule-x/event-modal';\nimport { createCalendarControlsPlugin } from '@schedule-x/calendar-controls';\n// Patches globalThis.Temporal so @schedule-x instanceof checks match our Temporal objects\nimport 'temporal-polyfill/global';\nimport { Temporal } from 'temporal-polyfill';\nimport type {\n CalendarEvent,\n CalendarView,\n EventCalendarProps,\n ScheduleXViewName,\n} from '../event-calendar.types';\nimport type { CalendarApp, CalendarEventExternal } from '@schedule-x/calendar';\n\nexport const VIEW_MAP: Record<CalendarView, ScheduleXViewName> = {\n month: 'month-grid',\n week: 'week',\n day: 'day',\n agenda: 'month-agenda',\n};\n\nexport const REVERSE_VIEW_MAP: Record<ScheduleXViewName, CalendarView> = {\n 'month-grid': 'month',\n week: 'week',\n day: 'day',\n 'month-agenda': 'agenda',\n};\n\n// TCCE-aligned colors for each event variant.\n// main: border / accent container: event background onContainer: event text\nconst CALENDAR_DEFS = {\n default: {\n colorName: 'default',\n lightColors: { main: '#22205f', container: '#eaeaf6', onContainer: '#22205f' },\n darkColors: { main: '#9b99d4', container: '#2a2862', onContainer: '#eaeaf6' },\n },\n primary: {\n colorName: 'primary',\n lightColors: { main: '#22205f', container: '#eaeaf6', onContainer: '#22205f' },\n darkColors: { main: '#9b99d4', container: '#2a2862', onContainer: '#eaeaf6' },\n },\n success: {\n colorName: 'success',\n lightColors: { main: '#00a824', container: '#ddf8e4', onContainer: '#003d0d' },\n darkColors: { main: '#5de87a', container: '#003d0d', onContainer: '#ddf8e4' },\n },\n // Use amber (yellow-700) — more refined than TCCE's bright yellow-600 (#faca4a)\n warning: {\n colorName: 'warning',\n lightColors: { main: '#c8a23b', container: '#fef9e7', onContainer: '#5c4a00' },\n darkColors: { main: '#fbd56e', container: '#5c4a00', onContainer: '#fef9e7' },\n },\n danger: {\n colorName: 'danger',\n lightColors: { main: '#ea3a3d', container: '#fee2e2', onContainer: '#7f1d1d' },\n darkColors: { main: '#f87171', container: '#7f1d1d', onContainer: '#fee2e2' },\n },\n} as const;\n\n/**\n * Convert \"YYYY-MM-DD\" → Temporal.PlainDate\n * Convert \"YYYY-MM-DD HH:mm\" → Temporal.ZonedDateTime (system timezone)\n */\nfunction toTemporalDate(dateStr: string): Temporal.ZonedDateTime | Temporal.PlainDate {\n if (dateStr.length === 10) {\n return Temporal.PlainDate.from(dateStr);\n }\n const isoStr = dateStr.replace(' ', 'T');\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return Temporal.ZonedDateTime.from(`${isoStr}[${timeZone}]`);\n}\n\nexport function toScheduleXEvent(event: CalendarEvent): CalendarEventExternal {\n return {\n id: String(event.id),\n title: event.title,\n start: toTemporalDate(event.start),\n end: toTemporalDate(event.end),\n calendarId: event.color ?? 'default',\n ...(event.description != null ? { description: event.description } : {}),\n };\n}\n\ninterface UseEventCalendarProps {\n events: EventCalendarProps['events'];\n defaultView?: EventCalendarProps['defaultView'];\n defaultDate?: EventCalendarProps['defaultDate'];\n locale?: EventCalendarProps['locale'];\n onEventClick?: EventCalendarProps['onEventClick'];\n onEventCreate?: EventCalendarProps['onEventCreate'];\n onViewChange?: EventCalendarProps['onViewChange'];\n}\n\ninterface UseEventCalendarReturn {\n calendarApp: CalendarApp | null;\n}\n\nfunction useEventCalendar({\n events,\n defaultView = 'month',\n defaultDate,\n locale = 'en-US',\n onEventClick,\n onEventCreate,\n onViewChange,\n}: UseEventCalendarProps): UseEventCalendarReturn {\n const onEventClickRef = useRef(onEventClick);\n const onEventCreateRef = useRef(onEventCreate);\n const onViewChangeRef = useRef(onViewChange);\n useLayoutEffect(() => {\n onEventClickRef.current = onEventClick;\n });\n useLayoutEffect(() => {\n onEventCreateRef.current = onEventCreate;\n });\n useLayoutEffect(() => {\n onViewChangeRef.current = onViewChange;\n });\n\n const eventsMapRef = useRef<Map<string, CalendarEvent>>(new Map());\n const eventsService = useRef(createEventsServicePlugin());\n const eventModal = useRef(createEventModalPlugin());\n const calendarControls = useRef(createCalendarControlsPlugin());\n\n const calendarApp = useRef<ReturnType<typeof createCalendar> | null>(null);\n if (!calendarApp.current) {\n eventsMapRef.current = new Map(events.map((e) => [String(e.id), e]));\n calendarApp.current = createCalendar({\n locale,\n defaultView: VIEW_MAP[defaultView],\n ...(defaultDate ? { selectedDate: Temporal.PlainDate.from(defaultDate) } : {}),\n calendars: CALENDAR_DEFS,\n views: [viewMonthGrid, viewWeek, viewDay, viewMonthAgenda],\n plugins: [eventsService.current, eventModal.current, calendarControls.current],\n events: events.map(toScheduleXEvent),\n callbacks: {\n onEventClick: (calendarEvent) => {\n const original = eventsMapRef.current.get(String(calendarEvent.id));\n if (original) onEventClickRef.current?.(original);\n },\n onDoubleClickDate: (date: Temporal.PlainDate) => {\n const dateStr = date.toString();\n onEventCreateRef.current?.({ start: dateStr, end: dateStr });\n },\n onDoubleClickDateTime: (dateTime: Temporal.ZonedDateTime) => {\n const normalized = dateTime.toString().slice(0, 16).replace('T', ' ');\n onEventCreateRef.current?.({ start: normalized, end: normalized });\n },\n },\n });\n }\n\n const eventsKey = JSON.stringify(events);\n\n useEffect(() => {\n eventsMapRef.current = new Map(events.map((e) => [String(e.id), e]));\n eventsService.current.set(events.map(toScheduleXEvent));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [eventsKey]);\n\n useEffect(() => {\n const app = calendarApp.current;\n if (!app) return;\n const state = (\n app as unknown as {\n $app: {\n calendarState: {\n view: { subscribe: (cb: (v: string) => void) => () => void };\n };\n };\n }\n ).$app?.calendarState?.view;\n if (!state?.subscribe) return;\n let isFirst = true;\n const unsubscribe = state.subscribe((viewName: string) => {\n if (isFirst) {\n isFirst = false;\n return;\n }\n const mapped = REVERSE_VIEW_MAP[viewName as ScheduleXViewName];\n if (mapped) onViewChangeRef.current?.(mapped);\n });\n return () => unsubscribe?.();\n }, []);\n\n return {\n calendarApp: calendarApp.current as CalendarApp | null,\n };\n}\n\nexport { useEventCalendar };\n","import { useCallback, useMemo, useState } from 'react';\nimport { ScheduleXCalendar } from '@schedule-x/react';\nimport type { CalendarApp } from '@schedule-x/calendar';\n\nimport { cn } from '@/lib/utils';\nimport { EventCalendarContext } from './event-calendar-context';\nimport { eventCalendarStyles } from './event-calendar.styles';\nimport { useEventCalendar } from './hooks/use-event-calendar';\nimport type { EventCalendarProps, CalendarView } from './event-calendar.types';\n\nfunction EventCalendar({\n events,\n defaultView = 'month',\n onViewChange,\n defaultDate,\n onEventClick,\n onEventCreate,\n locale = 'en-US',\n className,\n}: EventCalendarProps) {\n const [currentView, setCurrentView] = useState<CalendarView>(defaultView);\n\n const handleViewChange = useCallback(\n (view: CalendarView) => {\n setCurrentView(view);\n onViewChange?.(view);\n },\n [onViewChange],\n );\n\n const { calendarApp } = useEventCalendar({\n events,\n defaultView,\n defaultDate,\n locale,\n onEventClick,\n onEventCreate,\n onViewChange: handleViewChange,\n });\n\n const contextValue = useMemo(() => ({ currentView }), [currentView]);\n\n return (\n <EventCalendarContext.Provider value={contextValue}>\n {/* React 19 hoists this to <head> and dedupes by href, so the\n schedule-x theme overrides are injected once no matter how many\n calendars mount. */}\n <style href='tcce-event-calendar' precedence='default'>\n {eventCalendarStyles}\n </style>\n <div data-slot='event-calendar' className={cn('sx-tcce w-full', className)}>\n <ScheduleXCalendar calendarApp={(calendarApp ?? null) as CalendarApp | null} />\n </div>\n </EventCalendarContext.Provider>\n );\n}\n\nexport { EventCalendar };\nexport type {\n EventCalendarProps,\n CalendarEvent,\n CalendarView,\n EventCreateRange,\n} from './event-calendar.types';\n","import { useForm, type UseFormProps, type FieldValues } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport type { ZodType, z } from 'zod';\n\nexport function useAppForm<T extends ZodType>(\n schema: T,\n options?: Omit<UseFormProps<z.infer<T> & FieldValues>, 'resolver'>,\n) {\n return useForm<z.infer<T> & FieldValues>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolver: zodResolver(schema as any),\n ...options,\n });\n}\n\nexport { useFieldArray, Controller } from 'react-hook-form';\n","const CDN_BASE = 'https://dibt9vplwriap.cloudfront.net';\n\nexport const logos = {\n color: `${CDN_BASE}/logos/Logo_Total_Color.webp`,\n colorAna: `${CDN_BASE}/logos/Logo_Total_Color-ANA.webp`,\n colorAnaa: `${CDN_BASE}/logos/Logo_Total_Color-ANAA.webp`,\n negative: `${CDN_BASE}/logos/Logo_Total_Negative.webp`,\n positive: `${CDN_BASE}/logos/Logo_Total_Positive.webp`,\n grayScale: `${CDN_BASE}/logos/Logo_Total_gray_scale.webp`,\n monochBlack: `${CDN_BASE}/logos/Logo_Total_monochB.webp`,\n monochOrange: `${CDN_BASE}/logos/Logo_Total_monochO.webp`,\n} as const;\n\nexport type LogoKey = keyof typeof logos;\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Table({\n className,\n containerClassName = 'overflow-x-auto',\n ...props\n}: ComponentProps<'table'> & {\n /**\n * Classes for the scroll container that wraps the table. Defaults to\n * `overflow-x-auto` for horizontal scrolling. Pass `overflow-visible` when an\n * outer element already owns scrolling (e.g. a sticky-header data table) —\n * a nested scroll container would otherwise trap `position: sticky` cells.\n */\n containerClassName?: string;\n}) {\n return (\n <div data-slot='table-container' className={cn('relative w-full', containerClassName)}>\n <table\n data-slot='table'\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: ComponentProps<'thead'>) {\n return (\n <thead data-slot='table-header' className={cn('[&_tr]:border-b', className)} {...props} />\n );\n}\n\nfunction TableBody({ className, ...props }: ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot='table-body'\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot='table-footer'\n className={cn('bg-muted/50 border-t font-medium last:[&>tr]:border-b-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: ComponentProps<'tr'>) {\n return (\n <tr\n data-slot='table-row'\n className={cn(\n 'hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: ComponentProps<'th'>) {\n return (\n <th\n data-slot='table-head'\n className={cn(\n 'text-foreground h-12 px-3 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: ComponentProps<'td'>) {\n return (\n <td\n data-slot='table-cell'\n className={cn(\n 'p-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: ComponentProps<'caption'>) {\n return (\n <caption\n data-slot='table-caption'\n className={cn('text-muted-foreground mt-4 text-sm', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","import { type ComponentProps } from 'react';\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { CheckIcon, MinusIcon } from 'lucide-react';\n\nfunction Checkbox({\n className,\n checked,\n ...props\n}: ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot='checkbox'\n checked={checked}\n className={cn(\n 'peer border-input bg-background focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground dark:data-[state=checked]:bg-primary relative flex size-4 shrink-0 items-center justify-center rounded-[5px] border transition-shadow outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3',\n className,\n )}\n {...props}>\n <CheckboxPrimitive.Indicator\n data-slot='checkbox-indicator'\n className='grid place-content-center text-current transition-none [&>svg]:size-3.5'>\n {checked === 'indeterminate' ? (\n <MinusIcon aria-hidden='true' />\n ) : (\n <CheckIcon aria-hidden='true' />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","import { memo, useId, type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/Select/select';\nimport type { TablePaginationProps } from '../Table/data-table.types';\n\nfunction Pagination({ className, ...props }: ComponentProps<'nav'>) {\n return (\n <nav\n role='navigation'\n aria-label='pagination'\n data-slot='pagination'\n className={cn('mx-auto flex w-full justify-center', className)}\n {...props}\n />\n );\n}\n\nfunction PaginationContent({ className, ...props }: ComponentProps<'ul'>) {\n return (\n <ul\n data-slot='pagination-content'\n className={cn('flex items-center gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction PaginationItem({ ...props }: ComponentProps<'li'>) {\n return <li data-slot='pagination-item' {...props} />;\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n} & Pick<ComponentProps<typeof Button>, 'size'> &\n ComponentProps<'a'>;\n\nfunction PaginationLink({ className, isActive, size = 'sm', ...props }: PaginationLinkProps) {\n return (\n <Button\n asChild\n variant={isActive ? 'outline' : 'ghost'}\n size={size}\n className={cn(className)}>\n <a\n aria-current={isActive ? 'page' : undefined}\n data-slot='pagination-link'\n data-active={isActive}\n {...props}\n />\n </Button>\n );\n}\n\nfunction PaginationPrevious({\n className,\n text = 'Previous',\n ...props\n}: ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label='Go to previous page'\n size='sm'\n className={cn('pl-2!', className)}\n {...props}>\n <ChevronLeftIcon data-icon='inline-start' />\n <span className='hidden sm:block'>{text}</span>\n </PaginationLink>\n );\n}\n\nfunction PaginationNext({\n className,\n text = 'Next',\n ...props\n}: ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label='Go to next page'\n size='sm'\n className={cn('pr-2!', className)}\n {...props}>\n <span className='hidden sm:block'>{text}</span>\n <ChevronRightIcon data-icon='inline-end' />\n </PaginationLink>\n );\n}\n\nfunction PaginationEllipsis({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n aria-hidden\n data-slot='pagination-ellipsis'\n className={cn(\n \"flex size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <MoreHorizontalIcon />\n <span className='sr-only'>More pages</span>\n </span>\n );\n}\n\n// Page-number generation mirrors the legacy TablePagination:\n// show all pages when total <= 7; otherwise first + last + a window\n// around the current page, with 'ellipsis' fillers.\nfunction getPageItems(page: number, totalPages: number): (number | 'ellipsis')[] {\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n const items: (number | 'ellipsis')[] = [1];\n const start = Math.max(2, page - 1);\n const end = Math.min(totalPages - 1, page + 1);\n if (start > 2) items.push('ellipsis');\n for (let p = start; p <= end; p++) items.push(p);\n if (end < totalPages - 1) items.push('ellipsis');\n items.push(totalPages);\n return items;\n}\n\nconst DEFAULT_ROWS_PER_PAGE = [10, 25, 50, 100];\n\nfunction TablePaginationBase({\n page,\n totalPages,\n perPage,\n totalRecords,\n rowsPerPageOptions = DEFAULT_ROWS_PER_PAGE,\n onPageChange,\n onPerPageChange,\n}: TablePaginationProps) {\n const rowsPerPageLabelId = useId();\n const pageItems = getPageItems(page, totalPages);\n\n // Guard empty state: show 0–0 when there are no records.\n const hasRecords = totalRecords !== undefined && totalRecords > 0;\n const from = hasRecords ? (page - 1) * perPage + 1 : 0;\n const to = hasRecords ? Math.min(page * perPage, totalRecords as number) : 0;\n\n // Derive position-stable ellipsis keys: at most two ellipses can appear,\n // one near the start and one near the end of the page range.\n let ellipsisCount = 0;\n const ellipsisKeys = pageItems.map((item) => {\n if (item === 'ellipsis') {\n ellipsisCount += 1;\n return ellipsisCount === 1 ? 'ellipsis-start' : 'ellipsis-end';\n }\n return null;\n });\n\n return (\n <nav\n role='navigation'\n aria-label='Table pagination'\n data-slot='table-pagination'\n className='flex flex-wrap items-center justify-between gap-4 py-2'>\n {totalRecords !== undefined && totalRecords > 0 && (\n <p className='text-muted-foreground text-sm'>\n Showing {from}–{to} of {totalRecords}\n </p>\n )}\n\n <ul data-slot='pagination-content' className='flex items-center gap-1'>\n <li>\n <Button\n variant='ghost'\n size='sm'\n aria-label='Go to previous page'\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}>\n <ChevronLeftIcon data-icon='inline-start' />\n <span className='hidden sm:block'>Previous</span>\n </Button>\n </li>\n\n {pageItems.map((item, index) =>\n item === 'ellipsis' ? (\n <li key={ellipsisKeys[index]!}>\n <span aria-hidden className='flex size-9 items-center justify-center'>\n <MoreHorizontalIcon />\n </span>\n </li>\n ) : (\n <li key={item}>\n <Button\n variant={item === page ? 'primary' : 'ghost'}\n size='sm'\n aria-current={item === page ? 'page' : undefined}\n onClick={() => onPageChange(item)}>\n {item}\n </Button>\n </li>\n ),\n )}\n\n <li>\n <Button\n variant='ghost'\n size='sm'\n aria-label='Go to next page'\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}>\n <span className='hidden sm:block'>Next</span>\n <ChevronRightIcon data-icon='inline-end' />\n </Button>\n </li>\n </ul>\n\n <div className='flex items-center gap-2'>\n {/* Programmatically associated with the SelectTrigger via aria-labelledby */}\n <span id={rowsPerPageLabelId} className='text-muted-foreground text-sm'>\n Rows per page\n </span>\n <Select value={String(perPage)} onValueChange={(v) => onPerPageChange(Number(v))}>\n <SelectTrigger aria-labelledby={rowsPerPageLabelId} className='w-20'>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {rowsPerPageOptions.map((opt) => (\n <SelectItem key={opt} value={String(opt)}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </nav>\n );\n}\n\nconst TablePagination = memo(TablePaginationBase);\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n TablePagination,\n};\n","import { useEffect, useState } from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n // Initialize to false on both server and client to avoid hydration mismatch.\n // The real value is resolved in useEffect after mount.\n const [matches, setMatches] = useState<boolean>(false);\n\n useEffect(() => {\n // Safety guard for non-DOM environments (e.g. jsdom without matchMedia stub).\n // Effects do not run during SSR; this only matters in test environments.\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n","import { createContext, useContext } from 'react';\n\nimport type { TableContextType } from './data-table.types';\n\nconst TableContext = createContext<TableContextType<unknown> | null>(null);\n\nfunction useTableContext<T = unknown>() {\n const ctx = useContext(TableContext);\n if (!ctx) {\n throw new Error('useTableContext must be used within DataTable');\n }\n // React context cannot be runtime-generic: the context is created as\n // TableContextType<unknown> and re-cast to the consumer's T at this hook\n // boundary. The cast is intentional — there is no runtime way to parameterise\n // a React context with T, so type safety for T through context is not\n // guaranteed and must be enforced by the DataTable provider at the call site.\n return ctx as unknown as TableContextType<T>;\n}\n\n/** Returns the context value or null when called outside a DataTable provider. */\nfunction useTableContextSafe<T = unknown>() {\n return useContext(TableContext) as TableContextType<T> | null;\n}\n\nexport { TableContext, useTableContext, useTableContextSafe };\n","import { useMemo, type ReactNode } from 'react';\nimport { flexRender, type Row, type Column, type Cell } from '@tanstack/react-table';\n\nimport { cn } from '@/lib/utils';\nimport type { ColumnMeta, TableCellSize, TableVariant } from './data-table.types';\n\ninterface DataTableCardViewProps<T> {\n rows: Row<T>[];\n columns: Column<T, unknown>[];\n size?: TableCellSize;\n variant?: TableVariant;\n onRowClick?: (row: T) => void;\n isLoading?: boolean;\n skeletonRowCount?: number;\n emptyState?: ReactNode;\n}\n\nconst cardPadding: Record<TableCellSize, string> = {\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-5',\n};\n\nfunction DataTableCardView<T>({\n rows,\n columns,\n size = 'md',\n variant = 'default',\n onRowClick,\n isLoading,\n skeletonRowCount = 5,\n emptyState,\n}: DataTableCardViewProps<T>) {\n // Hooks must run unconditionally, before any early return (rules of hooks).\n const selectCol = useMemo(() => columns.find((c) => c.id === 'select'), [columns]);\n const actionsCol = useMemo(() => columns.find((c) => c.id === 'actions'), [columns]);\n const dataColumns = useMemo(\n () =>\n columns.filter(\n (c) =>\n c.id !== 'select' &&\n c.id !== 'actions' &&\n !(c.columnDef.meta as ColumnMeta)?.hideInCard,\n ),\n [columns],\n );\n\n if (isLoading) {\n return (\n <div className='space-y-2' aria-busy='true' aria-label='Loading table data'>\n {Array.from({ length: skeletonRowCount }).map((_, i) => (\n <div\n key={i}\n className={cn(\n 'bg-card animate-pulse rounded-md border',\n cardPadding[size],\n )}>\n <div className='space-y-2'>\n <div className='bg-muted h-4 w-1/3 rounded' aria-hidden='true' />\n <div className='bg-muted h-3 w-full rounded' aria-hidden='true' />\n <div className='bg-muted h-3 w-2/3 rounded' aria-hidden='true' />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (rows.length === 0) {\n return (\n <div className='bg-card text-muted-foreground rounded-md border p-8 text-center'>\n {emptyState ?? 'No results found'}\n </div>\n );\n }\n\n return (\n <div\n data-slot='data-table-card-view'\n className='space-y-2'\n role='list'\n aria-label='Table rows'>\n {rows.map((row) => {\n const isSelected = row.getIsSelected();\n const visibleCells = row.getVisibleCells();\n\n // Compute select/actions cells above the return to avoid IIFE patterns.\n const selectCell: Cell<T, unknown> | undefined = selectCol\n ? visibleCells.find((c) => c.column.id === 'select')\n : undefined;\n const actionsCell: Cell<T, unknown> | undefined = actionsCol\n ? visibleCells.find((c) => c.column.id === 'actions')\n : undefined;\n\n return (\n <div\n key={row.id}\n role='listitem'\n data-state={isSelected ? 'selected' : undefined}\n data-variant={variant}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n onKeyDown={\n onRowClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n tabIndex={onRowClick ? 0 : undefined}\n className={cn(\n 'bg-card text-card-foreground rounded-md border transition-colors',\n cardPadding[size],\n isSelected && 'border-primary/50 bg-muted',\n onRowClick &&\n 'hover:bg-muted focus-visible:ring-ring cursor-pointer focus-visible:ring-2 focus-visible:outline-none',\n variant === 'striped' && 'odd:bg-muted/20',\n )}>\n {selectCell && (\n <div className='mb-3 flex items-center'>\n {flexRender(selectCol!.columnDef.cell, selectCell.getContext())}\n </div>\n )}\n\n <dl className='grid grid-cols-2 gap-x-4 gap-y-2'>\n {dataColumns.map((col) => {\n const meta = (col.columnDef.meta ?? {}) as ColumnMeta;\n const cell = visibleCells.find((c) => c.column.id === col.id);\n if (!cell) return null;\n const labelText =\n meta.cardLabel ??\n (typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id);\n return (\n <div key={col.id} className='flex flex-col gap-0.5'>\n <dt className='text-muted-foreground text-xs font-medium'>\n {labelText}\n </dt>\n <dd className='truncate text-sm'>\n {flexRender(col.columnDef.cell, cell.getContext())}\n </dd>\n </div>\n );\n })}\n </dl>\n\n {actionsCell && (\n <div className='mt-3 flex justify-end border-t pt-2'>\n {flexRender(actionsCol!.columnDef.cell, actionsCell.getContext())}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport { DataTableCardView };\nexport type { DataTableCardViewProps };\n","import type { Row } from '@tanstack/react-table';\nimport type { ColumnFiltersState } from '@tanstack/react-table';\n\n/**\n * Extracts unique values from a column in the dataset\n * @param data - The array of data objects\n * @param columnId - The column identifier\n * @param accessor - Optional accessor function to get the value from a row\n * @returns Array of unique string values, sorted alphabetically\n */\nexport function getUniqueColumnValues<T>(\n data: T[],\n columnId: string,\n accessor?: (row: T, index: number) => unknown,\n): string[] {\n const values = new Set<string>();\n\n data.forEach((row, index) => {\n let value: unknown;\n\n if (accessor) {\n value = accessor(row, index);\n } else {\n // Default: access by columnId\n value = (row as Record<string, unknown>)[columnId];\n }\n\n // Convert to string and add to set (handles null/undefined)\n if (value != null) {\n values.add(String(value));\n }\n });\n\n // Intentional locale fix: pass 'en' for deterministic cross-locale alphabetical sort.\n return Array.from(values).sort((a, b) => a.localeCompare(b, 'en'));\n}\n\n/**\n * Custom filter function for TanStack Table multi-select filtering\n * Checks if the row's value is included in the array of selected filter values\n * @param row - The row being filtered\n * @param columnId - The column identifier\n * @param filterValue - Array of selected filter values\n * @returns true if the row should be included in filtered results\n */\nexport function multiSelectFilter<T>(row: Row<T>, columnId: string, filterValue: unknown): boolean {\n // Guard: only treat the value as a string array when it actually is one.\n const filterValues: string[] = Array.isArray(filterValue) ? (filterValue as string[]) : [];\n\n // If no filters selected, pass through — show all rows (original semantics).\n if (filterValues.length === 0) {\n return true;\n }\n\n // Get the cell value\n const cellValue = row.getValue(columnId);\n\n // Convert to string and check if it's in the filter array\n if (cellValue != null) {\n return filterValues.includes(String(cellValue));\n }\n\n return false;\n}\n\n/**\n * Searches for a term within an array of items (case-insensitive)\n * @param items - Array of items to search through\n * @param searchTerm - The search term\n * @returns Filtered array of items matching the search term\n */\nexport function searchInArray(items: string[], searchTerm: string): string[] {\n if (!searchTerm || searchTerm.trim() === '') {\n return items;\n }\n\n const normalizedSearch = searchTerm.toLowerCase().trim();\n\n return items.filter((item) => item.toLowerCase().includes(normalizedSearch));\n}\n\n/**\n * Gets the count of rows for each unique value in a column\n * Useful for showing counts next to filter options (e.g., \"Active (5)\")\n * @param data - The array of data objects\n * @param columnId - The column identifier\n * @param accessor - Optional accessor function to get the value from a row\n * @returns Object mapping values to their counts\n */\nexport function getColumnValueCounts<T>(\n data: T[],\n columnId: string,\n accessor?: (row: T, index: number) => unknown,\n): Record<string, number> {\n const counts: Record<string, number> = {};\n\n data.forEach((row, index) => {\n let value: unknown;\n\n if (accessor) {\n value = accessor(row, index);\n } else {\n value = (row as Record<string, unknown>)[columnId];\n }\n\n if (value != null) {\n const stringValue = String(value);\n counts[stringValue] = (counts[stringValue] || 0) + 1;\n }\n });\n\n return counts;\n}\n\n/**\n * Checks if a column has active filters\n * @param columnFilters - Current column filters state\n * @param columnId - The column identifier\n * @returns true if the column has active filters\n */\nexport function hasActiveFilters(columnFilters: ColumnFiltersState, columnId: string): boolean {\n const filter = columnFilters.find((f) => f.id === columnId);\n if (!filter) return false;\n return Array.isArray(filter.value) ? filter.value.length > 0 : false;\n}\n\n/**\n * Gets the active filter values for a specific column\n * @param columnFilters - Current column filters state\n * @param columnId - The column identifier\n * @returns Array of active filter values for the column\n */\nexport function getActiveFilterValues(\n columnFilters: ColumnFiltersState,\n columnId: string,\n): string[] {\n const filter = columnFilters.find((f) => f.id === columnId);\n if (!filter) return [];\n return Array.isArray(filter.value) ? (filter.value as string[]) : [];\n}\n\n/**\n * Gets the count of active filters across all columns\n * @param columnFilters - Current column filters state\n * @returns Total number of active filter values\n */\nexport function getActiveFilterCount(columnFilters: ColumnFiltersState): number {\n return columnFilters.reduce((total, filter) => {\n return total + (Array.isArray(filter.value) ? filter.value.length : 0);\n }, 0);\n}\n","import { memo, useCallback, useId, useMemo, useState } from 'react';\nimport { Funnel } from 'lucide-react';\nimport { Button } from '@/components/ui/Button/button';\nimport { Checkbox } from '@/components/ui/Checkbox/checkbox';\nimport { Input } from '@/components/ui/Input/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\nimport { cn } from '@/lib/utils';\n\nimport { searchInArray } from './utils/filter-utils';\n\ninterface FilterOptionProps {\n value: string;\n checked: boolean;\n onChange: (value: string, checked: boolean) => void;\n}\n\nconst FilterOption = memo(function FilterOption({\n value,\n checked,\n onChange,\n}: FilterOptionProps) {\n // Radix Checkbox renders a <button role=\"checkbox\">. A button is a labelable\n // element, so an explicit htmlFor/id association gives it an accessible name\n // (equal to the visible text) and lets clicking the text toggle it.\n const id = useId();\n return (\n <div className='hover:bg-muted flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm'>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(state) => onChange(value, state === true)}\n />\n <label htmlFor={id} className='flex-1 cursor-pointer truncate'>\n {value}\n </label>\n </div>\n );\n});\n\ninterface DataTableColumnFilterProps {\n options: string[];\n selectedValues: string[];\n onChange: (values: string[]) => void;\n searchPlaceholder?: string;\n /** Human-readable column name used to build accessible labels. */\n columnLabel?: string;\n}\n\nfunction DataTableColumnFilter({\n options,\n selectedValues,\n onChange,\n searchPlaceholder,\n columnLabel = 'column',\n}: DataTableColumnFilterProps) {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n\n const listId = useId();\n\n const hasActive = selectedValues.length > 0;\n const visibleOptions = useMemo(\n () => (search ? searchInArray(options, search) : options),\n [options, search],\n );\n\n const handleOptionChange = useCallback(\n (value: string, checked: boolean) => {\n if (checked) onChange([...selectedValues, value]);\n else onChange(selectedValues.filter((v) => v !== value));\n },\n [selectedValues, onChange],\n );\n\n const allVisibleSelected =\n visibleOptions.length > 0 && visibleOptions.every((o) => selectedValues.includes(o));\n\n const toggleSelectAll = useCallback(() => {\n if (allVisibleSelected) {\n onChange(selectedValues.filter((v) => !visibleOptions.includes(v)));\n } else {\n const merged = new Set([...selectedValues, ...visibleOptions]);\n onChange(Array.from(merged));\n }\n }, [allVisibleSelected, selectedValues, visibleOptions, onChange]);\n\n const resolvedPlaceholder = searchPlaceholder ?? `Search ${columnLabel}…`;\n // Convey active state via text, not color/shape alone (WCAG 1.4.1).\n const triggerLabel = hasActive\n ? `Filter ${columnLabel}, ${selectedValues.length} selected`\n : `Filter ${columnLabel}`;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n data-slot='data-table-column-filter'\n variant='ghost'\n size='sm'\n aria-label={triggerLabel}\n data-active={hasActive || undefined}\n className={cn(\n 'size-7 cursor-pointer p-0 text-white/80 hover:text-white',\n 'focus-visible:border-transparent focus-visible:ring-2 focus-visible:ring-white/70',\n hasActive && 'text-white',\n )}>\n {hasActive ? (\n <Funnel className='size-4' aria-hidden='true' fill='white' />\n ) : (\n <Funnel className='size-4' aria-hidden='true' />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent align='start' className='w-64 p-2'>\n <Input\n type='text'\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={resolvedPlaceholder}\n aria-label={resolvedPlaceholder}\n aria-controls={listId}\n className='mb-2 h-8'\n />\n <button\n type='button'\n onClick={toggleSelectAll}\n aria-pressed={allVisibleSelected}\n disabled={visibleOptions.length === 0}\n className='hover:bg-muted mb-1 w-full rounded-sm px-2 py-1.5 text-left text-sm font-medium disabled:pointer-events-none disabled:opacity-50'>\n {allVisibleSelected ? 'Deselect all' : 'Select all'}\n </button>\n {/* Polite live region announces result count as the user types. */}\n <span className='sr-only' role='status' aria-live='polite'>\n {visibleOptions.length === 0\n ? 'No options'\n : `${visibleOptions.length} options`}\n </span>\n <div\n id={listId}\n role='group'\n aria-label={`${columnLabel} filter options`}\n className='max-h-64 overflow-y-auto'>\n {visibleOptions.length === 0 ? (\n <p className='text-muted-foreground px-2 py-1.5 text-sm'>No options</p>\n ) : (\n visibleOptions.map((option) => (\n <FilterOption\n key={option}\n value={option}\n checked={selectedValues.includes(option)}\n onChange={handleOptionChange}\n />\n ))\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DataTableColumnFilter, FilterOption };\nexport type { DataTableColumnFilterProps, FilterOptionProps };\n","import { useCallback } from 'react';\n\nimport { useTableContext } from '../data-table-context';\nimport { getActiveFilterValues } from '../utils/filter-utils';\n\nexport function useColumnFilter(columnId: string) {\n const { columnFilters, setColumnFilters } = useTableContext();\n\n const selectedValues = getActiveFilterValues(columnFilters, columnId);\n\n const handleChange = useCallback(\n (values: string[]) => {\n const newFilters = [...columnFilters];\n const existingFilterIndex = newFilters.findIndex((f) => f.id === columnId);\n\n if (values.length > 0) {\n if (existingFilterIndex >= 0) {\n newFilters[existingFilterIndex] = { id: columnId, value: values };\n } else {\n newFilters.push({ id: columnId, value: values });\n }\n } else {\n if (existingFilterIndex >= 0) {\n newFilters.splice(existingFilterIndex, 1);\n }\n }\n\n setColumnFilters(newFilters);\n },\n [columnFilters, columnId, setColumnFilters],\n );\n\n return {\n selectedValues,\n handleChange,\n };\n}\n","import type { AriaAttributes, CSSProperties } from 'react';\nimport { flexRender, type Header } from '@tanstack/react-table';\nimport {ArrowUp, ArrowDown, ArrowUpDown} from 'lucide-react';\nimport { TableHead } from '@/components/ui/Table/table';\nimport { cn } from '@/lib/utils';\n\nimport { DataTableColumnFilter } from './data-table-column-filter';\nimport { useTableContext } from './data-table-context';\nimport { useColumnFilter } from './hooks/use-column-filter';\nimport type { ColumnMeta } from './data-table.types';\n\ninterface DataTableHeaderCellProps<T> {\n header: Header<T, unknown>;\n}\n\nfunction DataTableHeaderCell<T>({ header }: DataTableHeaderCellProps<T>) {\n const { getUniqueValues, size: tableSize } = useTableContext<T>();\n const column = header.column;\n const meta = (column.columnDef.meta ?? {}) as ColumnMeta;\n\n const canSort = column.getCanSort() && meta.sortable !== false;\n const canFilter = column.getCanFilter() && meta.filterable !== false;\n const canResize = header.column.getCanResize() && meta.resizable !== false;\n const sortDir = column.getIsSorted();\n const pinned = column.getIsPinned();\n\n const { selectedValues, handleChange } = useColumnFilter(column.id);\n const options = getUniqueValues?.(column.id) ?? [];\n\n const pinnedStyle: CSSProperties | undefined = pinned\n ? {\n position: 'sticky',\n left: pinned === 'left' ? column.getStart('left') : undefined,\n right: pinned === 'right' ? column.getAfter('right') : undefined,\n zIndex: 21,\n }\n : undefined;\n\n // Map TanStack sort state to the WAI-ARIA aria-sort attribute value.\n const ariaSortValue: AriaAttributes['aria-sort'] = canSort\n ? sortDir === 'asc'\n ? 'ascending'\n : sortDir === 'desc'\n ? 'descending'\n : 'none'\n : undefined;\n\n return (\n <TableHead\n data-slot='data-table-header-cell'\n data-size={meta.size ?? tableSize}\n data-align={meta.align ?? 'left'}\n data-pinned={pinned || undefined}\n aria-sort={ariaSortValue}\n style={{\n width: canResize ? header.column.getSize() : meta.width,\n minWidth: meta.width,\n ...pinnedStyle,\n }}\n className={cn(\n 'bg-primary text-primary-foreground',\n canResize && 'relative',\n meta.align === 'center' && 'text-center',\n meta.align === 'right' && 'text-right',\n meta.className,\n )}>\n <div\n className={cn(\n 'flex items-center gap-1',\n meta.align === 'center' && 'justify-center',\n meta.align === 'right' && 'justify-end',\n )}>\n {canSort ? (\n <button\n type='button'\n onClick={column.getToggleSortingHandler()}\n className='inline-flex items-center gap-1 rounded-sm outline-none focus-visible:ring-2 focus-visible:ring-white/70'>\n {flexRender(column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? (\n <ArrowUp className='size-4' aria-hidden='true' />\n ) : sortDir === 'desc' ? (\n <ArrowDown className='size-4' aria-hidden='true' />\n ) : (\n <ArrowUpDown className='size-4 opacity-60' aria-hidden='true' />\n )}\n </button>\n ) : (\n flexRender(column.columnDef.header, header.getContext())\n )}\n {canFilter && (\n <DataTableColumnFilter\n options={options}\n selectedValues={selectedValues}\n onChange={handleChange}\n columnLabel={column.id}\n />\n )}\n </div>\n {canResize && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute top-0 right-0 h-full w-1 cursor-col-resize touch-none select-none',\n 'hover:bg-white/30',\n header.column.getIsResizing() && 'bg-white/50',\n )}\n aria-hidden='true'\n />\n )}\n </TableHead>\n );\n}\n\nexport { DataTableHeaderCell };\nexport type { DataTableHeaderCellProps };\n","import { Skeleton } from '@/components/ui/Skeleton/skeleton';\nimport { TableCell, TableRow } from '@/components/ui/Table/table';\n\nimport type { TableCellSize } from './data-table.types';\n\nconst sizeClass: Record<TableCellSize, string> = {\n sm: 'h-8',\n md: 'h-10',\n lg: 'h-12',\n};\n\ninterface DataTableSkeletonProps {\n columnCount: number;\n rowCount?: number;\n size?: TableCellSize;\n}\n\nfunction DataTableSkeleton({ columnCount, rowCount = 5, size = 'md' }: DataTableSkeletonProps) {\n return (\n <>\n {Array.from({ length: rowCount }).map((_, rowIndex) => (\n <TableRow\n key={`skeleton-row-${rowIndex}`}\n data-slot='table-skeleton-row'\n aria-busy='true'>\n {Array.from({ length: columnCount }).map((_, cellIndex) => (\n <TableCell\n key={`skeleton-cell-${rowIndex}-${cellIndex}`}\n className={sizeClass[size]}>\n <Skeleton className='h-4 w-full' />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </>\n );\n}\n\nexport { DataTableSkeleton };\nexport type { DataTableSkeletonProps };\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { SortingState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSortingProps {\n /**\n * Controlled sorting state (optional)\n * If provided, the component operates in controlled mode\n */\n sorting?: SortingState;\n\n /**\n * Default sorting state for uncontrolled mode\n * @default []\n */\n defaultSorting?: SortingState;\n\n /**\n * Callback fired when sorting changes\n * Required for controlled mode, optional for uncontrolled\n */\n onSortingChange?: (sorting: SortingState) => void;\n}\n\nexport interface UseTableSortingReturn {\n /**\n * Current sorting state (controlled or internal)\n */\n sortingState: SortingState;\n\n /**\n * Handler for TanStack Table's onSortingChange\n */\n handleSortingChange: (updater: Updater<SortingState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setSorting: (sorting: SortingState) => void;\n}\n\n/**\n * Hook to manage table sorting state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { sortingState, handleSortingChange } = useTableSorting({\n * defaultSorting: [{ id: 'name', desc: false }],\n * onSortingChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [sorting, setSorting] = useState<SortingState>([]);\n * const { sortingState, handleSortingChange } = useTableSorting({\n * sorting,\n * onSortingChange: setSorting\n * });\n * ```\n */\nexport function useTableSorting({\n sorting: controlledSorting,\n defaultSorting = [],\n onSortingChange,\n}: UseTableSortingProps): UseTableSortingReturn {\n // Internal state for uncontrolled mode\n const [internalSorting, setInternalSorting] = useState<SortingState>(defaultSorting);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onSortingChange);\n useLayoutEffect(() => {\n onChangeRef.current = onSortingChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledSorting !== undefined;\n\n // Use controlled sorting if provided, otherwise use internal state\n const sortingState = isControlled ? controlledSorting : internalSorting;\n\n /**\n * Handle sorting changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleSortingChange = useCallback(\n (updater: Updater<SortingState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newSorting =\n typeof updater === 'function' ? updater(controlledSorting) : updater;\n onChangeRef.current?.(newSorting);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalSorting((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledSorting is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledSorting],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setSorting = useCallback(\n (newSorting: SortingState) => {\n if (isControlled) {\n onChangeRef.current?.(newSorting);\n } else {\n setInternalSorting(newSorting);\n onChangeRef.current?.(newSorting);\n }\n },\n [isControlled],\n );\n\n return {\n sortingState,\n handleSortingChange,\n isControlled,\n setSorting,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { ColumnFiltersState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableFilteringProps {\n /**\n * Controlled column filters state (optional)\n * If provided, the component operates in controlled mode\n */\n columnFilters?: ColumnFiltersState;\n\n /**\n * Default column filters state for uncontrolled mode\n * @default []\n */\n defaultColumnFilters?: ColumnFiltersState;\n\n /**\n * Callback fired when column filters change\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnFiltersChange?: (columnFilters: ColumnFiltersState) => void;\n}\n\nexport interface UseTableFilteringReturn {\n /**\n * Current column filters state (controlled or internal)\n */\n columnFiltersState: ColumnFiltersState;\n\n /**\n * Handler for TanStack Table's onColumnFiltersChange\n */\n handleColumnFiltersChange: (updater: Updater<ColumnFiltersState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnFilters: (columnFilters: ColumnFiltersState) => void;\n}\n\n/**\n * Hook to manage table column filtering state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnFiltersState, handleColumnFiltersChange } = useTableFiltering({\n * defaultColumnFilters: [{ id: 'status', value: ['Active'] }],\n * onColumnFiltersChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [filters, setFilters] = useState<ColumnFiltersState>([]);\n * const { columnFiltersState, handleColumnFiltersChange } = useTableFiltering({\n * columnFilters: filters,\n * onColumnFiltersChange: setFilters\n * });\n * ```\n */\nexport function useTableFiltering({\n columnFilters: controlledFilters,\n defaultColumnFilters = [],\n onColumnFiltersChange,\n}: UseTableFilteringProps): UseTableFilteringReturn {\n // Internal state for uncontrolled mode\n const [internalFilters, setInternalFilters] =\n useState<ColumnFiltersState>(defaultColumnFilters);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnFiltersChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnFiltersChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledFilters !== undefined;\n\n // Use controlled filters if provided, otherwise use internal state\n const columnFiltersState = isControlled ? controlledFilters : internalFilters;\n\n /**\n * Handle column filters changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnFiltersChange = useCallback(\n (updater: Updater<ColumnFiltersState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newFilters =\n typeof updater === 'function' ? updater(controlledFilters) : updater;\n onChangeRef.current?.(newFilters);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalFilters((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledFilters is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledFilters],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnFilters = useCallback(\n (newFilters: ColumnFiltersState) => {\n if (isControlled) {\n onChangeRef.current?.(newFilters);\n } else {\n setInternalFilters(newFilters);\n onChangeRef.current?.(newFilters);\n }\n },\n [isControlled],\n );\n\n return {\n columnFiltersState,\n handleColumnFiltersChange,\n isControlled,\n setColumnFilters,\n };\n}\n","import { useState, useCallback } from 'react';\nimport type { RowSelectionState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSelectionProps {\n rowSelection?: RowSelectionState;\n defaultRowSelection?: RowSelectionState;\n onRowSelectionChange?: (state: RowSelectionState) => void;\n}\n\nexport interface UseTableSelectionReturn {\n rowSelectionState: RowSelectionState;\n handleRowSelectionChange: (updater: Updater<RowSelectionState>) => void;\n setRowSelection: (state: RowSelectionState) => void;\n}\n\nexport function useTableSelection({\n rowSelection: controlled,\n defaultRowSelection = {},\n onRowSelectionChange,\n}: UseTableSelectionProps): UseTableSelectionReturn {\n const [internal, setInternal] = useState<RowSelectionState>(defaultRowSelection);\n const isControlled = controlled !== undefined;\n const rowSelectionState = isControlled ? controlled : internal;\n\n const handleRowSelectionChange = useCallback(\n (updater: Updater<RowSelectionState>) => {\n const next = typeof updater === 'function' ? updater(rowSelectionState) : updater;\n if (!isControlled) setInternal(next);\n onRowSelectionChange?.(next);\n },\n [isControlled, rowSelectionState, onRowSelectionChange],\n );\n\n const setRowSelection = useCallback(\n (next: RowSelectionState) => {\n if (!isControlled) setInternal(next);\n onRowSelectionChange?.(next);\n },\n [isControlled, onRowSelectionChange],\n );\n\n return { rowSelectionState, handleRowSelectionChange, setRowSelection };\n}\n","import { useState, useCallback } from 'react';\n\nexport interface UseTableGlobalFilterProps {\n /**\n * Controlled global filter state (optional)\n * If provided, the component operates in controlled mode\n */\n globalFilter?: string;\n\n /**\n * Default global filter state for uncontrolled mode\n * @default ''\n */\n defaultGlobalFilter?: string;\n\n /**\n * Callback fired when global filter changes\n * Required for controlled mode, optional for uncontrolled\n */\n onGlobalFilterChange?: (value: string) => void;\n}\n\nexport interface UseTableGlobalFilterReturn {\n /**\n * Current global filter state (controlled or internal)\n */\n globalFilterState: string;\n\n /**\n * Handler for global filter changes\n */\n handleGlobalFilterChange: (value: string) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setGlobalFilter: (value: string) => void;\n}\n\n/**\n * Hook to manage table global filter state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { globalFilterState, handleGlobalFilterChange } = useTableGlobalFilter({\n * defaultGlobalFilter: '',\n * onGlobalFilterChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [globalFilter, setGlobalFilter] = useState<string>('');\n * const { globalFilterState, handleGlobalFilterChange } = useTableGlobalFilter({\n * globalFilter,\n * onGlobalFilterChange: setGlobalFilter\n * });\n * ```\n */\nexport function useTableGlobalFilter({\n globalFilter: controlledFilter,\n defaultGlobalFilter = '',\n onGlobalFilterChange,\n}: UseTableGlobalFilterProps): UseTableGlobalFilterReturn {\n // Internal state for uncontrolled mode\n const [internalFilter, setInternalFilter] = useState<string>(defaultGlobalFilter);\n\n // Determine if component is in controlled mode\n const isControlled = controlledFilter !== undefined;\n\n // Use controlled filter if provided, otherwise use internal state\n const globalFilterState = isControlled ? controlledFilter : internalFilter;\n\n /**\n * Handle global filter changes\n */\n const handleGlobalFilterChange = useCallback(\n (value: string) => {\n if (isControlled) {\n // In controlled mode: only notify parent\n onGlobalFilterChange?.(value);\n } else {\n // In uncontrolled mode: update internal state\n setInternalFilter(value);\n // And optionally notify parent\n onGlobalFilterChange?.(value);\n }\n },\n [isControlled, onGlobalFilterChange],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setGlobalFilter = useCallback(\n (value: string) => {\n if (isControlled) {\n onGlobalFilterChange?.(value);\n } else {\n setInternalFilter(value);\n onGlobalFilterChange?.(value);\n }\n },\n [isControlled, onGlobalFilterChange],\n );\n\n return {\n globalFilterState,\n handleGlobalFilterChange,\n isControlled,\n setGlobalFilter,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { VisibilityState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableVisibilityProps {\n /**\n * Controlled column visibility state (optional)\n * If provided, the component operates in controlled mode\n */\n columnVisibility?: VisibilityState;\n\n /**\n * Default column visibility state for uncontrolled mode\n * @default {}\n */\n defaultColumnVisibility?: VisibilityState;\n\n /**\n * Callback fired when column visibility changes\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnVisibilityChange?: (state: VisibilityState) => void;\n}\n\nexport interface UseTableVisibilityReturn {\n /**\n * Current column visibility state (controlled or internal)\n */\n columnVisibilityState: VisibilityState;\n\n /**\n * Handler for TanStack Table's onColumnVisibilityChange\n */\n handleColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnVisibility: (state: VisibilityState) => void;\n}\n\n/**\n * Hook to manage table column visibility state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnVisibilityState, handleColumnVisibilityChange } = useTableVisibility({\n * defaultColumnVisibility: { email: false },\n * onColumnVisibilityChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [visibility, setVisibility] = useState<VisibilityState>({});\n * const { columnVisibilityState, handleColumnVisibilityChange } = useTableVisibility({\n * columnVisibility: visibility,\n * onColumnVisibilityChange: setVisibility\n * });\n * ```\n */\nexport function useTableVisibility({\n columnVisibility: controlledVisibility,\n defaultColumnVisibility = {},\n onColumnVisibilityChange,\n}: UseTableVisibilityProps): UseTableVisibilityReturn {\n // Internal state for uncontrolled mode\n const [internalVisibility, setInternalVisibility] =\n useState<VisibilityState>(defaultColumnVisibility);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnVisibilityChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnVisibilityChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledVisibility !== undefined;\n\n // Use controlled visibility if provided, otherwise use internal state\n const columnVisibilityState = isControlled ? controlledVisibility : internalVisibility;\n\n /**\n * Handle column visibility changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnVisibilityChange = useCallback(\n (updater: Updater<VisibilityState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newVisibility =\n typeof updater === 'function' ? updater(controlledVisibility) : updater;\n onChangeRef.current?.(newVisibility);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalVisibility((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledVisibility is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledVisibility],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnVisibility = useCallback(\n (newVisibility: VisibilityState) => {\n if (isControlled) {\n onChangeRef.current?.(newVisibility);\n } else {\n setInternalVisibility(newVisibility);\n onChangeRef.current?.(newVisibility);\n }\n },\n [isControlled],\n );\n\n return {\n columnVisibilityState,\n handleColumnVisibilityChange,\n isControlled,\n setColumnVisibility,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { ColumnSizingState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSizingProps {\n /**\n * Controlled column sizing state (optional)\n * If provided, the component operates in controlled mode\n */\n columnSizing?: ColumnSizingState;\n\n /**\n * Default column sizing state for uncontrolled mode\n * @default {}\n */\n defaultColumnSizing?: ColumnSizingState;\n\n /**\n * Callback fired when column sizing changes\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnSizingChange?: (state: ColumnSizingState) => void;\n}\n\nexport interface UseTableSizingReturn {\n /**\n * Current column sizing state (controlled or internal)\n */\n columnSizingState: ColumnSizingState;\n\n /**\n * Handler for TanStack Table's onColumnSizingChange\n */\n handleColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnSizing: (state: ColumnSizingState) => void;\n}\n\n/**\n * Hook to manage table column sizing state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnSizingState, handleColumnSizingChange } = useTableSizing({\n * defaultColumnSizing: { name: 150, email: 200 },\n * onColumnSizingChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [sizing, setSizing] = useState<ColumnSizingState>({});\n * const { columnSizingState, handleColumnSizingChange } = useTableSizing({\n * columnSizing: sizing,\n * onColumnSizingChange: setSizing\n * });\n * ```\n */\nexport function useTableSizing({\n columnSizing: controlledSizing,\n defaultColumnSizing = {},\n onColumnSizingChange,\n}: UseTableSizingProps): UseTableSizingReturn {\n // Internal state for uncontrolled mode\n const [internalSizing, setInternalSizing] = useState<ColumnSizingState>(defaultColumnSizing);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnSizingChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnSizingChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledSizing !== undefined;\n\n // Use controlled sizing if provided, otherwise use internal state\n const columnSizingState = isControlled ? controlledSizing : internalSizing;\n\n /**\n * Handle column sizing changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnSizingChange = useCallback(\n (updater: Updater<ColumnSizingState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newSizing =\n typeof updater === 'function' ? updater(controlledSizing) : updater;\n onChangeRef.current?.(newSizing);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalSizing((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledSizing is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledSizing],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnSizing = useCallback(\n (newSizing: ColumnSizingState) => {\n if (isControlled) {\n onChangeRef.current?.(newSizing);\n } else {\n setInternalSizing(newSizing);\n onChangeRef.current?.(newSizing);\n }\n },\n [isControlled],\n );\n\n return {\n columnSizingState,\n handleColumnSizingChange,\n isControlled,\n setColumnSizing,\n };\n}\n","import { useCallback } from 'react';\nimport type { ColumnSizingState, VisibilityState } from '@tanstack/react-table';\nimport type { TableCellSize } from '../data-table.types';\n\nconst PREFIX = 'tcce-table';\n\nfunction storageKey(tableId: string, feature: string) {\n return `${PREFIX}:${tableId}:${feature}`;\n}\n\nfunction readJson<T>(key: string, fallback: T): T {\n if (typeof window === 'undefined') return fallback;\n try {\n const raw = localStorage.getItem(key);\n return raw ? (JSON.parse(raw) as T) : fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction writeJson(key: string, value: unknown): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // quota exceeded or incognito — fail silently\n }\n}\n\nexport interface UseTablePersistenceOptions {\n tableId?: string;\n defaultVisibility?: VisibilityState;\n defaultSizing?: ColumnSizingState;\n defaultDensity?: TableCellSize;\n}\n\nexport interface UseTablePersistenceReturn {\n initialVisibility: VisibilityState;\n initialSizing: ColumnSizingState;\n initialDensity: TableCellSize;\n persistVisibility: (v: VisibilityState) => void;\n persistSizing: (s: ColumnSizingState) => void;\n persistDensity: (d: TableCellSize) => void;\n}\n\nexport function useTablePersistence({\n tableId,\n defaultVisibility = {},\n defaultSizing = {},\n defaultDensity = 'md',\n}: UseTablePersistenceOptions): UseTablePersistenceReturn {\n // Keys are null when persistence is disabled (no tableId). Hooks run\n // unconditionally so the returned persist callbacks keep a stable identity\n // across renders — consumers can safely list them in effect dependencies.\n const visKey = tableId ? storageKey(tableId, 'visibility') : null;\n const sizKey = tableId ? storageKey(tableId, 'sizing') : null;\n const denKey = tableId ? storageKey(tableId, 'density') : null;\n\n const persistVisibility = useCallback(\n (v: VisibilityState) => {\n if (visKey) writeJson(visKey, v);\n },\n [visKey],\n );\n const persistSizing = useCallback(\n (s: ColumnSizingState) => {\n if (sizKey) writeJson(sizKey, s);\n },\n [sizKey],\n );\n const persistDensity = useCallback(\n (d: TableCellSize) => {\n if (denKey) writeJson(denKey, d);\n },\n [denKey],\n );\n\n return {\n initialVisibility: visKey\n ? readJson<VisibilityState>(visKey, defaultVisibility)\n : defaultVisibility,\n initialSizing: sizKey ? readJson<ColumnSizingState>(sizKey, defaultSizing) : defaultSizing,\n initialDensity: denKey ? readJson<TableCellSize>(denKey, defaultDensity) : defaultDensity,\n persistVisibility,\n persistSizing,\n persistDensity,\n };\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type CSSProperties } from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n type Cell,\n type ColumnPinningState,\n type Row,\n} from '@tanstack/react-table';\n\nimport { Table, TableBody, TableCell, TableHeader, TableRow } from '@/components/ui/Table/table';\nimport { cn } from '@/lib/utils';\n\nimport { useMediaQuery } from '@/lib/use-media-query';\nimport { TableContext, useTableContext } from './data-table-context';\nimport { DataTableCardView } from './data-table-card-view';\nimport { DataTableHeaderCell } from './data-table-header-cell';\nimport { DataTableSkeleton } from './data-table-skeleton';\nimport { useTableSorting } from './hooks/use-table-sorting';\nimport { useTableFiltering } from './hooks/use-table-filtering';\nimport { useTableSelection } from './hooks/use-table-selection';\nimport { useTableGlobalFilter } from './hooks/use-table-global-filter';\nimport { useTableVisibility } from './hooks/use-table-visibility';\nimport { useTableSizing } from './hooks/use-table-sizing';\nimport { useTablePersistence } from './hooks/use-table-persistence';\nimport { Checkbox } from '@/components/ui/Checkbox/checkbox';\nimport { getUniqueColumnValues, multiSelectFilter } from './utils/filter-utils';\nimport type {\n ColumnMeta,\n DataTableProps,\n TableCellSize,\n TableClassNames,\n TableColumnDef,\n TableContextType,\n} from './data-table.types';\n\nconst cellSizeClass: Record<TableCellSize, string> = {\n sm: 'px-4 py-2 text-xs',\n md: 'px-5 py-2.5 text-sm',\n lg: 'px-6 py-3 text-sm',\n};\n\nfunction resolveClassName<T>(\n value: string | ((row: Row<T>) => string) | undefined,\n row: Row<T>,\n): string | undefined {\n return typeof value === 'function' ? value(row) : value;\n}\n\nfunction DataTableCell<T>({\n cell,\n cellClassName,\n}: {\n cell: Cell<T, unknown>;\n cellClassName?: string;\n}) {\n const { size: tableSize } = useTableContext<T>();\n const meta = (cell.column.columnDef.meta ?? {}) as ColumnMeta;\n const pinned = cell.column.getIsPinned();\n const value = cell.getValue();\n\n const pinnedStyle: CSSProperties | undefined = pinned\n ? {\n position: 'sticky',\n left: pinned === 'left' ? cell.column.getStart('left') : undefined,\n right: pinned === 'right' ? cell.column.getAfter('right') : undefined,\n zIndex: 11,\n }\n : undefined;\n\n const resolvedWidth = cell.column.getCanResize() ? cell.column.getSize() : meta.width;\n\n return (\n <TableCell\n data-size={meta.size ?? tableSize}\n data-align={meta.align ?? 'left'}\n data-pinned={pinned || undefined}\n title={\n meta.ellipsis && (typeof value === 'string' || typeof value === 'number')\n ? String(value)\n : undefined\n }\n style={{ width: resolvedWidth, minWidth: meta.width, ...pinnedStyle }}\n className={cn(\n cellSizeClass[meta.size ?? tableSize],\n 'text-primary',\n meta.align === 'center' && 'text-center',\n meta.align === 'right' && 'text-right',\n meta.ellipsis && 'max-w-0 truncate',\n pinned && 'bg-background',\n meta.className,\n cellClassName,\n )}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n}\n\nfunction DataTableRow<T>({ row, classNames }: { row: Row<T>; classNames?: TableClassNames<T> }) {\n const { onRowClick, variant } = useTableContext<T>();\n const clickable = Boolean(onRowClick);\n const rowClassName = resolveClassName(classNames?.row, row);\n const cellClassName = resolveClassName(classNames?.cell, row);\n\n return (\n <TableRow\n data-variant={variant}\n data-clickable={clickable || undefined}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n onClick={clickable ? () => onRowClick?.(row.original) : undefined}\n onKeyDown={\n clickable\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick?.(row.original);\n }\n }\n : undefined\n }\n className={cn('hover:bg-muted', clickable && 'cursor-pointer', rowClassName)}>\n {row.getVisibleCells().map((cell) => (\n <DataTableCell key={cell.id} cell={cell} cellClassName={cellClassName} />\n ))}\n </TableRow>\n );\n}\n\nfunction DataTable<T>({\n data,\n columns,\n size = 'md',\n variant = 'default',\n isLoading = false,\n stickyHeader = false,\n maxHeight,\n sorting,\n defaultSorting = [],\n onSortingChange,\n enableSorting = true,\n manualSorting = false,\n columnFilters,\n defaultColumnFilters = [],\n onColumnFiltersChange,\n enableFiltering = true,\n manualFiltering = false,\n onRowClick,\n classNames,\n getUniqueValues,\n emptyState,\n rowSelection,\n defaultRowSelection = {},\n onRowSelectionChange,\n enableRowSelection = false,\n onSelectedRowsChange,\n responsiveBreakpoint = '(max-width: 767px)',\n disableResponsive = false,\n skeletonRowCount = 5,\n onTableReady,\n tableId,\n globalFilter,\n defaultGlobalFilter = '',\n onGlobalFilterChange,\n columnVisibility,\n defaultColumnVisibility,\n onColumnVisibilityChange,\n columnSizing,\n defaultColumnSizing,\n onColumnSizingChange,\n enableColumnResizing = false,\n onSizeChange,\n toolbar,\n}: DataTableProps<T>) {\n const { sortingState, handleSortingChange, setSorting } = useTableSorting({\n sorting,\n defaultSorting,\n onSortingChange,\n });\n const { columnFiltersState, handleColumnFiltersChange, setColumnFilters } = useTableFiltering({\n columnFilters,\n defaultColumnFilters,\n onColumnFiltersChange,\n });\n\n const { rowSelectionState, handleRowSelectionChange, setRowSelection } = useTableSelection({\n rowSelection,\n defaultRowSelection,\n onRowSelectionChange,\n });\n\n const {\n initialVisibility,\n initialSizing,\n initialDensity,\n persistVisibility,\n persistSizing,\n persistDensity,\n } = useTablePersistence({\n tableId,\n defaultVisibility: defaultColumnVisibility,\n defaultSizing: defaultColumnSizing,\n defaultDensity: size,\n });\n\n const { globalFilterState, handleGlobalFilterChange, setGlobalFilter } = useTableGlobalFilter({\n globalFilter,\n defaultGlobalFilter,\n onGlobalFilterChange,\n });\n\n const { columnVisibilityState, handleColumnVisibilityChange, setColumnVisibility } =\n useTableVisibility({\n columnVisibility,\n defaultColumnVisibility: columnVisibility !== undefined ? undefined : initialVisibility,\n onColumnVisibilityChange,\n });\n\n const { columnSizingState, handleColumnSizingChange, setColumnSizing } = useTableSizing({\n columnSizing,\n defaultColumnSizing: columnSizing !== undefined ? undefined : initialSizing,\n onColumnSizingChange,\n });\n\n const [currentSize, setCurrentSize] = useState<TableCellSize>(initialDensity);\n const setSize = useCallback(\n (newSize: TableCellSize) => {\n setCurrentSize(newSize);\n onSizeChange?.(newSize);\n },\n [onSizeChange],\n );\n\n const selectionColumn: TableColumnDef<T> = useMemo(\n () => ({\n id: 'select',\n header: ({ table }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() ? 'indeterminate' : false)\n }\n onCheckedChange={(v) => table.toggleAllPageRowsSelected(!!v)}\n aria-label='Select all rows'\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(v) => row.toggleSelected(!!v)}\n aria-label={`Select row ${row.index + 1}`}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n meta: { width: 40, align: 'center' },\n }),\n [],\n );\n\n const enrichedColumns = useMemo(\n () => [\n ...(enableRowSelection ? [selectionColumn] : []),\n ...columns.map((col) => {\n const meta = (col.meta ?? {}) as ColumnMeta;\n if (enableFiltering && meta.filterable !== false && !col.filterFn) {\n return { ...col, filterFn: multiSelectFilter };\n }\n return col;\n }),\n ],\n [columns, enableFiltering, enableRowSelection, selectionColumn],\n );\n\n const columnPinning = useMemo<ColumnPinningState>(() => {\n const left: string[] = [];\n const right: string[] = [];\n columns.forEach((col) => {\n const meta = (col.meta ?? {}) as ColumnMeta;\n const id =\n col.id ??\n ('accessorKey' in col && col.accessorKey ? String(col.accessorKey) : undefined);\n if (!id) return;\n if (meta.pinned === 'left') left.push(id);\n if (meta.pinned === 'right') right.push(id);\n });\n return { left, right };\n }, [columns]);\n\n const table = useReactTable({\n data,\n columns: enrichedColumns,\n state: {\n sorting: sortingState,\n columnFilters: columnFiltersState,\n columnPinning,\n rowSelection: rowSelectionState,\n globalFilter: globalFilterState,\n columnVisibility: columnVisibilityState,\n columnSizing: columnSizingState,\n },\n onSortingChange: handleSortingChange,\n onColumnFiltersChange: handleColumnFiltersChange,\n onRowSelectionChange: handleRowSelectionChange,\n onGlobalFilterChange: handleGlobalFilterChange,\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnSizingChange: handleColumnSizingChange,\n enableRowSelection,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: manualSorting ? undefined : getSortedRowModel(),\n getFilteredRowModel: manualFiltering ? undefined : getFilteredRowModel(),\n enableSorting,\n enableSortingRemoval: true,\n manualSorting,\n enableColumnFilters: enableFiltering,\n manualFiltering,\n filterFns: { multiSelect: multiSelectFilter },\n globalFilterFn: 'includesString',\n enableColumnPinning: true,\n columnResizeMode: 'onChange',\n enableColumnResizing,\n });\n\n useEffect(() => {\n onTableReady?.(table);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // intentional: fire once on mount only\n\n useEffect(() => {\n persistVisibility(columnVisibilityState);\n }, [columnVisibilityState, persistVisibility]);\n useEffect(() => {\n persistSizing(columnSizingState);\n }, [columnSizingState, persistSizing]);\n useEffect(() => {\n persistDensity(currentSize);\n }, [currentSize, persistDensity]);\n\n const onSelectedRowsChangeRef = useRef(onSelectedRowsChange);\n useLayoutEffect(() => {\n onSelectedRowsChangeRef.current = onSelectedRowsChange;\n });\n\n useEffect(() => {\n if (!onSelectedRowsChangeRef.current) return;\n const selected = table.getSelectedRowModel().rows.map((r) => r.original);\n onSelectedRowsChangeRef.current(selected);\n }, [rowSelectionState, table]);\n\n const resolvedGetUniqueValues = useCallback(\n (columnId: string) => getUniqueValues?.(columnId) ?? getUniqueColumnValues(data, columnId),\n [getUniqueValues, data],\n );\n\n const ctx: TableContextType<T> = useMemo(\n () => ({\n size: currentSize,\n variant,\n sorting: sortingState,\n setSorting,\n columnFilters: columnFiltersState,\n setColumnFilters,\n getUniqueValues: resolvedGetUniqueValues,\n onRowClick,\n rowSelection: rowSelectionState,\n setRowSelection,\n globalFilter: globalFilterState,\n setGlobalFilter,\n columnVisibility: columnVisibilityState,\n setColumnVisibility,\n columnSizing: columnSizingState,\n setColumnSizing,\n setSize,\n table: table as unknown as import('@tanstack/react-table').Table<T>,\n }),\n [\n currentSize,\n variant,\n sortingState,\n setSorting,\n columnFiltersState,\n setColumnFilters,\n resolvedGetUniqueValues,\n onRowClick,\n rowSelectionState,\n setRowSelection,\n globalFilterState,\n setGlobalFilter,\n columnVisibilityState,\n setColumnVisibility,\n columnSizingState,\n setColumnSizing,\n setSize,\n table,\n ],\n );\n\n const isMobile = useMediaQuery(responsiveBreakpoint);\n const showCardView = !disableResponsive && isMobile;\n\n const rows = table.getRowModel().rows;\n const columnCount = table.getAllLeafColumns().length;\n\n return (\n <TableContext.Provider value={ctx as unknown as TableContextType<unknown>}>\n {toolbar}\n {showCardView ? (\n <DataTableCardView\n rows={rows}\n columns={table.getAllLeafColumns()}\n size={currentSize}\n variant={variant}\n onRowClick={onRowClick}\n isLoading={isLoading}\n skeletonRowCount={skeletonRowCount}\n emptyState={emptyState}\n />\n ) : (\n <div\n data-slot='data-table-wrapper'\n className={cn(\n 'bg-card text-card-foreground relative overflow-auto rounded-md border',\n classNames?.wrapper,\n )}\n style={maxHeight ? { maxHeight } : undefined}>\n <Table\n data-variant={variant}\n // The wrapper above already owns scrolling (overflow-auto + maxHeight).\n // Keep the inner container `overflow-visible` so it does not become a\n // nested scroll container that traps the sticky header cells.\n containerClassName='overflow-visible'\n className={cn(\n variant === 'striped' && '[&_tbody_tr:nth-child(even)]:bg-muted/40',\n classNames?.table,\n )}>\n <TableHeader\n className={cn(\n // Apply the sticky offset to the header cells (`th`) rather than\n // the `<thead>`: cell-level sticky is the broadly compatible form\n // across browsers. The scroll container is the wrapper above\n // (overflow-auto + maxHeight), and the inner table container is\n // kept overflow-visible so it does not trap these sticky cells.\n // The cells already carry an opaque `bg-primary`, so body rows\n // never bleed through underneath while scrolling.\n stickyHeader && '[&_th]:sticky [&_th]:top-0 [&_th]:z-20',\n classNames?.header,\n )}>\n {table.getHeaderGroups().map((hg) => (\n <TableRow key={hg.id}>\n {hg.headers.map((header) => (\n <DataTableHeaderCell key={header.id} header={header} />\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody className={classNames?.body}>\n {isLoading ? (\n <DataTableSkeleton columnCount={columnCount} size={currentSize} />\n ) : rows.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columnCount}\n className='text-muted-foreground h-24 text-center'>\n {emptyState ?? 'No results found'}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => (\n <DataTableRow key={row.id} row={row} classNames={classNames} />\n ))\n )}\n </TableBody>\n </Table>\n </div>\n )}\n </TableContext.Provider>\n );\n}\n\nexport { DataTable, useTableContext };\n","import { useMemo, useState, useCallback, useEffect } from 'react';\nimport type { SortingState, ColumnFiltersState, ColumnDef } from '@tanstack/react-table';\n\nimport { getUniqueColumnValues } from '../utils/filter-utils';\n\nexport interface UseTableDataProps<T> {\n data: T[];\n columns: ColumnDef<T, unknown>[];\n initialPage?: number;\n initialPerPage?: number;\n initialSorting?: SortingState;\n initialColumnFilters?: ColumnFiltersState;\n}\n\nexport interface UseTableDataReturn<T> {\n paginatedData: T[];\n processedData: T[];\n\n page: number;\n perPage: number;\n totalPages: number;\n totalRecords: number;\n\n filteredRecords: number;\n setPage: (page: number) => void;\n setPerPage: (perPage: number) => void;\n\n sorting: SortingState;\n setSorting: (sorting: SortingState) => void;\n\n columnFilters: ColumnFiltersState;\n setColumnFilters: (filters: ColumnFiltersState) => void;\n\n getUniqueValues: (columnId: string) => string[];\n}\n\nexport function useTableData<T extends Record<string, unknown>>({\n data,\n columns,\n initialPage = 1,\n initialPerPage = 10,\n initialSorting = [],\n initialColumnFilters = [],\n}: UseTableDataProps<T>): UseTableDataReturn<T> {\n const [page, setPageState] = useState(initialPage);\n const [perPage, setPerPageState] = useState(initialPerPage);\n const [sorting, setSorting] = useState<SortingState>(initialSorting);\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>(initialColumnFilters);\n\n // Precompute unique values for each column (memoized)\n const uniqueValuesMap = useMemo(() => {\n const map = new Map<string, string[]>();\n columns.forEach((col) => {\n const columnId =\n col.id ??\n ('accessorKey' in col && col.accessorKey ? String(col.accessorKey) : undefined);\n if (!columnId) return;\n\n const accessor = 'accessorFn' in col ? col.accessorFn : undefined;\n map.set(columnId, getUniqueColumnValues(data, columnId, accessor));\n });\n return map;\n }, [data, columns]);\n\n // Keep the same getUniqueValues API but make it O(1) by reading the memoized map\n const getUniqueValues = useMemo(() => {\n return (columnId: string) => {\n return uniqueValuesMap.get(columnId) || [];\n };\n }, [uniqueValuesMap]);\n\n // Apply filters to ALL data\n const filteredData = useMemo(() => {\n if (columnFilters.length === 0) return data;\n\n return data.filter((row) => {\n return columnFilters.every((filter) => {\n const filterValues = filter.value as string[];\n if (!filterValues || filterValues.length === 0) return true;\n\n const cellValue = row[filter.id];\n if (cellValue == null) {\n return false;\n }\n\n return filterValues.includes(String(cellValue));\n });\n });\n }, [data, columnFilters]);\n\n // Apply sorting to ALL filtered data\n const sortedData = useMemo(() => {\n if (sorting.length === 0) {\n return filteredData;\n }\n\n return [...filteredData].sort((a, b) => {\n for (const sort of sorting) {\n const aValue = a[sort.id];\n const bValue = b[sort.id];\n\n // Handle null/undefined\n if (aValue == null && bValue == null) continue;\n if (aValue == null) return sort.desc ? -1 : 1;\n if (bValue == null) return sort.desc ? 1 : -1;\n\n // Compare values\n let comparison = 0;\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n comparison = aValue.localeCompare(bValue);\n } else if (typeof aValue === 'number' && typeof bValue === 'number') {\n comparison = aValue - bValue;\n } else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n if (comparison !== 0) {\n return sort.desc ? -comparison : comparison;\n }\n }\n return 0;\n });\n }, [filteredData, sorting]);\n\n // Apply pagination LAST\n const paginatedData = useMemo(() => {\n const startIndex = (page - 1) * perPage;\n const endIndex = startIndex + perPage;\n return sortedData.slice(startIndex, endIndex);\n }, [sortedData, page, perPage]);\n\n // Calculate pagination info\n const totalRecords = data.length;\n const filteredRecords = sortedData.length;\n const totalPages = Math.max(1, Math.ceil(filteredRecords / perPage));\n\n const setPage = useCallback(\n (newPage: number) => {\n setPageState(Math.min(newPage, totalPages));\n },\n [totalPages],\n );\n\n const setPerPage = useCallback((newPerPage: number) => {\n setPerPageState(newPerPage);\n setPageState(1);\n }, []);\n\n // Auto-reset page when filters change and current page is out of bounds\n useEffect(() => {\n if (page > totalPages) {\n setPageState(1);\n }\n }, [page, totalPages]);\n\n return {\n paginatedData,\n processedData: sortedData,\n page,\n perPage,\n totalPages,\n totalRecords,\n filteredRecords,\n setPage,\n setPerPage,\n sorting,\n setSorting,\n columnFilters,\n setColumnFilters,\n getUniqueValues,\n };\n}\n","import type { SortingState } from '@tanstack/react-table';\n\n/**\n * Backend sorting format - object representation\n * Example: { name: 'asc', created_at: 'desc' }\n */\nexport type SortRecord = Record<string, 'asc' | 'desc'>;\n\n/**\n * Converts TanStack Table SortingState to backend-friendly record format\n *\n * @param sortingState - TanStack sorting state array\n * @returns Object with field names as keys and 'asc'/'desc' as values\n *\n * @example\n * ```ts\n * const sortingState = [\n * { id: 'name', desc: false },\n * { id: 'created_at', desc: true }\n * ];\n *\n * const sortRecord = sortingStateToRecord(sortingState);\n * // Result: { name: 'asc', created_at: 'desc' }\n * ```\n */\nexport function sortingStateToRecord(sortingState: SortingState): SortRecord {\n const sortRecord: SortRecord = {};\n\n for (const sort of sortingState) {\n sortRecord[sort.id] = sort.desc ? 'desc' : 'asc';\n }\n\n return sortRecord;\n}\n\n/**\n * Converts backend sort record to TanStack Table SortingState\n * Useful for initializing sorting state from backend response\n *\n * @param sortRecord - Object with field names and sort directions\n * @returns TanStack sorting state array\n *\n * @example\n * ```ts\n * const sortRecord = { name: 'asc', created_at: 'desc' };\n *\n * const sortingState = sortRecordToSortingState(sortRecord);\n * // Result: [\n * // { id: 'name', desc: false },\n * // { id: 'created_at', desc: true }\n * // ]\n * ```\n */\nexport function sortRecordToSortingState(sortRecord: SortRecord): SortingState {\n return Object.entries(sortRecord).map(([field, direction]) => ({\n id: field,\n desc: direction === 'desc',\n }));\n}\n\n/**\n * Converts SortingState to JSON string ready to send to Laravel backend\n * This is a convenience function for API calls\n *\n * @param sortingState - TanStack sorting state array\n * @returns JSON string representation of sort record\n *\n * @example\n * ```ts\n * const sortingState = [{ id: 'name', desc: false }];\n * const sortsParam = sortingStateToJsonString(sortingState);\n * // Result: '{\"name\":\"asc\"}'\n *\n * // Use in API call:\n * fetch(`/api/users?sorts=${sortsParam}`);\n * ```\n */\nexport function sortingStateToJsonString(sortingState: SortingState): string {\n if (sortingState.length === 0) {\n return '';\n }\n return JSON.stringify(sortingStateToRecord(sortingState));\n}\n\n/**\n * Creates URLSearchParams for backend pagination with sorting\n * Compatible with Laravel PaginateHelper\n *\n * @param options - Pagination and sorting options\n * @returns URLSearchParams ready to append to API request\n *\n * @example\n * ```ts\n * const params = createBackendParams({\n * sorting: [{ id: 'name', desc: false }],\n * perPage: 20,\n * genericSearch: 'john',\n * filters: { role: 'admin', status: 'active' }\n * });\n *\n * fetch(`/api/users?${params.toString()}`);\n * // Result: /api/users?sorts={\"name\":\"asc\"}&perPage=20&genericSearch=john&filters={\"role\":\"admin\",\"status\":\"active\"}\n * ```\n */\nexport function createBackendParams(options: {\n sorting?: SortingState;\n perPage?: number;\n genericSearch?: string;\n filters?: Record<string, unknown>;\n}): URLSearchParams {\n const params = new URLSearchParams();\n\n // Add sorting if present\n if (options.sorting && options.sorting.length > 0) {\n params.append('sorts', sortingStateToJsonString(options.sorting));\n }\n\n // Add pagination — use !== undefined so perPage === 0 is not silently skipped.\n if (options.perPage !== undefined) {\n params.append('perPage', options.perPage.toString());\n }\n\n // Add generic search\n if (options.genericSearch) {\n params.append('genericSearch', options.genericSearch);\n }\n\n // Add filters\n if (options.filters && Object.keys(options.filters).length > 0) {\n params.append('filters', JSON.stringify(options.filters));\n }\n\n return params;\n}\n","import type { ColumnFiltersState } from '@tanstack/react-table';\n\n/**\n * Converts ColumnFiltersState to a simple object format\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => { status: ['Active', 'Pending'] }\n *\n * @param filters - The column filters state from TanStack Table\n * @returns Object with columnId as keys and filter values as values\n */\nexport function columnFiltersToRecord(filters: ColumnFiltersState): Record<string, string[]> {\n const record: Record<string, string[]> = {};\n\n filters.forEach((filter) => {\n record[filter.id] = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n });\n\n return record;\n}\n\n/**\n * Converts ColumnFiltersState to a JSON string\n * Useful for API calls that expect JSON format\n *\n * @param filters - The column filters state from TanStack Table\n * @returns JSON string representation of filters\n */\nexport function columnFiltersToJsonString(filters: ColumnFiltersState): string {\n return JSON.stringify(columnFiltersToRecord(filters));\n}\n\n/**\n * Converts ColumnFiltersState to URL query params format\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => 'filter[status]=Active,Pending'\n *\n * @param filters - The column filters state from TanStack Table\n * @param separator - Separator for multiple values (default: ',')\n * @returns Object suitable for URLSearchParams\n */\nexport function columnFiltersToQueryParams(\n filters: ColumnFiltersState,\n separator: string = ',',\n): Record<string, string> {\n const params: Record<string, string> = {};\n\n filters.forEach((filter) => {\n const values = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n if (values.length > 0) {\n params[`filter[${filter.id}]`] = values.join(separator);\n }\n });\n\n return params;\n}\n\n/**\n * Converts ColumnFiltersState to individual query params per value\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => 'filter[status][]=Active&filter[status][]=Pending'\n *\n * @param filters - The column filters state from TanStack Table\n * @returns Object suitable for URLSearchParams with array notation\n */\nexport function columnFiltersToArrayQueryParams(\n filters: ColumnFiltersState,\n): Record<string, string[]> {\n const params: Record<string, string[]> = {};\n\n filters.forEach((filter) => {\n const values = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n if (values.length > 0) {\n params[`filter[${filter.id}]`] = values;\n }\n });\n\n return params;\n}\n\n/**\n * Creates complete backend request params with filters, sorting, and pagination\n * Combines filtering with other table features\n *\n * @param options - Configuration object\n * @param options.filters - Column filters state\n * @param options.sorts - Optional sorting state\n * @param options.page - Optional page number\n * @param options.perPage - Optional items per page\n * @returns Complete params object for API requests\n */\nexport function createBackendParamsWithFilters({\n filters,\n sorts,\n page,\n perPage,\n}: {\n filters: ColumnFiltersState;\n sorts?: Array<{ id: string; desc: boolean }>;\n page?: number;\n perPage?: number;\n}): Record<string, string | number> {\n const params: Record<string, string | number> = {};\n\n // Add pagination params\n if (page !== undefined) {\n params.page = page;\n }\n if (perPage !== undefined) {\n params.per_page = perPage;\n }\n\n // Add sorting params\n if (sorts && sorts.length > 0) {\n const sortBy = sorts.map((s) => s.id).join(',');\n const sortOrder = sorts.map((s) => (s.desc ? 'desc' : 'asc')).join(',');\n params.sort_by = sortBy;\n params.sort_order = sortOrder;\n }\n\n // Add filter params\n if (filters && filters.length > 0) {\n params.filters = columnFiltersToJsonString(filters);\n }\n\n return params;\n}\n\n/**\n * Parses URL query params back to ColumnFiltersState\n * Useful for restoring filters from URL\n *\n * @param params - URLSearchParams or query string\n * @param separator - Separator used in the query params (default: ',')\n * @returns ColumnFiltersState\n */\nexport function parseQueryParamsToFilters(\n params: URLSearchParams | string,\n separator: string = ',',\n): ColumnFiltersState {\n const searchParams = typeof params === 'string' ? new URLSearchParams(params) : params;\n const filters: ColumnFiltersState = [];\n\n searchParams.forEach((value, key) => {\n // Match filter[columnId] format\n const match = key.match(/^filter\\[(.+)\\]$/);\n if (match) {\n const columnId = match[1];\n const values = value.split(separator).filter(Boolean);\n if (values.length > 0) {\n filters.push({ id: columnId, value: values });\n }\n }\n });\n\n return filters;\n}\n\n/**\n * Parses JSON string back to ColumnFiltersState\n *\n * @param jsonString - JSON string representation of filters\n * @returns ColumnFiltersState\n */\nexport function parseJsonToFilters(jsonString: string): ColumnFiltersState {\n try {\n const record = JSON.parse(jsonString) as unknown;\n // Guard against non-object or array values before iterating entries.\n if (!record || typeof record !== 'object' || Array.isArray(record)) return [];\n return Object.entries(record as Record<string, string[]>).map(([id, value]) => ({\n id,\n value,\n }));\n } catch {\n return [];\n }\n}\n\n/**\n * Merges multiple filter states, with later filters overriding earlier ones\n *\n * @param filterStates - Multiple ColumnFiltersState arrays to merge\n * @returns Merged ColumnFiltersState\n */\nexport function mergeFilters(...filterStates: ColumnFiltersState[]): ColumnFiltersState {\n const mergedMap = new Map<string, string[]>();\n\n filterStates.forEach((state) => {\n state.forEach((filter) => {\n mergedMap.set(filter.id, Array.isArray(filter.value) ? (filter.value as string[]) : []);\n });\n });\n\n return Array.from(mergedMap.entries()).map(([id, value]) => ({ id, value }));\n}\n","import { Fragment } from 'react';\nimport {Ellipsis} from 'lucide-react';\nimport { Button } from '@/components/ui/Button/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu/dropdown-menu';\n\nexport interface RowAction<T> {\n label: string;\n onClick: (row: T) => void;\n /** Renders a separator above this item */\n separator?: boolean;\n disabled?: boolean | ((row: T) => boolean);\n /** Renders item in destructive (red) style */\n destructive?: boolean;\n}\n\ninterface DataTableRowActionsProps<T> {\n row: T;\n actions: RowAction<T>[];\n /** Screen-reader label for the trigger button. Default: \"Open actions\" */\n label?: string;\n}\n\nfunction DataTableRowActions<T>({\n row,\n actions,\n label = 'Open actions',\n}: DataTableRowActionsProps<T>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n data-slot='data-table-row-actions'\n variant='ghost'\n size='icon-sm'\n aria-label={label}\n className='data-[state=open]:bg-muted'>\n <Ellipsis className='size-4' aria-hidden='true' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n {actions.map((action) => {\n const isDisabled =\n typeof action.disabled === 'function'\n ? action.disabled(row)\n : (action.disabled ?? false);\n return (\n <Fragment key={action.label}>\n {action.separator && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={() => action.onClick(row)}\n disabled={isDisabled}\n className={\n action.destructive\n ? 'text-destructive focus:text-destructive'\n : undefined\n }>\n {action.label}\n </DropdownMenuItem>\n </Fragment>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport { DataTableRowActions };\nexport type { DataTableRowActionsProps };\n","import { cn } from '@/lib/utils';\nimport { TablePagination } from '../Pagination/pagination';\nimport type { TablePaginationProps } from './data-table.types';\n\ninterface DataTableFooterProps {\n pagination: TablePaginationProps;\n /** Selected row count — renders \"N row(s) selected\" on the left */\n selectedCount?: number;\n className?: string;\n}\n\nfunction DataTableFooter({ pagination, selectedCount, className }: DataTableFooterProps) {\n return (\n <div\n data-slot='data-table-footer'\n className={cn('flex items-center justify-between border-t px-4 py-2', className)}>\n {selectedCount != null && selectedCount > 0 && (\n <span aria-live='polite' className='text-muted-foreground text-xs'>\n {`${selectedCount} row${selectedCount > 1 ? 's' : ''} selected`}\n </span>\n )}\n <TablePagination {...pagination} />\n </div>\n );\n}\n\nexport { DataTableFooter };\nexport type { DataTableFooterProps };\n","import { useCallback, type ReactNode } from 'react';\nimport type { ColumnFiltersState, Table } from '@tanstack/react-table';\nimport { X, Eye, Rows2 } from 'lucide-react';\nimport type { TableCellSize } from './data-table.types';\n\nimport { Button } from '@/components/ui/Button/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu/dropdown-menu';\nimport { Badge } from '@/components/ui/Badge/badge';\nimport { cn } from '@/lib/utils';\nimport { getActiveFilterCount } from './utils/filter-utils';\nimport { useTableContextSafe } from './data-table-context';\n\nconst DENSITY_OPTIONS: { value: TableCellSize; label: string }[] = [\n { value: 'sm', label: 'Compact' },\n { value: 'md', label: 'Default' },\n { value: 'lg', label: 'Comfortable' },\n];\n\ninterface DataTableToolbarProps<T> {\n /** TanStack Table instance. Optional when toolbar is rendered inside DataTable's toolbar prop (context available). */\n table?: Table<T>;\n /** Slot rendered on the left — e.g. search input, bulk-action buttons */\n leading?: ReactNode;\n /** Slot rendered on the right alongside the Columns button */\n trailing?: ReactNode;\n className?: string;\n /** Hide the built-in Columns visibility toggle. Default: false */\n hideColumnsToggle?: boolean;\n /** Hide the density toggle. Default: false */\n hideDensityToggle?: boolean;\n /**\n * Pass columnFilters directly if Toolbar is rendered outside DataTable's\n * context provider. When inside a DataTable, this is read from context.\n */\n columnFilters?: ColumnFiltersState;\n}\n\nfunction DataTableToolbar<T>({\n table: tableProp,\n leading,\n trailing,\n className,\n hideColumnsToggle = false,\n hideDensityToggle = false,\n columnFilters: columnFiltersProp,\n}: DataTableToolbarProps<T>) {\n const ctx = useTableContextSafe<T>();\n const table = tableProp ?? (ctx?.table as Table<T> | undefined);\n const resolvedFilters = columnFiltersProp ?? ctx?.columnFilters ?? [];\n const activeFilterCount = getActiveFilterCount(resolvedFilters);\n\n const globalFilter = ctx?.globalFilter ?? '';\n const hasActiveFilters = activeFilterCount > 0 || globalFilter.length > 0;\n\n const handleClearFilters = useCallback(() => {\n ctx?.setColumnFilters([]);\n ctx?.setGlobalFilter('');\n }, [ctx]);\n\n return (\n <div\n data-slot='data-table-toolbar'\n className={cn('flex items-center justify-between gap-2 py-2', className)}>\n <div className='flex flex-1 items-center gap-2'>\n {leading}\n {activeFilterCount > 0 && (\n <Badge variant='default' className='h-6 text-xs'>\n {activeFilterCount} filter{activeFilterCount > 1 ? 's' : ''} active\n </Badge>\n )}\n </div>\n\n <div className='flex items-center gap-2'>\n {trailing}\n {hasActiveFilters && (\n <Button\n variant='ghost'\n size='sm'\n onClick={handleClearFilters}\n className='text-muted-foreground hover:text-foreground gap-1'>\n <X className='size-4' aria-hidden='true' />\n Clear filters\n </Button>\n )}\n {!hideDensityToggle && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='sm' className='gap-1 border'>\n <Rows2 className='size-4' aria-hidden='true' />\n Density\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n <DropdownMenuLabel>Row density</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {DENSITY_OPTIONS.map((opt) => (\n <DropdownMenuCheckboxItem\n key={opt.value}\n checked={ctx?.size === opt.value}\n onCheckedChange={() => ctx?.setSize(opt.value)}>\n {opt.label}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {!hideColumnsToggle && table && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='sm' className='gap-1 border'>\n <Eye className='size-4' aria-hidden='true' />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-44'>\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((col) => col.getCanHide())\n .map((col) => (\n <DropdownMenuCheckboxItem\n key={col.id}\n className='capitalize'\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(!!v)}>\n {typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n );\n}\n\nexport { DataTableToolbar };\nexport type { DataTableToolbarProps };\n","import { useEffect, useState } from 'react';\nimport { Search, X } from 'lucide-react';\nimport { Input } from '@/components/ui/Input/input';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\nimport { useTableContextSafe } from './data-table-context';\n\ninterface DataTableSearchProps {\n placeholder?: string;\n className?: string;\n /** Debounce delay in ms before committing to context. Default: 300 */\n debounce?: number;\n}\n\nfunction DataTableSearch({\n placeholder = 'Search…',\n className,\n debounce = 300,\n}: DataTableSearchProps) {\n const ctx = useTableContextSafe();\n const [inputValue, setInputValue] = useState('');\n\n // Extract stable primitives/callbacks from the context object to avoid\n // including the entire ctx object in effect dependency arrays (which would\n // cause the debounce timer to restart on every render).\n const globalFilter = ctx?.globalFilter;\n const setGlobalFilter = ctx?.setGlobalFilter;\n\n // Sync input when global filter is cleared externally (e.g. Clear filters button)\n useEffect(() => {\n if (globalFilter === '') setInputValue('');\n }, [globalFilter]);\n\n // Debounced commit to context — depends only on stable primitives.\n useEffect(() => {\n const timer = setTimeout(() => {\n setGlobalFilter?.(inputValue);\n }, debounce);\n return () => clearTimeout(timer);\n }, [inputValue, debounce, setGlobalFilter]);\n\n const handleClear = () => {\n setInputValue('');\n setGlobalFilter?.('');\n };\n\n return (\n <div data-slot='data-table-search' className={cn('relative flex items-center', className)}>\n <Search\n className='text-muted-foreground pointer-events-none absolute top-1/2 left-3 z-10 -translate-y-1/2'\n size={16}\n />\n <Input\n type='search'\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n className='h-8 w-48 pr-8 pl-8 text-sm'\n />\n {inputValue && (\n <Button\n variant='ghost'\n size='icon-sm'\n onClick={handleClear}\n aria-label='Clear search'\n className='text-muted-foreground hover:text-foreground absolute right-0.5 size-6'>\n <X className='size-3.5' aria-hidden='true' />\n </Button>\n )}\n </div>\n );\n}\n\nexport { DataTableSearch };\nexport type { DataTableSearchProps };\n","import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\ninterface AbilityContextValue {\n can: (permissions: string | string[], mode?: 'any' | 'all') => boolean;\n setAbilities: (permissions: string[]) => void;\n clearAbilities: () => void;\n}\n\ninterface AbilityProviderProps {\n children: ReactNode;\n permissions?: string[];\n}\n\n/**\n * @param pattern - an entry from the user's grant set (may contain `*` as a segment wildcard)\n * @param permission - the permission being requested (from `Can.perform`)\n */\nfunction matchPermission(pattern: string, permission: string): boolean {\n if (pattern === '*') return true;\n if (pattern === permission) return true;\n const patternParts = pattern.split('.');\n const permParts = permission.split('.');\n if (patternParts.length !== permParts.length) return false;\n return patternParts.every((part, i) => part === '*' || part === permParts[i]);\n}\n\nfunction matchesAny(permissionSet: Set<string>, permission: string): boolean {\n if (permissionSet.has(permission)) return true;\n for (const pattern of permissionSet) {\n if (matchPermission(pattern, permission)) return true;\n }\n return false;\n}\n\nconst AbilityContext = createContext<AbilityContextValue | undefined>(undefined);\nAbilityContext.displayName = 'AbilityContext';\n\nfunction AbilityProvider({ children, permissions }: AbilityProviderProps) {\n const [permissionSet, setPermissionSet] = useState<Set<string>>(\n () => new Set(permissions ?? []),\n );\n\n const can = useCallback(\n (perms: string | string[], mode: 'any' | 'all' = 'any'): boolean => {\n const list = Array.isArray(perms) ? perms : [perms];\n if (list.length === 0) return false;\n if (permissionSet.has('*')) return true;\n if (mode === 'all') {\n return list.every((p) => matchesAny(permissionSet, p));\n }\n return list.some((p) => matchesAny(permissionSet, p));\n },\n [permissionSet],\n );\n\n const setAbilities = useCallback((perms: string[]) => {\n setPermissionSet(new Set(perms));\n }, []);\n\n const clearAbilities = useCallback(() => {\n setPermissionSet(new Set());\n }, []);\n\n // Sync from the controlled `permissions` prop only when its CONTENT changes.\n // Comparing by content (not reference) avoids two footguns:\n // 1. An inline `permissions={[...]}` array is a new reference every render —\n // a reference-based dependency would re-sync (and wipe imperative\n // setAbilities/clearAbilities calls) on every parent re-render.\n // 2. When `permissions` is undefined (uncontrolled / imperative usage),\n // we never sync, so setAbilities/clearAbilities are the source of truth.\n const syncedKey = useRef(permissions ? permissions.join('|') : null);\n useEffect(() => {\n if (permissions === undefined) return;\n const key = permissions.join('|');\n if (key === syncedKey.current) return;\n syncedKey.current = key;\n setPermissionSet(new Set(permissions));\n }, [permissions]);\n\n const value = useMemo(\n () => ({ can, setAbilities, clearAbilities }),\n [can, setAbilities, clearAbilities],\n );\n\n return <AbilityContext.Provider value={value}>{children}</AbilityContext.Provider>;\n}\n\nfunction useAbility(): AbilityContextValue {\n const context = useContext(AbilityContext);\n if (!context) {\n throw new Error('useAbility must be used within an AbilityProvider');\n }\n return context;\n}\n\nfunction useCan(permissions: string | string[], mode: 'any' | 'all' = 'any'): boolean {\n const { can } = useAbility();\n return can(permissions, mode);\n}\n\nexport { AbilityProvider, useAbility, useCan, matchPermission };\nexport type { AbilityContextValue, AbilityProviderProps };\n","import { type ReactNode } from 'react';\nimport { useAbility } from './ability-context';\n\ninterface CanProps {\n permission: string | string[];\n mode?: 'any' | 'all';\n negate?: boolean;\n fallback?: ReactNode;\n children: ReactNode | ((allowed: boolean) => ReactNode);\n}\n\ntype CanNotProps = Omit<CanProps, 'negate'>;\n\n/** Renders children when the user has the required permission(s). Requires `AbilityProvider` in the tree. */\nfunction Can({ permission, mode = 'any', negate = false, fallback = null, children }: CanProps) {\n const { can } = useAbility();\n const hasPermission = can(permission, mode);\n const show = negate ? !hasPermission : hasPermission;\n\n if (typeof children === 'function') {\n return <>{children(show)}</>;\n }\n return show ? <>{children}</> : <>{fallback}</>;\n}\n\nCan.displayName = 'Can';\n\n/** Renders children when the user does NOT have the required permission(s). Alias for `<Can negate />`. Requires `AbilityProvider` in the tree. */\nfunction CanNot({ permission, mode = 'any', fallback = null, children }: CanNotProps) {\n return (\n <Can permission={permission} mode={mode} negate fallback={fallback}>\n {children}\n </Can>\n );\n}\n\nCanNot.displayName = 'CanNot';\n\nexport { Can, CanNot };\nexport type { CanProps, CanNotProps };\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/Alert/alert.tsx","../src/components/ui/Avatar/avatar.tsx","../src/components/ui/Status/badge.tsx","../src/components/ui/Status/status.tsx","../src/components/ui/Badge/badge.tsx","../src/components/ui/Breadcrumb/breadcrumb.tsx","../src/components/ui/Button/button.tsx","../src/components/ui/Calendar/calendar.tsx","../src/components/ui/MiniCalendar/mini-calendar.tsx","../src/components/ui/Card/card.tsx","../src/components/ui/Carousel/carousel.tsx","../src/components/compounds/Form/form.tsx","../src/components/ui/Input/input.tsx","../src/utils/urlSecurity.ts","../src/components/ui/Link/link.tsx","../src/components/ui/PinInput/pin-input.tsx","../src/components/ui/Toggle/toggle.tsx","../src/components/compounds/SegmentedControl/segmented-control.tsx","../src/components/ui/Select/select.tsx","../src/components/ui/Separator/separator.tsx","../src/components/ui/Progress/progress.tsx","../src/components/ui/Skeleton/skeleton.tsx","../src/components/ui/Slider/slider.tsx","../src/components/ui/Switch/switch.tsx","../src/tokens/animation.ts","../src/components/ui/Tabs/tabs.tsx","../src/components/ui/Toast/toast.tsx","../src/components/ui/ToggleGroup/toggle-group.tsx","../src/components/ui/Tooltip/tooltip.tsx","../src/components/ui/Popover/popover.tsx","../src/components/ui/Text/text.tsx","../src/components/ui/Dialog/dialog.tsx","../src/components/ui/AlertDialog/alert-dialog.tsx","../src/components/ui/Accordion/accordion.tsx","../src/components/ui/Combobox/combobox.tsx","../src/components/ui/DropdownMenu/dropdown-menu.tsx","../src/components/ui/Dropzone/dropzone.tsx","../src/components/ui/Empty/empty.tsx","../src/components/ui/Item/item.tsx","../src/components/ui/Radio/radio-group.tsx","../src/components/ui/Spinner/spinner.tsx","../src/components/compounds/ColorPicker/button.tsx","../src/components/compounds/ColorPicker/input.tsx","../src/components/compounds/ColorPicker/select.tsx","../src/components/compounds/ColorPicker/color-picker.tsx","../src/components/compounds/DatePicker/date-picker.tsx","../src/components/compounds/NavBar/navbar.tsx","../src/components/compounds/NavBar/navigation-menu.tsx","../src/components/authorization/Can/ability-context.tsx","../src/components/authorization/Can/can.tsx","../src/components/ui/Sidebar/sidebar.tsx","../src/components/compounds/AppShell/app-shell.tsx","../src/components/compounds/TextArea/textarea.tsx","../src/components/compounds/EventCalendar/event-calendar-context.ts","../src/components/compounds/EventCalendar/event-calendar.styles.ts","../src/components/compounds/EventCalendar/hooks/use-event-calendar.ts","../src/components/compounds/EventCalendar/event-calendar.tsx","../src/lib/form.ts","../src/lib/cdn.ts","../src/components/ui/Table/table.tsx","../src/components/ui/Checkbox/checkbox.tsx","../src/components/compounds/Pagination/pagination.tsx","../src/lib/use-media-query.ts","../src/components/compounds/Table/data-table-context.ts","../src/components/compounds/Table/data-table-card-view.tsx","../src/components/compounds/Table/utils/filter-utils.ts","../src/components/compounds/Table/data-table-column-filter.tsx","../src/components/compounds/Table/hooks/use-column-filter.ts","../src/components/compounds/Table/data-table-header-cell.tsx","../src/components/compounds/Table/data-table-skeleton.tsx","../src/components/compounds/Table/hooks/use-table-sorting.ts","../src/components/compounds/Table/hooks/use-table-filtering.ts","../src/components/compounds/Table/hooks/use-table-selection.ts","../src/components/compounds/Table/hooks/use-table-global-filter.ts","../src/components/compounds/Table/hooks/use-table-visibility.ts","../src/components/compounds/Table/hooks/use-table-sizing.ts","../src/components/compounds/Table/hooks/use-table-persistence.ts","../src/components/compounds/Table/data-table.tsx","../src/components/compounds/Table/hooks/use-table-data.ts","../src/components/compounds/Table/utils/sorting-transform.ts","../src/components/compounds/Table/utils/filtering-transform.ts","../src/components/compounds/Table/data-table-row-actions.tsx","../src/components/compounds/Table/data-table-footer.tsx","../src/components/compounds/Table/data-table-toolbar.tsx","../src/components/compounds/Table/data-table-search.tsx","../src/components/providers/tcce-provider.tsx"],"names":["twMerge","clsx","cva","jsx","jsxs","X","AvatarPrimitive","Slot","Fragment","badgeVariants","Badge","ChevronRightIcon","MoreHorizontalIcon","LoaderCircle","getDefaultClassNames","DayPicker","className","props","ChevronLeftIcon","ChevronDownIcon","useRef","useEffect","useState","useCallback","createContext","useContext","addDays","format","isSameDay","isToday","useEmblaCarousel","api","ArrowLeft","ArrowRight","ExternalLinkIcon","TogglePrimitive","useId","ToggleGroup","motion","SelectPrimitive","CheckIcon","ChevronUpIcon","SeparatorPrimitive","ProgressPrimitive","useMemo","SliderPrimitive","SwitchPrimitive","TabsPrimitive","AnimatePresence","CircleCheckIcon","OctagonXIcon","TriangleAlertIcon","InfoIcon","Loader2Icon","XIcon","ToggleGroupPrimitive","TooltipPrimitive","PopoverPrimitive","DialogPrimitive","AlertDialogPrimitive","AccordionPrimitive","ChevronsUpDownIcon","Command","SearchIcon","DropdownMenuPrimitive","useDropzone","UploadIcon","RadioGroupPrimitive","LoaderIcon","buttonVariants","Button","Input","Select","SelectValue","SelectTrigger","SelectContent","SelectScrollUpButton","SelectScrollDownButton","SelectItem","Color","memo","Slider","hue","alpha","PipetteIcon","CalendarIcon","forwardRef","BellIcon","CircleHelpIcon","NavigationMenuPrimitive","Menu","Children","isValidElement","cloneElement","House","Plane","Wallet","LayoutDashboardIcon","Temporal","useLayoutEffect","eventsService","createEventsServicePlugin","eventModal","createEventModalPlugin","calendarControls","createCalendarControlsPlugin","createCalendar","viewMonthGrid","viewWeek","viewDay","viewMonthAgenda","ScheduleXCalendar","useForm","zodResolver","CheckboxPrimitive","MinusIcon","flexRender","FilterOption","Funnel","ArrowUp","ArrowDown","ArrowUpDown","_","table","useReactTable","getCoreRowModel","getSortedRowModel","getFilteredRowModel","Ellipsis","hasActiveFilters","Rows2","Eye","Search"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AACxC,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC/B;ACAA,IAAM,aAAA,GAAgBC,2BAAI,sDAAA,EAAwD;AAAA,EAC9E,QAAA,EAAU;AAAA,IACN,OAAA,EAAS;AAAA,MACL,OAAA,EAAS,4DAAA;AAAA,MACT,IAAA,EAAM,4DAAA;AAAA,MACN,OAAA,EAAS,wEAAA;AAAA,MACT,OAAA,EAAS,gEAAA;AAAA,MACT,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,OAAA,EAAS;AAAA;AAEjB,CAAC;AAYD,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,OAAA,EAAS,MAAM,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAe;AACpF,EAAA,uBACIC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,OAAA;AAAA,MACV,gBAAc,OAAA,IAAW,SAAA;AAAA,MACzB,IAAA,EAAK,OAAA;AAAA,MACL,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACV,QAAA,EAAA;AAAA,QAAA,IAAA,mCACI,KAAA,EAAA,EAAI,WAAA,EAAU,YAAA,EAAa,SAAA,EAAU,mBACjC,QAAA,EAAA,IAAA,EACL,CAAA;AAAA,uCAEH,KAAA,EAAA,EAAI,WAAA,EAAU,eAAA,EAAgB,SAAA,EAAU,kBACpC,QAAA,EACL,CAAA;AAAA,QACC,SAAA,oBACGD,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACG,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,SAAA;AAAA,YACX,OAAA,EAAS,SAAA;AAAA,YACT,SAAA,EAAU,kKAAA;AAAA,YACV,QAAA,kBAAAA,cAAA,CAACE,aAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA;AAC1B,OAAA,EAER;AAAA;AAAA,GACJ;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoB;AAC1D,EAAA,uBACIF,cAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA;AAAA,MACvE,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACtE,EAAA,uBACIA,cAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA;AAAA,MAC5C,GAAG;AAAA;AAAA,GACR;AAER;ACzEA,IAAM,cAAA,GAAiBD,2BAAI,kEAAA,EAAoE;AAAA,EAC3F,QAAA,EAAU;AAAA,IACN,IAAA,EAAM;AAAA,MACF,EAAA,EAAI,oBAAA;AAAA,MACJ,EAAA,EAAI,gBAAA;AAAA,MACJ,EAAA,EAAI,iBAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACR,GACJ;AAAA,EACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA;AAC7B,CAAC;AAED,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,GAAG;AACP,CAAA,EAAsF;AAClF,EAAA,uBACIC,cAAAA;AAAA,IAACG,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,WAAW,EAAA,CAAG,cAAA,CAAe,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAChD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiD;AACxF,EAAA,uBACIH,cAAAA;AAAA,IAACG,cAAA,CAAgB,KAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA;AAAA,MAC9D,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAoD;AAChD,EAAA,uBACIH,cAAAA;AAAA,IAACG,cAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,kHAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AAClE,EAAA,uBACIH,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,2JAAA;AAAA,QACA,+EAAA;AAAA,QACA,iFAAA;AAAA,QACA,+EAAA;AAAA,QACA,mFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACtE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,sIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AC9FA,IAAM,aAAA,GAAgBD,0BAAAA;AAAA,EAClB,4eAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,4DAAA;AAAA,QACT,SAAA,EAAW,kEAAA;AAAA,QACX,WAAA,EACI,gKAAA;AAAA,QACJ,OAAA,EACI,kFAAA;AAAA,QACJ,KAAA,EAAO,mEAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACV,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS;AAAA;AACb;AAER,CAAA;AAEA,SAAS,KAAA,CAAM;AAAA,EACX,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACP,CAAA,EAAwF;AACpF,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUK,YAAA,CAAK,IAAA,GAAO,MAAA;AAEnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,OAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACR;AAER;ACnCO,IAAM,MAAA,GAAS,CAAC,EAAE,SAAA,EAAW,QAAQ,GAAG,KAAA,uBAC3CA,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,OAAA,EAAS,QAAQ,SAAS,CAAA;AAAA,IACnE,OAAA,EAAQ,SAAA;AAAA,IACP,GAAG;AAAA;AACR;AAKG,IAAM,kBAAkB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBAClDC,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA,EAAI,GAAG,KAAA,EACzD,QAAA,EAAA;AAAA,kBAAAD,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,yEAAA;AAAA,QACA,gCAAA;AAAA,QACA,6BAAA;AAAA,QACA,kCAAA;AAAA,QACA;AAAA;AACJ;AAAA,GACJ;AAAA,kBACAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,2CAAA;AAAA,QACA,gCAAA;AAAA,QACA,6BAAA;AAAA,QACA,kCAAA;AAAA,QACA;AAAA;AACJ;AAAA;AACJ,CAAA,EACJ;AAKG,IAAM,WAAA,GAAc,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,uBAClDA,cAAAA,CAAC,UAAK,SAAA,EAAW,EAAA,CAAG,yBAAyB,SAAS,CAAA,EAAI,GAAG,KAAA,EACxD,QAAA,EAAA,QAAA,oBACGC,eAAAA,CAAAI,mBAAA,EAAA,EACI,QAAA,EAAA;AAAA,kBAAAL,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAA+B,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,kBACrDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,kBACvDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAoC,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,kBAC/DA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAiC,QAAA,EAAA,UAAA,EAAQ;AAAA,CAAA,EAC7D,CAAA,EAER;AC/CJ,IAAMM,cAAAA,GAAgBP,0BAAAA;AAAA,EAClB,wcAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,gCAAA;AAAA,QACT,IAAA,EAAM,2BAAA;AAAA,QACN,OAAA,EAAS,6BAAA;AAAA,QACT,OAAA,EAAS,+BAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACX;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,sCAAA;AAAA,QACJ,EAAA,EAAI,qCAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAEA,SAASQ,MAAAA,CAAM;AAAA,EACX,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACP,CAAA,EAAwF;AACpF,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUH,YAAAA,CAAK,IAAA,GAAO,MAAA;AAEnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,OAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAGM,cAAAA,CAAc,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA,GACR;AAER;ACtCA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIN,cAAAA,CAAC,KAAA,EAAA,EAAI,YAAA,EAAW,YAAA,EAAa,WAAA,EAAU,YAAA,EAAa,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEjG;AAMA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyB;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,uFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAMA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyB;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACR;AAER;AASA,SAAS,cAAA,CAAe;AAAA,EACpB,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUI,YAAAA,CAAK,IAAA,GAAO,GAAA;AAEnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,8JAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAMA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AACrE,EAAA,uBACIA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,IAAA,EAAK,MAAA;AAAA,MACL,eAAA,EAAc,MAAA;AAAA,MACd,cAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACR;AAER;AAOA,SAAS,oBAAoB,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,OAAM,EAAyB;AAClF,EAAA,uBACIA,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,MACzD,GAAG,KAAA;AAAA,MACH,QAAA,EAAA,QAAA,oBAAYA,cAAAA,CAACQ,4BAAA,EAAA,EAAiB;AAAA;AAAA,GACnC;AAER;AAMA,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AACzE,EAAA,uBACIP,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACP,uEAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,eAACS,8BAAA,EAAA,EAAmB,CAAA;AAAA,wBACpBT,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,MAAA,EAAI;AAAA;AAAA;AAAA,GAClC;AAER;AC1HA,IAAM,cAAA,GAAiBD,0BAAAA;AAAA,EACnB,woBAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EACI,qGAAA;AAAA,QACJ,SAAA,EACI,0HAAA;AAAA,QACJ,MAAA,EAAQ,2HAAA;AAAA,QACR,OAAA,EACI,6GAAA;AAAA,QACJ,KAAA,EAAO,sIAAA;AAAA,QACP,WAAA,EACI;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,SAAA,EAAW;AAAA;AACf,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAMA,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACP,CAAA,EAIO;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUK,YAAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,SAAS,YAAY,CAAA,EAAkC;AACnD,IAAA,IAAI,SAAA,EAAW;AACX,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA;AAAA,IACJ;AACA,IAAA,OAAA,GAAU,CAAC,CAAA;AAAA,EACf;AAEA,EAAA,uBACIH,eAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,gBAAc,SAAA,IAAa,MAAA;AAAA,MAC3B,aAAW,SAAA,IAAa,MAAA;AAAA,MACxB,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MAC1D,OAAA,EAAS,WAAA;AAAA,MACR,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,SAAA,oBAAaD,eAACU,wBAAA,EAAA,EAAa,IAAA,EAAM,IAAI,SAAA,EAAU,cAAA,EAAe,eAAY,MAAA,EAAO,CAAA;AAAA,QACjF;AAAA;AAAA;AAAA,GACL;AAER;ACxEA,SAAS,QAAA,CAAS;AAAA,EACd,SAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,aAAA,GAAgB,UAAA;AAAA,EAChB,aAAA,GAAgB,OAAA;AAAA,EAChB,MAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,EAIG;AACC,EAAA,MAAM,oBAAoBC,mCAAA,EAAqB;AAE/C,EAAA,uBACIX,cAAAA;AAAA,IAACY,wBAAA;AAAA,IAAA;AAAA,MACG,eAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,iMAAA;AAAA,QACA,MAAA,CAAO,GAAA,CAAA,yCAAA,CAAA;AAAA,QACP,MAAA,CAAO,GAAA,CAAA,6CAAA,CAAA;AAAA,QACP;AAAA,OACJ;AAAA,MACA,aAAA;AAAA,MACA,UAAA,EAAY,IAAI,IAAA,CAAK,QAAA,IAAY,MAAM,CAAC,CAAA;AAAA,MACxC,QAAA,EAAU,IAAI,IAAA,CAAK,MAAA,IAAU,MAAM,EAAE,CAAA;AAAA,MACrC,MAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACR,mBAAA,EAAqB,CAAC,IAAA,KAClB,IAAA,CAAK,cAAA,CAAe,QAAQ,IAAA,EAAM,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,QACxD,GAAG;AAAA,OACP;AAAA,MACA,UAAA,EAAY;AAAA,QACR,IAAA,EAAM,EAAA,CAAG,OAAA,EAAS,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACxC,MAAA,EAAQ,EAAA,CAAG,0CAAA,EAA4C,iBAAA,CAAkB,MAAM,CAAA;AAAA,QAC/E,KAAA,EAAO,EAAA,CAAG,4BAAA,EAA8B,iBAAA,CAAkB,KAAK,CAAA;AAAA,QAC/D,GAAA,EAAK,EAAA;AAAA,UACD,yEAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,eAAA,EAAiB,EAAA;AAAA,UACb,cAAA,CAAe,EAAE,OAAA,EAAS,aAAA,EAAe,CAAA;AAAA,UACzC,8GAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACT,cAAA,CAAe,EAAE,OAAA,EAAS,aAAA,EAAe,CAAA;AAAA,UACzC,8GAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,aAAA,EAAe,EAAA;AAAA,UACX,yFAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACP,uFAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,aAAA,EAAe,EAAA;AAAA,UACX,kCAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,QAAA,EAAU,EAAA,CAAG,uCAAA,EAAyC,iBAAA,CAAkB,QAAQ,CAAA;AAAA,QAChF,aAAA,EAAe,EAAA;AAAA,UACX,2BAAA;AAAA,UACA,aAAA,KAAkB,UACZ,SAAA,GACA,wGAAA;AAAA,UACN,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,QAAA,EAAU,EAAA,CAAG,YAAA,EAAc,iBAAA,CAAkB,QAAQ,CAAA;AAAA,QACrD,OAAA,EAAS,EAAA;AAAA,UACL,gHAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,IAAA,EAAM,EAAA,CAAG,wBAAA,EAA0B,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACzD,kBAAA,EAAoB,EAAA;AAAA,UAChB,6BAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACT,qDAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,GAAA,EAAK,EAAA;AAAA,UACD,wKAAA;AAAA,UACA,KAAA,CAAM,iBACA,uEAAA,GACA,sEAAA;AAAA,UACN,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACT,0HAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,YAAA,EAAc,EAAA,CAAG,2BAAA,EAA6B,iBAAA,CAAkB,YAAY,CAAA;AAAA,QAC5E,SAAA,EAAW,EAAA;AAAA,UACP,yHAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,KAAA,EAAO,EAAA,CAAG,6CAAA,EAA+C,iBAAA,CAAkB,KAAK,CAAA;AAAA,QAChF,OAAA,EAAS,EAAA;AAAA,UACL,iEAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACtB;AAAA,QACA,QAAA,EAAU,EAAA,CAAG,qCAAA,EAAuC,iBAAA,CAAkB,QAAQ,CAAA;AAAA,QAC9E,MAAA,EAAQ,EAAA,CAAG,WAAA,EAAa,iBAAA,CAAkB,MAAM,CAAA;AAAA,QAChD,GAAG;AAAA,OACP;AAAA,MACA,UAAA,EAAY;AAAA,QACR,IAAA,EAAM,CAAC,EAAE,SAAA,EAAAC,YAAW,OAAA,EAAS,GAAGC,QAAM,KAAM;AACxC,UAAA,uBACId,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,WAAA,EAAU,UAAA;AAAA,cACV,GAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAW,GAAGa,UAAS,CAAA;AAAA,cACtB,GAAGC;AAAA;AAAA,WACR;AAAA,QAER,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,EAAE,SAAA,EAAAD,YAAW,WAAA,EAAa,GAAGC,QAAM,KAAM;AAC/C,UAAA,IAAI,gBAAgB,MAAA,EAAQ;AACxB,YAAA,uBAAOd,eAACe,2BAAA,EAAA,EAAgB,SAAA,EAAW,GAAG,QAAA,EAAUF,UAAS,CAAA,EAAI,GAAGC,MAAAA,EAAO,CAAA;AAAA,UAC3E;AAEA,UAAA,IAAI,gBAAgB,OAAA,EAAS;AACzB,YAAA,uBAAOd,cAAAA,CAACQ,4BAAAA,EAAA,EAAiB,SAAA,EAAW,GAAG,QAAA,EAAUK,UAAS,CAAA,EAAI,GAAGC,MAAAA,EAAO,CAAA;AAAA,UAC5E;AAEA,UAAA,uBAAOd,eAACgB,2BAAA,EAAA,EAAgB,SAAA,EAAW,GAAG,QAAA,EAAUH,UAAS,CAAA,EAAI,GAAGC,MAAAA,EAAO,CAAA;AAAA,QAC3E,CAAA;AAAA,QACA,SAAA,EAAW,CAAC,EAAE,GAAGA,MAAAA,EAAM,qBAAMd,cAAAA,CAAC,iBAAA,EAAA,EAAkB,MAAA,EAAiB,GAAGc,MAAAA,EAAO,CAAA;AAAA,QAC3E,YAAY,CAAC,EAAE,QAAA,EAAU,GAAGA,QAAM,KAAM;AACpC,UAAA,uBACId,cAAAA,CAAC,IAAA,EAAA,EAAI,GAAGc,MAAAA,EACJ,QAAA,kBAAAd,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACV,QAAA,EACL,CAAA,EACJ,CAAA;AAAA,QAER,CAAA;AAAA,QACA,GAAG;AAAA,OACP;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAoE;AAChE,EAAA,MAAM,oBAAoBW,mCAAA,EAAqB;AAE/C,EAAA,MAAM,GAAA,GAAMM,aAA0B,IAAI,CAAA;AAC1C,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,SAAA,CAAU,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,KAAA,EAAM;AAAA,EAC9C,CAAA,EAAG,CAAC,SAAA,CAAU,OAAO,CAAC,CAAA;AAEtB,EAAA,uBACIlB,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,SAAA;AAAA,MACL,UAAA,EAAU,GAAA,CAAI,IAAA,CAAK,kBAAA,CAAmB,QAAQ,IAAI,CAAA;AAAA,MAClD,sBAAA,EACI,SAAA,CAAU,QAAA,IACV,CAAC,SAAA,CAAU,eACX,CAAC,SAAA,CAAU,SAAA,IACX,CAAC,SAAA,CAAU,YAAA;AAAA,MAEf,oBAAkB,SAAA,CAAU,WAAA;AAAA,MAC5B,kBAAgB,SAAA,CAAU,SAAA;AAAA,MAC1B,qBAAmB,SAAA,CAAU,YAAA;AAAA,MAC7B,SAAA,EAAW,EAAA;AAAA,QACP,8/BAAA;AAAA,QACA,iBAAA,CAAkB,GAAA;AAAA,QAClB;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AChLA,SAAS,oBAAA,CAAwB;AAAA,EAC7B,IAAA;AAAA,EACA,WAAA;AAAA,EACA;AACJ,CAAA,EAIuC;AACnC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAImB,eAAwB,WAAW,CAAA;AAC3E,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,eAAe,IAAA,GAAO,YAAA;AAEpC,EAAA,MAAM,WAAA,GAAcF,aAAO,QAAQ,CAAA;AACnC,EAAAC,gBAAU,MAAM;AACZ,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EAC1B,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAWE,iBAAA;AAAA,IACb,CAAC,IAAA,KAAY;AACT,MAAA,IAAI,CAAC,YAAA,EAAc,eAAA,CAAgB,IAAI,CAAA;AACvC,MAAA,WAAA,CAAY,UAAU,IAAI,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACjB;AAEA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AAC3B;AAWA,IAAM,mBAAA,GAAsBC,oBAA8C,IAAI,CAAA;AAE9E,IAAM,kBAAkB,MAAM;AAC1B,EAAA,MAAM,OAAA,GAAUC,iBAAW,mBAAmB,CAAA;AAE9C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC9E;AAEA,EAAA,OAAO,OAAA;AACX,CAAA;AAGA,IAAM,OAAA,GAAU,CAAC,SAAA,EAAiB,KAAA,KAA0B;AACxD,EAAA,MAAM,OAAe,EAAC;AACtB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC5B,IAAA,IAAA,CAAK,IAAA,CAAKC,eAAA,CAAQ,SAAA,EAAW,CAAC,CAAC,CAAA;AAAA,EACnC;AACA,EAAA,OAAO,IAAA;AACX,CAAA;AAGA,IAAM,UAAA,GAAa,CAAC,IAAA,KAAe;AAC/B,EAAA,MAAM,KAAA,GAAQC,cAAA,CAAO,IAAA,EAAM,KAAK,CAAA;AAChC,EAAA,MAAM,GAAA,GAAMA,cAAA,CAAO,IAAA,EAAM,GAAG,CAAA;AAE5B,EAAA,OAAO,EAAE,OAAO,GAAA,EAAI;AACxB,CAAA;AAYO,IAAM,eAAe,CAAC;AAAA,EACzB,KAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA,uBAAuB,IAAA,EAAK;AAAA,EAC5B,iBAAA;AAAA,EACA,IAAA,GAAO,CAAA;AAAA,EACP,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAyB;AACrB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,oBAAA,CAAuC;AAAA,IAC3E,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,YAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACb,CAAA;AAED,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,oBAAA,CAAqB;AAAA,IACjE,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,gBAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACb,CAAA;AAED,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAe;AACrC,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,SAAA,KAA+B;AACnD,IAAA,MAAM,YAAA,GAAeD,eAAA;AAAA,MACjB,gBAAA,wBAAwB,IAAA,EAAK;AAAA,MAC7B,SAAA,KAAc,MAAA,GAAS,IAAA,GAAO,CAAC;AAAA,KACnC;AACA,IAAA,mBAAA,CAAoB,YAAY,CAAA;AAAA,EACpC,CAAA;AAEA,EAAA,MAAM,YAAA,GAAwC;AAAA,IAC1C,cAAc,YAAA,IAAgB,IAAA;AAAA,IAC9B,YAAA,EAAc,gBAAA;AAAA,IACd,SAAA,EAAW,gBAAA,oBAAoB,IAAI,IAAA,EAAK;AAAA,IACxC,UAAA,EAAY,cAAA;AAAA,IACZ;AAAA,GACJ;AAEA,EAAA,uBACIvB,cAAAA,CAAC,mBAAA,CAAoB,UAApB,EAA6B,KAAA,EAAO,cACjC,QAAA,kBAAAA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA;AAAA,MACvE,GAAG,KAAA;AAAA,MACH;AAAA;AAAA,GACL,EACJ,CAAA;AAER;AAOO,IAAM,yBAAyB,CAAC;AAAA,EACnC,SAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAmC;AAC/B,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,IAAA,GAAO,SAAA,KAAc,MAAA,GAASe,2BAAAA,GAAkBP,4BAAAA;AAEtD,EAAA,MAAM,WAAA,GAAoD,CAAC,KAAA,KAAU;AACjE,IAAA,UAAA,CAAW,SAAS,CAAA;AACpB,IAAA,OAAA,GAAU,KAAK,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,uBACIR,eAACI,YAAAA,CAAK,IAAA,EAAL,EAAU,OAAA,EAAS,WAAA,EAAc,GAAG,KAAA,EAChC,QAAA,EACL,CAAA;AAAA,EAER;AAEA,EAAA,uBACIJ,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAS,WAAA;AAAA,MACT,IAAA,EAAM,UAAU,MAAA,GAAY,SAAA;AAAA,MAC5B,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,UAAU,MAAA,GAAY,OAAA;AAAA,MAC/B,SAAA,EAAW,EAAA,CAAG,OAAA,GAAU,KAAA,GAAQ,KAAK,CAAA;AAAA,MACpC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA,QAAA,oBAAYA,cAAAA,CAAC,IAAA,EAAA,EAAK,WAAU,QAAA,EAAS;AAAA;AAAA,GAC1C;AAER;AAMO,IAAM,mBAAmB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,OAAM,KAA6B;AAC1F,EAAA,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,QAAA,KAAa,eAAA,EAAgB;AACtD,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,SAAA,EAAW,QAAQ,CAAA;AAExC,EAAA,uBACIA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,2BAA2B,SAAS,CAAA,EAAI,GAAG,KAAA,EACzD,eAAK,GAAA,CAAI,CAAC,SAAS,QAAA,CAAS,IAAI,CAAC,CAAA,EACtC,CAAA;AAER;AAMO,IAAM,kBAAkB,CAAC,EAAE,MAAM,SAAA,EAAW,GAAG,OAAM,KAA4B;AACpF,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAa,GAAI,eAAA,EAAgB;AACvD,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,WAAW,IAAI,CAAA;AACtC,EAAA,MAAM,UAAA,GAAa,YAAA,IAAgByB,iBAAA,CAAU,IAAA,EAAM,YAAY,CAAA;AAC/D,EAAA,MAAM,WAAA,GAAcC,gBAAQ,IAAI,CAAA;AAEhC,EAAA,uBACIzB,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,gDAAA;AAAA,QACA,WAAA,IAAe,CAAC,UAAA,IAAc,4BAAA;AAAA,QAC9B;AAAA,OACJ;AAAA,MACA,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MAChC,IAAA,EAAK,IAAA;AAAA,MACL,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,aAAa,SAAA,GAAY,OAAA;AAAA,MACjC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,+CAAA;AAAA,cACA,UAAA,IAAc;AAAA,aAClB;AAAA,YACC,QAAA,EAAA;AAAA;AAAA,SACL;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAA,GAAA,EAAI;AAAA;AAAA;AAAA,GACjD;AAER;AC7OA,SAAS,IAAA,CAAK;AAAA,EACV,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACP,ySAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gaAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAC/D,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,MACrE,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACrE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gEAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,MAC7D,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,iIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AC9DA,IAAM,eAAA,GAAkBqB,oBAA2C,IAAI,CAAA;AAEvE,SAAS,WAAA,GAAc;AACnB,EAAA,MAAM,OAAA,GAAUC,iBAAW,eAAe,CAAA;AAE1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,OAAA;AACX;AAMA,SAAS,QAAA,CAAS;AAAA,EACd,WAAA,GAAc,YAAA;AAAA,EACd,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA0C;AACtC,EAAA,MAAM,CAAC,WAAA,EAAa,GAAG,CAAA,GAAIK,iCAAA;AAAA,IACvB;AAAA,MACI,GAAG,IAAA;AAAA,MACH,IAAA,EAAM,WAAA,KAAgB,YAAA,GAAe,GAAA,GAAM;AAAA,KAC/C;AAAA,IACA;AAAA,GACJ;AACA,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIR,eAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAExD,EAAA,MAAM,QAAA,GAAWC,iBAAAA,CAAY,CAACQ,IAAAA,KAAqB;AAC/C,IAAA,IAAI,CAACA,IAAAA,EAAK;AACV,IAAA,gBAAA,CAAiBA,IAAAA,CAAI,eAAe,CAAA;AACpC,IAAA,gBAAA,CAAiBA,IAAAA,CAAI,eAAe,CAAA;AAAA,EACxC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaR,kBAAY,MAAM;AACjC,IAAA,GAAA,EAAK,UAAA,EAAW;AAAA,EACpB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,UAAA,GAAaA,kBAAY,MAAM;AACjC,IAAA,GAAA,EAAK,UAAA,EAAW;AAAA,EACpB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,aAAA,GAAgBA,iBAAAA;AAAA,IAClB,CAAC,KAAA,KAAyC;AACtC,MAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC3B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACf,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,YAAA,EAAc;AACnC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACf;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,YAAY,UAAU;AAAA,GAC3B;AAEA,EAAAF,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,MAAA,EAAQ;AACrB,IAAA,MAAA,CAAO,GAAG,CAAA;AAAA,EACd,CAAA,EAAG,CAAC,GAAA,EAAK,MAAM,CAAC,CAAA;AAEhB,EAAAA,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,QAAA,CAAS,GAAG,CAAA;AACZ,IAAA,GAAA,CAAI,EAAA,CAAG,UAAU,QAAQ,CAAA;AACzB,IAAA,GAAA,CAAI,EAAA,CAAG,UAAU,QAAQ,CAAA;AAEzB,IAAA,OAAO,MAAM;AACT,MAAA,GAAA,EAAK,GAAA,CAAI,UAAU,QAAQ,CAAA;AAAA,IAC/B,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,GAAA,EAAK,QAAQ,CAAC,CAAA;AAElB,EAAA,uBACIlB,cAAAA;AAAA,IAAC,eAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACG,KAAA,EAAO;AAAA,QACH,WAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA,EAAa,WAAA,KAAgB,IAAA,EAAM,IAAA,KAAS,MAAM,UAAA,GAAa,YAAA,CAAA;AAAA,QAC/D,UAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,gBAAA,EAAkB,aAAA;AAAA,UAClB,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,UACnC,IAAA,EAAK,QAAA;AAAA,UACL,sBAAA,EAAqB,UAAA;AAAA,UACrB,WAAA,EAAU,UAAA;AAAA,UACT,GAAG,KAAA;AAAA,UACH;AAAA;AAAA;AACL;AAAA,GACJ;AAER;AAKA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACrE,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAY,GAAI,WAAA,EAAY;AAEjD,EAAA,uBACIA,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,aAAa,SAAA,EAAU,iBAAA,EAAkB,WAAA,EAAU,kBAAA,EACzD,QAAA,kBAAAA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,MAAA;AAAA,QACA,WAAA,KAAgB,eAAe,OAAA,GAAU,gBAAA;AAAA,QACzC;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAKA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAClE,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,WAAA,EAAY;AAEpC,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,OAAA;AAAA,MACL,sBAAA,EAAqB,OAAA;AAAA,MACrB,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,oCAAA;AAAA,QACA,WAAA,KAAgB,eAAe,MAAA,GAAS,MAAA;AAAA,QACxC;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAMA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACP,CAAA,EAAkC;AAC9B,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACIC,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,6BAAA;AAAA,QACA,WAAA,KAAgB,eACV,mCAAA,GACA,6CAAA;AAAA,QACN;AAAA,OACJ;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MACT,YAAA,EAAW,gBAAA;AAAA,MACV,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC6B,qBAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,wBACjD7B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,gBAAA,EAAc;AAAA;AAAA;AAAA,GAC5C;AAER;AAMA,SAAS,YAAA,CAAa;AAAA,EAClB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACP,CAAA,EAAkC;AAC9B,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACIC,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,6BAAA;AAAA,QACA,WAAA,KAAgB,eACV,oCAAA,GACA,gDAAA;AAAA,QACN;AAAA,OACJ;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MACT,YAAA,EAAW,YAAA;AAAA,MACV,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC8B,sBAAA,EAAA,EAAW,SAAA,EAAU,QAAA,EAAS,eAAY,MAAA,EAAO,CAAA;AAAA,wBAClD9B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA;AAAA,GACxC;AAER;ACzOA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAC3D,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAChG;AAGA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA4B;AAClE,EAAA,uBACIA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,kDAAA;AAAA,QACA,2DAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAGA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAwB;AACpE,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACR;AAER;AAGA,SAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,SAAA,EAAU,EAA+C;AACnF,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,IAAA;AAE3C,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA;AAAA,MAC9D,QAAA,EAAA,MAAA,CACI,GAAA;AAAA,QAAI,CAAC,CAAA,KACF,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC;AAAA,OACzE,CACC,KAAK,IAAI;AAAA;AAAA,GAClB;AAER;AAGA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,aAAA,EAAc,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEjG;ACrDA,SAAS,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAA4B;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACG,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,8IAAA;AAAA,QACA,mCAAA;AAAA,QACA,2EAAA;AAAA,QACA,8EAAA;AAAA,QACA,sFAAA;AAAA,QACA,+EAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;;;ACnBA,IAAM,mBAAA,uBAA0B,GAAA,CAAI,CAAC,UAAU,OAAA,EAAS,SAAA,EAAW,MAAM,CAAC,CAAA;AAkBnE,SAAS,aAAa,IAAA,EAA8C;AACvE,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,IACK,IAAA,CAAK,WAAW,GAAG,CAAA,IAAK,CAAC,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,IAC9C,IAAA,CAAK,WAAW,GAAG,CAAA,IACnB,KAAK,UAAA,CAAW,IAAI,KACpB,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EACvB;AACE,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI;AACA,IAAA,OAAO,mBAAA,CAAoB,IAAI,IAAI,GAAA,CAAI,IAAI,CAAA,CAAE,QAAQ,IAAI,IAAA,GAAO,GAAA;AAAA,EACpE,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,GAAA;AAAA,EACX;AACJ;AC1BA,IAAM,YAAA,GAAeD,0BAAAA;AAAA,EACjB,iQAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,UAAA,EACI,4OAAA;AAAA,QACJ,KAAA,EAAO;AAAA,OACX;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,eAAA;AAAA,QACJ,EAAA,EAAI,eAAA;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAEA,SAAS,IAAA,CAAK;AAAA,EACV,SAAA;AAAA,EACA,OAAA,GAAU,YAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,QAAA,GAAW,KAAA;AAAA,EACX,MAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACP,CAAA,EAMO;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,IAAW,CAAC,QAAA,GAAWK,aAAK,IAAA,GAAO,GAAA;AAChD,EAAA,MAAM,aAAa,MAAA,KAAW,QAAA;AAC9B,EAAA,MAAM,WAAA,GAAc,GAAA,KAAQ,MAAA,KAAW,QAAA,GAAW,qBAAA,GAAwB,MAAA,CAAA;AAE1E,EAAA,SAAS,YAAY,CAAA,EAA4B;AAC7C,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA;AAAA,IACJ;AACA,IAAA,OAAA,GAAU,CAAC,CAAA;AAAA,EACf;AAEA,EAAA,MAAM,mBAAmB,IAAA,KAAS,IAAA,GAAO,EAAA,GAAK,IAAA,KAAS,OAAO,EAAA,GAAK,EAAA;AAEnE,EAAA,uBACIH,eAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,QAAA,GAAW,MAAA,GAAY,YAAA,CAAa,IAAI,CAAA;AAAA,MAC9C,MAAA;AAAA,MACA,GAAA,EAAK,WAAA;AAAA,MACL,QAAA,EAAU,WAAW,EAAA,GAAK,MAAA;AAAA,MAC1B,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,EAAA;AAAA,QACP,YAAA,CAAa,EAAE,OAAA,EAAS,IAAA,EAAM,WAAW,CAAA;AAAA,QACzC,QAAA,IAAY;AAAA,OAChB;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA,mBACGD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gEAAA,EACX,UACL,CAAA,GAEA,QAAA;AAAA,QAEH,cAAc,CAAC,QAAA,oBACZC,eAAAA,CAAAI,qBAAA,EACI,QAAA,EAAA;AAAA,0BAAAL,cAAAA;AAAA,YAAC+B,4BAAA;AAAA,YAAA;AAAA,cACG,aAAA,EAAY,MAAA;AAAA,cACZ,IAAA,EAAM,gBAAA;AAAA,cACN,SAAA,EAAU;AAAA;AAAA,WACd;AAAA,0BACA/B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,oBAAA,EAAkB;AAAA,SAAA,EAChD;AAAA;AAAA;AAAA,GAER;AAER;ACtFA,SAAS,QAAA,CAAS;AAAA,EACd,MAAA,GAAS,CAAA;AAAA,EACT,KAAA,GAAQ,EAAA;AAAA,EACR,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,KAAA;AAAA,EACV,IAAA,GAAO,KAAA;AAAA,EACP,SAAA;AAAA,EACA;AACJ,CAAA,EAAkB;AACd,EAAA,MAAM,MAAA,GAASiB,YAAAA,CAAoC,EAAE,CAAA;AACrD,EAAA,MAAM,OAAO,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,MAAM,CAAA;AAE5C,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAkB;AAC/B,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,EACpE,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAe,IAAA,KAAiB;AAClD,IAAA,MAAM,QAAQ,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,CAAA,CAAE,MAAM,EAAE,CAAA;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAK,KAAA,EAAM;AACxB,IAAA,IAAA,CAAK,KAAK,CAAA,GAAI,KAAA;AACd,IAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,MAAM,CAAA;AAC5C,IAAA,QAAA,GAAW,MAAM,CAAA;AACjB,IAAA,IAAI,SAAS,KAAA,GAAQ,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAe,CAAA,KAAuC;AACzE,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACvB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,IAAA,CAAK,KAAK,CAAA,EAAG;AACb,QAAA,MAAM,IAAA,GAAO,KAAK,KAAA,EAAM;AACxB,QAAA,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA;AACd,QAAA,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,MAC5B,CAAA,MAAO;AACH,QAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,MACrB;AAAA,IACJ,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,WAAA,EAAa;AAC9B,MAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc;AAC/B,MAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,IACrB;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAsB;AACvC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA;AACjF,IAAA,QAAA,GAAW,MAAM,CAAA;AACjB,IAAA,OAAA,CAAQ,KAAK,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,uBACIjB,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA,EAClD,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG,sBAC5BA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MAEG,GAAA,EAAK,CAAC,EAAA,KAAO;AACT,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAA;AAAA,MACxB,CAAA;AAAA,MACA,IAAA,EAAM,OAAO,UAAA,GAAa,MAAA;AAAA,MAC1B,SAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,CAAA;AAAA,MACX,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,IAAK,EAAA;AAAA,MAClB,QAAA;AAAA,MACA,cAAA,EAAc,OAAA;AAAA,MACd,UAAU,CAAC,CAAA,KAAM,aAAa,CAAA,EAAG,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MAC/C,SAAA,EAAW,CAAC,CAAA,KAAM,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,MACpC,OAAA,EAAS,WAAA;AAAA,MACT,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAA,EAAO;AAAA,MAChC,SAAA,EAAW,EAAA;AAAA,QACP,qJAAA;AAAA,QACA,2EAAA;AAAA,QACA,8EAAA;AAAA,QACA,sFAAA;AAAA,QACA;AAAA;AACJ,KAAA;AAAA,IApBK;AAAA,GAsBZ,CAAA,EACL,CAAA;AAER;ACxFA,IAAM,cAAA,GAAiBD,0BAAAA;AAAA,EACnB,ocAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,iBAAA;AAAA,QACT,OAAA,EACI;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,oBAAA;AAAA,QACJ,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAEA,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAsF;AAClF,EAAA,uBACIC,cAAAA;AAAA,IAACgC,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACR;AAER;AC3BA,IAAM,0BAA0BX,mBAAAA,CAA4C;AAAA,EACxE,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,kBAAA,EAAoB,MAAA;AAAA,EACpB,YAAA,EAAc;AAClB,CAAC,CAAA;AAuBD,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,IAAA,GAAO,MAAM,QAAA,EAAU,GAAG,OAAM,EAA0B;AAC7F,EAAA,MAAM,eAAeY,WAAA,EAAM;AAC3B,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,KAAS,QAAA;AAChC,EAAA,MAAM,WAAA,GAAc,WAAY,KAAA,GAAwC,IAAA;AAExE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAId,cAAAA;AAAA,IAClC,WAAA,EAAa,SAAS,WAAA,EAAa;AAAA,GACvC;AAEA,EAAAD,gBAAU,MAAM;AACZ,IAAA,IAAI,WAAA,EAAa,UAAU,MAAA,EAAW;AAClC,MAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,IACpC;AAAA,EACJ,CAAA,EAAG,CAAC,WAAA,EAAa,KAAK,CAAC,CAAA;AAEvB,EAAA,MAAM,SAAA,GAAY;AAAA,IACd,GAAI,KAAA;AAAA,IACJ,GAAI,QAAA,IAAY;AAAA,MACZ,aAAA,EAAe,CAAC,GAAA,KAAgB;AAC5B,QAAA,cAAA,CAAe,GAAG,CAAA;AAClB,QAAA,WAAA,EAAa,gBAAgB,GAAG,CAAA;AAAA,MACpC;AAAA;AACJ,GACJ;AAEA,EAAA,uBACIlB,cAAAA;AAAA,IAACkC,mBAAA,CAAY,IAAA;AAAA,IAAZ;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,4DAAA,EAA8D,SAAS,CAAA;AAAA,MACpF,GAAI,SAAA;AAAA,MACL,QAAA,kBAAAlC,cAAAA;AAAA,QAAC,uBAAA,CAAwB,QAAA;AAAA,QAAxB;AAAA,UACG,KAAA,EAAO;AAAA,YACH,IAAA;AAAA,YACA,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,kBAAA,EAAoB,WAAA;AAAA,YACpB;AAAA,WACJ;AAAA,UACC;AAAA;AAAA;AACL;AAAA,GACJ;AAER;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC1B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAkF;AAC9E,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,oBAAoB,YAAA,EAAa,GACjDsB,iBAAW,uBAAuB,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,IAAA,KAAS,QAAA,IAAY,kBAAA,KAAuB,KAAA;AAE7D,EAAA,uBACIrB,eAAAA;AAAA,IAACiC,mBAAA,CAAY,IAAA;AAAA,IAAZ;AAAA,MACG,WAAA,EAAU,wBAAA;AAAA,MACV,KAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,cAAA,CAAe,EAAE,OAAA,EAAS,SAAA,EAAW,MAAM,CAAA;AAAA,QAC3C,iFAAA;AAAA,QACA,2CAAA;AAAA,QACA,sDAAA;AAAA,QACA,+BAAA;AAAA,QACA,uDAAA;AAAA,QACA,SAAS,UAAA,IAAc;AAAA,UACnB,0BAAA;AAAA,UACA,2BAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA,oBACGlC,cAAAA;AAAA,UAACmC,cAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACG,QAAA,EAAU,YAAA;AAAA,YACV,SAAA,EAAU,gDAAA;AAAA,YACV,YAAY,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,GAAA,EAAK,QAAQ,GAAA;AAAI;AAAA,SAC7D;AAAA,wBAEJnC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAiB,QAAA,EAAS;AAAA;AAAA;AAAA,GAC9C;AAER;ACtHA,SAAS,MAAA,CAAO,EAAE,GAAG,KAAA,EAAM,EAAgD;AACvE,EAAA,uBAAOA,eAACoC,cAAA,CAAgB,IAAA,EAAhB,EAAqB,WAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC/D;AAEA,SAAS,aAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACInC,eAAAA;AAAA,IAACmC,cAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,yKAAA;AAAA,QACA,mCAAA;AAAA,QACA,2EAAA;AAAA,QACA,8EAAA;AAAA,QACA,sFAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDpC,cAAAA,CAACoC,cAAA,CAAgB,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EACzB,QAAA,kBAAApC,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB,SAAA,EAAU,yCAAwC,CAAA,EACvE;AAAA;AAAA;AAAA,GACJ;AAER;AAEA,SAAS,aAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,QAAA;AAAA,EACX,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACIhB,cAAAA,CAACoC,cAAA,CAAgB,MAAA,EAAhB,EACG,QAAA,kBAAAnC,eAAAA;AAAA,IAACmC,cAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,2LAAA;AAAA,QACA,uFAAA;AAAA,QACA,gGAAA;AAAA,QACA,iEAAA;AAAA,QACA,aAAa,QAAA,IAAY,kCAAA;AAAA,QACzB;AAAA,OACJ;AAAA,MACA,QAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAApC,eAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,wBACtBA,cAAAA;AAAA,UAACoC,cAAA,CAAgB,QAAA;AAAA,UAAhB;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,KAAA;AAAA,cACA,aAAa,QAAA,IAAY;AAAA,aAC7B;AAAA,YACC;AAAA;AAAA,SACL;AAAA,wBACApC,eAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAAA,GAC5B,EACJ,CAAA;AAER;AAEA,SAAS,UAAA,CAAW;AAAA,EAChB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAgD;AAC5C,EAAA,uBACIC,eAAAA;AAAA,IAACmC,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qHAAA;AAAA,QACA,8CAAA;AAAA,QACA,gEAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAApC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EACZ,0BAAAA,cAAAA,CAACoC,cAAA,CAAgB,aAAA,EAAhB,EACG,0BAAApC,cAAAA,CAACqC,qBAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,GAClC,CAAA,EACJ,CAAA;AAAA,wBACArC,cAAAA,CAACoC,cAAA,CAAgB,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AAAA,GACxC;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiD;AACxF,EAAA,uBACIpC,cAAAA;AAAA,IAACoC,cAAA,CAAgB,KAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uDAAA,EAAyD,SAAS,CAAA;AAAA,MAC/E,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,eAAA,CAAgB;AAAA,EACrB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAqD;AACjD,EAAA,uBACIpC,cAAAA;AAAA,IAACoC,cAAA,CAAgB,SAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA;AAAA,MACnD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA0D;AACtD,EAAA,uBACIpC,cAAAA;AAAA,IAACoC,cAAA,CAAgB,cAAA;AAAA,IAAhB;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA;AAAA,MAC9E,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApC,cAAAA,CAACsC,yBAAA,EAAA,EAAc,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,GACtC;AAER;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACItC,cAAAA;AAAA,IAACoC,cAAA,CAAgB,gBAAA;AAAA,IAAhB;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA;AAAA,MAC9E,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApC,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB,WAAU,QAAA,EAAS;AAAA;AAAA,GACxC;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,GAAG,KAAA,EAAM,EAAiD;AAC7E,EAAA,uBAAOhB,eAACoC,cAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACtE;AAEA,SAAS,WAAA,CAAY,EAAE,GAAG,KAAA,EAAM,EAAiD;AAC7E,EAAA,uBAAOpC,eAACoC,cAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACtE;AChJA,SAAS,SAAA,CAAU;AAAA,EACf,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACIpC,cAAAA;AAAA,IAACuC,iBAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,WAAA;AAAA,MACV,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,gNAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACjBA,IAAM,gBAAA,GAAmBxC,2BAAI,kEAAA,EAAoE;AAAA,EAC7F,QAAA,EAAU;AAAA,IACN,OAAA,EAAS;AAAA,MACL,OAAA,EAAS,4BAAA;AAAA,MACT,OAAA,EAAS,6BAAA;AAAA,MACT,OAAA,EAAS,8BAAA;AAAA,MACT,MAAA,EAAQ,2BAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAAA,IACA,IAAA,EAAM;AAAA,MACF,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACR,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM;AAAA;AAEd,CAAC;AAED,IAAM,yBAAA,GAA4BA,2BAAI,iCAAA,EAAmC;AAAA,EACrE,QAAA,EAAU;AAAA,IACN,OAAA,EAAS;AAAA,MACL,OAAA,EAAS,qCAAA;AAAA,MACT,OAAA,EAAS,uCAAA;AAAA,MACT,OAAA,EAAS,uCAAA;AAAA,MACT,MAAA,EAAQ,sCAAA;AAAA,MACR,MAAA,EAAQ;AAAA;AACZ,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,OAAA,EAAS;AAAA;AAEjB,CAAC;AAOD,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,KAAA,EAAO,OAAA,GAAU,WAAW,IAAA,GAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAAkB;AAC/F,EAAA,uBACIC,cAAAA;AAAA,IAACwC,gBAAA,CAAkB,IAAA;AAAA,IAAlB;AAAA,MACG,WAAA,EAAU,UAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,gBAAA,CAAiB,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC3D,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAxC,cAAAA;AAAA,QAACwC,gBAAA,CAAkB,SAAA;AAAA,QAAlB;AAAA,UACG,WAAA,EAAU,oBAAA;AAAA,UACV,WAAW,EAAA,CAAG,yBAAA,CAA0B,EAAE,OAAA,EAAS,CAAC,CAAA;AAAA,UACpD,OAAO,EAAE,SAAA,EAAW,eAAe,GAAA,IAAO,KAAA,IAAS,EAAE,CAAA,EAAA,CAAA;AAAK;AAAA;AAC9D;AAAA,GACJ;AAER;ACzDA,IAAM,gBAAA,GAAmBzC,2BAAI,gCAAA,EAAkC;AAAA,EAC3D,QAAA,EAAU;AAAA,IACN,OAAA,EAAS;AAAA,MACL,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,kBAAA;AAAA,MACN,MAAA,EAAQ;AAAA;AACZ,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,OAAA,EAAS;AAAA;AAEjB,CAAC;AAED,SAAS,QAAA,CAAS;AAAA,EACd,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAkE;AAC9D,EAAA,uBACIC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,UAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,aAAA,EAAY,MAAA;AAAA,MACZ,WAAW,EAAA,CAAG,gBAAA,CAAiB,EAAE,OAAA,EAAS,SAAA,EAAW,CAAC,CAAA;AAAA,MACrD,GAAG;AAAA;AAAA,GACR;AAER;AC3BA,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA,GAAM,CAAA;AAAA,EACN,GAAA,GAAM,GAAA;AAAA,EACN,GAAG;AACP,CAAA,EAAgD;AAC5C,EAAA,MAAM,OAAA,GAAUyC,aAAA;AAAA,IACZ,MACI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GAAI,YAAA,GAAe,CAAC,KAAK,GAAG,CAAA;AAAA,IACzF,CAAC,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,GAAG;AAAA,GAClC;AAEA,EAAA,uBACIxC,eAAAA;AAAA,IAACyC,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,YAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,2KAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA1C,cAAAA;AAAA,UAAC0C,cAAA,CAAgB,KAAA;AAAA,UAAhB;AAAA,YACG,WAAA,EAAU,cAAA;AAAA,YACV,SAAA,EAAU,kMAAA;AAAA,YACV,QAAA,kBAAA1C,cAAAA;AAAA,cAAC0C,cAAA,CAAgB,KAAA;AAAA,cAAhB;AAAA,gBACG,WAAA,EAAU,cAAA;AAAA,gBACV,SAAA,EAAU;AAAA;AAAA;AACd;AAAA,SACJ;AAAA,QACC,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAO,EAAG,CAAC,CAAA,EAAG,KAAA,qBACxC1C,cAAAA;AAAA,UAAC0C,cAAA,CAAgB,KAAA;AAAA,UAAhB;AAAA,YACG,WAAA,EAAU,cAAA;AAAA,YAEV,SAAA,EAAU;AAAA,WAAA;AAAA,UADL;AAAA,SAGZ;AAAA;AAAA;AAAA,GACL;AAER;AC5CA,SAAS,MAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACI1C,cAAAA;AAAA,IAAC2C,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACP,iJAAA;AAAA,QACA,2EAAA;AAAA,QACA,iDAAA;AAAA,QACA,yDAAA;AAAA,QACA,yCAAA;AAAA,QACA,iEAAA;AAAA,QACA,yCAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAA3C,cAAAA;AAAA,QAAC2C,cAAA,CAAgB,KAAA;AAAA,QAAhB;AAAA,UACG,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACP,kFAAA;AAAA,YACA,yCAAA;AAAA,YACA,oCAAA;AAAA,YACA,mDAAA;AAAA,YACA,sCAAA;AAAA,YACA,iDAAA;AAAA,YACA;AAAA;AACJ;AAAA;AACJ;AAAA,GACJ;AAER;;;AC7BO,IAAM,QAAA,GAAW;AAAA,EACpB,OAAA,EAAS,GAAA;AAAA,EACT,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ,IAAA;AAAA,EACR,IAAA,EAAM;AACV;AAQO,IAAM,IAAA,GAAO;AAAA,EAChB,MAAA,EAAQ,CAAC,GAAA,EAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EACvB,KAAA,EAAO,CAAC,CAAA,EAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,EACtB,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAK,CAAC,CAAA;AAAA,EACrB,MAAA,EAAQ,CAAC,CAAA,EAAK,CAAA,EAAG,GAAK,CAAC;AAC3B;AAOO,IAAM,MAAA,GAAS;AAAA,EAClB,QAAQ,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA,EACtD,QAAQ,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AACvD;AAMO,IAAM,UAAA,GAAa;AAAA;AAAA,EAEtB,MAAA,EAAQ;AAAA,IACJ,UAAU,QAAA,CAAS,OAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,MAAA,EAAQ;AAAA,IACJ,GAAG,MAAA,CAAO;AAAA,GACd;AAAA;AAAA,EAGA,KAAA,EAAO;AAAA,IACH,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,QAAA,EAAU;AAAA,IACN,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,KAAA,EAAO;AAAA,IACH,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,KAAA,EAAO;AAAA,IACH,GAAG,MAAA,CAAO;AAAA,GACd;AAAA;AAAA,EAGA,OAAA,EAAS;AAAA,IACL,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA,GACf;AAAA;AAAA,EAGA,IAAA,EAAM;AAAA,IACF,UAAU,QAAA,CAAS,IAAA;AAAA,IACnB,MAAM,IAAA,CAAK;AAAA;AAEnB;AAKO,IAAM,MAAA,GAAS;AAAA,EAClB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,SAAS,EAAE,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,WAAW,QAAA,EAAS;AAAA,EACvD,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,EAAE,QAAA,EAAU,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK;AAC/E;AAEO,IAAM,OAAA,GAAU;AAAA,EACnB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,EAC3B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,WAAW,QAAA,EAAS;AAAA,EAC7D,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,EAAE,QAAA,EAAU,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAK;AACrF;AAEO,IAAM,UAAA,GAAa;AAAA,EACtB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,WAAW,OAAA,EAAQ;AAAA,EAC5D,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAK,UAAA,EAAY,EAAE,QAAA,EAAU,QAAA,CAAS,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,MAAK;AACzF;AAEO,IAAM,OAAA,GAAU;AAAA,EACnB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,EAClC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAG,UAAA,EAAY,WAAW,KAAA,EAAM;AAAA,EAC9D,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAM,UAAA,EAAY,EAAE,QAAA,EAAU,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAK;AAC5F;AAIO,IAAM,OAAA,GAAU;AAAA,EACnB,SAAA,EAAW;AAAA,IACP,QAAQ,EAAC;AAAA,IACT,OAAA,EAAS,EAAE,UAAA,EAAY,EAAE,iBAAiB,IAAA,EAAM,aAAA,EAAe,MAAK;AAAE,GAC1E;AAAA,EACA,IAAA,EAAM;AAAA,IACF,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,IAC3B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,UAAA,EAAY,WAAW,IAAA;AAAK;AAEjE;AAGO,IAAM,SAAA,GAAY;AAAA,EACrB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAU,EAAE,MAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,SAAS,OAAA;AACtD;ACjIA,IAAM,cAActB,mBAAAA,CAAgC;AAAA,EAChD,WAAA,EAAa,EAAA;AAAA,EACb,MAAA,EAAQ;AACZ,CAAC,CAAA;AAED,SAAS,cAAA,GAAiB;AACtB,EAAA,OAAOC,iBAAW,WAAW,CAAA;AACjC;AAEA,SAAS,IAAA,CAAK;AAAA,EACV,YAAA;AAAA,EACA,KAAA,EAAO,eAAA;AAAA,EACP,aAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA8C;AAC1C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,IAAIH,cAAAA,CAAS,eAAA,IAAmB,gBAAgB,EAAE,CAAA;AACxF,EAAA,MAAM,cAAc,eAAA,IAAmB,aAAA;AACvC,EAAA,MAAM,SAASc,WAAAA,EAAM;AAErB,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAc;AACrC,IAAA,IAAI,eAAA,KAAoB,MAAA,EAAW,gBAAA,CAAiB,CAAC,CAAA;AACrD,IAAA,aAAA,GAAgB,CAAC,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,uBACIjC,cAAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,OAAO,EAAE,WAAA,EAAa,MAAA,EAAO,EAC/C,QAAA,kBAAAA,cAAAA;AAAA,IAAC4C,YAAA,CAAc,IAAA;AAAA,IAAd;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,KAAA,EAAO,WAAA;AAAA,MACP,aAAA,EAAe,iBAAA;AAAA,MACd,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAEA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8C;AAClF,EAAA,uBACI5C,cAAAA;AAAA,IAAC4C,YAAA,CAAc,IAAA;AAAA,IAAd;AAAA,MACG,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY;AAAA,EACjB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAiD;AAC7C,EAAA,MAAM,EAAE,WAAA,EAAa,MAAA,EAAO,GAAI,cAAA,EAAe;AAC/C,EAAA,MAAM,WAAW,WAAA,KAAgB,KAAA;AAEjC,EAAA,uBACI3C,eAAAA;AAAA,IAAC2C,YAAA,CAAc,OAAA;AAAA,IAAd;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,KAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,6GAAA;AAAA,QACA,0CAAA;AAAA,QACA,qGAAA;AAAA,QACA,kDAAA;AAAA,QACA,yJAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA5C,cAAAA,CAAC6C,uBAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACrB,sCACG7C,cAAAA;AAAA,UAACmC,cAAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACG,WAAA,EAAU,mBAAA;AAAA,YACV,QAAA,EAAU,GAAG,MAAM,CAAA,KAAA,CAAA;AAAA,YACnB,SAAA,EAAU,oDAAA;AAAA,YACV,YAAY,MAAA,CAAO;AAAA;AAAA,SACvB,EAER,CAAA;AAAA,wBACAnC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAA2C,QAAA,EAAS;AAAA;AAAA;AAAA,GACxE;AAER;AAEA,SAAS,WAAA,CAAY;AAAA,EACjB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAiD;AAC7C,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,cAAA,EAAe;AACvC,EAAA,MAAM,WAAW,WAAA,KAAgB,KAAA;AAEjC,EAAA,uBACIA,cAAAA;AAAA,IAAC4C,YAAA,CAAc,OAAA;AAAA,IAAd;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,4HAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAA5C,eAAC6C,uBAAA,EAAA,EAAgB,IAAA,EAAK,aAAY,OAAA,EAAS,KAAA,EACtC,sCACG7C,cAAAA;AAAA,QAACmC,cAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UAEG,SAAA,EAAU,MAAA;AAAA,UACV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UAC5B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,UAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,UAC1B,YAAY,EAAE,QAAA,EAAU,SAAS,IAAA,EAAM,IAAA,EAAM,KAAK,MAAA,EAAO;AAAA,UACxD;AAAA,SAAA;AAAA,QANI;AAAA,OAOT,EAER;AAAA;AAAA,GACJ;AAER;ACpFA,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,UAAA,GAAa,CAAA;AAEnB,SAAS,WAAA,GAAqB;AAC1B,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA2C;AAE9D,EAAA,MAAM,KAAA,GAAe;AAAA,IACjB,QAAQ,EAAC;AAAA,IACT,WAAW,EAAC;AAAA,IAEZ,GAAA,CAAI,MAAM,EAAA,EAAI;AACV,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACxD,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAExD,MAAA,IAAI,MAAA,EAAQ;AACR,QAAA,KAAA,CAAM,MAAA,GAAS,MAAM,MAAA,CAAO,GAAA;AAAA,UAAI,CAAC,CAAA,KAC7B,CAAA,CAAE,EAAA,KAAO,OAAA,GAAU,EAAE,GAAG,CAAA,EAAG,GAAG,IAAA,EAAM,EAAA,EAAI,OAAA,EAAQ,GAAI;AAAA,SACxD;AAAA,MACJ,CAAA,MAAO;AACH,QAAA,KAAA,CAAM,MAAA,GAAS,CAAC,EAAE,EAAA,EAAI,SAAS,GAAG,IAAA,EAAK,EAAG,GAAG,KAAA,CAAM,MAAM,CAAA,CAAE,KAAA,CAAM,GAAG,UAAU,CAAA;AAAA,MAClF;AAEA,MAAA,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AACnD,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,QAAA,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,OAAO,CAAC,CAAA;AAChC,QAAA,MAAA,CAAO,GAAA,CAAI,OAAA,EAAS,UAAA,CAAW,MAAM,KAAA,CAAM,OAAO,OAAO,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,MAC9E;AACA,MAAA,OAAO,OAAA;AAAA,IACX,CAAA;AAAA,IAEA,OAAO,EAAA,EAAI;AACP,MAAA,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,EAAE,CAAC,CAAA;AAC3B,MAAA,MAAA,CAAO,OAAO,EAAE,CAAA;AAChB,MAAA,KAAA,CAAM,MAAA,GAAS,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AACrD,MAAA,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AAAA,IACvD,CAAA;AAAA,IAEA,UAAU,QAAA,EAAU;AAChB,MAAA,KAAA,CAAM,SAAA,CAAU,KAAK,QAAQ,CAAA;AAC7B,MAAA,OAAO,MAAM;AACT,QAAA,KAAA,CAAM,YAAY,KAAA,CAAM,SAAA,CAAU,OAAO,CAAC,CAAA,KAAM,MAAM,QAAQ,CAAA;AAAA,MAClE,CAAA;AAAA,IACJ;AAAA,GACJ;AACA,EAAA,OAAO,KAAA;AACX;AAIA,IAAM,iBAAA,GAAoBd,oBAA4B,IAAI,CAAA;AAE1D,SAAS,QAAA,GAAkB;AACvB,EAAA,MAAM,KAAA,GAAQC,iBAAW,iBAAiB,CAAA;AAC1C,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,4CAA4C,CAAA;AACxE,EAAA,OAAO,KAAA;AACX;AAYO,SAAS,QAAA,GAAW;AACvB,EAAA,MAAM,QAAQ,QAAA,EAAS;AAEvB,EAAA,SAAS,MAAA,CAAO,OAAe,OAAA,EAAwB;AACnD,IAAA,OAAO,KAAA,CAAM,GAAA;AAAA,MACT,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,gBAAA,EAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ;AAAA,MACjE,OAAA,EAAS;AAAA,KACb;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA,CAAO,OAAO,MAAA,EAAQ;AAAA,IACzB,OAAA,EAAS,CAAC,KAAA,EAAe,OAAA,KACrB,KAAA,CAAM,GAAA;AAAA,MACF,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,gBAAA,EAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ;AAAA,MACjE,OAAA,EAAS;AAAA,KACb;AAAA,IAEJ,KAAA,EAAO,CAAC,KAAA,EAAe,OAAA,KACnB,KAAA,CAAM,GAAA;AAAA,MACF,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,gBAAA,EAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ;AAAA,MAC/D,OAAA,EAAS;AAAA,KACb;AAAA,IAEJ,OAAA,EAAS,CAAC,KAAA,EAAe,OAAA,KACrB,KAAA,CAAM,GAAA;AAAA,MACF,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,gBAAA,EAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ;AAAA,MACjE,OAAA,EAAS;AAAA,KACb;AAAA,IAEJ,MAAM,CAAC,KAAA,EAAe,OAAA,KAClB,KAAA,CAAM,IAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,kBAAkB,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,SAAS,EAAE,CAAA;AAAA,IAE1F,SAAS,CAAC,KAAA,EAAe,OAAA,KACrB,KAAA,CAAM,IAAI,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,SAAS,EAAE,CAAA;AAAA,IAE9E,OAAA,EAAS,CAAC,EAAA,KAAe,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,IAExC,OAAA,EAAS,CAAK,OAAA,EAAqB,QAAA,KAAiC;AAChE,MAAA,MAAM,EAAA,GAAK,KAAA,CAAM,GAAA,CAAI,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,CAAA,EAAG,KAAA,EAAO,QAAA,CAAS,OAAA,EAAS,CAAA;AAC9E,MAAA,OAAA,CACK,IAAA,CAAK,CAAC,IAAA,KAAS;AACZ,QAAA,MAAM,KAAA,GACF,OAAO,QAAA,CAAS,OAAA,KAAY,aACtB,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,GACrB,QAAA,CAAS,OAAA;AACnB,QAAA,KAAA,CAAM,GAAA,CAAI,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,gBAAA,EAAkB,KAAA,IAAS,EAAE,CAAA;AAAA,MACxE,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACZ,QAAA,MAAM,KAAA,GACF,OAAO,QAAA,CAAS,KAAA,KAAU,aAAa,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,GAAI,QAAA,CAAS,KAAA;AAC1E,QAAA,KAAA,CAAM,GAAA,CAAI,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,gBAAA,EAAkB,KAAA,IAAS,EAAE,CAAA;AAAA,MACtE,CAAC,CAAA;AACL,MAAA,OAAO,EAAA;AAAA,IACX;AAAA,GACH,CAAA;AACL;AAIA,IAAM,KAAA,GAAsC;AAAA,EACxC,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,kBAAStB,cAAAA,CAAC8C,2BAAA,EAAA,EAAgB,WAAU,QAAA,EAAS,CAAA;AAAA,EAC7C,KAAA,kBAAO9C,cAAAA,CAAC+C,wBAAA,EAAA,EAAa,WAAU,QAAA,EAAS,CAAA;AAAA,EACxC,OAAA,kBAAS/C,cAAAA,CAACgD,6BAAA,EAAA,EAAkB,WAAU,QAAA,EAAS,CAAA;AAAA,EAC/C,IAAA,kBAAMhD,cAAAA,CAACiD,oBAAA,EAAA,EAAS,WAAU,QAAA,EAAS,CAAA;AAAA,EACnC,OAAA,kBAASjD,cAAAA,CAACkD,uBAAA,EAAA,EAAY,WAAU,qBAAA,EAAsB;AAC1D,CAAA;AAEA,IAAM,iBAAA,GAA+C;AAAA,EACjD,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,iDAAA;AAAA,EACT,KAAA,EAAO,yCAAA;AAAA,EACP,OAAA,EAAS,6CAAA;AAAA,EACT,IAAA,EAAM,2CAAA;AAAA,EACN,OAAA,EAAS;AACb,CAAA;AAEA,IAAM,gBAAA,GAA8C;AAAA,EAChD,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,qCAAA;AAAA,EACT,KAAA,EAAO,iCAAA;AAAA,EACP,OAAA,EAAS,mCAAA;AAAA,EACT,IAAA,EAAM,kCAAA;AAAA,EACN,OAAA,EAAS;AACb,CAAA;AAIA,SAAS,UAAU,EAAE,EAAA,EAAI,MAAM,KAAA,EAAO,WAAA,EAAa,QAAO,EAAc;AACpE,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,IAAA,GAAO,MAAM,IAAI,CAAA;AAEvB,EAAA,uBACIjD,eAAAA;AAAA,IAACkC,cAAAA,CAAO,EAAA;AAAA,IAAP;AAAA,MACG,MAAA,EAAM,IAAA;AAAA,MACN,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,OAAO,IAAA,EAAK;AAAA,MAC1C,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,MACtC,MAAM,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,OAAO,IAAA,EAAK;AAAA,MACvC,YAAY,UAAA,CAAW,KAAA;AAAA,MACvB,SAAA,EAAW,EAAA;AAAA,QACP,6KAAA;AAAA,QACA,iBAAiB,IAAI;AAAA,OACzB;AAAA,MACC,QAAA,EAAA;AAAA,QAAA,IAAA,oBAAQnC,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,YAAY,iBAAA,CAAkB,IAAI,CAAC,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBAEzEC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACX,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAsC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACxD,+BACGA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8CAA8C,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,UAE1E,0BACGA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACG,SAAS,MAAA,CAAO,OAAA;AAAA,cAChB,SAAA,EAAU,yHAAA;AAAA,cACT,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACZ,SAAA,EAER,CAAA;AAAA,wBAEAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACG,OAAA,EAAS,MAAM,KAAA,CAAM,MAAA,CAAO,EAAE,CAAA;AAAA,YAC9B,YAAA,EAAW,SAAA;AAAA,YACX,SAAA,EAAU,2GAAA;AAAA,YACV,QAAA,kBAAAA,cAAAA,CAACmD,iBAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA;AAChC;AAAA;AAAA,GACJ;AAER;AAYA,IAAM,cAAA,GAAkD;AAAA,EACpD,WAAA,EAAa,yBAAA;AAAA,EACb,UAAA,EAAY,0BAAA;AAAA,EACZ,YAAA,EAAc,8CAAA;AAAA,EACd,cAAA,EAAgB,4BAAA;AAAA,EAChB,aAAA,EAAe,6BAAA;AAAA,EACf,eAAA,EAAiB;AACrB,CAAA;AAUA,SAAS,OAAA,CAAQ,EAAE,QAAA,GAAW,cAAA,EAAgB,UAAS,EAAiB;AACpE,EAAA,MAAM,CAAC,KAAK,CAAA,GAAIhC,cAAAA,CAAgB,WAAW,CAAA;AAC3C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAAsB,EAAE,CAAA;AAEpD,EAAAD,eAAAA,CAAU,MAAM,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEnD,EAAA,uBACIjB,eAAAA,CAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,OAAO,KAAA,EAC9B,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBACDD,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,WAAA,EAAU,QAAA;AAAA,QACV,YAAA,EAAW,eAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACP,uDAAA;AAAA,UACA,eAAe,QAAQ;AAAA,SAC3B;AAAA,QACA,QAAA,kBAAAA,cAAAA,CAAC6C,uBAAAA,EAAA,EAAgB,IAAA,EAAK,MAAA,EAAO,OAAA,EAAS,KAAA,EACjC,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,qBACT7C,eAAC,KAAA,EAAA,EAAe,SAAA,EAAU,qBAAA,EACtB,QAAA,kBAAAA,cAAAA,CAAC,SAAA,EAAA,EAAW,GAAG,CAAA,EAAG,CAAA,EAAA,EADZ,CAAA,CAAE,EAEZ,CACH,CAAA,EACL;AAAA;AAAA;AACJ,GAAA,EACJ,CAAA;AAER;ACjSA,IAAM,qBAAqBqB,mBAAAA,CAKzB;AAAA,EACE,IAAA,EAAM,IAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,WAAA,EAAa;AACjB,CAAC,CAAA;AAED,SAASa,YAAAA,CAAY;AAAA,EACjB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV,WAAA,GAAc,YAAA;AAAA,EACd,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAIO;AACH,EAAA,uBACIlC,cAAAA;AAAA,IAACoD,mBAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,cAAA,EAAc,OAAA;AAAA,MACd,kBAAA,EAAkB,WAAA;AAAA,MAClB,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAQ;AAAA,MAC1B,SAAA,EAAW,EAAA;AAAA,QACP,mNAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApD,cAAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,WAAA,EAAY,EACrE,QAAA,EACL;AAAA;AAAA,GACJ;AAER;AAEA,SAAS,eAAA,CAAgB;AAAA,EACrB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,GAAG;AACP,CAAA,EAA2F;AACvF,EAAA,MAAM,OAAA,GAAUsB,iBAAW,kBAAkB,CAAA;AAE7C,EAAA,uBACItB,cAAAA;AAAA,IAACoD,mBAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAc,QAAQ,OAAA,IAAW,OAAA;AAAA,MACjC,WAAA,EAAW,QAAQ,IAAA,IAAQ,IAAA;AAAA,MAC3B,gBAAc,OAAA,CAAQ,OAAA;AAAA,MACtB,SAAA,EAAW,EAAA;AAAA,QACP,kiCAAA;AAAA,QACA,cAAA,CAAe;AAAA,UACX,OAAA,EAAS,QAAQ,OAAA,IAAW,OAAA;AAAA,UAC5B,IAAA,EAAM,QAAQ,IAAA,IAAQ;AAAA,SACzB,CAAA;AAAA,QACD;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH;AAAA;AAAA,GACL;AAER;ACzEA,IAAM,sBAAA,GAAyBrD,0BAAAA;AAAA,EAC3B,ksBAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,+BAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACb;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,WAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER;AAEA,IAAM,oBAAA,GAAuBA,0BAAAA;AAAA,EACzB,kJAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,+BAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACb,KACJ;AAAA,IACA,eAAA,EAAiB,EAAE,OAAA,EAAS,SAAA;AAAU;AAE9C,CAAA;AAEA,SAAS,eAAA,CAAgB;AAAA,EACrB,aAAA,GAAgB,GAAA;AAAA,EAChB,GAAG;AACP,CAAA,EAAqD;AACjD,EAAA,uBACIC,cAAAA;AAAA,IAACqD,eAAA,CAAiB,QAAA;AAAA,IAAjB;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,aAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,OAAA,CAAQ,EAAE,GAAG,KAAA,EAAM,EAAiD;AACzE,EAAA,uBAAOrD,eAACqD,eAAA,CAAiB,IAAA,EAAjB,EAAsB,WAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AACjE;AAEA,SAAS,cAAA,CAAe,EAAE,GAAG,KAAA,EAAM,EAAoD;AACnF,EAAA,uBAAOrD,eAACqD,eAAA,CAAiB,OAAA,EAAjB,EAAyB,WAAA,EAAU,iBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AAC5E;AAEA,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EACiD;AAC7C,EAAA,uBACIrD,cAAAA,CAACqD,eAAA,CAAiB,MAAA,EAAjB,EACG,QAAA,kBAAApD,eAAAA;AAAA,IAACoD,eAAA,CAAiB,OAAA;AAAA,IAAjB;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,UAAA;AAAA,MACA,SAAA,EAAW,GAAG,sBAAA,CAAuB,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MACjE,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDrD,cAAAA,CAACqD,eAAA,CAAiB,KAAA,EAAjB,EAAuB,SAAA,EAAW,EAAA,CAAG,oBAAA,CAAqB,EAAE,OAAA,EAAS,CAAC,CAAA,EAAG;AAAA;AAAA;AAAA,GAC9E,EACJ,CAAA;AAER;AC9EA,SAAS,OAAA,CAAQ,EAAE,GAAG,KAAA,EAAM,EAAiD;AACzE,EAAA,uBAAOrD,eAACsD,eAAA,CAAiB,IAAA,EAAjB,EAAsB,WAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AACjE;AAEA,SAAS,cAAA,CAAe,EAAE,GAAG,KAAA,EAAM,EAAoD;AACnF,EAAA,uBAAOtD,eAACsD,eAAA,CAAiB,OAAA,EAAjB,EAAyB,WAAA,EAAU,iBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AAC5E;AAEA,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,KAAA,GAAQ,QAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACP,CAAA,EAAoD;AAChD,EAAA,uBACItD,cAAAA,CAACsD,eAAA,CAAiB,MAAA,EAAjB,EACG,QAAA,kBAAAtD,cAAAA;AAAA,IAACsD,eAAA,CAAiB,OAAA;AAAA,IAAjB;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,4hBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAEA,SAAS,aAAA,CAAc,EAAE,GAAG,KAAA,EAAM,EAAmD;AACjF,EAAA,uBAAOtD,eAACsD,eAAA,CAAiB,MAAA,EAAjB,EAAwB,WAAA,EAAU,gBAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AAC1E;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACnE,EAAA,uBACItD,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA;AAAA,MACrD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyB;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,MAC/C,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAwB;AACtE,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,MAC/C,GAAG;AAAA;AAAA,GACR;AAER;AChEA,IAAM,UAAA,GAAa,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAE;AAC1D,IAAM,YAAA,GAAe,CAAC,GAAA,EAAK,GAAA,EAAK,KAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG;AAqB5D,SAAS,IAAA,CAAK;AAAA,EACV,IAAI,GAAA,GAAM,GAAA;AAAA,EACV,IAAA,GAAO,EAAA;AAAA,EACP,MAAA,GAAS,GAAA;AAAA,EACT,MAAA,GAAS,KAAA;AAAA,EACT,KAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAc;AACV,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACzC,KAAA,EAAO;AAAA,QACH,UAAA,EAAY,8BAAA;AAAA,QACZ,QAAA,EAAU,GAAG,IAAI,CAAA,EAAA,CAAA;AAAA,QACjB,UAAA,EAAY,MAAA;AAAA,QACZ,SAAA,EAAW,SAAS,QAAA,GAAW,QAAA;AAAA,QAC/B,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,QACzB,GAAG;AAAA,OACP;AAAA,MACC,GAAI,KAAA;AAAA,MACJ;AAAA;AAAA,GACL;AAER;ACzCA,IAAM,aAAA,GAAgBqB,oBAAc,KAAK,CAAA;AAIzC,SAAS,MAAA,CAAO,EAAE,QAAA,EAAU,GAAG,OAAM,EAAgD;AACjF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAIF,cAAAA,CAAS,KAAA,CAAM,eAAe,KAAK,CAAA;AAE3E,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,KAAS,MAAA,GAAY,MAAM,IAAA,GAAO,YAAA;AAEvD,EAAA,uBACInB,cAAAA,CAAC,aAAA,CAAc,UAAd,EAAuB,KAAA,EAAO,QAC3B,QAAA,kBAAAA,cAAAA;AAAA,IAACuD,cAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,CAAA,KAAM;AACjB,QAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,QAAA,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,MAC1B,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACH;AAAA;AAAA,GACL,EACJ,CAAA;AAER;AAIA,SAAS,aAAA,CAAc,EAAE,GAAG,KAAA,EAAM,EAAmD;AACjF,EAAA,uBAAOvD,eAACuD,cAAA,CAAgB,OAAA,EAAhB,EAAwB,WAAA,EAAU,gBAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AAC1E;AAIA,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,OAAM,EAAkD;AACzF,EAAA,MAAM,MAAA,GAASjC,iBAAW,aAAa,CAAA;AAEvC,EAAA,uBACItB,cAAAA,CAACuD,cAAA,CAAgB,QAAhB,EAAuB,WAAA,EAAU,iBAAgB,UAAA,EAAU,IAAA,EAAE,GAAG,KAAA,EAC7D,QAAA,kBAAAvD,eAAC6C,uBAAAA,EAAA,EAAgB,MAAK,MAAA,EAAQ,QAAA,EAAA,MAAA,IAAU,UAAS,CAAA,EACrD,CAAA;AAER;AAIA,SAAS,WAAA,CAAY,EAAE,GAAG,KAAA,EAAM,EAAiD;AAC7E,EAAA,uBAAO7C,eAACuD,cAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACtE;AAIA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmD;AAC5F,EAAA,uBACIvD,cAAAA,CAACuD,cAAA,CAAgB,OAAA,EAAhB,EAAwB,WAAA,EAAU,gBAAA,EAAiB,OAAA,EAAO,IAAA,EAAC,UAAA,EAAU,IAAA,EAAE,GAAG,OACvE,QAAA,kBAAAvD,cAAAA;AAAA,IAACmC,cAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,kFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,YAAY,EAAE,QAAA,EAAU,SAAS,MAAA,EAAQ,IAAA,EAAM,KAAK,MAAA;AAAO;AAAA,GAC/D,EACJ,CAAA;AAER;AAIA,SAAS,aAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACIlC,gBAAC,YAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAD,eAAC,aAAA,EAAA,EAAc,CAAA;AAAA,oBACfA,cAAAA;AAAA,MAACuD,cAAA,CAAgB,OAAA;AAAA,MAAhB;AAAA,QACG,WAAA,EAAU,gBAAA;AAAA,QACV,OAAA,EAAO,IAAA;AAAA,QACP,UAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACP,mQAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,QAAA,kBAAAtD,eAAAA;AAAA,UAACkC,cAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,4BAAA;AAAA,YACV,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,YACzC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,YACtC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,YACtC,YAAY,UAAA,CAAW,KAAA;AAAA,YACtB,QAAA,EAAA;AAAA,cAAA,QAAA;AAAA,cACA,eAAA,oBACGnC,cAAAA,CAACuD,cAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAe,OAAA,EAAO,IAAA,EACnD,QAAA,kBAAAtD,eAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACG,OAAA,EAAQ,OAAA;AAAA,kBACR,SAAA,EAAU,wBAAA;AAAA,kBACV,IAAA,EAAK,SAAA;AAAA,kBACL,QAAA,EAAA;AAAA,oCAAAD,cAAAA,CAACmD,mBAAA,EAAM,CAAA;AAAA,oCACPnD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA,eACnC,EACJ;AAAA;AAAA;AAAA;AAER;AAAA;AACJ,GAAA,EACJ,CAAA;AAER;AAIA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAClE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,wCAAA,EAA0C,SAAS,CAAA;AAAA,MAChE,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,YAAA,CAAa;AAAA,EAClB,SAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACIC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,uHAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,eAAA,oBACGD,cAAAA,CAACuD,cAAA,CAAgB,OAAhB,EAAsB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAvD,cAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,mBAAK,CAAA,EACrC;AAAA;AAAA;AAAA,GAER;AAER;AAIA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiD;AACxF,EAAA,uBACIA,cAAAA;AAAA,IAACuD,cAAA,CAAgB,KAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,MACrE,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAuD;AACnD,EAAA,uBACIvD,cAAAA;AAAA,IAACuD,cAAA,CAAgB,WAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,oGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AChMA,IAAM,kBAAA,GAAqBlC,oBAAc,KAAK,CAAA;AAI9C,SAAS,WAAA,CAAY;AAAA,EACjB,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAqD;AACjD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAIF,cAAAA,CAAS,KAAA,CAAM,eAAe,KAAK,CAAA;AAE3E,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,KAAS,MAAA,GAAY,MAAM,IAAA,GAAO,YAAA;AAEvD,EAAA,uBACInB,cAAAA,CAAC,kBAAA,CAAmB,UAAnB,EAA4B,KAAA,EAAO,QAChC,QAAA,kBAAAA,cAAAA;AAAA,IAACwD,mBAAA,CAAqB,IAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,CAAA,KAAM;AACjB,QAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,QAAA,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,MAC1B,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACH;AAAA;AAAA,GACL,EACJ,CAAA;AAER;AAIA,SAAS,kBAAA,CAAmB;AAAA,EACxB,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBAAOxD,eAACwD,mBAAA,CAAqB,OAAA,EAArB,EAA6B,WAAA,EAAU,sBAAA,EAAwB,GAAG,KAAA,EAAO,CAAA;AACrF;AAIA,SAAS,iBAAA,CAAkB;AAAA,EACvB,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAuD;AACnD,EAAA,MAAM,MAAA,GAASlC,iBAAW,kBAAkB,CAAA;AAE5C,EAAA,uBACItB,cAAAA,CAACwD,mBAAA,CAAqB,QAArB,EAA4B,WAAA,EAAU,uBAAsB,UAAA,EAAU,IAAA,EAAE,GAAG,KAAA,EACxE,QAAA,kBAAAxD,eAAC6C,uBAAAA,EAAA,EAAgB,MAAK,MAAA,EAAQ,QAAA,EAAA,MAAA,IAAU,UAAS,CAAA,EACrD,CAAA;AAER;AAIA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACI7C,cAAAA;AAAA,IAACwD,mBAAA,CAAqB,OAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,OAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAU,IAAA;AAAA,MACT,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAxD,cAAAA;AAAA,QAACmC,cAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACG,SAAA,EAAW,EAAA;AAAA,YACP,0EAAA;AAAA,YACA;AAAA,WACJ;AAAA,UACA,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,UACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,UACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,UACnB,YAAY,EAAE,QAAA,EAAU,SAAS,MAAA,EAAQ,IAAA,EAAM,KAAK,MAAA;AAAO;AAAA;AAC/D;AAAA,GACJ;AAER;AAIA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAIG;AACC,EAAA,uBACIlC,gBAAC,iBAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,EAAA,CAAG,OAAA,KAAY,YAAA,IAAgB,gCAAgC;AAAA;AAAA,KAC9E;AAAA,oBACAA,cAAAA;AAAA,MAACwD,mBAAA,CAAqB,OAAA;AAAA,MAArB;AAAA,QACG,WAAA,EAAU,sBAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,cAAA,EAAc,OAAA;AAAA,QACd,OAAA,EAAO,IAAA;AAAA,QACP,UAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACP,kJAAA;AAAA,UACA,sFAAA;AAAA,UACA,YAAY,SAAA,IACR,qFAAA;AAAA,UACJ,YAAY,YAAA,IACR,gEAAA;AAAA,UACJ;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,QAAA,kBAAAvD,eAAAA;AAAA,UAACkC,cAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACG,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,YACzC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,YACtC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE;AAAA,YACtC,YAAY,UAAA,CAAW,KAAA;AAAA,YACtB,QAAA,EAAA;AAAA,cAAA,SAAA,oBACGnC,cAAAA,CAACwD,mBAAA,CAAqB,MAAA,EAArB,EAA4B,OAAA,EAAO,IAAA,EAChC,QAAA,kBAAAvD,eAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,oLAAA,EACd,QAAA,EAAA;AAAA,gCAAAD,cAAAA,CAACmD,iBAAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,gCAC5BnD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA,eAAA,EACnC,CAAA,EACJ,CAAA;AAAA,cAEH;AAAA;AAAA;AAAA;AACL;AAAA;AACJ,GAAA,EACJ,CAAA;AAER;AAIA,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACvE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,wNAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACvE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,6JAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACtE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,uKAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAsD;AAClD,EAAA,uBACIA,cAAAA;AAAA,IAACwD,mBAAA,CAAqB,KAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACIxD,cAAAA;AAAA,IAACwD,mBAAA,CAAqB,WAAA;AAAA,IAArB;AAAA,MACG,WAAA,EAAU,0BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAIA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,OAAA,GAAU,QAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAC6D;AACzD,EAAA,uBACIxD,eAACwD,mBAAA,CAAqB,MAAA,EAArB,EAA4B,WAAA,EAAU,qBAAA,EAAsB,SAAO,IAAA,EAAE,GAAG,OACrE,QAAA,kBAAAxD,cAAAA,CAAC,UAAO,OAAA,EAAkB,IAAA,EAAY,WAAW,EAAA,CAAG,SAAS,CAAA,EACxD,QAAA,EACL,CAAA,EACJ,CAAA;AAER;AAIA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,OAAA,GAAU,OAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAC6D;AACzD,EAAA,uBACIA,eAACwD,mBAAA,CAAqB,MAAA,EAArB,EAA4B,WAAA,EAAU,qBAAA,EAAsB,SAAO,IAAA,EAAE,GAAG,OACrE,QAAA,kBAAAxD,cAAAA,CAAC,UAAO,OAAA,EAAkB,IAAA,EAAY,WAAW,EAAA,CAAG,SAAS,CAAA,EACxD,QAAA,EACL,CAAA,EACJ,CAAA;AAER;AC3PA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmD;AACxF,EAAA,uBACIA,cAAAA;AAAA,IAACyD,iBAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,uFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,aAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACIzD,cAAAA;AAAA,IAACyD,iBAAA,CAAmB,IAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA;AAAA,MACvE,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAsD;AAClD,EAAA,uBACIzD,cAAAA,CAACyD,iBAAA,CAAmB,QAAnB,EAA0B,SAAA,EAAU,QACjC,QAAA,kBAAAxD,eAAAA;AAAA,IAACwD,iBAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,yNAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDzD,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB,WAAU,yEAAA,EAA0E;AAAA;AAAA;AAAA,GACzG,EACJ,CAAA;AAER;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAsD;AAClD,EAAA,uBACIhB,cAAAA;AAAA,IAACyD,iBAAA,CAAmB,OAAA;AAAA,IAAnB;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAU,iIAAA;AAAA,MACT,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAzD,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,SAAA,EAAW,EAAA;AAAA,YACP,iHAAA;AAAA,YACA;AAAA,WACJ;AAAA,UACC;AAAA;AAAA;AACL;AAAA,GACJ;AAER;AC3CA,SAAS,QAAA,CAAS;AAAA,EACd,OAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA,GAAc,qBAAA;AAAA,EACd,iBAAA,GAAoB,WAAA;AAAA,EACpB,YAAA,GAAe,mBAAA;AAAA,EACf,QAAA,GAAW,KAAA;AAAA,EACX;AACJ,CAAA,EAAkB;AACd,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAImB,eAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,WAAW,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,KAAK,CAAA;AAE1D,EAAA,uBACIlB,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACnB,QAAA,kBAAAC,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,OAAA,EAAQ,WAAA;AAAA,QACR,QAAA;AAAA,QACA,eAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAW,EAAA;AAAA,UACP,uFAAA;AAAA,UACA,uEAAA;AAAA,UACA,WAAW,iBAAA,GAAoB,uBAAA;AAAA,UAC/B;AAAA,SACJ;AAAA,QACA,QAAA,EAAA;AAAA,0BAAAD,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAY,QAAA,EAAA,QAAA,GAAW,QAAA,CAAS,QAAQ,WAAA,EAAY,CAAA;AAAA,0BACpEA,cAAAA,CAAC0D,8BAAA,EAAA,EAAmB,IAAA,EAAM,EAAA,EAAI,WAAU,gCAAA,EAAiC;AAAA;AAAA;AAAA,KAC7E,EACJ,CAAA;AAAA,oBACA1D,cAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,qBAAA,EAAsB,KAAA,EAAM,OAAA,EAClD,QAAA,kBAAAC,eAAAA,CAAC0D,YAAA,EAAA,EAAQ,SAAA,EAAU,YAAA,EACf,QAAA,EAAA;AAAA,sBAAA1D,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EACX,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC4D,sBAAA,EAAA,EAAW,IAAA,EAAM,EAAA,EAAI,WAAU,gCAAA,EAAiC,CAAA;AAAA,wBACjE5D,cAAAA;AAAA,UAAC2D,YAAA,CAAQ,KAAA;AAAA,UAAR;AAAA,YACG,WAAA,EAAa,iBAAA;AAAA,YACb,SAAA,EAAU;AAAA;AAAA;AACd,OAAA,EACJ,CAAA;AAAA,sBACA1D,eAAAA,CAAC0D,YAAA,CAAQ,IAAA,EAAR,EAAa,WAAU,8BAAA,EACpB,QAAA,EAAA;AAAA,wBAAA3D,eAAC2D,YAAA,CAAQ,KAAA,EAAR,EAAc,SAAA,EAAU,kDACpB,QAAA,EAAA,YAAA,EACL,CAAA;AAAA,QACC,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACV1D,eAAAA;AAAA,UAAC0D,YAAA,CAAQ,IAAA;AAAA,UAAR;AAAA,YAEG,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,QAAA,EAAU,CAAC,MAAA,CAAO,KAAK,CAAA;AAAA,YACvB,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,UAAU,MAAM;AACZ,cAAA,aAAA,GAAgB,MAAA,CAAO,KAAA,KAAU,KAAA,GAAQ,EAAA,GAAK,OAAO,KAAK,CAAA;AAC1D,cAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,YACjB,CAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACP,mHAAA;AAAA,cACA,4EAAA;AAAA,cACA,0EAAA;AAAA,cACA;AAAA,aACJ;AAAA,YACA,QAAA,EAAA;AAAA,8BAAA3D,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,cACnB,KAAA,KAAU,MAAA,CAAO,KAAA,oBACdA,cAAAA;AAAA,gBAACqC,qBAAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAM,EAAA;AAAA,kBACN,SAAA,EAAU;AAAA;AAAA;AACd;AAAA,WAAA;AAAA,UAnBC,MAAA,CAAO;AAAA,SAsBnB;AAAA,OAAA,EACL;AAAA,KAAA,EACJ,CAAA,EACJ;AAAA,GAAA,EACJ,CAAA;AAER;ACjGA,SAAS,YAAA,CAAa,EAAE,GAAG,KAAA,EAAM,EAAsD;AACnF,EAAA,uBAAOrC,cAAAA,CAAC6D,oBAAA,CAAsB,IAAA,EAAtB,EAA4B,GAAG,KAAA,EAAO,CAAA;AAClD;AAEA,SAAS,kBAAA,CAAmB;AAAA,EACxB,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBAAO7D,cAAAA,CAAC6D,oBAAA,CAAsB,MAAA,EAAtB,EAA8B,GAAG,KAAA,EAAO,CAAA;AACpD;AAEA,SAAS,mBAAA,CAAoB;AAAA,EACzB,GAAG;AACP,CAAA,EAAyD;AACrD,EAAA,uBAAO7D,eAAC6D,oBAAA,CAAsB,OAAA,EAAtB,EAA8B,WAAA,EAAU,uBAAA,EAAyB,GAAG,KAAA,EAAO,CAAA;AACvF;AAEA,SAAS,mBAAA,CAAoB;AAAA,EACzB,SAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACP,CAAA,EAAyD;AACrD,EAAA,uBACI7D,cAAAA,CAAC6D,oBAAA,CAAsB,MAAA,EAAtB,EACG,QAAA,kBAAA7D,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,OAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,uBAAA;AAAA,MACV,UAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,0rBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAEA,SAAS,iBAAA,CAAkB,EAAE,GAAG,KAAA,EAAM,EAAuD;AACzF,EAAA,uBAAO7D,eAAC6D,oBAAA,CAAsB,KAAA,EAAtB,EAA4B,WAAA,EAAU,qBAAA,EAAuB,GAAG,KAAA,EAAO,CAAA;AACnF;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACtB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACP,CAAA,EAGG;AACC,EAAA,uBACI7D,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,IAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,oBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA,QACP,ypBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,wBAAA,CAAyB;AAAA,EAC9B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACI5D,eAAAA;AAAA,IAAC4D,oBAAA,CAAsB,YAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,6BAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACP,yWAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,OAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA7D,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAU,uEAAA;AAAA,YACV,WAAA,EAAU,uCAAA;AAAA,YACV,QAAA,kBAAAA,cAAAA,CAAC6D,oBAAA,CAAsB,aAAA,EAAtB,EACG,QAAA,kBAAA7D,cAAAA,CAACqC,qBAAAA,EAAA,EAAU,aAAA,EAAY,MAAA,EAAO,CAAA,EAClC;AAAA;AAAA,SACJ;AAAA,QACC;AAAA;AAAA;AAAA,GACL;AAER;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBAAOrC,eAAC6D,oBAAA,CAAsB,UAAA,EAAtB,EAAiC,WAAA,EAAU,2BAAA,EAA6B,GAAG,KAAA,EAAO,CAAA;AAC9F;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC3B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACI5D,eAAAA;AAAA,IAAC4D,oBAAA,CAAsB,SAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,0BAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACP,yWAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA7D,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAU,uEAAA;AAAA,YACV,WAAA,EAAU,oCAAA;AAAA,YACV,QAAA,kBAAAA,cAAAA,CAAC6D,oBAAA,CAAsB,aAAA,EAAtB,EACG,QAAA,kBAAA7D,cAAAA,CAACqC,qBAAAA,EAAA,EAAU,aAAA,EAAY,MAAA,EAAO,CAAA,EAClC;AAAA;AAAA,SACJ;AAAA,QACC;AAAA;AAAA;AAAA,GACL;AAER;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACvB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACIrC,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,KAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,qBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,6DAAA,EAA+D,SAAS,CAAA;AAAA,MACrF,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC3B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA2D;AACvD,EAAA,uBACI7D,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,SAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,oBAAA,CAAqB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA2B;AAC3E,EAAA,uBACI7D,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,6GAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,eAAA,CAAgB,EAAE,GAAG,KAAA,EAAM,EAAqD;AACrF,EAAA,uBAAOA,eAAC6D,oBAAA,CAAsB,GAAA,EAAtB,EAA0B,WAAA,EAAU,mBAAA,EAAqB,GAAG,KAAA,EAAO,CAAA;AAC/E;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACI5D,eAAAA;AAAA,IAAC4D,oBAAA,CAAsB,UAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,2BAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACP,kYAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD7D,cAAAA,CAACQ,4BAAAA,EAAA,EAAiB,SAAA,EAAU,SAAA,EAAU,eAAY,MAAA,EAAO;AAAA;AAAA;AAAA,GAC7D;AAER;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACIR,cAAAA;AAAA,IAAC6D,oBAAA,CAAsB,UAAA;AAAA,IAAtB;AAAA,MACG,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qiBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AC5MA,IAAM,WAAA,GAAc,CAAC,KAAA,KAAkB;AACnC,EAAA,MAAM,QAAQ,CAAC,GAAA,EAAK,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAChD,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,OAAO,IAAA,IAAQ,IAAA,IAAQ,SAAA,GAAY,KAAA,CAAM,SAAS,CAAA,EAAG;AACjD,IAAA,IAAA,IAAQ,IAAA;AACR,IAAA,SAAA,EAAA;AAAA,EACJ;AAEA,EAAA,OAAO,CAAA,EAAG,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAChD,CAAA;AAEA,IAAM,eAAA,GAAkBxC,oBAA+C,MAAS,CAAA;AAEhF,IAAM,gBAAA,GAAmBtB,2BAAI,EAAA,EAAI;AAAA,EAC7B,QAAA,EAAU;AAAA,IACN,MAAA,EAAQ;AAAA,MACJ,OAAA,EAAS,cAAA;AAAA,MACT,MAAA,EAAQ;AAAA;AACZ,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,MAAA,EAAQ;AAAA;AAEhB,CAAC,CAAA;AAUM,IAAM,WAAW,CAAC;AAAA,EACrB,MAAA;AAAA,EACA,QAAA,GAAW,CAAA;AAAA,EACX,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAqB;AACjB,EAAA,MAAM,EAAE,YAAA,EAAc,aAAA,EAAe,YAAA,KAAiB+D,yBAAA,CAAY;AAAA,IAC9D,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA,EAAQ,CAAC,aAAA,EAAe,cAAA,EAAgB,KAAA,KAAU;AAC9C,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC3B,QAAA,MAAM,OAAA,GAAU,eAAe,EAAA,CAAG,CAAC,GAAG,MAAA,CAAO,EAAA,CAAG,CAAC,CAAA,EAAG,OAAA;AACpD,QAAA,OAAA,GAAU,IAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,MAChC;AACA,MAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC1B,QAAA,MAAA,GAAS,aAAA,EAAe,gBAAgB,KAAK,CAAA;AAAA,MACjD;AAAA,IACJ,CAAA;AAAA,IACA,GAAG;AAAA,GACN,CAAA;AAED,EAAA,uBACI9D,cAAAA;AAAA,IAAC,eAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MAEG,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,OAAA,EAAS,SAAS,QAAA,EAAS;AAAA,MACjD,QAAA,kBAAAC,eAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,WAAA,EAAU,UAAA;AAAA,UACV,eAAa,MAAA,IAAU,SAAA;AAAA,UACvB,SAAA,EAAW,EAAA;AAAA,YACP,qDAAA;AAAA,YACA,gBAAA,CAAiB,EAAE,MAAA,EAAQ,CAAA;AAAA,YAC3B,YAAA,IAAgB,uBAAA;AAAA,YAChB;AAAA,WACJ;AAAA,UACA,QAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,SAAA;AAAA,UACP,GAAG,YAAA,EAAa;AAAA,UACjB,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,OAAA,EAAA,EAAO,GAAG,aAAA,IAAiB,QAAA,EAAoB,CAAA;AAAA,YAC/C;AAAA;AAAA;AAAA;AACL,KAAA;AAAA,IAjBK,IAAA,CAAK,UAAU,GAAG;AAAA,GAkB3B;AAER;AAEA,IAAM,qBAAqB,MAAM;AAC7B,EAAA,MAAM,OAAA,GAAUsB,iBAAW,eAAe,CAAA;AAE1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACvE;AAEA,EAAA,OAAO,OAAA;AACX,CAAA;AAOA,IAAM,aAAA,GAAgB,CAAA;AAEf,IAAM,eAAA,GAAkB,CAAC,EAAE,QAAA,EAAU,WAAU,KAA4B;AAC9E,EAAA,MAAM,EAAE,GAAA,EAAI,GAAI,kBAAA,EAAmB;AAEnC,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,OAAO,QAAA;AAAA,EACX;AAEA,EAAA,uBACIrB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA,EACrE,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,SAAI,SAAA,EAAU,mFAAA,EACX,0BAAAA,cAAAA,CAAC+D,sBAAA,EAAA,EAAW,IAAA,EAAM,EAAA,EAAI,CAAA,EAC1B,CAAA;AAAA,oBACA/D,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0DAAA,EACR,QAAA,EAAA,GAAA,CAAI,MAAA,GAAS,aAAA,GACR,CAAA,EAAG,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA;AAAA,MACzB,GAAA,CAAI,MAAM,CAAA,EAAG,aAAa,EAAE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI;AAAA,KACtD,CAAA,KAAA,EAAQ,GAAA,CAAI,SAAS,aAAa,CAAA,KAAA,CAAA,GACnC,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,CAAE,MAAA,CAAO,IAAI,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,EACvE,CAAA;AAAA,oBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8DAA6D,QAAA,EAAA,mCAAA,EAE1E;AAAA,GAAA,EACJ,CAAA;AAER;AAOO,IAAM,kBAAA,GAAqB,CAAC,EAAE,QAAA,EAAU,WAAU,KAA+B;AACpF,EAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAQ,SAAS,OAAA,EAAS,QAAA,KAAa,kBAAA,EAAmB;AAEvE,EAAA,IAAI,GAAA,EAAK;AACL,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,OAAO,QAAA;AAAA,EACX;AAEA,EAAA,IAAI,OAAA,GAAU,EAAA;AAEd,EAAA,IAAI,MAAA,EAAQ;AACR,IAAA,OAAA,IAAW,UAAA;AACX,IAAA,OAAA,IAAW,IAAI,KAAK,UAAA,CAAW,IAAI,EAAE,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EACnE;AAEA,EAAA,IAAI,WAAW,OAAA,EAAS;AACpB,IAAA,OAAA,IAAW,YAAY,WAAA,CAAY,OAAO,CAAC,CAAA,KAAA,EAAQ,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA;AAAA,EAC3E,WAAW,OAAA,EAAS;AAChB,IAAA,OAAA,IAAW,CAAA,UAAA,EAAa,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA;AAAA,EAChD,WAAW,OAAA,EAAS;AAChB,IAAA,OAAA,IAAW,CAAA,WAAA,EAAc,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA;AAAA,EACjD;AAEA,EAAA,uBACIC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA,EACrE,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,SAAI,SAAA,EAAU,mFAAA,EACX,0BAAAA,cAAAA,CAAC+D,sBAAA,EAAA,EAAW,IAAA,EAAM,EAAA,EAAI,CAAA,EAC1B,CAAA;AAAA,oBACA9D,eAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uEAAA,EAAwE,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MACzE,QAAA,KAAa,IAAI,QAAA,GAAW;AAAA,KAAA,EACxC,CAAA;AAAA,oBACAD,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mEAAkE,QAAA,EAAA,kCAAA,EAE/E,CAAA;AAAA,IAEC,OAAA,oBACGC,eAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,qDAAA,EAAuD,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MAAQ;AAAA,KAAA,EAAC;AAAA,GAAA,EAErF,CAAA;AAER;ACxMA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACjE,EAAA,uBACID,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,6HAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACvE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA;AAAA,MACnE,GAAG;AAAA;AAAA,GACR;AAER;AAEA,IAAM,kBAAA,GAAqBD,0BAAAA;AAAA,EACvB,6FAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,gBAAA;AAAA,QACT,IAAA,EAAM;AAAA;AACV,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS;AAAA;AACb;AAER,CAAA;AAEA,SAAS,UAAA,CAAW;AAAA,EAChB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACP,CAAA,EAA0E;AACtE,EAAA,uBACIC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,YAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAW,EAAA,CAAG,kBAAA,CAAmB,EAAE,OAAA,EAAS,SAAA,EAAW,CAAC,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACtE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oDAAA,EAAsD,SAAS,CAAA;AAAA,MAC5E,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8B;AAC1E,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,yGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,iFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACpFA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAC/D,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,iGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAqC;AAC9E,EAAA,uBACIA,cAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,WAAA,EAAY,YAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC9B,GAAG;AAAA;AAAA,GACR;AAER;AAEA,IAAM,YAAA,GAAeD,0BAAAA;AAAA,EACjB,6OAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,qCAAA;AAAA,QACT,OAAA,EAAS,sBAAA;AAAA,QACT,KAAA,EAAO,kDAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACjB;AAAA,MACA,IAAA,EAAM;AAAA,QACF,OAAA,EAAS,qBAAA;AAAA,QACT,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACR,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEA,SAAS,IAAA,CAAK;AAAA,EACV,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACP,CAAA,EAAsF;AAClF,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUK,YAAAA,CAAK,IAAA,GAAO,KAAA;AACnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,MAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,YAAA,CAAa,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,IAAM,iBAAA,GAAoBD,0BAAAA;AAAA,EACtB,gMAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,gBAAA;AAAA,QACT,IAAA,EAAM,sCAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACX,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS;AAAA;AACb;AAER,CAAA;AAEA,SAAS,SAAA,CAAU;AAAA,EACf,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACP,CAAA,EAAmE;AAC/D,EAAA,uBACIC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,YAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAW,EAAA,CAAG,iBAAA,CAAkB,EAAE,OAAA,EAAS,SAAA,EAAW,CAAC,CAAA;AAAA,MACtD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAC/D,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAwB;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,oIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AACjE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oDAAA,EAAsD,SAAS,CAAA;AAAA,MAC5E,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAA0B;AAChE,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oDAAA,EAAsD,SAAS,CAAA;AAAA,MAC5E,GAAG;AAAA;AAAA,GACR;AAER;ACvKA,SAAS,UAAA,CAAW;AAAA,EAChB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAoD;AAChD,EAAA,uBACIA,cAAAA;AAAA,IAACgE,kBAAA,CAAoB,IAAA;AAAA,IAApB;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA;AAAA,MAC3C,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAoD;AAChD,EAAA,uBACIhE,cAAAA;AAAA,IAACgE,kBAAA,CAAoB,IAAA;AAAA,IAApB;AAAA,MACG,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,skBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAhE,cAAAA;AAAA,QAACgE,kBAAA,CAAoB,SAAA;AAAA,QAApB;AAAA,UACG,WAAA,EAAU,uBAAA;AAAA,UACV,SAAA,EAAU,yCAAA;AAAA,UACV,QAAA,kBAAAhE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qHAAA,EAAsH;AAAA;AAAA;AAC1I;AAAA,GACJ;AAER;AC5BA,IAAM,YAAA,GAAe;AAAA,EACjB,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAMA,IAAM,eAAA,GAAkBD,2BAAI,uBAAA,EAAyB;AAAA,EACjD,QAAA,EAAU;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,cAAA;AAAA,MACT,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,uBAAA;AAAA,MACP,WAAA,EAAa,kBAAA;AAAA,MACb,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEf,CAAC;AAKD,SAAS,QAAQ,EAAE,SAAA,EAAW,MAAM,KAAA,EAAO,GAAG,OAAM,EAAiB;AACjE,EAAA,uBACIC,cAAAA;AAAA,IAACkD,uBAAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,SAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,GAAG,eAAA,CAAgB,EAAE,MAAM,KAAA,EAAO,GAAG,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA,GACR;AAER;AAMA,IAAM,qBAAA,GAAwBnD,2BAAI,uBAAA,EAAyB;AAAA,EACvD,QAAA,EAAU;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,cAAA;AAAA,MACT,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,uBAAA;AAAA,MACP,WAAA,EAAa,kBAAA;AAAA,MACb,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEf,CAAC;AAOD,SAAS,cAAc,EAAE,SAAA,EAAW,MAAM,KAAA,EAAO,GAAG,OAAM,EAAuB;AAC7E,EAAA,uBACIC,cAAAA;AAAA,IAACiE,sBAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,GAAG,qBAAA,CAAsB,EAAE,MAAM,KAAA,EAAO,GAAG,SAAS,CAAA;AAAA,MAC9D,GAAG;AAAA;AAAA,GACR;AAER;AAMA,IAAM,mBAAA,GAAsBlE,2BAAI,mBAAA,EAAqB;AAAA,EACjD,QAAA,EAAU;AAAA,IACN,IAAA,EAAM;AAAA,MACF,EAAA,EAAI,6BAAA;AAAA,MACJ,EAAA,EAAI,2BAAA;AAAA,MACJ,EAAA,EAAI,4BAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACR;AAAA,IACA,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,cAAA;AAAA,MACT,OAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAO,uBAAA;AAAA,MACP,WAAA,EAAa,kBAAA;AAAA,MACb,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEf,CAAC;AAMD,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,IAAA,EAAM,OAAM,EAAqB;AAC/D,EAAA,uBACIE,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,cAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,GAAG,mBAAA,CAAoB,EAAE,MAAM,KAAA,EAAO,GAAG,SAAS,CAAA;AAAA,MAC5D,QAAA,EAAA;AAAA,QAAA,CAAC,GAAG,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,sBACZD,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEG,SAAA,EAAU,yBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACH,SAAA,EAAW,mCAAA;AAAA,cACX,cAAA,EAAgB,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,CAAA;AAAA;AAC9B,WAAA;AAAA,UALK;AAAA,SAOZ,CAAA;AAAA,wBACDA,eAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,EAKZ;AAAA;AAAA;AAAA,GACA;AAER;AC3IA,IAAMkE,eAAAA,GAAiBnE,0BAAAA;AAAA,EACnB,6lBAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,wDAAA;AAAA,QACT,OAAA,EACI,kKAAA;AAAA,QACJ,SAAA,EACI,gLAAA;AAAA,QACJ,KAAA,EAAO,kHAAA;AAAA,QACP,WAAA,EACI,6NAAA;AAAA,QACJ,IAAA,EAAM;AAAA,OAEV;AAAA,MACA,IAAA,EAAM;AAAA,QACF,OAAA,EACI,wFAAA;AAAA,QACJ,EAAA,EAAI,iIAAA;AAAA,QACJ,EAAA,EAAI,kFAAA;AAAA,QACJ,EAAA,EAAI,qFAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,6CAAA;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW;AAAA;AACf,KACJ;AAAA,IACA,eAAA,EAAiB;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACV;AAER,CAAA;AAEA,SAASoE,OAAAA,CAAO;AAAA,EACZ,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACP,CAAA,EAGO;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,GAAU/D,YAAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,uBACIJ,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,QAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAGkE,eAAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACR;AAER;AC1DA,SAASE,OAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAA4B;AACnE,EAAA,uBACIpE,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACG,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,4mBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACVA,SAASqE,OAAAA,CAAO,EAAE,GAAG,KAAA,EAAM,EAAgD;AACvE,EAAA,uBAAOrE,eAACoC,cAAAA,CAAgB,IAAA,EAAhB,EAAqB,WAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC/D;AAYA,SAASkC,YAAAA,CAAY,EAAE,GAAG,KAAA,EAAM,EAAiD;AAC7E,EAAA,uBAAOtE,eAACoC,cAAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACtE;AAEA,SAASmC,cAAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACItE,eAAAA;AAAA,IAACmC,cAAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACP,uxBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDpC,cAAAA,CAACoC,cAAAA,CAAgB,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EACzB,QAAA,kBAAApC,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB,SAAA,EAAU,oDAAmD,CAAA,EAClF;AAAA;AAAA;AAAA,GACJ;AAER;AAEA,SAASwD,cAAAA,CAAc;AAAA,EACnB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,cAAA;AAAA,EACX,KAAA,GAAQ,QAAA;AAAA,EACR,GAAG;AACP,CAAA,EAAmD;AAC/C,EAAA,uBACIxE,cAAAA,CAACoC,cAAAA,CAAgB,MAAA,EAAhB,EACG,QAAA,kBAAAnC,eAAAA;AAAA,IAACmC,cAAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,gBAAA;AAAA,MACV,sBAAoB,QAAA,KAAa,cAAA;AAAA,MACjC,SAAA,EAAW,EAAA;AAAA,QACP,0oBAAA;AAAA,QACA,aAAa,QAAA,IACT,iIAAA;AAAA,QACJ;AAAA,OACJ;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAApC,cAAAA,CAACyE,uBAAA,EAAqB,CAAA;AAAA,wBACtBzE,cAAAA;AAAA,UAACoC,cAAAA,CAAgB,QAAA;AAAA,UAAhB;AAAA,YACG,eAAA,EAAe,QAAA;AAAA,YACf,SAAA,EAAW,EAAA;AAAA,cACP,oJAAA;AAAA,cACA,aAAa,QAAA,IAAY;AAAA,aAC7B;AAAA,YACC;AAAA;AAAA,SACL;AAAA,wBACApC,cAAAA,CAAC0E,uBAAAA,EAAA,EAAuB;AAAA;AAAA;AAAA,GAC5B,EACJ,CAAA;AAER;AAYA,SAASC,WAAAA,CAAW;AAAA,EAChB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAgD;AAC5C,EAAA,uBACI1E,eAAAA;AAAA,IAACmC,cAAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qaAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAApC,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8EAAA,EACZ,QAAA,kBAAAA,eAACoC,cAAAA,CAAgB,aAAA,EAAhB,EACG,QAAA,kBAAApC,eAACqC,qBAAAA,EAAA,EAAU,SAAA,EAAU,qBAAA,EAAsB,GAC/C,CAAA,EACJ,CAAA;AAAA,wBACArC,cAAAA,CAACoC,cAAAA,CAAgB,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AAAA,GACxC;AAER;AAeA,SAASqC,qBAAAA,CAAqB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA0D;AACtD,EAAA,uBACIzE,cAAAA;AAAA,IAACoC,cAAAA,CAAgB,cAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,2GAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApC,cAAAA,CAACsC,yBAAAA,EAAA,EAAc;AAAA;AAAA,GACnB;AAER;AAEA,SAASoC,uBAAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACI1E,cAAAA;AAAA,IAACoC,cAAAA,CAAgB,gBAAA;AAAA,IAAhB;AAAA,MACG,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,2GAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAApC,cAAAA,CAACgB,2BAAAA,EAAA,EAAgB;AAAA;AAAA,GACrB;AAER;AC5HA,IAAM,kBAAA,GAAqBK,oBAAmD,MAAS,CAAA;AAEhF,IAAM,iBAAiB,MAAM;AAChC,EAAA,MAAM,OAAA,GAAUC,iBAAW,kBAAkB,CAAA;AAE7C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC9E;AAEA,EAAA,OAAO,OAAA;AACX;AAQO,IAAM,cAAc,CAAC;AAAA,EACxB,KAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAwB;AACpB,EAAA,MAAM,YAAY,KAAA,KAAU,MAAA,GAAYsD,uBAAM,KAAK,CAAA,GAAIA,uBAAM,YAAY,CAAA;AAEzE,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,IAAIzD,cAAAA,CAAS,SAAA,CAAU,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,IAAIA,cAAAA,CAAS,SAAA,CAAU,aAAa,CAAA;AACpE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,IAAIA,cAAAA,CAAS,SAAA,CAAU,WAAW,CAAA;AAChE,EAAA,MAAM,CAAC,OAAO,QAAQ,CAAA,GAAIA,eAAS,SAAA,CAAU,KAAA,KAAU,GAAG,CAAA;AAC1D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,WAAA,GAAcF,aAAO,QAAQ,CAAA;AACnC,EAAA,MAAM,OAAA,GAAUA,aAAO,KAAK,CAAA;AAC5B,EAAAC,gBAAU,MAAM;AACZ,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EAC1B,CAAC,CAAA;AAGD,EAAAA,gBAAU,MAAM;AACZ,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,MAAM,KAAA,GAAQ0D,uBAAM,KAAK,CAAA;AAEzB,MAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAClB,MAAA,aAAA,CAAc,KAAA,CAAM,aAAa,CAAA;AACjC,MAAA,YAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AAC9B,MAAA,QAAA,CAAS,KAAA,CAAM,KAAA,EAAM,GAAI,GAAG,CAAA;AAAA,IAChC;AAAA,EACJ,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAA1D,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AAClB,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,YAAY,OAAA,EAAS;AACrB,MAAA,MAAM,KAAA,GAAQ0D,uBAAM,GAAA,CAAI,GAAA,EAAK,YAAY,SAAS,CAAA,CAAE,KAAA,CAAM,KAAA,GAAQ,GAAG,CAAA;AACrE,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,EAAI,CAAE,KAAA,EAAM;AAE/B,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA,GAAQ,GAAG,CAAC,CAAA;AAAA,IAChE;AAAA,EACJ,GAAG,CAAC,GAAA,EAAK,UAAA,EAAY,SAAA,EAAW,KAAK,CAAC,CAAA;AAEtC,EAAA,uBACI5E,cAAAA;AAAA,IAAC,kBAAA,CAAmB,QAAA;AAAA,IAAnB;AAAA,MACG,KAAA,EAAO;AAAA,QACH,GAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA;AAAA,QACA,aAAA;AAAA,QACA,YAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,+BAAA,EAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAAA;AAAA,GAC/E;AAER;AAIO,IAAM,uBAAuB6E,UAAA,CAAK,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAiC;AAC7F,EAAA,MAAM,YAAA,GAAe5D,aAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIE,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,EAAE,GAAA,EAAK,aAAA,EAAe,YAAA,KAAiB,cAAA,EAAe;AAE5D,EAAA,MAAM,kBAAA,GAAqBsB,cAAQ,MAAM;AACrC,IAAA,OAAO,CAAA;AAAA;AAAA,gBAAA,EAEG,GAAG,CAAA,YAAA,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,iBAAA,GAAoBrB,iBAAAA;AAAA,IACtB,CAAC,KAAA,KAAwB;AACrB,MAAA,IAAI,EAAE,UAAA,IAAc,YAAA,CAAa,OAAA,CAAA,EAAU;AACvC,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,OAAA,CAAQ,qBAAA,EAAsB;AACxD,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,CAAC,CAAA;AAC3E,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAC3E,MAAA,YAAA,CAAa,CAAC,CAAA;AACd,MAAA,YAAA,CAAa,CAAC,CAAA;AACd,MAAA,aAAA,CAAc,IAAI,GAAG,CAAA;AACrB,MAAA,MAAM,eAAe,CAAA,GAAI,IAAA,GAAO,GAAA,GAAM,EAAA,GAAK,MAAM,CAAA,GAAI,CAAA,CAAA;AACrD,MAAA,MAAM,SAAA,GAAY,gBAAgB,CAAA,GAAI,CAAA,CAAA;AAEtC,MAAA,YAAA,CAAa,SAAS,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,aAAA,EAAe,YAAY;AAAA,GAC5C;AAEA,EAAAF,gBAAU,MAAM;AACZ,IAAA,MAAM,eAAA,GAAkB,MAAM,aAAA,CAAc,KAAK,CAAA;AAEjD,IAAA,IAAI,UAAA,EAAY;AACZ,MAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,iBAAiB,CAAA;AACxD,MAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,eAAe,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,MAAM;AACT,MAAA,MAAA,CAAO,mBAAA,CAAoB,eAAe,iBAAiB,CAAA;AAC3D,MAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,eAAe,CAAA;AAAA,IAC3D,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,UAAA,EAAY,iBAAiB,CAAC,CAAA;AAElC,EAAA,uBACIlB,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,MACtE,aAAA,EAAe,CAAC,CAAA,KAAM;AAClB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,aAAA,CAAc,IAAI,CAAA;AAClB,QAAA,iBAAA,CAAkB,EAAE,WAAW,CAAA;AAAA,MACnC,CAAA;AAAA,MACA,GAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAO;AAAA,QACH,UAAA,EAAY;AAAA,OAChB;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,SAAA,EAAU,2GAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACH,IAAA,EAAM,CAAA,EAAG,SAAA,GAAY,GAAG,CAAA,CAAA,CAAA;AAAA,YACxB,GAAA,EAAK,CAAA,EAAG,SAAA,GAAY,GAAG,CAAA,CAAA,CAAA;AAAA,YACvB,SAAA,EAAW;AAAA;AACf;AAAA;AACJ;AAAA,GACJ;AAER,CAAC;AAED,oBAAA,CAAqB,WAAA,GAAc,sBAAA;AAI5B,IAAM,iBAAiB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAA2B;AAC5E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAO,GAAI,cAAA,EAAe;AAEvC,EAAA,uBACIC,eAAAA;AAAA,IAAC6E,cAAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,MAC9D,GAAA,EAAK,GAAA;AAAA,MACL,eAAe,CAAC,CAACC,IAAG,CAAA,KAAM,OAAOA,IAAG,CAAA;AAAA,MACpC,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,CAAC,GAAG,CAAA;AAAA,MACV,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA/E,cAAAA,CAAC8E,cAAAA,CAAO,KAAA,EAAP,EAAa,SAAA,EAAU,kIAAA,EACpB,QAAA,kBAAA9E,cAAAA,CAAC8E,cAAAA,CAAO,KAAA,EAAP,EAAa,SAAA,EAAU,mBAAkB,CAAA,EAC9C,CAAA;AAAA,wBACA9E,cAAAA,CAAC8E,cAAAA,CAAO,KAAA,EAAP,EAAa,WAAU,qNAAA,EAAsN;AAAA;AAAA;AAAA,GAClP;AAER;AAIO,IAAM,mBAAmB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAA6B;AAChF,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,KAAK,UAAA,EAAY,SAAA,KAAc,cAAA,EAAe;AACvE,EAAA,MAAM,aAAaF,sBAAA,CAAM,GAAA,CAAI,KAAK,UAAA,EAAY,SAAS,EAAE,GAAA,EAAI;AAE7D,EAAA,uBACI3E,eAAAA;AAAA,IAAC6E,cAAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,MAC9D,GAAA,EAAK,GAAA;AAAA,MACL,eAAe,CAAC,CAACE,MAAK,CAAA,KAAM,SAASA,MAAK,CAAA;AAAA,MAC1C,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,CAAC,KAAK,CAAA;AAAA,MACZ,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAA/E,eAAAA;AAAA,UAAC6E,cAAAA,CAAO,KAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,8CAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACH,UAAA,EACI;AAAA,aACR;AAAA,YACA,QAAA,EAAA;AAAA,8BAAA9E,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACG,SAAA,EAAU,+BAAA;AAAA,kBACV,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,uCAAA,EAA0C,UAAU,CAAA,CAAA,CAAA;AAAI;AAAA,eACjF;AAAA,8BACAA,cAAAA,CAAC8E,cAAAA,CAAO,KAAA,EAAP,EAAa,WAAU,6CAAA,EAA8C;AAAA;AAAA;AAAA,SAC1E;AAAA,wBACA9E,cAAAA;AAAA,UAAC8E,cAAAA,CAAO,KAAA;AAAA,UAAP;AAAA,YACG,SAAA,EAAU,uMAAA;AAAA,YACV,KAAA,EAAO,EAAE,eAAA,EAAiB,UAAA;AAAW;AAAA;AACzC;AAAA;AAAA,GACJ;AAER;AAIO,IAAM,wBAAwB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAAkC;AAC1F,EAAA,MAAM,EAAE,MAAA,EAAQ,aAAA,EAAe,YAAA,EAAc,QAAA,KAAa,cAAA,EAAe;AAEzE,EAAA,MAAM,mBAAmB,YAAY;AACjC,IAAA,IAAI;AAEA,MAAA,MAAM,UAAA,GAAa,IAAI,UAAA,EAAW;AAClC,MAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,IAAA,EAAK;AACrC,MAAA,MAAM,KAAA,GAAQF,sBAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AAClC,MAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAC,IAAI,KAAA,CAAM,GAAA,GAAM,KAAA,EAAM;AAEpC,MAAA,MAAA,CAAO,CAAC,CAAA;AACR,MAAA,aAAA,CAAc,CAAC,CAAA;AACf,MAAA,YAAA,CAAa,CAAC,CAAA;AACd,MAAA,QAAA,CAAS,GAAG,CAAA;AAAA,IAChB,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,KAAK,CAAA;AAAA,IAC7C;AAAA,EACJ,CAAA;AAEA,EAAA,uBACI5E,cAAAA;AAAA,IAACmE,OAAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MACzD,OAAA,EAAS,gBAAA;AAAA,MACT,IAAA,EAAK,MAAA;AAAA,MACL,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAQ,SAAA;AAAA,MACP,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAnE,cAAAA,CAACiF,uBAAA,EAAA,EAAY,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA,GAC3B;AAER;AAIA,IAAM,OAAA,GAAU,CAAC,KAAA,EAAO,KAAK,CAAA;AAEtB,IAAM,iBAAA,GAAoB,CAAC,EAAE,GAAG,OAAM,KAA8B;AACvE,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,cAAA,EAAe;AAEzC,EAAA,uBACIhF,eAAAA,CAACoE,OAAAA,EAAA,EAAO,aAAA,EAAe,OAAA,EAAS,OAAO,IAAA,EACnC,QAAA,EAAA;AAAA,oBAAArE,cAAAA;AAAA,MAACuE,cAAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAU,oDAAA;AAAA,QACT,GAAG,KAAA;AAAA,QACJ,QAAA,kBAAAvE,cAAAA,CAACsE,YAAAA,EAAA,EAAY,aAAY,MAAA,EAAO;AAAA;AAAA,KACpC;AAAA,oBACAtE,eAACwE,cAAAA,EAAA,EACI,kBAAQ,GAAA,CAAI,CAAChD,4BACVxB,cAAAA;AAAA,MAAC2E,WAAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAU,oCAAA;AAAA,QAEV,KAAA,EAAOnD,OAAAA;AAAA,QACN,QAAA,EAAAA,QAAO,WAAA;AAAY,OAAA;AAAA,MAFfA;AAAA,KAIZ,CAAA,EACL;AAAA,GAAA,EACJ,CAAA;AAER;AAOA,IAAM,eAAA,GAAkB,CAAC,EAAE,KAAA,EAAO,UAAU,SAAA,EAAW,GAAG,OAAM,KAA4B;AACxF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,IAAIL,cAAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAE1D,EAAAD,gBAAU,MAAM;AACZ,IAAA,aAAA,CAAc,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA2C;AAC7D,IAAA,MAAM,GAAA,GAAM,EAAE,MAAA,CAAO,KAAA;AAErB,IAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,GAAG,CAAA,EAAG;AAE9B,IAAA,MAAM,GAAA,GAAM,WAAW,GAAG,CAAA;AAE1B,IAAA,IAAI,MAAM,GAAA,EAAK;AACX,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,QAAA,CAAS,GAAG,CAAA;AACZ,MAAA;AAAA,IACJ;AAEA,IAAA,aAAA,CAAc,GAAG,CAAA;AACjB,IAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG;AACb,MAAA,QAAA,CAAS,GAAG,CAAA;AAAA,IAChB;AAAA,EACJ,CAAA;AAEA,EAAA,uBACIjB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAACoE,MAAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAU,SAAA;AAAA,QACV,KAAA,EAAO,UAAA;AAAA,QACP,QAAA,EAAU,YAAA;AAAA,QACT,GAAG,KAAA;AAAA,QACJ,SAAA,EAAW,EAAA;AAAA,UACP,kLAAA;AAAA,UACA;AAAA;AACJ;AAAA,KACJ;AAAA,oBACApE,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2EAA0E,QAAA,EAAA,GAAA,EAE1F;AAAA,GAAA,EACJ,CAAA;AAER,CAAA;AAIO,IAAM,oBAAoB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAA8B;AAClF,EAAA,MAAM,EAAE,KAAK,UAAA,EAAY,SAAA,EAAW,OAAO,QAAA,EAAU,IAAA,KAAS,cAAA,EAAe;AAC7E,EAAA,MAAM,QAAQ4E,sBAAA,CAAM,GAAA,CAAI,KAAK,UAAA,EAAY,SAAA,EAAW,QAAQ,GAAG,CAAA;AAE/D,EAAA,IAAI,SAAS,KAAA,EAAO;AAChB,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,EAAI;AACtB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,MAAO,GAAG,CAAA,CAC1C,QAAA,CAAS,EAAE,CAAA,CACX,QAAA,CAAS,CAAA,EAAG,GAAG,EACf,WAAA,EAAY;AACjB,IAAA,MAAM,aAAa,KAAA,GAAQ,GAAA,GAAM,GAAG,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,GAAK,GAAA;AAEvD,IAAA,uBACI3E,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,EAAA;AAAA,UACP,gEAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,QAAA,EAAA;AAAA,0BAAAD,cAAAA;AAAA,YAACoE,MAAAA;AAAA,YAAA;AAAA,cACG,SAAA,EAAU,+CAAA;AAAA,cACV,QAAA,EAAQ,IAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO;AAAA;AAAA,WACX;AAAA,0BACApE,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,KAAA,EAAO,UAAU,QAAA,EAAU;AAAA;AAAA;AAAA,KACvD;AAAA,EAER;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAChB,IAAA,MAAM,GAAA,GAAM,KAAA,CACP,GAAA,EAAI,CACJ,KAAA,EAAM,CACN,GAAA,CAAI,CAAC,KAAA,KAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAErC,IAAA,uBACIA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,qBAAqB,SAAS,CAAA,EAAI,GAAG,KAAA,EACpD,QAAA,kBAAAA,cAAAA;AAAA,MAACoE,MAAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAU,yDAAA;AAAA,QACV,QAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,OAAO,CAAA,KAAA,EAAQ,GAAA,CAAI,KAAK,IAAI,CAAC,KAAK,KAAK,CAAA,EAAA,CAAA;AAAA,QACtC,GAAG;AAAA;AAAA,KACR,EACJ,CAAA;AAAA,EAER;AACA,EAAA,OAAO,IAAA;AACX;AAMO,IAAM,qBAAqB,CAAC,EAAE,QAAQ,SAAA,EAAW,GAAG,OAAM,KAA+B;AAC5F,EAAA,MAAM,EAAE,GAAA,EAAK,UAAA,EAAY,SAAA,EAAW,KAAA,EAAO,QAAQ,aAAA,EAAe,YAAA,EAAc,QAAA,EAAS,GACrF,cAAA,EAAe;AACnB,EAAA,MAAM,UAAA,GAAaQ,uBAAM,GAAA,CAAI,GAAA,EAAK,YAAY,SAAA,EAAW,KAAA,GAAQ,GAAG,CAAA,CAAE,GAAA,EAAI;AAE1E,EAAA,uBACI5E,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA,EAAI,GAAG,KAAA,EACxD,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,IAAA,MAAM,QAAA,GAAW4E,uBAAM,GAAG,CAAA,CAAE,KAAI,CAAE,WAAA,EAAY,KAAM,UAAA,CAAW,WAAA,EAAY;AAE3E,IAAA,uBACI5E,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEG,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACP,2DAAA;AAAA,UACA,iCAAA;AAAA,UACA,QAAA,IAAY;AAAA,SAChB;AAAA,QACA,KAAA,EAAO,EAAE,eAAA,EAAiB,GAAA,EAAI;AAAA,QAC9B,SAAS,MAAM;AACX,UAAA,MAAM,KAAA,GAAQ4E,uBAAM,GAAG,CAAA;AACvB,UAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAC,IAAI,KAAA,CAAM,GAAA,GAAM,KAAA,EAAM;AAEpC,UAAA,MAAA,CAAO,CAAC,CAAA;AACR,UAAA,aAAA,CAAc,CAAC,CAAA;AACf,UAAA,YAAA,CAAa,CAAC,CAAA;AACd,UAAA,QAAA,CAAS,GAAG,CAAA;AAAA,QAChB,CAAA;AAAA,QACA,YAAA,EAAY,GAAA;AAAA,QACZ,KAAA,EAAO;AAAA,OAAA;AAAA,MAlBF;AAAA,KAmBT;AAAA,EAER,CAAC,CAAA,EACL,CAAA;AAER;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;ACnajC,SAAS,UAAA,CAAW;AAAA,EAChB,IAAA,GAAO,QAAA;AAAA,EACP,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,aAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACJ,CAAA,EAAoB;AAChB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIzD,eAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,KAAA,GAAQsB,cAAQ,MAAM;AACxB,IAAA,IAAI,SAAS,OAAA,EAAS;AAClB,MAAA,MAAM,KAAA,GAAQ,QAAA;AACd,MAAA,IAAI,KAAA,EAAO,QAAQ,KAAA,EAAO,EAAA;AACtB,QAAA,OAAO,CAAA,EAAGjB,cAAAA,CAAO,KAAA,CAAM,IAAA,EAAM,aAAa,CAAC,CAAA,QAAA,EAAMA,cAAAA,CAAO,KAAA,CAAM,EAAA,EAAI,aAAa,CAAC,CAAA,CAAA;AACpF,MAAA,IAAI,KAAA,EAAO,MAAM,OAAO,CAAA,EAAGA,eAAO,KAAA,CAAM,IAAA,EAAM,aAAa,CAAC,CAAA,cAAA,CAAA;AAC5D,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,MAAM,IAAA,GAAO,QAAA;AACb,IAAA,OAAO,IAAA,GAAOA,cAAAA,CAAO,IAAA,EAAM,aAAa,CAAA,GAAI,WAAA;AAAA,EAChD,CAAA,EAAG,CAAC,IAAA,EAAM,QAAA,EAAU,WAAW,CAAC,CAAA;AAEhC,EAAA,MAAM,QAAA,GACF,SAAS,OAAA,GACH,CAAC,CAAE,QAAA,EAAoC,IAAA,GACvC,CAAC,CAAE,QAAA;AAEb,EAAA,uBACIvB,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACnB,QAAA,kBAAAC,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,WAAA,EAAU,qBAAA;AAAA,QACV,OAAA,EAAQ,SAAA;AAAA,QACR,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACP,sCAAA;AAAA,UACA,CAAC,QAAA,IAAY,YAAA;AAAA,UACb;AAAA,SACJ;AAAA,QACA,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAACkF,wBAAA,EAAA,EAAa,SAAA,EAAU,iBAAA,EAAkB,CAAA;AAAA,0BAC1ClF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAY,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,KACtC,EACJ,CAAA;AAAA,oBACAA,cAAAA,CAAC,cAAA,EAAA,EAAe,WAAA,EAAU,qBAAA,EAAsB,SAAA,EAAU,YAAA,EAAa,KAAA,EAAM,OAAA,EACxE,QAAA,EAAA,IAAA,KAAS,OAAA,mBACNA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACI,GAAI;AAAA,UACD,IAAA,EAAM,OAAA;AAAA,UACN,QAAA;AAAA,UACA,QAAA,EAAU,CAAC,KAAA,KAAiC;AACxC,YAAC,WAAgD,KAAK,CAAA;AACtD,YAAA,IAAI,KAAA,EAAO,EAAA,EAAI,OAAA,CAAQ,KAAK,CAAA;AAAA,UAChC,CAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,UACA,cAAA,EAAgB,CAAA;AAAA,UAChB,YAAA,EAAc;AAAA;AAClB;AAAA,wBAGJA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACI,GAAI;AAAA,UACD,IAAA,EAAM,QAAA;AAAA,UACN,QAAA;AAAA,UACA,QAAA,EAAU,CAAC,IAAA,KAA2B;AAClC,YAAC,WAAiD,IAAI,CAAA;AACtD,YAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,UACjB,CAAA;AAAA,UACA,QAAA;AAAA,UACA,MAAA;AAAA,UACA,YAAA,EAAc;AAAA;AAClB;AAAA,KACJ,EAER;AAAA,GAAA,EACJ,CAAA;AAER;AC/DA,IAAM,IAAA,GAAO,CAAC,KAAA,qBACVC,eAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,YAAA,EAAW,MAAA;AAAA,IACX,IAAA,EAAK,KAAA;AAAA,IACL,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,KAAA;AAAA,IACP,OAAA,EAAQ,aAAA;AAAA,IACR,KAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAM,4BAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACJ,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,KAAA,EAAM,EAAA,EAAG,OAAA,EAAQ,KAAA,EAAM,KAAA,EAAM,CAAA,EAAE,KAAA,EAAM,CAAA;AAAA,sBACtEA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,KAAA,EAAM,IAAG,OAAA,EAAQ,IAAA,EAAK,OAAA,EAAQ,CAAA,EAAE,IAAA,EAAK;AAAA;AAAA;AACpD;AAOJ,IAAM,mBAAA,GAA2C;AAAA,EAC7C,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,YAAA,EAAa;AAAA,EACxC,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,WAAA,EAAY;AAAA,EACzC,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,UAAA;AAChC,CAAA;AAEA,IAAM,sBAAA,GAA0C;AAAA,EAC5C,EAAE,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,MAAA,EAAO;AAAA,EAC3B;AAAA,IACI,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,WAAA;AAAA,IACP,aAAA,EAAe;AAAA,MACX,EAAE,IAAA,EAAM,oBAAA,EAAsB,KAAA,EAAO,kBAAA,EAAmB;AAAA,MACxD,EAAE,IAAA,EAAM,oBAAA,EAAsB,KAAA,EAAO,SAAA,EAAU;AAAA,MAC/C,EAAE,IAAA,EAAM,qBAAA,EAAuB,KAAA,EAAO,UAAA;AAAW;AACrD,GACJ;AAAA,EACA,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,SAAA,EAAW,QAAQ,IAAA,EAAK;AAAA,EACnD,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAA;AAC5B,CAAA;AAMA,SAAS,WAAA,CAAY;AAAA,EACjB,IAAA;AAAA,EACA;AACJ,CAAA,EAGG;AACC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAImB,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,GAAA,GAAMF,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,WAAA,GAAc,CAAC,CAAC,IAAA,CAAK,aAAA,EAAe,MAAA;AAE1C,EAAA,uBACIhB,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAU,iCAAA;AAAA,MACV,YAAA,EAAc,MAAM,WAAA,IAAe,OAAA,CAAQ,IAAI,CAAA;AAAA,MAC/C,YAAA,EAAc,MAAM,WAAA,IAAe,OAAA,CAAQ,KAAK,CAAA;AAAA,MAChD,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACG,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAAA,YAC5B,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,cAAA,CAAA,CAAE,cAAA,EAAe;AACjB,cAAA,cAAA,GAAiB,KAAK,IAAI,CAAA;AAAA,YAC9B,CAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACP,oFAAA;AAAA,cACA,IAAA,CAAK,SACC,0IAAA,GACA;AAAA,aACV;AAAA,YACC,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,IAAA;AAAA,cACL,IAAA,CAAK,KAAA;AAAA,cACL,+BACGD,cAAAA;AAAA,gBAACgB,2BAAAA;AAAA,gBAAA;AAAA,kBACG,SAAA,EAAW,EAAA;AAAA,oBACP,0CAAA;AAAA,oBACA,IAAA,IAAQ;AAAA;AACZ;AAAA;AACJ;AAAA;AAAA,SAER;AAAA,QAGC,+BACGhB,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,yHAAA;AAAA,cACA,OACM,+CAAA,GACA;AAAA,aACV;AAAA,YACA,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACV,QAAA,EAAA,IAAA,CAAK,aAAA,CAAe,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAC5BC,eAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBAEG,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAAA,gBAC5B,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,kBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,kBAAA,cAAA,GAAiB,KAAK,IAAI,CAAA;AAC1B,kBAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,gBACjB,CAAA;AAAA,gBACA,SAAA,EAAU,uGAAA;AAAA,gBACT,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,IAAA;AAAA,kBACL,IAAA,CAAK;AAAA;AAAA,eAAA;AAAA,cATD;AAAA,aAWZ,CAAA,EACL;AAAA;AAAA;AACJ;AAAA;AAAA,GAER;AAER;AAYO,IAAM,MAAA,GAASkF,gBAAA;AAAA,EAClB,CACI;AAAA,IACI,SAAA;AAAA,IACA,IAAA,mBAAOnF,cAAAA,CAAC,IAAA,EAAA,EAAK,CAAA;AAAA,IACb,SAAA,GAAY,cAAA;AAAA,IACZ,YAAA,GAAe,mBAAA;AAAA,IACf,eAAA,GAAkB,sBAAA;AAAA,IAClB,iBAAA,GAAoB,CAAA;AAAA,IACpB,aAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,GAAG;AAAA,KAEP,GAAA,KACC;AACD,IAAA,MAAM,YAAA,GAAeiB,aAAoB,IAAI,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAWA,aAAuB,IAAI,CAAA;AAC5C,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIE,eAAS,KAAK,CAAA;AAC9C,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhD,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,aAAa,IAAI,aAAA,GAAgB,MAAA;AAClE,IAAA,MAAM,WAAA,GAAc,UAAA,GACd,UAAA,CAAW,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,IAAI,CAAA,CAAE,MAAA,GAClC,iBAAA;AAEN,IAAAD,gBAAU,MAAM;AACZ,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAkB;AAC/B,QAAA,IAAI,QAAA,CAAS,WAAW,CAAC,QAAA,CAAS,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAAG;AAClE,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACtB;AAAA,MACJ,CAAA;AACA,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,OAAO,CAAA;AAC9C,MAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,OAAO,CAAA;AAAA,IAClE,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,IAAAA,gBAAU,MAAM;AACZ,MAAA,MAAM,aAAa,MAAM;AACrB,QAAA,IAAI,aAAa,OAAA,EAAS;AACtB,UAAA,WAAA,CAAY,YAAA,CAAa,OAAA,CAAQ,WAAA,GAAc,GAAG,CAAA;AAAA,QACtD;AAAA,MACJ,CAAA;AACA,MAAA,UAAA,EAAW;AACX,MAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,UAAU,CAAA;AACxC,MAAA,IAAI,YAAA,CAAa,OAAA,EAAS,EAAA,CAAG,OAAA,CAAQ,aAAa,OAAO,CAAA;AACzD,MAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,IAC/B,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,WAAA,GAAcE,iBAAAA;AAAA,MAChB,CAAC,IAAA,KAA6B;AAC1B,QAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,QAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,aAAA,IAC9B,GAAA,MAAS,OAAA,GAAU,IAAA;AAAA,MAChC,CAAA;AAAA,MACA,CAAC,GAAG;AAAA,KACR;AAEA,IAAA,uBACInB,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,GAAA,EAAK,WAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACP,wEAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,SAAI,SAAA,EAAU,mDAAA,EACX,0BAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iFAAA,EAEX,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACX,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6DAAA,EACX,QAAA,EAAA,IAAA,EACL,CAAA;AAAA,cACC,CAAC,QAAA,oBACEA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAA0B,QAAA,EAAA,SAAA,EAAU;AAAA,aAAA,EAE5D,CAAA;AAAA,YAGC,CAAC,QAAA,oBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACX,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC4D,sBAAAA,EAAA,EAAW,SAAA,EAAU,gGAAA,EAAiG,CAAA;AAAA,8BACvH5D,cAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAK,MAAA;AAAA,kBACL,WAAA,EAAY,mCAAA;AAAA,kBACZ,OAAA,EAAS,aAAA;AAAA,kBACT,SAAA,EAAU;AAAA;AAAA;AACd,aAAA,EACJ,CAAA;AAAA,4BAIJA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACV,0BAAgB,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACxBA,cAAAA,CAAC,WAAA,EAAA,EAAoB,MAAY,cAAA,EAAA,EAAf,CAA+C,CACpE,CAAA,EACL;AAAA,WAAA,EACJ,CAAA,EACJ,CAAA;AAAA,0BAEAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDACX,QAAA,kBAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACX,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACV,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACrBC,eAAAA,CAACI,cAAAA,EAAA,EACI,QAAA,EAAA;AAAA,cAAA,CAAA,GAAI,qBACDL,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAA+B,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,8BAEpDA,cAAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAAA,kBAC5B,SAAA,EAAU,uEAAA;AAAA,kBACT,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACV,aAAA,EAAA,EARW,CASf,CACH,CAAA,EACL,CAAA;AAAA,4BAEAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACX,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,EAAU,WAAU,UAAA,EAC1B,QAAA,EAAA;AAAA,gCAAAA,eAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACG,IAAA,EAAK,QAAA;AAAA,oBACL,SAAS,MAAM,UAAA,IAAc,aAAa,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,oBACnD,SAAA,EAAU,yJAAA;AAAA,oBACV,QAAA,EAAA;AAAA,sCAAAD,cAAAA,CAACoF,oBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,sBAC9B,cAAc,CAAA,oBACXpF,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gEAAA,EAAiE;AAAA;AAAA;AAAA,iBAEzF;AAAA,gBACC,8BACGC,eAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACG,SAAA,EAAW,EAAA;AAAA,sBACP,sIAAA;AAAA,sBACA,YACM,+CAAA,GACA;AAAA,qBACV;AAAA,oBACA,QAAA,EAAA;AAAA,sCAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACX,QAAA,kBAAAA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,eAAA,EAAa,CAAA,EACtD,CAAA;AAAA,sCACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0BAAA,EACV,QAAA,EAAA,UAAA,CAAW,WAAW,CAAA,mBACnBA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uDAAsD,QAAA,EAAA,kBAAA,EAEnE,CAAA,GAEA,WAAW,GAAA,CAAI,CAAC,sBACZC,eAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BAEG,IAAA,EAAK,QAAA;AAAA,0BACL,SAAS,MAAM;AACX,4BAAA,mBAAA,GAAsB,EAAE,EAAE,CAAA;AAC1B,4BAAA,YAAA,CAAa,KAAK,CAAA;AAAA,0BACtB,CAAA;AAAA,0BACA,SAAA,EAAW,EAAA;AAAA,4BACP,oFAAA;AAAA,4BACA,CAAC,EAAE,IAAA,IAAQ;AAAA,2BACf;AAAA,0BACA,QAAA,EAAA;AAAA,4CAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACX,QAAA,EAAA;AAAA,8CAAAD,cAAAA;AAAA,gCAAC,GAAA;AAAA,gCAAA;AAAA,kCACG,SAAA,EAAW,EAAA;AAAA,oCACP,SAAA;AAAA,oCACA,CAAC,EAAE,IAAA,IAAQ;AAAA,mCACf;AAAA,kCACC,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA,+BACP;AAAA,8BACC,CAAA,CAAE,+BACCA,cAAAA,CAAC,OAAE,SAAA,EAAU,+CAAA,EACR,YAAE,WAAA,EACP,CAAA;AAAA,8BAEH,CAAA,CAAE,6BACCA,cAAAA,CAAC,OAAE,SAAA,EAAU,oCAAA,EACR,YAAE,SAAA,EACP;AAAA,6BAAA,EAER,CAAA;AAAA,4BACC,CAAC,CAAA,CAAE,IAAA,oBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kDAAA,EAAmD;AAAA;AAAA,yBAAA;AAAA,wBA9BlE,CAAA,CAAE;AAAA,uBAiCd,CAAA,EAET;AAAA;AAAA;AAAA;AACJ,eAAA,EAER,CAAA;AAAA,8BACAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,WAAA;AAAA,kBACT,SAAA,EAAU,gJAAA;AAAA,kBACV,QAAA,kBAAAA,cAAAA,CAACqF,0BAAA,EAAA,EAAe,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,eACzC;AAAA,cAAA,CACE,SAAA,IAAa,mCACXrF,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,aAAA;AAAA,kBACT,SAAA,EAAU,kCAAA;AAAA,kBACV,QAAA,kBAAAC,eAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EACR,QAAA,EAAA;AAAA,oBAAA,SAAA,oBAAaD,cAAAA,CAAC,WAAA,EAAA,EAAY,KAAK,SAAA,EAAW,GAAA,EAAK,kBAAkB,aAAA,EAAe,CAAA;AAAA,oCACjFA,cAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,cAAA,EAAe;AAAA,mBAAA,EACpC;AAAA;AAAA;AACJ,aAAA,EAER;AAAA,WAAA,EACJ,CAAA,EACJ;AAAA;AAAA;AAAA,KACJ;AAAA,EAER;AACJ;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AC5YrB,SAAS,cAAA,CAAe;AAAA,EACpB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,GAAG;AACP,CAAA,EAEG;AACC,EAAA,uBACIC,eAAAA;AAAA,IAACqF,sBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,iBAAA;AAAA,MACV,eAAA,EAAe,QAAA;AAAA,MACf,SAAA,EAAW,EAAA;AAAA,QACP,kFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,QAAA,oBAAYtF,cAAAA,CAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAAA,GACzC;AAER;AAEA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACIA,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,+DAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACItF,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,IAAM,0BAAA,GAA6BvF,0BAAAA;AAAA,EAC/B;AACJ;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC3B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA2D;AACvD,EAAA,uBACIE,eAAAA;AAAA,IAACqF,sBAAA,CAAwB,OAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA2B,EAAG,SAAS,SAAS,CAAA;AAAA,MAC7D,GAAG,KAAA;AAAA,MACH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAU,GAAA;AAAA,wBACXtF,cAAAA;AAAA,UAACgB,2BAAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAU,iKAAA;AAAA,YACV,aAAA,EAAY;AAAA;AAAA;AAChB;AAAA;AAAA,GACJ;AAER;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC3B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA2D;AACvD,EAAA,uBACIhB,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,OAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qiDAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA4D;AACxD,EAAA,uBACItF,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,2DAA2D,GAC1E,QAAA,kBAAAA,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,QAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,0BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,qYAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR,EACJ,CAAA;AAER;AAEA,SAAS,kBAAA,CAAmB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAAwD;AACpD,EAAA,uBACItF,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,IAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,gXAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;AAEA,SAAS,uBAAA,CAAwB;AAAA,EAC7B,SAAA;AAAA,EACA,GAAG;AACP,CAAA,EAA6D;AACzD,EAAA,uBACItF,cAAAA;AAAA,IAACsF,sBAAA,CAAwB,SAAA;AAAA,IAAxB;AAAA,MACG,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,4LAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,kBAAAtF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EAAyE;AAAA;AAAA,GAC5F;AAER;AClIA,SAAS,eAAA,CAAgB,SAAiB,UAAA,EAA6B;AACnE,EAAA,IAAI,OAAA,KAAY,KAAK,OAAO,IAAA;AAC5B,EAAA,IAAI,OAAA,KAAY,YAAY,OAAO,IAAA;AACnC,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AACtC,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA;AACtC,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ,OAAO,KAAA;AACrD,EAAA,OAAO,YAAA,CAAa,KAAA,CAAM,CAAC,IAAA,EAAM,CAAA,KAAM,SAAS,GAAA,IAAO,IAAA,KAAS,SAAA,CAAU,CAAC,CAAC,CAAA;AAChF;AAEA,SAAS,UAAA,CAAW,eAA4B,UAAA,EAA6B;AACzE,EAAA,IAAI,aAAA,CAAc,GAAA,CAAI,UAAU,CAAA,EAAG,OAAO,IAAA;AAC1C,EAAA,KAAA,MAAW,WAAW,aAAA,EAAe;AACjC,IAAA,IAAI,eAAA,CAAgB,OAAA,EAAS,UAAU,CAAA,EAAG,OAAO,IAAA;AAAA,EACrD;AACA,EAAA,OAAO,KAAA;AACX;AAEA,IAAM,cAAA,GAAiBqB,oBAA+C,MAAS,CAAA;AAC/E,cAAA,CAAe,WAAA,GAAc,gBAAA;AAE7B,SAAS,eAAA,CAAgB,EAAE,QAAA,EAAU,WAAA,EAAY,EAAyB;AACtE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIF,cAAAA;AAAA,IACtC,MAAM,IAAI,GAAA,CAAI,WAAA,IAAe,EAAE;AAAA,GACnC;AAEA,EAAA,MAAM,GAAA,GAAMC,iBAAAA;AAAA,IACR,CAAC,KAAA,EAA0B,IAAA,GAAsB,KAAA,KAAmB;AAChE,MAAA,MAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AAClD,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAC9B,MAAA,IAAI,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,IAAA;AACnC,MAAA,IAAI,SAAS,KAAA,EAAO;AAChB,QAAA,OAAO,KAAK,KAAA,CAAM,CAAC,MAAM,UAAA,CAAW,aAAA,EAAe,CAAC,CAAC,CAAA;AAAA,MACzD;AACA,MAAA,OAAO,KAAK,IAAA,CAAK,CAAC,MAAM,UAAA,CAAW,aAAA,EAAe,CAAC,CAAC,CAAA;AAAA,IACxD,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAClB;AAEA,EAAA,MAAM,YAAA,GAAeA,iBAAAA,CAAY,CAAC,KAAA,KAAoB;AAClD,IAAA,gBAAA,CAAiB,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,cAAA,GAAiBA,kBAAY,MAAM;AACrC,IAAA,gBAAA,iBAAiB,IAAI,KAAK,CAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AASL,EAAA,MAAM,YAAYH,YAAAA,CAAO,WAAA,GAAc,YAAY,IAAA,CAAK,GAAG,IAAI,IAAI,CAAA;AACnE,EAAAC,gBAAU,MAAM;AACZ,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC/B,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA;AAChC,IAAA,IAAI,GAAA,KAAQ,UAAU,OAAA,EAAS;AAC/B,IAAA,SAAA,CAAU,OAAA,GAAU,GAAA;AACpB,IAAA,gBAAA,CAAiB,IAAI,GAAA,CAAI,WAAW,CAAC,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,KAAA,GAAQuB,aAAAA;AAAA,IACV,OAAO,EAAE,GAAA,EAAK,YAAA,EAAc,cAAA,EAAe,CAAA;AAAA,IAC3C,CAAC,GAAA,EAAK,YAAA,EAAc,cAAc;AAAA,GACtC;AAEA,EAAA,uBAAOzC,cAAAA,CAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,OAAe,QAAA,EAAS,CAAA;AAC5D;AAEA,SAAS,UAAA,GAAkC;AACvC,EAAA,MAAM,OAAA,GAAUsB,iBAAW,cAAc,CAAA;AACzC,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,OAAA;AACX;AAEA,SAAS,MAAA,CAAO,WAAA,EAAgC,IAAA,GAAsB,KAAA,EAAgB;AAClF,EAAA,MAAM,EAAE,GAAA,EAAI,GAAI,UAAA,EAAW;AAC3B,EAAA,OAAO,GAAA,CAAI,aAAa,IAAI,CAAA;AAChC;ACpFA,SAAS,GAAA,CAAI,EAAE,UAAA,EAAY,IAAA,GAAO,KAAA,EAAO,SAAS,KAAA,EAAO,QAAA,GAAW,IAAA,EAAM,QAAA,EAAS,EAAa;AAC5F,EAAA,MAAM,EAAE,GAAA,EAAI,GAAI,UAAA,EAAW;AAC3B,EAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,UAAA,EAAY,IAAI,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAO,MAAA,GAAS,CAAC,aAAA,GAAgB,aAAA;AAEvC,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAChC,IAAA,uBAAOtB,cAAAA,CAAAK,mBAAAA,EAAA,EAAG,QAAA,EAAA,QAAA,CAAS,IAAI,CAAA,EAAE,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,IAAA,mBAAOL,cAAAA,CAAAK,mBAAAA,EAAA,EAAG,QAAA,EAAS,CAAA,mBAAML,cAAAA,CAAAK,mBAAAA,EAAA,EAAG,QAAA,EAAA,QAAA,EAAS,CAAA;AAChD;AAEA,GAAA,CAAI,WAAA,GAAc,KAAA;AAGlB,SAAS,MAAA,CAAO,EAAE,UAAA,EAAY,IAAA,GAAO,OAAO,QAAA,GAAW,IAAA,EAAM,UAAS,EAAgB;AAClF,EAAA,uBACIL,eAAC,GAAA,EAAA,EAAI,UAAA,EAAwB,MAAY,MAAA,EAAM,IAAA,EAAC,UAC3C,QAAA,EACL,CAAA;AAER;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;ACpBrB,IAAM,iBAAiBqB,mBAAAA,CAAmC;AAAA,EACtD,IAAA,EAAM,IAAA;AAAA,EACN,SAAS,MAAM;AAAA,EAAC,CAAA;AAAA,EAChB,QAAA,EAAU;AACd,CAAC,CAAA;AAEM,SAAS,UAAA,GAAa;AACzB,EAAA,OAAOC,iBAAW,cAAc,CAAA;AACpC;AAYO,IAAM,eAAA,GAAkB6D,gBAAAA;AAAA,EAC3B,CACI,EAAE,WAAA,GAAc,IAAA,EAAM,IAAA,EAAM,cAAA,EAAgB,YAAA,EAAc,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EACxF,GAAA,KACC;AACD,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIhE,eAAS,WAAW,CAAA;AAC5D,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9C,IAAA,MAAM,YAAA,GAAeF,aAAuB,IAAI,CAAA;AAEhD,IAAA,MAAM,OAAO,cAAA,IAAkB,YAAA;AAC/B,IAAA,MAAM,OAAA,GAAUG,iBAAAA;AAAA,MACZ,CAAC,KAAA,KAAmB;AAChB,QAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,QAAA,YAAA,GAAe,KAAK,CAAA;AAAA,MACxB,CAAA;AAAA,MACA,CAAC,YAAY;AAAA,KACjB;AAEA,IAAAF,gBAAU,MAAM;AACZ,MAAA,MAAM,QAAQ,MAAM;AAChB,QAAA,MAAM,KAAK,YAAA,CAAa,OAAA;AACxB,QAAA,IAAI,EAAA,EAAI,WAAA,CAAY,EAAA,CAAG,WAAA,GAAc,GAAG,CAAA;AAAA,MAC5C,CAAA;AACA,MAAA,KAAA,EAAM;AACN,MAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,KAAK,CAAA;AACnC,MAAA,IAAI,YAAA,CAAa,OAAA,EAAS,EAAA,CAAG,OAAA,CAAQ,aAAa,OAAO,CAAA;AACzD,MAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,IAC/B,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,uBACIlB,cAAAA,CAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAS,EACtD,QAAA,kBAAAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,GAAA,EAAK,CAAC,IAAA,KAAS;AACX,UAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,UAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,eAAA,IAC9B,GAAA,MAAS,OAAA,GAAU,IAAA;AAAA,QAChC,CAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,QAC5D,GAAG,KAAA;AAAA,QACH;AAAA;AAAA,KACL,EACJ,CAAA;AAAA,EAER;AACJ;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAWvB,IAAM,OAAA,GAAUmF,gBAAAA;AAAA,EACnB,CAAC,EAAE,WAAA,GAAc,WAAA,EAAa,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACnE,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,UAAA,EAAW;AAE5B,IAAA,uBACInF,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,GAAA;AAAA,QACA,YAAA,EAAY,OAAO,UAAA,GAAa,WAAA;AAAA,QAChC,SAAA,EAAW,EAAA;AAAA,UACP,kJAAA;AAAA,UACA,IAAA,GAAO,MAAA,GAAS,WAAA,KAAgB,MAAA,GAAS,MAAA,GAAS,qBAAA;AAAA,UAClD;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACH;AAAA;AAAA,KACL;AAAA,EAER;AACJ,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,SAAA;AAMf,IAAM,cAAA,GAAiBmF,iBAG5B,CAAC,EAAE,WAAW,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzC,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,UAAA,EAAW;AACrC,EAAA,uBACIlF,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MACnC,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,QAAA,OAAA,GAAU,CAAC,CAAA;AACX,QAAA,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,MACjB,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAACuF,gBAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBACzBvF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,gBAAA,EAAc;AAAA;AAAA;AAAA,GAC5C;AAER,CAAC;AACD,cAAA,CAAe,WAAA,GAAc,gBAAA;AAMtB,IAAM,aAAA,GAAgBmF,gBAAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACtBnF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGhB,CAAA;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAErB,IAAM,cAAA,GAAiBmF,iBAG5B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBnF,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,GAAA;AAAA,IACA,WAAA,EAAU,iBAAA;AAAA,IACV,SAAA,EAAW,EAAA;AAAA,MACP,kEAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH,CAAA;AACD,cAAA,CAAe,WAAA,GAAc,gBAAA;AAEtB,IAAM,aAAA,GAAgBmF,gBAAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACtBnF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGhB,CAAA;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAMrB,IAAM,YAAA,GAAemF,gBAAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACtBnF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA;AAGhB,CAAA;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;AAEpB,IAAM,iBAAA,GAAoBmF,iBAG/B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBnF,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACP,mFAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACC,GAAG;AAAA;AACR,CACH,CAAA;AACD,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAEzB,IAAM,mBAAA,GAAsBmF,iBAGjC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBnF,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACG,GAAA;AAAA,IACA,WAAA,EAAU,uBAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,IAC/C,GAAG;AAAA;AACR,CACH,CAAA;AACD,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AAM3B,IAAM,WAAA,GAAcmF,iBAGzB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBnF,cAAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACG,GAAA;AAAA,IACA,WAAA,EAAU,cAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA;AAAA,IACjE,GAAG;AAAA;AACR,CACH,CAAA;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAEnB,IAAM,eAAA,GAAkBmF,gBAAAA;AAAA,EAC3B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACtBnF,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG;AAAA;AAAA;AAGhB,CAAA;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAWvB,IAAM,iBAAA,GAAoBmF,gBAAAA;AAAA,EAC7B,CAAC,EAAE,OAAA,EAAS,QAAA,EAAU,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,UAAA,EAAW;AAC5B,IAAA,MAAM,IAAA,GAAO,OAAA,GAAU/E,YAAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,IAAA,uBACIJ,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,GAAA;AAAA,QACA,eAAa,QAAA,IAAY,MAAA;AAAA,QACzB,SAAA,EAAW,EAAA;AAAA,UACP,uHAAA;AAAA,UACA,yFAAA;AAAA,UACA,kGAAA;AAAA,UACA,CAAC,IAAA,IAAQ,qBAAA;AAAA,UACT;AAAA,SACJ;AAAA,QACC,GAAG,KAAA;AAAA,QACH,QAAA,EAAAwF,cAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAC,OAAO,CAAA,KAAM;AAClC,UAAA,IAAI,CAAA,KAAM,CAAA,IAAKC,oBAAA,CAAuC,KAAK,CAAA,EAAG;AAC1D,YAAA,OAAOC,mBAAa,KAAA,EAAO;AAAA,cACvB,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,KAAA,CAAM,MAAM,SAAS;AAAA,aACzD,CAAA;AAAA,UACL;AACA,UAAA,IAAI,CAAA,GAAI,CAAA,IAAK,CAAC,IAAA,EAAM,OAAO,IAAA;AAC3B,UAAA,OAAO,KAAA;AAAA,QACX,CAAC;AAAA;AAAA,KACL;AAAA,EAER;AACJ,CAAA;AACA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AC9PhC,IAAM,YAAA,GAA+B;AAAA,EACjC,EAAE,KAAA,EAAO,MAAA,EAAQ,sBAAM1F,cAAAA,CAAC2F,qBAAM,CAAA,EAAG;AAAA,EACjC,EAAE,KAAA,EAAO,WAAA,EAAa,sBAAM3F,cAAAA,CAAC4F,qBAAM,CAAA,EAAG;AAAA,EACtC,EAAE,KAAA,EAAO,SAAA,EAAW,sBAAM5F,cAAAA,CAAC6F,sBAAO,CAAA,EAAG;AAAA,EACrC,EAAE,KAAA,EAAO,MAAA,EAAQ,sBAAM7F,cAAAA,CAAC8F,mCAAoB,CAAA;AAChD,CAAA;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAU,EAA0B;AACxD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,UAAA,EAAW;AAC5B,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,uBACI7F,eAAAA,CAAAI,mBAAAA,EAAA,EACI,QAAA,EAAA;AAAA,oBAAAL,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oHACV,QAAA,EAAA,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EACvB,CAAA;AAAA,oBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAkC,QAAA,EAAA,SAAA,EAAU;AAAA,GAAA,EAChE,CAAA;AAER;AASO,SAAS,QAAA,CAAS;AAAA,EACrB,KAAA,GAAQ,YAAA;AAAA,EACR,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA,GAAY,cAAA;AAAA,EACZ,UAAA,GAAa,IAAA;AAAA,EACb,SAAA;AAAA,EACA,aAAA;AAAA,EACA;AACJ,CAAA,EAAkB;AACd,EAAA,uBACIC,eAAAA,CAAC,eAAA,EAAA,EAAgB,WAAW,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA,EAC/C,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAQ,WAAA,EAAY,MAAA,EACjB,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sCAAA,EACrB,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAQ,OAAA,EAAQ,WAAU,iBAAA,EAAkB,CAAA;AAAA,wBAC5DA,cAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAsB;AAAA,OAAA,EACxC,CAAA;AAAA,sBACAA,cAAAA,CAAC,cAAA,EAAA,EACG,QAAA,kBAAAA,eAAC,YAAA,EAAA,EACG,QAAA,kBAAAA,cAAAA,CAAC,mBAAA,EAAA,EACG,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EACI,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACjB,QAAA,MAAM,QAAA,mBACFA,cAAAA,CAAC,eAAA,EAAA,EACG,QAAA,kBAAAC,eAAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACG,QAAA,EAAU,UAAA,KAAe,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,MAAA;AAAA,YAC5C,SAAS,MAAM;AACX,cAAA,IAAA,CAAK,OAAA,IAAU;AACf,cAAA,WAAA,GAAc,KAAK,KAAK,CAAA;AAAA,YAC5B,CAAA;AAAA,YACC,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,IAAA;AAAA,8BACND,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA;AAAA;AAAA,SACtB,EAAA,EATkB,KAAK,KAU3B,CAAA;AAGJ,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,EAAY,OAAO,QAAA;AAE7B,QAAA,uBACIA,cAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YAEG,YAAY,IAAA,CAAK,UAAA;AAAA,YACjB,MAAM,IAAA,CAAK,cAAA;AAAA,YACV,QAAA,EAAA;AAAA,WAAA;AAAA,UAHI,IAAA,CAAK;AAAA,SAId;AAAA,MAER,CAAC,CAAA,EACL,CAAA,EACJ,CAAA,EACJ,CAAA,EACJ;AAAA,KAAA,EACJ,CAAA;AAAA,oBACAC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACV,QAAA,EAAA;AAAA,MAAA,UAAA,oBACGD,cAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,sDAAA,EACd,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,SAAA,EAAU,CAAA,EACrD,CAAA;AAAA,sBAEJA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,4BAAA,EAA8B,aAAa,GAAI,QAAA,EAAS;AAAA,KAAA,EAChF;AAAA,GAAA,EACJ,CAAA;AAER;AC/HA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACnE,EAAA,uBACIA,cAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACG,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACP,wJAAA;AAAA,QACA,mCAAA;AAAA,QACA,2EAAA;AAAA,QACA,8EAAA;AAAA,QACA,sFAAA;AAAA,QACA,+EAAA;AAAA,QAEA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACdA,IAAM,oBAAA,GAAuBqB,oBAAgD,IAAI,CAAA;;;ACK1E,IAAM,mBAAA,GAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","file":"main.cjs","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 { X } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport type { HTMLAttributes, ReactNode } from 'react';\n\nconst alertVariants = cva('relative w-full rounded-lg border border-l-[3px] p-4', {\n variants: {\n variant: {\n default: 'border-border border-l-border bg-card text-card-foreground',\n info: 'border-blue-200 border-l-blue-400 bg-blue-50 text-blue-700',\n success: 'border-emerald-200 border-l-emerald-400 bg-emerald-50 text-emerald-700',\n warning: 'border-amber-200 border-l-amber-400 bg-amber-50 text-amber-700',\n error: 'border-red-200 border-l-red-500 bg-red-50 text-red-700',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\ninterface AlertProps\n extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {\n icon?: ReactNode;\n onDismiss?: () => void;\n}\n\ntype AlertTitleProps = HTMLAttributes<HTMLHeadingElement>;\n\ntype AlertDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nfunction Alert({ className, variant, icon, onDismiss, children, ...props }: AlertProps) {\n return (\n <div\n data-slot='alert'\n data-variant={variant ?? 'default'}\n role='alert'\n className={cn(alertVariants({ variant }), className)}\n {...props}>\n <div className='flex items-start gap-3'>\n {icon && (\n <div data-slot='alert-icon' className='mt-0.5 shrink-0'>\n {icon}\n </div>\n )}\n <div data-slot='alert-content' className='min-w-0 flex-1'>\n {children}\n </div>\n {onDismiss && (\n <button\n type='button'\n aria-label='Dismiss'\n onClick={onDismiss}\n className='focus-visible:ring-ring -mt-1 -mr-1 ml-auto shrink-0 rounded p-1 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:outline-none'>\n <X className='size-4' />\n </button>\n )}\n </div>\n </div>\n );\n}\n\nfunction AlertTitle({ className, ...props }: AlertTitleProps) {\n return (\n <h5\n data-slot='alert-title'\n className={cn('mb-1 leading-tight font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: AlertDescriptionProps) {\n return (\n <p\n data-slot='alert-description'\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Avatar as AvatarPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst avatarVariants = cva('group/avatar relative flex shrink-0 overflow-hidden rounded-full', {\n variants: {\n size: {\n sm: 'size-6 text-[10px]',\n md: 'size-8 text-xs',\n lg: 'size-10 text-sm',\n xl: 'size-12 text-base',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nfunction Avatar({\n className,\n size = 'md',\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Root> & VariantProps<typeof avatarVariants>) {\n return (\n <AvatarPrimitive.Root\n data-slot='avatar'\n data-size={size}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot='avatar-image'\n className={cn('aspect-square size-full object-cover', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot='avatar-fallback'\n className={cn(\n 'bg-primary text-primary-foreground flex size-full items-center justify-center rounded-full font-medium uppercase',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='avatar-badge'\n className={cn(\n 'bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=md]/avatar:size-2.5 group-data-[size=md]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n 'group-data-[size=xl]/avatar:size-3.5 group-data-[size=xl]/avatar:[&>svg]:size-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='avatar-group'\n className={cn(\n 'group/avatar-group *:data-[slot=avatar]:ring-background flex -space-x-2 *:data-[slot=avatar]:ring-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='avatar-group-count'\n className={cn(\n 'bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-xs ring-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n avatarVariants,\n};\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-3xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n secondary: 'bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80',\n destructive:\n 'bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20',\n outline:\n 'border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground',\n ghost: 'hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import type { ComponentProps, HTMLAttributes } from 'react';\nimport { Badge } from '@/components/ui/Status/badge';\nimport { cn } from '@/lib/utils';\n\nexport type StatusProps = ComponentProps<typeof Badge> & {\n status: 'online' | 'offline' | 'maintenance' | 'degraded';\n};\n\nexport const Status = ({ className, status, ...props }: StatusProps) => (\n <Badge\n className={cn('flex items-center gap-2', 'group', status, className)}\n variant='outline'\n {...props}\n />\n);\n\nexport type StatusIndicatorProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusIndicator = ({ className, ...props }: StatusIndicatorProps) => (\n <span className={cn('relative flex h-2 w-2', className)} {...props}>\n <span\n className={cn(\n 'absolute inline-flex h-full w-full animate-ping rounded-full opacity-75',\n 'group-[.online]:bg-emerald-500',\n 'group-[.offline]:bg-red-500',\n 'group-[.maintenance]:bg-blue-500',\n 'group-[.degraded]:bg-amber-500',\n )}\n />\n <span\n className={cn(\n 'relative inline-flex h-2 w-2 rounded-full',\n 'group-[.online]:bg-emerald-500',\n 'group-[.offline]:bg-red-500',\n 'group-[.maintenance]:bg-blue-500',\n 'group-[.degraded]:bg-amber-500',\n )}\n />\n </span>\n);\n\nexport type StatusLabelProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const StatusLabel = ({ className, children, ...props }: StatusLabelProps) => (\n <span className={cn('text-muted-foreground', className)} {...props}>\n {children ?? (\n <>\n <span className='hidden group-[.online]:block'>Online</span>\n <span className='hidden group-[.offline]:block'>Offline</span>\n <span className='hidden group-[.maintenance]:block'>Maintenance</span>\n <span className='hidden group-[.degraded]:block'>Degraded</span>\n </>\n )}\n </span>\n);\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'group/badge inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',\n {\n variants: {\n variant: {\n default: 'bg-muted text-muted-foreground',\n info: 'bg-blue-100 text-blue-500',\n success: 'bg-green-100 text-green-800',\n warning: 'bg-yellow-200 text-yellow-900',\n error: 'bg-red-100 text-red-800',\n },\n size: {\n sm: 'h-4 text-xs px-1.5 py-0.5 rounded-md',\n md: 'h-5 text-xs px-2 py-0.5 rounded-3xl',\n lg: 'h-6 text-sm px-2.5 py-1.5 rounded-3xl',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'default',\n size = 'md',\n asChild = false,\n ...props\n}: ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n data-size={size}\n className={cn(badgeVariants({ variant, size }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import { type ComponentProps } from 'react';\nimport { Slot } from 'radix-ui';\nimport { ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\n/**\n * Root landmark for a breadcrumb trail. Renders a `<nav aria-label=\"breadcrumb\">`\n * and wraps a single {@link BreadcrumbList}.\n */\nfunction Breadcrumb({ className, ...props }: ComponentProps<'nav'>) {\n return (\n <nav aria-label='breadcrumb' data-slot='breadcrumb' className={cn(className)} {...props} />\n );\n}\n\n/**\n * Ordered list (`<ol>`) holding the trail. Lays the items out in a wrapping,\n * gapped flex row and sets the default `text-main-grey` color and `text-sm` scale.\n */\nfunction BreadcrumbList({ className, ...props }: ComponentProps<'ol'>) {\n return (\n <ol\n data-slot='breadcrumb-list'\n className={cn(\n 'text-main-grey flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * A single segment (`<li>`) of the trail. Wraps a {@link BreadcrumbLink},\n * {@link BreadcrumbPage}, or {@link BreadcrumbEllipsis}.\n */\nfunction BreadcrumbItem({ className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='breadcrumb-item'\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n );\n}\n\n/**\n * Navigable ancestor in the trail. Renders an `<a>` by default; pass `asChild`\n * to delegate to a router link (e.g. React Router / Next.js `Link`) while keeping\n * the hover and focus styles.\n *\n * @param asChild - Render the child element instead of an `<a>` (Radix `Slot`).\n */\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: ComponentProps<'a'> & {\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot='breadcrumb-link'\n className={cn(\n 'hover:text-main-blue-primary focus-visible:ring-ring rounded-sm transition-colors duration-150 outline-none focus-visible:ring-2 focus-visible:ring-offset-1',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * The current page — the last, non-interactive segment. Renders a `<span>` with\n * `aria-current=\"page\"` and emphasized `text-main-blue-primary` color.\n */\nfunction BreadcrumbPage({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='breadcrumb-page'\n role='link'\n aria-disabled='true'\n aria-current='page'\n className={cn('text-main-blue-primary font-medium', className)}\n {...props}\n />\n );\n}\n\n/**\n * Visual divider between items. Defaults to a `ChevronRight` icon; pass any node\n * as children to override it. Always `aria-hidden`, so overrides never reach\n * assistive tech.\n */\nfunction BreadcrumbSeparator({ children, className, ...props }: ComponentProps<'li'>) {\n return (\n <li\n data-slot='breadcrumb-separator'\n role='presentation'\n aria-hidden='true'\n className={cn('text-main-grey [&>svg]:size-3.5', className)}\n {...props}>\n {children ?? <ChevronRightIcon />}\n </li>\n );\n}\n\n/**\n * Truncation marker (`…`) that collapses hidden middle segments of a long trail.\n * Pair it with a `DropdownMenu` to make the collapsed segments navigable.\n */\nfunction BreadcrumbEllipsis({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='breadcrumb-ellipsis'\n role='presentation'\n aria-hidden='true'\n className={cn(\n 'text-main-grey flex size-5 items-center justify-center [&>svg]:size-4',\n className,\n )}\n {...props}>\n <MoreHorizontalIcon />\n <span className='sr-only'>More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","import { type ComponentProps, type MouseEvent } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport {LoaderCircle} from 'lucide-react'\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n 'group/button inline-flex shrink-0 items-center justify-center gap-2 rounded-lg border border-transparent bg-clip-padding text-sm font-semibold whitespace-nowrap transition-all duration-150 outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 data-[loading]:cursor-not-allowed data-[loading]:opacity-80 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'cursor-pointer bg-primary text-primary-foreground hover:bg-primary/80 focus-visible:ring-primary/30',\n secondary:\n 'cursor-pointer bg-secondary text-secondary-foreground hover:bg-[var(--color-orange-700)] focus-visible:ring-secondary/30',\n cancel: 'cursor-pointer bg-destructive text-secondary-foreground hover:bg-[var(--color-red-600)] focus-visible:ring-destructive/30',\n outline:\n ' border-2 border-foreground/50 bg-transparent text-muted-foreground hover:bg-foreground/50 hover:text-white',\n ghost: 'cursor-pointer bg-transparent text-muted-foreground hover:bg-foreground/10 hover:text-primary focus-visible:ring-ring/30 border-none',\n cancelGhost:\n 'cursor-pointer bg-destructive/10 text-red-600 hover:bg-destructive/15 hover:text-red-600 focus-visible:ring-ring/30',\n },\n size: {\n sm: 'h-8 px-3 text-xs',\n md: 'h-9 px-4 text-sm',\n lg: 'h-10 px-6 text-sm',\n 'icon-sm': 'size-8 rounded-full p-0',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n },\n);\n\n/**\n * Interactive button with 6 variants and 4 sizes. Use `asChild` to render as any element via Radix Slot.\n * When `isLoading` is true, a spinner is shown and clicks are blocked while keeping the not-allowed cursor.\n */\nfunction Button({\n className,\n variant = 'primary',\n size = 'md',\n asChild = false,\n isLoading = false,\n children,\n onClick,\n ...props\n}: ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n isLoading?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n if (isLoading) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n }\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n data-loading={isLoading || undefined}\n aria-busy={isLoading || undefined}\n className={cn(buttonVariants({ variant, size, className }))}\n onClick={handleClick}\n {...props}>\n {isLoading && <LoaderCircle size={16} className='animate-spin' aria-hidden='true' />}\n {children}\n </Comp>\n );\n}\n\nexport { Button, buttonVariants };\n","import { useEffect, useRef, type ComponentProps } from 'react';\nimport { DayPicker, getDefaultClassNames, type DayButton, type Locale } from 'react-day-picker';\n\nimport { cn } from '@/lib/utils';\nimport { Button, buttonVariants } from '@/components/ui/Button/button';\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from 'lucide-react';\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'dropdown',\n buttonVariant = 'ghost',\n locale,\n formatters,\n components,\n fromYear,\n toYear,\n ...props\n}: ComponentProps<typeof DayPicker> & {\n buttonVariant?: ComponentProps<typeof Button>['variant'];\n fromYear?: number;\n toYear?: number;\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'group/calendar bg-background p-3 font-sans [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className,\n )}\n captionLayout={captionLayout}\n startMonth={new Date(fromYear ?? 1900, 0)}\n endMonth={new Date(toYear ?? 2100, 11)}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(locale?.code, { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('relative flex flex-col gap-3 md:flex-row', defaultClassNames.months),\n month: cn('flex w-full flex-col gap-3', defaultClassNames.month),\n nav: cn(\n 'absolute inset-x-0 top-0 flex w-full items-center justify-between gap-2',\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex h-(--cell-size) w-full items-center justify-center px-(--cell-size) tracking-tight',\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n 'flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-semibold',\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n 'relative rounded-(--cell-radius)',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn('absolute inset-0 bg-popover opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'font-semibold select-none',\n captionLayout === 'label'\n ? 'text-sm'\n : 'flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground',\n defaultClassNames.caption_label,\n ),\n weekdays: cn('flex gap-1', defaultClassNames.weekdays),\n weekday: cn(\n 'flex-1 rounded-(--cell-radius) text-[0.75rem] font-semibold text-muted-foreground/70 select-none tracking-wide',\n defaultClassNames.weekday,\n ),\n week: cn('mt-2 flex w-full gap-1', defaultClassNames.week),\n week_number_header: cn(\n 'w-(--cell-size) select-none',\n defaultClassNames.week_number_header,\n ),\n week_number: cn(\n 'text-[0.75rem] text-muted-foreground/50 select-none',\n defaultClassNames.week_number,\n ),\n day: cn(\n 'group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)',\n props.showWeekNumber\n ? '[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)'\n : '[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)',\n defaultClassNames.day,\n ),\n range_start: cn(\n 'relative isolate z-0 rounded-l-md bg-primary/8 after:absolute after:inset-y-0 after:right-0 after:w-3 after:bg-primary/8',\n defaultClassNames.range_start,\n ),\n range_middle: cn('rounded-none bg-primary/8', defaultClassNames.range_middle),\n range_end: cn(\n 'relative isolate z-0 rounded-r-md bg-primary/8 after:absolute after:inset-y-0 after:left-0 after:w-3 after:bg-primary/8',\n defaultClassNames.range_end,\n ),\n today: cn('rounded-md bg-accent text-accent-foreground', defaultClassNames.today),\n outside: cn(\n 'text-muted-foreground/50 aria-selected:text-muted-foreground/50',\n defaultClassNames.outside,\n ),\n disabled: cn('text-muted-foreground/40 opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot='calendar'\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n );\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <ChevronLeftIcon className={cn('size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('size-4', className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...props} />;\n },\n DayButton: ({ ...props }) => <CalendarDayButton locale={locale} {...props} />,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className='flex size-(--cell-size) items-center justify-center text-center'>\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n locale,\n ...props\n}: ComponentProps<typeof DayButton> & { locale?: Partial<Locale> }) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant='ghost'\n size='icon-sm'\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'group-data-[focused=true]/day:ring-primary/40 data-[range-end=true]:!bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:!bg-primary/8 data-[range-middle=true]:text-foreground data-[range-start=true]:!bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:!bg-primary data-[selected-single=true]:text-primary-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 !rounded-md border-0 !bg-transparent leading-none font-normal transition-colors duration-150 group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:rounded-md group-data-[focused=true]/day:ring-[2px] hover:!bg-transparent data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[selected-single=true]:rounded-md [&>span]:text-xs [&>span]:font-medium [&>span]:opacity-75',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","import { Slot } from 'radix-ui';\nimport { addDays, format, isSameDay, isToday } from 'date-fns';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n type MouseEventHandler,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\n// Local controlled/uncontrolled state hook. Avoids coupling to the mangled\n// `useControllableState` export only reachable via `radix-ui/internal`.\nfunction useControllableState<T>({\n prop,\n defaultProp,\n onChange,\n}: {\n prop?: T;\n defaultProp?: T;\n onChange?: (value: T) => void;\n}): [T | undefined, (next: T) => void] {\n const [uncontrolled, setUncontrolled] = useState<T | undefined>(defaultProp);\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolled;\n\n const onChangeRef = useRef(onChange);\n useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n\n// Context for sharing state between components\ninterface MiniCalendarContextType {\n selectedDate: Date | null | undefined;\n onDateSelect: (date: Date) => void;\n startDate: Date;\n onNavigate: (direction: 'prev' | 'next') => void;\n days: number;\n}\n\nconst MiniCalendarContext = createContext<MiniCalendarContextType | null>(null);\n\nconst useMiniCalendar = () => {\n const context = useContext(MiniCalendarContext);\n\n if (!context) {\n throw new Error('MiniCalendar components must be used within MiniCalendar');\n }\n\n return context;\n};\n\n// Helper function to get array of consecutive dates\nconst getDays = (startDate: Date, count: number): Date[] => {\n const days: Date[] = [];\n for (let i = 0; i < count; i++) {\n days.push(addDays(startDate, i));\n }\n return days;\n};\n\n// Helper function to format date\nconst formatDate = (date: Date) => {\n const month = format(date, 'MMM');\n const day = format(date, 'd');\n\n return { month, day };\n};\n\nexport type MiniCalendarProps = HTMLAttributes<HTMLDivElement> & {\n value?: Date;\n defaultValue?: Date;\n onValueChange?: (date: Date | undefined) => void;\n startDate?: Date;\n defaultStartDate?: Date;\n onStartDateChange?: (date: Date | undefined) => void;\n days?: number;\n};\n\nexport const MiniCalendar = ({\n value,\n defaultValue,\n onValueChange,\n startDate,\n defaultStartDate = new Date(),\n onStartDateChange,\n days = 5,\n className,\n children,\n ...props\n}: MiniCalendarProps) => {\n const [selectedDate, setSelectedDate] = useControllableState<Date | undefined>({\n prop: value,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n\n const [currentStartDate, setCurrentStartDate] = useControllableState({\n prop: startDate,\n defaultProp: defaultStartDate,\n onChange: onStartDateChange,\n });\n\n const handleDateSelect = (date: Date) => {\n setSelectedDate(date);\n };\n\n const handleNavigate = (direction: 'prev' | 'next') => {\n const newStartDate = addDays(\n currentStartDate || new Date(),\n direction === 'next' ? days : -days,\n );\n setCurrentStartDate(newStartDate);\n };\n\n const contextValue: MiniCalendarContextType = {\n selectedDate: selectedDate || null,\n onDateSelect: handleDateSelect,\n startDate: currentStartDate || new Date(),\n onNavigate: handleNavigate,\n days,\n };\n\n return (\n <MiniCalendarContext.Provider value={contextValue}>\n <div\n className={cn('flex items-center gap-2 rounded-lg border p-2', className)}\n {...props}>\n {children}\n </div>\n </MiniCalendarContext.Provider>\n );\n};\n\nexport type MiniCalendarNavigationProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n direction: 'prev' | 'next';\n asChild?: boolean;\n};\n\nexport const MiniCalendarNavigation = ({\n direction,\n asChild = false,\n children,\n onClick,\n ...props\n}: MiniCalendarNavigationProps) => {\n const { onNavigate } = useMiniCalendar();\n const Icon = direction === 'prev' ? ChevronLeftIcon : ChevronRightIcon;\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n onNavigate(direction);\n onClick?.(event);\n };\n\n if (asChild) {\n return (\n <Slot.Root onClick={handleClick} {...props}>\n {children}\n </Slot.Root>\n );\n }\n\n return (\n <Button\n onClick={handleClick}\n size={asChild ? undefined : 'icon-sm'}\n type='button'\n variant={asChild ? undefined : 'ghost'}\n className={cn(asChild ? 'p-2' : 'p-2')}\n {...props}>\n {children ?? <Icon className='size-4' />}\n </Button>\n );\n};\n\nexport type MiniCalendarDaysProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n children: (date: Date) => ReactNode;\n};\n\nexport const MiniCalendarDays = ({ className, children, ...props }: MiniCalendarDaysProps) => {\n const { startDate, days: dayCount } = useMiniCalendar();\n const days = getDays(startDate, dayCount);\n\n return (\n <div className={cn('flex items-center gap-1', className)} {...props}>\n {days.map((date) => children(date))}\n </div>\n );\n};\n\nexport type MiniCalendarDayProps = ComponentProps<typeof Button> & {\n date: Date;\n};\n\nexport const MiniCalendarDay = ({ date, className, ...props }: MiniCalendarDayProps) => {\n const { selectedDate, onDateSelect } = useMiniCalendar();\n const { month, day } = formatDate(date);\n const isSelected = selectedDate && isSameDay(date, selectedDate);\n const isTodayDate = isToday(date);\n\n return (\n <Button\n className={cn(\n 'h-auto min-w-[3rem] flex-col gap-0 p-2 text-xs',\n isTodayDate && !isSelected && 'bg-primary/10 text-primary',\n className,\n )}\n onClick={() => onDateSelect(date)}\n size='sm'\n type='button'\n variant={isSelected ? 'primary' : 'ghost'}\n {...props}>\n <span\n className={cn(\n 'text-muted-foreground text-[10px] font-medium',\n isSelected && 'text-white',\n )}>\n {month}\n </span>\n <span className='text-sm font-semibold'>{day}</span>\n </Button>\n );\n};\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Card({\n className,\n size = 'default',\n ...props\n}: ComponentProps<'div'> & { size?: 'default' | 'sm' }) {\n return (\n <div\n data-slot='card'\n data-size={size}\n className={cn(\n 'group/card bg-card text-card-foreground ring-foreground/5 dark:ring-foreground/10 flex flex-col gap-6 overflow-hidden rounded-4xl py-6 text-sm shadow-md ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-4xl *:[img:last-child]:rounded-b-4xl',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-header'\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1.5 rounded-t-4xl px-6 group-data-[size=sm]/card:px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-action]:flex-row has-data-[slot=card-action]:items-start has-data-[slot=card-action]:justify-between has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-title'\n className={cn('font-heading text-primary text-lg font-bold', className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-description'\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-action'\n className={cn(\n 'col-start-2 row-span-2 row-start-1 self-start justify-self-end',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-content'\n className={cn('px-6 group-data-[size=sm]/card:px-4', className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='card-footer'\n className={cn(\n 'flex items-center rounded-b-4xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent };\n","import { createContext, useCallback, useContext, useEffect, useState, type ComponentProps, type KeyboardEvent } from 'react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: 'horizontal' | 'vertical';\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = useContext(CarouselContext);\n\n if (!context) {\n throw new Error('useCarousel must be used within a <Carousel />');\n }\n\n return context;\n}\n\n/**\n * Carousel root. Wraps Embla Carousel with keyboard navigation, scroll state, and context.\n * Use `orientation` for vertical mode and `opts` to pass Embla options directly.\n */\nfunction Carousel({\n orientation = 'horizontal',\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: ComponentProps<'div'> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === 'horizontal' ? 'x' : 'y',\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = useState(false);\n const [canScrollNext, setCanScrollNext] = useState(false);\n\n const onSelect = useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on('reInit', onSelect);\n api.on('select', onSelect);\n\n return () => {\n api?.off('select', onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api,\n opts,\n orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}>\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn('relative', className)}\n role='region'\n aria-roledescription='carousel'\n data-slot='carousel'\n {...props}>\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/**\n * Scrollable track wrapper. Direct child of `Carousel`. Wraps `CarouselItem` children.\n */\nfunction CarouselContent({ className, ...props }: ComponentProps<'div'>) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className='overflow-hidden' data-slot='carousel-content'>\n <div\n className={cn(\n 'flex',\n orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\n/**\n * Individual slide. Use `className` with `basis-*` utilities to control how many slides are visible.\n */\nfunction CarouselItem({ className, ...props }: ComponentProps<'div'>) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role='group'\n aria-roledescription='slide'\n data-slot='carousel-item'\n className={cn(\n 'min-w-0 shrink-0 grow-0 basis-full',\n orientation === 'horizontal' ? 'pl-4' : 'pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Previous-slide button. Positioned absolutely to the left (horizontal) or top (vertical).\n * Disabled automatically when there are no previous slides.\n */\nfunction CarouselPrevious({\n className,\n variant = 'outline',\n size = 'icon-sm',\n ...props\n}: ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot='carousel-previous'\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation',\n orientation === 'horizontal'\n ? 'top-1/2 -left-12 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n aria-label='Previous slide'\n {...props}>\n <ArrowLeft className='size-4' aria-hidden='true' />\n <span className='sr-only'>Previous slide</span>\n </Button>\n );\n}\n\n/**\n * Next-slide button. Positioned absolutely to the right (horizontal) or bottom (vertical).\n * Disabled automatically when there are no next slides.\n */\nfunction CarouselNext({\n className,\n variant = 'outline',\n size = 'icon-sm',\n ...props\n}: ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot='carousel-next'\n variant={variant}\n size={size}\n className={cn(\n 'absolute touch-manipulation',\n orientation === 'horizontal'\n ? 'top-1/2 -right-12 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n aria-label='Next slide'\n {...props}>\n <ArrowRight className='size-4' aria-hidden='true' />\n <span className='sr-only'>Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n};\n","import { type ComponentProps } from 'react';\nimport { cn } from '@/lib/utils';\n\n// Field — wrapper container for a single form field\nfunction Field({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot='field' className={cn('flex flex-col gap-1.5', className)} {...props} />;\n}\n\n// FieldLabel — label for a form field\nfunction FieldLabel({ className, ...props }: ComponentProps<'label'>) {\n return (\n <label\n data-slot='field-label'\n className={cn(\n 'text-foreground text-sm leading-none font-medium',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className,\n )}\n {...props}\n />\n );\n}\n\n// FieldDescription — helper text below a field\nfunction FieldDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='field-description'\n className={cn('text-muted-foreground text-xs', className)}\n {...props}\n />\n );\n}\n\n// FieldError — validation error message\nfunction FieldError({ errors, className }: { errors?: unknown[]; className?: string }) {\n if (!errors || errors.length === 0) return null;\n\n return (\n <p\n data-slot='field-error'\n className={cn('text-destructive text-xs font-medium', className)}>\n {errors\n .map((e) =>\n typeof e === 'string' ? e : e instanceof Error ? e.message : String(e),\n )\n .join(', ')}\n </p>\n );\n}\n\n// FieldGroup — groups multiple fields together vertically\nfunction FieldGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div data-slot='field-group' className={cn('flex flex-col gap-4', className)} {...props} />\n );\n}\n\nexport { Field, FieldLabel, FieldDescription, FieldError, FieldGroup };\n","import { type ComponentProps } from 'react';\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot='input'\n className={cn(\n 'border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n 'dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","const SAFE_EXTERNAL_PROTOCOLS = new Set(['https:', 'http:']);\nconst SAFE_HREF_PROTOCOLS = new Set(['https:', 'http:', 'mailto:', 'tel:']);\n\n/**\n * Returns true only for http/https URLs. Blocks javascript: and all other protocols.\n * Use before window.location.href or window.open with consumer-supplied paths.\n */\nexport function isSafeExternalUrl(url: string): boolean {\n try {\n return SAFE_EXTERNAL_PROTOCOLS.has(new URL(url).protocol);\n } catch {\n return false;\n }\n}\n\n/**\n * Sanitizes an anchor href. Passes through relative paths and safe protocols.\n * Returns '#' for javascript: or any other unsafe protocol.\n */\nexport function sanitizeHref(href: string | undefined): string | undefined {\n if (!href) return href;\n if (\n (href.startsWith('/') && !href.startsWith('//')) ||\n href.startsWith('#') ||\n href.startsWith('./') ||\n href.startsWith('../')\n ) {\n return href;\n }\n try {\n return SAFE_HREF_PROTOCOLS.has(new URL(href).protocol) ? href : '#';\n } catch {\n return '#';\n }\n}\n","import { type ComponentProps, type MouseEvent, type MouseEventHandler } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport { ExternalLinkIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { sanitizeHref } from '@/utils/urlSecurity';\n\nconst linkVariants = cva(\n 'group/link inline-flex items-center rounded-sm outline-none transition-colors duration-150 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:opacity-50',\n {\n variants: {\n variant: {\n underlined:\n 'underline underline-offset-2 decoration-[1px] text-main-grey hover:text-main-blue-primary active:translate-y-px active:text-main-orange-primary visited:text-main-orange-primary visited:underline focus-visible:outline-main-blue-primary',\n plain: 'no-underline text-main-grey hover:text-main-blue-primary hover:underline hover:underline-offset-2 hover:decoration-[1px] active:translate-y-px active:text-main-orange-primary active:underline focus-visible:outline-main-blue-primary',\n },\n size: {\n xs: 'gap-1 text-xs',\n sm: 'gap-1 text-sm',\n md: 'gap-1.5 text-base',\n lg: 'gap-2 text-lg',\n },\n },\n defaultVariants: {\n variant: 'underlined',\n size: 'md',\n },\n },\n);\n\nfunction Link({\n className,\n variant = 'underlined',\n size = 'md',\n asChild = false,\n disabled = false,\n target,\n rel,\n href,\n truncate = false,\n children,\n onClick,\n ...props\n}: Omit<ComponentProps<'a'>, 'onClick'> &\n VariantProps<typeof linkVariants> & {\n asChild?: boolean;\n disabled?: boolean;\n truncate?: boolean;\n onClick?: MouseEventHandler<HTMLElement>;\n }) {\n const Comp = asChild && !disabled ? Slot.Root : 'a';\n const isExternal = target === '_blank';\n const resolvedRel = rel || (target === '_blank' ? 'noopener noreferrer' : undefined);\n\n function handleClick(e: MouseEvent<HTMLElement>) {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n }\n\n const externalIconSize = size === 'lg' ? 16 : size === 'xs' ? 10 : 12;\n\n return (\n <Comp\n data-slot='link'\n data-variant={variant}\n data-size={size}\n href={disabled ? undefined : sanitizeHref(href)}\n target={target}\n rel={resolvedRel}\n tabIndex={disabled ? -1 : undefined}\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n className={cn(\n linkVariants({ variant, size, className }),\n truncate && 'max-w-full overflow-hidden',\n )}\n {...props}>\n {truncate ? (\n <span className='min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap'>\n {children}\n </span>\n ) : (\n children\n )}\n {isExternal && !disabled && (\n <>\n <ExternalLinkIcon\n aria-hidden='true'\n size={externalIconSize}\n className='shrink-0'\n />\n <span className='sr-only'>(opens in new tab)</span>\n </>\n )}\n </Comp>\n );\n}\n\nexport { Link, linkVariants };\n","import { useRef, type ClipboardEvent, type KeyboardEvent } from 'react';\nimport { cn } from '@/lib/utils';\n\ninterface PinInputProps {\n length?: number;\n value?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n invalid?: boolean;\n mask?: boolean;\n className?: string;\n inputClassName?: string;\n}\n\nfunction PinInput({\n length = 6,\n value = '',\n onChange,\n disabled = false,\n invalid = false,\n mask = false,\n className,\n inputClassName,\n}: PinInputProps) {\n const inputs = useRef<(HTMLInputElement | null)[]>([]);\n const pins = value.split('').slice(0, length);\n\n const focusAt = (index: number) => {\n inputs.current[Math.max(0, Math.min(index, length - 1))]?.focus();\n };\n\n const handleChange = (index: number, char: string) => {\n const digit = char.replace(/\\D/g, '').slice(-1);\n const next = pins.slice();\n next[index] = digit;\n const newVal = next.join('').slice(0, length);\n onChange?.(newVal);\n if (digit && index < length - 1) focusAt(index + 1);\n };\n\n const handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (pins[index]) {\n const next = pins.slice();\n next[index] = '';\n onChange?.(next.join(''));\n } else {\n focusAt(index - 1);\n }\n } else if (e.key === 'ArrowLeft') {\n focusAt(index - 1);\n } else if (e.key === 'ArrowRight') {\n focusAt(index + 1);\n }\n };\n\n const handlePaste = (e: ClipboardEvent) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length);\n onChange?.(pasted);\n focusAt(Math.min(pasted.length, length - 1));\n };\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n {Array.from({ length }).map((_, i) => (\n <input\n key={i}\n ref={(el) => {\n inputs.current[i] = el;\n }}\n type={mask ? 'password' : 'text'}\n inputMode='numeric'\n maxLength={1}\n value={pins[i] ?? ''}\n disabled={disabled}\n aria-invalid={invalid}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={(e) => e.target.select()}\n className={cn(\n 'border-input flex h-10 w-10 rounded-md border bg-transparent text-center text-sm font-semibold shadow-xs transition-[color,box-shadow] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n inputClassName,\n )}\n />\n ))}\n </div>\n );\n}\n\nexport { PinInput };\nexport type { PinInputProps };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Toggle as TogglePrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\n\nconst toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n {\n variants: {\n variant: {\n default: 'bg-foreground/5',\n outline:\n 'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n sm: 'h-8 min-w-8 px-1.5',\n md: 'h-9 min-w-9 px-2',\n lg: 'h-10 min-w-10 px-2.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot='toggle'\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n","import { createContext, useContext, useEffect, useId, useState, type ComponentProps, type ReactNode } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { ToggleGroup } from 'radix-ui';\nimport { motion } from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { toggleVariants } from '@/components/ui/Toggle/toggle';\n\ntype SegmentedControlContextValue = VariantProps<typeof toggleVariants> & {\n type: 'single' | 'multiple';\n currentSingleValue?: string;\n pillLayoutId: string;\n};\n\nconst SegmentedControlContext = createContext<SegmentedControlContextValue>({\n size: 'md',\n type: 'single',\n currentSingleValue: undefined,\n pillLayoutId: '',\n});\n\ntype SegmentedControlSingleProps = {\n type: 'single';\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n};\n\ntype SegmentedControlMultipleProps = {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n};\n\ntype SegmentedControlProps = (SegmentedControlSingleProps | SegmentedControlMultipleProps) &\n VariantProps<typeof toggleVariants> & {\n disabled?: boolean;\n className?: string;\n children?: ReactNode;\n };\n\nfunction SegmentedControl({ className, size = 'md', children, ...props }: SegmentedControlProps) {\n const pillLayoutId = useId();\n const isSingle = props.type === 'single';\n const singleProps = isSingle ? (props as SegmentedControlSingleProps) : null;\n\n const [activeValue, setActiveValue] = useState<string | undefined>(\n singleProps?.value ?? singleProps?.defaultValue,\n );\n\n useEffect(() => {\n if (singleProps?.value !== undefined) {\n setActiveValue(singleProps.value);\n }\n }, [singleProps?.value]);\n\n const rootProps = {\n ...(props as ComponentProps<typeof ToggleGroup.Root>),\n ...(isSingle && {\n onValueChange: (val: string) => {\n setActiveValue(val);\n singleProps?.onValueChange?.(val);\n },\n }),\n };\n\n return (\n <ToggleGroup.Root\n data-slot='segmented-control'\n className={cn('flex w-full items-center gap-1 rounded-lg bg-[#e8e8ed] p-1', className)}\n {...(rootProps as ComponentProps<typeof ToggleGroup.Root>)}>\n <SegmentedControlContext.Provider\n value={{\n size,\n type: props.type,\n currentSingleValue: activeValue,\n pillLayoutId,\n }}>\n {children}\n </SegmentedControlContext.Provider>\n </ToggleGroup.Root>\n );\n}\n\nfunction SegmentedControlItem({\n className,\n children,\n value,\n ...props\n}: ComponentProps<typeof ToggleGroup.Item> & VariantProps<typeof toggleVariants>) {\n const { size, type, currentSingleValue, pillLayoutId } =\n useContext(SegmentedControlContext);\n const isActive = type === 'single' && currentSingleValue === value;\n\n return (\n <ToggleGroup.Item\n data-slot='segmented-control-item'\n value={value}\n className={cn(\n toggleVariants({ variant: 'default', size }),\n 'relative h-7 flex-1 cursor-pointer rounded-md border-0 bg-transparent px-4 py-0',\n 'text-muted-foreground text-sm font-medium',\n 'hover:text-foreground transition-colors duration-150',\n 'focus:z-10 focus-visible:z-10',\n 'data-[state=on]:text-[var(--color-main-blue-primary)]',\n type === 'multiple' && [\n 'data-[state=on]:bg-white',\n 'data-[state=on]:shadow-sm',\n 'data-[state=on]:hover:bg-white',\n ],\n className,\n )}\n {...props}>\n {isActive && (\n <motion.span\n layoutId={pillLayoutId}\n className='absolute inset-0 rounded-md bg-white shadow-sm'\n transition={{ type: 'spring', duration: 0.5, bounce: 0.1 }}\n />\n )}\n <span className='relative z-10'>{children}</span>\n </ToggleGroup.Item>\n );\n}\n\nexport { SegmentedControl, SegmentedControlItem };\nexport type { SegmentedControlProps };\n","import { type ComponentProps } from 'react';\nimport { Select as SelectPrimitive } from 'radix-ui';\nimport { ChevronDownIcon, ChevronUpIcon, CheckIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nfunction Select({ ...props }: ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot='select' {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger\n data-slot='select-trigger'\n className={cn(\n 'border-input flex h-9 w-full items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n '[&>span]:truncate',\n className,\n )}\n {...props}>\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className='text-muted-foreground size-4 shrink-0' />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot='select-content'\n className={cn(\n 'border-border bg-popover text-popover-foreground relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-md border shadow-md',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1',\n position === 'popper' && 'w-[--radix-select-trigger-width]',\n className,\n )}\n position={position}\n {...props}>\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' && 'h-[--radix-select-trigger-height]',\n )}>\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n className={cn(\n 'relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none',\n 'focus:bg-accent focus:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}>\n <span className='absolute right-2 flex size-3.5 items-center justify-center'>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className='size-4' />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectLabel({ className, ...props }: ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-2 py-1.5 text-xs font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}>\n <ChevronUpIcon className='size-4' />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}>\n <ChevronDownIcon className='size-4' />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nfunction SelectValue({ ...props }: ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot='select-value' {...props} />;\n}\n\nfunction SelectGroup({ ...props }: ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot='select-group' {...props} />;\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { type ComponentProps } from 'react';\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot='separator'\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-foreground/20 shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import { type ComponentProps } from 'react';\nimport { Progress as ProgressPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst progressVariants = cva('relative flex w-full items-center overflow-x-hidden rounded-full', {\n variants: {\n variant: {\n default: 'bg-[var(--color-dark-100)]',\n success: 'bg-[var(--color-green-100)]',\n warning: 'bg-[var(--color-yellow-100)]',\n danger: 'bg-[var(--color-red-100)]',\n orange: 'bg-[var(--color-orange-100)]',\n },\n size: {\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n});\n\nconst progressIndicatorVariants = cva('size-full flex-1 transition-all', {\n variants: {\n variant: {\n default: 'bg-[var(--color-main-blue-primary)]',\n success: 'bg-[var(--color-main-positive-state)]',\n warning: 'bg-[var(--color-main-yellow-primary)]',\n danger: 'bg-[var(--color-main-warning-state)]',\n orange: 'bg-[var(--color-main-orange-primary)]',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface ProgressProps\n extends\n ComponentProps<typeof ProgressPrimitive.Root>,\n VariantProps<typeof progressVariants> {}\n\nfunction Progress({ className, value, variant = 'default', size = 'md', ...props }: ProgressProps) {\n return (\n <ProgressPrimitive.Root\n data-slot='progress'\n data-variant={variant}\n data-size={size}\n className={cn(progressVariants({ variant, size }), className)}\n {...props}>\n <ProgressPrimitive.Indicator\n data-slot='progress-indicator'\n className={cn(progressIndicatorVariants({ variant }))}\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n );\n}\n\nexport { Progress, progressVariants, progressIndicatorVariants };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst skeletonVariants = cva('animate-pulse bg-foreground/10', {\n variants: {\n variant: {\n default: 'rounded-md',\n text: 'h-4 rounded-full',\n avatar: 'rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nfunction Skeleton({\n className,\n variant,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof skeletonVariants>) {\n return (\n <div\n data-slot='skeleton'\n data-variant={variant}\n aria-hidden='true'\n className={cn(skeletonVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nexport { Skeleton, skeletonVariants };\n","import { useMemo, type ComponentProps } from 'react';\nimport { Slider as SliderPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = useMemo(\n () =>\n Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],\n [value, defaultValue, min, max],\n );\n\n return (\n <SliderPrimitive.Root\n data-slot='slider'\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n 'relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col',\n className,\n )}\n {...props}>\n <SliderPrimitive.Track\n data-slot='slider-track'\n className='bg-input/90 relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2'>\n <SliderPrimitive.Range\n data-slot='slider-range'\n className='bg-primary absolute select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full'\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot='slider-thumb'\n key={index}\n className='hover:ring-ring/30 focus-visible:ring-ring/30 block size-4 shrink-0 rounded-full bg-white shadow-md ring-1 ring-black/10 transition-[color,box-shadow,background-color] select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50'\n />\n ))}\n </SliderPrimitive.Root>\n );\n}\n\nexport { Slider };\n","import { type ComponentProps } from 'react';\nimport { Switch as SwitchPrimitive } from 'radix-ui';\nimport { cn } from '@/lib/utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot='switch'\n data-size={size}\n className={cn(\n 'peer group/switch inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[size=default]:h-[1.15rem] data-[size=default]:w-8',\n 'data-[size=sm]:h-3.5 data-[size=sm]:w-6',\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n 'dark:data-[state=unchecked]:bg-input/80',\n className,\n )}\n {...props}>\n <SwitchPrimitive.Thumb\n data-slot='switch-thumb'\n className={cn(\n 'bg-background pointer-events-none block rounded-full ring-0 transition-transform',\n 'group-data-[size=default]/switch:size-4',\n 'group-data-[size=sm]/switch:size-3',\n 'data-[state=checked]:translate-x-[calc(100%-2px)]',\n 'data-[state=unchecked]:translate-x-0',\n 'dark:data-[state=checked]:bg-primary-foreground',\n 'dark:data-[state=unchecked]:bg-foreground',\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","// ─────────────────────────────────────────────\n// tcce-design-system · animation tokens\n// Motion (ex Framer Motion) — sutil y profesional\n// ─────────────────────────────────────────────\n\n// ── Durations ────────────────────────────────\n// Usa la escala más corta posible para cada caso.\n// instant → feedback táctil (hover, active, focus ring)\n// fast → elementos pequeños que entran/salen (badge, tooltip, switch)\n// normal → componentes de tamaño medio (dropdown, toast, input state)\n// slow → overlays y transiciones de página (modal backdrop, sidebar)\nexport const duration = {\n instant: 0.1,\n fast: 0.15,\n normal: 0.25,\n slow: 0.4,\n} as const;\n\n// ── Easings ──────────────────────────────────\n// Curvas estándar de Material Design adaptadas para uso profesional.\n// smooth → entrada y salida equilibrada (la más usada)\n// enter → aceleración suave al entrar (elementos que aparecen)\n// exit → desaceleración al salir (elementos que desaparecen)\n// linear → progreso, loaders, skeleton shimmer\nexport const ease = {\n smooth: [0.4, 0, 0.2, 1] as const,\n enter: [0.0, 0, 0.2, 1] as const,\n exit: [0.4, 0, 1.0, 1] as const,\n linear: [0.0, 0, 1.0, 1] as const,\n} as const;\n\n// ── Spring configs ────────────────────────────\n// Solo para componentes que necesitan sensación física ligera.\n// gentle → modales, drawers, paneles deslizantes\n// snappy → switches, toggles, checkboxes\n// NO usar spring en: toasts, tooltips, dropdowns (demasiado movimiento)\nexport const spring = {\n gentle: { type: 'spring', stiffness: 260, damping: 28 } as const,\n snappy: { type: 'spring', stiffness: 400, damping: 30 } as const,\n} as const;\n\n// ── Transitions predefinidas ──────────────────\n// Combinaciones listas para usar en cada tipo de componente.\n// Importa la que corresponda en lugar de armar la config cada vez.\n\nexport const transition = {\n // Botones — feedback instantáneo en hover/tap\n button: {\n duration: duration.instant,\n ease: ease.smooth,\n },\n\n // Switch / toggle / checkbox\n toggle: {\n ...spring.snappy,\n },\n\n // Inputs — cambio de borde en focus, estados de error\n input: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Dropdown / select / popover\n dropdown: {\n duration: duration.fast,\n ease: ease.enter,\n },\n\n // Toast / notification — entra rápido, sale más rápido aún\n toast: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n\n // Modal / dialog — más lento para dar peso al overlay\n modal: {\n ...spring.gentle,\n },\n\n // Sidebar / navigation drawer\n sidebar: {\n duration: duration.slow,\n ease: ease.smooth,\n },\n\n // Cards — hover sutil, sin spring\n card: {\n duration: duration.fast,\n ease: ease.smooth,\n },\n} as const;\n\n// ── Variants Motion reutilizables ─────────────\n// Úsalos directamente en <motion.div variants={fadeIn}>\n\nexport const fadeIn = {\n hidden: { opacity: 0 },\n visible: { opacity: 1, transition: transition.dropdown },\n exit: { opacity: 0, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\nexport const slideUp = {\n hidden: { opacity: 0, y: 8 },\n visible: { opacity: 1, y: 0, transition: transition.dropdown },\n exit: { opacity: 0, y: 4, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\nexport const slideRight = {\n hidden: { opacity: 0, x: -12 },\n visible: { opacity: 1, x: 0, transition: transition.sidebar },\n exit: { opacity: 0, x: -12, transition: { duration: duration.normal, ease: ease.exit } },\n} as const;\n\nexport const scaleIn = {\n hidden: { opacity: 0, scale: 0.97 },\n visible: { opacity: 1, scale: 1, transition: transition.modal },\n exit: { opacity: 0, scale: 0.97, transition: { duration: duration.fast, ease: ease.exit } },\n} as const;\n\n// ── Stagger (para listas y grids) ─────────────\n// Úsalo en el contenedor padre con variants + staggerChildren\nexport const stagger = {\n container: {\n hidden: {},\n visible: { transition: { staggerChildren: 0.06, delayChildren: 0.05 } },\n },\n item: {\n hidden: { opacity: 0, y: 6 },\n visible: { opacity: 1, y: 0, transition: transition.card },\n },\n} as const;\n\n// ── Export agrupado ───────────────────────────\nexport const animation = {\n duration,\n ease,\n spring,\n transition,\n variants: { fadeIn, slideUp, slideRight, scaleIn, stagger },\n} as const;\n\nexport type AnimationTokens = typeof animation;\n","import { createContext, useContext, useId, useState, type ComponentProps } from 'react';\nimport { Tabs as TabsPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\nimport { cn } from '@/lib/utils';\nimport { spring, duration, ease } from '@/tokens/animation';\n\ninterface TabsContextValue {\n activeValue: string;\n listId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n activeValue: '',\n listId: '',\n});\n\nfunction useTabsContext() {\n return useContext(TabsContext);\n}\n\nfunction Tabs({\n defaultValue,\n value: controlledValue,\n onValueChange,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Root>) {\n const [internalValue, setInternalValue] = useState(controlledValue ?? defaultValue ?? '');\n const activeValue = controlledValue ?? internalValue;\n const listId = useId();\n\n const handleValueChange = (v: string) => {\n if (controlledValue === undefined) setInternalValue(v);\n onValueChange?.(v);\n };\n\n return (\n <TabsContext.Provider value={{ activeValue, listId }}>\n <TabsPrimitive.Root\n data-slot='tabs'\n value={activeValue}\n onValueChange={handleValueChange}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nfunction TabsList({ className, ...props }: ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot='tabs-list'\n className={cn(\n 'text-muted-foreground inline-flex h-9 items-center justify-center gap-1 rounded-lg bg-[#e8e8ed] p-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n value,\n children,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { activeValue, listId } = useTabsContext();\n const isActive = activeValue === value;\n\n return (\n <TabsPrimitive.Trigger\n data-slot='tabs-trigger'\n value={value}\n className={cn(\n 'relative inline-flex items-center justify-center rounded-md px-4 py-1 text-sm font-medium whitespace-nowrap',\n 'ring-offset-background transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'data-[state=inactive]:text-muted-foreground hover:text-foreground transition-all duration-150 data-[state=active]:text-[var(--color-main-blue-primary)]',\n className,\n )}\n {...props}>\n <AnimatePresence initial={false}>\n {isActive && (\n <motion.span\n data-slot='tabs-trigger-pill'\n layoutId={`${listId}-pill`}\n className='absolute inset-0 z-0 rounded-md bg-white shadow-sm'\n transition={spring.snappy}\n />\n )}\n </AnimatePresence>\n <span className='relative z-10 flex items-center gap-1.5'>{children}</span>\n </TabsPrimitive.Trigger>\n );\n}\n\nfunction TabsContent({\n className,\n value,\n children,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Content>) {\n const { activeValue } = useTabsContext();\n const isActive = activeValue === value;\n\n return (\n <TabsPrimitive.Content\n data-slot='tabs-content'\n value={value}\n forceMount\n className={cn(\n 'ring-offset-background focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n className,\n )}\n {...props}>\n <AnimatePresence mode='popLayout' initial={false}>\n {isActive && (\n <motion.div\n key={value}\n className='mt-2'\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={{ duration: duration.fast, ease: ease.smooth }}>\n {children}\n </motion.div>\n )}\n </AnimatePresence>\n </TabsPrimitive.Content>\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { createContext, useContext, useEffect, useState, type ReactNode } from 'react';\nimport { motion, AnimatePresence } from 'motion/react';\nimport {\n CircleCheckIcon,\n InfoIcon,\n TriangleAlertIcon,\n OctagonXIcon,\n Loader2Icon,\n XIcon,\n} from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport { transition } from '@/tokens/animation';\n\n// ─── Tipos ────────────────────────────────────────────────────────────────────\n\nexport type ToastType = 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading';\n\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface ToastItem {\n id: string;\n type: ToastType;\n title: string;\n description?: string;\n duration: number;\n action?: ToastAction;\n}\n\n// ─── Store por instancia ──────────────────────────────────────────────────────\n// Cada Toaster crea su propio store — no hay singleton global.\n// La función toast() imperativa se conecta al store del Toaster\n// más cercano via contexto.\n\ntype Listener = (toasts: ToastItem[]) => void;\n\ninterface Store {\n toasts: ToastItem[];\n listeners: Listener[];\n add: (item: Omit<ToastItem, 'id'>, id?: string) => string;\n remove: (id: string) => void;\n subscribe: (l: Listener) => () => void;\n}\n\nconst DEFAULT_DURATION = 3000;\nconst MAX_TOASTS = 5;\n\nfunction createStore(): Store {\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n const store: Store = {\n toasts: [],\n listeners: [],\n\n add(item, id) {\n const toastId = id ?? Math.random().toString(36).slice(2);\n const exists = store.toasts.find((t) => t.id === toastId);\n\n if (exists) {\n store.toasts = store.toasts.map((t) =>\n t.id === toastId ? { ...t, ...item, id: toastId } : t,\n );\n } else {\n store.toasts = [{ id: toastId, ...item }, ...store.toasts].slice(0, MAX_TOASTS);\n }\n\n store.listeners.forEach((l) => l([...store.toasts]));\n if (item.duration > 0) {\n clearTimeout(timers.get(toastId));\n timers.set(toastId, setTimeout(() => store.remove(toastId), item.duration));\n }\n return toastId;\n },\n\n remove(id) {\n clearTimeout(timers.get(id));\n timers.delete(id);\n store.toasts = store.toasts.filter((t) => t.id !== id);\n store.listeners.forEach((l) => l([...store.toasts]));\n },\n\n subscribe(listener) {\n store.listeners.push(listener);\n return () => {\n store.listeners = store.listeners.filter((l) => l !== listener);\n };\n },\n };\n return store;\n}\n\n// ─── Contexto ─────────────────────────────────────────────────────────────────\n\nconst ToastStoreContext = createContext<Store | null>(null);\n\nfunction useStore(): Store {\n const store = useContext(ToastStoreContext);\n if (!store) throw new Error('<Toaster /> must be mounted to use toast()');\n return store;\n}\n\n// ─── Hook público ─────────────────────────────────────────────────────────────\n\ntype ToastOptions = Partial<Omit<ToastItem, 'id' | 'title' | 'type'>> & { id?: string };\n\ninterface PromiseMessages<T> {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((err: unknown) => string);\n}\n\nexport function useToast() {\n const store = useStore();\n\n function create(title: string, options?: ToastOptions) {\n return store.add(\n { type: 'default', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n );\n }\n\n return Object.assign(create, {\n success: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'success', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n error: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'error', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n warning: (title: string, options?: ToastOptions) =>\n store.add(\n { type: 'warning', duration: DEFAULT_DURATION, title, ...options },\n options?.id,\n ),\n\n info: (title: string, options?: ToastOptions) =>\n store.add({ type: 'info', duration: DEFAULT_DURATION, title, ...options }, options?.id),\n\n loading: (title: string, options?: ToastOptions) =>\n store.add({ type: 'loading', duration: 0, title, ...options }, options?.id),\n\n dismiss: (id: string) => store.remove(id),\n\n promise: <T,>(promise: Promise<T>, messages: PromiseMessages<T>) => {\n const id = store.add({ type: 'loading', duration: 0, title: messages.loading });\n promise\n .then((data) => {\n const title =\n typeof messages.success === 'function'\n ? messages.success(data)\n : messages.success;\n store.add({ type: 'success', duration: DEFAULT_DURATION, title }, id);\n })\n .catch((err) => {\n const title =\n typeof messages.error === 'function' ? messages.error(err) : messages.error;\n store.add({ type: 'error', duration: DEFAULT_DURATION, title }, id);\n });\n return id;\n },\n });\n}\n\n// ─── Icono por tipo ───────────────────────────────────────────────────────────\n\nconst icons: Record<ToastType, ReactNode> = {\n default: null,\n success: <CircleCheckIcon className='size-4' />,\n error: <OctagonXIcon className='size-4' />,\n warning: <TriangleAlertIcon className='size-4' />,\n info: <InfoIcon className='size-4' />,\n loading: <Loader2Icon className='size-4 animate-spin' />,\n};\n\nconst iconWrapperStyles: Record<ToastType, string> = {\n default: '',\n success: 'rounded-lg bg-emerald-50 p-1.5 text-emerald-600',\n error: 'rounded-lg bg-red-50 p-1.5 text-red-600',\n warning: 'rounded-lg bg-amber-50 p-1.5 text-amber-600',\n info: 'rounded-lg bg-blue-50 p-1.5 text-blue-600',\n loading: 'rounded-lg bg-muted p-1.5 text-muted-foreground',\n};\n\nconst cardAccentStyles: Record<ToastType, string> = {\n default: '',\n success: 'border-l-[3px] border-l-emerald-400',\n error: 'border-l-[3px] border-l-red-500',\n warning: 'border-l-[3px] border-l-amber-400',\n info: 'border-l-[3px] border-l-blue-400',\n loading: 'border-l-[3px] border-l-muted-foreground/40',\n};\n\n// ─── ToastCard ────────────────────────────────────────────────────────────────\n\nfunction ToastCard({ id, type, title, description, action }: ToastItem) {\n const store = useStore();\n const icon = icons[type];\n\n return (\n <motion.li\n layout\n initial={{ opacity: 0, y: 16, scale: 0.96 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: -8, scale: 0.96 }}\n transition={transition.toast}\n className={cn(\n 'border-border bg-popover text-popover-foreground relative flex w-full max-w-[400px] min-w-[300px] items-start gap-3 overflow-hidden rounded-xl border px-4 py-3.5 shadow-lg',\n cardAccentStyles[type],\n )}>\n {icon && <span className={cn('shrink-0', iconWrapperStyles[type])}>{icon}</span>}\n\n <div className='flex min-w-0 flex-1 flex-col gap-1'>\n <p className='text-sm leading-snug font-semibold'>{title}</p>\n {description && (\n <p className='text-muted-foreground text-xs leading-snug'>{description}</p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className='bg-muted text-foreground hover:bg-muted/70 mt-1 self-start rounded-md px-2.5 py-1 text-xs font-medium transition-colors'>\n {action.label}\n </button>\n )}\n </div>\n\n <button\n onClick={() => store.remove(id)}\n aria-label='Dismiss'\n className='text-muted-foreground/60 hover:bg-muted hover:text-foreground shrink-0 rounded-full p-1 transition-colors'>\n <XIcon className='size-3.5' />\n </button>\n </motion.li>\n );\n}\n\n// ─── Toaster ──────────────────────────────────────────────────────────────────\n\nexport type ToasterPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\nconst positionStyles: Record<ToasterPosition, string> = {\n 'top-right': 'top-4 right-4 items-end',\n 'top-left': 'top-4 left-4 items-start',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-4 right-4 items-end',\n 'bottom-left': 'bottom-4 left-4 items-start',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 items-center',\n};\n\nexport interface ToasterProps {\n position?: ToasterPosition;\n richColors?: boolean;\n closeButton?: boolean;\n duration?: number;\n children?: ReactNode;\n}\n\nfunction Toaster({ position = 'bottom-right', children }: ToasterProps) {\n const [store] = useState<Store>(createStore);\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n useEffect(() => store.subscribe(setToasts), [store]);\n\n return (\n <ToastStoreContext.Provider value={store}>\n {children}\n <ol\n aria-live='polite'\n aria-label='Notifications'\n className={cn(\n 'pointer-events-none fixed z-[100] flex flex-col gap-2',\n positionStyles[position],\n )}>\n <AnimatePresence mode='sync' initial={false}>\n {toasts.map((t) => (\n <div key={t.id} className='pointer-events-auto'>\n <ToastCard {...t} />\n </div>\n ))}\n </AnimatePresence>\n </ol>\n </ToastStoreContext.Provider>\n );\n}\n\nexport { Toaster };\n","import { createContext, useContext, type CSSProperties, type ComponentProps } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { toggleVariants } from '../Toggle/toggle';\n\nconst ToggleGroupContext = createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }\n>({\n size: 'md',\n variant: 'default',\n spacing: 2,\n orientation: 'horizontal',\n});\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 2,\n orientation = 'horizontal',\n children,\n ...props\n}: ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot='toggle-group'\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ '--gap': spacing } as CSSProperties}\n className={cn(\n 'group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch data-[spacing=0]:data-[variant=outline]:rounded-md',\n className,\n )}\n {...props}>\n <ToggleGroupContext.Provider value={{ variant, size, spacing, orientation }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = 'default',\n size = 'md',\n ...props\n}: ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n const context = useContext(ToggleGroupContext);\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot='toggle-group-item'\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n 'shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-3 group-data-[spacing=0]/toggle-group:shadow-none focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-2.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-2.5 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-md group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t',\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className,\n )}\n {...props}>\n {children}\n </ToggleGroupPrimitive.Item>\n );\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst tooltipContentVariants = cva(\n 'z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-xl text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-lg data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n {\n variants: {\n variant: {\n default: 'bg-foreground text-background',\n primary: 'bg-primary text-primary-foreground',\n },\n size: {\n sm: 'px-2 py-1',\n md: 'px-3 py-1.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nconst tooltipArrowVariants = cva(\n 'z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] data-[side=left]:translate-x-[-1.5px] data-[side=right]:translate-x-[1.5px]',\n {\n variants: {\n variant: {\n default: 'bg-foreground fill-foreground',\n primary: 'bg-primary fill-primary',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nfunction TooltipProvider({\n delayDuration = 100,\n ...props\n}: ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot='tooltip-provider'\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\nfunction Tooltip({ ...props }: ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot='tooltip' {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot='tooltip-trigger' {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 6,\n variant = 'default',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof TooltipPrimitive.Content> &\n VariantProps<typeof tooltipContentVariants>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot='tooltip-content'\n data-variant={variant}\n data-size={size}\n sideOffset={sideOffset}\n className={cn(tooltipContentVariants({ variant, size }), className)}\n {...props}>\n {children}\n <TooltipPrimitive.Arrow className={cn(tooltipArrowVariants({ variant }))} />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, tooltipContentVariants };\n","import { type ComponentProps } from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Popover({ ...props }: ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot='popover' {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot='popover-trigger' {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot='popover-content'\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-1 rounded-3xl p-4 text-sm shadow-lg ring-1 outline-hidden duration-100',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot='popover-anchor' {...props} />;\n}\n\nfunction PopoverHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='popover-header'\n className={cn('flex flex-col gap-1 text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverTitle({ className, ...props }: ComponentProps<'h2'>) {\n return (\n <div\n data-slot='popover-title'\n className={cn('text-base font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction PopoverDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='popover-description'\n className={cn('text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n};\n","import { type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nconst TEXT_SIZES = [12, 14, 16, 18, 20, 24, 28, 32, 40, 48] as const;\nconst TEXT_WEIGHTS = [100, 200, 300, 400, 500, 700, 800, 900] as const;\n\nexport type TextSize = (typeof TEXT_SIZES)[number];\nexport type TextWeight = (typeof TEXT_WEIGHTS)[number];\nexport type TextAs = 'p' | 'span' | 'label' | 'small' | 'strong' | 'em';\n\nexport interface TextProps extends Omit<HTMLAttributes<HTMLElement>, 'color'> {\n /** HTML element to render */\n as?: TextAs;\n /** Font size in pixels */\n size?: TextSize;\n /** Font weight */\n weight?: TextWeight;\n /** Italic style */\n italic?: boolean;\n /** Optional CSS color value */\n color?: string;\n /** Text content */\n children: ReactNode;\n}\n\nfunction Text({\n as: Tag = 'p',\n size = 16,\n weight = 400,\n italic = false,\n color,\n className,\n style,\n children,\n ...props\n}: TextProps) {\n return (\n <Tag\n data-slot='text'\n className={cn('leading-normal', className)}\n style={{\n fontFamily: \"'Helvetica Neue', sans-serif\",\n fontSize: `${size}px`,\n fontWeight: weight,\n fontStyle: italic ? 'italic' : 'normal',\n ...(color ? { color } : {}),\n ...style,\n }}\n {...(props as HTMLAttributes<HTMLElement>)}>\n {children}\n </Tag>\n );\n}\n\nexport { Text, TEXT_SIZES, TEXT_WEIGHTS };\n","import { createContext, useContext, useState, type ComponentProps } from 'react';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { XIcon } from 'lucide-react';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Contexto interno ─────────────────────────────────────────────────────────\n\nconst DialogContext = createContext(false);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction Dialog({ children, ...props }: ComponentProps<typeof DialogPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = props.open !== undefined ? props.open : internalOpen;\n\n return (\n <DialogContext.Provider value={isOpen}>\n <DialogPrimitive.Root\n data-slot='dialog'\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n props.onOpenChange?.(v);\n }}\n {...props}>\n {children}\n </DialogPrimitive.Root>\n </DialogContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction DialogTrigger({ ...props }: ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot='dialog-trigger' {...props} />;\n}\n\n// ─── Portal — AnimatePresence vive aquí ──────────────────────────────────────\n\nfunction DialogPortal({ children, ...props }: ComponentProps<typeof DialogPrimitive.Portal>) {\n const isOpen = useContext(DialogContext);\n\n return (\n <DialogPrimitive.Portal data-slot='dialog-portal' forceMount {...props}>\n <AnimatePresence mode='wait'>{isOpen && children}</AnimatePresence>\n </DialogPrimitive.Portal>\n );\n}\n\n// ─── Close ───────────────────────────────────────────────────────────────────\n\nfunction DialogClose({ ...props }: ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot='dialog-close' {...props} />;\n}\n\n// ─── Overlay — fade independiente ────────────────────────────────────────────\n\nfunction DialogOverlay({ className, ...props }: ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay data-slot='dialog-overlay' asChild forceMount {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 isolate z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </DialogPrimitive.Overlay>\n );\n}\n\n// ─── Content — scale + fade + slideUp con spring ─────────────────────────────\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = false,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot='dialog-content'\n asChild\n forceMount\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 fixed top-1/2 left-1/2 z-50 flex max-h-[85vh] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-lg text-sm shadow-xl ring-1 outline-none sm:max-w-sm',\n className,\n )}\n {...props}>\n <motion.div\n className='flex max-h-[85vh] flex-col'\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.96, y: 4 }}\n transition={transition.modal}>\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot='dialog-close' asChild>\n <Button\n variant='ghost'\n className='absolute top-4 right-4'\n size='icon-sm'>\n <XIcon />\n <span className='sr-only'>Close</span>\n </Button>\n </DialogPrimitive.Close>\n )}\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction DialogHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='dialog-header'\n className={cn('flex shrink-0 flex-col gap-3 px-6 pt-6', className)}\n {...props}\n />\n );\n}\n\nfunction DialogBody({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='dialog-body'\n className={cn('flex-1 overflow-y-auto px-6 pb-6', className)}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: ComponentProps<'div'> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot='dialog-footer'\n className={cn(\n 'border-border bg-muted/40 flex shrink-0 flex-wrap items-center justify-end gap-2 rounded-b-lg border-t px-6 pt-4 pb-4',\n className,\n )}\n {...props}>\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant='secondary'>Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction DialogTitle({ className, ...props }: ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot='dialog-title'\n className={cn('font-heading text-lg leading-none font-bold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction DialogDescription({\n className,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot='dialog-description'\n className={cn(\n 'text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogBody,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import { createContext, useContext, useState, type ComponentProps } from 'react';\nimport { AlertDialog as AlertDialogPrimitive } from 'radix-ui';\nimport { XIcon } from 'lucide-react';\nimport { motion, AnimatePresence } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { transition, ease, duration } from '@/tokens/animation';\n\n// ─── Contexto interno — comparte isOpen con el Portal sin tocar el Trigger ───\n\nconst AlertDialogContext = createContext(false);\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nfunction AlertDialog({\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Root>) {\n const [internalOpen, setInternalOpen] = useState(props.defaultOpen ?? false);\n\n const isOpen = props.open !== undefined ? props.open : internalOpen;\n\n return (\n <AlertDialogContext.Provider value={isOpen}>\n <AlertDialogPrimitive.Root\n data-slot='alert-dialog'\n open={isOpen}\n onOpenChange={(v) => {\n setInternalOpen(v);\n props.onOpenChange?.(v);\n }}\n {...props}>\n {children}\n </AlertDialogPrimitive.Root>\n </AlertDialogContext.Provider>\n );\n}\n\n// ─── Trigger ─────────────────────────────────────────────────────────────────\n\nfunction AlertDialogTrigger({\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot='alert-dialog-trigger' {...props} />;\n}\n\n// ─── Portal — AnimatePresence vive aquí, no en el root ───────────────────────\n\nfunction AlertDialogPortal({\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n const isOpen = useContext(AlertDialogContext);\n\n return (\n <AlertDialogPrimitive.Portal data-slot='alert-dialog-portal' forceMount {...props}>\n <AnimatePresence mode='wait'>{isOpen && children}</AnimatePresence>\n </AlertDialogPrimitive.Portal>\n );\n}\n\n// ─── Overlay — fade independiente ────────────────────────────────────────────\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot='alert-dialog-overlay'\n asChild\n forceMount\n {...props}>\n <motion.div\n className={cn(\n 'fixed inset-0 z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm',\n className,\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: duration.normal, ease: ease.smooth }}\n />\n </AlertDialogPrimitive.Overlay>\n );\n}\n\n// ─── Content — scale + fade + slideUp con spring ─────────────────────────────\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n variant = 'default',\n showClose = false,\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: 'default' | 'sm';\n variant?: 'default' | 'dark-glass';\n showClose?: boolean;\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay\n className={cn(variant === 'dark-glass' && 'bg-primary/60 backdrop-blur-md')}\n />\n <AlertDialogPrimitive.Content\n data-slot='alert-dialog-content'\n data-size={size}\n data-variant={variant}\n asChild\n forceMount\n className={cn(\n 'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg p-6 shadow-xl outline-none',\n 'data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md',\n variant === 'default' &&\n 'bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 ring-1',\n variant === 'dark-glass' &&\n 'bg-primary/80 text-white ring-1 ring-white/10 backdrop-blur-xl',\n className,\n )}\n {...props}>\n <motion.div\n initial={{ opacity: 0, scale: 0.96, y: 8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.96, y: 4 }}\n transition={transition.modal}>\n {showClose && (\n <AlertDialogPrimitive.Cancel asChild>\n <button className='text-muted-foreground hover:bg-muted hover:text-foreground absolute top-4 right-4 inline-flex size-6 items-center justify-center rounded-full transition-colors focus:outline-none'>\n <XIcon className='size-3.5' />\n <span className='sr-only'>Close</span>\n </button>\n </AlertDialogPrimitive.Cancel>\n )}\n {children}\n </motion.div>\n </AlertDialogPrimitive.Content>\n </AlertDialogPortal>\n );\n}\n\n// ─── Header ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-header'\n className={cn(\n 'flex flex-col items-center gap-2 text-center has-data-[slot=alert-dialog-media]:items-center sm:group-data-[size=default]/alert-dialog-content:items-start sm:group-data-[size=default]/alert-dialog-content:text-left',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Footer ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-footer'\n className={cn(\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Media ───────────────────────────────────────────────────────────────────\n\nfunction AlertDialogMedia({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='alert-dialog-media'\n className={cn(\n \"bg-muted inline-flex size-16 items-center justify-center rounded-xl sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Title ───────────────────────────────────────────────────────────────────\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot='alert-dialog-title'\n className={cn('font-heading text-lg font-bold', className)}\n {...props}\n />\n );\n}\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot='alert-dialog-description'\n className={cn(\n 'text-muted-foreground *:[a]:hover:text-foreground text-xs text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3',\n className,\n )}\n {...props}\n />\n );\n}\n\n// ─── Action ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogAction({\n className,\n variant = 'cancel',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <AlertDialogPrimitive.Action data-slot='alert-dialog-action' asChild {...props}>\n <Button variant={variant} size={size} className={cn(className)}>\n {children}\n </Button>\n </AlertDialogPrimitive.Action>\n );\n}\n\n// ─── Cancel ──────────────────────────────────────────────────────────────────\n\nfunction AlertDialogCancel({\n className,\n variant = 'ghost',\n size = 'md',\n children,\n ...props\n}: ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <AlertDialogPrimitive.Cancel data-slot='alert-dialog-cancel' asChild {...props}>\n <Button variant={variant} size={size} className={cn(className)}>\n {children}\n </Button>\n </AlertDialogPrimitive.Cancel>\n );\n}\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","import { type ComponentProps } from 'react';\nimport { Accordion as AccordionPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction Accordion({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Root>) {\n return (\n <AccordionPrimitive.Root\n data-slot='accordion'\n className={cn(\n 'divide-foreground/20 flex w-full flex-col divide-y overflow-hidden rounded-2xl border',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot='accordion-item'\n className={cn('data-[state=open]:bg-muted/50 overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className='flex'>\n <AccordionPrimitive.Trigger\n data-slot='accordion-trigger'\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 px-4 py-4 text-left text-sm font-medium transition-all outline-none hover:underline disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}>\n {children}\n <ChevronDownIcon className='text-muted-foreground size-4 shrink-0 transition-transform duration-200' />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot='accordion-content'\n className='text-muted-foreground data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm'\n {...props}>\n <div\n className={cn(\n '[&_a]:hover:text-foreground px-4 pt-0 pb-4 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4',\n className,\n )}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import { useState } from 'react';\nimport { CheckIcon, ChevronsUpDownIcon, SearchIcon } from 'lucide-react';\nimport { Command } from 'cmdk';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyMessage?: string;\n disabled?: boolean;\n className?: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nfunction Combobox({\n options,\n value,\n onValueChange,\n placeholder = 'Select an option...',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n disabled = false,\n className,\n}: ComboboxProps) {\n const [open, setOpen] = useState(false);\n\n const selected = options.find((opt) => opt.value === value);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant='secondary'\n disabled={disabled}\n aria-expanded={open}\n className={cn(\n 'border-input w-64 justify-between border bg-transparent text-sm font-normal shadow-xs',\n 'hover:text-foreground focus-visible:ring-ring/30 hover:bg-transparent',\n selected ? 'text-foreground' : 'text-muted-foreground',\n className,\n )}>\n <span className='truncate'>{selected ? selected.label : placeholder}</span>\n <ChevronsUpDownIcon size={14} className='text-muted-foreground shrink-0' />\n </Button>\n </PopoverTrigger>\n <PopoverContent className='w-64 rounded-lg p-0' align='start'>\n <Command className='rounded-lg'>\n <div className='border-border flex items-center gap-2 border-b px-3'>\n <SearchIcon size={14} className='text-muted-foreground shrink-0' />\n <Command.Input\n placeholder={searchPlaceholder}\n className='placeholder:text-muted-foreground flex h-9 w-full bg-transparent py-2 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50'\n />\n </div>\n <Command.List className='max-h-56 overflow-y-auto p-1'>\n <Command.Empty className='text-muted-foreground py-4 text-center text-sm'>\n {emptyMessage}\n </Command.Empty>\n {options.map((option) => (\n <Command.Item\n key={option.value}\n value={option.value}\n keywords={[option.label]}\n disabled={option.disabled}\n onSelect={() => {\n onValueChange?.(option.value === value ? '' : option.value);\n setOpen(false);\n }}\n className={cn(\n 'relative flex cursor-pointer items-center justify-between rounded-md px-2 py-1.5 text-sm outline-none select-none',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n 'hover:bg-accent hover:text-accent-foreground',\n )}>\n <span>{option.label}</span>\n {value === option.value && (\n <CheckIcon\n size={14}\n className='text-[var(--color-main-blue-primary)]'\n />\n )}\n </Command.Item>\n ))}\n </Command.List>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { Combobox };\n","import { type ComponentProps } from 'react';\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { CheckIcon, ChevronRightIcon } from 'lucide-react';\n\nfunction DropdownMenu({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root {...props} />;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal {...props} />;\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot='dropdown-menu-trigger' {...props} />;\n}\n\nfunction DropdownMenuContent({\n className,\n align = 'start',\n sideOffset = 4,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot='dropdown-menu-content'\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-48 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-3xl p-1.5 shadow-lg ring-1 duration-100 data-[state=closed]:overflow-hidden',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot='dropdown-menu-group' {...props} />;\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot='dropdown-menu-item'\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:*:[svg]:text-destructive relative flex cursor-default items-center gap-2.5 rounded-2xl px-3 py-2 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot='dropdown-menu-checkbox-item'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}>\n <span\n className='pointer-events-none absolute right-2 flex items-center justify-center'\n data-slot='dropdown-menu-checkbox-item-indicator'>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon aria-hidden='true' />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot='dropdown-menu-radio-group' {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot='dropdown-menu-radio-item'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-2.5 rounded-2xl py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <span\n className='pointer-events-none absolute right-2 flex items-center justify-center'\n data-slot='dropdown-menu-radio-item-indicator'>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon aria-hidden='true' />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot='dropdown-menu-label'\n data-inset={inset}\n className={cn('text-muted-foreground px-3 py-2.5 text-xs data-inset:pl-9.5', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot='dropdown-menu-separator'\n className={cn('bg-border/50 -mx-1.5 my-1.5 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot='dropdown-menu-shortcut'\n className={cn(\n 'text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({ ...props }: ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot='dropdown-menu-sub' {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot='dropdown-menu-sub-trigger'\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center gap-2 rounded-2xl px-3 py-2 text-sm font-medium outline-hidden select-none data-inset:pl-9.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n {children}\n <ChevronRightIcon className='ml-auto' aria-hidden='true' />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot='dropdown-menu-sub-content'\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 min-w-36 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-3xl p-1.5 shadow-lg ring-1 duration-100',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import { UploadIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { DropEvent, DropzoneOptions, FileRejection } from 'react-dropzone';\nimport { useDropzone } from 'react-dropzone';\nimport { cva } from 'class-variance-authority';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\n\ninterface DropzoneContextType {\n src?: File[];\n accept?: DropzoneOptions['accept'];\n maxSize?: DropzoneOptions['maxSize'];\n minSize?: DropzoneOptions['minSize'];\n maxFiles?: DropzoneOptions['maxFiles'];\n}\n\nconst renderBytes = (bytes: number) => {\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(2)}${units[unitIndex]}`;\n};\n\nconst DropzoneContext = createContext<DropzoneContextType | undefined>(undefined);\n\nconst dropzoneVariants = cva('', {\n variants: {\n border: {\n default: 'border-solid',\n dashed: 'border-dashed border-foreground/50',\n },\n },\n defaultVariants: {\n border: 'default',\n },\n});\n\nexport type DropzoneProps = Omit<DropzoneOptions, 'onDrop'> & {\n src?: File[];\n className?: string;\n border?: 'default' | 'dashed';\n onDrop?: (acceptedFiles: File[], fileRejections: FileRejection[], event: DropEvent) => void;\n children?: ReactNode;\n};\n\nexport const Dropzone = ({\n accept,\n maxFiles = 1,\n maxSize,\n minSize,\n onDrop,\n onError,\n disabled,\n src,\n className,\n children,\n border,\n ...props\n}: DropzoneProps) => {\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n accept,\n maxFiles,\n maxSize,\n minSize,\n onError,\n disabled,\n onDrop: (acceptedFiles, fileRejections, event) => {\n if (fileRejections.length > 0) {\n const message = fileRejections.at(0)?.errors.at(0)?.message;\n onError?.(new Error(message));\n }\n if (acceptedFiles.length > 0) {\n onDrop?.(acceptedFiles, fileRejections, event);\n }\n },\n ...props,\n });\n\n return (\n <DropzoneContext.Provider\n key={JSON.stringify(src)}\n value={{ src, accept, maxSize, minSize, maxFiles }}>\n <Button\n data-slot='dropzone'\n data-border={border ?? 'default'}\n className={cn(\n 'relative h-auto w-full flex-col overflow-hidden p-8',\n dropzoneVariants({ border }),\n isDragActive && 'bg-muted outline-none',\n className,\n )}\n disabled={disabled}\n type='button'\n variant='outline'\n {...getRootProps()}>\n <input {...getInputProps()} disabled={disabled} />\n {children}\n </Button>\n </DropzoneContext.Provider>\n );\n};\n\nconst useDropzoneContext = () => {\n const context = useContext(DropzoneContext);\n\n if (!context) {\n throw new Error('useDropzoneContext must be used within a Dropzone');\n }\n\n return context;\n};\n\nexport interface DropzoneContentProps {\n children?: ReactNode;\n className?: string;\n}\n\nconst maxLabelItems = 3;\n\nexport const DropzoneContent = ({ children, className }: DropzoneContentProps) => {\n const { src } = useDropzoneContext();\n\n if (!src) {\n return null;\n }\n\n if (children) {\n return children;\n }\n\n return (\n <div className={cn('flex flex-col items-center justify-center', className)}>\n <div className='bg-muted text-muted-foreground flex size-8 items-center justify-center rounded-md'>\n <UploadIcon size={16} />\n </div>\n <p className='text-foreground my-2 w-full truncate text-sm font-medium'>\n {src.length > maxLabelItems\n ? `${new Intl.ListFormat('en').format(\n src.slice(0, maxLabelItems).map((file) => file.name),\n )} and ${src.length - maxLabelItems} more`\n : new Intl.ListFormat('en').format(src.map((file) => file.name))}\n </p>\n <p className='text-muted-foreground w-full text-xs font-normal text-wrap'>\n Drag and drop or click to replace\n </p>\n </div>\n );\n};\n\nexport interface DropzoneEmptyStateProps {\n children?: ReactNode;\n className?: string;\n}\n\nexport const DropzoneEmptyState = ({ children, className }: DropzoneEmptyStateProps) => {\n const { src, accept, maxSize, minSize, maxFiles } = useDropzoneContext();\n\n if (src) {\n return null;\n }\n\n if (children) {\n return children;\n }\n\n let caption = '';\n\n if (accept) {\n caption += 'Accepts ';\n caption += new Intl.ListFormat('en').format(Object.keys(accept));\n }\n\n if (minSize && maxSize) {\n caption += ` between ${renderBytes(minSize)} and ${renderBytes(maxSize)}`;\n } else if (minSize) {\n caption += ` at least ${renderBytes(minSize)}`;\n } else if (maxSize) {\n caption += ` less than ${renderBytes(maxSize)}`;\n }\n\n return (\n <div className={cn('flex flex-col items-center justify-center', className)}>\n <div className='bg-muted text-muted-foreground flex size-8 items-center justify-center rounded-md'>\n <UploadIcon size={16} />\n </div>\n <p className='text-foreground my-2 w-full text-center text-sm font-medium text-wrap'>\n Upload {maxFiles === 1 ? 'a file' : 'files'}\n </p>\n <p className='text-muted-foreground text-center text-xs font-normal text-wrap'>\n Drag and drop or click to upload\n </p>\n\n {caption && (\n <p className='text-muted-foreground text-xs font-normal text-wrap'>{caption}.</p>\n )}\n </div>\n );\n};\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nfunction Empty({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty'\n className={cn(\n 'flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-header'\n className={cn('flex max-w-sm flex-col items-center gap-2', className)}\n {...props}\n />\n );\n}\n\nconst emptyMediaVariants = cva(\n 'mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"flex size-9 shrink-0 items-center justify-center rounded-lg bg-foreground/10 text-muted-foreground [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction EmptyMedia({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot='empty-icon'\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-title'\n className={cn('cn-font-heading text-sm font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return (\n <div\n data-slot='empty-description'\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot='empty-content'\n className={cn(\n 'flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Empty, EmptyHeader, EmptyTitle, EmptyDescription, EmptyContent, EmptyMedia };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { Separator } from '@/components/ui/Separator/separator';\n\nfunction ItemGroup({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n role='list'\n data-slot='item-group'\n className={cn(\n 'group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemSeparator({ className, ...props }: ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot='item-separator'\n orientation='horizontal'\n className={cn('my-2', className)}\n {...props}\n />\n );\n}\n\nconst itemVariants = cva(\n 'group/item flex w-full flex-wrap items-center rounded-2xl border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted',\n {\n variants: {\n variant: {\n default: 'border-foreground/5 bg-foreground/5',\n outline: 'border-foreground/30',\n muted: 'border-transparent bg-background dark:text-black',\n highlighted: 'border-orange-500 bg-orange-50 dark:bg-orange-500/10',\n },\n size: {\n default: 'gap-3.5 px-4 py-3.5',\n sm: 'gap-3.5 px-3.5 py-3',\n xs: 'gap-2.5 px-3 py-2.5 in-data-[slot=dropdown-menu-content]:p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Item({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n return (\n <Comp\n data-slot='item'\n data-variant={variant}\n data-size={size}\n className={cn(itemVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nconst itemMediaVariants = cva(\n 'flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"[&_svg:not([class*='size-'])]:size-4\",\n image: 'size-10 overflow-hidden rounded-xl group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 group-data-[size=xs]/item:rounded-lg [&_img]:size-full [&_img]:object-cover',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction ItemMedia({\n className,\n variant = 'default',\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof itemMediaVariants>) {\n return (\n <div\n data-slot='item-media'\n data-variant={variant}\n className={cn(itemMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction ItemContent({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-content'\n className={cn(\n 'flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0.5 [&+[data-slot=item-content]]:flex-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemTitle({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-title'\n className={cn(\n 'line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemDescription({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot='item-description'\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary line-clamp-2 text-left text-sm font-normal [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemActions({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-actions'\n className={cn('flex items-center gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction ItemHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-header'\n className={cn('flex basis-full items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction ItemFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot='item-footer'\n className={cn('flex basis-full items-center justify-between gap-2', className)}\n {...props}\n />\n );\n}\n\nexport {\n Item,\n ItemMedia,\n ItemContent,\n ItemActions,\n ItemGroup,\n ItemSeparator,\n ItemTitle,\n ItemDescription,\n ItemHeader,\n ItemFooter,\n};\n","import { type ComponentProps } from 'react';\nimport { RadioGroup as RadioGroupPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction RadioGroup({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot='radio-group'\n className={cn('grid w-full gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot='radio-group-item'\n className={cn(\n 'group/radio-group-item peer border-input/60 bg-input/20 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary relative flex aspect-square size-4 shrink-0 rounded-full border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3',\n className,\n )}\n {...props}>\n <RadioGroupPrimitive.Indicator\n data-slot='radio-group-indicator'\n className='flex size-4 items-center justify-center'>\n <span className='bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full dark:size-2.5' />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from '@/lib/variants';\nimport { cn } from '@/lib/utils';\nimport { Loader2Icon, LoaderIcon } from 'lucide-react';\n\n// ---------------------------------------------------------------------------\n// Shared size map — reutilizado por los tres componentes\n// ---------------------------------------------------------------------------\n\nconst spinnerSizes = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-6',\n xl: 'size-8',\n} as const;\n\n// ---------------------------------------------------------------------------\n// Spinner — Loader2Icon (círculo con corte)\n// ---------------------------------------------------------------------------\n\nconst spinnerVariants = cva('animate-spin shrink-0', {\n variants: {\n size: spinnerSizes,\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerProps\n extends Omit<ComponentProps<'svg'>, 'color'>, VariantProps<typeof spinnerVariants> {}\n\nfunction Spinner({ className, size, color, ...props }: SpinnerProps) {\n return (\n <Loader2Icon\n data-slot='spinner'\n role='status'\n aria-label='Loading'\n className={cn(spinnerVariants({ size, color }), className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// SpinnerLoader — LoaderIcon (líneas rotatorias)\n// ---------------------------------------------------------------------------\n\nconst spinnerLoaderVariants = cva('animate-spin shrink-0', {\n variants: {\n size: spinnerSizes,\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerLoaderProps\n extends\n Omit<ComponentProps<'svg'>, 'color'>,\n VariantProps<typeof spinnerLoaderVariants> {}\n\nfunction SpinnerLoader({ className, size, color, ...props }: SpinnerLoaderProps) {\n return (\n <LoaderIcon\n data-slot='spinner-loader'\n role='status'\n aria-label='Loading'\n className={cn(spinnerLoaderVariants({ size, color }), className)}\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// SpinnerDots — tres puntos con animación de ola\n// ---------------------------------------------------------------------------\n\nconst spinnerDotsVariants = cva('flex items-center', {\n variants: {\n size: {\n sm: 'gap-[2px] [&>span]:size-1.5',\n md: 'gap-[3px] [&>span]:size-2',\n lg: 'gap-1 [&>span]:size-2.5',\n xl: 'gap-1.5 [&>span]:size-3',\n },\n color: {\n current: 'text-current',\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n destructive: 'text-destructive',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'current',\n },\n});\n\nexport interface SpinnerDotsProps extends VariantProps<typeof spinnerDotsVariants> {\n className?: string;\n}\n\nfunction SpinnerDots({ className, size, color }: SpinnerDotsProps) {\n return (\n <span\n data-slot='spinner-dots'\n role='status'\n aria-label='Loading'\n className={cn(spinnerDotsVariants({ size, color }), className)}>\n {[0, 1, 2].map((i) => (\n <span\n key={i}\n className='rounded-full bg-current'\n style={{\n animation: 'dotWave 1.2s ease-in-out infinite',\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes dotWave {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.3; }\n 30% { transform: translateY(-4px); opacity: 1; }\n }\n `}</style>\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n\nexport {\n Spinner,\n SpinnerLoader,\n SpinnerDots,\n spinnerVariants,\n spinnerLoaderVariants,\n spinnerDotsVariants,\n};\n","import { type ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-4xl border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-transparent dark:hover:bg-input/30',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost: 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50',\n destructive:\n 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40',\n link: 'text-primary underline-offset-4 hover:underline',\n\n },\n size: {\n default:\n 'h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5',\n xs: \"h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3\",\n sm: 'h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n lg: 'h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n icon: 'size-9',\n 'icon-xs': \"size-6 [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot='button'\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot='input'\n className={cn(\n 'bg-input/50 file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 h-9 w-full min-w-0 rounded-3xl border border-transparent px-3 py-1 text-base transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { type ComponentProps } from 'react';\nimport { Select as SelectPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon, CheckIcon, ChevronUpIcon } from 'lucide-react';\n\nfunction Select({ ...props }: ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot='select' {...props} />;\n}\n\nfunction SelectGroup({ className, ...props }: ComponentProps<typeof SelectPrimitive.Group>) {\n return (\n <SelectPrimitive.Group\n data-slot='select-group'\n className={cn('scroll-my-1.5 p-1.5', className)}\n {...props}\n />\n );\n}\n\nfunction SelectValue({ ...props }: ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot='select-value' {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot='select-trigger'\n data-size={size}\n className={cn(\n \"bg-input/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex w-fit items-center justify-between gap-1.5 rounded-3xl border border-transparent px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow,background-color] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className='text-muted-foreground pointer-events-none size-4' />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'item-aligned',\n align = 'center',\n ...props\n}: ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot='select-content'\n data-align-trigger={position === 'item-aligned'}\n className={cn(\n 'bg-popover text-popover-foreground ring-foreground/5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-3xl shadow-lg ring-1 duration-100 data-[align-trigger=true]:animate-none',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n align={align}\n {...props}>\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n data-position={position}\n className={cn(\n 'data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)',\n position === 'popper' && '',\n )}>\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-3 py-2.5 text-xs', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot='select-item'\n className={cn(\n \"rounded-2x3 focus:bg-muted not-data-[variant=destructive]:focus:**:text-accent-muted-foreground relative flex w-full cursor-default items-center gap-2 py-2 pr-8 pl-3 text-sm font-medium outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}>\n <span className='pointer-events-none absolute right-2 flex size-4 items-center justify-center'>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className='pointer-events-none' />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot='select-separator'\n className={cn('bg-border pointer-events-none -mx-1.5 my-1.5 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot='select-scroll-up-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <ChevronUpIcon />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot='select-scroll-down-button'\n className={cn(\n \"bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <ChevronDownIcon />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import Color from 'color';\nimport { PipetteIcon } from 'lucide-react';\nimport { Slider } from 'radix-ui';\nimport {\n type ComponentProps,\n createContext,\n type HTMLAttributes,\n memo,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Button } from '@/components/compounds/ColorPicker/button';\nimport { Input } from '@/components/compounds/ColorPicker/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/compounds/ColorPicker/select';\nimport { cn } from '@/lib/utils';\n\ninterface ColorPickerContextValue {\n hue: number;\n saturation: number;\n lightness: number;\n alpha: number;\n mode: string;\n setHue: (hue: number) => void;\n setSaturation: (saturation: number) => void;\n setLightness: (lightness: number) => void;\n setAlpha: (alpha: number) => void;\n setMode: (mode: string) => void;\n}\n\nconst ColorPickerContext = createContext<ColorPickerContextValue | undefined>(undefined);\n\nexport const useColorPicker = () => {\n const context = useContext(ColorPickerContext);\n\n if (!context) {\n throw new Error('useColorPicker must be used within a ColorPickerProvider');\n }\n\n return context;\n};\n\nexport type ColorPickerProps = Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n value?: Parameters<typeof Color>[0];\n defaultValue?: Parameters<typeof Color>[0];\n onChange?: (value: [number, number, number, number]) => void;\n};\n\nexport const ColorPicker = ({\n value,\n defaultValue = '#000000',\n onChange,\n className,\n ...props\n}: ColorPickerProps) => {\n const baseColor = value !== undefined ? Color(value) : Color(defaultValue);\n\n const [hue, setHue] = useState(baseColor.hue());\n const [saturation, setSaturation] = useState(baseColor.saturationl());\n const [lightness, setLightness] = useState(baseColor.lightness());\n const [alpha, setAlpha] = useState(baseColor.alpha() * 100);\n const [mode, setMode] = useState('hex');\n\n const onChangeRef = useRef(onChange);\n const mounted = useRef(false);\n useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n // Update color when controlled value changes\n useEffect(() => {\n if (value) {\n const color = Color(value);\n\n setHue(color.hue());\n setSaturation(color.saturationl());\n setLightness(color.lightness());\n setAlpha(color.alpha() * 100);\n }\n }, [value]);\n\n // Notify parent of changes — onChange ref avoids infinite loop when caller passes inline arrow fn\n useEffect(() => {\n if (!mounted.current) {\n mounted.current = true;\n return;\n }\n if (onChangeRef.current) {\n const color = Color.hsl(hue, saturation, lightness).alpha(alpha / 100);\n const rgba = color.rgb().array();\n\n onChangeRef.current([rgba[0], rgba[1], rgba[2], alpha / 100]);\n }\n }, [hue, saturation, lightness, alpha]);\n\n return (\n <ColorPickerContext.Provider\n value={{\n hue,\n saturation,\n lightness,\n alpha,\n mode,\n setHue,\n setSaturation,\n setLightness,\n setAlpha,\n setMode,\n }}>\n <div className={cn('flex size-full flex-col gap-4', className)} {...props} />\n </ColorPickerContext.Provider>\n );\n};\n\nexport type ColorPickerSelectionProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ColorPickerSelection = memo(({ className, ...props }: ColorPickerSelectionProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [positionX, setPositionX] = useState(0);\n const [positionY, setPositionY] = useState(0);\n const { hue, setSaturation, setLightness } = useColorPicker();\n\n const backgroundGradient = useMemo(() => {\n return `linear-gradient(0deg, rgba(0,0,0,1), rgba(0,0,0,0)),\n linear-gradient(90deg, rgba(255,255,255,1), rgba(255,255,255,0)),\n hsl(${hue}, 100%, 50%)`;\n }, [hue]);\n\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n if (!(isDragging && containerRef.current)) {\n return;\n }\n const rect = containerRef.current.getBoundingClientRect();\n const x = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));\n const y = Math.max(0, Math.min(1, (event.clientY - rect.top) / rect.height));\n setPositionX(x);\n setPositionY(y);\n setSaturation(x * 100);\n const topLightness = x < 0.01 ? 100 : 50 + 50 * (1 - x);\n const lightness = topLightness * (1 - y);\n\n setLightness(lightness);\n },\n [isDragging, setSaturation, setLightness],\n );\n\n useEffect(() => {\n const handlePointerUp = () => setIsDragging(false);\n\n if (isDragging) {\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n }\n\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n };\n }, [isDragging, handlePointerMove]);\n\n return (\n <div\n className={cn('relative size-full cursor-crosshair rounded', className)}\n onPointerDown={(e) => {\n e.preventDefault();\n setIsDragging(true);\n handlePointerMove(e.nativeEvent);\n }}\n ref={containerRef}\n style={{\n background: backgroundGradient,\n }}\n {...props}>\n <div\n className='pointer-events-none absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white'\n style={{\n left: `${positionX * 100}%`,\n top: `${positionY * 100}%`,\n boxShadow: '0 0 0 1px rgba(0,0,0,0.5)',\n }}\n />\n </div>\n );\n});\n\nColorPickerSelection.displayName = 'ColorPickerSelection';\n\nexport type ColorPickerHueProps = ComponentProps<typeof Slider.Root>;\n\nexport const ColorPickerHue = ({ className, ...props }: ColorPickerHueProps) => {\n const { hue, setHue } = useColorPicker();\n\n return (\n <Slider.Root\n className={cn('relative flex h-4 w-full touch-none', className)}\n max={360}\n onValueChange={([hue]) => setHue(hue)}\n step={1}\n value={[hue]}\n {...props}>\n <Slider.Track className='relative my-0.5 h-3 w-full grow rounded-full bg-[linear-gradient(90deg,#FF0000,#FFFF00,#00FF00,#00FFFF,#0000FF,#FF00FF,#FF0000)]'>\n <Slider.Range className='absolute h-full' />\n </Slider.Track>\n <Slider.Thumb className='border-primary/50 bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50' />\n </Slider.Root>\n );\n};\n\nexport type ColorPickerAlphaProps = ComponentProps<typeof Slider.Root>;\n\nexport const ColorPickerAlpha = ({ className, ...props }: ColorPickerAlphaProps) => {\n const { alpha, setAlpha, hue, saturation, lightness } = useColorPicker();\n const solidColor = Color.hsl(hue, saturation, lightness).hex();\n\n return (\n <Slider.Root\n className={cn('relative flex h-4 w-full touch-none', className)}\n max={100}\n onValueChange={([alpha]) => setAlpha(alpha)}\n step={1}\n value={[alpha]}\n {...props}>\n <Slider.Track\n className='relative my-0.5 h-3 w-full grow rounded-full'\n style={{\n background:\n 'url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==\") left center',\n }}>\n <div\n className='absolute inset-0 rounded-full'\n style={{ background: `linear-gradient(to right, transparent, ${solidColor})` }}\n />\n <Slider.Range className='absolute h-full rounded-full bg-transparent' />\n </Slider.Track>\n <Slider.Thumb\n className='border-primary/50 focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:ring-1 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50'\n style={{ backgroundColor: solidColor }}\n />\n </Slider.Root>\n );\n};\n\nexport type ColorPickerEyeDropperProps = ComponentProps<typeof Button>;\n\nexport const ColorPickerEyeDropper = ({ className, ...props }: ColorPickerEyeDropperProps) => {\n const { setHue, setSaturation, setLightness, setAlpha } = useColorPicker();\n\n const handleEyeDropper = async () => {\n try {\n // @ts-expect-error - EyeDropper API is experimental\n const eyeDropper = new EyeDropper();\n const result = await eyeDropper.open();\n const color = Color(result.sRGBHex);\n const [h, s, l] = color.hsl().array();\n\n setHue(h);\n setSaturation(s);\n setLightness(l);\n setAlpha(100);\n } catch (error) {\n console.error('EyeDropper failed:', error);\n }\n };\n\n return (\n <Button\n className={cn('text-muted-foreground shrink-0', className)}\n onClick={handleEyeDropper}\n size='icon'\n type='button'\n variant='outline'\n {...props}>\n <PipetteIcon size={16} />\n </Button>\n );\n};\n\nexport type ColorPickerOutputProps = ComponentProps<typeof SelectTrigger>;\n\nconst formats = ['hex', 'css'];\n\nexport const ColorPickerOutput = ({ ...props }: ColorPickerOutputProps) => {\n const { mode, setMode } = useColorPicker();\n\n return (\n <Select onValueChange={setMode} value={mode}>\n <SelectTrigger\n className='bg-background h-4 w-19 shrink-0 rounded-sm text-xs'\n {...props}>\n <SelectValue placeholder='Mode' />\n </SelectTrigger>\n <SelectContent>\n {formats.map((format) => (\n <SelectItem\n className='bg-background rounded-none text-xs'\n key={format}\n value={format}>\n {format.toUpperCase()}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n};\n\ntype PercentageInputProps = Omit<ComponentProps<typeof Input>, 'onChange' | 'value'> & {\n value: number;\n onChange: (value: number) => void;\n};\n\nconst PercentageInput = ({ value, onChange, className, ...props }: PercentageInputProps) => {\n const [localValue, setLocalValue] = useState(String(value));\n\n useEffect(() => {\n setLocalValue(String(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n\n if (!/^\\d*\\.?\\d*$/.test(raw)) return;\n\n const num = parseFloat(raw);\n\n if (num > 100) {\n setLocalValue('100');\n onChange(100);\n return;\n }\n\n setLocalValue(raw);\n if (!isNaN(num)) {\n onChange(num);\n }\n };\n\n return (\n <div className='relative'>\n <Input\n type='text'\n inputMode='decimal'\n value={localValue}\n onChange={handleChange}\n {...props}\n className={cn(\n 'bg-muted h-8 w-[3.5rem] [appearance:textfield] rounded-md px-2 text-xs shadow-none [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\n className,\n )}\n />\n <span className='text-muted-foreground absolute top-1/2 right-2 -translate-y-1/2 text-xs'>\n %\n </span>\n </div>\n );\n};\n\nexport type ColorPickerFormatProps = HTMLAttributes<HTMLDivElement>;\n\nexport const ColorPickerFormat = ({ className, ...props }: ColorPickerFormatProps) => {\n const { hue, saturation, lightness, alpha, setAlpha, mode } = useColorPicker();\n const color = Color.hsl(hue, saturation, lightness, alpha / 100);\n\n if (mode === 'hex') {\n const hex = color.hex();\n const alphaHex = Math.round((alpha / 100) * 255)\n .toString(16)\n .padStart(2, '0')\n .toUpperCase();\n const displayHex = alpha < 100 ? `${hex}${alphaHex}` : hex;\n\n return (\n <div\n className={cn(\n 'relative flex w-full items-center gap-1 -space-x-px rounded-md',\n className,\n )}\n {...props}>\n <Input\n className='bg-muted h-8 w-[5rem] rounded-md px-2 text-xs'\n readOnly\n type='text'\n value={displayHex}\n />\n <PercentageInput value={alpha} onChange={setAlpha} />\n </div>\n );\n }\n\n if (mode === 'css') {\n const rgb = color\n .rgb()\n .array()\n .map((value) => Math.round(value));\n\n return (\n <div className={cn('w-full rounded-md', className)} {...props}>\n <Input\n className='bg-muted h-8 w-full rounded-md px-2 text-xs shadow-none'\n readOnly\n type='text'\n value={`rgba(${rgb.join(', ')}, ${alpha}%)`}\n {...props}\n />\n </div>\n );\n }\n return null;\n};\n\nexport type ColorPickerPresetsProps = HTMLAttributes<HTMLDivElement> & {\n colors: string[];\n};\n\nexport const ColorPickerPresets = ({ colors, className, ...props }: ColorPickerPresetsProps) => {\n const { hue, saturation, lightness, alpha, setHue, setSaturation, setLightness, setAlpha } =\n useColorPicker();\n const currentHex = Color.hsl(hue, saturation, lightness, alpha / 100).hex();\n\n return (\n <div className={cn('flex flex-wrap gap-1.5', className)} {...props}>\n {colors.map((hex) => {\n const isActive = Color(hex).hex().toUpperCase() === currentHex.toUpperCase();\n\n return (\n <button\n key={hex}\n type='button'\n className={cn(\n 'size-5 cursor-pointer rounded-[3px] border transition-all',\n 'hover:scale-110 hover:shadow-md',\n isActive && 'ring-ring ring-offset-background ring-2 ring-offset-1',\n )}\n style={{ backgroundColor: hex }}\n onClick={() => {\n const color = Color(hex);\n const [h, s, l] = color.hsl().array();\n\n setHue(h);\n setSaturation(s);\n setLightness(l);\n setAlpha(100);\n }}\n aria-label={hex}\n title={hex}\n />\n );\n })}\n </div>\n );\n};\n\nColorPickerPresets.displayName = 'ColorPickerPresets';\n","import { useMemo, useState, type ComponentProps } from 'react';\nimport { format } from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\nimport type { DateRange } from 'react-day-picker';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { Calendar } from '@/components/ui/Calendar/calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\n\ninterface DatePickerSingleProps {\n mode?: 'single';\n selected?: Date;\n onSelect?: (date: Date | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n fromDate?: Date;\n toDate?: Date;\n}\n\ninterface DatePickerRangeProps {\n mode: 'range';\n selected?: DateRange;\n onSelect?: (range: DateRange | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n fromDate?: Date;\n toDate?: Date;\n}\n\ninterface DatePickerProps {\n mode?: 'single' | 'range';\n selected?: Date | DateRange;\n onSelect?: ((date: Date | undefined) => void) | ((range: DateRange | undefined) => void);\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n fromDate?: Date;\n toDate?: Date;\n}\n\nfunction DatePicker({\n mode = 'single',\n selected,\n onSelect,\n placeholder = 'Pick a date',\n disabled = false,\n className,\n fromDate,\n toDate,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n\n const label = useMemo(() => {\n if (mode === 'range') {\n const range = selected as DateRange | undefined;\n if (range?.from && range?.to)\n return `${format(range.from, 'MMM d, yyyy')} – ${format(range.to, 'MMM d, yyyy')}`;\n if (range?.from) return `${format(range.from, 'MMM d, yyyy')} – …`;\n return placeholder;\n }\n const date = selected as Date | undefined;\n return date ? format(date, 'MMM d, yyyy') : placeholder;\n }, [mode, selected, placeholder]);\n\n const hasValue =\n mode === 'range'\n ? !!(selected as DateRange | undefined)?.from\n : !!(selected as Date | undefined);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n data-slot='date-picker-trigger'\n variant='primary'\n disabled={disabled}\n className={cn(\n 'w-60 justify-start gap-2 font-normal',\n !hasValue && 'text-white',\n className,\n )}>\n <CalendarIcon className='size-4 shrink-0' />\n <span className='truncate'>{label}</span>\n </Button>\n </PopoverTrigger>\n <PopoverContent data-slot='date-picker-content' className='w-auto p-0' align='start'>\n {mode === 'range' ? (\n <Calendar\n {...({\n mode: 'range',\n selected: selected as DateRange | undefined,\n onSelect: (range: DateRange | undefined) => {\n (onSelect as DatePickerRangeProps['onSelect'])?.(range);\n if (range?.to) setOpen(false);\n },\n fromDate,\n toDate,\n numberOfMonths: 2,\n initialFocus: true,\n } as unknown as ComponentProps<typeof Calendar>)}\n />\n ) : (\n <Calendar\n {...({\n mode: 'single',\n selected: selected as Date | undefined,\n onSelect: (date: Date | undefined) => {\n (onSelect as DatePickerSingleProps['onSelect'])?.(date);\n setOpen(false);\n },\n fromDate,\n toDate,\n initialFocus: true,\n } as unknown as ComponentProps<typeof Calendar>)}\n />\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DatePicker };\nexport type { DatePickerProps, DatePickerSingleProps, DatePickerRangeProps, DateRange };\n","import { Fragment, forwardRef, useCallback, type HTMLAttributes, type ReactNode, type SVGAttributes } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { BellIcon, CircleHelpIcon, ChevronDownIcon, SearchIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { sanitizeHref } from '@/utils/urlSecurity';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/Avatar/avatar';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface NavbarDropdownItem {\n href: string;\n label: string;\n icon?: ReactNode;\n}\n\nexport interface NavbarNavLink {\n href: string;\n label: string;\n active?: boolean;\n icon?: ReactNode;\n /** If provided, hovering this link shows a dropdown */\n dropdownItems?: NavbarDropdownItem[];\n}\n\nexport interface NavbarUtilityLink {\n href: string;\n label: string;\n}\n\nexport interface NavbarNotification {\n id: string;\n title: string;\n description?: string;\n read?: boolean;\n timestamp?: string;\n}\n\nexport interface NavbarProps extends HTMLAttributes<HTMLElement> {\n logo?: ReactNode;\n brandName?: string;\n utilityLinks?: NavbarUtilityLink[];\n navigationLinks?: NavbarNavLink[];\n notificationCount?: number;\n notifications?: NavbarNotification[];\n avatarSrc?: string;\n avatarFallback?: string;\n onNavLinkClick?: (href: string) => void;\n onSearchClick?: () => void;\n onHelpClick?: () => void;\n onAvatarClick?: () => void;\n onNotificationClick?: (id: string) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Default Logo\n// ---------------------------------------------------------------------------\n\nconst Logo = (props: SVGAttributes<SVGElement>) => (\n <svg\n aria-label='Logo'\n role='img'\n fill='none'\n height='1em'\n viewBox='0 0 324 323'\n width='1em'\n xmlns='http://www.w3.org/2000/svg'\n {...props}>\n <rect fill='currentColor' height='323' rx='161.5' width='323' x='0.5' />\n <circle cx='162' cy='161.5' fill='white' r='60' />\n </svg>\n);\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst defaultUtilityLinks: NavbarUtilityLink[] = [\n { href: '#profile', label: 'My profile' },\n { href: '#documents', label: 'Documents' },\n { href: '#settings', label: 'Settings' },\n];\n\nconst defaultNavigationLinks: NavbarNavLink[] = [\n { href: '#', label: 'Home' },\n {\n href: '#vacations',\n label: 'Vacations',\n dropdownItems: [\n { href: '#vacations/request', label: 'Request vacation' },\n { href: '#vacations/history', label: 'History' },\n { href: '#vacations/calendar', label: 'Calendar' },\n ],\n },\n { href: '#payroll', label: 'Payroll', active: true },\n { href: '#apps', label: 'Apps' },\n { href: '#help', label: 'Help' },\n];\n\n// ---------------------------------------------------------------------------\n// NavLink with optional hover dropdown\n// ---------------------------------------------------------------------------\n\nfunction NavLinkItem({\n link,\n onNavLinkClick,\n}: {\n link: NavbarNavLink;\n onNavLinkClick?: (href: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const hasDropdown = !!link.dropdownItems?.length;\n\n return (\n <div\n ref={ref}\n className='relative flex h-14 items-center'\n onMouseEnter={() => hasDropdown && setOpen(true)}\n onMouseLeave={() => hasDropdown && setOpen(false)}>\n <a\n href={sanitizeHref(link.href)}\n onClick={(e) => {\n e.preventDefault();\n onNavLinkClick?.(link.href);\n }}\n className={cn(\n 'relative flex h-14 items-center gap-1.5 px-4 text-sm transition-colors select-none',\n link.active\n ? 'text-foreground after:bg-secondary font-semibold after:absolute after:right-0 after:bottom-0 after:left-0 after:h-0.5 after:rounded-full'\n : 'text-muted-foreground hover:text-foreground',\n )}>\n {link.icon}\n {link.label}\n {hasDropdown && (\n <ChevronDownIcon\n className={cn(\n 'size-3 transition-transform duration-200',\n open && 'rotate-180',\n )}\n />\n )}\n </a>\n\n {/* Dropdown */}\n {hasDropdown && (\n <div\n className={cn(\n 'border-border bg-popover absolute top-full left-0 z-50 min-w-44 rounded-lg border shadow-lg transition-all duration-150',\n open\n ? 'pointer-events-auto translate-y-0 opacity-100'\n : 'pointer-events-none -translate-y-1 opacity-0',\n )}>\n <div className='p-1'>\n {link.dropdownItems!.map((item, i) => (\n <a\n key={i}\n href={sanitizeHref(item.href)}\n onClick={(e) => {\n e.preventDefault();\n onNavLinkClick?.(item.href);\n setOpen(false);\n }}\n className='text-foreground hover:bg-muted flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors'>\n {item.icon}\n {item.label}\n </a>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Navbar\n// ---------------------------------------------------------------------------\n\n/**\n * @remarks\n * Navigation dropdowns use `absolute` positioning without a Portal. If this\n * component is placed inside a container with `overflow-hidden`, dropdowns will\n * be clipped. Ensure all ancestor containers use `overflow-visible`.\n */\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(\n (\n {\n className,\n logo = <Logo />,\n brandName = 'Total Portal',\n utilityLinks = defaultUtilityLinks,\n navigationLinks = defaultNavigationLinks,\n notificationCount = 1,\n notifications,\n avatarSrc,\n avatarFallback,\n onNavLinkClick,\n onSearchClick,\n onHelpClick,\n onAvatarClick,\n onNotificationClick,\n ...props\n },\n ref,\n ) => {\n const containerRef = useRef<HTMLElement>(null);\n const notifRef = useRef<HTMLDivElement>(null);\n const [isMobile, setIsMobile] = useState(false);\n const [notifOpen, setNotifOpen] = useState(false);\n\n const notifArray = Array.isArray(notifications) ? notifications : undefined;\n const unreadCount = notifArray\n ? notifArray.filter((n) => !n.read).length\n : notificationCount;\n\n useEffect(() => {\n if (!notifOpen) return;\n const handler = (e: MouseEvent) => {\n if (notifRef.current && !notifRef.current.contains(e.target as Node)) {\n setNotifOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [notifOpen]);\n\n useEffect(() => {\n const checkWidth = () => {\n if (containerRef.current) {\n setIsMobile(containerRef.current.offsetWidth < 768);\n }\n };\n checkWidth();\n const ro = new ResizeObserver(checkWidth);\n if (containerRef.current) ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, []);\n\n const combinedRef = useCallback(\n (node: HTMLElement | null) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n return (\n <header\n ref={combinedRef}\n className={cn(\n 'sticky top-0 z-50 w-full overflow-visible shadow-sm [&_*]:no-underline',\n className,\n )}\n {...props}>\n {/* ── Row 2: Brand + Nav bar ── */}\n <div className='bg-background border-border border-b px-4 md:px-6'>\n <div className='relative mx-auto flex h-14 max-w-screen-2xl items-center gap-6 overflow-visible'>\n {/* Logo + brand name */}\n <div className='flex shrink-0 items-center gap-3'>\n <span className='flex size-30 items-center justify-center text-xl text-white'>\n {logo}\n </span>\n {!isMobile && (\n <span className='text-primary font-bold'>{brandName}</span>\n )}\n </div>\n\n {/* Search */}\n {!isMobile && (\n <div className='relative w-80'>\n <SearchIcon className='text-muted-foreground/50 pointer-events-none absolute top-1/2 left-3 size-3.5 -translate-y-1/2' />\n <input\n type='text'\n placeholder='Search people, apps, requests ...'\n onClick={onSearchClick}\n className='border-border bg-muted text-foreground placeholder:text-muted-foreground/60 focus:border-primary h-8 w-full rounded-full border pr-4 pl-10 text-sm transition-colors outline-none'\n />\n </div>\n )}\n\n {/* Nav links */}\n <nav className='ml-auto flex h-full items-center'>\n {navigationLinks.map((link, i) => (\n <NavLinkItem key={i} link={link} onNavLinkClick={onNavLinkClick} />\n ))}\n </nav>\n </div>\n </div>\n {/* ── Row 1: Utility bar ── */}\n <div className='bg-background border-border border-b px-4 md:px-6'>\n <div className='mx-auto flex h-9 max-w-screen-2xl items-center justify-between'>\n <nav className='flex items-center'>\n {utilityLinks.map((link, i) => (\n <Fragment key={i}>\n {i > 0 && (\n <span className='text-border mx-3 select-none'>|</span>\n )}\n <a\n href={sanitizeHref(link.href)}\n className='text-muted-foreground hover:text-foreground text-xs transition-colors'>\n {link.label}\n </a>\n </Fragment>\n ))}\n </nav>\n\n <div className='flex items-center gap-1'>\n <div ref={notifRef} className='relative'>\n <button\n type='button'\n onClick={() => notifArray && setNotifOpen((o) => !o)}\n className='text-muted-foreground hover:text-foreground hover:bg-muted relative flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors'>\n <BellIcon className='size-3.5' />\n {unreadCount > 0 && (\n <span className='bg-secondary absolute top-1 right-1 flex size-1.5 rounded-full' />\n )}\n </button>\n {notifArray && (\n <div\n className={cn(\n 'border-border bg-popover absolute right-0 top-full z-50 w-80 overflow-hidden rounded-lg border shadow-lg transition-all duration-150',\n notifOpen\n ? 'pointer-events-auto translate-y-1 opacity-100'\n : 'pointer-events-none -translate-y-1 opacity-0',\n )}>\n <div className='border-border border-b px-4 py-2'>\n <p className='text-sm font-semibold'>Notifications</p>\n </div>\n <div className='max-h-80 overflow-y-auto'>\n {notifArray.length === 0 ? (\n <p className='text-muted-foreground px-4 py-6 text-center text-sm'>\n No notifications\n </p>\n ) : (\n notifArray.map((n) => (\n <button\n key={n.id}\n type='button'\n onClick={() => {\n onNotificationClick?.(n.id);\n setNotifOpen(false);\n }}\n className={cn(\n 'hover:bg-muted flex w-full items-start gap-3 px-4 py-3 text-left transition-colors',\n !n.read && 'bg-muted/40',\n )}>\n <div className='min-w-0 flex-1'>\n <p\n className={cn(\n 'text-sm',\n !n.read && 'font-semibold',\n )}>\n {n.title}\n </p>\n {n.description && (\n <p className='text-muted-foreground mt-0.5 truncate text-xs'>\n {n.description}\n </p>\n )}\n {n.timestamp && (\n <p className='text-muted-foreground mt-1 text-xs'>\n {n.timestamp}\n </p>\n )}\n </div>\n {!n.read && (\n <span className='bg-secondary mt-1.5 size-2 shrink-0 rounded-full' />\n )}\n </button>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n <button\n type='button'\n onClick={onHelpClick}\n className='text-muted-foreground hover:text-foreground hover:bg-muted flex size-7 cursor-pointer items-center justify-center rounded-md transition-colors'>\n <CircleHelpIcon className='size-3.5' />\n </button>\n {(avatarSrc || avatarFallback) && (\n <button\n type='button'\n onClick={onAvatarClick}\n className='ml-1 cursor-pointer rounded-full'>\n <Avatar size='sm'>\n {avatarSrc && <AvatarImage src={avatarSrc} alt={avatarFallback ?? 'User avatar'} />}\n <AvatarFallback>{avatarFallback}</AvatarFallback>\n </Avatar>\n </button>\n )}\n </div>\n </div>\n </div>\n </header>\n );\n },\n);\n\nNavbar.displayName = 'Navbar';\n\nexport { Logo };\n","import { type ComponentProps } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { NavigationMenu as NavigationMenuPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { ChevronDownIcon } from 'lucide-react';\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean;\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot='navigation-menu'\n data-viewport={viewport}\n className={cn(\n 'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',\n className,\n )}\n {...props}>\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n );\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot='navigation-menu-list'\n className={cn(\n 'group flex flex-1 list-none items-center justify-center gap-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot='navigation-menu-item'\n className={cn('relative', className)}\n {...props}\n />\n );\n}\n\nconst navigationMenuTriggerStyle = cva(\n 'group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-3xl px-4.5 py-2.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/30 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-[state=open]:bg-muted/50 data-[state=open]:hover:bg-muted data-[state=open]:focus:bg-muted',\n);\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot='navigation-menu-trigger'\n className={cn(navigationMenuTriggerStyle(), 'group', className)}\n {...props}>\n {children}{' '}\n <ChevronDownIcon\n className='relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180'\n aria-hidden='true'\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot='navigation-menu-content'\n className={cn(\n 'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:ring-foreground/5 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out group-data-[viewport=false]/navigation-menu:dark:ring-foreground/10 group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 top-0 left-0 w-full p-2.5 pr-3 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-3xl group-data-[viewport=false]/navigation-menu:shadow-lg group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div className={cn('absolute top-full left-0 isolate z-50 flex justify-center')}>\n <NavigationMenuPrimitive.Viewport\n data-slot='navigation-menu-viewport'\n className={cn(\n 'origin-top-center bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 data-[state=open]:animate-in data-[state=open]:zoom-in-90 data-[state=closed]:animate-out data-[state=closed]:zoom-out-90 relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden rounded-3xl shadow-lg ring-1 duration-100 md:w-(--radix-navigation-menu-viewport-width)',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot='navigation-menu-link'\n className={cn(\n \"hover:bg-muted focus:bg-muted focus-visible:ring-ring/30 data-[active=true]:bg-muted/50 data-[active=true]:hover:bg-muted data-[active=true]:focus:bg-muted flex items-center gap-1.5 rounded-3xl p-3 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-2xl [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot='navigation-menu-indicator'\n className={cn(\n 'data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in top-full z-1 flex h-1.5 items-end justify-center overflow-hidden',\n className,\n )}\n {...props}>\n <div className='bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md' />\n </NavigationMenuPrimitive.Indicator>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n};\n","import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\ninterface AbilityContextValue {\n can: (permissions: string | string[], mode?: 'any' | 'all') => boolean;\n setAbilities: (permissions: string[]) => void;\n clearAbilities: () => void;\n}\n\ninterface AbilityProviderProps {\n children: ReactNode;\n permissions?: string[];\n}\n\n/**\n * @param pattern - an entry from the user's grant set (may contain `*` as a segment wildcard)\n * @param permission - the permission being requested (from `Can.perform`)\n */\nfunction matchPermission(pattern: string, permission: string): boolean {\n if (pattern === '*') return true;\n if (pattern === permission) return true;\n const patternParts = pattern.split('.');\n const permParts = permission.split('.');\n if (patternParts.length !== permParts.length) return false;\n return patternParts.every((part, i) => part === '*' || part === permParts[i]);\n}\n\nfunction matchesAny(permissionSet: Set<string>, permission: string): boolean {\n if (permissionSet.has(permission)) return true;\n for (const pattern of permissionSet) {\n if (matchPermission(pattern, permission)) return true;\n }\n return false;\n}\n\nconst AbilityContext = createContext<AbilityContextValue | undefined>(undefined);\nAbilityContext.displayName = 'AbilityContext';\n\nfunction AbilityProvider({ children, permissions }: AbilityProviderProps) {\n const [permissionSet, setPermissionSet] = useState<Set<string>>(\n () => new Set(permissions ?? []),\n );\n\n const can = useCallback(\n (perms: string | string[], mode: 'any' | 'all' = 'any'): boolean => {\n const list = Array.isArray(perms) ? perms : [perms];\n if (list.length === 0) return false;\n if (permissionSet.has('*')) return true;\n if (mode === 'all') {\n return list.every((p) => matchesAny(permissionSet, p));\n }\n return list.some((p) => matchesAny(permissionSet, p));\n },\n [permissionSet],\n );\n\n const setAbilities = useCallback((perms: string[]) => {\n setPermissionSet(new Set(perms));\n }, []);\n\n const clearAbilities = useCallback(() => {\n setPermissionSet(new Set());\n }, []);\n\n // Sync from the controlled `permissions` prop only when its CONTENT changes.\n // Comparing by content (not reference) avoids two footguns:\n // 1. An inline `permissions={[...]}` array is a new reference every render —\n // a reference-based dependency would re-sync (and wipe imperative\n // setAbilities/clearAbilities calls) on every parent re-render.\n // 2. When `permissions` is undefined (uncontrolled / imperative usage),\n // we never sync, so setAbilities/clearAbilities are the source of truth.\n const syncedKey = useRef(permissions ? permissions.join('|') : null);\n useEffect(() => {\n if (permissions === undefined) return;\n const key = permissions.join('|');\n if (key === syncedKey.current) return;\n syncedKey.current = key;\n setPermissionSet(new Set(permissions));\n }, [permissions]);\n\n const value = useMemo(\n () => ({ can, setAbilities, clearAbilities }),\n [can, setAbilities, clearAbilities],\n );\n\n return <AbilityContext.Provider value={value}>{children}</AbilityContext.Provider>;\n}\n\nfunction useAbility(): AbilityContextValue {\n const context = useContext(AbilityContext);\n if (!context) {\n throw new Error('useAbility must be used within an AbilityProvider');\n }\n return context;\n}\n\nfunction useCan(permissions: string | string[], mode: 'any' | 'all' = 'any'): boolean {\n const { can } = useAbility();\n return can(permissions, mode);\n}\n\nexport { AbilityProvider, useAbility, useCan, matchPermission };\nexport type { AbilityContextValue, AbilityProviderProps };\n","import { type ReactNode } from 'react';\nimport { useAbility } from './ability-context';\n\ninterface CanProps {\n permission: string | string[];\n mode?: 'any' | 'all';\n negate?: boolean;\n fallback?: ReactNode;\n children: ReactNode | ((allowed: boolean) => ReactNode);\n}\n\ntype CanNotProps = Omit<CanProps, 'negate'>;\n\n/** Renders children when the user has the required permission(s). Requires `AbilityProvider` in the tree. */\nfunction Can({ permission, mode = 'any', negate = false, fallback = null, children }: CanProps) {\n const { can } = useAbility();\n const hasPermission = can(permission, mode);\n const show = negate ? !hasPermission : hasPermission;\n\n if (typeof children === 'function') {\n return <>{children(show)}</>;\n }\n return show ? <>{children}</> : <>{fallback}</>;\n}\n\nCan.displayName = 'Can';\n\n/** Renders children when the user does NOT have the required permission(s). Alias for `<Can negate />`. Requires `AbilityProvider` in the tree. */\nfunction CanNot({ permission, mode = 'any', fallback = null, children }: CanNotProps) {\n return (\n <Can permission={permission} mode={mode} negate fallback={fallback}>\n {children}\n </Can>\n );\n}\n\nCanNot.displayName = 'CanNot';\n\nexport { Can, CanNot };\nexport type { CanProps, CanNotProps };\n","import { Children, cloneElement, createContext, forwardRef, isValidElement, useCallback, useContext, useEffect, useRef, useState, type ButtonHTMLAttributes, type ComponentProps, type HTMLAttributes, type Ref } from 'react';\nimport { Slot } from 'radix-ui';\nimport { Menu } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface SidebarContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n isMobile: boolean;\n}\n\nconst SidebarContext = createContext<SidebarContextValue>({\n open: true,\n setOpen: () => {},\n isMobile: false,\n});\n\nexport function useSidebar() {\n return useContext(SidebarContext);\n}\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\nexport interface SidebarProviderProps extends HTMLAttributes<HTMLDivElement> {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const SidebarProvider = forwardRef<HTMLDivElement, SidebarProviderProps>(\n (\n { defaultOpen = true, open: controlledOpen, onOpenChange, className, children, ...props },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [isMobile, setIsMobile] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const open = controlledOpen ?? internalOpen;\n const setOpen = useCallback(\n (value: boolean) => {\n setInternalOpen(value);\n onOpenChange?.(value);\n },\n [onOpenChange],\n );\n\n useEffect(() => {\n const check = () => {\n const el = containerRef.current;\n if (el) setIsMobile(el.offsetWidth < 768);\n };\n check();\n const ro = new ResizeObserver(check);\n if (containerRef.current) ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, []);\n\n return (\n <SidebarContext.Provider value={{ open, setOpen, isMobile }}>\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn('flex h-full w-full overflow-hidden', className)}\n {...props}>\n {children}\n </div>\n </SidebarContext.Provider>\n );\n },\n);\nSidebarProvider.displayName = 'SidebarProvider';\n\n// ---------------------------------------------------------------------------\n// Sidebar\n// ---------------------------------------------------------------------------\n\nexport interface SidebarProps extends HTMLAttributes<HTMLDivElement> {\n collapsible?: 'offcanvas' | 'icon' | 'none';\n side?: 'left' | 'right';\n}\n\nexport const Sidebar = forwardRef<HTMLDivElement, SidebarProps>(\n ({ collapsible = 'offcanvas', className, children, ...props }, ref) => {\n const { open } = useSidebar();\n\n return (\n <div\n ref={ref}\n data-state={open ? 'expanded' : 'collapsed'}\n className={cn(\n 'bg-sidebar text-sidebar-foreground border-sidebar-border relative flex h-full shrink-0 flex-col border-r transition-all duration-300 ease-in-out',\n open ? 'w-64' : collapsible === 'icon' ? 'w-12' : 'w-0 overflow-hidden',\n className,\n )}\n {...props}>\n {children}\n </div>\n );\n },\n);\nSidebar.displayName = 'Sidebar';\n\n// ---------------------------------------------------------------------------\n// SidebarTrigger\n// ---------------------------------------------------------------------------\n\nexport const SidebarTrigger = forwardRef<\n HTMLButtonElement,\n ComponentProps<typeof Button>\n>(({ className, onClick, ...props }, ref) => {\n const { open, setOpen } = useSidebar();\n return (\n <Button\n ref={ref}\n variant='ghost'\n size='md'\n className={cn('shrink-0', className)}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}>\n <Menu className='size-4' />\n <span className='sr-only'>Toggle sidebar</span>\n </Button>\n );\n});\nSidebarTrigger.displayName = 'SidebarTrigger';\n\n// ---------------------------------------------------------------------------\n// SidebarHeader / Content / Footer\n// ---------------------------------------------------------------------------\n\nexport const SidebarHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-header'\n className={cn('flex shrink-0 flex-col gap-2 p-3', className)}\n {...props}\n />\n ),\n);\nSidebarHeader.displayName = 'SidebarHeader';\n\nexport const SidebarContent = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-content'\n className={cn(\n 'flex flex-1 flex-col gap-2 overflow-x-hidden overflow-y-auto p-2',\n className,\n )}\n {...props}\n />\n));\nSidebarContent.displayName = 'SidebarContent';\n\nexport const SidebarFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-footer'\n className={cn('flex shrink-0 flex-col gap-2 p-3', className)}\n {...props}\n />\n ),\n);\nSidebarFooter.displayName = 'SidebarFooter';\n\n// ---------------------------------------------------------------------------\n// SidebarGroup\n// ---------------------------------------------------------------------------\n\nexport const SidebarGroup = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-group'\n className={cn('flex flex-col gap-1', className)}\n {...props}\n />\n ),\n);\nSidebarGroup.displayName = 'SidebarGroup';\n\nexport const SidebarGroupLabel = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'text-sidebar-foreground/50 px-2 py-1 text-xs font-medium tracking-wider uppercase',\n className,\n )}\n {...props}\n />\n));\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\n\nexport const SidebarGroupContent = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot='sidebar-group-content'\n className={cn('flex flex-col gap-0.5', className)}\n {...props}\n />\n));\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\n// ---------------------------------------------------------------------------\n// SidebarMenu\n// ---------------------------------------------------------------------------\n\nexport const SidebarMenu = forwardRef<\n HTMLUListElement,\n HTMLAttributes<HTMLUListElement>\n>(({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-slot='sidebar-menu'\n className={cn('m-0 flex list-none flex-col gap-0.5 p-0', className)}\n {...props}\n />\n));\nSidebarMenu.displayName = 'SidebarMenu';\n\nexport const SidebarMenuItem = forwardRef<HTMLLIElement, HTMLAttributes<HTMLLIElement>>(\n ({ className, ...props }, ref) => (\n <li\n ref={ref}\n data-slot='sidebar-menu-item'\n className={cn('relative', className)}\n {...props}\n />\n ),\n);\nSidebarMenuItem.displayName = 'SidebarMenuItem';\n\n// ---------------------------------------------------------------------------\n// SidebarMenuButton\n// ---------------------------------------------------------------------------\n\nexport interface SidebarMenuButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean;\n isActive?: boolean;\n}\n\nexport const SidebarMenuButton = forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n ({ asChild, isActive, className, children, ...props }, ref) => {\n const { open } = useSidebar();\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n ref={ref as Ref<HTMLButtonElement>}\n data-active={isActive || undefined}\n className={cn(\n 'flex w-full cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm font-normal transition-colors outline-none',\n 'text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'data-[active]:bg-sidebar-primary/10 data-[active]:text-sidebar-primary data-[active]:font-normal',\n !open && 'justify-center px-2',\n className,\n )}\n {...props}>\n {Children.map(children, (child, i) => {\n if (i === 0 && isValidElement<{ className?: string }>(child)) {\n return cloneElement(child, {\n className: cn('size-4 shrink-0', child.props.className),\n });\n }\n if (i > 0 && !open) return null;\n return child;\n })}\n </Comp>\n );\n },\n);\nSidebarMenuButton.displayName = 'SidebarMenuButton';\n","import {\n House,\n LayoutDashboardIcon,\n Plane,\n Wallet,\n} from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Can } from '@/components/authorization/Can/can';\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n useSidebar,\n} from '@/components/ui/Sidebar/sidebar';\n\nexport interface AppShellItem {\n label: string;\n icon?: React.ReactNode;\n active?: boolean;\n onClick?: () => void;\n permission?: string | string[];\n permissionMode?: 'any' | 'all';\n}\n\nexport interface AppShellProps {\n items?: AppShellItem[];\n activeItem?: string;\n onItemClick?: (label: string) => void;\n brandName?: string;\n showHeader?: boolean;\n className?: string;\n mainClassName?: string;\n children?: React.ReactNode;\n}\n\nconst defaultItems: AppShellItem[] = [\n { label: 'Home', icon: <House /> },\n { label: 'Vacations', icon: <Plane /> },\n { label: 'Payroll', icon: <Wallet /> },\n { label: 'Apps', icon: <LayoutDashboardIcon /> },\n];\n\nfunction SidebarBrand({ brandName }: { brandName: string }) {\n const { open } = useSidebar();\n if (!open) return null;\n return (\n <>\n <div className='bg-primary text-primary-foreground flex size-7 shrink-0 items-center justify-center rounded-md text-xs font-bold'>\n {brandName.charAt(0)}\n </div>\n <span className='truncate text-sm font-semibold'>{brandName}</span>\n </>\n );\n}\n\n/**\n * @remarks\n * Internally wraps SidebarProvider (shadcn), which imposes `min-h-svh` on the root.\n * This component overrides it with `min-h-0`.\n *\n * Use `mainClassName` to control styles on the inner `<main>` (scroll, padding, etc.).\n */\nexport function AppShell({\n items = defaultItems,\n activeItem,\n onItemClick,\n brandName = 'Total Portal',\n showHeader = true,\n className,\n mainClassName,\n children,\n}: AppShellProps) {\n return (\n <SidebarProvider className={cn('min-h-0', className)}>\n <Sidebar collapsible='icon'>\n <SidebarHeader className='flex flex-row items-center gap-2 p-2'>\n <SidebarTrigger variant='ghost' className='size-8 shrink-0' />\n <SidebarBrand brandName={brandName} />\n </SidebarHeader>\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupContent>\n <SidebarMenu>\n {items.map((item) => {\n const menuItem = (\n <SidebarMenuItem key={item.label}>\n <SidebarMenuButton\n isActive={activeItem === item.label || item.active}\n onClick={() => {\n item.onClick?.();\n onItemClick?.(item.label);\n }}>\n {item.icon}\n <span>{item.label}</span>\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n\n if (!item.permission) return menuItem;\n\n return (\n <Can\n key={item.label}\n permission={item.permission}\n mode={item.permissionMode}>\n {menuItem}\n </Can>\n );\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n </SidebarContent>\n </Sidebar>\n <div className='flex flex-1 flex-col'>\n {showHeader && (\n <header className='flex h-14 items-center justify-between border-b px-4'>\n <span className='text-sm font-medium'>{brandName}</span>\n </header>\n )}\n <main className={cn('overflow-y-auto flex-1 p-6', mainClassName)}>{children}</main>\n </div>\n </SidebarProvider>\n );\n}\n\nexport { SidebarTrigger, SidebarProvider };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Textarea({ className, ...props }: ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot='textarea'\n className={cn(\n 'border-input flex min-h-[80px] w-full resize-y rounded-md border bg-transparent px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none',\n 'placeholder:text-muted-foreground',\n 'focus-visible:border-ring focus-visible:ring-ring/30 focus-visible:ring-3',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:ring-3',\n 'dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import { createContext, useContext } from 'react';\nimport type { CalendarView } from './event-calendar.types';\n\ninterface EventCalendarContextValue {\n currentView: CalendarView;\n}\n\nconst EventCalendarContext = createContext<EventCalendarContextValue | null>(null);\n\n/**\n * Consume EventCalendar context from sub-components (e.g. a future EventCalendar.Toolbar).\n * Not exported from the public package barrel — internal use only.\n */\nfunction useEventCalendarContext(): EventCalendarContextValue {\n const ctx = useContext(EventCalendarContext);\n if (!ctx) {\n throw new Error('useEventCalendarContext must be used within EventCalendar');\n }\n return ctx;\n}\n\nexport { EventCalendarContext, useEventCalendarContext };\nexport type { EventCalendarContextValue };\n","/**\n * TCCE EventCalendar — @schedule-x theme overrides, scoped to `.sx-tcce`.\n *\n * Shipped as a string (not a .css file) and injected by the EventCalendar\n * component through React 19's hoisted `<style precedence>`. This keeps the\n * calendar styles bundled with the component: consumers who use EventCalendar\n * get them automatically, and consumers who don't tree-shake them away — no\n * separate stylesheet import or build step required.\n *\n * All values reference the library design tokens (`--color-*`) defined in the\n * main bundle, so the calendar inherits the consumer's theme.\n */\nexport const eventCalendarStyles = `\n/* ── Design tokens ────────────────────────────────────────────────────────── */\n.sx-tcce {\n --sx-color-primary: var(--color-primary);\n --sx-color-on-primary: var(--color-primary-foreground);\n --sx-color-primary-container: color-mix(in srgb, var(--color-primary) 10%, transparent);\n --sx-color-on-primary-container: var(--color-primary);\n --sx-color-surface: var(--color-background);\n --sx-color-background: var(--color-background);\n --sx-color-on-surface: var(--color-foreground);\n --sx-color-on-background: var(--color-foreground);\n --sx-color-outline: var(--color-border);\n --sx-color-outline-variant: var(--color-border);\n --sx-internal-color-text: var(--color-foreground);\n font-size: 13px;\n font-family: var(--font-sans, inherit);\n}\n\n/* ── Outer wrapper ────────────────────────────────────────────────────────── */\n.sx-tcce .sx__calendar-wrapper {\n border-radius: var(--border-radius-article, 0.875rem);\n border: 1px solid var(--color-border);\n overflow: hidden;\n}\n\n/* ── Header bar ───────────────────────────────────────────────────────────── */\n.sx-tcce .sx__calendar-header {\n padding: 8px 14px;\n min-height: 52px;\n border-bottom: 1px solid var(--color-border);\n background: var(--color-background);\n display: flex;\n align-items: center;\n}\n\n/* Range title — \"June 2026\" */\n.sx-tcce .sx__range-heading {\n font-size: 15px;\n font-weight: 700;\n letter-spacing: -0.02em;\n color: var(--color-foreground);\n font-family: var(--font-heading, inherit);\n}\n\n/* \"Today\" button — primary style */\n.sx-tcce .sx__today-button {\n font-size: 12px;\n font-weight: 600;\n height: 32px;\n padding: 0 14px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n border: none;\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n cursor: pointer;\n transition: opacity 150ms;\n}\n.sx-tcce .sx__today-button:hover {\n opacity: 0.88;\n}\n.sx-tcce .sx__today-button:active {\n opacity: 0.72;\n}\n\n/* Prev / Next arrow buttons */\n.sx-tcce .sx__chevron-wrapper {\n width: 32px;\n height: 32px;\n min-width: 32px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n border: 1px solid var(--color-border);\n background: var(--color-background);\n transition: background 150ms;\n}\n.sx-tcce .sx__chevron-wrapper:hover {\n background: var(--color-muted);\n}\n\n/* ── View selector ────────────────────────────────────────────────────────── */\n/* Hide the \"View\" text label (kept in DOM for a11y) */\n.sx-tcce .sx__view-selection-label {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n\n/* The active view button, e.g. \"Month ▼\" */\n.sx-tcce .sx__view-selection-selected-item {\n font-size: 12px;\n font-weight: 600;\n height: 32px;\n padding: 0 12px;\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n background: var(--color-primary);\n color: var(--color-primary-foreground);\n border: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n transition: opacity 150ms;\n}\n.sx-tcce .sx__view-selection-selected-item:hover,\n.sx-tcce .sx__view-selection-selected-item:focus,\n.sx-tcce .sx__view-selection-selected-item:active {\n opacity: 0.85;\n}\n\n/* Chevron image inside the view button */\n.sx-tcce .sx__view-selection-chevron {\n width: 13px;\n height: 13px;\n opacity: 0.6;\n filter: brightness(0) invert(1);\n}\n\n/* Dropdown list of views */\n.sx-tcce .sx__view-selection-items {\n border-radius: var(--border-radius-outline, 0.5rem);\n border: 1px solid var(--color-border);\n padding: 4px;\n gap: 2px;\n background: var(--color-background);\n}\n.sx-tcce .sx__view-selection-item {\n font-size: 12px;\n font-weight: 500;\n padding: 5px 12px;\n border-radius: 5px;\n cursor: pointer;\n transition: background 100ms;\n}\n.sx-tcce .sx__view-selection-item:hover {\n background: color-mix(in srgb, var(--color-primary) 8%, transparent);\n}\n\n/* ── Date input (top-right \"6/5/2026 ▼\") ─────────────────────────────────── */\n/* Hide the \"Date\" text label */\n.sx-tcce .sx__date-input-label {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n\n.sx-tcce .sx__date-input-wrapper {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n height: 32px;\n padding: 0 8px;\n border: 1px solid var(--color-border);\n border-radius: var(--border-radius-secondary-button, 0.625rem);\n background: var(--color-background);\n cursor: pointer;\n transition: border-color 150ms;\n overflow: hidden;\n}\n.sx-tcce .sx__date-input-wrapper:focus-within {\n border-color: var(--color-primary);\n}\n\n.sx-tcce .sx__date-input {\n font-size: 12px;\n font-weight: 500;\n background: transparent;\n border: none;\n outline: none;\n width: 80px;\n cursor: pointer;\n color: var(--color-foreground);\n padding: 0;\n font-family: inherit;\n}\n\n.sx-tcce .sx__date-input-chevron-wrapper {\n padding: 0;\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n appearance: none;\n}\n.sx-tcce .sx__date-input-chevron {\n width: 12px;\n height: 12px;\n opacity: 0.45;\n}\n\n/* Date picker popup (the calendar that drops when clicking the date input) */\n.sx-tcce .sx__date-picker-popup {\n border-radius: var(--border-radius-article, 0.875rem);\n border: 1px solid var(--color-border);\n overflow: hidden;\n font-size: 12px;\n background: var(--color-background);\n}\n.sx-tcce .sx__date-picker__month-view-header {\n padding: 10px 12px 6px;\n}\n.sx-tcce .sx__date-picker__month-view-header__month-year {\n font-size: 13px;\n font-weight: 700;\n}\n.sx-tcce .sx__date-picker__day-names {\n padding: 0 4px;\n}\n.sx-tcce .sx__date-picker__day-name {\n width: 32px;\n font-size: 10px;\n font-weight: 600;\n color: var(--color-muted-foreground);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.sx-tcce .sx__date-picker__day {\n width: 32px;\n height: 32px;\n font-size: 12px;\n border-radius: 6px;\n transition: background 100ms;\n}\n.sx-tcce .sx__date-picker__day--today {\n font-weight: 700;\n color: var(--color-primary);\n}\n.sx-tcce .sx__date-picker__day--selected {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n border-radius: 50% !important;\n}\n\n/* ── Month grid ───────────────────────────────────────────────────────────── */\n\n/* Week rows: horizontal grid lines — skip first (header border-bottom covers it) */\n.sx-tcce .sx__month-grid-week:not(:first-child) {\n border-top: 1px solid var(--color-border);\n}\n\n/* Day cells: vertical grid line on right, consistent height */\n.sx-tcce .sx__month-grid-day {\n border-right: 1px solid var(--color-border);\n min-height: 96px;\n}\n\n/* Remove right border from last column */\n.sx-tcce .sx__month-grid-day.sx__sunday {\n border-right: 0;\n}\n\n/* Out-of-bounds (prev/next month) days — muted background */\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing {\n background-color: var(--color-muted);\n}\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing .sx__month-grid-day__header-date,\n.sx-tcce .sx__month-grid-day.is-leading-or-trailing .sx__month-grid-day__header-day-name {\n opacity: 0.4;\n}\n\n/* Day cell header */\n.sx-tcce .sx__month-grid-day__header {\n padding: 5px 8px 3px;\n}\n.sx-tcce .sx__month-grid-day__header-day-name {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__month-grid-day__header-date {\n font-size: 13px;\n font-weight: 500;\n width: 26px;\n height: 26px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 150ms;\n}\n\n/* Today highlight */\n.sx-tcce .sx__is-today .sx__month-grid-day__header-date {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n font-weight: 700;\n}\n\n/* Selected day highlight (not today) */\n.sx-tcce .sx__month-grid-day.is-selected:not(.sx__is-today) .sx__month-grid-day__header-date {\n background: color-mix(in srgb, var(--color-primary) 12%, transparent);\n color: var(--color-primary);\n font-weight: 600;\n}\n\n/* Month grid event pills */\n.sx-tcce .sx__month-grid-event {\n border-radius: 3px;\n margin: 1px 4px;\n padding: 1px 5px;\n font-size: 11px;\n font-weight: 500;\n background-color: transparent !important;\n border-inline-start-width: 3px !important;\n cursor: pointer;\n}\n.sx-tcce .sx__month-grid-event-time {\n font-size: 10px;\n opacity: 0.7;\n}\n.sx-tcce .sx__month-grid-event-title {\n font-size: 11px;\n}\n\n/* ── Week / Day header ────────────────────────────────────────────────────── */\n.sx-tcce .sx__week-grid__day-name {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__week-grid__date-number {\n font-size: 14px;\n font-weight: 500;\n width: 34px;\n height: 34px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 150ms;\n}\n.sx-tcce .sx__week-grid__date--is-today .sx__week-grid__date-number {\n background: var(--color-primary) !important;\n color: var(--color-primary-foreground) !important;\n font-weight: 700;\n}\n\n/* Subtle column highlight for today in week view */\n.sx-tcce .sx__time-grid-day.sx__is-today {\n background: color-mix(in srgb, var(--color-primary) 3%, transparent);\n}\n\n/* ── Time grid (Week / Day events) ───────────────────────────────────────── */\n.sx-tcce .sx__week-grid__hour-text {\n font-size: 10px;\n font-weight: 500;\n color: var(--color-muted-foreground);\n}\n.sx-tcce .sx__time-grid-event {\n border-radius: 6px;\n cursor: pointer;\n}\n.sx-tcce .sx__time-grid-event-inner {\n padding: 4px 7px;\n}\n.sx-tcce .sx__time-grid-event-title {\n font-size: 11px;\n font-weight: 600;\n line-height: 1.3;\n}\n.sx-tcce .sx__time-grid-event-time {\n font-size: 10px;\n opacity: 0.72;\n line-height: 1.4;\n}\n.sx-tcce .sx__title-and-time-compact {\n font-size: 10px;\n font-weight: 600;\n}\n\n/* ── Event modal ──────────────────────────────────────────────────────────── */\n.sx-tcce .sx__event-modal {\n border-radius: var(--border-radius-article, 0.875rem);\n border: 1px solid var(--color-border);\n font-size: 13px;\n min-width: 220px;\n max-width: 300px;\n background: var(--color-background);\n}\n.sx-tcce .sx__event-modal__title {\n font-size: 14px;\n font-weight: 700;\n letter-spacing: -0.01em;\n font-family: var(--font-heading, inherit);\n}\n.sx-tcce .sx__event-modal__time {\n font-size: 12px;\n color: var(--color-muted-foreground);\n}\n`;\n","import { useRef, useEffect, useLayoutEffect } from 'react';\nimport {\n createCalendar,\n viewMonthGrid,\n viewWeek,\n viewDay,\n viewMonthAgenda,\n} from '@schedule-x/calendar';\nimport { createEventsServicePlugin } from '@schedule-x/events-service';\nimport { createEventModalPlugin } from '@schedule-x/event-modal';\nimport { createCalendarControlsPlugin } from '@schedule-x/calendar-controls';\n// Patches globalThis.Temporal so @schedule-x instanceof checks match our Temporal objects\nimport 'temporal-polyfill/global';\nimport { Temporal } from 'temporal-polyfill';\nimport type {\n CalendarEvent,\n CalendarView,\n EventCalendarProps,\n ScheduleXViewName,\n} from '../event-calendar.types';\nimport type { CalendarApp, CalendarEventExternal } from '@schedule-x/calendar';\n\nexport const VIEW_MAP: Record<CalendarView, ScheduleXViewName> = {\n month: 'month-grid',\n week: 'week',\n day: 'day',\n agenda: 'month-agenda',\n};\n\nexport const REVERSE_VIEW_MAP: Record<ScheduleXViewName, CalendarView> = {\n 'month-grid': 'month',\n week: 'week',\n day: 'day',\n 'month-agenda': 'agenda',\n};\n\n// TCCE-aligned colors for each event variant.\n// main: border / accent container: event background onContainer: event text\nconst CALENDAR_DEFS = {\n default: {\n colorName: 'default',\n lightColors: { main: '#22205f', container: '#eaeaf6', onContainer: '#22205f' },\n darkColors: { main: '#9b99d4', container: '#2a2862', onContainer: '#eaeaf6' },\n },\n primary: {\n colorName: 'primary',\n lightColors: { main: '#22205f', container: '#eaeaf6', onContainer: '#22205f' },\n darkColors: { main: '#9b99d4', container: '#2a2862', onContainer: '#eaeaf6' },\n },\n success: {\n colorName: 'success',\n lightColors: { main: '#00a824', container: '#ddf8e4', onContainer: '#003d0d' },\n darkColors: { main: '#5de87a', container: '#003d0d', onContainer: '#ddf8e4' },\n },\n // Use amber (yellow-700) — more refined than TCCE's bright yellow-600 (#faca4a)\n warning: {\n colorName: 'warning',\n lightColors: { main: '#c8a23b', container: '#fef9e7', onContainer: '#5c4a00' },\n darkColors: { main: '#fbd56e', container: '#5c4a00', onContainer: '#fef9e7' },\n },\n danger: {\n colorName: 'danger',\n lightColors: { main: '#ea3a3d', container: '#fee2e2', onContainer: '#7f1d1d' },\n darkColors: { main: '#f87171', container: '#7f1d1d', onContainer: '#fee2e2' },\n },\n} as const;\n\n/**\n * Convert \"YYYY-MM-DD\" → Temporal.PlainDate\n * Convert \"YYYY-MM-DD HH:mm\" → Temporal.ZonedDateTime (system timezone)\n */\nfunction toTemporalDate(dateStr: string): Temporal.ZonedDateTime | Temporal.PlainDate {\n if (dateStr.length === 10) {\n return Temporal.PlainDate.from(dateStr);\n }\n const isoStr = dateStr.replace(' ', 'T');\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return Temporal.ZonedDateTime.from(`${isoStr}[${timeZone}]`);\n}\n\nexport function toScheduleXEvent(event: CalendarEvent): CalendarEventExternal {\n return {\n id: String(event.id),\n title: event.title,\n start: toTemporalDate(event.start),\n end: toTemporalDate(event.end),\n calendarId: event.color ?? 'default',\n ...(event.description != null ? { description: event.description } : {}),\n };\n}\n\ninterface UseEventCalendarProps {\n events: EventCalendarProps['events'];\n defaultView?: EventCalendarProps['defaultView'];\n defaultDate?: EventCalendarProps['defaultDate'];\n locale?: EventCalendarProps['locale'];\n onEventClick?: EventCalendarProps['onEventClick'];\n onEventCreate?: EventCalendarProps['onEventCreate'];\n onViewChange?: EventCalendarProps['onViewChange'];\n}\n\ninterface UseEventCalendarReturn {\n calendarApp: CalendarApp | null;\n}\n\nfunction useEventCalendar({\n events,\n defaultView = 'month',\n defaultDate,\n locale = 'en-US',\n onEventClick,\n onEventCreate,\n onViewChange,\n}: UseEventCalendarProps): UseEventCalendarReturn {\n const onEventClickRef = useRef(onEventClick);\n const onEventCreateRef = useRef(onEventCreate);\n const onViewChangeRef = useRef(onViewChange);\n useLayoutEffect(() => {\n onEventClickRef.current = onEventClick;\n });\n useLayoutEffect(() => {\n onEventCreateRef.current = onEventCreate;\n });\n useLayoutEffect(() => {\n onViewChangeRef.current = onViewChange;\n });\n\n const eventsMapRef = useRef<Map<string, CalendarEvent>>(new Map());\n const eventsService = useRef(createEventsServicePlugin());\n const eventModal = useRef(createEventModalPlugin());\n const calendarControls = useRef(createCalendarControlsPlugin());\n\n const calendarApp = useRef<ReturnType<typeof createCalendar> | null>(null);\n if (!calendarApp.current) {\n eventsMapRef.current = new Map(events.map((e) => [String(e.id), e]));\n calendarApp.current = createCalendar({\n locale,\n defaultView: VIEW_MAP[defaultView],\n ...(defaultDate ? { selectedDate: Temporal.PlainDate.from(defaultDate) } : {}),\n calendars: CALENDAR_DEFS,\n views: [viewMonthGrid, viewWeek, viewDay, viewMonthAgenda],\n plugins: [eventsService.current, eventModal.current, calendarControls.current],\n events: events.map(toScheduleXEvent),\n callbacks: {\n onEventClick: (calendarEvent) => {\n const original = eventsMapRef.current.get(String(calendarEvent.id));\n if (original) onEventClickRef.current?.(original);\n },\n onDoubleClickDate: (date: Temporal.PlainDate) => {\n const dateStr = date.toString();\n onEventCreateRef.current?.({ start: dateStr, end: dateStr });\n },\n onDoubleClickDateTime: (dateTime: Temporal.ZonedDateTime) => {\n const normalized = dateTime.toString().slice(0, 16).replace('T', ' ');\n onEventCreateRef.current?.({ start: normalized, end: normalized });\n },\n },\n });\n }\n\n const eventsKey = JSON.stringify(events);\n\n useEffect(() => {\n eventsMapRef.current = new Map(events.map((e) => [String(e.id), e]));\n eventsService.current.set(events.map(toScheduleXEvent));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [eventsKey]);\n\n useEffect(() => {\n const app = calendarApp.current;\n if (!app) return;\n const state = (\n app as unknown as {\n $app: {\n calendarState: {\n view: { subscribe: (cb: (v: string) => void) => () => void };\n };\n };\n }\n ).$app?.calendarState?.view;\n if (!state?.subscribe) return;\n let isFirst = true;\n const unsubscribe = state.subscribe((viewName: string) => {\n if (isFirst) {\n isFirst = false;\n return;\n }\n const mapped = REVERSE_VIEW_MAP[viewName as ScheduleXViewName];\n if (mapped) onViewChangeRef.current?.(mapped);\n });\n return () => unsubscribe?.();\n }, []);\n\n return {\n calendarApp: calendarApp.current as CalendarApp | null,\n };\n}\n\nexport { useEventCalendar };\n","import { useCallback, useMemo, useState } from 'react';\nimport { ScheduleXCalendar } from '@schedule-x/react';\nimport type { CalendarApp } from '@schedule-x/calendar';\n\nimport { cn } from '@/lib/utils';\nimport { EventCalendarContext } from './event-calendar-context';\nimport { eventCalendarStyles } from './event-calendar.styles';\nimport { useEventCalendar } from './hooks/use-event-calendar';\nimport type { EventCalendarProps, CalendarView } from './event-calendar.types';\n\nfunction EventCalendar({\n events,\n defaultView = 'month',\n onViewChange,\n defaultDate,\n onEventClick,\n onEventCreate,\n locale = 'en-US',\n className,\n}: EventCalendarProps) {\n const [currentView, setCurrentView] = useState<CalendarView>(defaultView);\n\n const handleViewChange = useCallback(\n (view: CalendarView) => {\n setCurrentView(view);\n onViewChange?.(view);\n },\n [onViewChange],\n );\n\n const { calendarApp } = useEventCalendar({\n events,\n defaultView,\n defaultDate,\n locale,\n onEventClick,\n onEventCreate,\n onViewChange: handleViewChange,\n });\n\n const contextValue = useMemo(() => ({ currentView }), [currentView]);\n\n return (\n <EventCalendarContext.Provider value={contextValue}>\n {/* React 19 hoists this to <head> and dedupes by href, so the\n schedule-x theme overrides are injected once no matter how many\n calendars mount. */}\n <style href='tcce-event-calendar' precedence='default'>\n {eventCalendarStyles}\n </style>\n <div data-slot='event-calendar' className={cn('sx-tcce w-full', className)}>\n <ScheduleXCalendar calendarApp={(calendarApp ?? null) as CalendarApp | null} />\n </div>\n </EventCalendarContext.Provider>\n );\n}\n\nexport { EventCalendar };\nexport type {\n EventCalendarProps,\n CalendarEvent,\n CalendarView,\n EventCreateRange,\n} from './event-calendar.types';\n","import { useForm, type UseFormProps, type FieldValues } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport type { ZodType, z } from 'zod';\n\nexport function useAppForm<T extends ZodType>(\n schema: T,\n options?: Omit<UseFormProps<z.infer<T> & FieldValues>, 'resolver'>,\n) {\n return useForm<z.infer<T> & FieldValues>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolver: zodResolver(schema as any),\n ...options,\n });\n}\n\nexport { useFieldArray, Controller } from 'react-hook-form';\n","const CDN_BASE = 'https://dibt9vplwriap.cloudfront.net';\n\nexport const logos = {\n color: `${CDN_BASE}/logos/Logo_Total_Color.webp`,\n colorAna: `${CDN_BASE}/logos/Logo_Total_Color-ANA.webp`,\n colorAnaa: `${CDN_BASE}/logos/Logo_Total_Color-ANAA.webp`,\n negative: `${CDN_BASE}/logos/Logo_Total_Negative.webp`,\n positive: `${CDN_BASE}/logos/Logo_Total_Positive.webp`,\n grayScale: `${CDN_BASE}/logos/Logo_Total_gray_scale.webp`,\n monochBlack: `${CDN_BASE}/logos/Logo_Total_monochB.webp`,\n monochOrange: `${CDN_BASE}/logos/Logo_Total_monochO.webp`,\n} as const;\n\nexport type LogoKey = keyof typeof logos;\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Table({\n className,\n containerClassName = 'overflow-x-auto',\n ...props\n}: ComponentProps<'table'> & {\n /**\n * Classes for the scroll container that wraps the table. Defaults to\n * `overflow-x-auto` for horizontal scrolling. Pass `overflow-visible` when an\n * outer element already owns scrolling (e.g. a sticky-header data table) —\n * a nested scroll container would otherwise trap `position: sticky` cells.\n */\n containerClassName?: string;\n}) {\n return (\n <div data-slot='table-container' className={cn('relative w-full', containerClassName)}>\n <table\n data-slot='table'\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: ComponentProps<'thead'>) {\n return (\n <thead data-slot='table-header' className={cn('[&_tr]:border-b', className)} {...props} />\n );\n}\n\nfunction TableBody({ className, ...props }: ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot='table-body'\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot='table-footer'\n className={cn('bg-muted/50 border-t font-medium last:[&>tr]:border-b-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: ComponentProps<'tr'>) {\n return (\n <tr\n data-slot='table-row'\n className={cn(\n 'hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: ComponentProps<'th'>) {\n return (\n <th\n data-slot='table-head'\n className={cn(\n 'text-foreground h-12 px-3 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: ComponentProps<'td'>) {\n return (\n <td\n data-slot='table-cell'\n className={cn(\n 'p-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: ComponentProps<'caption'>) {\n return (\n <caption\n data-slot='table-caption'\n className={cn('text-muted-foreground mt-4 text-sm', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","import { type ComponentProps } from 'react';\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\nimport { CheckIcon, MinusIcon } from 'lucide-react';\n\nfunction Checkbox({\n className,\n checked,\n ...props\n}: ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot='checkbox'\n checked={checked}\n className={cn(\n 'peer border-input bg-background focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground dark:data-[state=checked]:bg-primary relative flex size-4 shrink-0 items-center justify-center rounded-[5px] border transition-shadow outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3',\n className,\n )}\n {...props}>\n <CheckboxPrimitive.Indicator\n data-slot='checkbox-indicator'\n className='grid place-content-center text-current transition-none [&>svg]:size-3.5'>\n {checked === 'indeterminate' ? (\n <MinusIcon aria-hidden='true' />\n ) : (\n <CheckIcon aria-hidden='true' />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","import { memo, useId, type ComponentProps } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button/button';\nimport { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/Select/select';\nimport type { TablePaginationProps } from '../Table/data-table.types';\n\nfunction Pagination({ className, ...props }: ComponentProps<'nav'>) {\n return (\n <nav\n role='navigation'\n aria-label='pagination'\n data-slot='pagination'\n className={cn('mx-auto flex w-full justify-center', className)}\n {...props}\n />\n );\n}\n\nfunction PaginationContent({ className, ...props }: ComponentProps<'ul'>) {\n return (\n <ul\n data-slot='pagination-content'\n className={cn('flex items-center gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction PaginationItem({ ...props }: ComponentProps<'li'>) {\n return <li data-slot='pagination-item' {...props} />;\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n} & Pick<ComponentProps<typeof Button>, 'size'> &\n ComponentProps<'a'>;\n\nfunction PaginationLink({ className, isActive, size = 'sm', ...props }: PaginationLinkProps) {\n return (\n <Button\n asChild\n variant={isActive ? 'outline' : 'ghost'}\n size={size}\n className={cn(className)}>\n <a\n aria-current={isActive ? 'page' : undefined}\n data-slot='pagination-link'\n data-active={isActive}\n {...props}\n />\n </Button>\n );\n}\n\nfunction PaginationPrevious({\n className,\n text = 'Previous',\n ...props\n}: ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label='Go to previous page'\n size='sm'\n className={cn('pl-2!', className)}\n {...props}>\n <ChevronLeftIcon data-icon='inline-start' />\n <span className='hidden sm:block'>{text}</span>\n </PaginationLink>\n );\n}\n\nfunction PaginationNext({\n className,\n text = 'Next',\n ...props\n}: ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label='Go to next page'\n size='sm'\n className={cn('pr-2!', className)}\n {...props}>\n <span className='hidden sm:block'>{text}</span>\n <ChevronRightIcon data-icon='inline-end' />\n </PaginationLink>\n );\n}\n\nfunction PaginationEllipsis({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n aria-hidden\n data-slot='pagination-ellipsis'\n className={cn(\n \"flex size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}>\n <MoreHorizontalIcon />\n <span className='sr-only'>More pages</span>\n </span>\n );\n}\n\n// Page-number generation mirrors the legacy TablePagination:\n// show all pages when total <= 7; otherwise first + last + a window\n// around the current page, with 'ellipsis' fillers.\nfunction getPageItems(page: number, totalPages: number): (number | 'ellipsis')[] {\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n const items: (number | 'ellipsis')[] = [1];\n const start = Math.max(2, page - 1);\n const end = Math.min(totalPages - 1, page + 1);\n if (start > 2) items.push('ellipsis');\n for (let p = start; p <= end; p++) items.push(p);\n if (end < totalPages - 1) items.push('ellipsis');\n items.push(totalPages);\n return items;\n}\n\nconst DEFAULT_ROWS_PER_PAGE = [10, 25, 50, 100];\n\nfunction TablePaginationBase({\n page,\n totalPages,\n perPage,\n totalRecords,\n rowsPerPageOptions = DEFAULT_ROWS_PER_PAGE,\n onPageChange,\n onPerPageChange,\n}: TablePaginationProps) {\n const rowsPerPageLabelId = useId();\n const pageItems = getPageItems(page, totalPages);\n\n // Guard empty state: show 0–0 when there are no records.\n const hasRecords = totalRecords !== undefined && totalRecords > 0;\n const from = hasRecords ? (page - 1) * perPage + 1 : 0;\n const to = hasRecords ? Math.min(page * perPage, totalRecords as number) : 0;\n\n // Derive position-stable ellipsis keys: at most two ellipses can appear,\n // one near the start and one near the end of the page range.\n let ellipsisCount = 0;\n const ellipsisKeys = pageItems.map((item) => {\n if (item === 'ellipsis') {\n ellipsisCount += 1;\n return ellipsisCount === 1 ? 'ellipsis-start' : 'ellipsis-end';\n }\n return null;\n });\n\n return (\n <nav\n role='navigation'\n aria-label='Table pagination'\n data-slot='table-pagination'\n className='flex flex-wrap items-center justify-between gap-4 py-2'>\n {totalRecords !== undefined && totalRecords > 0 && (\n <p className='text-muted-foreground text-sm'>\n Showing {from}–{to} of {totalRecords}\n </p>\n )}\n\n <ul data-slot='pagination-content' className='flex items-center gap-1'>\n <li>\n <Button\n variant='ghost'\n size='sm'\n aria-label='Go to previous page'\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}>\n <ChevronLeftIcon data-icon='inline-start' />\n <span className='hidden sm:block'>Previous</span>\n </Button>\n </li>\n\n {pageItems.map((item, index) =>\n item === 'ellipsis' ? (\n <li key={ellipsisKeys[index]!}>\n <span aria-hidden className='flex size-9 items-center justify-center'>\n <MoreHorizontalIcon />\n </span>\n </li>\n ) : (\n <li key={item}>\n <Button\n variant={item === page ? 'primary' : 'ghost'}\n size='sm'\n aria-current={item === page ? 'page' : undefined}\n onClick={() => onPageChange(item)}>\n {item}\n </Button>\n </li>\n ),\n )}\n\n <li>\n <Button\n variant='ghost'\n size='sm'\n aria-label='Go to next page'\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}>\n <span className='hidden sm:block'>Next</span>\n <ChevronRightIcon data-icon='inline-end' />\n </Button>\n </li>\n </ul>\n\n <div className='flex items-center gap-2'>\n {/* Programmatically associated with the SelectTrigger via aria-labelledby */}\n <span id={rowsPerPageLabelId} className='text-muted-foreground text-sm'>\n Rows per page\n </span>\n <Select value={String(perPage)} onValueChange={(v) => onPerPageChange(Number(v))}>\n <SelectTrigger aria-labelledby={rowsPerPageLabelId} className='w-20'>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {rowsPerPageOptions.map((opt) => (\n <SelectItem key={opt} value={String(opt)}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </nav>\n );\n}\n\nconst TablePagination = memo(TablePaginationBase);\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n TablePagination,\n};\n","import { useEffect, useState } from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n // Initialize to false on both server and client to avoid hydration mismatch.\n // The real value is resolved in useEffect after mount.\n const [matches, setMatches] = useState<boolean>(false);\n\n useEffect(() => {\n // Safety guard for non-DOM environments (e.g. jsdom without matchMedia stub).\n // Effects do not run during SSR; this only matters in test environments.\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n","import { createContext, useContext } from 'react';\n\nimport type { TableContextType } from './data-table.types';\n\nconst TableContext = createContext<TableContextType<unknown> | null>(null);\n\nfunction useTableContext<T = unknown>() {\n const ctx = useContext(TableContext);\n if (!ctx) {\n throw new Error('useTableContext must be used within DataTable');\n }\n // React context cannot be runtime-generic: the context is created as\n // TableContextType<unknown> and re-cast to the consumer's T at this hook\n // boundary. The cast is intentional — there is no runtime way to parameterise\n // a React context with T, so type safety for T through context is not\n // guaranteed and must be enforced by the DataTable provider at the call site.\n return ctx as unknown as TableContextType<T>;\n}\n\n/** Returns the context value or null when called outside a DataTable provider. */\nfunction useTableContextSafe<T = unknown>() {\n return useContext(TableContext) as TableContextType<T> | null;\n}\n\nexport { TableContext, useTableContext, useTableContextSafe };\n","import { useMemo, type ReactNode } from 'react';\nimport { flexRender, type Row, type Column, type Cell } from '@tanstack/react-table';\n\nimport { cn } from '@/lib/utils';\nimport type { ColumnMeta, TableCellSize, TableVariant } from './data-table.types';\n\ninterface DataTableCardViewProps<T> {\n rows: Row<T>[];\n columns: Column<T, unknown>[];\n size?: TableCellSize;\n variant?: TableVariant;\n onRowClick?: (row: T) => void;\n isLoading?: boolean;\n skeletonRowCount?: number;\n emptyState?: ReactNode;\n}\n\nconst cardPadding: Record<TableCellSize, string> = {\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-5',\n};\n\nfunction DataTableCardView<T>({\n rows,\n columns,\n size = 'md',\n variant = 'default',\n onRowClick,\n isLoading,\n skeletonRowCount = 5,\n emptyState,\n}: DataTableCardViewProps<T>) {\n // Hooks must run unconditionally, before any early return (rules of hooks).\n const selectCol = useMemo(() => columns.find((c) => c.id === 'select'), [columns]);\n const actionsCol = useMemo(() => columns.find((c) => c.id === 'actions'), [columns]);\n const dataColumns = useMemo(\n () =>\n columns.filter(\n (c) =>\n c.id !== 'select' &&\n c.id !== 'actions' &&\n !(c.columnDef.meta as ColumnMeta)?.hideInCard,\n ),\n [columns],\n );\n\n if (isLoading) {\n return (\n <div className='space-y-2' aria-busy='true' aria-label='Loading table data'>\n {Array.from({ length: skeletonRowCount }).map((_, i) => (\n <div\n key={i}\n className={cn(\n 'bg-card animate-pulse rounded-md border',\n cardPadding[size],\n )}>\n <div className='space-y-2'>\n <div className='bg-muted h-4 w-1/3 rounded' aria-hidden='true' />\n <div className='bg-muted h-3 w-full rounded' aria-hidden='true' />\n <div className='bg-muted h-3 w-2/3 rounded' aria-hidden='true' />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (rows.length === 0) {\n return (\n <div className='bg-card text-muted-foreground rounded-md border p-8 text-center'>\n {emptyState ?? 'No results found'}\n </div>\n );\n }\n\n return (\n <div\n data-slot='data-table-card-view'\n className='space-y-2'\n role='list'\n aria-label='Table rows'>\n {rows.map((row) => {\n const isSelected = row.getIsSelected();\n const visibleCells = row.getVisibleCells();\n\n // Compute select/actions cells above the return to avoid IIFE patterns.\n const selectCell: Cell<T, unknown> | undefined = selectCol\n ? visibleCells.find((c) => c.column.id === 'select')\n : undefined;\n const actionsCell: Cell<T, unknown> | undefined = actionsCol\n ? visibleCells.find((c) => c.column.id === 'actions')\n : undefined;\n\n return (\n <div\n key={row.id}\n role='listitem'\n data-state={isSelected ? 'selected' : undefined}\n data-variant={variant}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n onKeyDown={\n onRowClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick(row.original);\n }\n }\n : undefined\n }\n tabIndex={onRowClick ? 0 : undefined}\n className={cn(\n 'bg-card text-card-foreground rounded-md border transition-colors',\n cardPadding[size],\n isSelected && 'border-primary/50 bg-muted',\n onRowClick &&\n 'hover:bg-muted focus-visible:ring-ring cursor-pointer focus-visible:ring-2 focus-visible:outline-none',\n variant === 'striped' && 'odd:bg-muted/20',\n )}>\n {selectCell && (\n <div className='mb-3 flex items-center'>\n {flexRender(selectCol!.columnDef.cell, selectCell.getContext())}\n </div>\n )}\n\n <dl className='grid grid-cols-2 gap-x-4 gap-y-2'>\n {dataColumns.map((col) => {\n const meta = (col.columnDef.meta ?? {}) as ColumnMeta;\n const cell = visibleCells.find((c) => c.column.id === col.id);\n if (!cell) return null;\n const labelText =\n meta.cardLabel ??\n (typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id);\n return (\n <div key={col.id} className='flex flex-col gap-0.5'>\n <dt className='text-muted-foreground text-xs font-medium'>\n {labelText}\n </dt>\n <dd className='truncate text-sm'>\n {flexRender(col.columnDef.cell, cell.getContext())}\n </dd>\n </div>\n );\n })}\n </dl>\n\n {actionsCell && (\n <div className='mt-3 flex justify-end border-t pt-2'>\n {flexRender(actionsCol!.columnDef.cell, actionsCell.getContext())}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport { DataTableCardView };\nexport type { DataTableCardViewProps };\n","import type { Row } from '@tanstack/react-table';\nimport type { ColumnFiltersState } from '@tanstack/react-table';\n\n/**\n * Extracts unique values from a column in the dataset\n * @param data - The array of data objects\n * @param columnId - The column identifier\n * @param accessor - Optional accessor function to get the value from a row\n * @returns Array of unique string values, sorted alphabetically\n */\nexport function getUniqueColumnValues<T>(\n data: T[],\n columnId: string,\n accessor?: (row: T, index: number) => unknown,\n): string[] {\n const values = new Set<string>();\n\n data.forEach((row, index) => {\n let value: unknown;\n\n if (accessor) {\n value = accessor(row, index);\n } else {\n // Default: access by columnId\n value = (row as Record<string, unknown>)[columnId];\n }\n\n // Convert to string and add to set (handles null/undefined)\n if (value != null) {\n values.add(String(value));\n }\n });\n\n // Intentional locale fix: pass 'en' for deterministic cross-locale alphabetical sort.\n return Array.from(values).sort((a, b) => a.localeCompare(b, 'en'));\n}\n\n/**\n * Custom filter function for TanStack Table multi-select filtering\n * Checks if the row's value is included in the array of selected filter values\n * @param row - The row being filtered\n * @param columnId - The column identifier\n * @param filterValue - Array of selected filter values\n * @returns true if the row should be included in filtered results\n */\nexport function multiSelectFilter<T>(row: Row<T>, columnId: string, filterValue: unknown): boolean {\n // Guard: only treat the value as a string array when it actually is one.\n const filterValues: string[] = Array.isArray(filterValue) ? (filterValue as string[]) : [];\n\n // If no filters selected, pass through — show all rows (original semantics).\n if (filterValues.length === 0) {\n return true;\n }\n\n // Get the cell value\n const cellValue = row.getValue(columnId);\n\n // Convert to string and check if it's in the filter array\n if (cellValue != null) {\n return filterValues.includes(String(cellValue));\n }\n\n return false;\n}\n\n/**\n * Searches for a term within an array of items (case-insensitive)\n * @param items - Array of items to search through\n * @param searchTerm - The search term\n * @returns Filtered array of items matching the search term\n */\nexport function searchInArray(items: string[], searchTerm: string): string[] {\n if (!searchTerm || searchTerm.trim() === '') {\n return items;\n }\n\n const normalizedSearch = searchTerm.toLowerCase().trim();\n\n return items.filter((item) => item.toLowerCase().includes(normalizedSearch));\n}\n\n/**\n * Gets the count of rows for each unique value in a column\n * Useful for showing counts next to filter options (e.g., \"Active (5)\")\n * @param data - The array of data objects\n * @param columnId - The column identifier\n * @param accessor - Optional accessor function to get the value from a row\n * @returns Object mapping values to their counts\n */\nexport function getColumnValueCounts<T>(\n data: T[],\n columnId: string,\n accessor?: (row: T, index: number) => unknown,\n): Record<string, number> {\n const counts: Record<string, number> = {};\n\n data.forEach((row, index) => {\n let value: unknown;\n\n if (accessor) {\n value = accessor(row, index);\n } else {\n value = (row as Record<string, unknown>)[columnId];\n }\n\n if (value != null) {\n const stringValue = String(value);\n counts[stringValue] = (counts[stringValue] || 0) + 1;\n }\n });\n\n return counts;\n}\n\n/**\n * Checks if a column has active filters\n * @param columnFilters - Current column filters state\n * @param columnId - The column identifier\n * @returns true if the column has active filters\n */\nexport function hasActiveFilters(columnFilters: ColumnFiltersState, columnId: string): boolean {\n const filter = columnFilters.find((f) => f.id === columnId);\n if (!filter) return false;\n return Array.isArray(filter.value) ? filter.value.length > 0 : false;\n}\n\n/**\n * Gets the active filter values for a specific column\n * @param columnFilters - Current column filters state\n * @param columnId - The column identifier\n * @returns Array of active filter values for the column\n */\nexport function getActiveFilterValues(\n columnFilters: ColumnFiltersState,\n columnId: string,\n): string[] {\n const filter = columnFilters.find((f) => f.id === columnId);\n if (!filter) return [];\n return Array.isArray(filter.value) ? (filter.value as string[]) : [];\n}\n\n/**\n * Gets the count of active filters across all columns\n * @param columnFilters - Current column filters state\n * @returns Total number of active filter values\n */\nexport function getActiveFilterCount(columnFilters: ColumnFiltersState): number {\n return columnFilters.reduce((total, filter) => {\n return total + (Array.isArray(filter.value) ? filter.value.length : 0);\n }, 0);\n}\n","import { memo, useCallback, useId, useMemo, useState } from 'react';\nimport { Funnel } from 'lucide-react';\nimport { Button } from '@/components/ui/Button/button';\nimport { Checkbox } from '@/components/ui/Checkbox/checkbox';\nimport { Input } from '@/components/ui/Input/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/Popover/popover';\nimport { cn } from '@/lib/utils';\n\nimport { searchInArray } from './utils/filter-utils';\n\ninterface FilterOptionProps {\n value: string;\n checked: boolean;\n onChange: (value: string, checked: boolean) => void;\n}\n\nconst FilterOption = memo(function FilterOption({\n value,\n checked,\n onChange,\n}: FilterOptionProps) {\n // Radix Checkbox renders a <button role=\"checkbox\">. A button is a labelable\n // element, so an explicit htmlFor/id association gives it an accessible name\n // (equal to the visible text) and lets clicking the text toggle it.\n const id = useId();\n return (\n <div className='hover:bg-muted flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm'>\n <Checkbox\n id={id}\n checked={checked}\n onCheckedChange={(state) => onChange(value, state === true)}\n />\n <label htmlFor={id} className='flex-1 cursor-pointer truncate'>\n {value}\n </label>\n </div>\n );\n});\n\ninterface DataTableColumnFilterProps {\n options: string[];\n selectedValues: string[];\n onChange: (values: string[]) => void;\n searchPlaceholder?: string;\n /** Human-readable column name used to build accessible labels. */\n columnLabel?: string;\n}\n\nfunction DataTableColumnFilter({\n options,\n selectedValues,\n onChange,\n searchPlaceholder,\n columnLabel = 'column',\n}: DataTableColumnFilterProps) {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n\n const listId = useId();\n\n const hasActive = selectedValues.length > 0;\n const visibleOptions = useMemo(\n () => (search ? searchInArray(options, search) : options),\n [options, search],\n );\n\n const handleOptionChange = useCallback(\n (value: string, checked: boolean) => {\n if (checked) onChange([...selectedValues, value]);\n else onChange(selectedValues.filter((v) => v !== value));\n },\n [selectedValues, onChange],\n );\n\n const allVisibleSelected =\n visibleOptions.length > 0 && visibleOptions.every((o) => selectedValues.includes(o));\n\n const toggleSelectAll = useCallback(() => {\n if (allVisibleSelected) {\n onChange(selectedValues.filter((v) => !visibleOptions.includes(v)));\n } else {\n const merged = new Set([...selectedValues, ...visibleOptions]);\n onChange(Array.from(merged));\n }\n }, [allVisibleSelected, selectedValues, visibleOptions, onChange]);\n\n const resolvedPlaceholder = searchPlaceholder ?? `Search ${columnLabel}…`;\n // Convey active state via text, not color/shape alone (WCAG 1.4.1).\n const triggerLabel = hasActive\n ? `Filter ${columnLabel}, ${selectedValues.length} selected`\n : `Filter ${columnLabel}`;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n data-slot='data-table-column-filter'\n variant='ghost'\n size='sm'\n aria-label={triggerLabel}\n data-active={hasActive || undefined}\n className={cn(\n 'size-7 cursor-pointer p-0 text-white/80 hover:text-white',\n 'focus-visible:border-transparent focus-visible:ring-2 focus-visible:ring-white/70',\n hasActive && 'text-white',\n )}>\n {hasActive ? (\n <Funnel className='size-4' aria-hidden='true' fill='white' />\n ) : (\n <Funnel className='size-4' aria-hidden='true' />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent align='start' className='w-64 p-2'>\n <Input\n type='text'\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={resolvedPlaceholder}\n aria-label={resolvedPlaceholder}\n aria-controls={listId}\n className='mb-2 h-8'\n />\n <button\n type='button'\n onClick={toggleSelectAll}\n aria-pressed={allVisibleSelected}\n disabled={visibleOptions.length === 0}\n className='hover:bg-muted mb-1 w-full rounded-sm px-2 py-1.5 text-left text-sm font-medium disabled:pointer-events-none disabled:opacity-50'>\n {allVisibleSelected ? 'Deselect all' : 'Select all'}\n </button>\n {/* Polite live region announces result count as the user types. */}\n <span className='sr-only' role='status' aria-live='polite'>\n {visibleOptions.length === 0\n ? 'No options'\n : `${visibleOptions.length} options`}\n </span>\n <div\n id={listId}\n role='group'\n aria-label={`${columnLabel} filter options`}\n className='max-h-64 overflow-y-auto'>\n {visibleOptions.length === 0 ? (\n <p className='text-muted-foreground px-2 py-1.5 text-sm'>No options</p>\n ) : (\n visibleOptions.map((option) => (\n <FilterOption\n key={option}\n value={option}\n checked={selectedValues.includes(option)}\n onChange={handleOptionChange}\n />\n ))\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { DataTableColumnFilter, FilterOption };\nexport type { DataTableColumnFilterProps, FilterOptionProps };\n","import { useCallback } from 'react';\n\nimport { useTableContext } from '../data-table-context';\nimport { getActiveFilterValues } from '../utils/filter-utils';\n\nexport function useColumnFilter(columnId: string) {\n const { columnFilters, setColumnFilters } = useTableContext();\n\n const selectedValues = getActiveFilterValues(columnFilters, columnId);\n\n const handleChange = useCallback(\n (values: string[]) => {\n const newFilters = [...columnFilters];\n const existingFilterIndex = newFilters.findIndex((f) => f.id === columnId);\n\n if (values.length > 0) {\n if (existingFilterIndex >= 0) {\n newFilters[existingFilterIndex] = { id: columnId, value: values };\n } else {\n newFilters.push({ id: columnId, value: values });\n }\n } else {\n if (existingFilterIndex >= 0) {\n newFilters.splice(existingFilterIndex, 1);\n }\n }\n\n setColumnFilters(newFilters);\n },\n [columnFilters, columnId, setColumnFilters],\n );\n\n return {\n selectedValues,\n handleChange,\n };\n}\n","import type { AriaAttributes, CSSProperties } from 'react';\nimport { flexRender, type Header } from '@tanstack/react-table';\nimport {ArrowUp, ArrowDown, ArrowUpDown} from 'lucide-react';\nimport { TableHead } from '@/components/ui/Table/table';\nimport { cn } from '@/lib/utils';\n\nimport { DataTableColumnFilter } from './data-table-column-filter';\nimport { useTableContext } from './data-table-context';\nimport { useColumnFilter } from './hooks/use-column-filter';\nimport type { ColumnMeta } from './data-table.types';\n\ninterface DataTableHeaderCellProps<T> {\n header: Header<T, unknown>;\n}\n\nfunction DataTableHeaderCell<T>({ header }: DataTableHeaderCellProps<T>) {\n const { getUniqueValues, size: tableSize } = useTableContext<T>();\n const column = header.column;\n const meta = (column.columnDef.meta ?? {}) as ColumnMeta;\n\n const canSort = column.getCanSort() && meta.sortable !== false;\n const canFilter = column.getCanFilter() && meta.filterable !== false;\n const canResize = header.column.getCanResize() && meta.resizable !== false;\n const sortDir = column.getIsSorted();\n const pinned = column.getIsPinned();\n\n const { selectedValues, handleChange } = useColumnFilter(column.id);\n const options = getUniqueValues?.(column.id) ?? [];\n\n const pinnedStyle: CSSProperties | undefined = pinned\n ? {\n position: 'sticky',\n left: pinned === 'left' ? column.getStart('left') : undefined,\n right: pinned === 'right' ? column.getAfter('right') : undefined,\n zIndex: 21,\n }\n : undefined;\n\n // Map TanStack sort state to the WAI-ARIA aria-sort attribute value.\n const ariaSortValue: AriaAttributes['aria-sort'] = canSort\n ? sortDir === 'asc'\n ? 'ascending'\n : sortDir === 'desc'\n ? 'descending'\n : 'none'\n : undefined;\n\n return (\n <TableHead\n data-slot='data-table-header-cell'\n data-size={meta.size ?? tableSize}\n data-align={meta.align ?? 'left'}\n data-pinned={pinned || undefined}\n aria-sort={ariaSortValue}\n style={{\n width: canResize ? header.column.getSize() : meta.width,\n minWidth: meta.width,\n ...pinnedStyle,\n }}\n className={cn(\n 'bg-primary text-primary-foreground',\n canResize && 'relative',\n meta.align === 'center' && 'text-center',\n meta.align === 'right' && 'text-right',\n meta.className,\n )}>\n <div\n className={cn(\n 'flex items-center gap-1',\n meta.align === 'center' && 'justify-center',\n meta.align === 'right' && 'justify-end',\n )}>\n {canSort ? (\n <button\n type='button'\n onClick={column.getToggleSortingHandler()}\n className='inline-flex items-center gap-1 rounded-sm outline-none focus-visible:ring-2 focus-visible:ring-white/70'>\n {flexRender(column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? (\n <ArrowUp className='size-4' aria-hidden='true' />\n ) : sortDir === 'desc' ? (\n <ArrowDown className='size-4' aria-hidden='true' />\n ) : (\n <ArrowUpDown className='size-4 opacity-60' aria-hidden='true' />\n )}\n </button>\n ) : (\n flexRender(column.columnDef.header, header.getContext())\n )}\n {canFilter && (\n <DataTableColumnFilter\n options={options}\n selectedValues={selectedValues}\n onChange={handleChange}\n columnLabel={column.id}\n />\n )}\n </div>\n {canResize && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute top-0 right-0 h-full w-1 cursor-col-resize touch-none select-none',\n 'hover:bg-white/30',\n header.column.getIsResizing() && 'bg-white/50',\n )}\n aria-hidden='true'\n />\n )}\n </TableHead>\n );\n}\n\nexport { DataTableHeaderCell };\nexport type { DataTableHeaderCellProps };\n","import { Skeleton } from '@/components/ui/Skeleton/skeleton';\nimport { TableCell, TableRow } from '@/components/ui/Table/table';\n\nimport type { TableCellSize } from './data-table.types';\n\nconst sizeClass: Record<TableCellSize, string> = {\n sm: 'h-8',\n md: 'h-10',\n lg: 'h-12',\n};\n\ninterface DataTableSkeletonProps {\n columnCount: number;\n rowCount?: number;\n size?: TableCellSize;\n}\n\nfunction DataTableSkeleton({ columnCount, rowCount = 5, size = 'md' }: DataTableSkeletonProps) {\n return (\n <>\n {Array.from({ length: rowCount }).map((_, rowIndex) => (\n <TableRow\n key={`skeleton-row-${rowIndex}`}\n data-slot='table-skeleton-row'\n aria-busy='true'>\n {Array.from({ length: columnCount }).map((_, cellIndex) => (\n <TableCell\n key={`skeleton-cell-${rowIndex}-${cellIndex}`}\n className={sizeClass[size]}>\n <Skeleton className='h-4 w-full' />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </>\n );\n}\n\nexport { DataTableSkeleton };\nexport type { DataTableSkeletonProps };\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { SortingState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSortingProps {\n /**\n * Controlled sorting state (optional)\n * If provided, the component operates in controlled mode\n */\n sorting?: SortingState;\n\n /**\n * Default sorting state for uncontrolled mode\n * @default []\n */\n defaultSorting?: SortingState;\n\n /**\n * Callback fired when sorting changes\n * Required for controlled mode, optional for uncontrolled\n */\n onSortingChange?: (sorting: SortingState) => void;\n}\n\nexport interface UseTableSortingReturn {\n /**\n * Current sorting state (controlled or internal)\n */\n sortingState: SortingState;\n\n /**\n * Handler for TanStack Table's onSortingChange\n */\n handleSortingChange: (updater: Updater<SortingState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setSorting: (sorting: SortingState) => void;\n}\n\n/**\n * Hook to manage table sorting state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { sortingState, handleSortingChange } = useTableSorting({\n * defaultSorting: [{ id: 'name', desc: false }],\n * onSortingChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [sorting, setSorting] = useState<SortingState>([]);\n * const { sortingState, handleSortingChange } = useTableSorting({\n * sorting,\n * onSortingChange: setSorting\n * });\n * ```\n */\nexport function useTableSorting({\n sorting: controlledSorting,\n defaultSorting = [],\n onSortingChange,\n}: UseTableSortingProps): UseTableSortingReturn {\n // Internal state for uncontrolled mode\n const [internalSorting, setInternalSorting] = useState<SortingState>(defaultSorting);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onSortingChange);\n useLayoutEffect(() => {\n onChangeRef.current = onSortingChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledSorting !== undefined;\n\n // Use controlled sorting if provided, otherwise use internal state\n const sortingState = isControlled ? controlledSorting : internalSorting;\n\n /**\n * Handle sorting changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleSortingChange = useCallback(\n (updater: Updater<SortingState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newSorting =\n typeof updater === 'function' ? updater(controlledSorting) : updater;\n onChangeRef.current?.(newSorting);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalSorting((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledSorting is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledSorting],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setSorting = useCallback(\n (newSorting: SortingState) => {\n if (isControlled) {\n onChangeRef.current?.(newSorting);\n } else {\n setInternalSorting(newSorting);\n onChangeRef.current?.(newSorting);\n }\n },\n [isControlled],\n );\n\n return {\n sortingState,\n handleSortingChange,\n isControlled,\n setSorting,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { ColumnFiltersState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableFilteringProps {\n /**\n * Controlled column filters state (optional)\n * If provided, the component operates in controlled mode\n */\n columnFilters?: ColumnFiltersState;\n\n /**\n * Default column filters state for uncontrolled mode\n * @default []\n */\n defaultColumnFilters?: ColumnFiltersState;\n\n /**\n * Callback fired when column filters change\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnFiltersChange?: (columnFilters: ColumnFiltersState) => void;\n}\n\nexport interface UseTableFilteringReturn {\n /**\n * Current column filters state (controlled or internal)\n */\n columnFiltersState: ColumnFiltersState;\n\n /**\n * Handler for TanStack Table's onColumnFiltersChange\n */\n handleColumnFiltersChange: (updater: Updater<ColumnFiltersState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnFilters: (columnFilters: ColumnFiltersState) => void;\n}\n\n/**\n * Hook to manage table column filtering state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnFiltersState, handleColumnFiltersChange } = useTableFiltering({\n * defaultColumnFilters: [{ id: 'status', value: ['Active'] }],\n * onColumnFiltersChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [filters, setFilters] = useState<ColumnFiltersState>([]);\n * const { columnFiltersState, handleColumnFiltersChange } = useTableFiltering({\n * columnFilters: filters,\n * onColumnFiltersChange: setFilters\n * });\n * ```\n */\nexport function useTableFiltering({\n columnFilters: controlledFilters,\n defaultColumnFilters = [],\n onColumnFiltersChange,\n}: UseTableFilteringProps): UseTableFilteringReturn {\n // Internal state for uncontrolled mode\n const [internalFilters, setInternalFilters] =\n useState<ColumnFiltersState>(defaultColumnFilters);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnFiltersChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnFiltersChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledFilters !== undefined;\n\n // Use controlled filters if provided, otherwise use internal state\n const columnFiltersState = isControlled ? controlledFilters : internalFilters;\n\n /**\n * Handle column filters changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnFiltersChange = useCallback(\n (updater: Updater<ColumnFiltersState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newFilters =\n typeof updater === 'function' ? updater(controlledFilters) : updater;\n onChangeRef.current?.(newFilters);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalFilters((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledFilters is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledFilters],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnFilters = useCallback(\n (newFilters: ColumnFiltersState) => {\n if (isControlled) {\n onChangeRef.current?.(newFilters);\n } else {\n setInternalFilters(newFilters);\n onChangeRef.current?.(newFilters);\n }\n },\n [isControlled],\n );\n\n return {\n columnFiltersState,\n handleColumnFiltersChange,\n isControlled,\n setColumnFilters,\n };\n}\n","import { useState, useCallback } from 'react';\nimport type { RowSelectionState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSelectionProps {\n rowSelection?: RowSelectionState;\n defaultRowSelection?: RowSelectionState;\n onRowSelectionChange?: (state: RowSelectionState) => void;\n}\n\nexport interface UseTableSelectionReturn {\n rowSelectionState: RowSelectionState;\n handleRowSelectionChange: (updater: Updater<RowSelectionState>) => void;\n setRowSelection: (state: RowSelectionState) => void;\n}\n\nexport function useTableSelection({\n rowSelection: controlled,\n defaultRowSelection = {},\n onRowSelectionChange,\n}: UseTableSelectionProps): UseTableSelectionReturn {\n const [internal, setInternal] = useState<RowSelectionState>(defaultRowSelection);\n const isControlled = controlled !== undefined;\n const rowSelectionState = isControlled ? controlled : internal;\n\n const handleRowSelectionChange = useCallback(\n (updater: Updater<RowSelectionState>) => {\n const next = typeof updater === 'function' ? updater(rowSelectionState) : updater;\n if (!isControlled) setInternal(next);\n onRowSelectionChange?.(next);\n },\n [isControlled, rowSelectionState, onRowSelectionChange],\n );\n\n const setRowSelection = useCallback(\n (next: RowSelectionState) => {\n if (!isControlled) setInternal(next);\n onRowSelectionChange?.(next);\n },\n [isControlled, onRowSelectionChange],\n );\n\n return { rowSelectionState, handleRowSelectionChange, setRowSelection };\n}\n","import { useState, useCallback } from 'react';\n\nexport interface UseTableGlobalFilterProps {\n /**\n * Controlled global filter state (optional)\n * If provided, the component operates in controlled mode\n */\n globalFilter?: string;\n\n /**\n * Default global filter state for uncontrolled mode\n * @default ''\n */\n defaultGlobalFilter?: string;\n\n /**\n * Callback fired when global filter changes\n * Required for controlled mode, optional for uncontrolled\n */\n onGlobalFilterChange?: (value: string) => void;\n}\n\nexport interface UseTableGlobalFilterReturn {\n /**\n * Current global filter state (controlled or internal)\n */\n globalFilterState: string;\n\n /**\n * Handler for global filter changes\n */\n handleGlobalFilterChange: (value: string) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setGlobalFilter: (value: string) => void;\n}\n\n/**\n * Hook to manage table global filter state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { globalFilterState, handleGlobalFilterChange } = useTableGlobalFilter({\n * defaultGlobalFilter: '',\n * onGlobalFilterChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [globalFilter, setGlobalFilter] = useState<string>('');\n * const { globalFilterState, handleGlobalFilterChange } = useTableGlobalFilter({\n * globalFilter,\n * onGlobalFilterChange: setGlobalFilter\n * });\n * ```\n */\nexport function useTableGlobalFilter({\n globalFilter: controlledFilter,\n defaultGlobalFilter = '',\n onGlobalFilterChange,\n}: UseTableGlobalFilterProps): UseTableGlobalFilterReturn {\n // Internal state for uncontrolled mode\n const [internalFilter, setInternalFilter] = useState<string>(defaultGlobalFilter);\n\n // Determine if component is in controlled mode\n const isControlled = controlledFilter !== undefined;\n\n // Use controlled filter if provided, otherwise use internal state\n const globalFilterState = isControlled ? controlledFilter : internalFilter;\n\n /**\n * Handle global filter changes\n */\n const handleGlobalFilterChange = useCallback(\n (value: string) => {\n if (isControlled) {\n // In controlled mode: only notify parent\n onGlobalFilterChange?.(value);\n } else {\n // In uncontrolled mode: update internal state\n setInternalFilter(value);\n // And optionally notify parent\n onGlobalFilterChange?.(value);\n }\n },\n [isControlled, onGlobalFilterChange],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setGlobalFilter = useCallback(\n (value: string) => {\n if (isControlled) {\n onGlobalFilterChange?.(value);\n } else {\n setInternalFilter(value);\n onGlobalFilterChange?.(value);\n }\n },\n [isControlled, onGlobalFilterChange],\n );\n\n return {\n globalFilterState,\n handleGlobalFilterChange,\n isControlled,\n setGlobalFilter,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { VisibilityState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableVisibilityProps {\n /**\n * Controlled column visibility state (optional)\n * If provided, the component operates in controlled mode\n */\n columnVisibility?: VisibilityState;\n\n /**\n * Default column visibility state for uncontrolled mode\n * @default {}\n */\n defaultColumnVisibility?: VisibilityState;\n\n /**\n * Callback fired when column visibility changes\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnVisibilityChange?: (state: VisibilityState) => void;\n}\n\nexport interface UseTableVisibilityReturn {\n /**\n * Current column visibility state (controlled or internal)\n */\n columnVisibilityState: VisibilityState;\n\n /**\n * Handler for TanStack Table's onColumnVisibilityChange\n */\n handleColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnVisibility: (state: VisibilityState) => void;\n}\n\n/**\n * Hook to manage table column visibility state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnVisibilityState, handleColumnVisibilityChange } = useTableVisibility({\n * defaultColumnVisibility: { email: false },\n * onColumnVisibilityChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [visibility, setVisibility] = useState<VisibilityState>({});\n * const { columnVisibilityState, handleColumnVisibilityChange } = useTableVisibility({\n * columnVisibility: visibility,\n * onColumnVisibilityChange: setVisibility\n * });\n * ```\n */\nexport function useTableVisibility({\n columnVisibility: controlledVisibility,\n defaultColumnVisibility = {},\n onColumnVisibilityChange,\n}: UseTableVisibilityProps): UseTableVisibilityReturn {\n // Internal state for uncontrolled mode\n const [internalVisibility, setInternalVisibility] =\n useState<VisibilityState>(defaultColumnVisibility);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnVisibilityChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnVisibilityChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledVisibility !== undefined;\n\n // Use controlled visibility if provided, otherwise use internal state\n const columnVisibilityState = isControlled ? controlledVisibility : internalVisibility;\n\n /**\n * Handle column visibility changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnVisibilityChange = useCallback(\n (updater: Updater<VisibilityState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newVisibility =\n typeof updater === 'function' ? updater(controlledVisibility) : updater;\n onChangeRef.current?.(newVisibility);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalVisibility((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledVisibility is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledVisibility],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnVisibility = useCallback(\n (newVisibility: VisibilityState) => {\n if (isControlled) {\n onChangeRef.current?.(newVisibility);\n } else {\n setInternalVisibility(newVisibility);\n onChangeRef.current?.(newVisibility);\n }\n },\n [isControlled],\n );\n\n return {\n columnVisibilityState,\n handleColumnVisibilityChange,\n isControlled,\n setColumnVisibility,\n };\n}\n","import { useState, useCallback, useRef, useLayoutEffect } from 'react';\nimport type { ColumnSizingState, Updater } from '@tanstack/react-table';\n\nexport interface UseTableSizingProps {\n /**\n * Controlled column sizing state (optional)\n * If provided, the component operates in controlled mode\n */\n columnSizing?: ColumnSizingState;\n\n /**\n * Default column sizing state for uncontrolled mode\n * @default {}\n */\n defaultColumnSizing?: ColumnSizingState;\n\n /**\n * Callback fired when column sizing changes\n * Required for controlled mode, optional for uncontrolled\n */\n onColumnSizingChange?: (state: ColumnSizingState) => void;\n}\n\nexport interface UseTableSizingReturn {\n /**\n * Current column sizing state (controlled or internal)\n */\n columnSizingState: ColumnSizingState;\n\n /**\n * Handler for TanStack Table's onColumnSizingChange\n */\n handleColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;\n\n /**\n * Whether the component is in controlled mode\n */\n isControlled: boolean;\n\n /**\n * Manual setter for uncontrolled mode (useful for imperative actions)\n */\n setColumnSizing: (state: ColumnSizingState) => void;\n}\n\n/**\n * Hook to manage table column sizing state (controlled or uncontrolled)\n *\n * @example Uncontrolled mode\n * ```tsx\n * const { columnSizingState, handleColumnSizingChange } = useTableSizing({\n * defaultColumnSizing: { name: 150, email: 200 },\n * onColumnSizingChange: (state) => console.log(state)\n * });\n * ```\n *\n * @example Controlled mode\n * ```tsx\n * const [sizing, setSizing] = useState<ColumnSizingState>({});\n * const { columnSizingState, handleColumnSizingChange } = useTableSizing({\n * columnSizing: sizing,\n * onColumnSizingChange: setSizing\n * });\n * ```\n */\nexport function useTableSizing({\n columnSizing: controlledSizing,\n defaultColumnSizing = {},\n onColumnSizingChange,\n}: UseTableSizingProps): UseTableSizingReturn {\n // Internal state for uncontrolled mode\n const [internalSizing, setInternalSizing] = useState<ColumnSizingState>(defaultColumnSizing);\n\n // Stable ref to the latest consumer callback — avoids including it in handler deps\n const onChangeRef = useRef(onColumnSizingChange);\n useLayoutEffect(() => {\n onChangeRef.current = onColumnSizingChange;\n });\n\n // Determine if component is in controlled mode\n const isControlled = controlledSizing !== undefined;\n\n // Use controlled sizing if provided, otherwise use internal state\n const columnSizingState = isControlled ? controlledSizing : internalSizing;\n\n /**\n * Handle column sizing changes from TanStack Table.\n * Stable reference: reads previous value via functional setState (uncontrolled)\n * or from the controlled prop ref (controlled) — never closes over state.\n */\n const handleColumnSizingChange = useCallback(\n (updater: Updater<ColumnSizingState>) => {\n if (isControlled) {\n // In controlled mode: compute next value from the controlled prop,\n // then only notify parent — do NOT update internal state\n const newSizing =\n typeof updater === 'function' ? updater(controlledSizing) : updater;\n onChangeRef.current?.(newSizing);\n } else {\n // In uncontrolled mode: use functional setState to read previous value\n // so the handler itself never closes over the state variable\n setInternalSizing((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater;\n onChangeRef.current?.(next);\n return next;\n });\n }\n },\n // isControlled is derived from a prop — keep it so the handler updates if\n // the consumer switches modes. controlledSizing is needed only in the\n // controlled branch where we cannot use functional setState.\n [isControlled, controlledSizing],\n );\n\n /**\n * Manual setter for imperative actions (mainly for uncontrolled mode)\n */\n const setColumnSizing = useCallback(\n (newSizing: ColumnSizingState) => {\n if (isControlled) {\n onChangeRef.current?.(newSizing);\n } else {\n setInternalSizing(newSizing);\n onChangeRef.current?.(newSizing);\n }\n },\n [isControlled],\n );\n\n return {\n columnSizingState,\n handleColumnSizingChange,\n isControlled,\n setColumnSizing,\n };\n}\n","import { useCallback } from 'react';\nimport type { ColumnSizingState, VisibilityState } from '@tanstack/react-table';\nimport type { TableCellSize } from '../data-table.types';\n\nconst PREFIX = 'tcce-table';\n\nfunction storageKey(tableId: string, feature: string) {\n return `${PREFIX}:${tableId}:${feature}`;\n}\n\nfunction readJson<T>(key: string, fallback: T): T {\n if (typeof window === 'undefined') return fallback;\n try {\n const raw = localStorage.getItem(key);\n return raw ? (JSON.parse(raw) as T) : fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction writeJson(key: string, value: unknown): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // quota exceeded or incognito — fail silently\n }\n}\n\nexport interface UseTablePersistenceOptions {\n tableId?: string;\n defaultVisibility?: VisibilityState;\n defaultSizing?: ColumnSizingState;\n defaultDensity?: TableCellSize;\n}\n\nexport interface UseTablePersistenceReturn {\n initialVisibility: VisibilityState;\n initialSizing: ColumnSizingState;\n initialDensity: TableCellSize;\n persistVisibility: (v: VisibilityState) => void;\n persistSizing: (s: ColumnSizingState) => void;\n persistDensity: (d: TableCellSize) => void;\n}\n\nexport function useTablePersistence({\n tableId,\n defaultVisibility = {},\n defaultSizing = {},\n defaultDensity = 'md',\n}: UseTablePersistenceOptions): UseTablePersistenceReturn {\n // Keys are null when persistence is disabled (no tableId). Hooks run\n // unconditionally so the returned persist callbacks keep a stable identity\n // across renders — consumers can safely list them in effect dependencies.\n const visKey = tableId ? storageKey(tableId, 'visibility') : null;\n const sizKey = tableId ? storageKey(tableId, 'sizing') : null;\n const denKey = tableId ? storageKey(tableId, 'density') : null;\n\n const persistVisibility = useCallback(\n (v: VisibilityState) => {\n if (visKey) writeJson(visKey, v);\n },\n [visKey],\n );\n const persistSizing = useCallback(\n (s: ColumnSizingState) => {\n if (sizKey) writeJson(sizKey, s);\n },\n [sizKey],\n );\n const persistDensity = useCallback(\n (d: TableCellSize) => {\n if (denKey) writeJson(denKey, d);\n },\n [denKey],\n );\n\n return {\n initialVisibility: visKey\n ? readJson<VisibilityState>(visKey, defaultVisibility)\n : defaultVisibility,\n initialSizing: sizKey ? readJson<ColumnSizingState>(sizKey, defaultSizing) : defaultSizing,\n initialDensity: denKey ? readJson<TableCellSize>(denKey, defaultDensity) : defaultDensity,\n persistVisibility,\n persistSizing,\n persistDensity,\n };\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type CSSProperties } from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n type Cell,\n type ColumnPinningState,\n type Row,\n} from '@tanstack/react-table';\n\nimport { Table, TableBody, TableCell, TableHeader, TableRow } from '@/components/ui/Table/table';\nimport { cn } from '@/lib/utils';\n\nimport { useMediaQuery } from '@/lib/use-media-query';\nimport { TableContext, useTableContext } from './data-table-context';\nimport { DataTableCardView } from './data-table-card-view';\nimport { DataTableHeaderCell } from './data-table-header-cell';\nimport { DataTableSkeleton } from './data-table-skeleton';\nimport { useTableSorting } from './hooks/use-table-sorting';\nimport { useTableFiltering } from './hooks/use-table-filtering';\nimport { useTableSelection } from './hooks/use-table-selection';\nimport { useTableGlobalFilter } from './hooks/use-table-global-filter';\nimport { useTableVisibility } from './hooks/use-table-visibility';\nimport { useTableSizing } from './hooks/use-table-sizing';\nimport { useTablePersistence } from './hooks/use-table-persistence';\nimport { Checkbox } from '@/components/ui/Checkbox/checkbox';\nimport { getUniqueColumnValues, multiSelectFilter } from './utils/filter-utils';\nimport type {\n ColumnMeta,\n DataTableProps,\n TableCellSize,\n TableClassNames,\n TableColumnDef,\n TableContextType,\n} from './data-table.types';\n\nconst cellSizeClass: Record<TableCellSize, string> = {\n sm: 'px-4 py-2 text-xs',\n md: 'px-5 py-2.5 text-sm',\n lg: 'px-6 py-3 text-sm',\n};\n\nfunction resolveClassName<T>(\n value: string | ((row: Row<T>) => string) | undefined,\n row: Row<T>,\n): string | undefined {\n return typeof value === 'function' ? value(row) : value;\n}\n\nfunction DataTableCell<T>({\n cell,\n cellClassName,\n}: {\n cell: Cell<T, unknown>;\n cellClassName?: string;\n}) {\n const { size: tableSize } = useTableContext<T>();\n const meta = (cell.column.columnDef.meta ?? {}) as ColumnMeta;\n const pinned = cell.column.getIsPinned();\n const value = cell.getValue();\n\n const pinnedStyle: CSSProperties | undefined = pinned\n ? {\n position: 'sticky',\n left: pinned === 'left' ? cell.column.getStart('left') : undefined,\n right: pinned === 'right' ? cell.column.getAfter('right') : undefined,\n zIndex: 11,\n }\n : undefined;\n\n const resolvedWidth = cell.column.getCanResize() ? cell.column.getSize() : meta.width;\n\n return (\n <TableCell\n data-size={meta.size ?? tableSize}\n data-align={meta.align ?? 'left'}\n data-pinned={pinned || undefined}\n title={\n meta.ellipsis && (typeof value === 'string' || typeof value === 'number')\n ? String(value)\n : undefined\n }\n style={{ width: resolvedWidth, minWidth: meta.width, ...pinnedStyle }}\n className={cn(\n cellSizeClass[meta.size ?? tableSize],\n 'text-primary',\n meta.align === 'center' && 'text-center',\n meta.align === 'right' && 'text-right',\n meta.ellipsis && 'max-w-0 truncate',\n pinned && 'bg-background',\n meta.className,\n cellClassName,\n )}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n}\n\nfunction DataTableRow<T>({ row, classNames }: { row: Row<T>; classNames?: TableClassNames<T> }) {\n const { onRowClick, variant } = useTableContext<T>();\n const clickable = Boolean(onRowClick);\n const rowClassName = resolveClassName(classNames?.row, row);\n const cellClassName = resolveClassName(classNames?.cell, row);\n\n return (\n <TableRow\n data-variant={variant}\n data-clickable={clickable || undefined}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n onClick={clickable ? () => onRowClick?.(row.original) : undefined}\n onKeyDown={\n clickable\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onRowClick?.(row.original);\n }\n }\n : undefined\n }\n className={cn('hover:bg-muted', clickable && 'cursor-pointer', rowClassName)}>\n {row.getVisibleCells().map((cell) => (\n <DataTableCell key={cell.id} cell={cell} cellClassName={cellClassName} />\n ))}\n </TableRow>\n );\n}\n\nfunction DataTable<T>({\n data,\n columns,\n size = 'md',\n variant = 'default',\n isLoading = false,\n stickyHeader = false,\n maxHeight,\n sorting,\n defaultSorting = [],\n onSortingChange,\n enableSorting = true,\n manualSorting = false,\n columnFilters,\n defaultColumnFilters = [],\n onColumnFiltersChange,\n enableFiltering = true,\n manualFiltering = false,\n onRowClick,\n classNames,\n getUniqueValues,\n emptyState,\n rowSelection,\n defaultRowSelection = {},\n onRowSelectionChange,\n enableRowSelection = false,\n onSelectedRowsChange,\n responsiveBreakpoint = '(max-width: 767px)',\n disableResponsive = false,\n skeletonRowCount = 5,\n onTableReady,\n tableId,\n globalFilter,\n defaultGlobalFilter = '',\n onGlobalFilterChange,\n columnVisibility,\n defaultColumnVisibility,\n onColumnVisibilityChange,\n columnSizing,\n defaultColumnSizing,\n onColumnSizingChange,\n enableColumnResizing = false,\n onSizeChange,\n toolbar,\n}: DataTableProps<T>) {\n const { sortingState, handleSortingChange, setSorting } = useTableSorting({\n sorting,\n defaultSorting,\n onSortingChange,\n });\n const { columnFiltersState, handleColumnFiltersChange, setColumnFilters } = useTableFiltering({\n columnFilters,\n defaultColumnFilters,\n onColumnFiltersChange,\n });\n\n const { rowSelectionState, handleRowSelectionChange, setRowSelection } = useTableSelection({\n rowSelection,\n defaultRowSelection,\n onRowSelectionChange,\n });\n\n const {\n initialVisibility,\n initialSizing,\n initialDensity,\n persistVisibility,\n persistSizing,\n persistDensity,\n } = useTablePersistence({\n tableId,\n defaultVisibility: defaultColumnVisibility,\n defaultSizing: defaultColumnSizing,\n defaultDensity: size,\n });\n\n const { globalFilterState, handleGlobalFilterChange, setGlobalFilter } = useTableGlobalFilter({\n globalFilter,\n defaultGlobalFilter,\n onGlobalFilterChange,\n });\n\n const { columnVisibilityState, handleColumnVisibilityChange, setColumnVisibility } =\n useTableVisibility({\n columnVisibility,\n defaultColumnVisibility: columnVisibility !== undefined ? undefined : initialVisibility,\n onColumnVisibilityChange,\n });\n\n const { columnSizingState, handleColumnSizingChange, setColumnSizing } = useTableSizing({\n columnSizing,\n defaultColumnSizing: columnSizing !== undefined ? undefined : initialSizing,\n onColumnSizingChange,\n });\n\n const [currentSize, setCurrentSize] = useState<TableCellSize>(initialDensity);\n const setSize = useCallback(\n (newSize: TableCellSize) => {\n setCurrentSize(newSize);\n onSizeChange?.(newSize);\n },\n [onSizeChange],\n );\n\n const selectionColumn: TableColumnDef<T> = useMemo(\n () => ({\n id: 'select',\n header: ({ table }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() ? 'indeterminate' : false)\n }\n onCheckedChange={(v) => table.toggleAllPageRowsSelected(!!v)}\n aria-label='Select all rows'\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(v) => row.toggleSelected(!!v)}\n aria-label={`Select row ${row.index + 1}`}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n meta: { width: 40, align: 'center' },\n }),\n [],\n );\n\n const enrichedColumns = useMemo(\n () => [\n ...(enableRowSelection ? [selectionColumn] : []),\n ...columns.map((col) => {\n const meta = (col.meta ?? {}) as ColumnMeta;\n if (enableFiltering && meta.filterable !== false && !col.filterFn) {\n return { ...col, filterFn: multiSelectFilter };\n }\n return col;\n }),\n ],\n [columns, enableFiltering, enableRowSelection, selectionColumn],\n );\n\n const columnPinning = useMemo<ColumnPinningState>(() => {\n const left: string[] = [];\n const right: string[] = [];\n columns.forEach((col) => {\n const meta = (col.meta ?? {}) as ColumnMeta;\n const id =\n col.id ??\n ('accessorKey' in col && col.accessorKey ? String(col.accessorKey) : undefined);\n if (!id) return;\n if (meta.pinned === 'left') left.push(id);\n if (meta.pinned === 'right') right.push(id);\n });\n return { left, right };\n }, [columns]);\n\n const table = useReactTable({\n data,\n columns: enrichedColumns,\n state: {\n sorting: sortingState,\n columnFilters: columnFiltersState,\n columnPinning,\n rowSelection: rowSelectionState,\n globalFilter: globalFilterState,\n columnVisibility: columnVisibilityState,\n columnSizing: columnSizingState,\n },\n onSortingChange: handleSortingChange,\n onColumnFiltersChange: handleColumnFiltersChange,\n onRowSelectionChange: handleRowSelectionChange,\n onGlobalFilterChange: handleGlobalFilterChange,\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnSizingChange: handleColumnSizingChange,\n enableRowSelection,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: manualSorting ? undefined : getSortedRowModel(),\n getFilteredRowModel: manualFiltering ? undefined : getFilteredRowModel(),\n enableSorting,\n enableSortingRemoval: true,\n manualSorting,\n enableColumnFilters: enableFiltering,\n manualFiltering,\n filterFns: { multiSelect: multiSelectFilter },\n globalFilterFn: 'includesString',\n enableColumnPinning: true,\n columnResizeMode: 'onChange',\n enableColumnResizing,\n });\n\n useEffect(() => {\n onTableReady?.(table);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // intentional: fire once on mount only\n\n useEffect(() => {\n persistVisibility(columnVisibilityState);\n }, [columnVisibilityState, persistVisibility]);\n useEffect(() => {\n persistSizing(columnSizingState);\n }, [columnSizingState, persistSizing]);\n useEffect(() => {\n persistDensity(currentSize);\n }, [currentSize, persistDensity]);\n\n const onSelectedRowsChangeRef = useRef(onSelectedRowsChange);\n useLayoutEffect(() => {\n onSelectedRowsChangeRef.current = onSelectedRowsChange;\n });\n\n useEffect(() => {\n if (!onSelectedRowsChangeRef.current) return;\n const selected = table.getSelectedRowModel().rows.map((r) => r.original);\n onSelectedRowsChangeRef.current(selected);\n }, [rowSelectionState, table]);\n\n const resolvedGetUniqueValues = useCallback(\n (columnId: string) => getUniqueValues?.(columnId) ?? getUniqueColumnValues(data, columnId),\n [getUniqueValues, data],\n );\n\n const ctx: TableContextType<T> = useMemo(\n () => ({\n size: currentSize,\n variant,\n sorting: sortingState,\n setSorting,\n columnFilters: columnFiltersState,\n setColumnFilters,\n getUniqueValues: resolvedGetUniqueValues,\n onRowClick,\n rowSelection: rowSelectionState,\n setRowSelection,\n globalFilter: globalFilterState,\n setGlobalFilter,\n columnVisibility: columnVisibilityState,\n setColumnVisibility,\n columnSizing: columnSizingState,\n setColumnSizing,\n setSize,\n table: table as unknown as import('@tanstack/react-table').Table<T>,\n }),\n [\n currentSize,\n variant,\n sortingState,\n setSorting,\n columnFiltersState,\n setColumnFilters,\n resolvedGetUniqueValues,\n onRowClick,\n rowSelectionState,\n setRowSelection,\n globalFilterState,\n setGlobalFilter,\n columnVisibilityState,\n setColumnVisibility,\n columnSizingState,\n setColumnSizing,\n setSize,\n table,\n ],\n );\n\n const isMobile = useMediaQuery(responsiveBreakpoint);\n const showCardView = !disableResponsive && isMobile;\n\n const rows = table.getRowModel().rows;\n const columnCount = table.getAllLeafColumns().length;\n\n return (\n <TableContext.Provider value={ctx as unknown as TableContextType<unknown>}>\n {toolbar}\n {showCardView ? (\n <DataTableCardView\n rows={rows}\n columns={table.getAllLeafColumns()}\n size={currentSize}\n variant={variant}\n onRowClick={onRowClick}\n isLoading={isLoading}\n skeletonRowCount={skeletonRowCount}\n emptyState={emptyState}\n />\n ) : (\n <div\n data-slot='data-table-wrapper'\n className={cn(\n 'bg-card text-card-foreground relative overflow-auto rounded-md border',\n classNames?.wrapper,\n )}\n style={maxHeight ? { maxHeight } : undefined}>\n <Table\n data-variant={variant}\n // The wrapper above already owns scrolling (overflow-auto + maxHeight).\n // Keep the inner container `overflow-visible` so it does not become a\n // nested scroll container that traps the sticky header cells.\n containerClassName='overflow-visible'\n className={cn(\n variant === 'striped' && '[&_tbody_tr:nth-child(even)]:bg-muted/40',\n classNames?.table,\n )}>\n <TableHeader\n className={cn(\n // Apply the sticky offset to the header cells (`th`) rather than\n // the `<thead>`: cell-level sticky is the broadly compatible form\n // across browsers. The scroll container is the wrapper above\n // (overflow-auto + maxHeight), and the inner table container is\n // kept overflow-visible so it does not trap these sticky cells.\n // The cells already carry an opaque `bg-primary`, so body rows\n // never bleed through underneath while scrolling.\n stickyHeader && '[&_th]:sticky [&_th]:top-0 [&_th]:z-20',\n classNames?.header,\n )}>\n {table.getHeaderGroups().map((hg) => (\n <TableRow key={hg.id}>\n {hg.headers.map((header) => (\n <DataTableHeaderCell key={header.id} header={header} />\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody className={classNames?.body}>\n {isLoading ? (\n <DataTableSkeleton columnCount={columnCount} size={currentSize} />\n ) : rows.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columnCount}\n className='text-muted-foreground h-24 text-center'>\n {emptyState ?? 'No results found'}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => (\n <DataTableRow key={row.id} row={row} classNames={classNames} />\n ))\n )}\n </TableBody>\n </Table>\n </div>\n )}\n </TableContext.Provider>\n );\n}\n\nexport { DataTable, useTableContext };\n","import { useMemo, useState, useCallback, useEffect } from 'react';\nimport type { SortingState, ColumnFiltersState, ColumnDef } from '@tanstack/react-table';\n\nimport { getUniqueColumnValues } from '../utils/filter-utils';\n\nexport interface UseTableDataProps<T> {\n data: T[];\n columns: ColumnDef<T, unknown>[];\n initialPage?: number;\n initialPerPage?: number;\n initialSorting?: SortingState;\n initialColumnFilters?: ColumnFiltersState;\n}\n\nexport interface UseTableDataReturn<T> {\n paginatedData: T[];\n processedData: T[];\n\n page: number;\n perPage: number;\n totalPages: number;\n totalRecords: number;\n\n filteredRecords: number;\n setPage: (page: number) => void;\n setPerPage: (perPage: number) => void;\n\n sorting: SortingState;\n setSorting: (sorting: SortingState) => void;\n\n columnFilters: ColumnFiltersState;\n setColumnFilters: (filters: ColumnFiltersState) => void;\n\n getUniqueValues: (columnId: string) => string[];\n}\n\nexport function useTableData<T extends Record<string, unknown>>({\n data,\n columns,\n initialPage = 1,\n initialPerPage = 10,\n initialSorting = [],\n initialColumnFilters = [],\n}: UseTableDataProps<T>): UseTableDataReturn<T> {\n const [page, setPageState] = useState(initialPage);\n const [perPage, setPerPageState] = useState(initialPerPage);\n const [sorting, setSorting] = useState<SortingState>(initialSorting);\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>(initialColumnFilters);\n\n // Precompute unique values for each column (memoized)\n const uniqueValuesMap = useMemo(() => {\n const map = new Map<string, string[]>();\n columns.forEach((col) => {\n const columnId =\n col.id ??\n ('accessorKey' in col && col.accessorKey ? String(col.accessorKey) : undefined);\n if (!columnId) return;\n\n const accessor = 'accessorFn' in col ? col.accessorFn : undefined;\n map.set(columnId, getUniqueColumnValues(data, columnId, accessor));\n });\n return map;\n }, [data, columns]);\n\n // Keep the same getUniqueValues API but make it O(1) by reading the memoized map\n const getUniqueValues = useMemo(() => {\n return (columnId: string) => {\n return uniqueValuesMap.get(columnId) || [];\n };\n }, [uniqueValuesMap]);\n\n // Apply filters to ALL data\n const filteredData = useMemo(() => {\n if (columnFilters.length === 0) return data;\n\n return data.filter((row) => {\n return columnFilters.every((filter) => {\n const filterValues = filter.value as string[];\n if (!filterValues || filterValues.length === 0) return true;\n\n const cellValue = row[filter.id];\n if (cellValue == null) {\n return false;\n }\n\n return filterValues.includes(String(cellValue));\n });\n });\n }, [data, columnFilters]);\n\n // Apply sorting to ALL filtered data\n const sortedData = useMemo(() => {\n if (sorting.length === 0) {\n return filteredData;\n }\n\n return [...filteredData].sort((a, b) => {\n for (const sort of sorting) {\n const aValue = a[sort.id];\n const bValue = b[sort.id];\n\n // Handle null/undefined\n if (aValue == null && bValue == null) continue;\n if (aValue == null) return sort.desc ? -1 : 1;\n if (bValue == null) return sort.desc ? 1 : -1;\n\n // Compare values\n let comparison = 0;\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n comparison = aValue.localeCompare(bValue);\n } else if (typeof aValue === 'number' && typeof bValue === 'number') {\n comparison = aValue - bValue;\n } else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n if (comparison !== 0) {\n return sort.desc ? -comparison : comparison;\n }\n }\n return 0;\n });\n }, [filteredData, sorting]);\n\n // Apply pagination LAST\n const paginatedData = useMemo(() => {\n const startIndex = (page - 1) * perPage;\n const endIndex = startIndex + perPage;\n return sortedData.slice(startIndex, endIndex);\n }, [sortedData, page, perPage]);\n\n // Calculate pagination info\n const totalRecords = data.length;\n const filteredRecords = sortedData.length;\n const totalPages = Math.max(1, Math.ceil(filteredRecords / perPage));\n\n const setPage = useCallback(\n (newPage: number) => {\n setPageState(Math.min(newPage, totalPages));\n },\n [totalPages],\n );\n\n const setPerPage = useCallback((newPerPage: number) => {\n setPerPageState(newPerPage);\n setPageState(1);\n }, []);\n\n // Auto-reset page when filters change and current page is out of bounds\n useEffect(() => {\n if (page > totalPages) {\n setPageState(1);\n }\n }, [page, totalPages]);\n\n return {\n paginatedData,\n processedData: sortedData,\n page,\n perPage,\n totalPages,\n totalRecords,\n filteredRecords,\n setPage,\n setPerPage,\n sorting,\n setSorting,\n columnFilters,\n setColumnFilters,\n getUniqueValues,\n };\n}\n","import type { SortingState } from '@tanstack/react-table';\n\n/**\n * Backend sorting format - object representation\n * Example: { name: 'asc', created_at: 'desc' }\n */\nexport type SortRecord = Record<string, 'asc' | 'desc'>;\n\n/**\n * Converts TanStack Table SortingState to backend-friendly record format\n *\n * @param sortingState - TanStack sorting state array\n * @returns Object with field names as keys and 'asc'/'desc' as values\n *\n * @example\n * ```ts\n * const sortingState = [\n * { id: 'name', desc: false },\n * { id: 'created_at', desc: true }\n * ];\n *\n * const sortRecord = sortingStateToRecord(sortingState);\n * // Result: { name: 'asc', created_at: 'desc' }\n * ```\n */\nexport function sortingStateToRecord(sortingState: SortingState): SortRecord {\n const sortRecord: SortRecord = {};\n\n for (const sort of sortingState) {\n sortRecord[sort.id] = sort.desc ? 'desc' : 'asc';\n }\n\n return sortRecord;\n}\n\n/**\n * Converts backend sort record to TanStack Table SortingState\n * Useful for initializing sorting state from backend response\n *\n * @param sortRecord - Object with field names and sort directions\n * @returns TanStack sorting state array\n *\n * @example\n * ```ts\n * const sortRecord = { name: 'asc', created_at: 'desc' };\n *\n * const sortingState = sortRecordToSortingState(sortRecord);\n * // Result: [\n * // { id: 'name', desc: false },\n * // { id: 'created_at', desc: true }\n * // ]\n * ```\n */\nexport function sortRecordToSortingState(sortRecord: SortRecord): SortingState {\n return Object.entries(sortRecord).map(([field, direction]) => ({\n id: field,\n desc: direction === 'desc',\n }));\n}\n\n/**\n * Converts SortingState to JSON string ready to send to Laravel backend\n * This is a convenience function for API calls\n *\n * @param sortingState - TanStack sorting state array\n * @returns JSON string representation of sort record\n *\n * @example\n * ```ts\n * const sortingState = [{ id: 'name', desc: false }];\n * const sortsParam = sortingStateToJsonString(sortingState);\n * // Result: '{\"name\":\"asc\"}'\n *\n * // Use in API call:\n * fetch(`/api/users?sorts=${sortsParam}`);\n * ```\n */\nexport function sortingStateToJsonString(sortingState: SortingState): string {\n if (sortingState.length === 0) {\n return '';\n }\n return JSON.stringify(sortingStateToRecord(sortingState));\n}\n\n/**\n * Creates URLSearchParams for backend pagination with sorting\n * Compatible with Laravel PaginateHelper\n *\n * @param options - Pagination and sorting options\n * @returns URLSearchParams ready to append to API request\n *\n * @example\n * ```ts\n * const params = createBackendParams({\n * sorting: [{ id: 'name', desc: false }],\n * perPage: 20,\n * genericSearch: 'john',\n * filters: { role: 'admin', status: 'active' }\n * });\n *\n * fetch(`/api/users?${params.toString()}`);\n * // Result: /api/users?sorts={\"name\":\"asc\"}&perPage=20&genericSearch=john&filters={\"role\":\"admin\",\"status\":\"active\"}\n * ```\n */\nexport function createBackendParams(options: {\n sorting?: SortingState;\n perPage?: number;\n genericSearch?: string;\n filters?: Record<string, unknown>;\n}): URLSearchParams {\n const params = new URLSearchParams();\n\n // Add sorting if present\n if (options.sorting && options.sorting.length > 0) {\n params.append('sorts', sortingStateToJsonString(options.sorting));\n }\n\n // Add pagination — use !== undefined so perPage === 0 is not silently skipped.\n if (options.perPage !== undefined) {\n params.append('perPage', options.perPage.toString());\n }\n\n // Add generic search\n if (options.genericSearch) {\n params.append('genericSearch', options.genericSearch);\n }\n\n // Add filters\n if (options.filters && Object.keys(options.filters).length > 0) {\n params.append('filters', JSON.stringify(options.filters));\n }\n\n return params;\n}\n","import type { ColumnFiltersState } from '@tanstack/react-table';\n\n/**\n * Converts ColumnFiltersState to a simple object format\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => { status: ['Active', 'Pending'] }\n *\n * @param filters - The column filters state from TanStack Table\n * @returns Object with columnId as keys and filter values as values\n */\nexport function columnFiltersToRecord(filters: ColumnFiltersState): Record<string, string[]> {\n const record: Record<string, string[]> = {};\n\n filters.forEach((filter) => {\n record[filter.id] = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n });\n\n return record;\n}\n\n/**\n * Converts ColumnFiltersState to a JSON string\n * Useful for API calls that expect JSON format\n *\n * @param filters - The column filters state from TanStack Table\n * @returns JSON string representation of filters\n */\nexport function columnFiltersToJsonString(filters: ColumnFiltersState): string {\n return JSON.stringify(columnFiltersToRecord(filters));\n}\n\n/**\n * Converts ColumnFiltersState to URL query params format\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => 'filter[status]=Active,Pending'\n *\n * @param filters - The column filters state from TanStack Table\n * @param separator - Separator for multiple values (default: ',')\n * @returns Object suitable for URLSearchParams\n */\nexport function columnFiltersToQueryParams(\n filters: ColumnFiltersState,\n separator: string = ',',\n): Record<string, string> {\n const params: Record<string, string> = {};\n\n filters.forEach((filter) => {\n const values = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n if (values.length > 0) {\n params[`filter[${filter.id}]`] = values.join(separator);\n }\n });\n\n return params;\n}\n\n/**\n * Converts ColumnFiltersState to individual query params per value\n * Example: [{ id: 'status', value: ['Active', 'Pending'] }]\n * => 'filter[status][]=Active&filter[status][]=Pending'\n *\n * @param filters - The column filters state from TanStack Table\n * @returns Object suitable for URLSearchParams with array notation\n */\nexport function columnFiltersToArrayQueryParams(\n filters: ColumnFiltersState,\n): Record<string, string[]> {\n const params: Record<string, string[]> = {};\n\n filters.forEach((filter) => {\n const values = Array.isArray(filter.value) ? (filter.value as string[]) : [];\n if (values.length > 0) {\n params[`filter[${filter.id}]`] = values;\n }\n });\n\n return params;\n}\n\n/**\n * Creates complete backend request params with filters, sorting, and pagination\n * Combines filtering with other table features\n *\n * @param options - Configuration object\n * @param options.filters - Column filters state\n * @param options.sorts - Optional sorting state\n * @param options.page - Optional page number\n * @param options.perPage - Optional items per page\n * @returns Complete params object for API requests\n */\nexport function createBackendParamsWithFilters({\n filters,\n sorts,\n page,\n perPage,\n}: {\n filters: ColumnFiltersState;\n sorts?: Array<{ id: string; desc: boolean }>;\n page?: number;\n perPage?: number;\n}): Record<string, string | number> {\n const params: Record<string, string | number> = {};\n\n // Add pagination params\n if (page !== undefined) {\n params.page = page;\n }\n if (perPage !== undefined) {\n params.per_page = perPage;\n }\n\n // Add sorting params\n if (sorts && sorts.length > 0) {\n const sortBy = sorts.map((s) => s.id).join(',');\n const sortOrder = sorts.map((s) => (s.desc ? 'desc' : 'asc')).join(',');\n params.sort_by = sortBy;\n params.sort_order = sortOrder;\n }\n\n // Add filter params\n if (filters && filters.length > 0) {\n params.filters = columnFiltersToJsonString(filters);\n }\n\n return params;\n}\n\n/**\n * Parses URL query params back to ColumnFiltersState\n * Useful for restoring filters from URL\n *\n * @param params - URLSearchParams or query string\n * @param separator - Separator used in the query params (default: ',')\n * @returns ColumnFiltersState\n */\nexport function parseQueryParamsToFilters(\n params: URLSearchParams | string,\n separator: string = ',',\n): ColumnFiltersState {\n const searchParams = typeof params === 'string' ? new URLSearchParams(params) : params;\n const filters: ColumnFiltersState = [];\n\n searchParams.forEach((value, key) => {\n // Match filter[columnId] format\n const match = key.match(/^filter\\[(.+)\\]$/);\n if (match) {\n const columnId = match[1];\n const values = value.split(separator).filter(Boolean);\n if (values.length > 0) {\n filters.push({ id: columnId, value: values });\n }\n }\n });\n\n return filters;\n}\n\n/**\n * Parses JSON string back to ColumnFiltersState\n *\n * @param jsonString - JSON string representation of filters\n * @returns ColumnFiltersState\n */\nexport function parseJsonToFilters(jsonString: string): ColumnFiltersState {\n try {\n const record = JSON.parse(jsonString) as unknown;\n // Guard against non-object or array values before iterating entries.\n if (!record || typeof record !== 'object' || Array.isArray(record)) return [];\n return Object.entries(record as Record<string, string[]>).map(([id, value]) => ({\n id,\n value,\n }));\n } catch {\n return [];\n }\n}\n\n/**\n * Merges multiple filter states, with later filters overriding earlier ones\n *\n * @param filterStates - Multiple ColumnFiltersState arrays to merge\n * @returns Merged ColumnFiltersState\n */\nexport function mergeFilters(...filterStates: ColumnFiltersState[]): ColumnFiltersState {\n const mergedMap = new Map<string, string[]>();\n\n filterStates.forEach((state) => {\n state.forEach((filter) => {\n mergedMap.set(filter.id, Array.isArray(filter.value) ? (filter.value as string[]) : []);\n });\n });\n\n return Array.from(mergedMap.entries()).map(([id, value]) => ({ id, value }));\n}\n","import { Fragment } from 'react';\nimport {Ellipsis} from 'lucide-react';\nimport { Button } from '@/components/ui/Button/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu/dropdown-menu';\n\nexport interface RowAction<T> {\n label: string;\n onClick: (row: T) => void;\n /** Renders a separator above this item */\n separator?: boolean;\n disabled?: boolean | ((row: T) => boolean);\n /** Renders item in destructive (red) style */\n destructive?: boolean;\n}\n\ninterface DataTableRowActionsProps<T> {\n row: T;\n actions: RowAction<T>[];\n /** Screen-reader label for the trigger button. Default: \"Open actions\" */\n label?: string;\n}\n\nfunction DataTableRowActions<T>({\n row,\n actions,\n label = 'Open actions',\n}: DataTableRowActionsProps<T>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n data-slot='data-table-row-actions'\n variant='ghost'\n size='icon-sm'\n aria-label={label}\n className='data-[state=open]:bg-muted'>\n <Ellipsis className='size-4' aria-hidden='true' />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n {actions.map((action) => {\n const isDisabled =\n typeof action.disabled === 'function'\n ? action.disabled(row)\n : (action.disabled ?? false);\n return (\n <Fragment key={action.label}>\n {action.separator && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={() => action.onClick(row)}\n disabled={isDisabled}\n className={\n action.destructive\n ? 'text-destructive focus:text-destructive'\n : undefined\n }>\n {action.label}\n </DropdownMenuItem>\n </Fragment>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport { DataTableRowActions };\nexport type { DataTableRowActionsProps };\n","import { cn } from '@/lib/utils';\nimport { TablePagination } from '../Pagination/pagination';\nimport type { TablePaginationProps } from './data-table.types';\n\ninterface DataTableFooterProps {\n pagination: TablePaginationProps;\n /** Selected row count — renders \"N row(s) selected\" on the left */\n selectedCount?: number;\n className?: string;\n}\n\nfunction DataTableFooter({ pagination, selectedCount, className }: DataTableFooterProps) {\n return (\n <div\n data-slot='data-table-footer'\n className={cn('flex items-center justify-between border-t px-4 py-2', className)}>\n {selectedCount != null && selectedCount > 0 && (\n <span aria-live='polite' className='text-muted-foreground text-xs'>\n {`${selectedCount} row${selectedCount > 1 ? 's' : ''} selected`}\n </span>\n )}\n <TablePagination {...pagination} />\n </div>\n );\n}\n\nexport { DataTableFooter };\nexport type { DataTableFooterProps };\n","import { useCallback, type ReactNode } from 'react';\nimport type { ColumnFiltersState, Table } from '@tanstack/react-table';\nimport { X, Eye, Rows2 } from 'lucide-react';\nimport type { TableCellSize } from './data-table.types';\n\nimport { Button } from '@/components/ui/Button/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu/dropdown-menu';\nimport { Badge } from '@/components/ui/Badge/badge';\nimport { cn } from '@/lib/utils';\nimport { getActiveFilterCount } from './utils/filter-utils';\nimport { useTableContextSafe } from './data-table-context';\n\nconst DENSITY_OPTIONS: { value: TableCellSize; label: string }[] = [\n { value: 'sm', label: 'Compact' },\n { value: 'md', label: 'Default' },\n { value: 'lg', label: 'Comfortable' },\n];\n\ninterface DataTableToolbarProps<T> {\n /** TanStack Table instance. Optional when toolbar is rendered inside DataTable's toolbar prop (context available). */\n table?: Table<T>;\n /** Slot rendered on the left — e.g. search input, bulk-action buttons */\n leading?: ReactNode;\n /** Slot rendered on the right alongside the Columns button */\n trailing?: ReactNode;\n className?: string;\n /** Hide the built-in Columns visibility toggle. Default: false */\n hideColumnsToggle?: boolean;\n /** Hide the density toggle. Default: false */\n hideDensityToggle?: boolean;\n /**\n * Pass columnFilters directly if Toolbar is rendered outside DataTable's\n * context provider. When inside a DataTable, this is read from context.\n */\n columnFilters?: ColumnFiltersState;\n}\n\nfunction DataTableToolbar<T>({\n table: tableProp,\n leading,\n trailing,\n className,\n hideColumnsToggle = false,\n hideDensityToggle = false,\n columnFilters: columnFiltersProp,\n}: DataTableToolbarProps<T>) {\n const ctx = useTableContextSafe<T>();\n const table = tableProp ?? (ctx?.table as Table<T> | undefined);\n const resolvedFilters = columnFiltersProp ?? ctx?.columnFilters ?? [];\n const activeFilterCount = getActiveFilterCount(resolvedFilters);\n\n const globalFilter = ctx?.globalFilter ?? '';\n const hasActiveFilters = activeFilterCount > 0 || globalFilter.length > 0;\n\n const handleClearFilters = useCallback(() => {\n ctx?.setColumnFilters([]);\n ctx?.setGlobalFilter('');\n }, [ctx]);\n\n return (\n <div\n data-slot='data-table-toolbar'\n className={cn('flex items-center justify-between gap-2 py-2', className)}>\n <div className='flex flex-1 items-center gap-2'>\n {leading}\n {activeFilterCount > 0 && (\n <Badge variant='default' className='h-6 text-xs'>\n {activeFilterCount} filter{activeFilterCount > 1 ? 's' : ''} active\n </Badge>\n )}\n </div>\n\n <div className='flex items-center gap-2'>\n {trailing}\n {hasActiveFilters && (\n <Button\n variant='ghost'\n size='sm'\n onClick={handleClearFilters}\n className='text-muted-foreground hover:text-foreground gap-1'>\n <X className='size-4' aria-hidden='true' />\n Clear filters\n </Button>\n )}\n {!hideDensityToggle && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='sm' className='gap-1 border'>\n <Rows2 className='size-4' aria-hidden='true' />\n Density\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n <DropdownMenuLabel>Row density</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {DENSITY_OPTIONS.map((opt) => (\n <DropdownMenuCheckboxItem\n key={opt.value}\n checked={ctx?.size === opt.value}\n onCheckedChange={() => ctx?.setSize(opt.value)}>\n {opt.label}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {!hideColumnsToggle && table && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant='ghost' size='sm' className='gap-1 border'>\n <Eye className='size-4' aria-hidden='true' />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-44'>\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((col) => col.getCanHide())\n .map((col) => (\n <DropdownMenuCheckboxItem\n key={col.id}\n className='capitalize'\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(!!v)}>\n {typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n );\n}\n\nexport { DataTableToolbar };\nexport type { DataTableToolbarProps };\n","import { useEffect, useState } from 'react';\nimport { Search, X } from 'lucide-react';\nimport { Input } from '@/components/ui/Input/input';\nimport { Button } from '@/components/ui/Button/button';\nimport { cn } from '@/lib/utils';\nimport { useTableContextSafe } from './data-table-context';\n\ninterface DataTableSearchProps {\n placeholder?: string;\n className?: string;\n /** Debounce delay in ms before committing to context. Default: 300 */\n debounce?: number;\n}\n\nfunction DataTableSearch({\n placeholder = 'Search…',\n className,\n debounce = 300,\n}: DataTableSearchProps) {\n const ctx = useTableContextSafe();\n const [inputValue, setInputValue] = useState('');\n\n // Extract stable primitives/callbacks from the context object to avoid\n // including the entire ctx object in effect dependency arrays (which would\n // cause the debounce timer to restart on every render).\n const globalFilter = ctx?.globalFilter;\n const setGlobalFilter = ctx?.setGlobalFilter;\n\n // Sync input when global filter is cleared externally (e.g. Clear filters button)\n useEffect(() => {\n if (globalFilter === '') setInputValue('');\n }, [globalFilter]);\n\n // Debounced commit to context — depends only on stable primitives.\n useEffect(() => {\n const timer = setTimeout(() => {\n setGlobalFilter?.(inputValue);\n }, debounce);\n return () => clearTimeout(timer);\n }, [inputValue, debounce, setGlobalFilter]);\n\n const handleClear = () => {\n setInputValue('');\n setGlobalFilter?.('');\n };\n\n return (\n <div data-slot='data-table-search' className={cn('relative flex items-center', className)}>\n <Search\n className='text-muted-foreground pointer-events-none absolute top-1/2 left-3 z-10 -translate-y-1/2'\n size={16}\n />\n <Input\n type='search'\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n className='h-8 w-48 pr-8 pl-8 text-sm'\n />\n {inputValue && (\n <Button\n variant='ghost'\n size='icon-sm'\n onClick={handleClear}\n aria-label='Clear search'\n className='text-muted-foreground hover:text-foreground absolute right-0.5 size-6'>\n <X className='size-3.5' aria-hidden='true' />\n </Button>\n )}\n </div>\n );\n}\n\nexport { DataTableSearch };\nexport type { DataTableSearchProps };\n","import type { ReactNode } from 'react';\nimport { AbilityProvider } from '@/components/authorization/Can/ability-context';\nimport { Toaster, type ToasterPosition } from '@/components/ui/Toast/toast';\nimport { TooltipProvider } from '@/components/ui/Tooltip/tooltip';\n\nexport interface TCCEProviderProps {\n children: ReactNode;\n permissions?: string[];\n toasterPosition?: ToasterPosition;\n tooltipDelayDuration?: number;\n}\n\nexport function TCCEProvider({\n children,\n permissions,\n toasterPosition,\n tooltipDelayDuration,\n}: TCCEProviderProps) {\n return (\n <TooltipProvider delayDuration={tooltipDelayDuration}>\n <AbilityProvider permissions={permissions}>\n <Toaster position={toasterPosition}>\n {children}\n </Toaster>\n </AbilityProvider>\n </TooltipProvider>\n );\n}\n"]}