@j3m-quantum/ui 1.6.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/use-mobile.ts","../src/lib/utils.ts","../src/components/button.tsx","../src/components/separator.tsx","../src/components/button-group.tsx","../src/components/input.tsx","../src/components/textarea.tsx","../src/components/input-group.tsx","../src/components/checkbox.tsx","../src/components/radio-group.tsx","../src/components/switch.tsx","../src/components/slider.tsx","../src/components/select.tsx","../src/components/native-select.tsx","../src/components/toggle.tsx","../src/components/toggle-group.tsx","../src/components/theme-switch.tsx","../src/components/toolbar-canvas.tsx","../src/components/player-canvas.tsx","../src/components/label.tsx","../src/components/form.tsx","../src/components/field.tsx","../src/components/card.tsx","../src/components/table.tsx","../src/components/badge.tsx","../src/components/avatar.tsx","../src/components/dropdown-menu.tsx","../src/components/user-avatars-dropdown.tsx","../src/components/skeleton.tsx","../src/components/accordion.tsx","../src/components/tabs.tsx","../src/components/calendar.tsx","../src/components/carousel.tsx","../src/components/chart.tsx","../src/components/aspect-ratio.tsx","../src/components/empty.tsx","../src/components/item.tsx","../src/components/kbd.tsx","../src/components/alert.tsx","../src/components/alert-dialog.tsx","../src/components/progress.tsx","../src/components/tooltip.tsx","../src/components/sonner.tsx","../src/components/spinner.tsx","../src/components/delivery-indicator.tsx","../src/components/breadcrumb.tsx","../src/components/pagination.tsx","../src/components/dialog.tsx","../src/components/scroll-area.tsx","../src/components/command.tsx","../src/components/search-trigger.tsx","../src/components/menubar.tsx","../src/components/navigation-menu.tsx","../src/components/context-menu.tsx","../src/components/drawer.tsx","../src/components/sheet.tsx","../src/components/popover.tsx","../src/components/hover-card.tsx","../src/components/collapsible.tsx","../src/components/resizable.tsx","../src/components/sidebar.tsx","../src/components/section.tsx","../src/components/data-table/data-table-column-header.tsx","../src/components/data-table/data-table-pagination.tsx","../src/components/data-table/data-table-view-options.tsx","../src/blocks/sidebar-01/search-form.tsx","../src/blocks/sidebar-01/site-header.tsx","../src/blocks/sidebar-01/nav-main.tsx","../src/blocks/sidebar-01/nav-projects.tsx","../src/blocks/sidebar-01/nav-secondary.tsx","../src/blocks/sidebar-01/nav-user.tsx","../src/blocks/planning-table/planning-table-toolbar.tsx","../src/blocks/planning-table/supplier-cell.tsx","../src/blocks/planning-table/week-cell.tsx","../src/blocks/planning-table/week-header.tsx","../src/blocks/planning-table/types.ts","../src/blocks/planning-table/columns.tsx","../src/blocks/planning-table/planning-table.tsx","../src/blocks/planning-table/week-detail-dialog.tsx","../src/components/event-calendar/types.ts","../src/components/event-calendar/calendar-context.tsx","../src/components/event-calendar/helpers.ts","../src/components/event-calendar/event-badge.tsx","../src/components/event-calendar/date-badge.tsx","../src/components/event-calendar/dnd-context.tsx","../src/components/event-calendar/month-view.tsx","../src/components/event-calendar/week-view.tsx","../src/components/event-calendar/day-view.tsx","../src/components/event-calendar/year-view.tsx","../src/components/event-calendar/agenda-view.tsx","../src/components/event-calendar/calendar-header.tsx","../src/components/event-calendar/event-dialog.tsx","../src/components/event-calendar/settings/badge-variant-input.tsx","../src/components/event-calendar/settings/visible-hours-input.tsx","../src/components/event-calendar/settings/working-hours-input.tsx","../src/components/event-calendar/settings/settings-panel.tsx","../src/components/event-calendar/big-calendar.tsx"],"names":["React","React2","jsx","cva","Slot","React3","jsxs","CheckIcon","ChevronDownIcon","React4","React5","TogglePrimitive2","Label","React6","useMemo","CircleIcon","className","props","ChevronRightIcon","React7","React8","api","React9","config","Item","Tooltip","React10","isDark","Sonner","Loader2Icon","ChevronLeftIcon","CommandPrimitive","React11","SearchIcon","DrawerPrimitive","SheetPrimitive","XIcon","CollapsibleTrigger","CollapsibleContent","React12","open","React13","Fragment","ChevronRight","React14","MoreHorizontalIcon","React15","useReactTable","getCoreRowModel","getSortedRowModel","getFilteredRowModel","getPaginationRowModel","flexRender","React16","Truck","Calendar","Factory","addMonths","subMonths","addYears","subYears","addWeeks","subWeeks","addDays","subDays","formatDateRange","format","parseISO","React18","React19","React20","isSameDay","startOfDay","DraggableEventWrapper","React21","startOfWeek","areIntervalsOverlapping","DroppableTimeSlot","React22","CalendarTimeline","CalendarIcon","React23","startOfYear","isSameMonth","colorClasses","React24","endOfDay","List","ChevronLeft","Icon","EVENT_COLORS","React25","setMinutes","setHours","React26","HOUR_OPTIONS","React27","Info","Settings","React28","Content"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAM,iBAAA,GAAoB,GAAA;AAEnB,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUA,iBAA8B,MAAS,CAAA;AAE7E,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,MAAM,MAAA,CAAO,UAAA,CAAW,CAAA,YAAA,EAAe,iBAAA,GAAoB,CAAC,CAAA,GAAA,CAAK,CAAA;AACvE,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,WAAA,CAAY,MAAA,CAAO,aAAa,iBAAiB,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACvC,IAAA,WAAA,CAAY,MAAA,CAAO,aAAa,iBAAiB,CAAA;AACjD,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,CAAC,CAAC,QAAA;AACX;ACfO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACCA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,uSAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,wDAAA;AAAA,QACF,WAAA,EACE,oEAAA;AAAA,QACF,OAAA,EACE,gFAAA;AAAA,QACF,SAAA,EACE,kFAAA;AAAA,QACF,KAAA,EAAO,8CAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,eAAA;AAAA,QACT,EAAA,EAAI,6BAAA;AAAA,QACJ,EAAA,EAAI,sBAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAQA,IAAM,MAAA,GAAeC,OAAA,CAAA,UAAA;AAAA,EACnB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,UAAU,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAChE,IAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,QAAA;AAC9B,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,QAAA;AAAA,QACV,gBAAc,OAAA,IAAW,SAAA;AAAA,QACzB,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,QAC1D,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;ACnDrB,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACEC,GAAAA;AAAA,IAAoB,kBAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gKAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AClBA,IAAM,mBAAA,GAAsBC,GAAAA;AAAA,EAC1B,kSAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,UAAA,EACE,iHAAA;AAAA,QACF,QAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,WAAA,EAAa;AAAA;AACf;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2E;AACzE,EAAA,uBACED,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAU,cAAA;AAAA,MACV,kBAAA,EAAkB,WAAA;AAAA,MAClB,WAAW,EAAA,CAAG,mBAAA,CAAoB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,IAAA,GAAO,UAAUE,IAAAA,GAAO,KAAA;AAE9B,EAAA,uBACEF,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,wJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,GAAG;AACL,CAAA,EAA2C;AACzC,EAAA,uBACEA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,wBAAA;AAAA,MACV,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,wEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACxEA,SAAS,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAAkC;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,ubAAA;AAAA,QACA,+EAAA;AAAA,QACA,wGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACdA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAqC;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qcAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACLA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,0JAAA;AAAA,QACA,oCAAA;AAAA;AAAA,QAGA,iDAAA;AAAA,QACA,+CAAA;AAAA,QACA,gIAAA;AAAA,QACA,0HAAA;AAAA;AAAA,QAGA,iMAAA;AAAA;AAAA,QAGA,gLAAA;AAAA,QAEA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAM,uBAAA,GAA0BC,GAAAA;AAAA,EAC9B,yPAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,KAAA,EAAO;AAAA,QACL,cAAA,EACE,uEAAA;AAAA,QACF,YAAA,EACE,sEAAA;AAAA,QACF,aAAA,EACE,mGAAA;AAAA,QACF,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO;AAAA;AACT;AAEJ,CAAA;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,KAAA,GAAQ,cAAA;AAAA,EACR,GAAG;AACL,CAAA,EAA+E;AAC7E,EAAA,uBACED,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAU,mBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,WAAW,EAAA,CAAG,uBAAA,CAAwB,EAAE,KAAA,EAAO,GAAG,SAAS,CAAA;AAAA,MAC3D,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,QAAA,IAAK,CAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC/C,UAAA;AAAA,QACF;AACA,QAAA,CAAA,CAAE,aAAA,CAAc,aAAA,EAAe,aAAA,CAAc,OAAO,GAAG,KAAA,EAAM;AAAA,MAC/D,CAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAM,wBAAA,GAA2BC,GAAAA;AAAA,EAC/B,6CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,yGAAA;AAAA,QACJ,EAAA,EAAI,iDAAA;AAAA,QACJ,SAAA,EACE,6DAAA;AAAA,QACF,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,OAAA,GAAU,OAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,GAAG;AACL,CAAA,EACiD;AAC/C,EAAA,uBACED,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAW,IAAA;AAAA,MACX,OAAA;AAAA,MACA,WAAW,EAAA,CAAG,wBAAA,CAAyB,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiC;AAC7E,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,wHAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkC;AAChC,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,kGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqC;AACnC,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,mHAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACxJA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBACEA,GAAAA;AAAA,IAAmB,iBAAA,CAAA,IAAA;AAAA,IAAlB;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA;AAAA,QAAmB,iBAAA,CAAA,SAAA;AAAA,QAAlB;AAAA,UACC,WAAA,EAAU,oBAAA;AAAA,UACV,SAAA,EAAU,wDAAA;AAAA,UAEV,QAAA,kBAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA;AAClC;AAAA,GACF;AAEJ;ACrBA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEA,GAAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,MACpC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEA,GAAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wXAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA;AAAA,QAAqB,mBAAA,CAAA,SAAA;AAAA,QAApB;AAAA,UACC,WAAA,EAAU,uBAAA;AAAA,UACV,SAAA,EAAU,2CAAA;AAAA,UAEV,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,iFAAA,EAAkF;AAAA;AAAA;AAC1G;AAAA,GACF;AAEJ;ACnCA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,2WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA;AAAA,QAAiB,eAAA,CAAA,KAAA;AAAA,QAAhB;AAAA,UACC,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACT;AAAA;AACF;AAAA;AACF;AAAA,GACF;AAEJ;ACrBA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA,GAAM,CAAA;AAAA,EACN,GAAA,GAAM,GAAA;AAAA,EACN,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,MAAM,OAAA,GAAgBG,OAAA,CAAA,OAAA;AAAA,IACpB,MACE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GACf,KAAA,GACA,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GACxB,YAAA,GACA,CAAC,KAAK,GAAG,CAAA;AAAA,IACjB,CAAC,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,GAAG;AAAA,GAChC;AAEA,EAAA,uBACE,IAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,YAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,qOAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAH,GAAAA;AAAA,UAAiB,eAAA,CAAA,KAAA;AAAA,UAAhB;AAAA,YACC,WAAA,EAAU,cAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT;AAAA,aACF;AAAA,YAEA,QAAA,kBAAAA,GAAAA;AAAA,cAAiB,eAAA,CAAA,KAAA;AAAA,cAAhB;AAAA,gBACC,WAAA,EAAU,cAAA;AAAA,gBACV,SAAA,EAAW,EAAA;AAAA,kBACT;AAAA;AACF;AAAA;AACF;AAAA,SACF;AAAA,QACC,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAO,EAAG,CAAC,CAAA,EAAG,KAAA,qBAC1CA,GAAAA;AAAA,UAAiB,eAAA,CAAA,KAAA;AAAA,UAAhB;AAAA,YACC,WAAA,EAAU,cAAA;AAAA,YAEV,SAAA,EAAU;AAAA,WAAA;AAAA,UADL;AAAA,SAGR;AAAA;AAAA;AAAA,GACH;AAEJ;ACpDA,SAAS,MAAA,CAAO;AAAA,EACd,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBAAOA,GAAAA,CAAiB,eAAA,CAAA,IAAA,EAAhB,EAAqB,WAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC7D;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBAAOA,GAAAA,CAAiB,eAAA,CAAA,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBAAOA,GAAAA,CAAiB,eAAA,CAAA,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEI,IAAAA;AAAA,IAAiB,eAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,8yBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDJ,GAAAA,CAAiB,eAAA,CAAA,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EAC3B,QAAA,kBAAAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,mBAAA,EAAoB,CAAA,EACjD;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,QAAA;AAAA,EACX,KAAA,GAAQ,QAAA;AAAA,EACR,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACEA,GAAAA,CAAiB,eAAA,CAAA,MAAA,EAAhB,EACC,QAAA,kBAAAI,IAAAA;AAAA,IAAiB,eAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,+iBAAA;AAAA,QACA,aAAa,QAAA,IACX,iIAAA;AAAA,QACF;AAAA,OACF;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,IAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,wBACtBA,GAAAA;AAAA,UAAiB,eAAA,CAAA,QAAA;AAAA,UAAhB;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,KAAA;AAAA,cACA,aAAa,QAAA,IACX;AAAA,aACJ;AAAA,YAEC;AAAA;AAAA,SACH;AAAA,wBACAA,IAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAAA,GAC1B,EACF,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA;AAAA,MACnE,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBACEI,IAAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,2aAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EACd,0BAAAA,GAAAA,CAAiB,eAAA,CAAA,aAAA,EAAhB,EACC,QAAA,kBAAAA,IAACK,SAAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,GAChC,CAAA,EACF,CAAA;AAAA,wBACAL,GAAAA,CAAiB,eAAA,CAAA,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AAAA,GACtC;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,SAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA;AAAA,MACvE,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgE;AAC9D,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,cAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,sDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,GACpC;AAEJ;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkE;AAChE,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,gBAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,sDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,GACtC;AAEJ;ACxKA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAC7E,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,qEAAA;AAAA,MACV,WAAA,EAAU,uBAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAJ,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,eAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,yVAAA;AAAA,cACA,+EAAA;AAAA,cACA,wGAAA;AAAA,cACA;AAAA,aACF;AAAA,YACC,GAAG;AAAA;AAAA,SACN;AAAA,wBACAA,GAAAA;AAAA,UAACM,eAAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qHAAA;AAAA,YACV,aAAA,EAAY,MAAA;AAAA,YACZ,WAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,kBAAA,CAAmB,EAAE,GAAG,KAAA,EAAM,EAAmC;AACxE,EAAA,uBAAON,GAAAA,CAAC,QAAA,EAAA,EAAO,WAAA,EAAU,sBAAA,EAAwB,GAAG,KAAA,EAAO,CAAA;AAC7D;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqC;AACnC,EAAA,uBACEA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,MACtB,GAAG;AAAA;AAAA,GACN;AAEJ;ACrCA,IAAM,cAAA,GAAiBC,GAAAA;AAAA,EACrB,ijBAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,kBAAA;AAAA,QACT,EAAA,EAAI,oBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACL,CAAA,EACuC;AACrC,EAAA,uBACED,GAAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ;ACnCA,IAAM,qBAA2BO,OAAA,CAAA,aAAA,CAI/B;AAAA,EACA,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAC,CAAA;AAED,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAGK;AACH,EAAA,uBACEP,GAAAA;AAAA,IAAsB,oBAAA,CAAA,IAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,cAAA,EAAc,OAAA;AAAA,MACd,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAQ;AAAA,MAC1B,SAAA,EAAW,EAAA;AAAA,QACT,2IAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAQ,EAC1D,QAAA,EACH;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACL,CAAA,EACuC;AACrC,EAAA,MAAM,OAAA,GAAgBO,mBAAW,kBAAkB,CAAA;AAEnD,EAAA,uBACEP,GAAAA;AAAA,IAAsB,oBAAA,CAAA,IAAA;AAAA,IAArB;AAAA,MACC,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,QACT,cAAA,CAAe;AAAA,UACb,OAAA,EAAS,QAAQ,OAAA,IAAW,OAAA;AAAA,UAC5B,IAAA,EAAM,QAAQ,IAAA,IAAQ;AAAA,SACvB,CAAA;AAAA,QACD,4DAAA;AAAA,QACA,6OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AC3DA,SAAS,WAAA,CAAY;AAAA,EACnB,OAAA;AAAA,EACA,cAAA,GAAiB,KAAA;AAAA,EACjB,eAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,IAAA,GAAO;AACT,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUQ,iBAAS,cAAc,CAAA;AAG/D,EAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,EAAA,MAAM,cAAA,GAAiB,eAAe,OAAA,GAAU,SAAA;AAEhD,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,QAAA,EAAU;AAEd,IAAA,MAAM,WAAW,CAAC,cAAA;AAClB,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,IACvB;AACA,IAAA,eAAA,GAAkB,QAAQ,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAA,EAAI;AAAA,MACF,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,QAAA;AAAA,MACP,IAAA,EAAM,aAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,KAAA,EAAO,UAAA;AAAA,MACP,KAAA,EAAO,QAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACb;AAAA,IACA,EAAA,EAAI;AAAA,MACF,KAAA,EAAO,UAAA;AAAA,MACP,KAAA,EAAO,QAAA;AAAA,MACP,IAAA,EAAM,aAAA;AAAA,MACN,SAAA,EAAW;AAAA;AACb,GACF;AAEA,EAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAE9B,EAAA,uBACER,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,QAAA;AAAA,MACL,cAAA,EAAc,cAAA;AAAA,MACd,YAAA,EAAY,iBAAiB,sBAAA,GAAyB,qBAAA;AAAA,MACtD,WAAA,EAAU,cAAA;AAAA,MACV,YAAA,EAAY,iBAAiB,SAAA,GAAY,WAAA;AAAA,MACzC,QAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA,QACA,iEAAA;AAAA,QACA,qDAAA;AAAA,QACA,iDAAA;AAAA,QACA,0CAAA;AAAA,QACA,KAAA,CAAM,KAAA;AAAA,QACN;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,YAAA,EAAY,iBAAiB,SAAA,GAAY,WAAA;AAAA,UACzC,SAAA,EAAW,EAAA;AAAA,YACT,mEAAA;AAAA,YACA,gDAAA;AAAA,YACA,wCAAA;AAAA,YACA,KAAA,CAAM,KAAA;AAAA,YACN,KAAA,CAAM;AAAA,WACR;AAAA,UAEC,2CACCA,GAAAA,CAAC,YAAS,SAAA,EAAW,EAAA,CAAG,MAAM,IAAA,EAAM,cAAc,GAAG,CAAA,mBAErDA,IAAC,OAAA,EAAA,EAAQ,SAAA,EAAW,GAAG,KAAA,CAAM,IAAA,EAAM,uBAAuB,CAAA,EAAG;AAAA;AAAA;AAEjE;AAAA,GACF;AAEJ;AAGA,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAU,EAA2B;AACtD,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAJ,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,wBAC9BA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,CAAA;AAAA,wBAClBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,wBACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAA,EAAuB,CAAA;AAAA,wBAC/BA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wBAAA,EAAyB,CAAA;AAAA,wBACjCA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,CAAA;AAAA,wBAClBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,wBACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB,CAAA;AAAA,wBAChCA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB;AAAA;AAAA;AAAA,GAClC;AAEJ;AAGA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAA2B;AACvD,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MAEA,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oCAAA,EAAqC;AAAA;AAAA,GAC/C;AAEJ;AC7IA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,IAAM,2BAAA,GAA8BC,GAAAA;AAAA,EAClC,6NAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,SAAA;AAAA,QACT,EAAA,EAAI,QAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAGA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACoD;AAClD,EAAA,uBACED,GAAAA;AAAA,IAAiBS,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,2BAAA,CAA4B,EAAE,IAAA,EAAM,CAAA;AAAA,QACpC,wEAAA;AAAA,QACA,oEAAA;AAAA,QACA,iCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;ACrFA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACET,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8BAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,sFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,IAAM,8BAAA,GAAiCC,GAAAA;AAAA,EACrC,yPAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,SAAA;AAAA,QACT,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAQA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,SAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACED,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,2BAAA;AAAA,MACV,cAAA,EAAc,SAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA,QACT,8BAAA,CAA+B,EAAE,IAAA,EAAM,CAAA;AAAA,QACvC,iCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,qBAAA;AAAA,QACjB,GAAG;AAAA,OACL;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAGA,IAAM,8BAAA,GAAiCC,GAAAA;AAAA,EACrC,oSAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,SAAA;AAAA,QACT,EAAA,EAAI,QAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,SAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACuD;AACrD,EAAA,uBACED,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8BAAA,CAA+B,EAAE,IAAA,EAAM,CAAA;AAAA,QACvC,iCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAGA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,MACrE,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiC;AAC/B,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,iEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiC;AAC/B,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,gDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,wBAAA,CAAyB;AAAA,EAChC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkD;AAChD,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,6BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,4SAAA;AAAA,QACA,iCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAQA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,GAAA,GAAM,GAAA;AAAA,EACN,GAAG;AACL,CAAA,EAA8B;AAC5B,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA,EAAI,KAAA,GAAQ,GAAA,GAAO,GAAG,CAAC,CAAA;AAEjE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,mEAAA,EAAqE,SAAS,CAAA;AAAA,MAC3F,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,4BAAA;AAAA,UACV,SAAA,EAAU,oEAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,GAAG,UAAU,CAAA,CAAA,CAAA;AAAA,YACpB,eAAA,EAAiB;AAAA;AACnB;AAAA;AACF;AAAA,GACF;AAEJ;AC7OA,SAASU,MAAAA,CAAM;AAAA,EACb,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqD;AACnD,EAAA,uBACEV,GAAAA;AAAA,IAAgB,cAAA,CAAA,IAAA;AAAA,IAAf;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qNAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACHA,IAAM,IAAA,GAAO;AASb,IAAM,gBAAA,GAAyBW,OAAA,CAAA,aAAA;AAAA,EAC7B;AACF,CAAA;AAEA,IAAM,YAAY,CAGhB;AAAA,EACA,GAAG;AACL,CAAA,KAA4C;AAC1C,EAAA,uBACEX,GAAAA,CAAC,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,OAAO,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,IAC9C,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,OAAO,CAAA,EACzB,CAAA;AAEJ;AAEA,IAAM,eAAe,MAAM;AACzB,EAAA,MAAM,YAAA,GAAqBW,mBAAW,gBAAgB,CAAA;AACtD,EAAA,MAAM,WAAA,GAAoBA,mBAAW,eAAe,CAAA;AACpD,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,cAAA,EAAe;AACzC,EAAA,MAAM,YAAY,YAAA,CAAa,EAAE,IAAA,EAAM,YAAA,CAAa,MAAM,CAAA;AAC1D,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,YAAA,CAAa,IAAA,EAAM,SAAS,CAAA;AAE7D,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AAEA,EAAA,MAAM,EAAE,IAAG,GAAI,WAAA;AAEf,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,MAAM,YAAA,CAAa,IAAA;AAAA,IACnB,UAAA,EAAY,GAAG,EAAE,CAAA,UAAA,CAAA;AAAA,IACjB,iBAAA,EAAmB,GAAG,EAAE,CAAA,sBAAA,CAAA;AAAA,IACxB,aAAA,EAAe,GAAG,EAAE,CAAA,kBAAA,CAAA;AAAA,IACpB,GAAG;AAAA,GACL;AACF;AAMA,IAAM,eAAA,GAAwBA,OAAA,CAAA,aAAA;AAAA,EAC5B;AACF,CAAA;AAEA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACtE,EAAA,MAAM,KAAWA,OAAA,CAAA,KAAA,EAAM;AAEvB,EAAA,uBACEX,IAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,EAAE,EAAA,EAAG,EACpC,QAAA,kBAAAA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,MACpC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqD;AACnD,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAW,GAAI,YAAA,EAAa;AAE3C,EAAA,uBACEA,GAAAA;AAAA,IAACU,MAAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,YAAA,EAAY,CAAC,CAAC,KAAA;AAAA,MACd,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC7D,OAAA,EAAS,UAAA;AAAA,MACR,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,GAAG,KAAA,EAAM,EAAsC;AACpE,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,iBAAA,EAAmB,aAAA,KAAkB,YAAA,EAAa;AAE7E,EAAA,uBACEV,GAAAA;AAAA,IAACE,IAAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,EAAA,EAAI,UAAA;AAAA,MACJ,kBAAA,EACE,CAAC,KAAA,GACG,CAAA,EAAG,iBAAiB,CAAA,CAAA,GACpB,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA;AAAA,MAE3C,cAAA,EAAc,CAAC,CAAC,KAAA;AAAA,MACf,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8B;AAC3E,EAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,YAAA,EAAa;AAE3C,EAAA,uBACEF,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,EAAA,EAAI,iBAAA;AAAA,MACJ,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8B;AACvE,EAAA,MAAM,EAAE,KAAA,EAAO,aAAA,EAAc,GAAI,YAAA,EAAa;AAC9C,EAAA,MAAM,OAAO,KAAA,GAAQ,MAAA,CAAO,OAAO,OAAA,IAAW,EAAE,IAAI,KAAA,CAAM,QAAA;AAE1D,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,EAAA,EAAI,aAAA;AAAA,MACJ,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,MAClD,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AClJA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAqC;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qBAAA;AAAA,QACA,8EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,OAAA,GAAU,QAAA;AAAA,EACV,GAAG;AACL,CAAA,EAAsE;AACpE,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA,QACT,kBAAA;AAAA,QACA,iCAAA;AAAA,QACA,8BAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wIAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAM,aAAA,GAAgBC,GAAAA;AAAA,EACpB,oEAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,QAAA,EAAU,CAAC,2CAA2C,CAAA;AAAA,QACtD,UAAA,EAAY;AAAA,UACV,uBAAA;AAAA,UACA,uCAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,UAAA,EAAY;AAAA,UACV,8HAAA;AAAA,UACA,uDAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,WAAA,EAAa;AAAA;AACf;AAEJ,CAAA;AAEA,SAAS,KAAA,CAAM;AAAA,EACb,SAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAqE;AACnE,EAAA,uBACED,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAU,OAAA;AAAA,MACV,kBAAA,EAAkB,WAAA;AAAA,MAClB,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MACtD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,+DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuC;AACrC,EAAA,uBACEA,GAAAA;AAAA,IAACU,MAAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8GAAA;AAAA,QACA,mKAAA;AAAA,QACA,2HAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEV,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,4GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8B;AAC5E,EAAA,uBACEA,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,uHAAA;AAAA,QACA,8DAAA;AAAA,QACA,mEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAc,CAAC,CAAC,QAAA;AAAA,MAChB,SAAA,EAAW,EAAA;AAAA,QACT,2EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,0BAAA,EAA2B,CAAA;AAAA,QAC/C,4BACCA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,uEAAA;AAAA,YACV,WAAA,EAAU,yBAAA;AAAA,YAET;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,OAAA,GAAUY,QAAQ,MAAM;AAC5B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAG,IAAI,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,CAAC,KAAA,EAAO,OAAA,EAAS,KAAK,CAAC,CAAC,EAAE,MAAA;AAAO,KACpE;AAEA,IAAA,IAAI,YAAA,EAAc,UAAU,CAAA,EAAG;AAC7B,MAAA,OAAO,YAAA,CAAa,CAAC,CAAA,EAAG,OAAA;AAAA,IAC1B;AAEA,IAAA,uBACEZ,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,sCACX,QAAA,EAAA,YAAA,CAAa,GAAA;AAAA,MACZ,CAAC,KAAA,EAAO,KAAA,KACN,KAAA,EAAO,OAAA,oBAAWA,GAAAA,CAAC,IAAA,EAAA,EAAgB,QAAA,EAAA,KAAA,CAAM,OAAA,EAAA,EAAd,KAAsB;AAAA,KACrD,EACF,CAAA;AAAA,EAEJ,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAErB,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA;AAAA,MAC9D,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;ACrOA,IAAM,YAAA,GAAeC,GAAAA;AAAA,EACnB,iCAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,eAAA;AAAA;AAAA,UACA,oCAAA;AAAA,UACA,yCAAA;AAAA,UACA,uBAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,GAAG;AAAA;AACZ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAMA,SAAS,KAAK,EAAE,SAAA,EAAW,OAAA,EAAS,GAAG,OAAM,EAAc;AACzD,EAAA,uBACED,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,MAAA;AAAA,MACV,WAAW,EAAA,CAAG,YAAA,CAAa,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA;AAAA,MACnD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACvE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA;AAAA,MACnE,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC7E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,MACpD,GAAG;AAAA;AAAA,GACN;AAEJ;AClFA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AACrE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAU,iCAAA;AAAA,MAEV,QAAA,kBAAAA,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,OAAA;AAAA,UACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,UACvD,GAAG;AAAA;AAAA;AACN;AAAA,GACF;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA;AAAA,MACzC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AACzE,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,MACpD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,yDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACrE,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACtE,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACtE,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoC;AAClC,EAAA,uBACEA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;AClGA,IAAM,aAAA,GAAgBC,GAAAA;AAAA,EACpB,kZAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,gFAAA;AAAA,QACF,SAAA,EACE,sFAAA;AAAA,QACF,WAAA,EACE,2KAAA;AAAA,QACF,OAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAEA,SAAS,KAAA,CAAM;AAAA,EACb,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAC8D;AAC5D,EAAA,MAAM,IAAA,GAAO,UAAUC,IAAAA,GAAO,MAAA;AAE9B,EAAA,uBACEF,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ;ACpCA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,IAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,4DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,QAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,kEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AC1CA,SAAS,YAAA,CAAa;AAAA,EACpB,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBAAOA,GAAAA,CAAuB,qBAAA,CAAA,IAAA,EAAtB,EAA2B,WAAA,EAAU,eAAA,EAAiB,GAAG,KAAA,EAAO,CAAA;AAC1E;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,GAAAA,CAAuB,qBAAA,CAAA,MAAA,EAAtB,EAA6B,WAAA,EAAU,sBAAA,EAAwB,GAAG,KAAA,EAAO,CAAA;AAE9E;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,GAAG;AACL,CAAA,EAA+D;AAC7D,EAAA,uBACEA,GAAAA;AAAA,IAAuB,qBAAA,CAAA,OAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA+D;AAC7D,EAAA,uBACEA,GAAAA,CAAuB,qBAAA,CAAA,MAAA,EAAtB,EACC,QAAA,kBAAAA,GAAAA;AAAA,IAAuB,qBAAA,CAAA,OAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,wjBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACEA,GAAAA,CAAuB,qBAAA,CAAA,KAAA,EAAtB,EAA4B,WAAA,EAAU,qBAAA,EAAuB,GAAG,KAAA,EAAO,CAAA;AAE5E;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACL,CAAA,EAGG;AACD,EAAA,uBACEA,GAAAA;AAAA,IAAuB,qBAAA,CAAA,IAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA,QACT,6mBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,wBAAA,CAAyB;AAAA,EAChC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoE;AAClE,EAAA,uBACEI,IAAAA;AAAA,IAAuB,qBAAA,CAAA,YAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,6BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+EAAA,EACd,0BAAAA,GAAAA,CAAuB,qBAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAAA,IAACK,SAAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,GAChC,CAAA,EACF,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,GAAG;AACL,CAAA,EAAkE;AAChE,EAAA,uBACEL,GAAAA;AAAA,IAAuB,qBAAA,CAAA,UAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,2BAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiE;AAC/D,EAAA,uBACEI,IAAAA;AAAA,IAAuB,qBAAA,CAAA,SAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,0BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+EAAA,EACd,0BAAAA,GAAAA,CAAuB,qBAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAAA,IAACa,UAAAA,EAAA,EAAW,SAAA,EAAU,qBAAA,EAAsB,GAC9C,CAAA,EACF,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEb,GAAAA;AAAA,IAAuB,qBAAA,CAAA,KAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,mDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiE;AAC/D,EAAA,uBACEA,GAAAA;AAAA,IAAuB,qBAAA,CAAA,SAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA;AAAA,MACnD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiC;AAC/B,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,uDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,uBAAOA,GAAAA,CAAuB,qBAAA,CAAA,GAAA,EAAtB,EAA0B,WAAA,EAAU,mBAAA,EAAqB,GAAG,KAAA,EAAO,CAAA;AAC7E;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEI,IAAAA;AAAA,IAAuB,qBAAA,CAAA,UAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,2BAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,4WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDJ,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,gBAAA,EAAiB;AAAA;AAAA;AAAA,GAC/C;AAEJ;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkE;AAChE,EAAA,uBACEA,GAAAA;AAAA,IAAuB,qBAAA,CAAA,UAAA;AAAA,IAAtB;AAAA,MACC,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,+eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACzMO,SAAS,mBAAA,CAAoB;AAAA,EAClC,KAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,KAAA,GAAQ,KAAA;AAAA,EACR;AACF,CAAA,EAA6B;AAC3B,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA;AAC9C,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,SAAS,UAAU,CAAA;AAG3D,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAiB;AACpC,IAAA,OAAO,KACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC,CAAA,CACf,KAAK,EAAE,CAAA,CACP,aAAY,CACZ,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,EACf,CAAA;AAGA,EAAA,MAAM,eAAe,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,cAAc,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAe,cAAA,GAAiB,YAAA,EAAc,IAAA,IAAQ,MAAA,GAAS,KAAA;AAErE,EAAA,uBACEI,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAI,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,0GAAA;AAAA,UACA,wFAAA;AAAA,UACA;AAAA,SACF;AAAA,QAGA,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,qBACjBA,IAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,mCAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAJ,IAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAK,KAAA,EAAO,GAAA,EAAK,KAAK,IAAA,EAAM,CAAA;AAAA,kCAC9CA,IAAC,cAAA,EAAA,EAAe,SAAA,EAAU,eACvB,QAAA,EAAA,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EACxB;AAAA;AAAA,eAAA;AAAA,cANK,IAAA,CAAK;AAAA,aAQb,CAAA;AAAA,YACA,gBAAgB,CAAA,oBACfI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kHAAA,EAAmH,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cAC9H;AAAA,aAAA,EACJ;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAGAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,0BAG5CA,GAAAA,CAACM,eAAAA,EAAA,EAAgB,WAAU,8BAAA,EAA+B;AAAA;AAAA;AAAA,KAC5D,EACF,CAAA;AAAA,oBAEAF,IAAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAM,KAAA,EAAM,WAAU,MAAA,EAEzC,QAAA,EAAA;AAAA,sBAAAA,IAAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,UAC5B,SAAA,EAAU,mCAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAK,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,YACd,mBAAmB,IAAA,oBAAQA,IAACK,SAAAA,EAAA,EAAU,WAAU,QAAA,EAAS;AAAA;AAAA;AAAA,OAC5D;AAAA,sBAEAL,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,MAGtB,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVI,IAAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UAEC,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA;AAAA,UAC/B,SAAA,EAAU,mCAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,QAAA,EAChB,QAAA,EAAA;AAAA,gCAAAJ,IAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAK,KAAA,EAAO,GAAA,EAAK,KAAK,IAAA,EAAM,CAAA;AAAA,gCAC9CA,IAAC,cAAA,EAAA,EAAe,SAAA,EAAU,cACvB,QAAA,EAAA,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EACxB;AAAA,eAAA,EACF,CAAA;AAAA,8BACAA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK;AAAA,aAAA,EACnB,CAAA;AAAA,YACC,cAAA,KAAmB,KAAK,EAAA,oBAAMA,IAACK,SAAAA,EAAA,EAAU,WAAU,QAAA,EAAS;AAAA;AAAA,SAAA;AAAA,QAbxD,IAAA,CAAK;AAAA,OAeb;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;ACrIA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACtE,EAAA,uBACEL,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;ACFA,SAAS,SAAA,CAAU;AAAA,EACjB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBAAOA,GAAAA,CAAoB,kBAAA,CAAA,IAAA,EAAnB,EAAwB,WAAA,EAAU,WAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AACnE;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACEA,GAAAA;AAAA,IAAoB,kBAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACEA,GAAAA,CAAoB,kBAAA,CAAA,MAAA,EAAnB,EAA0B,SAAA,EAAU,QACnC,QAAA,kBAAAI,IAAAA;AAAA,IAAoB,kBAAA,CAAA,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,4SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDJ,GAAAA,CAACM,eAAAA,EAAA,EAAgB,WAAU,6GAAA,EAA8G;AAAA;AAAA;AAAA,GAC3I,EACF,CAAA;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACEN,GAAAA;AAAA,IAAoB,kBAAA,CAAA,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAU,2GAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,WAAA,EAAa,SAAS,GAAI,QAAA,EAAS;AAAA;AAAA,GACxD;AAEJ;ACxDA,SAAS,IAAA,CAAK;AAAA,EACZ,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoD;AAClD,EAAA,uBACEA,GAAAA;AAAA,IAAe,aAAA,CAAA,IAAA;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoD;AAClD,EAAA,uBACEA,GAAAA;AAAA,IAAe,aAAA,CAAA,IAAA;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACEA,GAAAA;AAAA,IAAe,aAAA,CAAA,OAAA;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6vBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACEA,GAAAA;AAAA,IAAe,aAAA,CAAA,OAAA;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA,GACN;AAEJ;ACnDA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,aAAA,GAAgB,OAAA;AAAA,EAChB,UAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2C;AACzC,EAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAE/C,EAAA,uBACEA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,eAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,mGAAA;AAAA,QACA,MAAA,CAAO,GAAA,CAAA,yCAAA,CAAA;AAAA,QACP,MAAA,CAAO,GAAA,CAAA,6CAAA,CAAA;AAAA,QACP;AAAA,OACF;AAAA,MACA,aAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACV,mBAAA,EAAqB,CAAC,IAAA,KACpB,IAAA,CAAK,eAAe,SAAA,EAAW,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,QACnD,GAAG;AAAA,OACL;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,EAAA,CAAG,OAAA,EAAS,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACxC,MAAA,EAAQ,EAAA;AAAA,UACN,0CAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,KAAA,EAAO,EAAA,CAAG,4BAAA,EAA8B,iBAAA,CAAkB,KAAK,CAAA;AAAA,QAC/D,GAAA,EAAK,EAAA;AAAA,UACH,yEAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,eAAA,EAAiB,EAAA;AAAA,UACf,sJAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACX,sJAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,aAAA,EAAe,EAAA;AAAA,UACb,0EAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,qFAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,aAAA,EAAe,EAAA;AAAA,UACb,qHAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,QAAA,EAAU,EAAA;AAAA,UACR,uCAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,aAAA,EAAe,EAAA;AAAA,UACb,yBAAA;AAAA,UACA,aAAA,KAAkB,UACd,SAAA,GACA,yGAAA;AAAA,UACJ,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,KAAA,EAAO,wBAAA;AAAA,QACP,QAAA,EAAU,EAAA,CAAG,MAAA,EAAQ,iBAAA,CAAkB,QAAQ,CAAA;AAAA,QAC/C,OAAA,EAAS,EAAA;AAAA,UACP,+EAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,IAAA,EAAM,EAAA,CAAG,kBAAA,EAAoB,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACnD,kBAAA,EAAoB,EAAA;AAAA,UAClB,6BAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACX,iDAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,GAAA,EAAK,EAAA;AAAA,UACH,mIAAA;AAAA,UACA,KAAA,CAAM,iBACF,0DAAA,GACA,yDAAA;AAAA,UACJ,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACX,wBAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,YAAA,EAAc,EAAA,CAAG,cAAA,EAAgB,iBAAA,CAAkB,YAAY,CAAA;AAAA,QAC/D,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,iBAAA,CAAkB,SAAS,CAAA;AAAA,QACnE,KAAA,EAAO,EAAA;AAAA,UACL,2DAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,OAAA,EAAS,EAAA;AAAA,UACP,2DAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,QAAA,EAAU,EAAA;AAAA,UACR,kCAAA;AAAA,UACA,iBAAA,CAAkB;AAAA,SACpB;AAAA,QACA,MAAA,EAAQ,EAAA,CAAG,WAAA,EAAa,iBAAA,CAAkB,MAAM,CAAA;AAAA,QAChD,GAAG;AAAA,OACL;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,CAAC,EAAE,SAAA,EAAAc,YAAW,OAAA,EAAS,GAAGC,QAAM,KAAM;AAC1C,UAAA,uBACEf,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,UAAA;AAAA,cACV,GAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAW,GAAGc,UAAS,CAAA;AAAA,cACtB,GAAGC;AAAA;AAAA,WACN;AAAA,QAEJ,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,EAAE,SAAA,EAAAD,YAAW,WAAA,EAAa,GAAGC,QAAM,KAAM;AACjD,UAAA,IAAI,gBAAgB,MAAA,EAAQ;AAC1B,YAAA,uBACEf,IAAC,eAAA,EAAA,EAAgB,SAAA,EAAW,GAAG,QAAA,EAAUc,UAAS,CAAA,EAAI,GAAGC,MAAAA,EAAO,CAAA;AAAA,UAEpE;AAEA,UAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,YAAA,uBACEf,GAAAA;AAAA,cAACgB,gBAAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA,CAAG,QAAA,EAAUF,UAAS,CAAA;AAAA,gBAChC,GAAGC;AAAA;AAAA,aACN;AAAA,UAEJ;AAEA,UAAA,uBACEf,GAAAA,CAACM,eAAAA,EAAA,EAAgB,SAAA,EAAW,GAAG,QAAA,EAAUQ,UAAS,CAAA,EAAI,GAAGC,MAAAA,EAAO,CAAA;AAAA,QAEpE,CAAA;AAAA,QACA,SAAA,EAAW,iBAAA;AAAA,QACX,YAAY,CAAC,EAAE,QAAA,EAAU,GAAGA,QAAM,KAAM;AACtC,UAAA,uBACEf,GAAAA,CAAC,IAAA,EAAA,EAAI,GAAGe,MAAAA,EACN,QAAA,kBAAAf,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACZ,QAAA,EACH,CAAA,EACF,CAAA;AAAA,QAEJ,CAAA;AAAA,QACA,GAAG;AAAA,OACL;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2C;AACzC,EAAA,MAAM,GAAA,GAAYiB,eAA0B,IAAI,CAAA;AAChD,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,SAAA,CAAU,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,KAAA,EAAM;AAAA,EAC5C,CAAA,EAAG,CAAC,SAAA,CAAU,OAAO,CAAC,CAAA;AAEtB,EAAA,uBACEjB,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,UAAA,EAAU,GAAA,CAAI,IAAA,CAAK,kBAAA,EAAmB;AAAA,MACtC,sBAAA,EACE,SAAA,CAAU,QAAA,IACV,CAAC,SAAA,CAAU,eACX,CAAC,SAAA,CAAU,SAAA,IACX,CAAC,SAAA,CAAU,YAAA;AAAA,MAEb,oBAAkB,SAAA,CAAU,WAAA;AAAA,MAC5B,kBAAgB,SAAA,CAAU,SAAA;AAAA,MAC1B,qBAAmB,SAAA,CAAU,YAAA;AAAA,MAC7B,SAAA,EAAW,EAAA;AAAA,QACT,qrBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AC3KA,IAAM,eAAA,GAAwBkB,sBAA2C,IAAI,CAAA;AAE7E,SAAS,WAAA,GAAc;AACrB,EAAA,MAAM,OAAA,GAAgBA,mBAAW,eAAe,CAAA;AAEhD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,QAAA,CAAS;AAAA,EAChB,WAAA,GAAc,YAAA;AAAA,EACd,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgD;AAC9C,EAAA,MAAM,CAAC,WAAA,EAAa,GAAG,CAAA,GAAI,gBAAA;AAAA,IACzB;AAAA,MACE,GAAG,IAAA;AAAA,MACH,IAAA,EAAM,WAAA,KAAgB,YAAA,GAAe,GAAA,GAAM;AAAA,KAC7C;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAE9D,EAAA,MAAM,QAAA,GAAiBA,OAAA,CAAA,WAAA,CAAY,CAACC,IAAAA,KAAqB;AACvD,IAAA,IAAI,CAACA,IAAAA,EAAK;AACV,IAAA,gBAAA,CAAiBA,IAAAA,CAAI,eAAe,CAAA;AACpC,IAAA,gBAAA,CAAiBA,IAAAA,CAAI,eAAe,CAAA;AAAA,EACtC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAmBD,oBAAY,MAAM;AACzC,IAAA,GAAA,EAAK,UAAA,EAAW;AAAA,EAClB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,UAAA,GAAmBA,oBAAY,MAAM;AACzC,IAAA,GAAA,EAAK,UAAA,EAAW;AAAA,EAClB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,aAAA,GAAsBA,OAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,KAAA,KAA+C;AAC9C,MAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC7B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACb,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,YAAA,EAAc;AACrC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,UAAA,EAAW;AAAA,MACb;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAY,UAAU;AAAA,GACzB;AAEA,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,MAAA,EAAQ;AACrB,IAAA,MAAA,CAAO,GAAG,CAAA;AAAA,EACZ,CAAA,EAAG,CAAC,GAAA,EAAK,MAAM,CAAC,CAAA;AAEhB,EAAMA,kBAAU,MAAM;AACpB,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;AACX,MAAA,GAAA,EAAK,GAAA,CAAI,UAAU,QAAQ,CAAA;AAAA,IAC7B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,GAAA,EAAK,QAAQ,CAAC,CAAA;AAElB,EAAA,uBACElB,GAAAA;AAAA,IAAC,eAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACC,KAAA,EAAO;AAAA,QACL,WAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA,EACE,WAAA,KAAgB,IAAA,EAAM,IAAA,KAAS,MAAM,UAAA,GAAa,YAAA,CAAA;AAAA,QACpD,UAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,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,UAEH;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC7E,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAY,GAAI,WAAA,EAAY;AAEjD,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,WAAA;AAAA,MACL,SAAA,EAAU,iBAAA;AAAA,MACV,WAAA,EAAU,kBAAA;AAAA,MAEV,QAAA,kBAAAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,MAAA;AAAA,YACA,WAAA,KAAgB,eAAe,OAAA,GAAU,gBAAA;AAAA,YACzC;AAAA,WACF;AAAA,UACC,GAAG;AAAA;AAAA;AACN;AAAA,GACF;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,WAAA,EAAY;AAEpC,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,sBAAA,EAAqB,OAAA;AAAA,MACrB,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oCAAA;AAAA,QACA,WAAA,KAAgB,eAAe,MAAA,GAAS,MAAA;AAAA,QACxC;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,MAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAwC;AACtC,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACEI,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8BAAA;AAAA,QACA,WAAA,KAAgB,eACZ,mCAAA,GACA,6CAAA;AAAA,QACJ;AAAA,OACF;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MACR,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACXA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,gBAAA,EAAc;AAAA;AAAA;AAAA,GAC1C;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,MAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAwC;AACtC,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,KAAkB,WAAA,EAAY;AAE/D,EAAA,uBACEI,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8BAAA;AAAA,QACA,WAAA,KAAgB,eACZ,oCAAA,GACA,gDAAA;AAAA,QACJ;AAAA,OACF;AAAA,MACA,UAAU,CAAC,aAAA;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MACR,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,IAAC,UAAA,EAAA,EAAW,CAAA;AAAA,wBACZA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA;AAAA,GACtC;AAEJ;AC/NA,IAAM,MAAA,GAAS,EAAE,KAAA,EAAO,EAAA,EAAI,MAAM,OAAA,EAAQ;AAgB1C,IAAM,YAAA,GAAqBoB,sBAAwC,IAAI,CAAA;AAEvE,SAAS,QAAA,GAAW;AAClB,EAAA,MAAM,OAAA,GAAgBA,mBAAW,YAAY,CAAA;AAE7C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,EAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACL,CAAA,EAKG;AACD,EAAA,MAAM,WAAiBA,OAAA,CAAA,KAAA,EAAM;AAC7B,EAAA,MAAM,UAAU,CAAA,MAAA,EAAS,EAAA,IAAM,SAAS,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA,CAAA;AAEzD,EAAA,uBACEpB,IAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,MAAA,EAAO,EACrC,QAAA,kBAAAI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,YAAA,EAAY,OAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,6pBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,EAAA,EAAI,OAAA,EAAS,MAAA,EAAgB,CAAA;AAAA,wBACzCA,GAAAA,CAAmB,iBAAA,CAAA,mBAAA,EAAlB,EACE,QAAA,EACH;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAEA,IAAM,UAAA,GAAa,CAAC,EAAE,EAAA,EAAI,QAAO,KAA2C;AAC1E,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,MAAA;AAAA,IACzC,CAAC,GAAGqB,OAAM,CAAA,KAAMA,OAAAA,CAAO,SAASA,OAAAA,CAAO;AAAA,GACzC;AAEA,EAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACErB,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,uBAAA,EAAyB;AAAA,QACvB,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAC1B,GAAA;AAAA,UACC,CAAC,CAAC,KAAA,EAAO,MAAM,CAAA,KAAM;AAAA,EAC/B,MAAM,gBAAgB,EAAE,CAAA;AAAA,EACxB,YACC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,UAAU,CAAA,KAAM;AAC1B,YAAA,MAAM,KAAA,GACJ,UAAA,CAAW,KAAA,GAAQ,KAAsC,KACzD,UAAA,CAAW,KAAA;AACb,YAAA,OAAO,KAAA,GAAQ,CAAA,UAAA,EAAa,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAA,GAAM,IAAA;AAAA,UACjD,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA;AAAA,SAGH,CACC,KAAK,IAAI;AAAA;AACd;AAAA,GACF;AAEJ;AAEA,IAAM,YAAA,GAAiC,iBAAA,CAAA;AAEvC,SAAS,mBAAA,CAAoB;AAAA,EAC3B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA,GAAY,KAAA;AAAA,EACZ,aAAA,GAAgB,KAAA;AAAA,EAChB,KAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAOK;AACH,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,QAAA,EAAS;AAE5B,EAAA,MAAM,YAAA,GAAqBoB,gBAAQ,MAAM;AACvC,IAAA,IAAI,SAAA,IAAa,CAAC,OAAA,EAAS,MAAA,EAAQ;AACjC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,CAAC,IAAI,CAAA,GAAI,OAAA;AACf,IAAA,MAAM,MAAM,CAAA,EAAG,QAAA,IAAY,MAAM,OAAA,IAAW,IAAA,EAAM,QAAQ,OAAO,CAAA,CAAA;AACjE,IAAA,MAAM,UAAA,GAAa,2BAAA,CAA4B,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAA;AAChE,IAAA,MAAM,KAAA,GACJ,CAAC,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,GAC1B,MAAA,CAAO,KAA4B,CAAA,EAAG,KAAA,IAAS,KAAA,GAC/C,UAAA,EAAY,KAAA;AAElB,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,uBACEpB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,cAAc,CAAA,EAC7C,QAAA,EAAA,cAAA,CAAe,KAAA,EAAO,OAAO,CAAA,EAChC,CAAA;AAAA,IAEJ;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,aAAA,EAAe,cAAc,GAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,EACnE,CAAA,EAAG;AAAA,IACD,KAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAA,EAAS,MAAA,EAAQ;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,KAAW,CAAA,IAAK,SAAA,KAAc,KAAA;AAExD,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,wHAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,CAAC,YAAY,YAAA,GAAe,IAAA;AAAA,wBAC7BJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACZ,kBACE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,MAAM,CAAA,CACrC,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AACpB,UAAA,MAAM,MAAM,CAAA,EAAG,OAAA,IAAW,KAAK,IAAA,IAAQ,IAAA,CAAK,WAAW,OAAO,CAAA,CAAA;AAC9D,UAAA,MAAM,UAAA,GAAa,2BAAA,CAA4B,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAA;AAChE,UAAA,MAAM,cAAA,GAAiB,KAAA,IAAS,IAAA,CAAK,OAAA,CAAQ,QAAQ,IAAA,CAAK,KAAA;AAE1D,UAAA,uBACEA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,EAAA;AAAA,gBACT,qGAAA;AAAA,gBACA,cAAc,KAAA,IAAS;AAAA,eACzB;AAAA,cAEC,uBAAa,IAAA,EAAM,KAAA,KAAU,UAAa,IAAA,CAAK,IAAA,GAC9C,UAAU,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,IAAA,EAAM,MAAM,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA,mBAE1DI,KAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,gBAAA,UAAA,EAAY,IAAA,mBACXJ,GAAAA,CAAC,UAAA,CAAW,MAAX,EAAgB,CAAA,GAEjB,CAAC,aAAA,oBACCA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,gEAAA;AAAA,sBACA;AAAA,wBACE,eAAe,SAAA,KAAc,KAAA;AAAA,wBAC7B,OAAO,SAAA,KAAc,MAAA;AAAA,wBACrB,mDACE,SAAA,KAAc,QAAA;AAAA,wBAChB,QAAA,EAAU,aAAa,SAAA,KAAc;AAAA;AACvC,qBACF;AAAA,oBACA,KAAA,EACE;AAAA,sBACE,YAAA,EAAc,cAAA;AAAA,sBACd,gBAAA,EAAkB;AAAA;AACpB;AAAA,iBAEJ;AAAA,gCAGJI,IAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,0CAAA;AAAA,sBACA,YAAY,WAAA,GAAc;AAAA,qBAC5B;AAAA,oBAEA,QAAA,EAAA;AAAA,sCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACZ,QAAA,EAAA;AAAA,wBAAA,SAAA,GAAY,YAAA,GAAe,IAAA;AAAA,wCAC5BJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBACb,QAAA,EAAA,UAAA,EAAY,KAAA,IAAS,KAAK,IAAA,EAC7B;AAAA,uBAAA,EACF,CAAA;AAAA,sBACC,IAAA,CAAK,KAAA,oBACJA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,oDAAA,EACb,QAAA,EAAA,IAAA,CAAK,KAAA,CAAM,cAAA,EAAe,EAC7B;AAAA;AAAA;AAAA;AAEJ,eAAA,EACF;AAAA,aAAA;AAAA,YApDG,IAAA,CAAK;AAAA,WAsDZ;AAAA,QAEJ,CAAC,CAAA,EACL;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,IAAM,WAAA,GAAgC,iBAAA,CAAA;AAEtC,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,aAAA,GAAgB,QAAA;AAAA,EAChB;AACF,CAAA,EAIK;AACH,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,QAAA,EAAS;AAE5B,EAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,wCAAA;AAAA,QACA,aAAA,KAAkB,QAAQ,MAAA,GAAS,MAAA;AAAA,QACnC;AAAA,OACF;AAAA,MAEC,QAAA,EAAA,OAAA,CACE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,MAAM,CAAA,CACrC,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,QAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAA,IAAW,IAAA,CAAK,WAAW,OAAO,CAAA,CAAA;AACjD,QAAA,MAAM,UAAA,GAAa,2BAAA,CAA4B,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAA;AAEhE,QAAA,uBACEI,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW,EAAA;AAAA,cACT;AAAA,aACF;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,UAAA,EAAY,IAAA,IAAQ,CAAC,QAAA,mBACpBJ,IAAC,UAAA,CAAW,IAAA,EAAX,EAAgB,CAAA,mBAEjBA,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,gCAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL,iBAAiB,IAAA,CAAK;AAAA;AACxB;AAAA,eACF;AAAA,cAED,UAAA,EAAY;AAAA;AAAA,WAAA;AAAA,UAfR,IAAA,CAAK;AAAA,SAgBZ;AAAA,MAEJ,CAAC;AAAA;AAAA,GACL;AAEJ;AAGA,SAAS,2BAAA,CACP,MAAA,EACA,OAAA,EACA,GAAA,EACA;AACA,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,IAAA,EAAM;AACnD,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GACJ,SAAA,IAAa,OAAA,IACb,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,IAC3B,OAAA,CAAQ,OAAA,KAAY,IAAA,GAChB,OAAA,CAAQ,OAAA,GACR,MAAA;AAEN,EAAA,IAAI,cAAA,GAAyB,GAAA;AAE7B,EAAA,IACE,OAAO,OAAA,IACP,OAAO,OAAA,CAAQ,GAA2B,MAAM,QAAA,EAChD;AACA,IAAA,cAAA,GAAiB,QAAQ,GAA2B,CAAA;AAAA,EACtD,CAAA,MAAA,IACE,kBACA,GAAA,IAAO,cAAA,IACP,OAAO,cAAA,CAAe,GAAkC,MAAM,QAAA,EAC9D;AACA,IAAA,cAAA,GAAiB,eACf,GACF,CAAA;AAAA,EACF;AAEA,EAAA,OAAO,kBAAkB,MAAA,GACrB,MAAA,CAAO,cAAc,CAAA,GACrB,OAAO,GAA0B,CAAA;AACvC;ACvVA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,uBAAOA,GAAAA,CAAsB,oBAAA,CAAA,IAAA,EAArB,EAA0B,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACxE;ACJA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACnE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8HAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,uDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAM,kBAAA,GAAqBC,GAAAA;AAAA,EACzB,6FAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,uBACED,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,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,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8B;AAC5E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,yGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,+EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACvFA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACvE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2C;AACzC,EAAA,uBACEA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,WAAA,EAAY,YAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC9B,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAM,YAAA,GAAeC,GAAAA;AAAA,EACnB,4PAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,OAAA,EAAS,eAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,YAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,SAASqB,KAAAA,CAAK;AAAA,EACZ,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAC6D;AAC3D,EAAA,MAAM,IAAA,GAAO,UAAUpB,IAAAA,GAAO,KAAA;AAC9B,EAAA,uBACEF,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,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,GACN;AAEJ;AAEA,IAAM,iBAAA,GAAoBC,GAAAA;AAAA,EACxB,oMAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,IAAA,EAAM,wEAAA;AAAA,QACN,KAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACED,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,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,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,mEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACvE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,gEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8B;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oFAAA;AAAA,QACA,mEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACjLA,SAAS,GAAA,CAAI,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACjE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,KAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8KAAA;AAAA,QACA,sCAAA;AAAA,QACA,wJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACtE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA,GACN;AAEJ;ACpBA,IAAM,aAAA,GAAgBC,GAAAA;AAAA,EACpB,mOAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,8BAAA;AAAA,QACT,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEA,SAAS,KAAA,CAAM;AAAA,EACb,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqE;AACnE,EAAA,uBACED,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,gGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACvDA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,uBAAOA,GAAAA,CAAsB,oBAAA,CAAA,IAAA,EAArB,EAA0B,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACxE;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,GAAAA,CAAsB,oBAAA,CAAA,OAAA,EAArB,EAA6B,WAAA,EAAU,sBAAA,EAAwB,GAAG,KAAA,EAAO,CAAA;AAE9E;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACEA,GAAAA,CAAsB,oBAAA,CAAA,MAAA,EAArB,EAA4B,WAAA,EAAU,qBAAA,EAAuB,GAAG,KAAA,EAAO,CAAA;AAE5E;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,OAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEI,KAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,IAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,oBACpBA,GAAAA;AAAA,MAAsB,oBAAA,CAAA,OAAA;AAAA,MAArB;AAAA,QACC,WAAA,EAAU,sBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,6WAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA;AACN,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA;AAAA,MACtE,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACEA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,KAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,MAC/C,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkE;AAChE,EAAA,uBACEA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,WAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,0BAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACEA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,MAAA;AAAA,IAArB;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,cAAA,EAAe,EAAG,SAAS,CAAA;AAAA,MACxC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACEA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,MAAA;AAAA,IAArB;AAAA,MACC,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,MAC9D,GAAG;AAAA;AAAA,GACN;AAEJ;ACvIA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBACEA,GAAAA;AAAA,IAAmB,iBAAA,CAAA,IAAA;AAAA,IAAlB;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,gEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA;AAAA,QAAmB,iBAAA,CAAA,SAAA;AAAA,QAAlB;AAAA,UACC,WAAA,EAAU,oBAAA;AAAA,UACV,SAAA,EAAU,gDAAA;AAAA,UACV,OAAO,EAAE,SAAA,EAAW,eAAe,GAAA,IAAO,KAAA,IAAS,EAAE,CAAA,EAAA,CAAA;AAAK;AAAA;AAC5D;AAAA,GACF;AAEJ;ACrBA,SAAS,eAAA,CAAgB;AAAA,EACvB,aAAA,GAAgB,CAAA;AAAA,EAChB,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,uBACEA,GAAAA;AAAA,IAAkB,gBAAA,CAAA,QAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,aAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAASuB,QAAAA,CAAQ;AAAA,EACf,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACEvB,GAAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAkB,gBAAA,CAAA,IAAA,EAAjB,EAAsB,WAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAO,CAAA,EACxD,CAAA;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBAAOA,GAAAA,CAAkB,gBAAA,CAAA,OAAA,EAAjB,EAAyB,WAAA,EAAU,iBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AAC1E;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEA,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAI,IAAAA;AAAA,IAAkB,gBAAA,CAAA,OAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,maAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDJ,GAAAA,CAAkB,gBAAA,CAAA,KAAA,EAAjB,EAAuB,WAAU,oGAAA,EAAqG;AAAA;AAAA;AAAA,GACzI,EACF,CAAA;AAEJ;AC7CA,SAAS,cAAA,GAAmC;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUwB,iBAA2B,OAAO,CAAA;AAElE,EAAMA,kBAAU,MAAM;AAEpB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,SAAS,MAAM,CAAA;AACjE,IAAA,QAAA,CAAS,MAAA,GAAS,SAAS,OAAO,CAAA;AAGlC,IAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,CAAC,SAAA,KAAc;AACnD,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC9B,QAAA,IAAI,QAAA,CAAS,kBAAkB,OAAA,EAAS;AACtC,UAAA,MAAMC,OAAAA,GAAS,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,SAAS,MAAM,CAAA;AACjE,UAAA,QAAA,CAASA,OAAAA,GAAS,SAAS,OAAO,CAAA;AAAA,QACpC;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,QAAQ,QAAA,CAAS,eAAA,EAAiB,EAAE,UAAA,EAAY,MAAM,CAAA;AAC/D,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,KAAA;AACT;AAEA,IAAM,UAAU,CAAC,EAAE,OAAO,SAAA,EAAW,GAAG,OAAM,KAAoB;AAChE,EAAA,MAAM,gBAAgB,cAAA,EAAe;AAErC,EAAA,MAAM,QAAQ,SAAA,IAAa,aAAA;AAE3B,EAAA,uBACEzB,GAAAA;AAAA,IAAC0B,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SAAA,EAAU,eAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,OAAA,kBAAS1B,GAAAA,CAAC,eAAA,EAAA,EAAgB,WAAU,QAAA,EAAS,CAAA;AAAA,QAC7C,IAAA,kBAAMA,GAAAA,CAAC,QAAA,EAAA,EAAS,WAAU,QAAA,EAAS,CAAA;AAAA,QACnC,OAAA,kBAASA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,WAAU,QAAA,EAAS,CAAA;AAAA,QAC/C,KAAA,kBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAa,WAAU,QAAA,EAAS,CAAA;AAAA,QACxC,OAAA,kBAASA,GAAAA,CAAC,WAAA,EAAA,EAAY,WAAU,qBAAA,EAAsB;AAAA,OACxD;AAAA,MACA,KAAA,EACE;AAAA,QACE,aAAA,EAAe,gBAAA;AAAA,QACf,eAAA,EAAiB,2BAAA;AAAA,QACjB,iBAAA,EAAmB,eAAA;AAAA,QACnB,iBAAA,EAAmB;AAAA,OACrB;AAAA,MAED,GAAG;AAAA;AAAA,GACN;AAEJ;AC7DA,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgB;AACrD,EAAA,uBACEA,GAAAA;AAAA,IAAC2B,WAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA,GACN;AAEJ;ACDA,IAAM,yBAAA,GAA4B1B,GAAAA;AAAA,EAChC,oCAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,SAAA,EAAW,iCAAA;AAAA,QACX,SAAA,EAAW,kCAAA;AAAA,QACX,UAAA,EAAY,+BAAA;AAAA,QACZ,SAAA,EAAW;AAAA,OACb;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,WAAA;AAAA,QACJ,OAAA,EAAS,WAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,MAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAM;AAAA;AACR;AAEJ;AAeA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,MAAM,4BACJD,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,GAAG,yBAAA,CAA0B,EAAE,QAAQ,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MACpE,YAAA,EAAY,KAAA,IAAS,CAAA,iBAAA,EAAoB,MAAM,CAAA,CAAA;AAAA,MAC/C,IAAA,EAAK,KAAA;AAAA,MACJ,GAAG;AAAA;AAAA,GACN;AAGF,EAAA,IAAI,eAAe,KAAA,EAAO;AACxB,IAAA,uBACEI,IAAAA,CAACmB,QAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAvB,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,sBACnCA,GAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACzB,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,SAAA;AACT;AAkBA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,YAAA,GAAe,KAAA;AAAA,EACf,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,QAAA,EAAU,0BACzBA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UAEC,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,IAAA;AAAA,UACA,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,WAAA,EAAa;AAAA,SAAA;AAAA,QAJR;AAAA,OAMR;AAAA;AAAA,GACH;AAEJ;ACjHA,SAAS,UAAA,CAAW,EAAE,GAAG,KAAA,EAAM,EAAgC;AAC7D,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,YAAA,EAAW,cAAa,WAAA,EAAU,YAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AACxE;AAEA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,0FAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,IAAA,GAAO,UAAUE,IAAAA,GAAO,GAAA;AAE9B,EAAA,uBACEF,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA;AAAA,MACjE,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiC;AAC7E,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,IAAA,EAAK,MAAA;AAAA,MACL,eAAA,EAAc,MAAA;AAAA,MACd,cAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA;AAAA,MACrD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA+B;AAC7B,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,SAAS,CAAA;AAAA,MAC1C,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,QAAA,oBAAYA,GAAAA,CAAC,YAAA,EAAA,EAAa;AAAA;AAAA,GAC7B;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiC;AAC/B,EAAA,uBACEI,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,IAAA,EAAK,cAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA;AAAA,MACjE,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBACnCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,MAAA,EAAI;AAAA;AAAA;AAAA,GAChC;AAEJ;ACxFA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,YAAA;AAAA,MACL,YAAA,EAAW,YAAA;AAAA,MACX,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA+B;AAC7B,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAE,GAAG,KAAA,EAAM,EAA+B;AAChE,EAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAG,WAAA,EAAU,iBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AACpD;AAOA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAwB;AACtB,EAAA,uBACEA,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAc,WAAW,MAAA,GAAS,MAAA;AAAA,MAClC,WAAA,EAAU,iBAAA;AAAA,MACV,aAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,cAAA,CAAe;AAAA,UACb,OAAA,EAAS,WAAW,SAAA,GAAY,OAAA;AAAA,UAChC;AAAA,SACD,CAAA;AAAA,QACD;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgD;AAC9C,EAAA,uBACEI,IAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,qBAAA;AAAA,MACX,IAAA,EAAK,SAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,MAChD,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC4B,iBAAA,EAAgB,CAAA;AAAA,wBACjB5B,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAkB,QAAA,EAAA,UAAA,EAAQ;AAAA;AAAA;AAAA,GAC5C;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgD;AAC9C,EAAA,uBACEI,IAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,iBAAA;AAAA,MACX,IAAA,EAAK,SAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,MAChD,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAkB,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,wBACtCA,GAAAA,CAACgB,gBAAAA,EAAA,EAAiB;AAAA;AAAA;AAAA,GACpB;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiC;AAC/B,EAAA,uBACEZ,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS,CAAA;AAAA,MACjE,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBACvCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA;AAAA,GACtC;AAEJ;AC5GA,SAAS,MAAA,CAAO;AAAA,EACd,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBAAOA,GAAAA,CAAiB,eAAA,CAAA,IAAA,EAAhB,EAAqB,WAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC7D;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBAAOA,GAAAA,CAAiB,eAAA,CAAA,OAAA,EAAhB,EAAwB,WAAA,EAAU,gBAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AACxE;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBAAOA,GAAAA,CAAiB,eAAA,CAAA,MAAA,EAAhB,EAAuB,WAAA,EAAU,eAAA,EAAiB,GAAG,KAAA,EAAO,CAAA;AACtE;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBAAOA,GAAAA,CAAiB,eAAA,CAAA,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEI,IAAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAAU,eAAA,EACtB,QAAA,EAAA;AAAA,oBAAAJ,IAAC,aAAA,EAAA,EAAc,CAAA;AAAA,oBACfI,IAAAA;AAAA,MAAiB,eAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACC,WAAA,EAAU,gBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,6WAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,mCACCA,IAAAA;AAAA,YAAiB,eAAA,CAAA,KAAA;AAAA,YAAhB;AAAA,cACC,WAAA,EAAU,cAAA;AAAA,cACV,SAAA,EAAU,mWAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAJ,IAAC,KAAA,EAAA,EAAM,CAAA;AAAA,gCACPA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA;AACjC;AAAA;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA;AAAA,MACtE,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACEA,GAAAA;AAAA,IAAiB,eAAA,CAAA,WAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AC1HA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEI,IAAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA;AAAA,UAAqB,mBAAA,CAAA,QAAA;AAAA,UAApB;AAAA,YACC,WAAA,EAAU,sBAAA;AAAA,YACV,SAAA,EAAU,oJAAA;AAAA,YAET;AAAA;AAAA,SACH;AAAA,wBACAA,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACXA,GAAAA,CAAqB,mBAAA,CAAA,MAAA,EAApB,EAA2B;AAAA;AAAA;AAAA,GAC9B;AAEJ;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,UAAA;AAAA,EACd,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACEA,GAAAA;AAAA,IAAqB,mBAAA,CAAA,mBAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA,gBAAgB,UAAA,IACd,4CAAA;AAAA,QACF,gBAAgB,YAAA,IACd,8CAAA;AAAA,QACF;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA;AAAA,QAAqB,mBAAA,CAAA,eAAA;AAAA,QAApB;AAAA,UACC,WAAA,EAAU,mBAAA;AAAA,UACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,GACF;AAEJ;ACvCA,SAAS,OAAA,CAAQ;AAAA,EACf,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkD;AAChD,EAAA,uBACEA,GAAAA;AAAA,IAAC6B,SAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,2FAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,KAAA,GAAQ,iBAAA;AAAA,EACR,WAAA,GAAc,gCAAA;AAAA,EACd,QAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,GAAG;AACL,CAAA,EAKG;AACD,EAAA,uBACEzB,IAAAA,CAAC,MAAA,EAAA,EAAQ,GAAG,KAAA,EACV,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EACtB,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,eAAa,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACpBA,GAAAA,CAAC,iBAAA,EAAA,EAAmB,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAClC,CAAA;AAAA,oBACAA,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,QAC9C,eAAA;AAAA,QAEA,QAAA,kBAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,yZAChB,QAAA,EACH;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAU,2CAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,4BAAA,EAA6B,CAAA;AAAA,wBACnDA,GAAAA;AAAA,UAAC6B,SAAA,CAAiB,KAAA;AAAA,UAAjB;AAAA,YACC,WAAA,EAAU,eAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,0JAAA;AAAA,cACA;AAAA,aACF;AAAA,YACC,GAAG;AAAA;AAAA;AACN;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACE7B,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,iBACpB,QAAA,kBAAAA,GAAAA;AAAA,IAAC6B,SAAA,CAAiB,IAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,aAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBACE7B,GAAAA;AAAA,IAAC6B,SAAA,CAAiB,KAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAU,0BAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBACE7B,GAAAA;AAAA,IAAC6B,SAAA,CAAiB,KAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wNAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACE7B,GAAAA;AAAA,IAAC6B,SAAA,CAAiB,SAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA;AAAA,MAC9C,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACE7B,GAAAA;AAAA,IAAC6B,SAAA,CAAiB,IAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,ybAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiC;AAC/B,EAAA,uBACE7B,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,uDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AC1JA,IAAM,aAAA,GAAsB8B,OAAA,CAAA,UAAA;AAAA,EAC1B,CACE;AAAA,IACE,SAAA;AAAA,IACA,WAAA,GAAc,WAAA;AAAA,IACd,YAAA,GAAe,IAAA;AAAA,IACf,WAAA,GAAc,GAAA;AAAA,IACd,gBAAA,GAAmB,QAAA;AAAA,IACnB,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACE1B,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA,EAAQ,SAAA;AAAA,QACR,WAAA,EAAU,gBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,4FAAA;AAAA,UACA,0BAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC+B,UAAAA,EAAA,EAAW,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,0BAC9C/B,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAkC,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,0BAC9DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAqB,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,UAC1C,YAAA,oBACCI,IAAAA,CAAC,GAAA,EAAA,EAAI,WAAU,2JAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,YAC3C;AAAA,WAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AAO5B,SAAS,iBAAA,CAAkB,MAAA,EAAoB,GAAA,GAAc,GAAA,EAAK;AAChE,EAAM8B,kBAAU,MAAM;AACpB,IAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAqB;AACjC,MAAA,IAAI,CAAA,CAAE,GAAA,CAAI,WAAA,EAAY,KAAM,GAAA,CAAI,aAAY,KAAM,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA,CAAA,EAAU;AACzE,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAA,EAAO;AAAA,MACT;AAAA,IACF,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,IAAI,CAAA;AACzC,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,IAAI,CAAA;AAAA,EAC3D,CAAA,EAAG,CAAC,MAAA,EAAQ,GAAG,CAAC,CAAA;AAClB;ACpEA,SAAS,OAAA,CAAQ;AAAA,EACf,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACE9B,GAAAA;AAAA,IAAkB,gBAAA,CAAA,IAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,2EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBAAOA,GAAAA,CAAkB,gBAAA,CAAA,IAAA,EAAjB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBAAOA,GAAAA,CAAkB,gBAAA,CAAA,KAAA,EAAjB,EAAuB,WAAA,EAAU,eAAA,EAAiB,GAAG,KAAA,EAAO,CAAA;AACtE;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBAAOA,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EAAwB,WAAA,EAAU,gBAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AACxE;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACEA,GAAAA,CAAkB,gBAAA,CAAA,UAAA,EAAjB,EAA4B,WAAA,EAAU,qBAAA,EAAuB,GAAG,KAAA,EAAO,CAAA;AAE5E;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEA,GAAAA;AAAA,IAAkB,gBAAA,CAAA,OAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,yMAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,WAAA,GAAc,EAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEA,GAAAA,CAAC,aAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA;AAAA,IAAkB,gBAAA,CAAA,OAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,0cAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACL,CAAA,EAGG;AACD,EAAA,uBACEA,GAAAA;AAAA,IAAkB,gBAAA,CAAA,IAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA,QACT,6mBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA+D;AAC7D,EAAA,uBACEI,IAAAA;AAAA,IAAkB,gBAAA,CAAA,YAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+EAAA,EACd,0BAAAA,GAAAA,CAAkB,gBAAA,CAAA,aAAA,EAAjB,EACC,QAAA,kBAAAA,IAACK,SAAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,GAChC,CAAA,EACF,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACED,IAAAA;AAAA,IAAkB,gBAAA,CAAA,SAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+EAAA,EACd,0BAAAA,GAAAA,CAAkB,gBAAA,CAAA,aAAA,EAAjB,EACC,QAAA,kBAAAA,IAACa,UAAAA,EAAA,EAAW,SAAA,EAAU,qBAAA,EAAsB,GAC9C,CAAA,EACF,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEb,GAAAA;AAAA,IAAkB,gBAAA,CAAA,KAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,mDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACEA,GAAAA;AAAA,IAAkB,gBAAA,CAAA,SAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA;AAAA,MACnD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiC;AAC/B,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,uDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBAAOA,GAAAA,CAAkB,gBAAA,CAAA,GAAA,EAAjB,EAAqB,WAAA,EAAU,aAAA,EAAe,GAAG,KAAA,EAAO,CAAA;AAClE;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEI,IAAAA;AAAA,IAAkB,gBAAA,CAAA,UAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,8NAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDJ,GAAAA,CAACgB,gBAAAA,EAAA,EAAiB,WAAU,iBAAA,EAAkB;AAAA;AAAA;AAAA,GAChD;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACEhB,GAAAA;AAAA,IAAkB,gBAAA,CAAA,UAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,yeAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACzPA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEI,IAAAA;AAAA,IAAyB,uBAAA,CAAA,IAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,eAAA,EAAe,QAAA;AAAA,MACf,SAAA,EAAW,EAAA;AAAA,QACT,kFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,QAAA,oBAAYJ,GAAAA,CAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAAA,GACvC;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,GAAAA;AAAA,IAAyB,uBAAA,CAAA,IAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,+DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,GAAAA;AAAA,IAAyB,uBAAA,CAAA,IAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MAClC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAM,0BAAA,GAA6BC,GAAAA;AAAA,EACjC;AACF;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiE;AAC/D,EAAA,uBACEG,IAAAA;AAAA,IAAyB,uBAAA,CAAA,OAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA2B,EAAG,SAAS,SAAS,CAAA;AAAA,MAC7D,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAU,GAAA;AAAA,wBACXJ,GAAAA;AAAA,UAACM,eAAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,2FAAA;AAAA,YACV,aAAA,EAAY;AAAA;AAAA;AACd;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiE;AAC/D,EAAA,uBACEN,GAAAA;AAAA,IAAyB,uBAAA,CAAA,OAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,kWAAA;AAAA,QACA,2hCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkE;AAChE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAA,GAAAA;AAAA,QAAyB,uBAAA,CAAA,QAAA;AAAA,QAAxB;AAAA,UACC,WAAA,EAAU,0BAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,YACT,oVAAA;AAAA,YACA;AAAA,WACF;AAAA,UACC,GAAG;AAAA;AAAA;AACN;AAAA,GACF;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,GAAAA;AAAA,IAAyB,uBAAA,CAAA,IAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,ulBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,uBAAA,CAAwB;AAAA,EAC/B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmE;AACjE,EAAA,uBACEA,GAAAA;AAAA,IAAyB,uBAAA,CAAA,SAAA;AAAA,IAAxB;AAAA,MACC,WAAA,EAAU,2BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8LAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EAAyE;AAAA;AAAA,GAC1F;AAEJ;ACnJA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,uBAAOA,GAAAA,CAAsB,oBAAA,CAAA,IAAA,EAArB,EAA0B,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACxE;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,GAAAA,CAAsB,oBAAA,CAAA,OAAA,EAArB,EAA6B,WAAA,EAAU,sBAAA,EAAwB,GAAG,KAAA,EAAO,CAAA;AAE9E;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACEA,GAAAA,CAAsB,oBAAA,CAAA,KAAA,EAArB,EAA2B,WAAA,EAAU,oBAAA,EAAsB,GAAG,KAAA,EAAO,CAAA;AAE1E;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACEA,GAAAA,CAAsB,oBAAA,CAAA,MAAA,EAArB,EAA4B,WAAA,EAAU,qBAAA,EAAuB,GAAG,KAAA,EAAO,CAAA;AAE5E;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBAAOA,GAAAA,CAAsB,oBAAA,CAAA,GAAA,EAArB,EAAyB,WAAA,EAAU,kBAAA,EAAoB,GAAG,KAAA,EAAO,CAAA;AAC3E;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,GAAG;AACL,CAAA,EAAiE;AAC/D,EAAA,uBACEA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,UAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,0BAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEI,IAAAA;AAAA,IAAsB,oBAAA,CAAA,UAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,0BAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,sWAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDJ,GAAAA,CAACgB,gBAAAA,EAAA,EAAiB,WAAU,SAAA,EAAU;AAAA;AAAA;AAAA,GACxC;AAEJ;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiE;AAC/D,EAAA,uBACEhB,GAAAA;AAAA,IAAsB,oBAAA,CAAA,UAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,0BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,GAAAA,CAAsB,oBAAA,CAAA,MAAA,EAArB,EACC,QAAA,kBAAAA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,OAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,sjBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACL,CAAA,EAGG;AACD,EAAA,uBACEA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,IAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA,QACT,6mBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,uBAAA,CAAwB;AAAA,EAC/B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmE;AACjE,EAAA,uBACEI,IAAAA;AAAA,IAAsB,oBAAA,CAAA,YAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,4BAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+EAAA,EACd,0BAAAA,GAAAA,CAAsB,oBAAA,CAAA,aAAA,EAArB,EACC,QAAA,kBAAAA,IAACK,SAAAA,EAAA,EAAU,SAAA,EAAU,QAAA,EAAS,GAChC,CAAA,EACF,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgE;AAC9D,EAAA,uBACED,IAAAA;AAAA,IAAsB,oBAAA,CAAA,SAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+EAAA,EACd,0BAAAA,GAAAA,CAAsB,oBAAA,CAAA,aAAA,EAArB,EACC,QAAA,kBAAAA,IAACa,UAAAA,EAAA,EAAW,SAAA,EAAU,qBAAA,EAAsB,GAC9C,CAAA,EACF,CAAA;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEb,GAAAA;AAAA,IAAsB,oBAAA,CAAA,KAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,mEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgE;AAC9D,EAAA,uBACEA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,SAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA;AAAA,MACnD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiC;AAC/B,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,uDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AClOA,SAAS,MAAA,CAAO;AAAA,EACd,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBAAOA,IAACgC,QAAA,CAAgB,IAAA,EAAhB,EAAqB,WAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC7D;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBAAOhC,IAACgC,QAAA,CAAgB,OAAA,EAAhB,EAAwB,WAAA,EAAU,gBAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AACxE;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBAAOhC,IAACgC,QAAA,CAAgB,MAAA,EAAhB,EAAuB,WAAA,EAAU,eAAA,EAAiB,GAAG,KAAA,EAAO,CAAA;AACtE;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBAAOhC,IAACgC,QAAA,CAAgB,KAAA,EAAhB,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACEhC,GAAAA;AAAA,IAACgC,QAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBACE5B,IAAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAAU,eAAA,EACtB,QAAA,EAAA;AAAA,oBAAAJ,IAAC,aAAA,EAAA,EAAc,CAAA;AAAA,oBACfI,IAAAA;AAAA,MAAC4B,QAAA,CAAgB,OAAA;AAAA,MAAhB;AAAA,QACC,WAAA,EAAU,gBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,oEAAA;AAAA,UACA,gQAAA;AAAA,UACA,qRAAA;AAAA,UACA,6NAAA;AAAA,UACA,uNAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAhC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iIAAA,EAAkI,CAAA;AAAA,UAChJ;AAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,0LAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBACEA,GAAAA;AAAA,IAACgC,QAAA,CAAgB,KAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6D;AAC3D,EAAA,uBACEhC,GAAAA;AAAA,IAACgC,QAAA,CAAgB,WAAA;AAAA,IAAhB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;ACjHA,SAAS,KAAA,CAAM,EAAE,GAAG,KAAA,EAAM,EAAqD;AAC7E,EAAA,uBAAOhC,GAAAA,CAAgBiC,eAAA,CAAA,IAAA,EAAf,EAAoB,WAAA,EAAU,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA;AAC3D;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBAAOjC,GAAAA,CAAgBiC,eAAA,CAAA,OAAA,EAAf,EAAuB,WAAA,EAAU,eAAA,EAAiB,GAAG,KAAA,EAAO,CAAA;AACtE;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBAAOjC,GAAAA,CAAgBiC,eAAA,CAAA,KAAA,EAAf,EAAqB,WAAA,EAAU,aAAA,EAAe,GAAG,KAAA,EAAO,CAAA;AAClE;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBAAOjC,GAAAA,CAAgBiC,eAAA,CAAA,MAAA,EAAf,EAAsB,WAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,uBACEjC,GAAAA;AAAA,IAAgBiC,eAAA,CAAA,OAAA;AAAA,IAAf;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO,OAAA;AAAA,EACP,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACE7B,KAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,IAAC,YAAA,EAAA,EAAa,CAAA;AAAA,oBACdI,IAAAA;AAAA,MAAgB6B,eAAA,CAAA,OAAA;AAAA,MAAf;AAAA,QACC,WAAA,EAAU,eAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,4MAAA;AAAA,UACA,SAAS,OAAA,IACP,kIAAA;AAAA,UACF,SAAS,MAAA,IACP,+HAAA;AAAA,UACF,SAAS,KAAA,IACP,0GAAA;AAAA,UACF,SAAS,QAAA,IACP,mHAAA;AAAA,UACF;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BACD7B,IAAAA,CAAgB6B,eAAA,CAAA,KAAA,EAAf,EAAqB,WAAU,4OAAA,EAC9B,QAAA,EAAA;AAAA,4BAAAjC,GAAAA,CAACkC,KAAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,4BAC1BlC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA,WAAA,EACjC;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uCAAA,EAAyC,SAAS,CAAA;AAAA,MAC/D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,uBACEA,GAAAA;AAAA,IAAgBiC,eAAA,CAAA,KAAA;AAAA,IAAf;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACEjC,GAAAA;AAAA,IAAgBiC,eAAA,CAAA,WAAA;AAAA,IAAf;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACvE,EAAA,uBACEjC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,SAAS,CAAA;AAAA,MAC1C,GAAG;AAAA;AAAA,GACN;AAEJ;AClIA,SAAS,OAAA,CAAQ;AAAA,EACf,GAAG;AACL,CAAA,EAAuD;AACrD,EAAA,uBAAOA,GAAAA,CAAkB,gBAAA,CAAA,IAAA,EAAjB,EAAsB,WAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAC/D;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBAAOA,GAAAA,CAAkB,gBAAA,CAAA,OAAA,EAAjB,EAAyB,WAAA,EAAU,iBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AAC1E;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,KAAA,GAAQ,QAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEA,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAA,GAAAA;AAAA,IAAkB,gBAAA,CAAA,OAAA;AAAA,IAAjB;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,geAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBAAOA,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EAAwB,WAAA,EAAU,gBAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AACxE;ACtCA,SAAS,SAAA,CAAU;AAAA,EACjB,GAAG;AACL,CAAA,EAAyD;AACvD,EAAA,uBAAOA,GAAAA,CAAoB,kBAAA,CAAA,IAAA,EAAnB,EAAwB,WAAA,EAAU,YAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AACpE;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACEA,GAAAA,CAAoB,kBAAA,CAAA,OAAA,EAAnB,EAA2B,WAAA,EAAU,oBAAA,EAAsB,GAAG,KAAA,EAAO,CAAA;AAE1E;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,KAAA,GAAQ,QAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,GAAG;AACL,CAAA,EAA4D;AAC1D,EAAA,uBACEA,GAAAA,CAAoB,kBAAA,CAAA,MAAA,EAAnB,EAA0B,WAAA,EAAU,qBACnC,QAAA,kBAAAA,GAAAA;AAAA,IAAoB,kBAAA,CAAA,OAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,meAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;AClCA,SAAS,WAAA,CAAY;AAAA,EACnB,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,uBAAOA,GAAAA,CAAsB,oBAAA,CAAA,IAAA,EAArB,EAA0B,WAAA,EAAU,aAAA,EAAe,GAAG,KAAA,EAAO,CAAA;AACvE;AAEA,SAASmC,mBAAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACEnC,GAAAA;AAAA,IAAsB,oBAAA,CAAA,kBAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,MACtB,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAASoC,mBAAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyE;AACvE,EAAA,uBACEpC,GAAAA;AAAA,IAAsB,oBAAA,CAAA,kBAAA;AAAA,IAArB;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,uGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AChCA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA+D;AAC7D,EAAA,uBACEA,GAAAA;AAAA,IAAoB,kBAAA,CAAA,UAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,mEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBAAOA,GAAAA,CAAoB,kBAAA,CAAA,KAAA,EAAnB,EAAyB,WAAA,EAAU,iBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AAC1E;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,UAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,uBACEA,GAAAA;AAAA,IAAoB,kBAAA,CAAA,iBAAA;AAAA,IAAnB;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,2oBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,UAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,UAAA,EAAW,CAAA,EACzC;AAAA;AAAA,GAEJ;AAEJ;AC1BA,IAAM,mBAAA,GAAsB,eAAA;AAC5B,IAAM,sBAAA,GAAyB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,CAAA;AAC9C,IAAM,aAAA,GAAgB,OAAA;AACtB,IAAM,oBAAA,GAAuB,OAAA;AAC7B,IAAM,kBAAA,GAAqB,MAAA;AAC3B,IAAM,yBAAA,GAA4B,GAAA;AAYlC,IAAM,cAAA,GAAuBqC,sBAA0C,IAAI,CAAA;AAE3E,SAAS,UAAA,GAAa;AACpB,EAAA,MAAM,OAAA,GAAgBA,mBAAW,cAAc,CAAA;AAC/C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,WAAA,GAAc,IAAA;AAAA,EACd,IAAA,EAAM,QAAA;AAAA,EACN,YAAA,EAAc,WAAA;AAAA,EACd,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIG;AACD,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAIxD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,iBAAS,WAAW,CAAA;AACpD,EAAA,MAAM,OAAO,QAAA,IAAY,KAAA;AACzB,EAAA,MAAM,OAAA,GAAgBA,OAAA,CAAA,WAAA;AAAA,IACpB,CAAC,KAAA,KAAmD;AAClD,MAAA,MAAM,YAAY,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAC9D,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,SAAS,CAAA;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,SAAS,CAAA;AAAA,MACpB;AAGA,MAAA,QAAA,CAAS,SAAS,CAAA,EAAG,mBAAmB,CAAA,CAAA,EAAI,SAAS,qBAAqB,sBAAsB,CAAA,CAAA;AAAA,IAClG,CAAA;AAAA,IACA,CAAC,aAAa,IAAI;AAAA,GACpB;AAGA,EAAA,MAAM,aAAA,GAAsBA,oBAAY,MAAM;AAC5C,IAAA,OAAO,QAAA,GAAW,aAAA,CAAc,CAACC,KAAAA,KAAS,CAACA,KAAI,CAAA,GAAI,OAAA,CAAQ,CAACA,KAAAA,KAAS,CAACA,KAAI,CAAA;AAAA,EAC5E,CAAA,EAAG,CAAC,QAAA,EAAU,OAAA,EAAS,aAAa,CAAC,CAAA;AAGrC,EAAMD,kBAAU,MAAM;AACpB,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyB;AAC9C,MAAA,IACE,MAAM,GAAA,KAAQ,yBAAA,KACb,KAAA,CAAM,OAAA,IAAW,MAAM,OAAA,CAAA,EACxB;AACA,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,aAAA,EAAc;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAChD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAIlB,EAAA,MAAM,KAAA,GAAQ,OAAO,UAAA,GAAa,WAAA;AAElC,EAAA,MAAM,YAAA,GAAqBA,OAAA,CAAA,OAAA;AAAA,IACzB,OAAO;AAAA,MACL,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,IAAA,EAAM,SAAS,QAAA,EAAU,UAAA,EAAY,eAAe,aAAa;AAAA,GAC3E;AAEA,EAAA,uBACErC,GAAAA,CAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,YAAA,EAC9B,QAAA,kBAAAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,CAAA,EAC9B,QAAA,kBAAAA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA,EACE;AAAA,QACE,iBAAA,EAAmB,aAAA;AAAA,QACnB,sBAAA,EAAwB,kBAAA;AAAA,QACxB,GAAG;AAAA,OACL;AAAA,MAEF,SAAA,EAAW,EAAA;AAAA,QACT,iFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,KAEL,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,OAAA,CAAQ;AAAA,EACf,IAAA,GAAO,MAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,WAAA,GAAc,WAAA;AAAA,EACd,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIG;AACD,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,UAAA,EAAY,aAAA,KAAkB,UAAA,EAAW;AAElE,EAAA,IAAI,gBAAgB,MAAA,EAAQ;AAC1B,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,SAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,6EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,uBACEA,IAAC,KAAA,EAAA,EAAM,IAAA,EAAM,YAAY,YAAA,EAAc,aAAA,EAAgB,GAAG,KAAA,EACxD,QAAA,kBAAAI,IAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,cAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAU,SAAA;AAAA,QACV,aAAA,EAAY,MAAA;AAAA,QACZ,SAAA,EAAU,8EAAA;AAAA,QACV,KAAA,EACE;AAAA,UACE,iBAAA,EAAmB;AAAA,SACrB;AAAA,QAEF,IAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EACrB,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,cAAW,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,4BACnBA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,QAAA,EAAA,8BAAA,EAA4B;AAAA,WAAA,EAChD,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAA+B,QAAA,EAAS;AAAA;AAAA;AAAA,KACzD,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oDAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,kBAAA,EAAkB,KAAA,KAAU,WAAA,GAAc,WAAA,GAAc,EAAA;AAAA,MACxD,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAU,SAAA;AAAA,MAGV,QAAA,EAAA;AAAA,wBAAAJ,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,aAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,yFAAA;AAAA,cACA,wCAAA;AAAA,cACA,oCAAA;AAAA,cACA,OAAA,KAAY,UAAA,IAAc,OAAA,KAAY,OAAA,GAClC,kFAAA,GACA;AAAA;AACN;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,mBAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,sHAAA;AAAA,cACA,IAAA,KAAS,SACL,gFAAA,GACA,kFAAA;AAAA;AAAA,cAEJ,OAAA,KAAY,UAAA,IAAc,OAAA,KAAY,OAAA,GAClC,0FAAA,GACA,yHAAA;AAAA,cACJ;AAAA,aACF;AAAA,YACC,GAAG,KAAA;AAAA,YAEJ,QAAA,kBAAAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,cAAA,EAAa,SAAA;AAAA,gBACb,WAAA,EAAU,eAAA;AAAA,gBACV,SAAA,EAAU,kNAAA;AAAA,gBAET;AAAA;AAAA;AACH;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAwC;AACtC,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,UAAA,EAAW;AAErC,EAAA,uBACEI,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,SAAA;AAAA,MACb,WAAA,EAAU,iBAAA;AAAA,MACV,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAS,CAAA;AAAA,MACjC,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,QAAA,OAAA,GAAU,KAAK,CAAA;AACf,QAAA,aAAA,EAAc;AAAA,MAChB,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAJ,IAAC,aAAA,EAAA,EAAc,CAAA;AAAA,wBACfA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,gBAAA,EAAc;AAAA;AAAA;AAAA,GAC1C;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAC5E,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,UAAA,EAAW;AAErC,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAU,cAAA;AAAA,MACV,YAAA,EAAW,gBAAA;AAAA,MACX,QAAA,EAAU,EAAA;AAAA,MACV,OAAA,EAAS,aAAA;AAAA,MACT,KAAA,EAAM,gBAAA;AAAA,MACN,SAAA,EAAW,EAAA;AAAA,QACT,iPAAA;AAAA,QACA,0EAAA;AAAA,QACA,wHAAA;AAAA,QACA,yJAAA;AAAA,QACA,2DAAA;AAAA,QACA,2DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiC;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA,iNAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAuC;AACrC,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,cAAA,EAAa,OAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA;AAAA,MAC9D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,cAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,cAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2C;AACzC,EAAA,uBACEA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAa,WAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC5E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAa,SAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,gGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,cAAA,EAAa,OAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA;AAAA,MACnE,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,MAAM,IAAA,GAAO,UAAUE,IAAAA,GAAO,KAAA;AAE9B,EAAA,uBACEF,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,cAAA,EAAa,aAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,0OAAA;AAAA,QACA,6EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAA2D;AACzD,EAAA,MAAM,IAAA,GAAO,UAAUE,IAAAA,GAAO,QAAA;AAE9B,EAAA,uBACEF,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,cAAA,EAAa,cAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,4RAAA;AAAA;AAAA,QAEA,+CAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,cAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACxC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,cAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AAC5E,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAa,WAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAM,yBAAA,GAA4BC,GAAAA;AAAA,EAChC,mzBAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,8DAAA;AAAA,QACT,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,aAAA;AAAA,QACT,EAAA,EAAI,aAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,OAAA,GAAU,KAAA;AAAA,EACV,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIoD;AAClD,EAAA,MAAM,IAAA,GAAO,UAAUC,IAAAA,GAAO,QAAA;AAC9B,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAM,GAAI,UAAA,EAAW;AAEvC,EAAA,MAAM,yBACJF,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,cAAA,EAAa,aAAA;AAAA,MACb,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,GAAG,yBAAA,CAA0B,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MACpE,GAAG;AAAA;AAAA,GACN;AAGF,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAA,GAAU;AAAA,MACR,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,uBACEI,IAAAA,CAACmB,QAAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAvB,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,oBAChCA,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,KAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,UAAU,WAAA,IAAe,QAAA;AAAA,QAChC,GAAG;AAAA;AAAA;AACN,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,WAAA,GAAc,KAAA;AAAA,EACd,GAAG;AACL,CAAA,EAGG;AACD,EAAA,MAAM,IAAA,GAAO,UAAUE,IAAAA,GAAO,QAAA;AAE9B,EAAA,uBACEF,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,cAAA,EAAa,aAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,kVAAA;AAAA;AAAA,QAEA,+CAAA;AAAA,QACA,uCAAA;AAAA,QACA,8CAAA;AAAA,QACA,yCAAA;AAAA,QACA,sCAAA;AAAA,QACA,WAAA,IACE,0LAAA;AAAA,QACF;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,cAAA,EAAa,YAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,wKAAA;AAAA,QACA,0HAAA;AAAA,QACA,uCAAA;AAAA,QACA,8CAAA;AAAA,QACA,yCAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,GAAG;AACL,CAAA,EAEG;AAED,EAAA,MAAM,KAAA,GAAcqC,gBAAQ,MAAM;AAChC,IAAA,OAAO,CAAA,EAAG,KAAK,KAAA,CAAM,IAAA,CAAK,QAAO,GAAI,EAAE,IAAI,EAAE,CAAA,CAAA,CAAA;AAAA,EAC/C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEjC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,cAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,MACrE,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA,oBACCJ,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,mBAAA;AAAA,YACV,cAAA,EAAa;AAAA;AAAA,SACf;AAAA,wBAEFA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qCAAA;AAAA,YACV,cAAA,EAAa,oBAAA;AAAA,YACb,KAAA,EACE;AAAA,cACE,kBAAA,EAAoB;AAAA;AACtB;AAAA;AAEJ;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,cAAA,EAAa,UAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,gGAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA+B;AAC7B,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,cAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,8BAAA,EAAgC,SAAS,CAAA;AAAA,MACtD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,OAAA,GAAU,KAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIG;AACD,EAAA,MAAM,IAAA,GAAO,UAAUE,IAAAA,GAAO,GAAA;AAE9B,EAAA,uBACEF,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,cAAA,EAAa,iBAAA;AAAA,MACb,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,+eAAA;AAAA,QACA,wFAAA;AAAA,QACA,SAAS,IAAA,IAAQ,SAAA;AAAA,QACjB,SAAS,IAAA,IAAQ,SAAA;AAAA,QACjB,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AC5qBA,IAAM,eAAA,GAAkBC,GAAAA;AAAA;AAAA,EAEtB,6CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA;AAAA,QAEP,OAAA,EAAS;AAAA,UACP,8BAAA;AAAA,UACA,4CAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,GAAG,CAAA;AAAA;AAAA,QAGV,aAAA,EAAe;AAAA,UACb,eAAA;AAAA;AAAA,UACA,eAAA;AAAA;AAAA,UACA,uBAAA;AAAA;AAAA,UACA,+BAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,GAAG,CAAA;AAAA;AAAA,QAGV,YAAA,EAAc;AAAA,UACZ,4BAAA;AAAA,UACA,oCAAA;AAAA,UACA,8CAAA;AAAA,UACA,YAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,GAAG,CAAA;AAAA;AAAA,QAGV,eAAA,EAAiB;AAAA,UACf,+BAAA;AAAA,UACA,oCAAA;AAAA,UACA,gDAAA;AAAA,UACA,+BAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,GAAG,CAAA;AAAA;AAAA,QAGV,eAAA,EAAiB;AAAA,UACf,+BAAA;AAAA,UACA,oCAAA;AAAA,UACA,+CAAA;AAAA,UACA,+BAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,GAAG;AAAA;AACZ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAOA,IAAM,iBAAiB,CAAC,OAAA,KACtB,OAAA,EAAS,UAAA,CAAW,QAAQ,CAAA,IAAK,KAAA;AAEnC,IAAM,OAAA,GAAgBsC,OAAA,CAAA,UAAA;AAAA,EACpB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,wBACjCvC,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAW,EAAA,CAAG,eAAA,CAAgB,EAAE,OAAA,EAAS,SAAA,EAAW,CAAC,CAAA;AAAA,MAErD,oBAAA,EAAoB,cAAA,CAAe,OAAO,CAAA,GAAI,MAAA,GAAS,MAAA;AAAA,MACtD,GAAG;AAAA;AAAA;AAGV;AACA,OAAA,CAAQ,WAAA,GAAc,SAAA;AAEtB,IAAM,aAAA,GAAsBuC,OAAA,CAAA,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBvC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,2CAAA;AAAA,QACA,iFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,YAAA,GAAqBuC,OAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBvC,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,mDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,kBAAA,GAA2BuC,OAAA,CAAA,UAAA;AAAA,EAC/B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBvC,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,oBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AAEjC,IAAM,cAAA,GAAuBuC,OAAA,CAAA,UAAA;AAAA,EAC3B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBvC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,sDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAE7B,IAAM,aAAA,GAAsBuC,OAAA,CAAA,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBvC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,mBAAA;AAAA,QACA,sDAAA;AAAA,QACA,2BAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AC7I5B,SAAS,qBAAA,CAAqC;AAAA,EAC5C,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,IAAI,CAAC,MAAA,CAAO,UAAA,EAAW,EAAG;AACxB,IAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,SAAS,GAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,EAC/C;AAEA,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,2BAA2B,SAAS,CAAA,EACrD,QAAA,kBAAAI,IAAAA,CAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAI,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAU,uCAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACZ,OAAO,WAAA,EAAY,KAAM,yBACxBA,GAAAA,CAAC,aAAU,CAAA,GACT,MAAA,CAAO,WAAA,EAAY,KAAM,wBAC3BA,GAAAA,CAAC,WAAQ,CAAA,mBAETA,IAAC,cAAA,EAAA,EAAe;AAAA;AAAA;AAAA,KAEpB,EACF,CAAA;AAAA,oBACAI,IAAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAM,OAAA,EACzB,QAAA,EAAA;AAAA,sBAAAA,KAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,MAAM,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,EACzD,QAAA,EAAA;AAAA,wBAAAJ,IAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,QAAE;AAAA,OAAA,EAEb,CAAA;AAAA,sBACAI,KAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,MAAM,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA,EACxD,QAAA,EAAA;AAAA,wBAAAJ,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,QAAE;AAAA,OAAA,EAEf,CAAA;AAAA,MACC,OAAO,UAAA,EAAW,oBACjBI,IAAAA,CAAAoC,UAAA,EACE,QAAA,EAAA;AAAA,wBAAAxC,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,wBACvBI,KAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,MAAM,MAAA,CAAO,gBAAA,CAAiB,KAAK,CAAA,EAC5D,QAAA,EAAA;AAAA,0BAAAJ,IAAC,MAAA,EAAA,EAAO,CAAA;AAAA,UAAE;AAAA,SAAA,EAEZ;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AC9CA,SAAS,mBAAA,CAA2B;AAAA,EAClC,KAAA;AAAA,EACA,gBAAA,GAAmB,IAAA;AAAA,EACnB,kBAAkB,CAAC,EAAA,EAAI,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE;AAC3C,CAAA,EAAoC;AAClC,EAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACZ,QAAA,EAAA;AAAA,IAAA,gBAAA,oBACCA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,2BAAA,GAA8B,IAAA,CAAK,MAAA;AAAA,MAAO,KAAA;AAAA,MAAI,GAAA;AAAA,MACpD,KAAA,CAAM,mBAAA,EAAoB,CAAE,IAAA,CAAK,MAAA;AAAA,MAAO;AAAA,KAAA,EAC3C,CAAA;AAAA,oBAEFA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,wBAChDI,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAO,CAAA,EAAG,KAAA,CAAM,QAAA,EAAS,CAAE,WAAW,QAAQ,CAAA,CAAA;AAAA,YAC9C,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,cAAA,KAAA,CAAM,WAAA,CAAY,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,YACjC,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,cAAA,EACvB,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAa,KAAA,CAAM,QAAA,EAAS,CAAE,UAAA,CAAW,UAAU,CAAA,EAClE,CAAA;AAAA,8BACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,MAAK,KAAA,EACjB,QAAA,EAAA,eAAA,CAAgB,IAAI,CAAC,QAAA,qBACpBA,GAAAA,CAAC,UAAA,EAAA,EAA0B,OAAO,CAAA,EAAG,QAAQ,IAC1C,QAAA,EAAA,QAAA,EAAA,EADc,QAEjB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EAAiE,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACxE,KAAA,CAAM,QAAA,EAAS,CAAE,UAAA,CAAW,SAAA,GAAY,CAAA;AAAA,QAAE,KAAA;AAAA,QAAI,GAAA;AAAA,QACnD,MAAM,YAAA;AAAa,OAAA,EACtB,CAAA;AAAA,sBACAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,SAAA,EAAU,uBAAA;AAAA,YACV,OAAA,EAAS,MAAM,KAAA,CAAM,YAAA,CAAa,CAAC,CAAA;AAAA,YACnC,QAAA,EAAU,CAAC,KAAA,CAAM,kBAAA,EAAmB;AAAA,YAEpC,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,8BAC1CA,IAAC,YAAA,EAAA,EAAa;AAAA;AAAA;AAAA,SAChB;AAAA,wBACAI,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,SAAA,EAAU,QAAA;AAAA,YACV,OAAA,EAAS,MAAM,KAAA,CAAM,YAAA,EAAa;AAAA,YAClC,QAAA,EAAU,CAAC,KAAA,CAAM,kBAAA,EAAmB;AAAA,YAEpC,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,8BAC7CA,IAAC,WAAA,EAAA,EAAY;AAAA;AAAA;AAAA,SACf;AAAA,wBACAI,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,SAAA,EAAU,QAAA;AAAA,YACV,OAAA,EAAS,MAAM,KAAA,CAAM,QAAA,EAAS;AAAA,YAC9B,QAAA,EAAU,CAAC,KAAA,CAAM,cAAA,EAAe;AAAA,YAEhC,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,8BACzCA,GAAAA,CAACyC,YAAAA,EAAA,EAAa;AAAA;AAAA;AAAA,SAChB;AAAA,wBACArC,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,SAAA,EAAU,uBAAA;AAAA,YACV,SAAS,MAAM,KAAA,CAAM,aAAa,KAAA,CAAM,YAAA,KAAiB,CAAC,CAAA;AAAA,YAC1D,QAAA,EAAU,CAAC,KAAA,CAAM,cAAA,EAAe;AAAA,YAEhC,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,8BACzCA,IAAC,aAAA,EAAA,EAAc;AAAA;AAAA;AAAA;AACjB,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACzFA,SAAS,oBAAA,CAA4B;AAAA,EACnC;AACF,CAAA,EAAqC;AACnC,EAAA,uBACEI,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAI,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAU,4BAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAJ,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,UAAE;AAAA;AAAA;AAAA,KAEf,EACF,CAAA;AAAA,oBACAI,IAAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAM,KAAA,EAAM,WAAU,WAAA,EACzC,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,qBAAkB,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,sBACjCA,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,MACtB,KAAA,CACE,eAAc,CACd,MAAA;AAAA,QACC,CAAC,MAAA,KACC,OAAO,OAAO,UAAA,KAAe,WAAA,IAAe,OAAO,UAAA;AAAW,OAClE,CACC,GAAA,CAAI,CAAC,MAAA,KAAW;AACf,QAAA,uBACEA,GAAAA;AAAA,UAAC,wBAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,YAAA;AAAA,YACV,OAAA,EAAS,OAAO,YAAA,EAAa;AAAA,YAC7B,iBAAiB,CAAC,KAAA,KAAU,OAAO,gBAAA,CAAiB,CAAC,CAAC,KAAK,CAAA;AAAA,YAE1D,QAAA,EAAA,MAAA,CAAO;AAAA,WAAA;AAAA,UALH,MAAA,CAAO;AAAA,SAMd;AAAA,MAEJ,CAAC;AAAA,KAAA,EACL;AAAA,GAAA,EACF,CAAA;AAEJ;ACpDO,SAAS,UAAA,CAAW,EAAE,GAAG,KAAA,EAAM,EAAiC;AACrE,EAAA,uBACEA,IAAC,MAAA,EAAA,EAAM,GAAG,OACR,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,IAACU,MAAAA,EAAA,EAAM,SAAQ,QAAA,EAAS,SAAA,EAAU,WAAU,QAAA,EAAA,QAAA,EAE5C,CAAA;AAAA,oBACAV,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,QAAA;AAAA,QACH,WAAA,EAAY,mBAAA;AAAA,QACZ,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBACAA,GAAAA,CAAC+B,UAAAA,EAAA,EAAW,WAAU,4FAAA,EAA6F;AAAA,GAAA,EACrH,CAAA,EACF,CAAA;AAEJ;ACMO,SAAS,UAAA,CAAW;AAAA,EACzB,OAAA;AAAA,EACA,WAAA,GAAc;AAAA,IACZ,EAAE,KAAA,EAAO,2BAAA,EAA6B,IAAA,EAAM,GAAA,EAAI;AAAA,IAChD,EAAE,OAAO,eAAA;AAAgB,GAC3B;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,SAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACE/B,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,8GAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+GAAA,EACZ,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACA,2BAAWJ,GAAAA,CAAC,aAAU,WAAA,EAAY,UAAA,EAAW,WAAU,+BAAA,EAAgC,CAAA;AAAA,wBACxFA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,iBAAA,EACpB,0BAAAA,GAAAA,CAAC,cAAA,EAAA,EACE,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBACtBI,IAAAA,CAAOsC,kBAAN,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,GAAQ,CAAA,oBAAK1C,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA;AAAA,0BACnCA,GAAAA,CAAC,cAAA,EAAA,EACE,eAAK,IAAA,mBACJA,IAAC,cAAA,EAAA,EAAe,IAAA,EAAM,KAAK,IAAA,EACxB,QAAA,EAAA,IAAA,CAAK,OACR,CAAA,mBAEAA,IAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,IAAA,CAAK,OAAM,CAAA,EAEhC;AAAA,SAAA,EAAA,EAVmB,KAWrB,CACD,CAAA,EACH,CAAA,EACF,CAAA;AAAA,QACC,UAAA,oBAAcA,GAAAA,CAAC,UAAA,EAAA,EAAW,WAAU,6BAAA,EAA8B,CAAA;AAAA,QAClE;AAAA,OAAA,EACH;AAAA;AAAA,GACF;AAEJ;ACnCO,SAAS,OAAA,CAAQ,EAAE,KAAA,EAAO,KAAA,GAAQ,YAAW,EAAiB;AACnE,EAAA,uBACEI,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,qBAAmB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC1BA,GAAAA,CAAC,WAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,GAAAA,CAAC,WAAA,EAAA,EAA6B,SAAO,IAAA,EAAC,WAAA,EAAa,KAAK,QAAA,EACtD,QAAA,kBAAAI,KAAC,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,iBAAA,EAAA,EAAkB,OAAA,EAAO,IAAA,EAAC,OAAA,EAAS,IAAA,CAAK,KAAA,EACvC,QAAA,kBAAAI,IAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,IAAA,CAAK,GAAA,EACX,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,IAAA,oBAAQJ,GAAAA,CAAC,IAAA,CAAK,MAAL,EAAU,CAAA;AAAA,wBACzBA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA,OAAA,EACpB,CAAA,EACF,CAAA;AAAA,MACC,KAAK,KAAA,EAAO,MAAA,mBACXI,IAAAA,CAAAoC,UAAA,EACE,QAAA,EAAA;AAAA,wBAAAxC,GAAAA,CAACmC,qBAAA,EAAmB,OAAA,EAAO,MACzB,QAAA,kBAAA/B,IAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,6BAAA,EAC3B,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACgB,kBAAA,EAAiB,CAAA;AAAA,0BAClBhB,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,QAAA,EAAM;AAAA,SAAA,EAClC,CAAA,EACF,CAAA;AAAA,wBACAA,GAAAA,CAACoC,mBAAAA,EAAA,EACC,QAAA,kBAAApC,IAAC,cAAA,EAAA,EACE,QAAA,EAAA,IAAA,CAAK,KAAA,EAAO,GAAA,CAAI,CAAC,OAAA,qBAChBA,IAAC,kBAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,oBAAA,EAAA,EAAqB,OAAA,EAAO,IAAA,EAC3B,QAAA,kBAAAA,IAAC,GAAA,EAAA,EAAE,IAAA,EAAM,OAAA,CAAQ,GAAA,EACf,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,CAAQ,KAAA,EAAM,GACvB,CAAA,EACF,CAAA,EAAA,EALuB,QAAQ,KAMjC,CACD,GACH,CAAA,EACF;AAAA,OAAA,EACF,CAAA,GACE;AAAA,KAAA,EACN,CAAA,EAAA,EA/BgB,IAAA,CAAK,KAgCvB,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AC5CO,SAAS,WAAA,CAAY,EAAE,QAAA,EAAU,KAAA,GAAQ,YAAW,EAAqB;AAC9E,EAAA,uBACEI,IAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,sCAAA,EACtB,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,qBAAmB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC1BI,KAAC,WAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,qBACbA,KAAC,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,qBAAkB,OAAA,EAAO,IAAA,EACxB,0BAAAI,IAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,IAAA,CAAK,GAAA,EACZ,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,IAAA,CAAK,IAAA,EAAL,EAAU,CAAA;AAAA,0BACXA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK;AAAA,SAAA,EACnB,CAAA,EACF,CAAA;AAAA,wBACAI,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,uBAAoB,OAAA,EAAO,IAAA,EAC1B,0BAAAI,IAAAA,CAAC,iBAAA,EAAA,EAAkB,aAAW,IAAA,EAC5B,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC2C,oBAAA,EAAmB,CAAA;AAAA,4BACpB3C,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,MAAA,EAAI;AAAA,WAAA,EAChC,CAAA,EACF,CAAA;AAAA,0BACAI,IAAAA;AAAA,YAAC,mBAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,oCAAA;AAAA,cACV,IAAA,EAAK,OAAA;AAAA,cACL,KAAA,EAAM,OAAA;AAAA,cACN,UAAA,EAAY,CAAA;AAAA,cAEZ,QAAA,EAAA;AAAA,gCAAAA,KAAC,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,kCAC9CA,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,cAAA,EAAY;AAAA,iBAAA,EACpB,CAAA;AAAA,gCACAI,KAAC,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAAJ,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,kCAC7CA,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,eAAA,EAAa;AAAA,iBAAA,EACrB,CAAA;AAAA,gCACAA,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,gCACvBI,KAAC,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAAJ,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,kCAC7CA,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,gBAAA,EAAc;AAAA,iBAAA,EACtB;AAAA;AAAA;AAAA;AACF,SAAA,EACF;AAAA,OAAA,EAAA,EAlCoB,IAAA,CAAK,IAmC3B,CACD,CAAA;AAAA,sBACDA,GAAAA,CAAC,eAAA,EAAA,EACC,0BAAAI,IAAAA,CAAC,iBAAA,EAAA,EAAkB,WAAU,4BAAA,EAC3B,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC2C,kBAAAA,EAAA,EAAmB,SAAA,EAAU,4BAAA,EAA6B,CAAA;AAAA,wBAC3D3C,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,MAAA,EAAI;AAAA,OAAA,EACZ,CAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACjEO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,GAAG,OAAM,EAAsB;AACnE,EAAA,uBACEA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAG,KAAA,EAChB,QAAA,kBAAAA,GAAAA,CAAC,mBAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,IAAA,qBACVA,GAAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,OAAA,EAAO,IAAA,EAAC,IAAA,EAAK,IAAA,EAC9B,QAAA,kBAAAI,IAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,KAAK,GAAA,EACZ,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,IAAA,CAAK,IAAA,EAAL,EAAU,CAAA;AAAA,oBACXA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA,GAAA,EACpB,GACF,CAAA,EAAA,EANoB,IAAA,CAAK,KAO3B,CACD,CAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ;ACRO,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAK,EAAiB;AAC9C,EAAA,uBACEA,IAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,eAAA,EAAA,EACC,QAAA,kBAAAI,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAI,IAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAU,sFAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,oBAAA,EAChB,QAAA,EAAA;AAAA,4BAAAJ,IAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAK,MAAA,EAAQ,GAAA,EAAK,KAAK,IAAA,EAAM,CAAA;AAAA,4BAC/CA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,YAAA,EACvB,QAAA,EAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,WAAA,EAAY,EACrC;AAAA,WAAA,EACF,CAAA;AAAA,0BACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,eAAK,IAAA,EAAK,CAAA;AAAA,4BACpDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,eAAK,KAAA,EAAM;AAAA,WAAA,EACjD,CAAA;AAAA,0BACAA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAU,gBAAA,EAAiB;AAAA;AAAA;AAAA,KACjD,EACF,CAAA;AAAA,oBACAI,IAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,gFAAA;AAAA,QACV,IAAA,EAAK,OAAA;AAAA,QACL,KAAA,EAAM,KAAA;AAAA,QACN,UAAA,EAAY,CAAA;AAAA,QAEZ,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,qBAAkB,SAAA,EAAU,iBAAA,EAC3B,0BAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,oBAAA,EAChB,QAAA,EAAA;AAAA,8BAAAJ,IAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAK,MAAA,EAAQ,GAAA,EAAK,KAAK,IAAA,EAAM,CAAA;AAAA,8BAC/CA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,YAAA,EACvB,QAAA,EAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,WAAA,EAAY,EACrC;AAAA,aAAA,EACF,CAAA;AAAA,4BACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,eAAK,IAAA,EAAK,CAAA;AAAA,8BACpDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,eAAK,KAAA,EAAM;AAAA,aAAA,EACjD;AAAA,WAAA,EACF,CAAA,EACF,CAAA;AAAA,0BACAA,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,0BACvBA,GAAAA,CAAC,iBAAA,EAAA,EACC,QAAA,kBAAAI,KAAC,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAJ,IAAC,YAAA,EAAA,EAAa,CAAA;AAAA,YAAE;AAAA,WAAA,EAElB,CAAA,EACF,CAAA;AAAA,0BACAA,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,0BACvBI,KAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,KAAC,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAJ,IAAC,cAAA,EAAA,EAAe,CAAA;AAAA,cAAE;AAAA,aAAA,EAEpB,CAAA;AAAA,4BACAI,KAAC,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAJ,IAAC,cAAA,EAAA,EAAe,CAAA;AAAA,cAAE;AAAA,aAAA,EAEpB,CAAA;AAAA,4BACAI,KAAC,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAJ,IAAC,QAAA,EAAA,EAAS,CAAA;AAAA,cAAE;AAAA,aAAA,EAEd;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,0BACvBI,KAAC,gBAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAJ,IAAC,UAAA,EAAA,EAAW,CAAA;AAAA,YAAE;AAAA,WAAA,EAEhB;AAAA;AAAA;AAAA;AACF,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;ACzFA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA8B;AAC5B,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,QAAA,EAAS,CAAE,cAAc,MAAA,GAAS,CAAA;AAE3D,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAY,qBAAA;AAAA,YACZ,OAAQ,KAAA,CAAM,SAAA,CAAU,UAAU,CAAA,EAAG,gBAAe,IAAgB,EAAA;AAAA,YACpE,QAAA,EAAU,CAAC,KAAA,KACT,KAAA,CAAM,SAAA,CAAU,UAAU,CAAA,EAAG,cAAA,CAAe,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAAA,YAEhE,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QAGC,8BACCI,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,OAAA,EAAS,MAAM,KAAA,CAAM,kBAAA,EAAmB;AAAA,YACxC,SAAA,EAAU,kBAAA;AAAA,YACX,QAAA,EAAA;AAAA,cAAA,OAAA;AAAA,8BAECJ,GAAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAe;AAAA;AAAA;AAAA;AAC9B;AAAA;AAAA,GAEJ;AAEJ;AC7CA,SAAS,gBAAgB,SAAA,EAAmE;AAC1F,EAAA,MAAM,UAAA,GAAkE;AAAA,IACtE,MAAA,EAAQ,WAAA;AAAA,IACR,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ,WAAA;AAAA,IACR,SAAA,EAAW,WAAA;AAAA,IACX,KAAA,EAAO,WAAA;AAAA,IACP,SAAA,EAAW,WAAA;AAAA,IACX,MAAA,EAAQ,WAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,OAAO,UAAA,CAAW,SAAS,CAAA,IAAK,WAAA;AAClC;AAWA,SAAS,YAAA,CAAa;AAAA,EACpB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,iEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qDAAA,EACb,mBAAS,IAAA,EACZ,CAAA;AAAA,wBAEAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,eAAA,CAAgB,QAAA,CAAS,SAAS,CAAA;AAAA,cAC3C,SAAA,EAAU,yCAAA;AAAA,cAET,QAAA,EAAA,QAAA,CAAS;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACb,mBAAS,KAAA,EACZ;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;ACzCA,SAAS,qBAAqB,IAAA,EAAuD;AAEnF,EAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,UAAA,EAAY,MAAA,IAAU,SAAA;AAGpD,EAAA,MAAM,sBAAsB,IAAA,CAAK,UAAA,EAAY,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,UAAU,CAAA;AAC9E,EAAA,MAAM,qBAAqB,IAAA,CAAK,UAAA,EAAY,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,SAAS,CAAA;AAG5E,EAAA,IAAI,gBAAA,KAAqB,cAAc,mBAAA,EAAqB;AAC1D,IAAA,OAAO,UAAA;AAAA,EACT;AAGA,EAAA,IAAI,gBAAA,KAAqB,SAAA,IAAa,kBAAA,IAAsB,IAAA,CAAK,UAAA,EAAY;AAC3E,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,OAAO,QAAA;AACT;AAKA,SAAS,aAAa,MAAA,EAA4D;AAChF,EAAA,IAAI,MAAA,KAAW,YAAY,OAAO,UAAA;AAClC,EAAA,IAAI,MAAA,KAAW,WAAW,OAAO,SAAA;AACjC,EAAA,OAAO,QAAA;AACT;AAGA,IAAM,gBAAA,GAAmB;AAAA,EACvB,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,oBAAA;AAAA,IACR,EAAA,EAAI;AAAA,GACN;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,oBAAA;AAAA,IACR,EAAA,EAAI;AAAA,GACN;AAAA,EACA,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ,kBAAA;AAAA,IACR,EAAA,EAAI;AAAA;AAER,CAAA;AAGA,IAAM,YAAA,GAAe;AAAA,EACnB,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,oCAAA;AAAA,IACN,QAAA,EAAU,cAAA;AAAA,IACV,IAAA,EAAM;AAAA,GACR;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,oCAAA;AAAA,IACN,QAAA,EAAU,cAAA;AAAA,IACV,IAAA,EAAM;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,gCAAA;AAAA,IACN,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM;AAAA;AAEV,CAAA;AAMA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,WAAA,IAAe,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;AACxC,MAAA,WAAA,EAAY;AAAA,IACd;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2B;AAChD,IAAA,IAAA,CAAK,CAAA,CAAE,QAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,KAAQ,WAAA,IAAe,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;AAChF,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,WAAA,EAAY;AAAA,IACd;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,IAAA,CAAK,IAAA,KAAS,MAAA,GAAS,oBAAA,CAAqB,IAAI,CAAA,GAAI,QAAA;AACzE,EAAA,MAAM,UAAA,GAAa,iBAAiB,YAAY,CAAA;AAGhD,EAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,UAAA,EAAY,QAAA,IAAY,KAAK,QAAA,IAAY,CAAA;AACzE,EAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA;AAC7D,EAAA,MAAM,gBAAA,GAAmB,aAAa,gBAAgB,CAAA;AAGtD,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,UAAA,EAAY,MAAA,IAAU,CAAA;AACjD,EAAA,MAAM,sBAAsB,IAAA,CAAK,UAAA,EAAY,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,UAAU,CAAA,GAC1E,UAAA,GACA,IAAA,CAAK,YAAY,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,MAAA,KAAW,SAAS,IAC/C,SAAA,GACA,QAAA;AACN,EAAA,MAAM,cAAA,GAAiB,aAAa,mBAAmB,CAAA;AAGvD,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,WAAA;AAAA,QACV,YAAA,EAAW,OAAA;AAAA,QACX,mBAAA,EAAmB,aAAA;AAAA,QACnB,SAAA,EAAW,EAAA;AAAA,UACT,oEAAA;AAAA,UACA,aAAA,IAAiB,cAAA;AAAA,UACjB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAmC,QAAA,EAAA,MAAA,EAAC;AAAA;AAAA,KACtD;AAAA,EAEJ;AAGA,EAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAChC,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,WAAA;AAAA,QACV,YAAA,EAAW,cAAA;AAAA,QACX,mBAAA,EAAmB,aAAA;AAAA,QACnB,OAAA,EAAS,WAAA;AAAA,QACT,SAAA,EAAW,aAAA;AAAA,QACX,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,CAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,qDAAA;AAAA,UACA,gBAAA;AAAA,UACA,aAAA,IAAiB,cAAA;AAAA,UACjB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAAI,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,0FAAA;AAAA,cACA,0CAAA;AAAA;AAAA,cAEA,sCAAA;AAAA,cACA;AAAA,aACF;AAAA,YAGA,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,gCAChEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEACb,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,4CAAA;AAAA,oBACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA,CAAA;AAAI;AAAA,iBAC3C,EACF;AAAA,eAAA,EACF,CAAA;AAAA,8BAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sBAAA,EAAuB,CAAA;AAAA,gCACxCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAc,QAAA,EAAA,cAAA,EAAY;AAAA,eAAA,EAC5C;AAAA;AAAA;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AAGA,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,YAAA,EAAW,MAAA;AAAA,MACX,WAAA,EAAW,YAAA;AAAA,MACX,mBAAA,EAAmB,aAAA;AAAA,MACnB,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qDAAA;AAAA,QACA,gBAAA;AAAA,QACA,aAAA,IAAiB,cAAA;AAAA,QACjB;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAI,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,0FAAA;AAAA,YACA,UAAA,CAAW,MAAA;AAAA,YACX,UAAA,CAAW,EAAA;AAAA;AAAA,YAEX,sCAAA;AAAA,YACA;AAAA,WACF;AAAA,UAGA,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,IAAC,OAAA,EAAA,EAAQ,SAAA,EAAW,GAAG,sBAAA,EAAwB,gBAAA,CAAiB,IAAI,CAAA,EAAG,CAAA;AAAA,8BACvEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EACb,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,gBAAA,CAAiB,QAAQ,CAAA;AAAA,kBAC7E,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA,CAAA;AAAI;AAAA,eAC3C,EACF;AAAA,aAAA,EACF,CAAA;AAAA,4BAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,IAAC,KAAA,EAAA,EAAM,SAAA,EAAW,GAAG,sBAAA,EAAwB,cAAA,CAAe,IAAI,CAAA,EAAG,CAAA;AAAA,cAClE,aAAA,GAAgB,CAAA,mBACfI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,yBAAA,EAA2B,cAAA,CAAe,IAAI,CAAA,EAC/D,QAAA,EAAA;AAAA,gBAAA,aAAA;AAAA,gBAAc;AAAA,eAAA,EACjB,oBAEAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAoC,QAAA,EAAA,QAAA,EAAC;AAAA,aAAA,EAEzD;AAAA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AC/OA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoB;AAClB,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,qBAAmB,IAAA,CAAK,aAAA;AAAA,MACxB,SAAA,EAAW,EAAA;AAAA,QACT,0DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,UAAK,SAAA,EAAW,EAAA;AAAA,YACf,qBAAA;AAAA,YACA,IAAA,CAAK,gBAAgB,cAAA,GAAiB;AAAA,WACxC,EACG,eAAK,KAAA,EACR,CAAA;AAAA,UACC,KAAK,aAAA,oBACJI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uBAAA,EAEd,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oFAAA,EAAqF,CAAA;AAAA,4BAErGA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sDAAA,EAAuD;AAAA,WAAA,EACzE;AAAA,SAAA,EAEJ,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qDAAA,EACb,eAAK,SAAA,EACR;AAAA;AAAA;AAAA,GACF;AAEJ;;;ACyHO,SAAS,WAAW,IAAA,EAAoB;AAC7C,EAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,EAAA,MAAM,UAAA,GAAa,WAAW,IAAI,CAAA;AAClC,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,UAAS,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAC3D;AAKO,SAAS,WAAW,IAAA,EAAoB;AAC7C,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,IAAA,CAAK,IAAI,IAAA,CAAK,WAAA,EAAY,EAAG,IAAA,CAAK,QAAA,EAAS,EAAG,IAAA,CAAK,OAAA,EAAS,CAAC,CAAA;AAChF,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,SAAA,EAAU,IAAK,CAAA;AAChC,EAAA,CAAA,CAAE,UAAA,CAAW,CAAA,CAAE,UAAA,EAAW,GAAI,IAAI,MAAM,CAAA;AACxC,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,EAAE,cAAA,EAAe,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAC7D,EAAA,OAAO,IAAA,CAAK,IAAA,CAAA,CAAA,CAAQ,CAAA,CAAE,OAAA,EAAQ,GAAI,UAAU,OAAA,EAAQ,IAAK,KAAA,GAAY,CAAA,IAAK,CAAC,CAAA;AAC7E;AAKO,SAAS,aAAA,CAAc,WAAiB,KAAA,EAAuB;AACpE,EAAA,MAAM,QAAgB,EAAC;AACvB,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,SAAS,CAAA;AAClC,EAAA,MAAM,KAAA,uBAAY,IAAA,EAAK;AACvB,EAAA,MAAM,cAAA,GAAiB,WAAW,KAAK,CAAA;AAGvC,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,EAAO;AACjC,EAAA,MAAM,YAAA,GAAe,SAAA,KAAc,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,SAAA;AAChD,EAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAQ,GAAI,YAAY,CAAA;AAEhD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,OAAO,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,OAAO,CAAA;AAChC,IAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAQ,GAAI,CAAC,CAAA;AAErC,IAAA,MAAM,UAAA,GAAa,WAAW,SAAS,CAAA;AACvC,IAAA,MAAM,IAAA,GAAO,UAAU,WAAA,EAAY;AACnC,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,UAAS,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAElE,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,UAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,SAAA;AAAA,MACX,OAAA,EAAS,OAAA;AAAA,MACT,KAAA,EAAO,IAAI,UAAA,CAAW,QAAA,GAAW,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,MACjD,SAAA,EAAW,eAAA,CAAgB,SAAA,EAAW,OAAO,CAAA;AAAA,MAC7C,eAAe,OAAA,KAAY;AAAA,KAC5B,CAAA;AAGD,IAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAQ,GAAI,CAAC,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,eAAA,CAAgB,OAAa,GAAA,EAAmB;AACvD,EAAA,MAAM,MAAA,GAAS,CAAC,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AAClG,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,CAAA;AAEtC,EAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,IAAA,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,KAAA,CAAM,SAAS,CAAA,GAAA,EAAM,GAAA,CAAI,OAAA,EAAS,CAAA,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,EAAS,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,EAAI,GAAA,CAAI,OAAA,EAAS,CAAA,CAAA;AACxE;AAKO,SAAS,qBAAqB,IAAA,EAA8B;AACjE,EAAA,MAAM,UAAA,GAA6C;AAAA,IACjD,QAAA,EAAU,KAAA;AAAA,IACV,GAAA,EAAK,OAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,CAAA,EAAG,GAAA;AAAA,IACH,GAAA,EAAK;AAAA,GACP;AACA,EAAA,OAAO,UAAA,CAAW,IAAI,CAAA,IAAK,IAAA;AAC7B;ACnPA,SAAS,oBAAA,CAAqB;AAAA,EAC5B;AACF,CAAA,EAEG;AACD,EAAA,uBACEI,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAU,uCAAA;AAAA,MACV,SAAS,MAAM,MAAA,CAAO,cAAc,MAAA,CAAO,WAAA,OAAkB,KAAK,CAAA;AAAA,MAElE,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,kBAAA,EAE9B,CAAA;AAAA,wBACAA,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,cAAA,EAAe;AAAA;AAAA;AAAA,GACxC;AAEJ;AAKO,SAAS,iBAAA,GAAyC;AACvD,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,UAAA;AAAA,IACJ,WAAA,EAAa,MAAA;AAAA,IACb,MAAA,EAAQ,CAAC,EAAE,MAAA,uBAAaA,GAAAA,CAAC,wBAAqB,MAAA,EAAgB,CAAA;AAAA,IAC9D,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,qBAAMA,GAAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAU,GAAA,CAAI,QAAA,EAAU,CAAA;AAAA,IACzD,aAAA,EAAe,IAAA;AAAA,IACf,YAAA,EAAc;AAAA,GAChB;AACF;AAKO,SAAS,mBAAA,CACd,OACA,MAAA,EACuB;AACvB,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAEzC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,OAAA;AAAA,MACJ,UAAA,EAAY,CAAC,QAAA,KAAa,QAAA,CAAS,MAAM,OAAO,CAAA;AAAA,MAChD,MAAA,EAAQ,sBAAMA,GAAAA,CAAC,cAAW,IAAA,EAAY,CAAA;AAAA,MACtC,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,KAAM;AACjB,QAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AACrB,QAAA,MAAM,OAAqB,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,IAAK,EAAE,MAAM,OAAA,EAAQ;AAEtE,QAAA,uBACEA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA;AAAA,YACA,IAAA;AAAA,YACA,QAAA;AAAA,YACA,eAAe,IAAA,CAAK,aAAA;AAAA,YACpB,WAAA,EACE,QAAQ,WAAA,GACJ,MAAM,OAAO,WAAA,GAAc,QAAA,EAAU,IAAA,EAAM,IAAI,CAAA,GAC/C;AAAA;AAAA,SAER;AAAA,MAEJ,CAAA;AAAA,MACA,aAAA,EAAe,KAAA;AAAA,MACf,YAAA,EAAc;AAAA,KAChB;AAAA,EACF,CAAC,CAAA;AACH;AAKO,SAAS,eAAA,CACd,OACA,MAAA,EACuB;AACvB,EAAA,OAAO;AAAA,IACL,iBAAA,EAAkB;AAAA,IAClB,GAAG,mBAAA,CAAoB,KAAA,EAAO,MAAM;AAAA,GACtC;AACF;ACrEA,SAAS,aAAA,CAAc;AAAA,EACrB,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAS;AACX,CAAA,EAAuB;AACrB,EAAA,MAAM;AAAA,IACJ,SAAA,GAAY,EAAA;AAAA,IACZ,SAAA,uBAAgB,IAAA,EAAK;AAAA,IACrB,oBAAA,GAAuB,IAAA;AAAA,IACvB,WAAA,GAAc,IAAA;AAAA,IACd,cAAA,GAAiB,IAAA;AAAA,IACjB,eAAA,GAAkB,CAAC,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE,CAAA;AAAA,IACjC,eAAA,GAAkB,EAAA;AAAA,IAClB,oBAAA,GAAuB,IAAA;AAAA,IACvB,SAAA,GAAY;AAAA,GACd,GAAI,MAAA;AAGJ,EAAA,MAAM,KAAA,GAAc4C,OAAA,CAAA,OAAA;AAAA,IAClB,MAAM,aAAA,CAAc,SAAA,EAAW,SAAS,CAAA;AAAA,IACxC,CAAC,WAAW,SAAS;AAAA,GACvB;AAGA,EAAA,MAAM,cAAA,GAAuBA,gBAAQ,MAAM;AACzC,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,aAAa,CAAA;AACnD,IAAA,OAAO,WAAA,GAAc,UAAA,CAAW,WAAA,CAAY,SAAS,CAAA,GAAI,IAAA;AAAA,EAC3D,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAA,MAAM,OAAA,GAAgBA,OAAA,CAAA,OAAA;AAAA,IACpB,MAAM,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAA;AAAA,IACnC,CAAC,OAAO,MAAM;AAAA,GAChB;AAGA,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUA,OAAA,CAAA,QAAA,CAAuB,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,OAAA,CAAA,QAAA,CAA6B,EAAE,CAAA;AAC/E,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,OAAA,CAAA,QAAA,CAA0B,EAAE,CAAA;AAClF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,OAAA,CAAA,QAAA,CAAS,EAAE,CAAA;AAGzD,EAAA,MAAM,QAAQC,aAAAA,CAAc;AAAA,IAC1B,IAAA,EAAM,SAAA;AAAA,IACN,OAAA;AAAA,IACA,iBAAiBC,eAAAA,EAAgB;AAAA,IACjC,mBAAmBC,iBAAAA,EAAkB;AAAA,IACrC,qBAAqBC,mBAAAA,EAAoB;AAAA,IACzC,uBAAuBC,qBAAAA,EAAsB;AAAA,IAC7C,eAAA,EAAiB,UAAA;AAAA,IACjB,qBAAA,EAAuB,gBAAA;AAAA,IACvB,wBAAA,EAA0B,mBAAA;AAAA,IAC1B,oBAAA,EAAsB,eAAA;AAAA,IACtB,KAAA,EAAO;AAAA,MACL,OAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,UAAA,EAAY;AAAA,QACV,QAAA,EAAU;AAAA;AACZ;AACF,GACD,CAAA;AAED,EAAA,uBACE7C,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAG7C,QAAA,EAAA;AAAA,QAAA,WAAA,oBAAeJ,GAAAA,CAAC,oBAAA,EAAA,EAAqB,KAAA,EAAc,CAAA;AAAA,wBAGpDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCACb,QAAA,kBAAAI,IAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,QAAA;AAAA,YACV,KAAA,EAAO,EAAE,SAAA,EAAU;AAAA,YAEnB,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,+CAAA,EAEf,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,8CAAA,EACd,QAAA,EAAA,KAAA,CAAM,iBAAgB,CAAE,GAAA,CAAI,CAAC,WAAA,qBAC5BA,GAAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBAEC,SAAA,EAAU,4BAAA;AAAA,oBAET,QAAA,EAAA,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,KAAA,KAAU;AAC1C,sBAAA,MAAM,mBAAA,GAAsB,OAAO,EAAA,KAAO,cAAA;AAC1C,sBAAA,uBACEA,GAAAA;AAAA,wBAAC,IAAA;AAAA,wBAAA;AAAA,0BAEC,SAAA,EAAW,EAAA;AAAA,4BACT,2GAAA;AAAA,4BACA,KAAA,KAAU,KAAK,oBAAA,IAAwB;AAAA,8BACrC;AAAA,6BACF;AAAA,4BACA,QAAQ,CAAA,IAAK,yBAAA;AAAA,4BACb,mBAAA,IAAuB;AAAA,2BACzB;AAAA,0BAEC,QAAA,EAAA,MAAA,CAAO,gBACJ,IAAA,GACAkD,UAAAA;AAAA,4BACE,MAAA,CAAO,OAAO,SAAA,CAAU,MAAA;AAAA,4BACxB,OAAO,UAAA;AAAW;AACpB,yBAAA;AAAA,wBAfC,MAAA,CAAO;AAAA,uBAgBd;AAAA,oBAEJ,CAAC;AAAA,mBAAA;AAAA,kBAzBI,WAAA,CAAY;AAAA,iBA2BpB,CAAA,EACH,CAAA;AAAA,gCACAlD,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,0CAAA,EACd,gBAAM,WAAA,EAAY,CAAE,IAAA,EAAM,MAAA,GACzB,MAAM,WAAA,EAAY,CAAE,KAAK,GAAA,CAAI,CAAC,wBAC5BA,GAAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBAEC,YAAA,EAAY,GAAA,CAAI,aAAA,EAAc,IAAK,UAAA;AAAA,oBACnC,SAAA,EAAU,6EAAA;AAAA,oBAET,cAAI,eAAA,EAAgB,CAAE,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAC1C,sBAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,MAAA,CAAO,EAAA,KAAO,cAAA;AAC/C,sBAAA,uBACEA,GAAAA;AAAA,wBAAC,IAAA;AAAA,wBAAA;AAAA,0BAEC,SAAA,EAAW,EAAA;AAAA,4BACT,yDAAA;AAAA,4BACA,KAAA,KAAU,KAAK,oBAAA,IAAwB;AAAA,8BACrC;AAAA,6BACF;AAAA,4BACA,QAAQ,CAAA,IAAK,yBAAA;AAAA,4BACb,mBAAA,IAAuB;AAAA,2BACzB;AAAA,0BAEC,QAAA,EAAAkD,UAAAA;AAAA,4BACC,IAAA,CAAK,OAAO,SAAA,CAAU,IAAA;AAAA,4BACtB,KAAK,UAAA;AAAW;AAClB,yBAAA;AAAA,wBAbK,IAAA,CAAK;AAAA,uBAcZ;AAAA,oBAEJ,CAAC;AAAA,mBAAA;AAAA,kBAxBI,GAAA,CAAI;AAAA,iBA0BZ,CAAA,mBAEDlD,GAAAA,CAAC,QACC,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,SAAS,OAAA,CAAQ,MAAA;AAAA,oBACjB,SAAA,EAAU,kBAAA;AAAA,oBACX,QAAA,EAAA;AAAA;AAAA,mBAGH,CAAA,EAEJ;AAAA,eAAA,EACF,CAAA;AAAA,8BACAA,GAAAA,CAAC,SAAA,EAAA,EAAU,WAAA,EAAY,YAAA,EAAa,CAAA;AAAA,8BACpCA,GAAAA,CAAC,SAAA,EAAA,EAAU,WAAA,EAAY,UAAA,EAAW;AAAA;AAAA;AAAA,SACpC,EACF,CAAA;AAAA,QAGC,kCACCA,GAAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,gBAAA,EAAkB,KAAA;AAAA,YAClB;AAAA;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;AC5JA,SAAS,sBAAsB,MAAA,EAA6E;AAC1G,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,SAAA;AAAW,MAAA,OAAO,SAAA;AAAA;AAAA,IACvB,KAAK,SAAA;AAAW,MAAA,OAAO,WAAA;AAAA,IACvB,KAAK,UAAA;AAAY,MAAA,OAAO,aAAA;AAAA,IACxB;AAAS,MAAA,OAAO,SAAA;AAAA;AAEpB;AAKA,SAAS,sBAAsB,MAAA,EAAgC;AAC7D,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,SAAA;AAAW,MAAA,OAAO,kEAAA;AAAA,IACvB,KAAK,SAAA;AAAW,MAAA,OAAO,kEAAA;AAAA,IACvB,KAAK,UAAA;AAAY,MAAA,OAAO,EAAA;AAAA;AAAA,IACxB;AAAS,MAAA,OAAO,EAAA;AAAA;AAEpB;AAKA,SAAS,eAAe,MAAA,EAAgC;AACtD,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,SAAA;AAAW,MAAA,OAAO,UAAA;AAAA,IACvB,KAAK,SAAA;AAAW,MAAA,OAAO,SAAA;AAAA,IACvB,KAAK,UAAA;AAAY,MAAA,OAAO,UAAA;AAAA,IACxB,KAAK,SAAA;AAAW,MAAA,OAAO,SAAA;AAAA,IACvB;AAAS,MAAA,OAAO,MAAA;AAAA;AAEpB;AAKA,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,KAAA,EAAM,EAA0C;AAChF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUmD,iBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,SAAS,MAAA,GAAS,CAAA;AACpE,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,cAAA,IAAkB,QAAA,CAAS,QAAA,EAAU,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,UAAU,CAAA,CAAE,MAAA,IAAU,CAAA;AAE1G,EAAA,uBACEnD,GAAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,SAAA,EACvC,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAACmC,mBAAAA,EAAA,EAAmB,OAAA,EAAO,MACzB,QAAA,kBAAA/B,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,wDAAA;AAAA,UACA,qCAAA;AAAA,UACA,WAAA,IAAe;AAAA,SACjB;AAAA,QACA,UAAU,CAAC,WAAA;AAAA,QAEX,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAACoD,KAAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,4BACjDhD,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EACZ,mBAAS,KAAA,IAAS,CAAA,SAAA,EAAY,KAAA,GAAQ,CAAC,CAAA,CAAA,EAC1C,CAAA;AAAA,cACC,SAAS,WAAA,oBACRI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,gBAAA,SAAA;AAAA,gBAC1C,QAAA,CAAS;AAAA,eAAA,EACd;AAAA,aAAA,EAEJ;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,qBAAA,CAAsB,QAAA,CAAS,MAAM,CAAA;AAAA,gBAC9C,WAAW,EAAA,CAAG,SAAA,EAAW,qBAAA,CAAsB,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,gBAE9D,QAAA,EAAA,cAAA,CAAe,SAAS,MAAM;AAAA;AAAA,aACjC;AAAA,YACC,WAAA,oBACCA,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,EAAA;AAAA,cACtB,oDAAA;AAAA,cACA,MAAA,IAAU;AAAA,aACZ,EAAG;AAAA,WAAA,EAEP;AAAA;AAAA;AAAA,KACF,EACF,CAAA;AAAA,IAEC,WAAA,oBACCI,IAAAA,CAACgC,mBAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAApC,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,sBACXI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA;AAAA,QAAA,cAAA,GAAiB,CAAA,oBAChBA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yEAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,0BACvCI,KAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,YAAA,cAAA;AAAA,YAAe;AAAA,WAAA,EAAqC;AAAA,SAAA,EAC7D,CAAA;AAAA,wBAEFJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,mBAAS,QAAA,EAAU,GAAA,CAAI,CAAC,OAAA,qBACvBI,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW,EAAA;AAAA,cACT,uDAAA;AAAA,cACA,OAAA,CAAQ,aACJ,aAAA,GACA;AAAA,aACN;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,OAAA,CAAQ,UAAA,mBACPJ,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,4BAAA,EAA6B,CAAA,mBAErDA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,4BAAA,EAA6B,CAAA;AAAA,gCAElDA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,QAAQ,UAAA,GAAa,iBAAA,GAAoB,oCAAA,EACvD,QAAA,EAAA,OAAA,CAAQ,IAAA,EACX;AAAA,eAAA,EACF,CAAA;AAAA,cACC,QAAQ,QAAA,oBACPI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uBAAA,EACb,QAAA,EAAA;AAAA,gBAAA,OAAA,CAAQ,QAAA;AAAA,gBAAS,GAAA;AAAA,gBAAE,OAAA,CAAQ,IAAA,GAAO,oBAAA,CAAqB,OAAA,CAAQ,IAAI,CAAA,GAAI;AAAA,eAAA,EAC1E;AAAA;AAAA,WAAA;AAAA,UArBG,OAAA,CAAQ;AAAA,SAwBhB,CAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AAMA,SAAS,gBAAA,CAAiB;AAAA,EACxB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,aAAa,IAAA,EAAM,UAAA;AACzB,EAAA,MAAM,eAAA,GAAkB,UAAA,EAAY,QAAA,IAAY,IAAA,EAAM,QAAA,IAAY,CAAA;AAClE,EAAA,MAAM,eAAA,GAAkB,YAAY,QAAA,IAAY,CAAA;AAEhD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,IAAU+C,OAAA,CAAA,QAAA,CAAS,eAAA,CAAgB,UAAU,CAAA;AACnF,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,IAAUA,OAAA,CAAA,QAAA,CAAS,eAAA,CAAgB,UAAU,CAAA;AACnF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAGxD,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,WAAA,GAAc,IAAA,EAAM,UAAA,EAAY,QAAA,IAAY,MAAM,QAAA,IAAY,CAAA;AACpE,IAAA,MAAM,WAAA,GAAc,IAAA,EAAM,UAAA,EAAY,QAAA,IAAY,CAAA;AAClD,IAAA,gBAAA,CAAiB,WAAA,CAAY,UAAU,CAAA;AACvC,IAAA,gBAAA,CAAiB,WAAA,CAAY,UAAU,CAAA;AACvC,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,oBAAA,GAAuB,CAAC,CAAA,KAA2C;AACvE,IAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,CAAO,KAAA;AACvB,IAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,CAAA,KAA2C;AACvE,IAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,CAAO,KAAA;AACvB,IAAA,gBAAA,CAAiB,KAAK,CAAA;AAEtB,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAK,CAAA,IAAK,CAAA;AACtC,MAAA,MAAM,qBAAqB,IAAA,CAAK,KAAA,CAAO,QAAA,GAAW,UAAA,CAAW,SAAU,GAAG,CAAA;AAC1E,MAAA,gBAAA,CAAiB,KAAK,GAAA,CAAI,GAAA,EAAK,kBAAkB,CAAA,CAAE,UAAU,CAAA;AAAA,IAC/D;AACA,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,IAAA,IAAQ,CAAC,gBAAA,EAAkB;AAE7C,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAA,CAAW,aAAa,CAAA,IAAK,CAAC,CAAC,CAAA;AAC7E,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,aAAa,CAAA,IAAK,CAAA;AACjD,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,UAAA,CAAW,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAE5E,IAAA,gBAAA,CAAiB,SAAS,EAAA,EAAI,OAAA,EAAS,WAAA,EAAa,UAAA,GAAa,cAAc,MAAS,CAAA;AACxF,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,IAAA,IAAQ,CAAC,IAAA,EAAM;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAA,GAAqB,UAAA,CAAW,aAAa,CAAA,IAAK,CAAA;AACxD,EAAA,MAAM,gBAAA,GAAmB,YAAY,MAAA,IAAU,SAAA;AAE/C,EAAA,uBACEnD,IAAC,MAAA,EAAA,EAAO,IAAA,EAAY,cAClB,QAAA,kBAAAI,IAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,uCAAA,EACvB,QAAA,EAAA;AAAA,oBAAAA,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,yBAAA,EACpB,QAAA,EAAA;AAAA,QAAA,QAAA,CAAS,IAAA;AAAA,wBACVJ,IAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,aAAY,SAAA,EAAU,qBAAA,EAClC,mBAAS,SAAA,EACZ;AAAA,OAAA,EACF,CAAA;AAAA,sBACAI,IAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,yBAAA,EAC3B,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAACqD,UAAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,QAC7B,IAAA,CAAK,KAAA;AAAA,QAAM,UAAA;AAAA,QAAI,IAAA,CAAK;AAAA,OAAA,EACvB;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAjD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,wBACtCJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,mBAAS,KAAA,EAAM;AAAA,OAAA,EAC3D,CAAA;AAAA,MAGC,KAAK,IAAA,KAAS,OAAA,oBACbI,IAAAA,CAAAoC,UAAA,EACE,QAAA,EAAA;AAAA,wBAAAxC,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACXI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAACsD,OAAAA,EAAA,EAAQ,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,4BACnDtD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAsB,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,4BACzDA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,sBAAsB,gBAAgB,CAAA;AAAA,gBAC/C,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,qBAAA,CAAsB,gBAAgB,CAAC,CAAA;AAAA,gBAEvE,yBAAe,gBAAgB;AAAA;AAAA;AAClC,WAAA,EACF,CAAA;AAAA,0BAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,UAAK,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,8BACdI,KAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,MAAM,kBAAkB,CAAA;AAAA,gBAAE;AAAA,eAAA,EAAC;AAAA,aAAA,EACzC,CAAA;AAAA,4BACAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDACb,QAAA,kBAAAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,oCAAA;AAAA,kBACA,gBAAA,KAAqB,UAAA,GAAa,YAAA,GAClC,gBAAA,KAAqB,YAAY,cAAA,GACjC;AAAA,iBACF;AAAA,gBACA,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA,CAAA;AAAI;AAAA,aAC3C,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA;AAAA,YACd;AAAA,WACF,EACE,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EAAoE,QAAA,EAAA,iBAAA,EAEnF,CAAA;AAAA,YAEC,UAAA;AAAA;AAAA,8BAECI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,kCAAAA,KAACM,MAAAA,EAAA,EAAM,OAAA,EAAQ,UAAA,EAAW,WAAU,SAAA,EAAU,QAAA,EAAA;AAAA,oBAAA,YAAA;AAAA,oBACjC,oBAAA,CAAqB,WAAW,IAAI,CAAA;AAAA,oBAAE;AAAA,mBAAA,EACnD,CAAA;AAAA,kCACAN,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,oCAAAJ,GAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,EAAA,EAAG,UAAA;AAAA,wBACH,IAAA,EAAK,QAAA;AAAA,wBACL,GAAA,EAAI,GAAA;AAAA,wBACJ,KAAK,UAAA,CAAW,MAAA;AAAA,wBAChB,KAAA,EAAO,aAAA;AAAA,wBACP,QAAA,EAAU,oBAAA;AAAA,wBACV,SAAA,EAAU;AAAA;AAAA,qBACZ;AAAA,oCACAI,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EAAkD,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,sBAC7D,UAAA,CAAW,MAAA;AAAA,sBAAO,GAAA;AAAA,sBAAE,oBAAA,CAAqB,WAAW,IAAI;AAAA,qBAAA,EAC7D;AAAA,mBAAA,EACF;AAAA,iBAAA,EACF,CAAA;AAAA,gCACAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,kCAAAJ,IAACU,MAAAA,EAAA,EAAM,SAAQ,UAAA,EAAW,SAAA,EAAU,WAAU,QAAA,EAAA,cAAA,EAE9C,CAAA;AAAA,kCACAV,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,EAAA,EAAG,UAAA;AAAA,sBACH,IAAA,EAAK,QAAA;AAAA,sBACL,GAAA,EAAI,GAAA;AAAA,sBACJ,GAAA,EAAI,KAAA;AAAA,sBACJ,KAAA,EAAO,aAAA;AAAA,sBACP,QAAA,EAAU,oBAAA;AAAA,sBACV,SAAA,EAAU;AAAA;AAAA;AACZ,iBAAA,EACF;AAAA,eAAA,EACF;AAAA;AAAA;AAAA,8BAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,gCAAAJ,IAACU,MAAAA,EAAA,EAAM,SAAQ,UAAA,EAAW,SAAA,EAAU,WAAU,QAAA,EAAA,cAAA,EAE9C,CAAA;AAAA,gCACAV,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAG,UAAA;AAAA,oBACH,IAAA,EAAK,QAAA;AAAA,oBACL,GAAA,EAAI,GAAA;AAAA,oBACJ,GAAA,EAAI,KAAA;AAAA,oBACJ,KAAA,EAAO,aAAA;AAAA,oBACP,QAAA,EAAU,oBAAA;AAAA,oBACV,SAAA,EAAU;AAAA;AAAA;AACZ,eAAA,EACF;AAAA,aAAA;AAAA,YAID,oCACCA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,IAAA;AAAA,gBACL,SAAA,EAAU,QAAA;AAAA,gBACV,UAAU,CAAC,UAAA;AAAA,gBACX,OAAA,EAAS,UAAA;AAAA,gBAER,uBAAa,eAAA,GAAkB;AAAA;AAAA;AAClC,WAAA,EAEJ,CAAA;AAAA,UAGC,UAAA,oBACCI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,8BACnDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,QAAA,EAAM;AAAA,aAAA,EAClC,CAAA;AAAA,4BACAI,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,cAAA,UAAA,CAAW,MAAA;AAAA,cAAO,GAAA;AAAA,cAAE,oBAAA,CAAqB,WAAW,IAAI;AAAA,aAAA,EAC3D;AAAA,WAAA,EACF;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF,CAAA;AAAA,MAID,IAAA,CAAK,cAAc,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,oBAC3CA,IAAAA,CAAAoC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAxC,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACXI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAACoD,KAAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,4BACjDpD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAsB,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,4BAChDI,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EACb,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,UAAA,CAAW,MAAA;AAAA,cAAO;AAAA,aAAA,EAC1B;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACZ,QAAA,EAAA,IAAA,CAAK,WAAW,GAAA,CAAI,CAAC,UAAU,KAAA,qBAC9BA,IAAC,YAAA,EAAA,EAA+B,QAAA,EAAoB,SAAjC,QAAA,CAAS,EAAsC,CACnE,CAAA,EACH;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAID,KAAK,IAAA,KAAS,cAAA,oBACbI,IAAAA,CAAAoC,UAAA,EACE,QAAA,EAAA;AAAA,wBAAAxC,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACXI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACoD,KAAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,0BAC3BpD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,sCAAA,EAAoC;AAAA,SAAA,EAChE;AAAA,OAAA,EACF,CAAA;AAAA,MAID,KAAK,UAAA,IAAc,IAAA,CAAK,kCACvBI,IAAAA,CAAAoC,UAAA,EACE,QAAA,EAAA;AAAA,wBAAAxC,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACXI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2GAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,0BACnDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EAAW,eAAK,cAAA,EAAe;AAAA,SAAA,EAChD;AAAA,OAAA,EACF,CAAA;AAAA,MAID,IAAA,CAAK,KAAA,oBACJI,IAAAA,CAAAoC,UAAA,EACE,QAAA,EAAA;AAAA,wBAAAxC,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBACXI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,0BACrDA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAW,eAAK,KAAA,EAAM;AAAA,SAAA,EACrC;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;ACrTO,IAAM,qBAAA,GAAuC;AAAA,EAClD,CAAA,EAAG,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,EAAE;AAAA;AAAA,EACpB,CAAA,EAAG,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,EAAA,EAAG;AAAA;AAAA,EACrB,CAAA,EAAG,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,EAAA,EAAG;AAAA;AAAA,EACrB,CAAA,EAAG,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,EAAA,EAAG;AAAA;AAAA,EACrB,CAAA,EAAG,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,EAAA,EAAG;AAAA;AAAA,EACrB,CAAA,EAAG,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,EAAA,EAAG;AAAA;AAAA,EACrB,CAAA,EAAG,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA;AAAE;AACtB;AAGO,IAAM,qBAAA,GAAuC,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,EAAA;AA2B5D,IAAM,YAAA,GAAkF;AAAA,EAC7F,IAAA,EAAM;AAAA,IACJ,EAAA,EAAI,gBAAA;AAAA,IACJ,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,EAAA,EAAI,iBAAA;AAAA,IACJ,IAAA,EAAM,oCAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,GAAA,EAAK;AAAA,IACH,EAAA,EAAI,eAAA;AAAA,IACJ,IAAA,EAAM,gCAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,EAAA,EAAI,kBAAA;AAAA,IACJ,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,EAAA,EAAI,kBAAA;AAAA,IACJ,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,EAAA,EAAI,eAAA;AAAA,IACJ,IAAA,EAAM,mCAAA;AAAA,IACN,MAAA,EAAQ;AAAA;AAEZ;AAGO,IAAM,WAAA,GAA6C;AAAA,EACxD,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ;AACV;AAGO,IAAM,oBAAA,GAAsD;AAAA,EACjE,GAAA,EAAK,KAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO;AACT;AClKA,IAAM,eAAA,GAAwB,sBAA+C,IAAI;AAiB1E,SAAS,qBAAA,CAAsB;AAAA,EACpC,QAAA;AAAA,EACA,MAAA,EAAQ,gBAAgB,EAAC;AAAA,EACzB,KAAA,EAAO,eAAe,EAAC;AAAA,EACvB,WAAA,uBAAkB,IAAA,EAAK;AAAA,EACvB,WAAA,GAAc,OAAA;AAAA,EACd,mBAAA,GAAsB,SAAA;AAAA,EACtB,aAAA,GAAgB,IAAA;AAAA,EAChB,mBAAA,GAAsB,qBAAA;AAAA,EACtB,mBAAA,GAAsB,qBAAA;AAAA,EACtB,UAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,iBAAe,WAAW,CAAA;AACxE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAU,iBAAwB,aAAa,CAAA;AACvF,EAAA,MAAM,CAAC,MAAA,EAAQ,cAAc,CAAA,GAAU,iBAAmB,aAAa,CAAA;AACvE,EAAA,MAAM,CAAC,KAAK,CAAA,GAAU,OAAA,CAAA,QAAA,CAAkB,YAAY,CAAA;AACpD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,iBAAwB,mBAAmB,CAAA;AACzF,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,iBAAwB,WAAW,CAAA;AACjE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,iBAAwB,mBAAmB,CAAA;AACzF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,iBAAwB,mBAAmB,CAAA;AAGzF,EAAM,kBAAU,MAAM;AACpB,IAAA,cAAA,CAAe,aAAa,CAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,SAAA,GAAkB,OAAA,CAAA,WAAA,CAAY,CAAC,SAAA,KAAwB;AAC3D,IAAA,cAAA,CAAe,SAAS,CAAA;AAAA,EAC1B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,QAAA,GAAiB,OAAA,CAAA,WAAA,CAAY,CAAC,KAAA,KAAkB;AACpD,IAAA,cAAA,CAAe,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,KAAK,CAAC,CAAA;AACzC,IAAA,UAAA,GAAa,KAAK,CAAA;AAAA,EACpB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,WAAA,GAAoB,OAAA,CAAA,WAAA,CAAY,CAAC,KAAA,KAAkB;AACvD,IAAA,cAAA;AAAA,MAAe,CAAC,IAAA,KACd,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAA,GAAK,KAAA,GAAQ,CAAE;AAAA,KACjD;AACA,IAAA,aAAA,GAAgB,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,WAAA,GAAoB,OAAA,CAAA,WAAA,CAAY,CAAC,OAAA,KAAoB;AACzD,IAAA,cAAA,CAAe,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,OAAO,CAAC,CAAA;AAC7D,IAAA,aAAA,GAAgB,OAAO,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,SAAA,GAAkB,oBAAY,MAAM;AACxC,IAAA,eAAA,iBAAgB,IAAI,MAAM,CAAA;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAqB,oBAAY,MAAM;AAC3C,IAAA,eAAA,CAAgB,CAAC,OAAA,KAAY;AAC3B,MAAA,QAAQ,IAAA;AAAM,QACZ,KAAK,KAAA;AACH,UAAA,OAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,QAC3B,KAAK,MAAA;AACH,UAAA,OAAO,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,QAC5B,KAAK,OAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,QAC7B,KAAK,MAAA;AACH,UAAA,OAAO,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,QAC5B,KAAK,QAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,QAC7B;AACE,UAAA,OAAO,OAAA;AAAA;AACX,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,QAAA,GAAiB,oBAAY,MAAM;AACvC,IAAA,eAAA,CAAgB,CAAC,OAAA,KAAY;AAC3B,MAAA,QAAQ,IAAA;AAAM,QACZ,KAAK,KAAA;AACH,UAAA,OAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,QAC3B,KAAK,MAAA;AACH,UAAA,OAAO,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,QAC5B,KAAK,OAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,QAC7B,KAAK,MAAA;AACH,UAAA,OAAO,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,QAC5B,KAAK,QAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,QAC7B;AACE,UAAA,OAAO,OAAA;AAAA;AACX,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,YAAA,GAAqB,OAAA,CAAA,OAAA;AAAA,IACzB,OAAO;AAAA;AAAA,MAEL,YAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA;AAAA,MAEA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,OAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,YAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,uBACEA,GAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,cAC9B,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,OAAA,GAAgB,mBAAW,eAAe,CAAA;AAChD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,EACjF;AACA,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,EAAE,MAAA,EAAQ,cAAA,EAAe,GAAI,gBAAA,EAAiB;AAEpD,EAAA,OAAa,gBAAQ,MAAM;AACzB,IAAA,IAAI,CAAC,gBAAgB,OAAO,MAAA;AAC5B,IAAA,OAAO,OAAO,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,IAAA,CAAK,OAAO,cAAc,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,MAAA,EAAQ,cAAc,CAAC,CAAA;AAC7B;AAGO,SAAS,gBAAA,CAAiB,WAAiB,OAAA,EAAe;AAC/D,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAEzC,EAAA,OAAa,gBAAQ,MAAM;AACzB,IAAA,OAAO,cAAA,CAAe,MAAA,CAAO,CAAC,KAAA,KAAU;AACtC,MAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC3C,MAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACvC,MAAA,OAAO,UAAA,IAAc,WAAW,QAAA,IAAY,SAAA;AAAA,IAC9C,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,cAAA,EAAgB,SAAA,EAAW,OAAO,CAAC,CAAA;AACzC;AC9LO,SAAS,SAAA,CAAU,MAAqB,IAAA,EAAY;AACzD,EAAA,MAAM,YAAA,GAAe,aAAA;AACrB,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,GAAA;AAEJ,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AACH,MAAA,KAAA,GAAQ,aAAa,IAAI,CAAA;AACzB,MAAA,GAAA,GAAM,WAAW,IAAI,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAA,KAAA,GAAQ,YAAY,IAAI,CAAA;AACxB,MAAA,GAAA,GAAM,UAAU,IAAI,CAAA;AACpB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,KAAA,GAAQ,aAAa,IAAI,CAAA;AACzB,MAAA,GAAA,GAAM,WAAW,IAAI,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAA,KAAA,GAAQ,YAAY,IAAI,CAAA;AACxB,MAAA,GAAA,GAAM,UAAU,IAAI,CAAA;AACpB,MAAA;AAAA,IACF,KAAK,KAAA;AACH,MAAA,OAAO,MAAA,CAAO,MAAM,YAAY,CAAA;AAAA,IAClC;AACE,MAAA,OAAO,wBAAA;AAAA;AAGX,EAAA,OAAO,CAAA,EAAG,OAAO,KAAA,EAAO,YAAY,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,GAAA,EAAK,YAAY,CAAC,CAAA,CAAA;AACtE;AAKO,SAAS,YAAA,CACd,IAAA,EACA,IAAA,EACA,SAAA,EACM;AACN,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,MAAA,EAAQ,SAAA,KAAc,MAAA,GAASuD,SAAAA,GAAYC,SAAAA;AAAA,IAC3C,IAAA,EAAM,SAAA,KAAc,MAAA,GAASC,QAAAA,GAAWC,QAAAA;AAAA,IACxC,KAAA,EAAO,SAAA,KAAc,MAAA,GAASH,SAAAA,GAAYC,SAAAA;AAAA,IAC1C,IAAA,EAAM,SAAA,KAAc,MAAA,GAASG,QAAAA,GAAWC,QAAAA;AAAA,IACxC,GAAA,EAAK,SAAA,KAAc,MAAA,GAASC,OAAAA,GAAUC;AAAA,GACxC;AAEA,EAAA,OAAO,UAAA,CAAW,IAAI,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AACjC;AAKO,SAAS,cAAA,CACd,MAAA,EACA,IAAA,EACA,IAAA,EACQ;AACR,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,MAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAM,UAAA;AAAA,IACN,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IAAO,CAAC,KAAA,KACpB,UAAA,CAAW,IAAI,CAAA,CAAE,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,EAAG,IAAI;AAAA,GAClD,CAAE,MAAA;AACJ;AASO,SAAS,iBAAiB,MAAA,EAAkB;AACjD,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,OACE,MAAA,CAAO,MAAA;AAAA,IAAO,CAAC,KAAA,KACb,gBAAA,CAAiB,GAAA,EAAK;AAAA,MACpB,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAAA,MAC/B,GAAA,EAAK,QAAA,CAAS,KAAA,CAAM,OAAO;AAAA,KAC5B;AAAA,OACE,EAAC;AAEV;AAKO,SAAS,YAAY,SAAA,EAAqB;AAC/C,EAAA,MAAM,eAAe,SAAA,CAAU,IAAA;AAAA,IAC7B,CAAC,CAAA,EAAG,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,QAAA,CAAS,CAAA,CAAE,SAAS,EAAE,OAAA;AAAQ,GAC5E;AACA,EAAA,MAAM,SAAqB,EAAC;AAE5B,EAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAE3C,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAC/C,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,gBAAA,CAAiB,OAAO,CAAA;AAEtD,MAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,QAAA,MAAA,GAAS,IAAA;AACT,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,KAAK,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,OAAO,MAAA;AACT;AAMO,SAAS,mBACd,KAAA,EACA,GAAA,EACA,YACA,SAAA,EACA,iBAAA,EACA,aAAqB,EAAA,EACrB;AACA,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,GAAG,CAAA;AAC7B,EAAA,QAAA,CAAS,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAE5B,EAAA,MAAM,UAAA,GAAa,SAAA,GAAY,QAAA,GAAW,QAAA,GAAW,SAAA;AACrD,EAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,UAAA,EAAY,QAAQ,CAAA;AAC7D,EAAA,MAAM,eAAA,GAAkB,mBAAA,CAAoB,OAAA,EAAS,UAAU,CAAA;AAG/D,EAAA,MAAM,mBAAA,GAAA,CAAuB,iBAAA,EAAmB,IAAA,IAAQ,CAAA,IAAK,EAAA;AAC7D,EAAA,MAAM,aAAa,YAAA,GAAe,mBAAA;AAClC,EAAA,MAAM,KAAA,GAAS,aAAa,EAAA,GAAM,UAAA;AAGlC,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAK,kBAAkB,EAAA,GAAM,UAAA,EAAY,aAAa,CAAC,CAAA;AAE7E,EAAA,MAAM,QAAQ,GAAA,GAAM,SAAA;AACpB,EAAA,MAAM,OAAO,UAAA,GAAa,KAAA;AAE1B,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,GAAG,KAAK,CAAA,EAAA,CAAA;AAAA,IACb,MAAA,EAAQ,GAAG,QAAQ,CAAA,EAAA,CAAA;AAAA,IACnB,KAAA,EAAO,GAAG,KAAK,CAAA,CAAA,CAAA;AAAA,IACf,IAAA,EAAM,GAAG,IAAI,CAAA,CAAA;AAAA,GACf;AACF;AAKO,SAAS,aAAA,CACd,GAAA,EACA,IAAA,EACA,YAAA,EACA;AACA,EAAA,MAAM,QAAA,GAAW,IAAI,MAAA,EAAO;AAC5B,EAAA,MAAM,QAAA,GAAW,aAAa,QAAQ,CAAA;AACtC,EAAA,OAAO,IAAA,IAAQ,QAAA,CAAS,IAAA,IAAQ,IAAA,GAAO,QAAA,CAAS,EAAA;AAClD;AAKO,SAAS,eAAA,CACd,cACA,eAAA,EACA;AACA,EAAA,IAAI,oBAAoB,YAAA,CAAa,IAAA;AACrC,EAAA,IAAI,kBAAkB,YAAA,CAAa,EAAA;AAEnC,EAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,KAAA,KAAU;AACjC,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,SAAS,EAAE,QAAA,EAAS;AACrD,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACtC,IAAA,MAAM,OAAA,GAAU,QAAQ,QAAA,EAAS,IAAK,QAAQ,UAAA,EAAW,GAAI,IAAI,CAAA,GAAI,CAAA,CAAA;AACrE,IAAA,IAAI,SAAA,GAAY,mBAAmB,iBAAA,GAAoB,SAAA;AACvD,IAAA,IAAI,OAAA,GAAU,iBAAiB,eAAA,GAAkB,OAAA;AAAA,EACnD,CAAC,CAAA;AAED,EAAA,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,EAAE,CAAA;AAE9C,EAAA,MAAM,QAAQ,KAAA,CAAM,IAAA;AAAA,IAClB,EAAE,MAAA,EAAQ,eAAA,GAAkB,iBAAA,EAAkB;AAAA,IAC9C,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI;AAAA,GAChB;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,iBAAA,EAAmB,eAAA,EAAgB;AACrD;AASO,SAAS,iBAAiB,YAAA,EAAqC;AACpE,EAAA,MAAM,WAAA,GAAc,aAAa,WAAA,EAAY;AAC7C,EAAA,MAAM,YAAA,GAAe,aAAa,QAAA,EAAS;AAE3C,EAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,EAAc,KAAA,KACpC,IAAI,IAAA,CAAK,IAAA,EAAM,KAAA,GAAQ,CAAA,EAAG,CAAC,CAAA,CAAE,OAAA,EAAQ;AACvC,EAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,EAAc,KAAA,KACxC,IAAI,KAAK,IAAA,EAAM,KAAA,EAAO,CAAC,CAAA,CAAE,MAAA,EAAO;AAElC,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,WAAA,EAAa,YAAY,CAAA;AAC5D,EAAA,MAAM,eAAA,GAAkB,kBAAA,CAAmB,WAAA,EAAa,YAAY,CAAA;AACpE,EAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,WAAA,EAAa,YAAA,GAAe,CAAC,CAAA;AACpE,EAAA,MAAM,YAAY,eAAA,GAAkB,WAAA;AAEpC,EAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,EAAE,QAAQ,eAAA,EAAgB,EAAG,CAAC,CAAA,EAAG,CAAA,MAAO;AAAA,IACxE,GAAA,EAAK,eAAA,GAAkB,eAAA,GAAkB,CAAA,GAAI,CAAA;AAAA,IAC7C,YAAA,EAAc,KAAA;AAAA,IACd,MAAM,IAAI,IAAA;AAAA,MACR,WAAA;AAAA,MACA,YAAA,GAAe,CAAA;AAAA,MACf,eAAA,GAAkB,kBAAkB,CAAA,GAAI;AAAA;AAC1C,GACF,CAAE,CAAA;AAEF,EAAA,MAAM,iBAAA,GAAoB,MAAM,IAAA,CAAK,EAAE,QAAQ,WAAA,EAAY,EAAG,CAAC,CAAA,EAAG,CAAA,MAAO;AAAA,IACvE,KAAK,CAAA,GAAI,CAAA;AAAA,IACT,YAAA,EAAc,IAAA;AAAA,IACd,MAAM,IAAI,IAAA,CAAK,WAAA,EAAa,YAAA,EAAc,IAAI,CAAC;AAAA,GACjD,CAAE,CAAA;AAEF,EAAA,MAAM,iBAAiB,KAAA,CAAM,IAAA;AAAA,IAC3B,EAAE,MAAA,EAAA,CAAS,CAAA,GAAK,SAAA,GAAY,KAAM,CAAA,EAAE;AAAA,IACpC,CAAC,GAAG,CAAA,MAAO;AAAA,MACT,KAAK,CAAA,GAAI,CAAA;AAAA,MACT,YAAA,EAAc,KAAA;AAAA,MACd,MAAM,IAAI,IAAA,CAAK,aAAa,YAAA,GAAe,CAAA,EAAG,IAAI,CAAC;AAAA,KACrD;AAAA,GACF;AAEA,EAAA,OAAO,CAAC,GAAG,cAAA,EAAgB,GAAG,iBAAA,EAAmB,GAAG,cAAc,CAAA;AACpE;AAKO,SAAS,4BAAA,CACd,cAAA,EACA,eAAA,EACA,YAAA,EACA;AACA,EAAA,MAAM,UAAA,GAAa,aAAa,YAAY,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAW,WAAW,YAAY,CAAA;AAExC,EAAA,MAAM,iBAA4C,EAAC;AACnD,EAAA,MAAM,oBAAkD,EAAC;AAEzD,EAAA,iBAAA,CAAkB,EAAE,OAAO,UAAA,EAAY,GAAA,EAAK,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACvE,IAAA,iBAAA,CAAkB,IAAI,WAAA,EAAa,IAAI,CAAC,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,EAC7D,CAAC,CAAA;AAED,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAG,cAAA,CAAe,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC/B,MAAA,MAAM,SAAA,GAAY,gBAAA;AAAA,QAChB,QAAA,CAAS,EAAE,OAAO,CAAA;AAAA,QAClB,QAAA,CAAS,EAAE,SAAS;AAAA,OACtB;AACA,MAAA,MAAM,SAAA,GAAY,gBAAA;AAAA,QAChB,QAAA,CAAS,EAAE,OAAO,CAAA;AAAA,QAClB,QAAA,CAAS,EAAE,SAAS;AAAA,OACtB;AACA,MAAA,OACE,SAAA,GAAY,SAAA,IACZ,QAAA,CAAS,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,QAAA,CAAS,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAQ;AAAA,IAEpE,CAAC,CAAA;AAAA,IACD,GAAG,eAAA,CAAgB,IAAA;AAAA,MACjB,CAAC,CAAA,EAAG,CAAA,KACF,QAAA,CAAS,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,QAAA,CAAS,CAAA,CAAE,SAAS,EAAE,OAAA;AAAQ;AACpE,GACF;AAEA,EAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC9B,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACvC,IAAA,MAAM,YAAY,iBAAA,CAAkB;AAAA,MAClC,KAAA,EAAO,UAAA,GAAa,UAAA,GAAa,UAAA,GAAa,UAAA;AAAA,MAC9C,GAAA,EAAK,QAAA,GAAW,QAAA,GAAW,QAAA,GAAW;AAAA,KACvC,CAAA;AAED,IAAA,IAAI,QAAA,GAAW,EAAA;AAEf,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,IACE,SAAA,CAAU,KAAA,CAAM,CAAC,GAAA,KAAQ;AACvB,QAAA,MAAM,eAAe,iBAAA,CAAkB,UAAA,CAAW,GAAG,CAAA,CAAE,aAAa,CAAA;AACpE,QAAA,OAAO,YAAA,IAAgB,CAAC,YAAA,CAAa,CAAC,CAAA;AAAA,MACxC,CAAC,CAAA,EACD;AACA,QAAA,QAAA,GAAW,CAAA;AACX,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,EAAA,EAAI;AACnB,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACzB,QAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAG,CAAA,CAAE,WAAA,EAAY;AAC3C,QAAA,iBAAA,CAAkB,MAAM,CAAA,CAAE,QAAQ,CAAA,GAAI,IAAA;AAAA,MACxC,CAAC,CAAA;AACD,MAAA,cAAA,CAAe,KAAA,CAAM,EAAE,CAAA,GAAI,QAAA;AAAA,IAC7B;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,cAAA;AACT;AAKO,SAAS,kBAAA,CACd,IAAA,EACA,MAAA,EACA,cAAA,EACA;AACA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAC7C,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACvC,IAAA,OACG,IAAA,IAAQ,UAAA,IAAc,IAAA,IAAQ,QAAA,IAC/B,SAAA,CAAU,MAAM,UAAU,CAAA,IAC1B,SAAA,CAAU,IAAA,EAAM,QAAQ,CAAA;AAAA,EAE5B,CAAC,CAAA;AAED,EAAA,OAAO,aAAA,CACJ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACf,GAAG,KAAA;AAAA,IACH,QAAA,EAAU,cAAA,CAAe,KAAA,CAAM,EAAE,CAAA,IAAK,EAAA;AAAA,IACtC,UAAA,EAAY,KAAA,CAAM,SAAA,KAAc,KAAA,CAAM;AAAA,GACxC,CAAE,CAAA,CACD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACd,IAAA,IAAI,CAAA,CAAE,UAAA,IAAc,CAAC,CAAA,CAAE,YAAY,OAAO,EAAA;AAC1C,IAAA,IAAI,CAAC,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,YAAY,OAAO,CAAA;AAC1C,IAAA,OAAO,CAAA,CAAE,WAAW,CAAA,CAAE,QAAA;AAAA,EACxB,CAAC,CAAA;AACL;AASO,SAAS,YAAA,CACd,IAAA,EACA,YAAA,GAA0C,CAAA,EAClC;AACR,EAAA,MAAM,QAAQ,WAAA,CAAY,YAAA,CAAa,IAAI,CAAA,EAAG,EAAE,cAAc,CAAA;AAC9D,EAAA,MAAM,MAAM,SAAA,CAAU,UAAA,CAAW,IAAI,CAAA,EAAG,EAAE,cAAc,CAAA;AACxD,EAAA,OAAO,iBAAA,CAAkB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AACzC;AAKO,SAAS,WAAA,CACd,IAAA,EACA,YAAA,GAA0C,CAAA,EAClC;AACR,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAA,EAAM,EAAE,cAAc,CAAA;AAChD,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,EAAM,EAAE,cAAc,CAAA;AAC5C,EAAA,OAAO,iBAAA,CAAkB,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AACzC;AAKO,SAAS,WAAA,CAAY,IAAA,EAAY,KAAA,GAAQ,CAAA,EAAG,MAAM,EAAA,EAAY;AACnE,EAAA,MAAM,WAAW,UAAA,CAAW,QAAA,CAAS,IAAA,EAAM,KAAK,GAAG,CAAC,CAAA;AACpD,EAAA,MAAM,SAAS,UAAA,CAAW,QAAA,CAAS,MAAM,GAAA,GAAM,CAAC,GAAG,EAAE,CAAA;AACrD,EAAA,OAAO,mBAAmB,EAAE,KAAA,EAAO,QAAA,EAAU,GAAA,EAAK,QAAQ,CAAA;AAC5D;AAKO,SAAS,cAAc,IAAA,EAAoB;AAChD,EAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,EAAA,MAAM,SAAiB,EAAC;AACxB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,IAAA,CAAK,KAAA,CAAM,aAAY,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,MAAA;AACT;AASO,SAAS,gBAAA,CAAiB,QAAkB,IAAA,EAAsB;AACvE,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAC9B,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACvC,IAAA,OACE,iBAAiB,IAAA,EAAM;AAAA,MACrB,KAAA,EAAO,WAAW,UAAU,CAAA;AAAA,MAC5B,GAAA,EAAK,SAAS,QAAQ;AAAA,KACvB,KACD,SAAA,CAAU,UAAA,EAAY,IAAI,CAAA,IAC1B,SAAA,CAAU,UAAU,IAAI,CAAA;AAAA,EAE5B,CAAC,CAAA;AACH;AAKO,SAAS,gBAAA,CACd,MAAA,EACA,KAAA,EACA,GAAA,EACU;AACV,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAC9B,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACvC,IAAA,OACG,UAAA,IAAc,KAAA,IAAS,UAAA,IAAc,GAAA,IACrC,QAAA,IAAY,SAAS,QAAA,IAAY,GAAA,IACjC,UAAA,IAAc,KAAA,IAAS,QAAA,IAAY,GAAA;AAAA,EAExC,CAAC,CAAA;AACH;AAKO,SAAS,sBAAsB,MAAA,EAGpC;AACA,EAAA,MAAM,kBAA4B,EAAC;AACnC,EAAA,MAAM,iBAA2B,EAAC;AAElC,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACxB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACtC,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAClC,IAAA,IAAI,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA,EAAG;AACzB,MAAA,eAAA,CAAgB,KAAK,KAAK,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,cAAA,CAAe,KAAK,KAAK,CAAA;AAAA,IAC3B;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,iBAAiB,cAAA,EAAe;AAC3C;AAKO,SAAS,gBAAgB,KAAA,EAAwB;AACtD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAClC,EAAA,OAAO,CAAC,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA;AAC9B;AAKO,SAAS,iBAAiB,KAAA,EAAuB;AACtD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAClC,EAAA,OAAO,gBAAA,CAAiB,GAAA,EAAK,KAAK,CAAA,GAAI,CAAA;AACxC;AAKO,SAAS,wBAAwB,KAAA,EAAuB;AAC7D,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAClC,EAAA,OAAO,mBAAA,CAAoB,KAAK,KAAK,CAAA;AACvC;AAKO,SAAS,WAAW,MAAA,EAA4B;AACrD,EAAA,OAAO,CAAC,GAAG,MAAM,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAChC,IAAA,MAAM,SAAA,GACJ,QAAA,CAAS,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,QAAA,CAAS,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAQ;AAClE,IAAA,IAAI,SAAA,KAAc,GAAG,OAAO,SAAA;AAE5B,IAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA;AAAA,EACjD,CAAC,CAAA;AACH;AASO,SAAS,eAAA,CACd,OACA,iBAAA,EACQ;AACR,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,WAAW,KAAK,CAAA;AAEhC,EAAA,MAAM,SAAA,GAAY,mBAAmB,IAAA,IAAQ,CAAA;AAC7C,EAAA,MAAM,YAAA,GAAA,CAAgB,KAAA,GAAQ,SAAA,IAAa,EAAA,GAAK,OAAA;AAChD,EAAA,MAAM,eAAA,GAAA,CAAA,CAAoB,iBAAA,EAAmB,EAAA,IAAM,EAAA,IAAM,SAAA,IAAa,EAAA;AAEtE,EAAA,OAAQ,eAAe,eAAA,GAAmB,GAAA;AAC5C;AAKO,SAAS,aAAA,CACd,OACA,iBAAA,EACQ;AACR,EAAA,MAAM,QAAA,GAAW,wBAAwB,KAAK,CAAA;AAC9C,EAAA,MAAM,oBACF,iBAAA,EAAmB,EAAA,IAAM,EAAA,KAAO,iBAAA,EAAmB,QAAQ,CAAA,CAAA,IAAM,EAAA;AACrE,EAAA,OAAO,IAAA,CAAK,GAAA,CAAK,QAAA,GAAW,eAAA,GAAmB,KAAK,GAAG,CAAA;AACzD;AAKO,SAAS,UAAA,CAAW,IAAA,EAAY,MAAA,GAAS,KAAA,EAAe;AAC7D,EAAA,OAAO,MAAA,CAAO,IAAA,EAAM,MAAA,GAAS,OAAA,GAAU,QAAQ,CAAA;AACjD;AASO,SAAS,eAAA,CACd,YAAA,GAA0C,CAAA,EAC1C,UAAA,GAAa,IAAA,EACH;AACV,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA,EAAG,GAAG,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,YAAY,CAAC,CAAA;AAC5E,EAAA,OAAO,UAAA,GAAa,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,GAAI,OAAA;AAC1D;AAKO,SAAS,cAAA,CAAe,MAAY,IAAA,EAAsB;AAC/D,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,KAAA;AACH,MAAA,OAAO,MAAA,CAAO,MAAM,oBAAoB,CAAA;AAAA,IAC1C,KAAK,MAAA;AACH,MAAA,MAAM,SAAA,GAAY,YAAY,IAAI,CAAA;AAClC,MAAA,MAAM,OAAA,GAAU,UAAU,IAAI,CAAA;AAC9B,MAAA,IAAI,SAAA,CAAU,QAAA,EAAS,KAAM,OAAA,CAAQ,UAAS,EAAG;AAC/C,QAAA,OAAO,OAAO,SAAA,EAAW,QAAQ,IAAI,KAAA,GAAQ,MAAA,CAAO,SAAS,SAAS,CAAA;AAAA,MACxE;AACA,MAAA,OAAO,OAAO,SAAA,EAAW,OAAO,IAAI,KAAA,GAAQ,MAAA,CAAO,SAAS,aAAa,CAAA;AAAA,IAC3E,KAAK,OAAA;AACH,MAAA,OAAO,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IACjC,KAAK,MAAA;AACH,MAAA,OAAO,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,IAC5B,KAAK,QAAA;AACH,MAAA,OAAO,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IACjC;AACE,MAAA,OAAO,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA;AAErC;AAKO,SAAS,gBAAA,CACd,MACA,IAAA,EAC4B;AAC5B,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,OAAO,UAAA,CAAW,IAAI,GAAG,GAAA,EAAK,QAAA,CAAS,IAAI,CAAA,EAAE;AAAA,IACxD,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,OAAO,WAAA,CAAY,IAAI,GAAG,GAAA,EAAK,SAAA,CAAU,IAAI,CAAA,EAAE;AAAA,IAC1D,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,OAAO,YAAA,CAAa,IAAI,GAAG,GAAA,EAAK,UAAA,CAAW,IAAI,CAAA,EAAE;AAAA,IAC5D,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,OAAO,WAAA,CAAY,IAAI,GAAG,GAAA,EAAK,SAAA,CAAU,IAAI,CAAA,EAAE;AAAA,IAC1D,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,OAAO,YAAA,CAAa,IAAI,GAAG,GAAA,EAAK,UAAA,CAAW,IAAI,CAAA,EAAE;AAAA,IAC5D;AACE,MAAA,OAAO,EAAE,OAAO,YAAA,CAAa,IAAI,GAAG,GAAA,EAAK,UAAA,CAAW,IAAI,CAAA,EAAE;AAAA;AAEhE;AAKO,SAASC,gBAAAA,CAAgB,OAAa,GAAA,EAAmB;AAC9D,EAAA,IAAI,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA,CAAO,OAAO,aAAa,CAAA;AAAA,EACpC;AACA,EAAA,IAAI,KAAA,CAAM,WAAA,EAAY,KAAM,GAAA,CAAI,aAAY,EAAG;AAC7C,IAAA,IAAI,KAAA,CAAM,QAAA,EAAS,KAAM,GAAA,CAAI,UAAS,EAAG;AACvC,MAAA,OAAO,OAAO,KAAA,EAAO,OAAO,IAAI,KAAA,GAAQ,MAAA,CAAO,KAAK,SAAS,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,OAAO,KAAA,EAAO,OAAO,IAAI,KAAA,GAAQ,MAAA,CAAO,KAAK,aAAa,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,OAAO,KAAA,EAAO,aAAa,IAAI,KAAA,GAAQ,MAAA,CAAO,KAAK,aAAa,CAAA;AACzE;AAmBO,SAAS,kBAAA,CACd,SAAA,EACA,QAAA,GAAW,EAAA,EACS;AACpB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,EAAA;AAAA,IACb,SAAA,EAAW,UAAU,WAAA,EAAY;AAAA,IACjC,OAAA,EAAS,UAAA,CAAW,SAAA,EAAW,QAAQ,EAAE,WAAA,EAAY;AAAA,IACrD,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,EAAA;AAAA,MACJ,IAAA,EAAM;AAAA;AACR,GACF;AACF;AAKO,SAAS,eAAA,GAA0B;AACxC,EAAA,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAC1E;AASO,SAAS,kBAAA,CACd,OACA,YAAA,EACwC;AACxC,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,WAAA,EAAa,aAAa,CAAA;AAE/D,EAAA,MAAM,QAAA,GAAW,YAAA;AACjB,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,QAAA,EAAU,QAAQ,CAAA;AAE5C,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,SAAS,WAAA,EAAY;AAAA,IAChC,OAAA,EAAS,OAAO,WAAA;AAAY,GAC9B;AACF;AAKO,SAAS,cAAA,CAAe,IAAA,EAAY,eAAA,GAAkB,EAAA,EAAU;AACrE,EAAA,MAAM,OAAA,GAAU,WAAW,IAAI,CAAA;AAC/B,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,eAAe,CAAA,GAAI,eAAA;AAC/D,EAAA,OAAO,UAAA,CAAW,MAAM,cAAc,CAAA;AACxC;ACjvBA,IAAM,YAAA,GAMD;AAAA,EACH,IAAA,EAAM;AAAA,IACJ,GAAA,EAAK,aAAA;AAAA,IACL,EAAA,EAAI,gCAAA;AAAA,IACJ,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ,mBAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,cAAA;AAAA,IACL,EAAA,EAAI,kCAAA;AAAA,IACJ,IAAA,EAAM,oCAAA;AAAA,IACN,MAAA,EAAQ,oBAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAAA,EACA,GAAA,EAAK;AAAA,IACH,GAAA,EAAK,YAAA;AAAA,IACL,EAAA,EAAI,8BAAA;AAAA,IACJ,IAAA,EAAM,gCAAA;AAAA,IACN,MAAA,EAAQ,kBAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,eAAA;AAAA,IACL,EAAA,EAAI,oCAAA;AAAA,IACJ,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ,qBAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,eAAA;AAAA,IACL,EAAA,EAAI,oCAAA;AAAA,IACJ,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ,qBAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,YAAA;AAAA,IACL,EAAA,EAAI,oCAAA;AAAA,IACJ,IAAA,EAAM,mCAAA;AAAA,IACN,MAAA,EAAQ,kBAAA;AAAA,IACR,KAAA,EAAO;AAAA;AAEX,CAAA;AASO,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,KAAA;AAAA,EACV,UAAA,GAAa,KAAA;AAAA,EACb;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AACvC,EAAA,MAAM,YAAYC,MAAAA,CAAOC,QAAAA,CAAS,KAAA,CAAM,SAAS,GAAG,QAAQ,CAAA;AAE5D,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwB;AAC3C,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,OAAA,GAAU,OAAO,CAAC,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,IAAI,YAAY,KAAA,EAAO;AACrB,IAAA,uBACE7D,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,WAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACT,wFAAA;AAAA,UACA,2FAAA;AAAA,UACA,UAAA,IAAc,YAAA;AAAA,UACd;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,8BAAA,EAAgC,MAAA,CAAO,GAAG,CAAA,EAAG,CAAA;AAAA,0BACjEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA4B,gBAAM,KAAA,EAAM,CAAA;AAAA,UACvD,4BACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAkC,QAAA,EAAA,SAAA,EAAU;AAAA;AAAA;AAAA,KAEhE;AAAA,EAEJ;AAEA,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,uBACEI,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,WAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACT,mGAAA;AAAA,UACA,2FAAA;AAAA,UACA,MAAA,CAAO,MAAA;AAAA,UACP,UAAA,IAAc,YAAA;AAAA,UACd;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA4B,gBAAM,KAAA,EAAM,CAAA;AAAA,UACvD,4BACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAkC,QAAA,EAAA,SAAA,EAAU;AAAA;AAAA;AAAA,KAEhE;AAAA,EAEJ;AAIA,EAAA,uBACEI,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,EAAA;AAAA,QACT,yFAAA;AAAA,QACA,0FAAA;AAAA,QACA,MAAA,CAAO,MAAA;AAAA,QACP,MAAA,CAAO,EAAA;AAAA,QACP,MAAA,CAAO,IAAA;AAAA,QACP,UAAU,eAAA,GAAkB,WAAA;AAAA,QAC5B,UAAA,IAAc,sBAAA;AAAA,QACd;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EAAmC,gBAAM,KAAA,EAAM,CAAA;AAAA,QAC9D,4BACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAkC,QAAA,EAAA,SAAA,EAAU;AAAA;AAAA;AAAA,GAEhE;AAEJ;AASO,SAAS,UAAA,CAAW,EAAE,KAAA,EAAO,OAAA,EAAS,WAAU,EAAoB;AACzE,EAAA,uBACEI,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,yFAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,QAAM;AAAA;AAAA;AAAA,GACT;AAEJ;AAOO,SAAS,aAAA,CAAc,EAAE,SAAA,EAAU,EAAuB;AAC/D,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,IAAU8D,OAAA,CAAA,QAAA,iBAAS,IAAI,MAAM,CAAA;AAE/C,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,QAAA,GAAW,YAAY,MAAM,MAAA,qBAAW,IAAA,EAAM,GAAG,GAAK,CAAA;AAC5D,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACrC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,EAAS;AAC3B,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,EAAW;AAC/B,EAAA,MAAM,UAAA,GAAA,CAAe,KAAA,GAAQ,EAAA,GAAK,OAAA,KAAY,KAAK,EAAA,CAAA,GAAO,GAAA;AAE1D,EAAA,uBACE9D,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAE,GAAA,EAAK,CAAA,EAAG,UAAU,CAAA,CAAA,CAAA,EAAI;AAAA,MAE/B,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,wBACnEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B;AAAA;AAAA;AAAA,GAC3C;AAEJ;AC/LO,SAAS,SAAA,CAAU,EAAE,IAAA,EAAM,SAAA,EAAU,EAAmB;AAC7D,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,iGAAA,EACZ,UAAAgE,MAAAA,CAAO,IAAA,EAAM,KAAK,CAAA,EACrB,CAAA;AAAA,wBAEAhE,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uEACZ,QAAA,EAAAgE,MAAAA,CAAO,IAAA,EAAM,GAAG,CAAA,EACnB;AAAA;AAAA;AAAA,GACF;AAEJ;ACtBA,IAAM,WAAA,GAAoBG,sBAAmC,IAAI;AAS1D,SAAS,YAAA,CAAa;AAAA,EAC3B,QAAA;AAAA,EACA,WAAA,GAAc,EAAA;AAAA,EACd,WAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,YAAA,EAAc,oBAAoB,CAAA,GAAUA,iBAAwB,IAAI,CAAA;AAC/E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,iBAAS,KAAK,CAAA;AACxD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,gBAAA,EAAiB;AAEzC,EAAA,MAAM,eAAA,GAAwBA,OAAA,CAAA,WAAA,CAAY,CAAC,KAAA,KAAyB;AAClE,IAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,IAAA,aAAA,CAAc,CAAC,CAAC,KAAK,CAAA;AACrB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,WAAA,GAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,UAAA,GAAmBA,OAAA,CAAA,WAAA,CAAY,CAAC,YAAA,KAAuB;AAC3D,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,YAAA,EAAc,WAAW,CAAA;AAC5D,IAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,kBAAA,CAAmB,cAAc,WAAW,CAAA;AAE3E,IAAA,MAAM,YAAA,GAAuB;AAAA,MAC3B,GAAG,YAAA;AAAA,MACH,SAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,WAAA,CAAY,YAAY,CAAA;AACxB,IAAA,SAAA,GAAY,YAAA,EAAc,IAAI,IAAA,CAAK,SAAS,GAAG,IAAI,IAAA,CAAK,OAAO,CAAC,CAAA;AAChE,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,GAAG,CAAC,YAAA,EAAc,aAAa,WAAA,EAAa,SAAA,EAAW,eAAe,CAAC,CAAA;AAEvE,EAAA,MAAM,YAAA,GAAqBA,OAAA,CAAA,OAAA;AAAA,IACzB,OAAO;AAAA,MACL,YAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,eAAA,EAAiB,UAAU;AAAA,GAC5C;AAEA,EAAA,uBACEnE,GAAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,YAAA,EAC3B,QAAA,kBAAAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAQ,UAAA,EACtB,UACH,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,OAAA,GAAU;AACxB,EAAA,MAAM,OAAA,GAAgBmE,mBAAW,WAAW,CAAA;AAC5C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,OAAA;AACT;AAQA,SAAS,eAAA,CAAgB,EAAE,QAAA,EAAU,MAAA,EAAO,EAAyB;AACnE,EAAA,uBAAOnE,GAAAA,CAAAwC,QAAAA,EAAA,EAAG,QAAA,EAAS,CAAA;AACrB;AASO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,EAAwB;AACtB,EAAA,MAAM,EAAE,eAAA,EAAiB,UAAA,EAAY,YAAA,KAAiB,OAAA,EAAQ;AAC9D,EAAA,MAAM,SAAA,GAAY,YAAA,EAAc,EAAA,KAAO,KAAA,CAAM,EAAA;AAE7C,EAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAuB;AAC9C,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,IAAA,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,YAAA,EAAc,KAAA,CAAM,EAAE,CAAA;AAC7C,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA;AAEA,EAAA,uBACExC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,CAAC,QAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,aAAA;AAAA,MACX,SAAA,EAAW,YAAY,YAAA,GAAe,EAAA;AAAA,MACtC,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA,GAAW,YAAY,MAAA,EAAO;AAAA,MAE9C;AAAA;AAAA,GACH;AAEJ;AAUO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAgB,GAAI,OAAA,EAAQ;AAClD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,gBAAA,EAAiB;AACzC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUmE,iBAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAuB;AAC7C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,CAAA,CAAE,aAAa,UAAA,GAAa,MAAA;AAC5B,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAuB;AACzC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,SAAA,CAAU,KAAK,CAAA;AAEf,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,kBAAA,CAAmB,cAAc,IAAI,CAAA;AACpE,IAAA,MAAM,YAAA,GAAuB;AAAA,MAC3B,GAAG,YAAA;AAAA,MACH,SAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,WAAA,CAAY,YAAY,CAAA;AACxB,IAAA,MAAA,GAAS,cAAc,IAAI,CAAA;AAC3B,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA;AAEA,EAAA,uBACEnE,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,cAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,MAAA,EAAQ,UAAA;AAAA,MACR,SAAA;AAAA,MACA,gBAAA,EAAgB,MAAA;AAAA,MAEf;AAAA;AAAA,GACH;AAEJ;AAUO,SAAS,aAAa,EAAE,IAAA,EAAM,MAAM,MAAA,GAAS,CAAA,EAAG,QAAO,EAAwB;AACpF,EAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAgB,GAAI,OAAA,EAAQ;AAClD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,gBAAA,EAAiB;AACzC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUmE,iBAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,cAAA,GAAuBA,gBAAQ,MAAM;AACzC,IAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,IAAI,CAAA;AAChC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,UAAA,CAAW,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,UAAA;AAAA,EACT,CAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,CAAC,CAAA;AAEvB,EAAA,MAAM,cAAA,GAAuBA,OAAA,CAAA,WAAA,CAAY,CAAC,CAAA,KAAuB;AAC/D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,CAAA,CAAE,aAAa,UAAA,GAAa,MAAA;AAC5B,IAAA,IAAI,CAAC,MAAA,EAAQ,SAAA,CAAU,IAAI,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,eAAA,GAAwBA,oBAAY,MAAM;AAC9C,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAmBA,OAAA,CAAA,WAAA,CAAY,CAAC,CAAA,KAAuB;AAC3D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,SAAA,CAAU,KAAK,CAAA;AAEf,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,kBAAA,CAAmB,cAAc,cAAc,CAAA;AAC9E,IAAA,MAAM,YAAA,GAAuB;AAAA,MAC3B,GAAG,YAAA;AAAA,MACH,SAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,WAAA,CAAY,YAAY,CAAA;AACxB,IAAA,MAAA,GAAS,cAAc,cAAc,CAAA;AACrC,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,GAAG,CAAC,YAAA,EAAc,gBAAgB,WAAA,EAAa,MAAA,EAAQ,eAAe,CAAC,CAAA;AAEvE,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAA,EAAW;AAAA,MACT,UAAA,EAAY,cAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,MAAA,EAAQ,UAAA;AAAA,MACR,gBAAA,EAAkB;AAAA;AACpB,GACF;AACF;AAGO,SAAS,YAAA,CAAa,KAAA,EAAe,QAAA,GAAW,KAAA,EAAO;AAC5D,EAAA,MAAM,EAAE,eAAA,EAAiB,YAAA,EAAa,GAAI,OAAA,EAAQ;AAClD,EAAA,MAAM,SAAA,GAAY,YAAA,EAAc,EAAA,KAAO,KAAA,CAAM,EAAA;AAE7C,EAAA,MAAM,eAAA,GAAwBA,OAAA,CAAA,WAAA,CAAY,CAAC,CAAA,KAAuB;AAChE,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,IAAA,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,YAAA,EAAc,KAAA,CAAM,EAAE,CAAA;AAC7C,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,EAAO,eAAe,CAAC,CAAA;AAErC,EAAA,MAAM,aAAA,GAAsBA,oBAAY,MAAM;AAC5C,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,SAAA,EAAW;AAAA,MACT,WAAW,CAAC,QAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,aAAA;AAAA,MACX,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA,GAAW,YAAY,MAAA;AAAO;AACjD,GACF;AACF;AC5PA,IAAM,SAAA,GAAY,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AAGlE,SAAS,qBAAA,CAAsB;AAAA,EAC7B,KAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAU,GAAI,aAAa,KAAK,CAAA;AAEnD,EAAA,uBACEnE,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,EAAA;AAAA,QACT,oBAAA;AAAA,QACA,SAAA,IAAa;AAAA,OACf;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AASO,SAAS,SAAA,CAAU;AAAA,EACxB,SAAA;AAAA,EACA,eAAA,GAAkB,CAAA;AAAA,EAClB,YAAA,GAAe,CAAA;AAAA,EACf,YAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAc,eAAA,EAAiB,OAAA,KAAY,gBAAA,EAAiB;AAClF,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAGzC,EAAA,MAAM,EAAE,eAAA,EAAiB,cAAA,EAAe,GAAUoE,OAAA,CAAA,OAAA;AAAA,IAChD,MAAM,sBAAsB,cAAc,CAAA;AAAA,IAC1C,CAAC,cAAc;AAAA,GACjB;AAGA,EAAA,MAAM,KAAA,GAAcA,OAAA,CAAA,OAAA;AAAA,IAClB,MAAM,iBAAiB,YAAY,CAAA;AAAA,IACnC,CAAC,YAAY;AAAA,GACf;AAGA,EAAA,MAAM,cAAA,GAAuBA,OAAA,CAAA,OAAA;AAAA,IAC3B,MAAM,4BAAA,CAA6B,cAAA,EAAgB,eAAA,EAAiB,YAAY,CAAA;AAAA,IAChF,CAAC,cAAA,EAAgB,eAAA,EAAiB,YAAY;AAAA,GAChD;AAGA,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,cAAA,EAAgB,GAAG,eAAe,CAAA;AAExD,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAAe;AACtC,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAA,WAAA,GAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,EAAY,MAAA,KAAqB;AACxD,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAA,WAAA,GAAc,MAAM,MAAM,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,uBACEhE,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,EAAA,EAAI,SAAS,CAAA,EAE9B,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,4CAAA,EACZ,oBAAU,GAAA,CAAI,CAAC,wBACdA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAU,uCAAA;AAAA,QAEV,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6CACb,QAAA,EAAA,GAAA,EACH;AAAA,OAAA;AAAA,MALK;AAAA,KAOR,CAAA,EACH,CAAA;AAAA,oBAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QAEC,IAAA;AAAA,QACA,MAAA,EAAQ,SAAA;AAAA,QACR,cAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,SAAA,EAAW,eAAA;AAAA,QACX,WAAA,EAAa,eAAA;AAAA,QACb,YAAA;AAAA,QACA,WAAA,EAAa;AAAA,OAAA;AAAA,MATR,IAAA,CAAK,KAAK,WAAA;AAAY,KAW9B,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAeA,SAAS,OAAA,CAAQ;AAAA,EACf,IAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAa,GAAI,IAAA;AAC/B,EAAA,MAAM,YAAA,GAAe,QAAQ,IAAI,CAAA;AACjC,EAAA,MAAM,aAAA,GAAgBqE,SAAAA,CAAU,IAAA,EAAM,YAAY,CAAA;AAGlD,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,KAAc,YAAA,CAAa,EAAE,MAAM,CAAA;AAGnD,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,IAAA,EAAM,MAAA,EAAQ,cAAc,CAAA;AAGlE,EAAA,MAAM,mBAAmB,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,EAAE,CAAA;AACnE,EAAA,MAAM,eAAe,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,EAAE,CAAA;AAG/D,EAAA,MAAM,KAAA,GAAyC,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAChE,EAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,KAAA,KAAU;AAClC,IAAA,IAAI,KAAA,CAAM,QAAA,IAAY,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC7C,MAAA,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA,GAAI,KAAA;AAAA,IAC1B;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,MAAA,GAAS,gBAAA,CAAiB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,IAAY,CAAC,CAAA,CAAE,MAAA;AAG1F,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KACpBA,SAAAA,CAAUJ,SAAS,KAAA,CAAM,SAAS,GAAG,IAAI,CAAA;AAE3C,EAAA,uBACE7D,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,EAAA;AAAA,QACT,iFAAA;AAAA,QACA,CAAC,YAAA,IAAgB,aAAA;AAAA,QACjB,MAAA,IAAU;AAAA,OACZ;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAJ,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,YAC/B,SAAA,EAAW,EAAA;AAAA,cACT,wEAAA;AAAA,cACA,2BAAA;AAAA,cACA,YAAA,IAAgB,mEAAA;AAAA,cAChB,aAAA,IAAiB,CAAC,YAAA,IAAgB,mCAAA;AAAA,cAClC,CAAC,YAAA,IAAgB;AAAA,aACnB;AAAA,YAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,SACR;AAAA,wBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AAC3B,YAAA,IAAI,CAAC,KAAA,EAAO;AACV,cAAA,uBAAOJ,GAAAA,CAAC,KAAA,EAAA,EAA2B,WAAU,KAAA,EAAA,EAA5B,CAAA,MAAA,EAAS,KAAK,CAAA,CAAoB,CAAA;AAAA,YACrD;AAEA,YAAA,MAAM,SAAA,GAAY,aAAa,KAAK,CAAA,IAAKsE,WAAW,IAAI,CAAA,CAAE,QAAO,KAAM,CAAA;AAEvE,YAAA,uBACEtE,GAAAA,CAAC,qBAAA,EAAA,EAAqC,KAAA,EACpC,QAAA,kBAAAA,GAAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,KAAA;AAAA,gBACA,OAAA,EAAS,YAAA;AAAA,gBACT,OAAA,EAAO,IAAA;AAAA,gBACP,QAAA,EAAU,SAAA;AAAA,gBACV,OAAA,EAAS,CAAC,CAAA,KAAM,YAAA,GAAe,CAAC,CAAA;AAAA,gBAChC,SAAA,EAAW,EAAA;AAAA,kBACT,QAAA;AAAA;AAAA,kBAEA,CAAC,SAAA,IAAa;AAAA;AAChB;AAAA,aACF,EAAA,EAZ0B,MAAM,EAalC,CAAA;AAAA,UAEJ,CAAC,CAAA;AAAA,UAGA,WAAA,GAAc,qBACbA,GAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,WAAA;AAAA,cACP,OAAA,EAAS,MAAM,WAAA,CAAY,IAAA,EAAM,UAAU;AAAA;AAAA;AAC7C,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AC1NA,SAASuE,sBAAAA,CAAsB;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAU,GAAI,aAAa,KAAK,CAAA;AAEnD,EAAA,uBACEvE,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,EAAA;AAAA,QACT,SAAA;AAAA,QACA,oBAAA;AAAA,QACA,SAAA,IAAa;AAAA,OACf;AAAA,MACA,KAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAGA,SAAS,iBAAA,CAAkB;AAAA,EACzB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,EAAE,QAAQ,SAAA,EAAU,GAAI,aAAa,EAAE,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,CAAA;AAEjE,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,OAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,SAAA;AAAA,QACA,kDAAA;AAAA,QACA,MAAA,IAAU;AAAA;AACZ;AAAA,GACF;AAEJ;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,SAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,YAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,MACE,gBAAA,EAAiB;AACrB,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAGzC,EAAA,MAAM,EAAE,eAAA,EAAiB,cAAA,EAAe,GAAUwE,OAAA,CAAA,OAAA;AAAA,IAChD,MAAM,sBAAsB,cAAc,CAAA;AAAA,IAC1C,CAAC,cAAc;AAAA,GACjB;AAGA,EAAA,MAAM,EAAE,KAAA,EAAO,iBAAA,EAAmB,eAAA,EAAgB,GAAI,eAAA;AAAA,IACpD,YAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAM,SAAA,GAAYC,WAAAA,CAAY,YAAA,EAAc,EAAE,cAAc,CAAA;AAC5D,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAMZ,OAAAA,CAAQ,SAAA,EAAW,CAAC,CAAC,CAAA;AAE1E,EAAA,uBACEzD,IAAAA,CAAAoC,QAAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAApC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iGAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,OAAE,QAAA,EAAA,kDAAA,EAAgD,CAAA;AAAA,sBACnDA,GAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,yCAAA,EAAuC;AAAA,KAAA,EAC5C,CAAA;AAAA,oBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA,EAErD,QAAA,EAAA;AAAA,sBAAAJ,GAAAA;AAAA,QAAC,yBAAA;AAAA,QAAA;AAAA,UACC,YAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,sBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAO,CAAA;AAAA,wBACtBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EACZ,mBAAS,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,qBAClBI,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,4DAAA;AAAA,YAET,QAAA,EAAA;AAAA,cAAA4D,MAAAA,CAAO,KAAK,IAAI,CAAA;AAAA,cAAG,GAAA;AAAA,8BACpBhE,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCACb,QAAA,EAAAgE,MAAAA,CAAO,GAAA,EAAK,GAAG,CAAA,EAClB;AAAA;AAAA,WAAA;AAAA,UANK;AAAA,SAQR,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAhE,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,WAAA,EAAY,IAAA,EAAK,QAAA,EACrC,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,eAAA,EACZ,gBAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAChBA,GAAAA,CAAC,SAAe,SAAA,EAAU,UAAA,EAAW,OAAO,EAAE,MAAA,EAAQ,QAAO,EAC3D,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACZ,oBAAU,CAAA,oBACTA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCACb,QAAA,EAAAgE,MAAAA,CAAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,QAAA,CAAS,MAAM,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,MAAM,GACpD,CAAA,EAEJ,CAAA,EAAA,EAPQ,IAQV,CACD,CAAA,EACH,CAAA;AAAA,wBAGA5D,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,4CAAA,EACZ,mBAAS,GAAA,CAAI,CAAC,KAAK,QAAA,KAAa;AAC/B,YAAA,MAAM,YAAY,eAAA,CAAgB,MAAA;AAAA,cAChC,CAAC,KAAA,KACCqE,SAAAA,CAAUJ,QAAAA,CAAS,MAAM,SAAS,CAAA,EAAG,GAAG,CAAA,IACxCI,SAAAA,CAAUJ,QAAAA,CAAS,KAAA,CAAM,OAAO,GAAG,GAAG;AAAA,aAC1C;AACA,YAAA,MAAM,aAAA,GAAgB,YAAY,SAAS,CAAA;AAE3C,YAAA,uBACE7D,IAAAA,CAAC,KAAA,EAAA,EAAmB,SAAA,EAAU,UAAA,EAC3B,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAC1B,gBAAA,MAAM,UAAA,GAAa,CAAC,aAAA,CAAc,GAAA,EAAK,MAAM,YAAY,CAAA;AAEzD,gBAAA,uBACEA,IAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBAEC,SAAA,EAAW,EAAA;AAAA,sBACT,UAAA;AAAA,sBACA,UAAA,IACE;AAAA,qBACJ;AAAA,oBACA,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA,EAAO;AAAA,oBAGvB,QAAA,EAAA;AAAA,sBAAA,KAAA,KAAU,CAAA,oBACTJ,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wEAAA,EAAyE,CAAA;AAAA,sCAI1FA,GAAAA;AAAA,wBAAC,iBAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAM,GAAA;AAAA,0BACN,IAAA;AAAA,0BACA,MAAA,EAAQ,CAAA;AAAA,0BACR,SAAA,EAAU,mCAAA;AAAA,0BACV,OAAA,EAAS,MAAM,WAAA,GAAc,GAAA,EAAK,MAAM,CAAC;AAAA;AAAA,uBAC3C;AAAA,sCACAA,GAAAA;AAAA,wBAAC,iBAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAM,GAAA;AAAA,0BACN,IAAA;AAAA,0BACA,MAAA,EAAQ,EAAA;AAAA,0BACR,SAAA,EAAU,wCAAA;AAAA,0BACV,OAAA,EAAS,MAAM,WAAA,GAAc,GAAA,EAAK,MAAM,EAAE;AAAA;AAAA,uBAC5C;AAAA,sCAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wFAAA,EAAyF,CAAA;AAAA,sCAExGA,GAAAA;AAAA,wBAAC,iBAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAM,GAAA;AAAA,0BACN,IAAA;AAAA,0BACA,MAAA,EAAQ,EAAA;AAAA,0BACR,SAAA,EAAU,wCAAA;AAAA,0BACV,OAAA,EAAS,MAAM,WAAA,GAAc,GAAA,EAAK,MAAM,EAAE;AAAA;AAAA,uBAC5C;AAAA,sCACAA,GAAAA;AAAA,wBAAC,iBAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAM,GAAA;AAAA,0BACN,IAAA;AAAA,0BACA,MAAA,EAAQ,EAAA;AAAA,0BACR,SAAA,EAAU,wCAAA;AAAA,0BACV,OAAA,EAAS,MAAM,WAAA,GAAc,GAAA,EAAK,MAAM,EAAE;AAAA;AAAA;AAC5C;AAAA,mBAAA;AAAA,kBA7CK;AAAA,iBA8CP;AAAA,cAEJ,CAAC,CAAA;AAAA,cAGA,aAAA,CAAc,GAAA;AAAA,gBAAI,CAAC,KAAA,EAAO,UAAA,KACzB,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU;AACnB,kBAAA,IAAI,KAAA,GAAQ,kBAAA;AAAA,oBACV,KAAA;AAAA,oBACA,GAAA;AAAA,oBACA,UAAA;AAAA,oBACA,aAAA,CAAc,MAAA;AAAA,oBACd,EAAE,IAAA,EAAM,iBAAuC;AAAA,mBACjD;AAEA,kBAAA,MAAM,aAAa,aAAA,CAAc,IAAA;AAAA,oBAC/B,CAAC,UAAA,EAAY,UAAA,KACX,UAAA,KAAe,cACf,UAAA,CAAW,IAAA;AAAA,sBAAK,CAAC,UAAA,KACf0E,uBAAAA;AAAA,wBACE;AAAA,0BACE,KAAA,EAAOT,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAAA,0BAC/B,GAAA,EAAKA,QAAAA,CAAS,KAAA,CAAM,OAAO;AAAA,yBAC7B;AAAA,wBACA;AAAA,0BACE,KAAA,EAAOA,QAAAA,CAAS,UAAA,CAAW,SAAS,CAAA;AAAA,0BACpC,GAAA,EAAKA,QAAAA,CAAS,UAAA,CAAW,OAAO;AAAA;AAClC;AACF;AACF,mBACJ;AAEA,kBAAA,IAAI,CAAC,UAAA,EAAY;AACf,oBAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,MAAM,IAAA,EAAK;AAAA,kBAChD;AAEA,kBAAA,uBACEjE,GAAAA;AAAA,oBAACuE,sBAAAA;AAAA,oBAAA;AAAA,sBAEC,KAAA;AAAA,sBACA,SAAA,EAAU,wBAAA;AAAA,sBACV,KAAA;AAAA,sBAEA,QAAA,kBAAAvE,GAAAA;AAAA,wBAAC,UAAA;AAAA,wBAAA;AAAA,0BACC,KAAA;AAAA,0BACA,OAAA,EAAS,YAAA;AAAA,0BACT,QAAA,EAAQ,IAAA;AAAA,0BACR,OAAA,EAAS,CAAC,CAAA,KAAM,YAAA,GAAe,CAAC,CAAA;AAAA,0BAChC,SAAA,EAAU;AAAA;AAAA;AACZ,qBAAA;AAAA,oBAXK,KAAA,CAAM;AAAA,mBAYb;AAAA,gBAEJ,CAAC;AAAA;AACH,aAAA,EAAA,EAzGQ,QA0GV,CAAA;AAAA,UAEJ,CAAC,CAAA,EACH,CAAA;AAAA,UAGC,QAAA,CAAS,KAAK,CAAC,GAAA,KAAQ,QAAQ,GAAG,CAAC,qBAClCA,GAAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,gBAAA,EAAkB,iBAAA;AAAA,cAClB,eAAA,EAAiB;AAAA;AAAA;AACnB,SAAA,EAEJ;AAAA,OAAA,EACF,CAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAQA,SAAS,yBAAA,CAA0B;AAAA,EACjC,YAAA;AAAA,EACA;AACF,CAAA,EAAmC;AACjC,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,gBAAA,EAAiB;AAE1C,EAAA,IAAI,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAExC,EAAA,MAAM,SAAA,GAAYyE,YAAY,YAAY,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAMZ,OAAAA,CAAQ,SAAA,EAAW,CAAC,CAAC,CAAA;AAE1E,EAAA,uBACEzD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAgB,CAAA;AAAA,oBAC/BA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CACZ,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,KAAU;AAC5B,MAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,MAAA,CAAO,CAAC,KAAA,KAAU;AACtD,QAAA,MAAM,KAAA,GAAQiE,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACtC,QAAA,MAAM,GAAA,GAAMA,QAAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAClC,QAAA,OAAO,GAAA,IAAO,SAAS,GAAA,IAAO,GAAA;AAAA,MAChC,CAAC,CAAA;AAED,MAAA,uBACE7D,IAAAA,CAAC,KAAA,EAAA,EAAgB,SAAA,EAAU,4BAAA,EACxB,QAAA,EAAA;AAAA,QAAA,cAAA,CAAe,MAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,0BAC/BJ,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YAEC,KAAA;AAAA,YACA,OAAA,EAAS,YAAA;AAAA,YACT,OAAA,EAAO,IAAA;AAAA,YACP,SAAA,EAAU;AAAA,WAAA;AAAA,UAJL,KAAA,CAAM;AAAA,SAMd,CAAA;AAAA,QACA,eAAe,MAAA,GAAS,CAAA,oBACvBI,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,2CAAA,EAA4C,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UACrD,eAAe,MAAA,GAAS,CAAA;AAAA,UAAE;AAAA,SAAA,EAC9B;AAAA,OAAA,EAAA,EAbM,KAeV,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAQA,SAAS,gBAAA,CAAiB;AAAA,EACxB,gBAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAUoE,OAAA,CAAA,QAAA,iBAAS,IAAI,MAAM,CAAA;AAE/D,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,MAAA,cAAA,iBAAe,IAAI,MAAM,CAAA;AAAA,IAC3B,GAAG,GAAK,CAAA;AAER,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACrC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,YAAY,QAAA,EAAS;AACzC,EAAA,MAAM,aAAA,GAAgB,YAAY,UAAA,EAAW;AAE7C,EAAA,IAAI,WAAA,GAAc,gBAAA,IAAoB,WAAA,IAAe,eAAA,EAAiB;AACpE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,iBAAA,GAAA,CACH,WAAA,GAAc,gBAAA,IAAoB,EAAA,GAAK,aAAA;AAC1C,EAAA,MAAM,YAAA,GAAA,CAAgB,kBAAkB,gBAAA,IAAoB,EAAA;AAC5D,EAAA,MAAM,UAAA,GAAc,oBAAoB,YAAA,GAAgB,GAAA;AAExD,EAAA,uBACEpE,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,+DAAA;AAAA,MACV,KAAA,EAAO,EAAE,GAAA,EAAK,CAAA,EAAG,UAAU,CAAA,CAAA,CAAA,EAAI;AAAA,MAE/B,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EAAkD,CAAA;AAAA,wBACjEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B;AAAA;AAAA;AAAA,GAC3C;AAEJ;ACrWA,SAASuE,sBAAAA,CAAsB;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAU,GAAI,aAAa,KAAK,CAAA;AAEnD,EAAA,uBACEvE,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,EAAA;AAAA,QACT,SAAA;AAAA,QACA,oBAAA;AAAA,QACA,SAAA,IAAa;AAAA,OACf;AAAA,MACA,KAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAGA,SAAS2E,kBAAAA,CAAkB;AAAA,EACzB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,EAAE,QAAQ,SAAA,EAAU,GAAI,aAAa,EAAE,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,CAAA;AAEjE,EAAA,uBACE3E,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,OAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,SAAA;AAAA,QACA,kDAAA;AAAA,QACA,MAAA,IAAU;AAAA;AACZ;AAAA,GACF;AAEJ;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,SAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,YAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,MACE,gBAAA,EAAiB;AACrB,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAGzC,EAAA,MAAM,EAAE,eAAA,EAAiB,cAAA,EAAe,GAAU4E,OAAA,CAAA,OAAA;AAAA,IAChD,MAAM,sBAAsB,cAAc,CAAA;AAAA,IAC1C,CAAC,cAAc;AAAA,GACjB;AAGA,EAAA,MAAM,EAAE,KAAA,EAAO,iBAAA,EAAmB,eAAA,EAAgB,GAAI,eAAA;AAAA,IACpD,YAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAM,aAAA,GAAsBA,gBAAQ,MAAM;AACxC,IAAA,IAAI,CAAC,OAAA,CAAQ,YAAY,CAAA,SAAU,EAAC;AACpC,IAAA,OAAO,iBAAiB,eAAe,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,eAAA,EAAiB,YAAY,CAAC,CAAA;AAGlC,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,MAAA,CAAO,CAAC,KAAA,KAAU;AAClD,IAAA,MAAM,SAAA,GAAYX,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC1C,IAAA,OACE,UAAU,OAAA,EAAQ,KAAM,YAAA,CAAa,OAAA,MACrC,SAAA,CAAU,QAAA,EAAS,KAAM,YAAA,CAAa,UAAS,IAC/C,SAAA,CAAU,WAAA,EAAY,KAAM,aAAa,WAAA,EAAY;AAAA,EAEzD,CAAC,CAAA;AAGD,EAAA,MAAM,aAAA,GAAgB,YAAY,SAAS,CAAA;AAE3C,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAA2B;AACnD,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACtB;AAAA,EACF,CAAA;AAEA,EAAA,uBACE7D,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA,EAElC,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEZ,QAAA,EAAA;AAAA,MAAA,cAAA,CAAe,MAAA,GAAS,qBACvBJ,GAAAA;AAAA,QAAC,wBAAA;AAAA,QAAA;AAAA,UACC,YAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,sBAIFI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAO,CAAA;AAAA,wBACtBI,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6FAAA,EACb,QAAA,EAAA;AAAA,UAAA4D,MAAAA,CAAO,cAAc,IAAI,CAAA;AAAA,UAAG,GAAA;AAAA,0BAC7BhE,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCACb,QAAA,EAAAgE,MAAAA,CAAO,YAAA,EAAc,GAAG,CAAA,EAC3B;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAhE,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,WAAA,EAAY,IAAA,EAAK,QAAA,EACrC,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAEb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,eAAA,EACZ,gBAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAChBA,GAAAA,CAAC,SAAe,SAAA,EAAU,UAAA,EAAW,OAAO,EAAE,MAAA,EAAQ,QAAO,EAC3D,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACZ,oBAAU,CAAA,oBACTA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCACb,QAAA,EAAAgE,MAAAA,CAAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,QAAA,CAAS,MAAM,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,MAAM,GACpD,CAAA,EAEJ,CAAA,EAAA,EAPQ,IAQV,CACD,CAAA,EACH,CAAA;AAAA,wBAGA5D,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACZ,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAC1B,cAAA,MAAM,UAAA,GAAa,CAAC,aAAA,CAAc,YAAA,EAAc,MAAM,YAAY,CAAA;AAElE,cAAA,uBACEA,IAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAW,EAAA;AAAA,oBACT,UAAA;AAAA,oBACA,UAAA,IAAc;AAAA,mBAChB;AAAA,kBACA,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA,EAAO;AAAA,kBAGvB,QAAA,EAAA;AAAA,oBAAA,KAAA,KAAU,CAAA,oBACTJ,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wEAAA,EAAyE,CAAA;AAAA,oCAI1FA,GAAAA;AAAA,sBAAC2E,kBAAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAM,YAAA;AAAA,wBACN,IAAA;AAAA,wBACA,MAAA,EAAQ,CAAA;AAAA,wBACR,SAAA,EAAU,mCAAA;AAAA,wBACV,OAAA,EAAS,MAAM,WAAA,GAAc,YAAA,EAAc,MAAM,CAAC;AAAA;AAAA,qBACpD;AAAA,oCACA3E,GAAAA;AAAA,sBAAC2E,kBAAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAM,YAAA;AAAA,wBACN,IAAA;AAAA,wBACA,MAAA,EAAQ,EAAA;AAAA,wBACR,SAAA,EAAU,wCAAA;AAAA,wBACV,OAAA,EAAS,MAAM,WAAA,GAAc,YAAA,EAAc,MAAM,EAAE;AAAA;AAAA,qBACrD;AAAA,oCAGA3E,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wFAAA,EAAyF,CAAA;AAAA,oCAExGA,GAAAA;AAAA,sBAAC2E,kBAAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAM,YAAA;AAAA,wBACN,IAAA;AAAA,wBACA,MAAA,EAAQ,EAAA;AAAA,wBACR,SAAA,EAAU,wCAAA;AAAA,wBACV,OAAA,EAAS,MAAM,WAAA,GAAc,YAAA,EAAc,MAAM,EAAE;AAAA;AAAA,qBACrD;AAAA,oCACA3E,GAAAA;AAAA,sBAAC2E,kBAAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAM,YAAA;AAAA,wBACN,IAAA;AAAA,wBACA,MAAA,EAAQ,EAAA;AAAA,wBACR,SAAA,EAAU,wCAAA;AAAA,wBACV,OAAA,EAAS,MAAM,WAAA,GAAc,YAAA,EAAc,MAAM,EAAE;AAAA;AAAA;AACrD;AAAA,iBAAA;AAAA,gBA5CK;AAAA,eA6CP;AAAA,YAEJ,CAAC,CAAA;AAAA,YAGA,aAAA,CAAc,GAAA;AAAA,cAAI,CAAC,KAAA,EAAO,UAAA,KACzB,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU;AACnB,gBAAA,IAAI,KAAA,GAAQ,kBAAA;AAAA,kBACV,KAAA;AAAA,kBACA,YAAA;AAAA,kBACA,UAAA;AAAA,kBACA,aAAA,CAAc,MAAA;AAAA,kBACd,EAAE,IAAA,EAAM,iBAAuC;AAAA,iBACjD;AAGA,gBAAA,MAAM,aAAa,aAAA,CAAc,IAAA;AAAA,kBAC/B,CAAC,UAAA,EAAY,UAAA,KACX,UAAA,KAAe,cACf,UAAA,CAAW,IAAA;AAAA,oBAAK,CAAC,UAAA,KACfD,uBAAAA;AAAA,sBACE;AAAA,wBACE,KAAA,EAAOT,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAAA,wBAC/B,GAAA,EAAKA,QAAAA,CAAS,KAAA,CAAM,OAAO;AAAA,uBAC7B;AAAA,sBACA;AAAA,wBACE,KAAA,EAAOA,QAAAA,CAAS,UAAA,CAAW,SAAS,CAAA;AAAA,wBACpC,GAAA,EAAKA,QAAAA,CAAS,UAAA,CAAW,OAAO;AAAA;AAClC;AACF;AACF,iBACJ;AAEA,gBAAA,IAAI,CAAC,UAAA,EAAY;AACf,kBAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,MAAM,IAAA,EAAK;AAAA,gBAChD;AAEA,gBAAA,uBACEjE,GAAAA;AAAA,kBAACuE,sBAAAA;AAAA,kBAAA;AAAA,oBAEC,KAAA;AAAA,oBACA,SAAA,EAAU,sBAAA;AAAA,oBACV,KAAA;AAAA,oBAEA,QAAA,kBAAAvE,GAAAA;AAAA,sBAAC,UAAA;AAAA,sBAAA;AAAA,wBACC,KAAA;AAAA,wBACA,OAAA,EAAS,YAAA;AAAA,wBACT,QAAA,EAAQ,IAAA;AAAA,wBACR,OAAA,EAAS,CAAC,CAAA,KAAM,YAAA,GAAe,CAAC,CAAA;AAAA,wBAChC,SAAA,EAAU;AAAA;AAAA;AACZ,mBAAA;AAAA,kBAXK,KAAA,CAAM;AAAA,iBAYb;AAAA,cAEJ,CAAC;AAAA;AACH,WAAA,EACF,CAAA;AAAA,UAGC,OAAA,CAAQ,YAAY,CAAA,oBACnBA,GAAAA;AAAA,YAAC6E,iBAAAA;AAAA,YAAA;AAAA,cACC,gBAAA,EAAkB,iBAAA;AAAA,cAClB,eAAA,EAAiB;AAAA;AAAA;AACnB,SAAA,EAEJ;AAAA,OAAA,EACF,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAGC,WAAA,oBACCzE,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EAEb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,eAAA;AAAA,UACV,IAAA,EAAK,QAAA;AAAA,UACL,QAAA,EAAU,YAAA;AAAA,UACV,QAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,aAAA,CAAc,SAAS,CAAA,mBACtBA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EACd,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kFAAA,EAAmF,CAAA;AAAA,4BACnGA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yDAAA,EAA0D;AAAA,WAAA,EAC5E,CAAA;AAAA,0BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAwC,QAAA,EAAA,eAAA,EAErD;AAAA,SAAA,EACF,oBAEAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wDAAuD,QAAA,EAAA,gDAAA,EAEpE,CAAA;AAAA,QAGD,cAAc,MAAA,GAAS,CAAA,oBACtBA,GAAAA,CAAC,UAAA,EAAA,EAAW,WAAU,gBAAA,EAAiB,IAAA,EAAK,QAAA,EAC1C,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,KAAA,KAAU;AAC5B,UAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA;AAErD,UAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAmB,SAAA,EAAU,aAAA,EAC5B,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EACV,gBAAM,KAAA,EACT,CAAA;AAAA,YAEC,IAAA,oBACCI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iDAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,8BAC3BA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,eAAK,IAAA,EAAK;AAAA,aAAA,EACvC,CAAA;AAAA,4BAGFI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC8E,UAAA,EAAA,EAAa,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,8BACnC9E,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EACb,QAAA,EAAAgE,MAAAA,iBAAO,IAAI,IAAA,EAAK,EAAG,aAAa,CAAA,EACnC;AAAA,aAAA,EACF,CAAA;AAAA,4BAEA5D,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,8BAC5BI,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,gBAAA4D,MAAAA,CAAOC,QAAAA,CAAS,KAAA,CAAM,SAAS,GAAG,QAAQ,CAAA;AAAA,gBAAE,IAAA;AAAA,gBAAG,GAAA;AAAA,gBAC/CD,MAAAA,CAAOC,QAAAA,CAAS,KAAA,CAAM,OAAO,GAAG,QAAQ;AAAA,eAAA,EAC3C;AAAA,aAAA,EACF;AAAA,WAAA,EAAA,EAzBQ,MAAM,EA0BhB,CAAA;AAAA,QAEJ,CAAC,GACH,CAAA,EACF;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAQA,SAAS,wBAAA,CAAyB;AAAA,EAChC,YAAA;AAAA,EACA;AACF,CAAA,EAAkC;AAChC,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,gBAAA,EAAiB;AAE1C,EAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,MAAA,CAAO,CAAC,KAAA,KAAU;AACtD,IAAA,MAAM,KAAA,GAAQA,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACtC,IAAA,MAAM,GAAA,GAAMA,QAAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAClC,IAAA,OAAO,YAAA,IAAgB,SAAS,YAAA,IAAgB,GAAA;AAAA,EAClD,CAAC,CAAA;AAED,EAAA,IAAI,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAExC,EAAA,uBACE7D,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAgB,CAAA;AAAA,oBAC/BA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCACZ,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,qBACnBA,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QAEC,KAAA;AAAA,QACA,OAAA,EAAS,YAAA;AAAA,QACT,SAAA,EAAU;AAAA,OAAA;AAAA,MAHL,KAAA,CAAM;AAAA,KAKd,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAQA,SAAS6E,iBAAAA,CAAiB;AAAA,EACxB,gBAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAUD,OAAA,CAAA,QAAA,iBAAS,IAAI,MAAM,CAAA;AAE/D,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,MAAA,cAAA,iBAAe,IAAI,MAAM,CAAA;AAAA,IAC3B,GAAG,GAAK,CAAA;AAER,IAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,EACrC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,YAAY,QAAA,EAAS;AACzC,EAAA,MAAM,aAAA,GAAgB,YAAY,UAAA,EAAW;AAG7C,EAAA,IAAI,WAAA,GAAc,gBAAA,IAAoB,WAAA,IAAe,eAAA,EAAiB;AACpE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,iBAAA,GAAA,CACH,WAAA,GAAc,gBAAA,IAAoB,EAAA,GAAK,aAAA;AAC1C,EAAA,MAAM,YAAA,GAAA,CAAgB,kBAAkB,gBAAA,IAAoB,EAAA;AAC5D,EAAA,MAAM,UAAA,GAAc,oBAAoB,YAAA,GAAgB,GAAA;AAExD,EAAA,uBACExE,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,+DAAA;AAAA,MACV,KAAA,EAAO,EAAE,GAAA,EAAK,CAAA,EAAG,UAAU,CAAA,CAAA,CAAA,EAAI;AAAA,MAE/B,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EAAkD,CAAA;AAAA,wBACjEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B;AAAA;AAAA;AAAA,GAC3C;AAEJ;ACpcO,SAAS,QAAA,CAAS;AAAA,EACvB,SAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,YAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAiB,OAAA,KAAY,gBAAA,EAAiB;AACpE,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAGzC,EAAA,MAAM,MAAA,GAAe+E,gBAAQ,MAAM;AACjC,IAAA,MAAM,SAAA,GAAYC,YAAY,YAAY,CAAA;AAC1C,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAMzB,SAAAA,CAAU,SAAA,EAAW,CAAC,CAAC,CAAA;AAAA,EACrE,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAe;AACvC,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,OAAA,CAAQ,OAAO,CAAA;AACf,IAAA,YAAA,GAAe,IAAI,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAAe;AACtC,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAA,WAAA,GAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,uBACEvD,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,EAAA,CAAG,UAAU,SAAS,CAAA,EAAG,IAAA,EAAK,QAAA,EACnD,QAAA,kBAAAA,GAAAA,CAAC,SAAI,SAAA,EAAU,KAAA,EAEb,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uEACZ,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXA,GAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MAEC,KAAA;AAAA,MACA,MAAA,EAAQ,cAAA;AAAA,MACR,YAAA,EAAc,MAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,MAC1C,WAAA,EAAa;AAAA,KAAA;AAAA,IAJR,MAAM,QAAA;AAAS,GAMvB,CAAA,EACH,CAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAUA,SAAS,aAAA,CAAc;AAAA,EACrB,KAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,KAAA,GAAQ,iBAAiB,KAAK,CAAA;AAGpC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAC3C,IAAA,MAAM,UAAA,GAAaiE,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC3C,IAAA,OAAOgB,WAAAA,CAAY,YAAY,KAAK,CAAA;AAAA,EACtC,CAAC,CAAA;AAED,EAAA,uBACE7E,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,YAAA;AAAA,QACT,SAAA,EAAU,kFAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA4D,MAAAA,CAAO,OAAO,MAAM,CAAA;AAAA,UACpB,YAAY,MAAA,GAAS,CAAA,oBACpB5D,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gDAAA,EAAiD,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,YAC7D,WAAA,CAAY,MAAA;AAAA,YAAO;AAAA,WAAA,EACvB;AAAA;AAAA;AAAA,KAEJ;AAAA,oBAGAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uBAAA,EACZ,QAAA,EAAA,CAAC,KAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA,CAAE,IAAI,CAAC,GAAA,EAAK,sBAC7CA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAU,2DAAA;AAAA,QAET,QAAA,EAAA;AAAA,OAAA;AAAA,MAHI;AAAA,KAKR,CAAA,EACH,CAAA;AAAA,oBAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QAEC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAJK,IAAA,CAAK,KAAK,WAAA;AAAY,KAM9B,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAUA,SAAS,eAAA,CAAgB;AAAA,EACvB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAa,GAAI,IAAA;AAC/B,EAAA,MAAM,YAAA,GAAe,QAAQ,IAAI,CAAA;AAGjC,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AACzC,IAAA,MAAM,UAAA,GAAaiE,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAWA,QAAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACvC,IAAA,OACG,IAAA,IAAQ,UAAA,IAAc,IAAA,IAAQ,QAAA,IAC/BI,SAAAA,CAAU,YAAY,IAAI,CAAA,IAC1BA,SAAAA,CAAU,QAAA,EAAU,IAAI,CAAA;AAAA,EAE5B,CAAC,CAAA;AAED,EAAA,MAAM,SAAA,GAAY,UAAU,MAAA,GAAS,CAAA;AAErC,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,uBAAOrE,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAgB,CAAA;AAAA,EACxC;AAEA,EAAA,uBACEI,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,MAC/B,SAAA,EAAW,EAAA;AAAA,QACT,uFAAA;AAAA,QACA,2BAAA;AAAA,QACA,YAAA,IAAgB;AAAA,OAClB;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,GAAA;AAAA,QAEL,aAAa,CAAC,YAAA,oBACbJ,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8EAAA,EAA+E;AAAA;AAAA;AAAA,GAEnG;AAEJ;AC/JA,IAAMkF,aAAAA,GAGD;AAAA,EACH,IAAA,EAAM,EAAE,MAAA,EAAQ,mBAAA,EAAqB,IAAI,gCAAA,EAAiC;AAAA,EAC1E,KAAA,EAAO,EAAE,MAAA,EAAQ,oBAAA,EAAsB,IAAI,kCAAA,EAAmC;AAAA,EAC9E,GAAA,EAAK,EAAE,MAAA,EAAQ,kBAAA,EAAoB,IAAI,8BAAA,EAA+B;AAAA,EACtE,MAAA,EAAQ,EAAE,MAAA,EAAQ,qBAAA,EAAuB,IAAI,oCAAA,EAAqC;AAAA,EAClF,MAAA,EAAQ,EAAE,MAAA,EAAQ,qBAAA,EAAuB,IAAI,oCAAA,EAAqC;AAAA,EAClF,MAAA,EAAQ,EAAE,MAAA,EAAQ,kBAAA,EAAoB,IAAI,oCAAA;AAC5C,CAAA;AAOO,SAAS,UAAA,CAAW;AAAA,EACzB,SAAA;AAAA,EACA,YAAA,GAAe,4CAAA;AAAA,EACf,YAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAiB,OAAA,KAAY,gBAAA,EAAiB;AACpE,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAGzC,EAAA,MAAM,EAAE,eAAA,EAAiB,cAAA,EAAe,GAAUC,OAAA,CAAA,OAAA;AAAA,IAChD,MAAM,sBAAsB,cAAc,CAAA;AAAA,IAC1C,CAAC,cAAc;AAAA,GACjB;AAGA,EAAA,MAAM,WAAA,GAAoBA,gBAAQ,MAAM;AACtC,IAAA,MAAM,QAAA,uBAAe,GAAA,EAGnB;AAGF,IAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,KAAA,KAAU;AACjC,MAAA,MAAM,SAAA,GAAYlB,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC1C,MAAA,IAAI,CAACgB,WAAAA,CAAY,SAAA,EAAW,YAAY,CAAA,EAAG;AAE3C,MAAA,MAAM,OAAA,GAAUjB,MAAAA,CAAO,SAAA,EAAW,YAAY,CAAA;AAE9C,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,EAAG;AAC1B,QAAA,QAAA,CAAS,IAAI,OAAA,EAAS;AAAA,UACpB,IAAA,EAAMM,WAAW,SAAS,CAAA;AAAA,UAC1B,QAAQ,EAAC;AAAA,UACT,gBAAgB;AAAC,SAClB,CAAA;AAAA,MACH;AAEA,MAAA,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,EAAG,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IAC1C,CAAC,CAAA;AAGD,IAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,KAAA,KAAU;AAChC,MAAA,MAAM,UAAA,GAAaL,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAC3C,MAAA,MAAM,QAAA,GAAWA,QAAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAEvC,MAAA,IAAI,WAAA,GAAcK,WAAW,UAAU,CAAA;AACvC,MAAA,MAAM,QAAA,GAAWc,SAAS,QAAQ,CAAA;AAElC,MAAA,OAAO,eAAe,QAAA,EAAU;AAC9B,QAAA,IAAIH,WAAAA,CAAY,WAAA,EAAa,YAAY,CAAA,EAAG;AAC1C,UAAA,MAAM,OAAA,GAAUjB,MAAAA,CAAO,WAAA,EAAa,YAAY,CAAA;AAEhD,UAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,EAAG;AAC1B,YAAA,QAAA,CAAS,IAAI,OAAA,EAAS;AAAA,cACpB,IAAA,EAAM,IAAI,IAAA,CAAK,WAAW,CAAA;AAAA,cAC1B,QAAQ,EAAC;AAAA,cACT,gBAAgB;AAAC,aAClB,CAAA;AAAA,UACH;AAEA,UAAA,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,EAAG,cAAA,CAAe,KAAK,KAAK,CAAA;AAAA,QAClD;AACA,QAAA,WAAA,GAAc,IAAI,KAAK,WAAA,CAAY,OAAA,CAAQ,YAAY,OAAA,EAAQ,GAAI,CAAC,CAAC,CAAA;AAAA,MACvE;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,CAAA,CAAE,IAAA;AAAA,MACnC,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,KAAK,OAAA,EAAQ,GAAI,CAAA,CAAE,IAAA,CAAK,OAAA;AAAQ,KAC9C;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,cAAA,EAAgB,YAAY,CAAC,CAAA;AAElD,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,MAAA,GAAS,CAAA,IAAK,eAAe,MAAA,GAAS,CAAA;AAE3E,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAAe;AACtC,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAA,WAAA,GAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,uBACEhE,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EACvC,QAAA,kBAAAA,IAAC,UAAA,EAAA,EAAW,SAAA,EAAU,UAAS,IAAA,EAAK,QAAA,EAClC,0BAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACZ,QAAA,EAAA;AAAA,IAAA,WAAA,CAAY,GAAA,CAAI,CAAC,QAAA,qBAChBJ,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QAEC,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,gBAAgB,QAAA,CAAS,cAAA;AAAA,QACzB,WAAA,EAAa,eAAA;AAAA,QACb;AAAA,OAAA;AAAA,MALKgE,MAAAA,CAAO,QAAA,CAAS,IAAA,EAAM,YAAY;AAAA,KAO1C,CAAA;AAAA,IAEA,CAAC,YAAA,oBACA5D,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6EAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,sBAChCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wBAAwB,QAAA,EAAA,YAAA,EAAa;AAAA,KAAA,EACpD;AAAA,GAAA,EAEJ,GACF,CAAA,EACF,CAAA;AAEJ;AAWA,SAAS,cAAA,CAAe;AAAA,EACtB,IAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,YAAA,GAAe,QAAQ,IAAI,CAAA;AAEjC,EAAA,uBACEI,KAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,QAC/B,SAAA,EAAW,EAAA;AAAA,UACT,6EAAA;AAAA,UACA,YAAA,IAAgB;AAAA,SAClB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAJ,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,wEAAA;AAAA,gBACA,YAAA,IAAgB;AAAA,eAClB;AAAA,cAEC,QAAA,EAAAgE,MAAAA,CAAO,IAAA,EAAM,GAAG;AAAA;AAAA,WACnB;AAAA,0BACA5D,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAK,SAAA,EAAU,eAAA,EAAiB,UAAAgE,MAAAA,CAAO,IAAA,EAAM,MAAM,CAAA,EAAE,CAAA;AAAA,4BACtDhE,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BACb,QAAA,EAAAgE,MAAAA,CAAO,IAAA,EAAM,cAAc,CAAA,EAC9B;AAAA,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,oBAGA5D,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAEZ,QAAA,EAAA;AAAA,MAAA,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,qBACnBJ,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UAEC,KAAA;AAAA,UACA,UAAA,EAAU,IAAA;AAAA,UACV,OAAA,EAAS,MAAM,YAAA,GAAe,KAAK;AAAA,SAAA;AAAA,QAH9B,CAAA,MAAA,EAAS,MAAM,EAAE,CAAA;AAAA,OAKzB,CAAA;AAAA,MAGA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXA,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UAEC,KAAA;AAAA,UACA,OAAA,EAAS,MAAM,YAAA,GAAe,KAAK;AAAA,SAAA;AAAA,QAF9B,KAAA,CAAM;AAAA,OAId;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AASA,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,UAAA,EAAY,SAAQ,EAAyB;AAC7E,EAAA,MAAM,MAAA,GAASkF,aAAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AAEvC,EAAA,MAAM,YAAYlB,MAAAA,CAAOC,QAAAA,CAAS,KAAA,CAAM,SAAS,GAAG,QAAQ,CAAA;AAC5D,EAAA,MAAM,UAAUD,MAAAA,CAAOC,QAAAA,CAAS,KAAA,CAAM,OAAO,GAAG,QAAQ,CAAA;AAGxD,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAiB;AACpC,IAAA,OAAO,KACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC,CAAA,CACf,KAAK,EAAE,CAAA,CACP,aAAY,CACZ,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,uBACE7D,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,qFAAA;AAAA,QACA,kBAAA;AAAA,QACA,MAAA,CAAO,MAAA;AAAA,QACP,MAAA,CAAO;AAAA,OACT;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,kBAAA,EAChB,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,eAAY,GAAA,EAAK,KAAA,CAAM,KAAK,WAAA,EAAa,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,0BAChEA,GAAAA,CAAC,cAAA,EAAA,EAAgB,sBAAY,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAE;AAAA,SAAA,EAChD,CAAA;AAAA,wBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAEZ,QAAA,EAAA;AAAA,UAAA,UAAA,oBACCJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,0BAIjEA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wBAAA,EAA0B,gBAAM,KAAA,EAAM,CAAA;AAAA,0BAGpDA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,+BAAA,EAAiC,QAAA,EAAA,KAAA,CAAM,KAAK,IAAA,EAAK,CAAA;AAAA,0BAG9DI,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EACV,QAAA,EAAA;AAAA,YAAA,SAAA;AAAA,YAAU,KAAA;AAAA,YAAI;AAAA,WAAA,EACjB,CAAA;AAAA,UAGC,KAAA,CAAM,+BACLJ,GAAAA,CAAC,OAAE,SAAA,EAAU,iDAAA,EACV,gBAAM,WAAA,EACT;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;ACzPA,IAAM,WAAA,GAAiF;AAAA,EACrF,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAMqF,IAAAA,EAAM,OAAO,aAAA,EAAc;AAAA,EAChD,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,OAAO,cAAA,EAAe;AAAA,EACrD,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,OAAO,eAAA,EAAgB;AAAA,EACvD,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,OAAO,cAAA,EAAe;AAAA,EACrD,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,OAAO,gBAAA;AAChD,CAAA;AAUO,SAAS,cAAA,CAAe;AAAA,EAC7B,SAAA;AAAA,EACA,gBAAA,GAAmB,IAAA;AAAA,EACnB,cAAA,GAAiB,IAAA;AAAA,EACjB,gBAAA,GAAmB,KAAA;AAAA;AAAA,EACnB,SAAA,GAAY,IAAA;AAAA,EACZ,aAAA,GAAgB,IAAA;AAAA,EAChB,YAAA,GAAe,IAAA;AAAA,EACf,UAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,MACE,gBAAA,EAAiB;AAErB,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AACzC,EAAA,MAAM,aAAa,cAAA,CAAe,MAAA;AAGlC,EAAA,MAAM,EAAE,OAAO,UAAA,EAAY,GAAA,EAAK,UAAS,GAAI,gBAAA,CAAiB,cAAc,IAAI,CAAA;AAChF,EAAA,MAAM,cAAA,GAAiBtB,gBAAAA,CAAgB,UAAA,EAAY,QAAQ,CAAA;AAG3D,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAiB;AACpC,IAAA,OAAO,KACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC,CAAA,CACf,KAAK,EAAE,CAAA,CACP,aAAY,CACZ,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,EACf,CAAA;AAGA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,eAAA,iBAAgB,IAAI,MAAM,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,KAAA,uBAAY,IAAA,EAAK;AAEvB,EAAA,uBACE3D,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,+FAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAEb,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,gBAAA;AAAA,cACT,SAAA,EAAU,6IAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kHAAA,EACV,QAAA,EAAAgE,OAAO,KAAA,EAAO,KAAK,CAAA,CAAE,WAAA,EAAY,EACpC,CAAA;AAAA,gCACAhE,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,kEAAA,EACV,QAAA,EAAA,KAAA,CAAM,SAAQ,EACjB;AAAA;AAAA;AAAA,WACF;AAAA,0BAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAEb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EACb,QAAA,EAAA;AAAA,gBAAA4D,MAAAA,CAAO,cAAc,MAAM,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,aAAa,WAAA;AAAY,eAAA,EAC3D,CAAA;AAAA,8BACA5D,IAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,WAAU,QAAA,EAChC,QAAA,EAAA;AAAA,gBAAA,UAAA;AAAA,gBAAW,QAAA;AAAA,gBAAO,UAAA,KAAe,IAAI,GAAA,GAAM;AAAA,eAAA,EAC9C;AAAA,aAAA,EACF,CAAA;AAAA,4BAGAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,SAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,SAAA,EAAU,uBAAA;AAAA,kBACV,OAAA,EAAS,YAAA;AAAA,kBAET,QAAA,EAAA;AAAA,oCAAAJ,GAAAA,CAACsF,aAAA,EAAY,CAAA;AAAA,oCACbtF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,UAAA,EAAQ;AAAA;AAAA;AAAA,eACpC;AAAA,8BAEAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCACV,QAAA,EAAA,cAAA,EACH,CAAA;AAAA,8BAEAI,IAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,SAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,SAAA,EAAU,uBAAA;AAAA,kBACV,OAAA,EAAS,QAAA;AAAA,kBAET,QAAA,EAAA;AAAA,oCAAAJ,GAAAA,CAACyC,cAAA,EAAa,CAAA;AAAA,oCACdzC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,MAAA,EAAI;AAAA;AAAA;AAAA;AAChC,aAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EAEZ,QAAA,EAAA;AAAA,YAAA,gBAAA,oBACCJ,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EACZ,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU;AAClC,cAAA,MAAMuF,QAAO,MAAA,CAAO,IAAA;AACpB,cAAA,MAAM,UAAU,KAAA,KAAU,CAAA;AAC1B,cAAA,MAAM,MAAA,GAAS,KAAA,KAAU,WAAA,CAAY,MAAA,GAAS,CAAA;AAC9C,cAAA,MAAM,QAAA,GAAW,SAAS,MAAA,CAAO,IAAA;AAEjC,cAAA,uBACEvF,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBAEC,cAAY,MAAA,CAAO,KAAA;AAAA,kBACnB,IAAA,EAAK,MAAA;AAAA,kBACL,OAAA,EAAS,WAAW,SAAA,GAAY,OAAA;AAAA,kBAChC,SAAA,EAAW,EAAA;AAAA,oBACT,gCAAA;AAAA,oBACA,OAAA,IAAW,6BAAA;AAAA,oBACX,MAAA,IAAU,6BAAA;AAAA,oBACV,CAAC,OAAA,IAAW,CAAC,MAAA,IAAU;AAAA,mBACzB;AAAA,kBACA,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA;AAAA,kBAElC,QAAA,kBAAAA,GAAAA,CAACuF,KAAAA,EAAA,EAAK,aAAa,GAAA,EAAK;AAAA,iBAAA;AAAA,gBAZnB,MAAA,CAAO;AAAA,eAad;AAAA,YAEJ,CAAC,CAAA,EACH,CAAA;AAAA,YAID,cAAA,IAAkB,KAAA,CAAM,MAAA,GAAS,CAAA,oBAChCnF,IAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAO,cAAA,IAAkB,KAAA;AAAA,gBACzB,eAAe,CAAC,KAAA,KAAU,kBAAkB,KAAA,KAAU,KAAA,GAAQ,OAAO,KAAK,CAAA;AAAA,gBAE1E,QAAA,EAAA;AAAA,kCAAAJ,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,kBACvB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,kCACAI,IAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAM,KAAA,EACnB,QAAA,EAAA;AAAA,oCAAAJ,GAAAA,CAAC,cAAW,KAAA,EAAM,KAAA,EAChB,0BAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EAEb,QAAA,EAAA;AAAA,sCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACZ,QAAA,EAAA;AAAA,wBAAA,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,qBACtBA,IAAAA,CAAC,MAAA,EAAA,EAAqB,SAAA,EAAU,mCAAA,EAC9B,QAAA,EAAA;AAAA,0CAAAJ,IAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAK,WAAA,EAAa,GAAA,EAAK,KAAK,IAAA,EAAM,CAAA;AAAA,0CACpDA,IAAC,cAAA,EAAA,EAAe,SAAA,EAAU,eACvB,QAAA,EAAA,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EACxB;AAAA,yBAAA,EAAA,EAJW,IAAA,CAAK,EAKlB,CACD,CAAA;AAAA,wBACA,MAAM,MAAA,GAAS,CAAA,oBACdI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kHAAA,EAAmH,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,0BAC9H,MAAM,MAAA,GAAS;AAAA,yBAAA,EACnB;AAAA,uBAAA,EAEJ,CAAA;AAAA,sBAAM;AAAA,qBAAA,EAER,CAAA,EACF,CAAA;AAAA,oBACC,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVJ,GAAAA,CAAC,UAAA,EAAA,EAAyB,KAAA,EAAO,IAAA,CAAK,EAAA,EACpC,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sCAAAA,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,QAAA,EAChB,QAAA,EAAA;AAAA,wCAAAJ,IAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAK,WAAA,EAAa,GAAA,EAAK,KAAK,IAAA,EAAM,CAAA;AAAA,wCACpDA,IAAC,cAAA,EAAA,EAAe,SAAA,EAAU,eACvB,QAAA,EAAA,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EACxB;AAAA,uBAAA,EACF,CAAA;AAAA,sCACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,UAAA,EAAY,eAAK,IAAA,EAAK;AAAA,qBAAA,EACrC,CAAA,EAAA,EATe,IAAA,CAAK,EAUtB,CACD;AAAA,mBAAA,EACH;AAAA;AAAA;AAAA;AACF,WAAA,EAEJ,CAAA;AAAA,0BAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,YAAA,oBACCJ,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,OAAA,EAAS,eAAA;AAAA,gBACT,SAAA,EAAU,UAAA;AAAA,gBACV,YAAA,EAAW,mBAAA;AAAA,gBAEX,QAAA,kBAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,aAC/B;AAAA,YAED,iCACCI,IAAAA,CAAC,UAAO,OAAA,EAAS,UAAA,EAAY,WAAU,kBAAA,EACrC,QAAA,EAAA;AAAA,8BAAAJ,IAAC,IAAA,EAAA,EAAK,CAAA;AAAA,cAAE;AAAA,aAAA,EAEV;AAAA,WAAA,EAEJ;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAWO,SAAS,qBAAA,CAAsB;AAAA,EACpC,SAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,YAAA,GAAe,IAAA;AAAA,EACf,UAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,eAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,MACE,gBAAA,EAAiB;AAErB,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AACzC,EAAA,MAAM,aAAa,cAAA,CAAe,MAAA;AAClC,EAAA,MAAM,KAAA,uBAAY,IAAA,EAAK;AAEvB,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,eAAA,iBAAgB,IAAI,MAAM,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,8DAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,gBAAA;AAAA,cACT,SAAA,EAAU,0IAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qHAAA,EACV,QAAA,EAAAgE,OAAO,KAAA,EAAO,KAAK,CAAA,CAAE,WAAA,EAAY,EACpC,CAAA;AAAA,gCACAhE,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,kEAAA,EACV,QAAA,EAAA,KAAA,CAAM,SAAQ,EACjB;AAAA;AAAA;AAAA,WACF;AAAA,0BACAI,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,QAAG,SAAA,EAAU,uBAAA,EAAyB,UAAAgE,MAAAA,CAAO,YAAA,EAAc,UAAU,CAAA,EAAE,CAAA;AAAA,4BACxE5D,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA;AAAA,cAAA,UAAA;AAAA,cAAW;AAAA,aAAA,EAAO;AAAA,WAAA,EACrE;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,IAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,QAAO,SAAA,EAAU,QAAA,EAAS,OAAA,EAAS,YAAA,EAC9D,0BAAAA,GAAAA,CAACsF,WAAAA,EAAA,EAAY,SAAA,EAAU,UAAS,CAAA,EAClC,CAAA;AAAA,0BACAtF,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,MAAK,MAAA,EAAO,SAAA,EAAU,QAAA,EAAS,OAAA,EAAS,UAC9D,QAAA,kBAAAA,GAAAA,CAACyC,cAAA,EAAa,SAAA,EAAU,UAAS,CAAA,EACnC,CAAA;AAAA,0BAEArC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uFAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,MAAA;AAAA,gBACL,OAAA,EAAS,IAAA,KAAS,KAAA,GAAQ,SAAA,GAAY,OAAA;AAAA,gBACtC,SAAA,EAAU,4DAAA;AAAA,gBACV,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,gBAE5B,QAAA,kBAAAA,GAAAA,CAACqF,IAAAA,EAAA,EAAK,aAAa,GAAA,EAAK;AAAA;AAAA,aAC1B;AAAA,4BACArF,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,MAAA;AAAA,gBACL,OAAA,EAAS,IAAA,KAAS,MAAA,GAAS,SAAA,GAAY,OAAA;AAAA,gBACvC,SAAA,EAAU,2CAAA;AAAA,gBACV,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,gBAE7B,QAAA,kBAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,WAAA,EAAa,GAAA,EAAK;AAAA;AAAA,aAC7B;AAAA,4BACAA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,MAAA;AAAA,gBACL,OAAA,EAAS,IAAA,KAAS,OAAA,GAAU,SAAA,GAAY,OAAA;AAAA,gBACxC,SAAA,EAAU,4DAAA;AAAA,gBACV,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAO,CAAA;AAAA,gBAE9B,QAAA,kBAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,WAAA,EAAa,GAAA,EAAK;AAAA;AAAA;AAC7B,WAAA,EACF,CAAA;AAAA,UAEC,gCACCA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,OAAA,EAAS,eAAA;AAAA,cACT,SAAA,EAAU,aAAA;AAAA,cACV,YAAA,EAAW,mBAAA;AAAA,cAEX,QAAA,kBAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,WAC/B;AAAA,UAED,aAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,MAAK,IAAA,EAAK,OAAA,EAAS,UAAA,EAAY,SAAA,EAAU,cAC/C,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,UAAS,CAAA,EAC3B;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;ACnWA,IAAMwF,aAAAA,GAA2E;AAAA,EAC/E,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAW,aAAA,EAAc;AAAA,EACzD,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,WAAW,cAAA,EAAe;AAAA,EAC5D,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,WAAW,YAAA,EAAa;AAAA,EACtD,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,WAAW,eAAA,EAAgB;AAAA,EAC/D,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,WAAW,eAAA,EAAgB;AAAA,EAC/D,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,WAAW,YAAA;AACjD,CAAA;AAWO,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA,GAAO,KAAA;AAAA,EACP,KAAA;AAAA,EACA,WAAA,uBAAkB,IAAA,EAAK;AAAA,EACvB;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAa,WAAA,EAAa,KAAA,KAAU,gBAAA,EAAiB;AAGvE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUC,iBAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUA,iBAAS,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,iBAAS,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,iBAAS,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUA,iBAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUA,iBAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,iBAAsB,MAAM,CAAA;AAC5D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUA,iBAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAG5D,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI,IAAA,KAAS,UAAU,KAAA,EAAO;AAC5B,QAAA,MAAM,KAAA,GAAQxB,QAAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACtC,QAAA,MAAM,GAAA,GAAMA,QAAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAClC,QAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AACpB,QAAA,cAAA,CAAe,KAAA,CAAM,eAAe,EAAE,CAAA;AACtC,QAAA,YAAA,CAAaD,MAAAA,CAAO,KAAA,EAAO,YAAY,CAAC,CAAA;AACxC,QAAA,YAAA,CAAaA,MAAAA,CAAO,KAAA,EAAO,OAAO,CAAC,CAAA;AACnC,QAAA,UAAA,CAAWA,MAAAA,CAAO,GAAA,EAAK,YAAY,CAAC,CAAA;AACpC,QAAA,UAAA,CAAWA,MAAAA,CAAO,GAAA,EAAK,OAAO,CAAC,CAAA;AAC/B,QAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AACpB,QAAA,SAAA,CAAU,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,MACzB,CAAA,MAAO;AAEL,QAAA,MAAM,KAAA,GAAQ,WAAA;AACd,QAAA,MAAM,GAAA,GAAM0B,WAAWC,QAAAA,CAAS,WAAA,EAAa,YAAY,QAAA,EAAS,GAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAC3E,QAAA,QAAA,CAAS,EAAE,CAAA;AACX,QAAA,cAAA,CAAe,EAAE,CAAA;AACjB,QAAA,YAAA,CAAa3B,MAAAA,CAAO,KAAA,EAAO,YAAY,CAAC,CAAA;AACxC,QAAA,YAAA,CAAaA,MAAAA,CAAO,KAAA,EAAO,OAAO,CAAC,CAAA;AACnC,QAAA,UAAA,CAAWA,MAAAA,CAAO,GAAA,EAAK,YAAY,CAAC,CAAA;AACpC,QAAA,UAAA,CAAWA,MAAAA,CAAO,GAAA,EAAK,OAAO,CAAC,CAAA;AAC/B,QAAA,QAAA,CAAS,MAAM,CAAA;AACf,QAAA,SAAA,CAAU,aAAA,IAAiB,KAAA,CAAM,CAAC,CAAA,EAAG,MAAM,EAAE,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,OAAO,WAAA,EAAa,aAAA,EAAe,KAAK,CAAC,CAAA;AAEzD,EAAA,MAAM,YAAA,GAAe,OAAO,CAAA,KAAuB;AACjD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,IAAA,IAAI;AACF,MAAA,MAAM,CAAC,SAAA,EAAW,UAAA,EAAY,QAAQ,CAAA,GAAI,UAAU,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACzE,MAAA,MAAM,CAAC,WAAW,WAAW,CAAA,GAAI,UAAU,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAChE,MAAA,MAAM,CAAC,OAAA,EAAS,QAAA,EAAU,MAAM,CAAA,GAAI,QAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACjE,MAAA,MAAM,CAAC,SAAS,SAAS,CAAA,GAAI,QAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAE1D,MAAA,MAAM,aAAA,GAAgB,IAAI,IAAA,CAAK,SAAA,EAAW,aAAa,CAAA,EAAG,QAAA,EAAU,WAAW,WAAW,CAAA;AAC1F,MAAA,MAAM,WAAA,GAAc,IAAI,IAAA,CAAK,OAAA,EAAS,WAAW,CAAA,EAAG,MAAA,EAAQ,SAAS,SAAS,CAAA;AAE9E,MAAA,MAAM,eAAe,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAM,CAAA;AAEtD,MAAA,IAAI,IAAA,KAAS,UAAU,KAAA,EAAO;AAC5B,QAAA,MAAM,YAAA,GAAuB;AAAA,UAC3B,GAAG,KAAA;AAAA,UACH,KAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA,EAAW,cAAc,WAAA,EAAY;AAAA,UACrC,OAAA,EAAS,YAAY,WAAA,EAAY;AAAA,UACjC,KAAA;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,EAAA,EAAI,MAAA;AAAA,YACJ,IAAA,EAAM,cAAc,IAAA,IAAQ;AAAA;AAC9B,SACF;AACA,QAAA,WAAA,CAAY,YAAY,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,MAAM,QAAA,GAAmB;AAAA,UACvB,IAAI,eAAA,EAAgB;AAAA,UACpB,KAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA,EAAW,cAAc,WAAA,EAAY;AAAA,UACrC,OAAA,EAAS,YAAY,WAAA,EAAY;AAAA,UACjC,KAAA;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,EAAA,EAAI,MAAA;AAAA,YACJ,IAAA,EAAM,cAAc,IAAA,IAAQ;AAAA;AAC9B,SACF;AACA,QAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,MACnB;AAEA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,yBAAyB,KAAK,CAAA;AAAA,IAC9C,CAAA,SAAE;AACA,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,WAAA,CAAY,MAAM,EAAE,CAAA;AACpB,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEhE,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,cAClB,QAAA,kBAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,kBAAA,EACvB,QAAA,kBAAAI,IAAAA,CAAC,MAAA,EAAA,EAAK,UAAU,YAAA,EACd,QAAA,EAAA;AAAA,oBAAAA,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,WAAA,EAAA,EACE,QAAA,EAAA,IAAA,KAAS,MAAA,GAAS,eAAe,WAAA,EACpC,CAAA;AAAA,sBACAA,GAAAA,CAAC,iBAAA,EAAA,EACE,QAAA,EAAA,IAAA,KAAS,MAAA,GACN,sCACA,yCAAA,EACN;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAACU,MAAAA,EAAA,EAAM,OAAA,EAAQ,SAAQ,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBAC5BV,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,OAAA;AAAA,YACH,KAAA,EAAO,KAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,WAAA,EAAY,aAAA;AAAA,YACZ,QAAA,EAAQ;AAAA;AAAA;AACV,OAAA,EACF,CAAA;AAAA,sBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAACU,MAAAA,EAAA,EAAM,OAAA,EAAQ,eAAc,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,wBACxCV,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,aAAA;AAAA,YACH,KAAA,EAAO,WAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC9C,WAAA,EAAY,8BAAA;AAAA,YACZ,IAAA,EAAM;AAAA;AAAA;AACR,OAAA,EACF,CAAA;AAAA,sBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACU,MAAAA,EAAA,EAAM,OAAA,EAAQ,aAAY,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BACrCV,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,WAAA;AAAA,cACH,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,SAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC5C,QAAA,EAAQ;AAAA;AAAA;AACV,SAAA,EACF,CAAA;AAAA,wBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACU,MAAAA,EAAA,EAAM,OAAA,EAAQ,aAAY,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BACrCV,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,WAAA;AAAA,cACH,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,SAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC5C,QAAA,EAAQ;AAAA;AAAA;AACV,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACU,MAAAA,EAAA,EAAM,OAAA,EAAQ,WAAU,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,0BACjCV,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,SAAA;AAAA,cACH,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,OAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC1C,QAAA,EAAQ;AAAA;AAAA;AACV,SAAA,EACF,CAAA;AAAA,wBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACU,MAAAA,EAAA,EAAM,OAAA,EAAQ,WAAU,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,0BACjCV,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,SAAA;AAAA,cACH,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,OAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC1C,QAAA,EAAQ;AAAA;AAAA;AACV,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACU,MAAAA,EAAA,EAAM,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,0BACZN,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,KAAA,EAAO,eAAe,CAAC,CAAA,KAAM,QAAA,CAAS,CAAgB,CAAA,EACnE,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,iBACC,QAAA,kBAAAA,GAAAA,CAAC,eACC,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,qBAAA;AAAA,oBACAwF,cAAa,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA,EAAG;AAAA;AAC/C;AAAA,eACF;AAAA,cACCA,cAAa,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA,EAAG;AAAA,aAAA,EAChD,GACF,CAAA,EACF,CAAA;AAAA,4BACAxF,GAAAA,CAAC,aAAA,EAAA,EACE,UAAAwF,aAAAA,CAAa,GAAA,CAAI,CAAC,CAAA,qBACjBxF,GAAAA,CAAC,UAAA,EAAA,EAAyB,OAAO,CAAA,CAAE,KAAA,EACjC,0BAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,qBAAA,EAAuB,CAAA,CAAE,SAAS,CAAA,EAAG,CAAA;AAAA,cACxD,CAAA,CAAE;AAAA,aAAA,EACL,CAAA,EAAA,EAJe,CAAA,CAAE,KAKnB,CACD,CAAA,EACH;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,QAEC,MAAM,MAAA,GAAS,CAAA,oBACdI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACU,MAAAA,EAAA,EAAM,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,0BACfN,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,eAAe,SAAA,EACpC,QAAA,EAAA;AAAA,4BAAAJ,IAAC,aAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,WAAA,EAAA,EAAY,WAAA,EAAY,eAAc,CAAA,EACzC,CAAA;AAAA,4BACAA,GAAAA,CAAC,aAAA,EAAA,EACE,gBAAM,GAAA,CAAI,CAAC,yBACVA,GAAAA,CAAC,UAAA,EAAA,EAAyB,KAAA,EAAO,KAAK,EAAA,EACnC,QAAA,EAAA,IAAA,CAAK,QADS,IAAA,CAAK,EAEtB,CACD,CAAA,EACH;AAAA,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAI,IAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,gCAAA,EAErB,QAAA,EAAA;AAAA,MAAA,IAAA,KAAS,yBACRJ,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,YAAA;AAAA,UACT,QAAA,EAAU,YAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA,OAED,mBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,CAAA;AAAA,sBAIPI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG,QAAA,EAAA,QAAA,EAE5E,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,UAAU,YAAA,IAAgB,CAAC,KAAA,CAAM,IAAA,IACpD,QAAA,EAAA,YAAA,GAAe,WAAA,GAAc,IAAA,KAAS,MAAA,GAAS,iBAAiB,WAAA,EACnE;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AAUO,SAAS,aAAA,CAAc;AAAA,EAC5B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUyF,iBAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,gBAAA,EAAiB;AAEnC,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAuB;AAC3C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,EAAG;AAEnB,IAAA,MAAM,GAAA,GAAMC,WAAWC,QAAAA,CAAS,IAAA,EAAM,KAAK,QAAA,EAAS,GAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAE7D,IAAA,KAAA,CAAM;AAAA,MACJ,KAAA;AAAA,MACA,WAAA,EAAa,EAAA;AAAA,MACb,SAAA,EAAW,KAAK,WAAA,EAAY;AAAA,MAC5B,OAAA,EAAS,IAAI,WAAA,EAAY;AAAA,MACzB,KAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,KAAA,CAAM,CAAC,CAAA,EAAG,EAAA,IAAM,EAAA;AAAA,QACpB,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,IAAQ;AAAA;AAC1B,KACD,CAAA;AACD,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACEvF,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,YAAA,EAAc,WAAU,yBAAA,EACtC,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,+BAAA,EACZ,UAAAgE,MAAAA,CAAO,IAAA,EAAM,oBAAoB,CAAA,EACpC,CAAA;AAAA,oBACAhE,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,KAAA;AAAA,QACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACxC,WAAA,EAAY,WAAA;AAAA,QACZ,SAAA,EAAU,KAAA;AAAA,QACV,SAAA,EAAS;AAAA;AAAA,KACX;AAAA,oBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,IAAA,EAAK,IAAA,EAAK,QAAA,EAAU,CAAC,KAAA,CAAM,IAAA,EAAK,EAAG,QAAA,EAAA,KAAA,EAEzD,CAAA;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,YAAA,EAAc,QAAA,EAAA,cAAA,EAEzE;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACxXO,SAAS,uBAAA,GAA0B;AACxC,EAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAgB,GAAI,gBAAA,EAAiB;AAE3D,EAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,oBAEzDI,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,YAAA;AAAA,QACP,aAAA,EAAe,CAAC,KAAA,KAAU,eAAA,CAAgB,KAAsB,CAAA;AAAA,QAEhE,QAAA,EAAA;AAAA,0BAAAJ,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,QACvB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,0BAEAI,KAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,KAAA,EAAM,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,4BAC3BA,GAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,WAAU,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,4BACnCA,GAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,SAAQ,QAAA,EAAA,OAAA,EAAK;AAAA,WAAA,EACjC;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;ACfA,IAAM,YAAA,GAAe,MAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AACxD,EAAA,IAAI,MAAM,CAAA,EAAG,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,OAAO,OAAA,EAAQ;AACjD,EAAA,IAAI,MAAM,EAAA,EAAI,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,OAAO,OAAA,EAAQ;AACnD,EAAA,IAAI,MAAM,EAAA,EAAI,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,OAAO,cAAA,EAAe;AAC1D,EAAA,IAAI,CAAA,GAAI,EAAA,EAAI,OAAO,EAAE,KAAA,EAAO,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,CAAC,CAAA,GAAA,CAAA,EAAM;AACxD,EAAA,OAAO,EAAE,OAAO,MAAA,CAAO,CAAC,GAAG,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,EAAE,CAAA,GAAA,CAAA,EAAM;AACnD,CAAC,CAAA;AAEM,SAAS,uBAAA,GAA0B;AACxC,EAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAgB,GAAI,gBAAA,EAAiB;AAE3D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU4F,OAAA,CAAA,QAAA,CAAiB,aAAa,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,EAAA,EAAI,KAAK,CAAA,GAAUA,OAAA,CAAA,QAAA,CAAiB,aAAa,EAAE,CAAA;AAE1D,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,MAAM,MAAA,GAAS,EAAA,KAAO,CAAA,GAAI,EAAA,GAAK,EAAA;AAC/B,IAAA,eAAA,CAAgB,EAAE,IAAA,EAAM,EAAA,EAAI,MAAA,EAAQ,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,uBACExF,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,sBAEzDA,IAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,KAC9B,QAAA,kBAAAI,IAAAA,CAACmB,UAAA,EACC,QAAA,EAAA;AAAA,wBAAAvB,IAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,IAAA,EAAA,EAAK,SAAA,EAAU,UAAS,CAAA,EAC3B,CAAA;AAAA,wBAEAA,IAAC,cAAA,EAAA,EAAe,SAAA,EAAU,wBACxB,QAAA,kBAAAA,GAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,2HAAA,EAGH,CAAA,EACF;AAAA,OAAA,EACF,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,OAAE,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBACPI,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,OAAO,IAAI,CAAA,EAAG,aAAA,EAAe,CAAC,CAAA,KAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAA,EAClE,QAAA,EAAA;AAAA,wBAAAJ,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,QACvB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,wBACAA,IAAC,aAAA,EAAA,EACE,QAAA,EAAA,YAAA,CAAa,MAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,qBAC9BA,GAAAA,CAAC,UAAA,EAAA,EAA8B,OAAO,MAAA,CAAO,KAAA,EAC1C,iBAAO,KAAA,EAAA,EADO,MAAA,CAAO,KAExB,CACD,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAA,GAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,sBACLI,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,OAAO,EAAE,CAAA,EAAG,aAAA,EAAe,CAAC,CAAA,KAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA,EAC9D,QAAA,EAAA;AAAA,wBAAAJ,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,QACvB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,wBACAA,IAAC,aAAA,EAAA,EACE,QAAA,EAAA,YAAA,CAAa,MAAM,CAAC,CAAA,CAAE,IAAI,CAAC,MAAA,qBAC1BA,GAAAA,CAAC,UAAA,EAAA,EAA8B,OAAO,MAAA,CAAO,KAAA,EAC1C,iBAAO,KAAA,EAAA,EADO,MAAA,CAAO,KAExB,CACD,CAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAA,GAAAA,CAAC,MAAA,EAAA,EAAO,WAAU,YAAA,EAAa,OAAA,EAAS,aAAa,QAAA,EAAA,OAAA,EAErD;AAAA,GAAA,EACF,CAAA;AAEJ;AC1EA,IAAM,YAAA,GAAe;AAAA,EACnB,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,QAAA,EAAS;AAAA,EAC3B,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,QAAA,EAAS;AAAA,EAC3B,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,SAAA,EAAU;AAAA,EAC5B,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,WAAA,EAAY;AAAA,EAC9B,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,UAAA,EAAW;AAAA,EAC7B,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,QAAA,EAAS;AAAA,EAC3B,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,UAAA;AACpB,CAAA;AAGA,IAAM6F,aAAAA,GAAe,MAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AACxD,EAAA,IAAI,MAAM,CAAA,EAAG,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,OAAO,OAAA,EAAQ;AACjD,EAAA,IAAI,MAAM,EAAA,EAAI,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,OAAO,OAAA,EAAQ;AACnD,EAAA,IAAI,MAAM,EAAA,EAAI,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,OAAO,cAAA,EAAe;AAC1D,EAAA,IAAI,CAAA,GAAI,EAAA,EAAI,OAAO,EAAE,KAAA,EAAO,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,CAAC,CAAA,GAAA,CAAA,EAAM;AACxD,EAAA,OAAO,EAAE,OAAO,MAAA,CAAO,CAAC,GAAG,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,EAAE,CAAA,GAAA,CAAA,EAAM;AACnD,CAAC,CAAA;AAEM,SAAS,uBAAA,GAA0B;AACxC,EAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAgB,GAAI,gBAAA,EAAiB;AAE3D,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAUC,OAAA,CAAA,QAAA,CAAwB;AAAA,IAC9E,GAAG;AAAA,GACJ,CAAA;AAED,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAkB;AACzC,IAAA,oBAAA,CAAqB,CAAC,IAAA,MAAU;AAAA,MAC9B,GAAG,IAAA;AAAA,MACH,CAAC,KAAK,GACJ,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,GAAO,CAAA,IAAK,IAAA,CAAK,KAAK,CAAA,CAAE,KAAK,CAAA,GACrC,EAAE,IAAA,EAAM,CAAA,EAAG,EAAA,EAAI,CAAA,KACf,EAAE,IAAA,EAAM,CAAA,EAAG,EAAA,EAAI,EAAA;AAAG,KAC1B,CAAE,CAAA;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CACvB,KAAA,EACA,QAAA,EACA,KAAA,KACG;AACH,IAAA,MAAM,IAAA,GAAO,OAAO,KAAK,CAAA;AACzB,IAAA,oBAAA,CAAqB,CAAC,IAAA,KAAS;AAC7B,MAAA,MAAM,UAAA,GAAa,EAAE,GAAG,IAAA,CAAK,KAAK,CAAA,EAAG,CAAC,QAAQ,GAAG,IAAA,EAAK;AACtD,MAAA,IAAI,aAAa,IAAA,IAAQ,IAAA,KAAS,CAAA,IAAK,UAAA,CAAW,SAAS,CAAA,EAAG;AAC5D,QAAA,UAAA,CAAW,EAAA,GAAK,EAAA;AAAA,MAClB;AACA,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,CAAC,KAAK,GAAG,UAAA,EAAW;AAAA,IACxC,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAM,mBAAA,GAAsB,EAAE,GAAG,iBAAA,EAAkB;AAEnD,IAAA,KAAA,MAAW,SAAS,mBAAA,EAAqB;AACvC,MAAA,MAAM,GAAA,GAAM,mBAAA,CAAoB,QAAA,CAAS,KAAK,CAAC,CAAA;AAC/C,MAAA,MAAM,WAAA,GACJ,iBAAA,CAAkB,QAAA,CAAS,KAAK,CAAC,CAAA,CAAE,IAAA,GAAO,CAAA,IAC1C,iBAAA,CAAkB,QAAA,CAAS,KAAK,CAAC,EAAE,EAAA,GAAK,CAAA;AAE1C,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IAAI,GAAA,CAAI,IAAA,KAAS,CAAA,IAAK,GAAA,CAAI,OAAO,CAAA,EAAG;AAClC,UAAA,mBAAA,CAAoB,KAAK,CAAA,GAAI,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,EAAA,EAAG;AAAA,QACjD,WAAW,GAAA,CAAI,EAAA,KAAO,CAAA,IAAK,GAAA,CAAI,OAAO,CAAA,EAAG;AACvC,UAAA,mBAAA,CAAoB,KAAK,CAAA,GAAI,EAAE,GAAG,GAAA,EAAK,IAAI,EAAA,EAAG;AAAA,QAChD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,mBAAA,CAAoB,KAAK,CAAA,GAAI,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,EAAE;AAAA,MAChD;AAAA,IACF;AAEA,IAAA,eAAA,CAAgB,mBAAmB,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,uBACE1F,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,sBAEzDA,IAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,KAC9B,QAAA,kBAAAI,IAAAA,CAACmB,UAAA,EACC,QAAA,EAAA;AAAA,wBAAAvB,GAAAA,CAAC,kBACC,QAAA,kBAAAA,GAAAA,CAAC+F,MAAA,EAAK,SAAA,EAAU,UAAS,CAAA,EAC3B,CAAA;AAAA,wBAEA/F,IAAC,cAAA,EAAA,EAAe,SAAA,EAAU,wBACxB,QAAA,kBAAAA,GAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,+HAAA,EAGH,CAAA,EACF;AAAA,OAAA,EACF,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aACZ,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,GAAA,KAAQ;AACzB,MAAA,MAAM,WAAA,GACJ,iBAAA,CAAkB,GAAA,CAAI,KAAK,CAAA,CAAE,IAAA,GAAO,CAAA,IACpC,iBAAA,CAAkB,GAAA,CAAI,KAAK,CAAA,CAAE,EAAA,GAAK,CAAA;AAEpC,MAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAoB,SAAA,EAAU,4CAAA,EAC7B,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,WAAA;AAAA,cACT,eAAA,EAAiB,MAAM,eAAA,CAAgB,GAAA,CAAI,KAAK;AAAA;AAAA,WAClD;AAAA,0BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,cAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,SAAA,EAC9D,CAAA;AAAA,QAEC,WAAA,mBACCI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,4BAC9BI,IAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAO,MAAA,CAAO,iBAAA,CAAkB,GAAA,CAAI,KAAK,EAAE,IAAI,CAAA;AAAA,gBAC/C,eAAe,CAAC,CAAA,KACd,iBAAiB,GAAA,CAAI,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,gBAGvC,QAAA,EAAA;AAAA,kCAAAJ,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,QACvB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,kCACAA,IAAC,aAAA,EAAA,EACE,QAAA,EAAA6F,cAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,2BAC9B7F,GAAAA,CAAC,UAAA,EAAA,EAA8B,KAAA,EAAO,MAAA,CAAO,KAAA,EAC1C,iBAAO,KAAA,EAAA,EADO,MAAA,CAAO,KAExB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,WAAA,EACF,CAAA;AAAA,0BAEAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,4BAC5BI,IAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAO,MAAA,CAAO,iBAAA,CAAkB,GAAA,CAAI,KAAK,EAAE,EAAE,CAAA;AAAA,gBAC7C,eAAe,CAAC,CAAA,KACd,iBAAiB,GAAA,CAAI,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,gBAGrC,QAAA,EAAA;AAAA,kCAAAJ,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,QACvB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,kCACAA,IAAC,aAAA,EAAA,EACE,QAAA,EAAA6F,cAAa,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,qBAC1B7F,GAAAA,CAAC,UAAA,EAAA,EAA8B,OAAO,MAAA,CAAO,KAAA,EAC1C,iBAAO,KAAA,EAAA,EADO,MAAA,CAAO,KAExB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,WAAA,EACF;AAAA,SAAA,EACF,CAAA,mBAEAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+CAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,0BACzBA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,QAAA,EAAM;AAAA,SAAA,EAClC;AAAA,OAAA,EAAA,EAzDM,IAAI,KA2Dd,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,oBAEAA,GAAAA,CAAC,MAAA,EAAA,EAAO,WAAU,YAAA,EAAa,OAAA,EAAS,YAAY,QAAA,EAAA,OAAA,EAEpD;AAAA,GAAA,EACF,CAAA;AAEJ;ACpKO,SAAS,uBAAA,CAAwB;AAAA,EACtC,SAAA;AAAA,EACA,gBAAA,GAAmB,IAAA;AAAA,EACnB,gBAAA,GAAmB,IAAA;AAAA,EACnB,gBAAA,GAAmB;AACrB,CAAA,EAAiC;AAC/B,EAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAChD,QAAA,EAAA;AAAA,IAAA,gBAAA,oBAAoBJ,IAAC,uBAAA,EAAA,EAAwB,CAAA;AAAA,IAC7C,gBAAA,oBAAoBA,GAAAA,CAAC,uBAAA,EAAA,EAAwB,CAAA;AAAA,IAC7C,gBAAA,oBAAoBA,GAAAA,CAAC,uBAAA,EAAA,EAAwB;AAAA,GAAA,EAChD,CAAA;AAEJ;AAUO,SAAS,sBAAA,CAAuB;AAAA,EACrC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA,GAAmB,IAAA;AAAA,EACnB,gBAAA,GAAmB,IAAA;AAAA,EACnB,gBAAA,GAAmB;AACrB,CAAA,EAAgC;AAC9B,EAAA,uBACEA,IAAC,MAAA,EAAA,EAAO,IAAA,EAAY,cAClB,QAAA,kBAAAI,IAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,UAAA,EACvB,QAAA,EAAA;AAAA,oBAAAA,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,yBAAA,EACrB,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAACgG,QAAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,QAAE;AAAA,OAAA,EAEjC,CAAA;AAAA,sBACAhG,GAAAA,CAAC,iBAAA,EAAA,EAAkB,QAAA,EAAA,+CAAA,EAEnB;AAAA,KAAA,EACF,CAAA;AAAA,oBACAA,GAAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA;AAAA;AACF,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAUO,SAAS,sBAAA,CAAuB;AAAA,EACrC,OAAA;AAAA,EACA;AACF,CAAA,EAAgC;AAC9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,MACnC,YAAA,EAAW,mBAAA;AAAA,MAEX,QAAA,kBAAAA,GAAAA,CAACgG,QAAAA,EAAA,EAAS,WAAU,QAAA,EAAS;AAAA;AAAA,GAC/B;AAEJ;AC/EA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUC,iBAAS,KAAK,CAAA;AAElD,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACrC,IAAA,UAAA,CAAW,MAAM,OAAO,CAAA;AAExB,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAA+B;AAC/C,MAAA,UAAA,CAAW,MAAM,OAAO,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,KAAA,CAAM,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACzC,IAAA,OAAO,MAAM,KAAA,CAAM,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EAC3D,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,OAAA;AACT;AAeO,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,QAAA,GAAW,IAAA;AAAA,EACX,UAAA,GAAa,IAAA;AAAA,EACb,aAAA,GAAgB,IAAA;AAAA,EAChB,YAAA,GAAe,IAAA;AAAA,EACf,cAAA,GAAiB,IAAA;AAAA,EACjB,YAAA,GAAe,CAAA;AAAA,EACf,eAAA,GAAkB,CAAA;AAAA,EAClB,MAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,uBACEjG,IAAC,qBAAA,EAAA,EAAuB,GAAG,eACzB,QAAA,kBAAAA,GAAAA,CAAC,gBACC,QAAA,kBAAAA,GAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA;AAAA,KAEJ,CAAA,EACF,CAAA;AAEJ;AAeA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,gBAAA,EAAiB;AAC3C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUiG,iBAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAUA,iBAAS,KAAK,CAAA;AACxE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,iBAAwB,IAAI,CAAA;AAC5E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,iBAAyB,KAAK,CAAA;AACxE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAUA,OAAA,CAAA,QAAA,iBAAS,IAAI,MAAM,CAAA;AAG/D,EAAA,MAAM,QAAA,GAAW,cAAc,oBAAoB,CAAA;AACnD,EAAA,MAAM,SAAA,GAAY,OAAA,KAAY,MAAA,GAAS,QAAA,GAAW,OAAA;AAElD,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,cAAA,iBAAe,IAAI,MAAM,CAAA;AACzB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAkB;AAC1C,IAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,IAAA,aAAA,CAAc,MAAM,CAAA;AACpB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAAe;AACtC,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,EAAY,MAAA,KAAqB;AAExD,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,EAAY,IAAA,EAAc,MAAA,KAAmB;AACpE,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,MAAM,WAAA,GAAc,IAAI,IAAA,CAAK,IAAI,CAAA;AACjC,IAAA,WAAA,CAAY,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AACvC,IAAA,cAAA,CAAe,WAAW,CAAA;AAC1B,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,WAAW,IAAA,GAAO,KAAA;AAClC,EAAA,MAAMC,SAAAA,GAAU,WAAW,WAAA,GAAc,KAAA;AAEzC,EAAA,uBACE9F,IAAAA,CAAAoC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAxC,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,8BAAA,EAAgC,SAAS,GAC1D,QAAA,kBAAAI,IAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,wDAAA;AAAA,UACA,CAAC,QAAA,IAAY;AAAA,SACf;AAAA,QAGC,QAAA,EAAA;AAAA,UAAA,UAAA,KACC,4BACEJ,GAAAA;AAAA,YAAC,qBAAA;AAAA,YAAA;AAAA,cACC,aAAA;AAAA,cACA,YAAA;AAAA,cACA,UAAA,EAAY,cAAA;AAAA,cACZ,eAAA,EAAiB;AAAA;AAAA,8BAGnBA,GAAAA;AAAA,YAAC,cAAA;AAAA,YAAA;AAAA,cACC,aAAA;AAAA,cACA,YAAA;AAAA,cACA,UAAA,EAAY,cAAA;AAAA,cACZ,eAAA,EAAiB;AAAA;AAAA,WACnB,CAAA;AAAA,0BAKJA,GAAAA,CAACkG,SAAAA,EAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,QAAA,GAAW,KAAA,GAAQ,EAAE,CAAA,EACpE,QAAA,kBAAAlG,GAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,YAAA;AAAA,cACA,eAAA;AAAA,cACA,YAAA,EAAc,gBAAA;AAAA,cACd,WAAA,EAAa,eAAA;AAAA,cACb,WAAA,EAAa,eAAA;AAAA,cACb,WAAA,EAAa;AAAA;AAAA,WACf,EACF;AAAA;AAAA;AAAA,KACF,EAEF,CAAA;AAAA,oBAGAA,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,UAAA;AAAA,QACN,YAAA,EAAc,aAAA;AAAA,QACd,IAAA,EAAM,UAAA;AAAA,QACN,KAAA,EAAO,aAAA;AAAA,QACP;AAAA;AAAA,KACF;AAAA,IAGC,gCACCA,GAAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,kBAAA;AAAA,QACN,YAAA,EAAc;AAAA;AAAA;AAChB,GAAA,EAEJ,CAAA;AAEJ;AAYA,SAAS,YAAA,CAAa;AAAA,EACpB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,OAAA;AACH,MAAA,uBACEA,GAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,QAAA;AAAA,UACV,YAAA;AAAA,UACA,eAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ,KAAK,MAAA;AACH,MAAA,uBACEA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,QAAA;AAAA,UACV,YAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ,KAAK,KAAA;AACH,MAAA,uBACEA,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,QAAA;AAAA,UACV,YAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ,KAAK,MAAA;AACH,MAAA,uBACEA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,QAAA;AAAA,UACV,YAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ,KAAK,QAAA;AACH,MAAA,uBACEA,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,QAAA;AAAA,UACV,YAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AACE,MAAA,OAAO,IAAA;AAAA;AAEb","file":"index.js","sourcesContent":["import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground border border-input hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n \"icon-sm\": \"h-8 w-8\",\n \"icon-lg\": \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant || \"default\"}\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { Separator } from \"./separator\"\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2\",\n {\n variants: {\n orientation: {\n horizontal:\n \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\",\n vertical:\n \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n }\n)\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n className={cn(\n \"bg-muted flex items-center gap-2 rounded-md border px-4 text-sm font-medium shadow-xs [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn(\n \"bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-4 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Textarea } from \"./textarea\"\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group border-input dark:bg-input/30 relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Focus state.\n \"has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-[3px]\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className\n )}\n {...props}\n />\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n \"text-sm shadow-none flex gap-2 items-center\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n sm: \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [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-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] 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","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.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}: React.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 \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 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-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\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 >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.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\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm 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 >\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 SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\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 * as React from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction NativeSelect({ className, ...props }: React.ComponentProps<\"select\">) {\n return (\n <div\n className=\"group/native-select relative w-fit has-[select:disabled]:opacity-50\"\n data-slot=\"native-select-wrapper\"\n >\n <select\n data-slot=\"native-select\"\n className={cn(\n \"border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground bg-background dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 appearance-none rounded-full border pl-4 py-2 pr-8 text-sm shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n <ChevronDownIcon\n className=\"text-muted-foreground pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 opacity-50 select-none\"\n aria-hidden=\"true\"\n data-slot=\"native-select-icon\"\n />\n </div>\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return <option data-slot=\"native-select-option\" {...props} />\n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n <optgroup\n data-slot=\"native-select-optgroup\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-primary data-[state=on]:text-primary-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n 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","\"use client\"\n\nimport * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { toggleVariants } from \"./toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, spacing }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.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 toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n \"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10\",\n \"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\ninterface ThemeSwitchProps {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n disabled?: boolean\n className?: string\n /** Size variant */\n size?: \"sm\" | \"default\" | \"lg\"\n}\n\n/**\n * ThemeSwitch - A toggle switch for light/dark mode with sun/moon icons\n * \n * The thumb displays a sun icon when in light mode (unchecked) and\n * a moon icon when in dark mode (checked).\n */\nfunction ThemeSwitch({\n checked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n className,\n size = \"default\",\n}: ThemeSwitchProps) {\n const [isChecked, setIsChecked] = React.useState(defaultChecked)\n \n // Use controlled or uncontrolled state\n const isControlled = checked !== undefined\n const currentChecked = isControlled ? checked : isChecked\n\n const handleClick = () => {\n if (disabled) return\n \n const newValue = !currentChecked\n if (!isControlled) {\n setIsChecked(newValue)\n }\n onCheckedChange?.(newValue)\n }\n\n const sizeClasses = {\n sm: {\n track: \"h-5 w-9\",\n thumb: \"size-4\",\n icon: \"h-2.5 w-2.5\",\n translate: \"data-[state=checked]:translate-x-4\",\n },\n default: {\n track: \"h-6 w-11\",\n thumb: \"size-5\",\n icon: \"h-3 w-3\",\n translate: \"data-[state=checked]:translate-x-5\",\n },\n lg: {\n track: \"h-7 w-14\",\n thumb: \"size-6\",\n icon: \"h-3.5 w-3.5\",\n translate: \"data-[state=checked]:translate-x-7\",\n },\n }\n\n const sizes = sizeClasses[size]\n\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={currentChecked}\n aria-label={currentChecked ? \"Switch to light mode\" : \"Switch to dark mode\"}\n data-slot=\"theme-switch\"\n data-state={currentChecked ? \"checked\" : \"unchecked\"}\n disabled={disabled}\n onClick={handleClick}\n className={cn(\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full\",\n \"border border-transparent shadow-xs transition-all outline-none\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"bg-input data-[state=checked]:bg-primary\",\n sizes.track,\n className\n )}\n >\n <span\n data-state={currentChecked ? \"checked\" : \"unchecked\"}\n className={cn(\n \"pointer-events-none flex items-center justify-center rounded-full\",\n \"bg-white shadow-lg ring-0 transition-transform\",\n \"data-[state=unchecked]:translate-x-0.5\",\n sizes.thumb,\n sizes.translate\n )}\n >\n {currentChecked ? (\n <MoonIcon className={cn(sizes.icon, \"text-primary\")} />\n ) : (\n <SunIcon className={cn(sizes.icon, \"text-muted-foreground\")} />\n )}\n </span>\n </button>\n )\n}\n\n// Sun icon component\nfunction SunIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n )\n}\n\n// Moon icon component\nfunction MoonIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />\n </svg>\n )\n}\n\nexport { ThemeSwitch, type ThemeSwitchProps }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\n// ToolBarCanvas Container\nfunction ToolBarCanvas({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"toolbar-canvas\"\n className={cn(\n \"inline-flex items-center gap-1 rounded-full bg-background border border-input p-1.5\",\n className\n )}\n {...props}\n />\n )\n}\n\n// ToolBarCanvas Divider\nfunction ToolBarCanvasDivider({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"toolbar-canvas-divider\"\n className={cn(\"w-px h-6 mx-1.5 bg-foreground/20\", className)}\n {...props}\n />\n )\n}\n\n// ToolBarCanvas Group - for grouping items\nfunction ToolBarCanvasGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"toolbar-canvas-group\"\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\n// ToolBarCanvas Button variants\nconst toolBarCanvasButtonVariants = cva(\n \"inline-flex items-center justify-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n size: {\n default: \"size-10\",\n sm: \"size-8\",\n lg: \"size-12\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n// ToolBarCanvas Button (Toggle)\nfunction ToolBarCanvasButton({\n className,\n size,\n children,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toolBarCanvasButtonVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toolbar-canvas-button\"\n className={cn(\n toolBarCanvasButtonVariants({ size }),\n \"bg-transparent text-foreground/70 hover:bg-muted hover:text-foreground\",\n \"data-[state=on]:bg-primary data-[state=on]:text-primary-foreground\",\n \"[&_svg]:size-5 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n </TogglePrimitive.Root>\n )\n}\n\nexport {\n ToolBarCanvas,\n ToolBarCanvasButton,\n ToolBarCanvasDivider,\n ToolBarCanvasGroup,\n toolBarCanvasButtonVariants,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\n// PlayerCanvas Container - outer wrapper for layout\nfunction PlayerCanvas({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"player-canvas\"\n className={cn(\n \"relative flex flex-col gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Controls - the main control area (pill-shaped)\nfunction PlayerCanvasControls({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"player-canvas-controls\"\n className={cn(\n \"flex items-center gap-2 px-1.5 py-1.5 rounded-full bg-background border border-input\",\n className\n )}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Play Button - large circular play/pause button\nconst playerCanvasPlayButtonVariants = cva(\n \"inline-flex items-center justify-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-white hover:opacity-90\",\n {\n variants: {\n size: {\n default: \"size-14\",\n sm: \"size-10\",\n lg: \"size-16\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\ninterface PlayerCanvasPlayButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof playerCanvasPlayButtonVariants> {\n isPlaying?: boolean\n}\n\nfunction PlayerCanvasPlayButton({\n className,\n size,\n isPlaying,\n children,\n style,\n ...props\n}: PlayerCanvasPlayButtonProps) {\n return (\n <button\n data-slot=\"player-canvas-play-button\"\n data-playing={isPlaying}\n className={cn(\n playerCanvasPlayButtonVariants({ size }),\n \"[&_svg]:size-6 [&_svg]:shrink-0\",\n className\n )}\n style={{\n backgroundColor: \"var(--j3m-orange-8)\",\n ...style,\n }}\n {...props}\n >\n {children}\n </button>\n )\n}\n\n// PlayerCanvas Skip Button - smaller navigation buttons\nconst playerCanvasSkipButtonVariants = cva(\n \"inline-flex items-center justify-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-transparent text-foreground/60 hover:text-foreground hover:bg-muted\",\n {\n variants: {\n size: {\n default: \"size-10\",\n sm: \"size-8\",\n lg: \"size-12\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nfunction PlayerCanvasSkipButton({\n className,\n size,\n children,\n ...props\n}: React.ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof playerCanvasSkipButtonVariants>) {\n return (\n <button\n data-slot=\"player-canvas-skip-button\"\n className={cn(\n playerCanvasSkipButtonVariants({ size }),\n \"[&_svg]:size-5 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\n// PlayerCanvas Divider\nfunction PlayerCanvasDivider({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"player-canvas-divider\"\n className={cn(\"w-px h-10 mx-2 bg-foreground/15\", className)}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Info - timeline/date section\nfunction PlayerCanvasInfo({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"player-canvas-info\"\n className={cn(\"flex flex-col justify-center flex-1 min-w-0\", className)}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Label - small label text\nfunction PlayerCanvasLabel({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"player-canvas-label\"\n className={cn(\n \"text-xs font-medium text-foreground/50 uppercase tracking-wider\",\n className\n )}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Title - main title/date text\nfunction PlayerCanvasTitle({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"player-canvas-title\"\n className={cn(\n \"text-lg font-semibold text-foreground truncate\",\n className\n )}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Action Button - more options button\nfunction PlayerCanvasActionButton({\n className,\n children,\n ...props\n}: React.ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <button\n data-slot=\"player-canvas-action-button\"\n className={cn(\n \"inline-flex items-center justify-center size-10 rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-transparent text-foreground/40 hover:text-foreground hover:bg-muted\",\n \"[&_svg]:size-5 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\n// PlayerCanvas Progress - progress bar with glow (floating below controls)\ninterface PlayerCanvasProgressProps extends React.ComponentProps<\"div\"> {\n value?: number\n max?: number\n}\n\nfunction PlayerCanvasProgress({\n className,\n value = 0,\n max = 100,\n ...props\n}: PlayerCanvasProgressProps) {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100))\n\n return (\n <div\n data-slot=\"player-canvas-progress\"\n className={cn(\"relative h-2 w-full rounded-full bg-foreground/10 overflow-hidden\", className)}\n {...props}\n >\n <div\n data-slot=\"player-canvas-progress-bar\"\n className=\"absolute inset-y-0 left-0 rounded-full transition-all duration-200\"\n style={{\n width: `${percentage}%`,\n backgroundColor: \"var(--j3m-orange-8)\",\n }}\n />\n </div>\n )\n}\n\nexport {\n PlayerCanvas,\n PlayerCanvasControls,\n PlayerCanvasPlayButton,\n PlayerCanvasSkipButton,\n PlayerCanvasDivider,\n PlayerCanvasInfo,\n PlayerCanvasLabel,\n PlayerCanvasTitle,\n PlayerCanvasActionButton,\n PlayerCanvasProgress,\n playerCanvasPlayButtonVariants,\n playerCanvasSkipButtonVariants,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"../lib/utils\"\nimport { Label } from \"./label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","\"use client\"\n\nimport { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { Label } from \"./label\"\nimport { Separator } from \"./separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n \"data-[variant=label]:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive text-sm font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst cardVariants = cva(\n \"rounded-xl text-card-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-card border\",\n glass: [\n \"glass-context\", // Enables glass semantic token overrides for children\n \"bg-[var(--j3m-glass-frosted-card)]\",\n \"backdrop-blur-[var(--j3m-blur-frosted)]\",\n \"glass-border-gradient\",\n \"shadow-[var(--j3m-glass-shadow-md)]\",\n ].join(\" \"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface CardProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof cardVariants> {}\n\nfunction Card({ className, variant, ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n className={cn(cardVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\"flex flex-col gap-1.5 p-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold tracking-tight\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.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 CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"p-6 pt-0\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n )\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent, cardVariants }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\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 }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.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 }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover: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 }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.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 {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"bg-background text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted flex size-full items-center justify-center rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.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 \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_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 ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.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(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.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}: React.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 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.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 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\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","/**\n * User Avatars Dropdown Component\n * \n * A reusable component that displays stacked user avatars with a dropdown\n * for selection. Shows first N avatars with \"+X\" overflow indicator.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\"\n\nexport interface UserAvatarItem {\n id: string\n name: string\n image?: string\n}\n\nexport interface UserAvatarsDropdownProps {\n users: UserAvatarItem[]\n selectedUserId: string | null\n onSelect: (userId: string | null) => void\n maxVisible?: number\n label?: string\n className?: string\n}\n\nexport function UserAvatarsDropdown({\n users,\n selectedUserId,\n onSelect,\n maxVisible = 2,\n label = \"All\",\n className,\n}: UserAvatarsDropdownProps) {\n const visibleUsers = users.slice(0, maxVisible)\n const overflowCount = Math.max(0, users.length - maxVisible)\n \n // Get initials from name\n const getInitials = (name: string) => {\n return name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n }\n\n // Get selected user name for display\n const selectedUser = users.find((u) => u.id === selectedUserId)\n const displayLabel = selectedUserId ? selectedUser?.name || \"User\" : label\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex items-center gap-2 rounded border border-border bg-background px-3 py-1.5 text-sm transition-colors\",\n \"hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className\n )}\n >\n {/* Stacked avatars */}\n <div className=\"flex -space-x-2\">\n {visibleUsers.map((user) => (\n <Avatar\n key={user.id}\n className=\"size-6 border-2 border-background\"\n >\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback className=\"text-[10px]\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n ))}\n {overflowCount > 0 && (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-background bg-muted text-[10px] font-medium\">\n +{overflowCount}\n </div>\n )}\n </div>\n \n {/* Label */}\n <span className=\"font-medium\">{displayLabel}</span>\n \n {/* Chevron */}\n <ChevronDownIcon className=\"size-4 text-muted-foreground\" />\n </button>\n </DropdownMenuTrigger>\n \n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {/* All users option */}\n <DropdownMenuItem\n onClick={() => onSelect(null)}\n className=\"flex items-center justify-between\"\n >\n <span>All users</span>\n {selectedUserId === null && <CheckIcon className=\"size-4\" />}\n </DropdownMenuItem>\n \n <DropdownMenuSeparator />\n \n {/* Individual users */}\n {users.map((user) => (\n <DropdownMenuItem\n key={user.id}\n onClick={() => onSelect(user.id)}\n className=\"flex items-center justify-between\"\n >\n <div className=\"flex items-center gap-2\">\n <Avatar className=\"size-5\">\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback className=\"text-[8px]\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n <span>{user.name}</span>\n </div>\n {selectedUserId === user.id && <CheckIcon className=\"size-4\" />}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\n","import { cn } from \"../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:border-input data-[state=inactive]:hover:bg-accent data-[state=inactive]:hover:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker>) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-card group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-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 formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none inline-flex items-center justify-center rounded-full hover:bg-muted/50 transition-colors\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none inline-flex items-center justify-center rounded-full hover:bg-muted/50 transition-colors\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"rounded-full [&_button]:ring-2 [&_button]:ring-primary/50\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\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 as React.Ref<HTMLDivElement>}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\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 ...props\n}: React.ComponentProps<typeof DayButton>) {\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-day={day.date.toLocaleDateString()}\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 \"rounded-full hover:bg-muted/50 transition-colors data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent/50 data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:ring-ring/50 flex aspect-square size-auto w-full min-w-(--cell-size) items-center justify-center leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./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 = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.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] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.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 React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.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: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\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 >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\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\nfunction CarouselItem({ className, ...props }: React.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\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.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 size-8 rounded-full\",\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 {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.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 size-8 rounded-full\",\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 {...props}\n >\n <ArrowRight />\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}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as RechartsPrimitive from \"recharts\"\n\nimport { cn } from \"../lib/utils\"\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode\n icon?: React.ComponentType\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n )\n}\n\ntype ChartContextProps = {\n config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nfunction useChart() {\n const context = React.useContext(ChartContext)\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\")\n }\n\n return context\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n ...props\n}: React.ComponentProps<\"div\"> & {\n config: ChartConfig\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >[\"children\"]\n}) {\n const uniqueId = React.useId()\n const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n )\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme || config.color\n )\n\n if (!colorConfig.length) {\n return null\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n itemConfig.color\n return color ? ` --color-${key}: ${color};` : null\n })\n .join(\"\\n\")}\n}\n`\n )\n .join(\"\\n\"),\n }}\n />\n )\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<\"div\"> & {\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: \"line\" | \"dot\" | \"dashed\"\n nameKey?: string\n labelKey?: string\n }) {\n const { config } = useChart()\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null\n }\n\n const [item] = payload\n const key = `${labelKey || item?.dataKey || item?.name || \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const value =\n !labelKey && typeof label === \"string\"\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n )\n }\n\n if (!value) {\n return null\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ])\n\n if (!active || !payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\"\n\n return (\n <div\n className={cn(\n \"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\",\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const indicatorColor = color || item.payload.fill || item.color\n\n return (\n <div\n key={item.dataKey}\n className={cn(\n \"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5\",\n indicator === \"dot\" && \"items-center\"\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n }\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\"\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = \"bottom\",\n nameKey,\n}: React.ComponentProps<\"div\"> &\n Pick<RechartsPrimitive.LegendProps, \"payload\" | \"verticalAlign\"> & {\n hideIcon?: boolean\n nameKey?: string\n }) {\n const { config } = useChart()\n\n if (!payload?.length) {\n return null\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className\n )}\n >\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item) => {\n const key = `${nameKey || item.dataKey || \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n return (\n <div\n key={item.value}\n className={cn(\n \"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3\"\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n )\n })}\n </div>\n )\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined\n\n let configLabelKey: string = key\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string\n }\n\n return configLabelKey in config\n ? config[configLabelKey]\n : config[key as keyof typeof config]\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n}\n","\"use client\"\n\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\n\nfunction AspectRatio({\n ...props\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\n return <AspectRatioPrimitive.Root data-slot=\"aspect-ratio\" {...props} />\n}\n\nexport { AspectRatio }\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 min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\",\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(\n \"flex max-w-sm flex-col items-center gap-2 text-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\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(\"text-lg 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-4 text-sm text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { Separator } from \"./separator\"\n\nfunction ItemGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"list\"\n data-slot=\"item-group\"\n className={cn(\"group/item-group flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction ItemSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"item-separator\"\n orientation=\"horizontal\"\n className={cn(\"my-0\", className)}\n {...props}\n />\n )\n}\n\nconst itemVariants = cva(\n \"group/item flex items-center border border-transparent text-sm rounded-md transition-colors [a]:hover:bg-accent/50 [a]:transition-colors duration-100 flex-wrap outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-border\",\n muted: \"bg-muted/50\",\n },\n size: {\n default: \"p-4 gap-4 \",\n sm: \"py-3 px-4 gap-2.5\",\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}: React.ComponentProps<\"div\"> &\n VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"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:self-start [&_svg]:pointer-events-none group-has-[[data-slot=item-description]]/item:translate-y-0.5\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"size-8 border rounded-sm bg-muted [&_svg:not([class*='size-'])]:size-4\",\n image:\n \"size-10 rounded-sm overflow-hidden [&_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}: React.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 }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-content\"\n className={cn(\n \"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-title\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"item-description\"\n className={cn(\n \"text-muted-foreground line-clamp-2 text-sm leading-normal font-normal text-balance\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemActions({ className, ...props }: React.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 }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-header\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-footer\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className\n )}\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 { cn } from \"../lib/utils\"\n\nfunction Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return (\n <kbd\n data-slot=\"kbd\"\n className={cn(\n \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none\",\n \"[&_svg:not([class*='size-'])]:size-3\",\n \"[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction KbdGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <kbd\n data-slot=\"kbd-group\"\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nexport { Kbd, KbdGroup }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"../lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Progress({\n className,\n value,\n ...props\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(\n \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"bg-primary h-full w-full flex-1 transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.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({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n CircleCheckIcon,\n InfoIcon,\n Loader2Icon,\n OctagonXIcon,\n TriangleAlertIcon,\n} from \"lucide-react\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\n// Hook to detect dark mode from document.documentElement\nfunction useDetectTheme(): \"light\" | \"dark\" {\n const [theme, setTheme] = React.useState<\"light\" | \"dark\">(\"light\")\n\n React.useEffect(() => {\n // Check initial state\n const isDark = document.documentElement.classList.contains(\"dark\")\n setTheme(isDark ? \"dark\" : \"light\")\n\n // Watch for changes\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === \"class\") {\n const isDark = document.documentElement.classList.contains(\"dark\")\n setTheme(isDark ? \"dark\" : \"light\")\n }\n })\n })\n\n observer.observe(document.documentElement, { attributes: true })\n return () => observer.disconnect()\n }, [])\n\n return theme\n}\n\nconst Toaster = ({ theme: themeProp, ...props }: ToasterProps) => {\n const detectedTheme = useDetectTheme()\n // Use provided theme prop, or fall back to detected theme\n const theme = themeProp ?? detectedTheme\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import { Loader2Icon, type LucideProps } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Spinner({ className, ...props }: LucideProps) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"size-4 animate-spin\", className)}\n {...props}\n />\n )\n}\n\nexport { Spinner }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"./tooltip\"\n\nconst deliveryIndicatorVariants = cva(\n \"inline-block rounded-full shrink-0\",\n {\n variants: {\n status: {\n \"on-time\": \"bg-[var(--j3m-green-9,#84EBB4)]\",\n \"delayed\": \"bg-[var(--j3m-yellow-9,#FFDB43)]\",\n \"critical\": \"bg-[var(--j3m-red-9,#FB3748)]\",\n \"pending\": \"bg-[var(--j3m-gray-6,#D2D2D2)]\",\n },\n size: {\n sm: \"h-1.5 w-3\",\n default: \"h-1.5 w-3\",\n lg: \"h-2 w-4\",\n },\n },\n defaultVariants: {\n status: \"pending\",\n size: \"default\",\n },\n }\n)\n\nexport type DeliveryStatus = \"on-time\" | \"delayed\" | \"critical\" | \"pending\"\n\nexport interface DeliveryIndicatorProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof deliveryIndicatorVariants> {\n /** The delivery status */\n status?: DeliveryStatus\n /** Optional label for accessibility and tooltip */\n label?: string\n /** Show tooltip on hover */\n showTooltip?: boolean\n}\n\nfunction DeliveryIndicator({\n className,\n status,\n size,\n label,\n showTooltip = false,\n ...props\n}: DeliveryIndicatorProps) {\n const indicator = (\n <span\n data-slot=\"delivery-indicator\"\n data-status={status}\n className={cn(deliveryIndicatorVariants({ status, size }), className)}\n aria-label={label || `Delivery status: ${status}`}\n role=\"img\"\n {...props}\n />\n )\n\n if (showTooltip && label) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{indicator}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return indicator\n}\n\nexport interface DeliveryIndicatorsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Array of delivery statuses to display */\n deliveries: Array<{\n status: DeliveryStatus\n label?: string\n }>\n /** Size of the indicators */\n size?: \"sm\" | \"default\" | \"lg\"\n /** Show tooltips on hover */\n showTooltips?: boolean\n}\n\n/**\n * A group of delivery indicators for displaying multiple deliveries\n */\nfunction DeliveryIndicators({\n className,\n deliveries,\n size = \"default\",\n showTooltips = false,\n ...props\n}: DeliveryIndicatorsProps) {\n return (\n <div\n data-slot=\"delivery-indicators\"\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n >\n {deliveries.map((delivery, index) => (\n <DeliveryIndicator\n key={index}\n status={delivery.status}\n size={size}\n label={delivery.label}\n showTooltip={showTooltips}\n />\n ))}\n </div>\n )\n}\n\nexport { DeliveryIndicator, DeliveryIndicators, deliveryIndicatorVariants }\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.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\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(\"hover:text-foreground transition-colors\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.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-foreground font-normal\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\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 * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button, buttonVariants } from \"./button\"\n\nfunction Pagination({ className, ...props }: React.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({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\n {...props}\n >\n <ChevronLeftIcon />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRightIcon />\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\nimport { ScrollArea } from \"./scroll-area\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <ScrollArea className=\"max-h-[300px]\">\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"scroll-py-1\",\n className\n )}\n {...props}\n />\n </ScrollArea>\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground data-[selected=true]:[&_svg]:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\nimport { Kbd } from \"./kbd\"\n\ninterface SearchTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Placeholder text shown in the search button */\n placeholder?: string\n /** Whether to show the keyboard shortcut hint */\n showShortcut?: boolean\n /** Custom keyboard shortcut to display (defaults to ⌘K) */\n shortcutKey?: string\n /** Whether to use the command modifier symbol (⌘ on Mac, Ctrl on others) */\n shortcutModifier?: string\n}\n\nconst SearchTrigger = React.forwardRef<HTMLButtonElement, SearchTriggerProps>(\n (\n {\n className,\n placeholder = \"Search...\",\n showShortcut = true,\n shortcutKey = \"K\",\n shortcutModifier = \"⌘\",\n ...props\n },\n ref\n ) => {\n return (\n <Button\n ref={ref}\n variant=\"outline\"\n data-slot=\"search-trigger\"\n className={cn(\n \"relative h-9 w-full justify-start rounded-full bg-background text-sm text-muted-foreground\",\n \"sm:w-64 sm:max-w-[280px]\",\n className\n )}\n {...props}\n >\n <SearchIcon className=\"mr-2 h-4 w-4 shrink-0\" />\n <span className=\"hidden truncate sm:inline-flex\">{placeholder}</span>\n <span className=\"truncate sm:hidden\">Search</span>\n {showShortcut && (\n <Kbd className=\"pointer-events-none absolute right-2 hidden h-5 select-none items-center gap-0.5 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium sm:flex\">\n <span className=\"text-xs\">{shortcutModifier}</span>\n {shortcutKey}\n </Kbd>\n )}\n </Button>\n )\n }\n)\n\nSearchTrigger.displayName = \"SearchTrigger\"\n\n/**\n * A hook that sets up keyboard shortcut handling for the search trigger.\n * @param onOpen - Callback fired when the shortcut is pressed\n * @param key - The key to listen for (default: \"k\")\n */\nfunction useSearchShortcut(onOpen: () => void, key: string = \"k\") {\n React.useEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key.toLowerCase() === key.toLowerCase() && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n onOpen()\n }\n }\n document.addEventListener(\"keydown\", down)\n return () => document.removeEventListener(\"keydown\", down)\n }, [onOpen, key])\n}\n\nexport { SearchTrigger, useSearchShortcut }\nexport type { SearchTriggerProps }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n )\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </MenubarPortal>\n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n","import * as React from \"react\"\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.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 >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: React.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-1\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: React.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 inline-flex h-9 w-max items-center justify-center rounded-full bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDownIcon\n className=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n \"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out 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 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto\",\n \"group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 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-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div\n className={cn(\n \"absolute top-full left-0 isolate z-50 flex justify-center\"\n )}\n >\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n \"origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground hover:[&_svg]:text-accent-foreground hover:[&_p]:text-accent-foreground hover:[&_.text-muted-foreground]:text-accent-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n \"data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out 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 >\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","\"use client\"\n\nimport * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n )\n}\n\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n )\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n )\n}\n\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n )\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content bg-background fixed z-50 flex h-auto flex-col\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 px-6 py-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 px-6 py-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetBody({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-body\"\n className={cn(\"flex-1 px-6 py-4\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetBody,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.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}: React.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 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n )\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Collapsible({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nfunction CollapsibleContent({\n className,\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n className={cn(\n \"data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) {\n return (\n <ResizablePrimitive.PanelGroup\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.Panel>) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.PanelResizeHandle\n data-slot=\"resizable-handle\"\n className={cn(\n \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n )\n}\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeftIcon } from \"lucide-react\"\n\nimport { useIsMobile } from \"../hooks/use-mobile\"\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Separator } from \"./separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet\"\nimport { Skeleton } from \"./skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"bg-background relative flex w-full flex-1 flex-col\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\n/**\n * J3M Section\n * \n * A container component for grouping multiple components with glass morphism backgrounds.\n * Designed for use on canvas or neutral backgrounds.\n * Variants: default, glass-light, glass-dark, glass-neutral, glass-primary\n */\n\nconst sectionVariants = cva(\n // Base styles - larger padding than Card for section grouping\n \"flex flex-col rounded-[var(--j3m-radius-l)]\",\n {\n variants: {\n variant: {\n // Default solid section\n default: [\n \"bg-[var(--color-bg-surface)]\",\n \"border border-[var(--color-border-subtle)]\",\n \"text-[var(--color-text-main)]\",\n ].join(\" \"),\n \n // Glass Light - frosted glass for dark or image backgrounds\n \"glass-light\": [\n \"glass-context\", // Enables glass semantic token overrides\n \"glass-frosted\", // Strong blur effect\n \"glass-border-gradient\", // Gradient border (top lighter)\n \"text-[var(--color-text-main)]\",\n \"shadow-[var(--j3m-glass-shadow-lg)]\",\n ].join(\" \"),\n \n // Glass Dark - dark frosted glass\n \"glass-dark\": [\n \"bg-[var(--j3m-glass-dark)]\",\n \"backdrop-blur-[var(--j3m-blur-md)]\",\n \"border border-[var(--j3m-glass-border-dark)]\",\n \"text-white\",\n \"shadow-[var(--j3m-glass-shadow-lg)]\",\n ].join(\" \"),\n \n // Glass Neutral - subtle frosted effect (most common)\n \"glass-neutral\": [\n \"bg-[var(--j3m-glass-neutral)]\",\n \"backdrop-blur-[var(--j3m-blur-lg)]\",\n \"border border-[var(--j3m-glass-border-subtle)]\",\n \"text-[var(--color-text-main)]\",\n \"shadow-[var(--j3m-glass-shadow-sm)]\",\n ].join(\" \"),\n \n // Glass Primary - with orange tint\n \"glass-primary\": [\n \"bg-[var(--j3m-glass-primary)]\",\n \"backdrop-blur-[var(--j3m-blur-lg)]\",\n \"border border-[var(--j3m-glass-border-light)]\",\n \"text-[var(--color-text-main)]\",\n \"shadow-[var(--j3m-glass-shadow-glow)]\",\n ].join(\" \"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface SectionProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof sectionVariants> {}\n\n// Check if variant is a glass variant\nconst isGlassVariant = (variant: SectionProps[\"variant\"]) => \n variant?.startsWith(\"glass-\") ?? false\n\nconst Section = React.forwardRef<HTMLElement, SectionProps>(\n ({ className, variant, ...props }, ref) => (\n <section\n ref={ref}\n className={cn(sectionVariants({ variant, className }))}\n // Data attribute for portal components to detect glass context\n data-glass-context={isGlassVariant(variant) ? \"true\" : undefined}\n {...props}\n />\n )\n)\nSection.displayName = \"Section\"\n\nconst SectionHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-[var(--j3m-spacing-xs)]\",\n \"px-[var(--j3m-spacing-xl)] pt-[var(--j3m-spacing-xl)] pb-[var(--j3m-spacing-m)]\",\n className\n )}\n {...props}\n />\n )\n)\nSectionHeader.displayName = \"SectionHeader\"\n\nconst SectionTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n )\n)\nSectionTitle.displayName = \"SectionTitle\"\n\nconst SectionDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"text-sm opacity-70\",\n className\n )}\n {...props}\n />\n )\n)\nSectionDescription.displayName = \"SectionDescription\"\n\nconst SectionContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"px-[var(--j3m-spacing-xl)] py-[var(--j3m-spacing-l)]\",\n className\n )}\n {...props}\n />\n )\n)\nSectionContent.displayName = \"SectionContent\"\n\nconst SectionFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center\",\n \"px-[var(--j3m-spacing-xl)] py-[var(--j3m-spacing-l)]\",\n \"border-t border-[inherit]\",\n className\n )}\n {...props}\n />\n )\n)\nSectionFooter.displayName = \"SectionFooter\"\n\nexport { \n Section, \n SectionHeader, \n SectionFooter, \n SectionTitle, \n SectionDescription, \n SectionContent, \n sectionVariants \n}\n\n","\"use client\"\n\nimport { type Column } from \"@tanstack/react-table\"\nimport { ArrowDown, ArrowUp, ChevronsUpDown, EyeOff } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../dropdown-menu\"\n\ninterface DataTableColumnHeaderProps<TData, TValue>\n extends React.HTMLAttributes<HTMLDivElement> {\n column: Column<TData, TValue>\n title: string\n}\n\nfunction DataTableColumnHeader<TData, TValue>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>\n }\n\n return (\n <div className={cn(\"flex items-center gap-2\", className)}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"data-[state=open]:bg-accent -ml-3 h-8\"\n >\n <span>{title}</span>\n {column.getIsSorted() === \"desc\" ? (\n <ArrowDown />\n ) : column.getIsSorted() === \"asc\" ? (\n <ArrowUp />\n ) : (\n <ChevronsUpDown />\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuItem onClick={() => column.toggleSorting(false)}>\n <ArrowUp />\n Asc\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.toggleSorting(true)}>\n <ArrowDown />\n Desc\n </DropdownMenuItem>\n {column.getCanHide() && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => column.toggleVisibility(false)}>\n <EyeOff />\n Hide\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n}\n\nexport { DataTableColumnHeader, type DataTableColumnHeaderProps }\n\n","\"use client\"\n\nimport { type Table } from \"@tanstack/react-table\"\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from \"lucide-react\"\n\nimport { Button } from \"../button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../select\"\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>\n showRowSelection?: boolean\n pageSizeOptions?: number[]\n}\n\nfunction DataTablePagination<TData>({\n table,\n showRowSelection = true,\n pageSizeOptions = [10, 20, 25, 30, 40, 50],\n}: DataTablePaginationProps<TData>) {\n return (\n <div className=\"flex items-center justify-between px-2\">\n {showRowSelection && (\n <div className=\"text-muted-foreground flex-1 text-sm\">\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </div>\n )}\n <div className=\"flex items-center space-x-6 lg:space-x-8\">\n <div className=\"flex items-center space-x-2\">\n <p className=\"text-sm font-medium\">Rows per page</p>\n <Select\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => {\n table.setPageSize(Number(value))\n }}\n >\n <SelectTrigger className=\"h-8 w-[70px]\">\n <SelectValue placeholder={table.getState().pagination.pageSize} />\n </SelectTrigger>\n <SelectContent side=\"top\">\n {pageSizeOptions.map((pageSize) => (\n <SelectItem key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex w-[100px] items-center justify-center text-sm font-medium\">\n Page {table.getState().pagination.pageIndex + 1} of{\" \"}\n {table.getPageCount()}\n </div>\n <div className=\"flex items-center space-x-2\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"hidden size-8 lg:flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to first page</span>\n <ChevronsLeft />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-8\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <ChevronLeft />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-8\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to next page</span>\n <ChevronRight />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"hidden size-8 lg:flex\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to last page</span>\n <ChevronsRight />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nexport { DataTablePagination, type DataTablePaginationProps }\n\n","\"use client\"\n\nimport { type Table } from \"@tanstack/react-table\"\nimport { Settings2 } from \"lucide-react\"\n\nimport { Button } from \"../button\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../dropdown-menu\"\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>\n}\n\nfunction DataTableViewOptions<TData>({\n table,\n}: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"ml-auto hidden h-8 lg:flex\"\n >\n <Settings2 />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter(\n (column) =>\n typeof column.accessorFn !== \"undefined\" && column.getCanHide()\n )\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport { DataTableViewOptions, type DataTableViewOptionsProps }\n\n","import * as React from \"react\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { Label } from \"../../components/label\"\nimport { SidebarInput } from \"../../components/sidebar\"\n\nexport function SearchForm({ ...props }: React.ComponentProps<\"form\">) {\n return (\n <form {...props}>\n <div className=\"relative\">\n <Label htmlFor=\"search\" className=\"sr-only\">\n Search\n </Label>\n <SidebarInput\n id=\"search\"\n placeholder=\"Type to search...\"\n className=\"h-8 pl-7\"\n />\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2 size-4 -translate-y-1/2 opacity-50 select-none\" />\n </div>\n </form>\n )\n}\n\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Separator } from \"../../components/separator\"\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"../../components/breadcrumb\"\nimport { SearchForm } from \"./search-form\"\n\ninterface BreadcrumbItemType {\n label: string\n href?: string\n}\n\ninterface SiteHeaderProps {\n /** Slot for sidebar trigger - use <SidebarTrigger /> from @j3m-quantum/ui */\n trigger?: React.ReactNode\n breadcrumbs?: BreadcrumbItemType[]\n showSearch?: boolean\n className?: string\n children?: React.ReactNode\n}\n\nexport function SiteHeader({ \n trigger,\n breadcrumbs = [\n { label: \"Building Your Application\", href: \"#\" },\n { label: \"Data Fetching\" },\n ],\n showSearch = true,\n className,\n children \n}: SiteHeaderProps) {\n return (\n <header \n data-slot=\"site-header\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground sticky top-0 z-50 flex w-full items-center border-b border-sidebar-border\",\n className\n )}\n >\n <div className=\"flex h-[var(--header-height,3.5rem)] w-full items-center gap-[var(--j3m-spacing-s)] px-[var(--j3m-spacing-m)]\">\n {trigger}\n {trigger && <Separator orientation=\"vertical\" className=\"mr-[var(--j3m-spacing-s)] h-4\" />}\n <Breadcrumb className=\"hidden sm:block\">\n <BreadcrumbList>\n {breadcrumbs.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && <BreadcrumbSeparator />}\n <BreadcrumbItem>\n {item.href ? (\n <BreadcrumbLink href={item.href}>\n {item.label}\n </BreadcrumbLink>\n ) : (\n <BreadcrumbPage>{item.label}</BreadcrumbPage>\n )}\n </BreadcrumbItem>\n </React.Fragment>\n ))}\n </BreadcrumbList>\n </Breadcrumb>\n {showSearch && <SearchForm className=\"w-full sm:ml-auto sm:w-auto\" />}\n {children}\n </div>\n </header>\n )\n}\n\n","\"use client\"\n\nimport { ChevronRightIcon, type LucideIcon } from \"lucide-react\"\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../../components/collapsible\"\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"../../components/sidebar\"\n\nexport interface NavItem {\n title: string\n url: string\n icon?: LucideIcon\n isActive?: boolean\n items?: {\n title: string\n url: string\n }[]\n}\n\ninterface NavMainProps {\n items: NavItem[]\n label?: string\n}\n\nexport function NavMain({ items, label = \"Platform\" }: NavMainProps) {\n return (\n <SidebarGroup>\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarMenu>\n {items.map((item) => (\n <Collapsible key={item.title} asChild defaultOpen={item.isActive}>\n <SidebarMenuItem>\n <SidebarMenuButton asChild tooltip={item.title}>\n <a href={item.url}>\n {item.icon && <item.icon />}\n <span>{item.title}</span>\n </a>\n </SidebarMenuButton>\n {item.items?.length ? (\n <>\n <CollapsibleTrigger asChild>\n <SidebarMenuAction className=\"data-[state=open]:rotate-90\">\n <ChevronRightIcon />\n <span className=\"sr-only\">Toggle</span>\n </SidebarMenuAction>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <SidebarMenuSub>\n {item.items?.map((subItem) => (\n <SidebarMenuSubItem key={subItem.title}>\n <SidebarMenuSubButton asChild>\n <a href={subItem.url}>\n <span>{subItem.title}</span>\n </a>\n </SidebarMenuSubButton>\n </SidebarMenuSubItem>\n ))}\n </SidebarMenuSub>\n </CollapsibleContent>\n </>\n ) : null}\n </SidebarMenuItem>\n </Collapsible>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )\n}\n\n","import * as React from \"react\"\nimport {\n FolderIcon,\n MoreHorizontalIcon,\n ShareIcon,\n TrashIcon,\n type LucideIcon,\n} from \"lucide-react\"\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../components/dropdown-menu\"\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n} from \"../../components/sidebar\"\n\nexport interface NavProject {\n name: string\n url: string\n icon: LucideIcon\n}\n\ninterface NavProjectsProps {\n projects: NavProject[]\n label?: string\n}\n\nexport function NavProjects({ projects, label = \"Projects\" }: NavProjectsProps) {\n return (\n <SidebarGroup className=\"group-data-[collapsible=icon]:hidden\">\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarMenu>\n {projects.map((item) => (\n <SidebarMenuItem key={item.name}>\n <SidebarMenuButton asChild>\n <a href={item.url}>\n <item.icon />\n <span>{item.name}</span>\n </a>\n </SidebarMenuButton>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuAction showOnHover>\n <MoreHorizontalIcon />\n <span className=\"sr-only\">More</span>\n </SidebarMenuAction>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-48 rounded-[var(--j3m-radius-m)]\"\n side=\"right\"\n align=\"start\"\n sideOffset={8}\n >\n <DropdownMenuItem>\n <FolderIcon className=\"text-muted-foreground\" />\n <span>View Project</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <ShareIcon className=\"text-muted-foreground\" />\n <span>Share Project</span>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <TrashIcon className=\"text-muted-foreground\" />\n <span>Delete Project</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n ))}\n <SidebarMenuItem>\n <SidebarMenuButton className=\"text-sidebar-foreground/70\">\n <MoreHorizontalIcon className=\"text-sidebar-foreground/70\" />\n <span>More</span>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarGroup>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type LucideIcon } from \"lucide-react\"\n\nimport {\n SidebarGroup,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from \"../../components/sidebar\"\n\ninterface NavSecondaryItem {\n title: string\n url: string\n icon: LucideIcon\n}\n\ninterface NavSecondaryProps extends React.ComponentProps<typeof SidebarGroup> {\n items: NavSecondaryItem[]\n}\n\nexport function NavSecondary({ items, ...props }: NavSecondaryProps) {\n return (\n <SidebarGroup {...props}>\n <SidebarGroupContent>\n <SidebarMenu>\n {items.map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton asChild size=\"sm\">\n <a href={item.url}>\n <item.icon />\n <span>{item.title}</span>\n </a>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n )\n}\n\n","import * as React from \"react\"\nimport {\n BadgeCheckIcon,\n BellIcon,\n ChevronsUpDownIcon,\n CreditCardIcon,\n LogOutIcon,\n SparklesIcon,\n} from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../components/avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../components/dropdown-menu\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from \"../../components/sidebar\"\n\ninterface NavUserProps {\n user: {\n name: string\n email: string\n avatar: string\n }\n}\n\nexport function NavUser({ user }: NavUserProps) {\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size=\"lg\"\n className=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n >\n <Avatar className=\"h-8 w-8 rounded-lg\">\n <AvatarImage src={user.avatar} alt={user.name} />\n <AvatarFallback className=\"rounded-lg\">\n {user.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-semibold\">{user.name}</span>\n <span className=\"truncate text-xs\">{user.email}</span>\n </div>\n <ChevronsUpDownIcon className=\"ml-auto size-4\" />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-[var(--j3m-radius-m)]\"\n side=\"right\"\n align=\"end\"\n sideOffset={8}\n >\n <DropdownMenuLabel className=\"p-0 font-normal\">\n <div className=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <Avatar className=\"h-8 w-8 rounded-lg\">\n <AvatarImage src={user.avatar} alt={user.name} />\n <AvatarFallback className=\"rounded-lg\">\n {user.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-semibold\">{user.name}</span>\n <span className=\"truncate text-xs\">{user.email}</span>\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <SparklesIcon />\n Upgrade to Pro\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <BadgeCheckIcon />\n Account\n </DropdownMenuItem>\n <DropdownMenuItem>\n <CreditCardIcon />\n Billing\n </DropdownMenuItem>\n <DropdownMenuItem>\n <BellIcon />\n Notifications\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <LogOutIcon />\n Log out\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type Table } from \"@tanstack/react-table\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { Input } from \"../../components/input\"\nimport type { Supplier } from \"./types\"\n\nexport interface PlanningTableToolbarProps\n extends React.HTMLAttributes<HTMLDivElement> {\n table: Table<Supplier>\n}\n\n/**\n * Toolbar component for the PlanningTable.\n * Provides search/filter functionality.\n */\nfunction PlanningTableToolbar({\n className,\n table,\n ...props\n}: PlanningTableToolbarProps) {\n const isFiltered = table.getState().columnFilters.length > 0\n\n return (\n <div\n data-slot=\"planning-table-toolbar\"\n className={cn(\"flex items-center gap-2\", className)}\n {...props}\n >\n {/* Search by supplier name */}\n <Input\n placeholder=\"Filter suppliers...\"\n value={(table.getColumn(\"supplier\")?.getFilterValue() as string) ?? \"\"}\n onChange={(event) =>\n table.getColumn(\"supplier\")?.setFilterValue(event.target.value)\n }\n className=\"h-8 w-[150px] lg:w-[250px]\"\n />\n \n {/* Clear filters button */}\n {isFiltered && (\n <Button\n variant=\"ghost\"\n onClick={() => table.resetColumnFilters()}\n className=\"h-8 px-2 lg:px-3\"\n >\n Reset\n <X className=\"ml-2 h-4 w-4\" />\n </Button>\n )}\n </div>\n )\n}\n\nexport { PlanningTableToolbar }\n\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Badge } from \"../../components/badge\"\nimport type { Supplier, SupplierBadgeType } from \"./types\"\n\n/**\n * Get badge variant based on supplier badge type\n */\nfunction getBadgeVariant(badgeType: SupplierBadgeType): \"default\" | \"secondary\" | \"outline\" {\n const variantMap: Record<string, \"default\" | \"secondary\" | \"outline\"> = {\n Welded: \"secondary\",\n Painted: \"secondary\",\n Glazed: \"secondary\",\n Delivered: \"secondary\",\n Cured: \"secondary\",\n Assembled: \"secondary\",\n Tested: \"secondary\",\n Sealed: \"secondary\",\n }\n return variantMap[badgeType] || \"secondary\"\n}\n\nexport interface SupplierCellProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Supplier data */\n supplier: Supplier\n}\n\n/**\n * Cell component for displaying supplier information in the first column.\n * Shows supplier name with badge for checkpoint type.\n */\nfunction SupplierCell({\n className,\n supplier,\n ...props\n}: SupplierCellProps) {\n return (\n <div\n data-slot=\"supplier-cell\"\n className={cn(\n \"flex flex-col justify-center gap-1 py-3 px-4 w-[200px] h-[72px]\",\n className\n )}\n {...props}\n >\n {/* Supplier name */}\n <span className=\"text-sm font-semibold leading-tight text-foreground\">\n {supplier.name}\n </span>\n {/* Badge and scope */}\n <div className=\"flex items-center gap-2\">\n <Badge \n variant={getBadgeVariant(supplier.badgeType)} \n className=\"text-[10px] px-1.5 py-0 h-5 font-normal\"\n >\n {supplier.badgeType}\n </Badge>\n <span className=\"text-xs text-muted-foreground\">\n {supplier.scope}\n </span>\n </div>\n </div>\n )\n}\n\nexport { SupplierCell }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Factory, Truck } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport type { DeliveryStatus } from \"../../components/delivery-indicator\"\nimport type { WeekCellData, Week, Supplier } from \"./types\"\n\nexport interface WeekCellProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Week cell data */\n data: WeekCellData\n /** Week information */\n week: Week\n /** Supplier information (for click handler context) */\n supplier?: Supplier\n /** Whether this cell is in the current week */\n isCurrentWeek?: boolean\n /** Callback when cell is clicked */\n onCellClick?: () => void\n}\n\n/**\n * Get the worst status from production and deliveries\n */\nfunction getCombinedRiskLevel(data: WeekCellData): \"normal\" | \"warning\" | \"critical\" {\n // Check production status\n const productionStatus = data.production?.status || \"on-time\"\n \n // Check delivery statuses\n const hasDeliveryCritical = data.deliveries?.some(d => d.status === \"critical\")\n const hasDeliveryDelayed = data.deliveries?.some(d => d.status === \"delayed\")\n \n // Critical takes priority\n if (productionStatus === \"critical\" || hasDeliveryCritical) {\n return \"critical\"\n }\n \n // Then warning/delayed\n if (productionStatus === \"delayed\" || hasDeliveryDelayed || data.hasWarning) {\n return \"warning\"\n }\n \n return \"normal\"\n}\n\n/**\n * Get status for a single row (production or delivery)\n */\nfunction getRowStatus(status?: DeliveryStatus): \"normal\" | \"warning\" | \"critical\" {\n if (status === \"critical\") return \"critical\"\n if (status === \"delayed\") return \"warning\"\n return \"normal\"\n}\n\n// Color classes for card based on combined risk\nconst riskColorClasses = {\n normal: {\n border: \"border-l-green-500\",\n bg: \"bg-green-50 dark:bg-green-950/50\",\n },\n warning: {\n border: \"border-l-amber-500\",\n bg: \"bg-amber-50 dark:bg-amber-950/50\",\n },\n critical: {\n border: \"border-l-red-500\",\n bg: \"bg-red-50 dark:bg-red-950/50\",\n },\n}\n\n// Color classes for individual progress bars\nconst statusColors = {\n normal: {\n icon: \"text-green-600 dark:text-green-400\",\n progress: \"bg-green-500\",\n text: \"text-green-700 dark:text-green-300\",\n },\n warning: {\n icon: \"text-amber-600 dark:text-amber-400\",\n progress: \"bg-amber-500\",\n text: \"text-amber-700 dark:text-amber-300\",\n },\n critical: {\n icon: \"text-red-600 dark:text-red-400\",\n progress: \"bg-red-500\",\n text: \"text-red-700 dark:text-red-300\",\n },\n}\n\n/**\n * Cell component for displaying week data in the planning matrix.\n * Shows production progress and delivery status.\n */\nfunction WeekCell({\n className,\n data,\n week,\n supplier,\n isCurrentWeek,\n onCellClick,\n ...props\n}: WeekCellProps) {\n const handleClick = () => {\n if (onCellClick && data.type !== \"empty\") {\n onCellClick()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if ((e.key === \"Enter\" || e.key === \" \") && onCellClick && data.type !== \"empty\") {\n e.preventDefault()\n onCellClick()\n }\n }\n\n const combinedRisk = data.type === \"data\" ? getCombinedRiskLevel(data) : \"normal\"\n const cardColors = riskColorClasses[combinedRisk]\n \n // Production data\n const productionProgress = data.production?.progress ?? data.progress ?? 0\n const productionStatus = getRowStatus(data.production?.status)\n const productionColors = statusColors[productionStatus]\n \n // Delivery data\n const deliveryCount = data.deliveries?.length ?? 0\n const worstDeliveryStatus = data.deliveries?.some(d => d.status === \"critical\") \n ? \"critical\" \n : data.deliveries?.some(d => d.status === \"delayed\") \n ? \"warning\" \n : \"normal\"\n const deliveryColors = statusColors[worstDeliveryStatus]\n\n // Empty state\n if (data.type === \"empty\") {\n return (\n <div\n data-slot=\"week-cell\"\n data-state=\"empty\"\n data-current-week={isCurrentWeek}\n className={cn(\n \"flex w-[120px] h-[72px] items-center justify-center cursor-default\",\n isCurrentWeek && \"bg-primary/5\",\n className\n )}\n {...props}\n >\n <span className=\"text-muted-foreground/30 text-xl\">·</span>\n </div>\n )\n }\n\n // No logistics state\n if (data.type === \"no-logistics\") {\n return (\n <div\n data-slot=\"week-cell\"\n data-state=\"no-logistics\"\n data-current-week={isCurrentWeek}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"flex flex-col w-[120px] h-[72px] justify-center p-1\",\n \"cursor-pointer\",\n isCurrentWeek && \"bg-primary/5\",\n className\n )}\n {...props}\n >\n <div\n className={cn(\n \"flex flex-col w-full h-full justify-center gap-1.5 rounded-md border-l-[3px] px-2 py-1.5\",\n \"border-l-muted-foreground/30 bg-muted/50\",\n // Hover lift effect with shadow\n \"transition-all duration-200 ease-out\",\n \"hover:-translate-y-0.5 hover:shadow-md hover:bg-muted/70\",\n )}\n >\n {/* Production row */}\n <div className=\"flex items-center gap-1.5\">\n <Factory className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <div className=\"flex-1 h-1.5 bg-muted-foreground/20 rounded-full overflow-hidden\">\n <div \n className=\"h-full bg-muted-foreground/40 rounded-full\"\n style={{ width: `${productionProgress}%` }}\n />\n </div>\n </div>\n \n {/* Delivery row - No logistics */}\n <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n <Truck className=\"h-3.5 w-3.5 shrink-0\" />\n <span className=\"text-[10px]\">No logistics</span>\n </div>\n </div>\n </div>\n )\n }\n\n // Data state - colored card with production and delivery rows\n return (\n <div\n data-slot=\"week-cell\"\n data-state=\"data\"\n data-risk={combinedRisk}\n data-current-week={isCurrentWeek}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"flex flex-col w-[120px] h-[72px] justify-center p-1\",\n \"cursor-pointer\",\n isCurrentWeek && \"bg-primary/5\",\n className\n )}\n {...props}\n >\n <div\n className={cn(\n \"flex flex-col w-full h-full justify-center gap-1.5 rounded-md border-l-[3px] px-2 py-1.5\",\n cardColors.border,\n cardColors.bg,\n // Hover lift effect with shadow\n \"transition-all duration-200 ease-out\",\n \"hover:-translate-y-0.5 hover:shadow-md\",\n )}\n >\n {/* Production row - Factory icon + progress bar */}\n <div className=\"flex items-center gap-1.5\">\n <Factory className={cn(\"h-3.5 w-3.5 shrink-0\", productionColors.icon)} />\n <div className=\"flex-1 h-1.5 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden\">\n <div \n className={cn(\"h-full rounded-full transition-all\", productionColors.progress)}\n style={{ width: `${productionProgress}%` }}\n />\n </div>\n </div>\n \n {/* Delivery row - Truck icon + count */}\n <div className=\"flex items-center gap-1.5\">\n <Truck className={cn(\"h-3.5 w-3.5 shrink-0\", deliveryColors.icon)} />\n {deliveryCount > 0 ? (\n <span className={cn(\"text-[10px] font-medium\", deliveryColors.text)}>\n {deliveryCount}x delivery\n </span>\n ) : (\n <span className=\"text-[10px] text-muted-foreground\">—</span>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport { WeekCell }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport type { Week } from \"./types\"\n\nexport interface WeekHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Week information */\n week: Week\n}\n\n/**\n * Header component for week columns in the planning table.\n * Shows week number and date range with pulsating current week indicator.\n */\nfunction WeekHeader({\n className,\n week,\n ...props\n}: WeekHeaderProps) {\n return (\n <div\n data-slot=\"week-header\"\n data-current-week={week.isCurrentWeek}\n className={cn(\n \"flex flex-col justify-center gap-0.5 w-[120px] text-left\",\n className\n )}\n {...props}\n >\n {/* Week label with optional pulsating current week indicator */}\n <div className=\"flex items-center gap-2\">\n <span className={cn(\n \"text-sm font-medium\",\n week.isCurrentWeek ? \"text-primary\" : \"text-foreground\"\n )}>\n {week.label}\n </span>\n {week.isCurrentWeek && (\n <span className=\"relative flex h-2 w-2\">\n {/* Pulsating ring */}\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\n {/* Solid dot */}\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-primary\" />\n </span>\n )}\n </div>\n <span className=\"text-[11px] text-muted-foreground whitespace-nowrap\">\n {week.dateRange}\n </span>\n </div>\n )\n}\n\nexport { WeekHeader }\n","import type { DeliveryStatus } from \"../../components/delivery-indicator\"\n\n/**\n * Represents a week in the planning matrix\n */\nexport interface Week {\n /** ISO week number (1-53) */\n weekNumber: number\n /** Year of the week */\n year: number\n /** Start date of the week */\n startDate: Date\n /** End date of the week */\n endDate: Date\n /** Formatted week label (e.g., \"W52\") */\n label: string\n /** Formatted date range (e.g., \"Dec 22 - Dec 28\") */\n dateRange: string\n /** Whether this is the current week */\n isCurrentWeek: boolean\n}\n\n/**\n * Unit type for production measurement\n */\nexport type ProductionUnit = \"quantity\" | \"kvm\" | \"ton\" | \"kg\" | \"m\" | \"pcs\"\n\n/**\n * Production data for a week\n */\nexport interface ProductionData {\n /** Current produced amount */\n produced: number\n /** Target/planned amount */\n target: number\n /** Unit of measurement */\n unit: ProductionUnit\n /** Production status */\n status: DeliveryStatus\n /** Progress percentage (0-100) - can be calculated from produced/target */\n progress?: number\n}\n\n/**\n * An element within a delivery\n */\nexport interface DeliveryElement {\n /** Unique identifier */\n id: string\n /** Element name/description */\n name: string\n /** Whether this element is produced */\n isProduced: boolean\n /** Quantity */\n quantity?: number\n /** Unit */\n unit?: ProductionUnit\n}\n\n/**\n * Represents a delivery within a week cell\n */\nexport interface Delivery {\n /** Unique identifier */\n id: string\n /** Delivery status */\n status: DeliveryStatus\n /** Optional label for tooltip */\n label?: string\n /** Delivery date within the week */\n date?: Date\n /** Destination/recipient */\n destination?: string\n /** Elements included in this delivery */\n elements?: DeliveryElement[]\n /** Number of elements at risk (not produced yet) */\n elementsAtRisk?: number\n /** Total elements count */\n totalElements?: number\n}\n\n/**\n * Data for a single week cell in the planning matrix\n */\nexport interface WeekCellData {\n /** Cell state type */\n type: \"data\" | \"empty\" | \"no-logistics\"\n /** Quantity value (e.g., units scheduled) - legacy */\n quantity?: number\n /** Progress percentage (0-100) - legacy */\n progress?: number\n /** Production data for this week */\n production?: ProductionData\n /** Array of deliveries for this week */\n deliveries?: Delivery[]\n /** Whether there's a warning/alert for this week */\n hasWarning?: boolean\n /** Warning message if applicable */\n warningMessage?: string\n /** Additional notes */\n notes?: string\n}\n\n/**\n * Badge type for supplier categorization\n */\nexport type SupplierBadgeType = \n | \"Welded\"\n | \"Painted\" \n | \"Glazed\"\n | \"Delivered\"\n | \"Cured\"\n | \"Assembled\"\n | \"Tested\"\n | \"Sealed\"\n | string // Allow custom badge types\n\n/**\n * Represents a supplier in the planning table\n */\nexport interface Supplier {\n /** Unique identifier */\n id: string\n /** Supplier name (e.g., \"Alpha Steel\") */\n name: string\n /** Badge/category type (e.g., \"Welded\", \"Painted\") */\n badgeType: SupplierBadgeType\n /** Scope description (e.g., \"Structure A\", \"Ext. Panels\") */\n scope: string\n /** Week data indexed by \"YYYY-WXX\" format (e.g., \"2025-W02\") */\n weeks: Record<string, WeekCellData>\n}\n\n/**\n * Configuration options for the planning table\n */\nexport interface PlanningTableConfig {\n /** Number of weeks to display */\n weekCount?: number\n /** Start date for the week range */\n startDate?: Date\n /** Whether to highlight the current week */\n highlightCurrentWeek?: boolean\n /** Whether to show the toolbar */\n showToolbar?: boolean\n /** Whether to show pagination */\n showPagination?: boolean\n /** Rows per page options */\n pageSizeOptions?: number[]\n /** Default page size */\n defaultPageSize?: number\n /** Whether supplier column is sticky */\n stickySupplierColumn?: boolean\n /** Maximum height of the table (enables vertical scroll) */\n maxHeight?: string\n /** Callback when a cell is clicked */\n onCellClick?: (supplier: Supplier, week: Week, data: WeekCellData) => void\n}\n\n/**\n * Props for the PlanningTable component\n */\nexport interface PlanningTableProps {\n /** Array of suppliers to display */\n suppliers: Supplier[]\n /** Configuration options */\n config?: PlanningTableConfig\n /** Additional class names */\n className?: string\n}\n\n/**\n * Get ISO week string from a date\n */\nexport function getWeekKey(date: Date): string {\n const year = date.getFullYear()\n const weekNumber = getISOWeek(date)\n return `${year}-W${weekNumber.toString().padStart(2, \"0\")}`\n}\n\n/**\n * Get ISO week number from a date\n */\nexport function getISOWeek(date: Date): number {\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))\n const dayNum = d.getUTCDay() || 7\n d.setUTCDate(d.getUTCDate() + 4 - dayNum)\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1))\n return Math.ceil((((d.getTime() - yearStart.getTime()) / 86400000) + 1) / 7)\n}\n\n/**\n * Generate an array of weeks starting from a given date\n */\nexport function generateWeeks(startDate: Date, count: number): Week[] {\n const weeks: Week[] = []\n const current = new Date(startDate)\n const today = new Date()\n const currentWeekKey = getWeekKey(today)\n \n // Align to start of week (Monday)\n const dayOfWeek = current.getDay()\n const daysToMonday = dayOfWeek === 0 ? -6 : 1 - dayOfWeek\n current.setDate(current.getDate() + daysToMonday)\n \n for (let i = 0; i < count; i++) {\n const weekStart = new Date(current)\n const weekEnd = new Date(current)\n weekEnd.setDate(weekEnd.getDate() + 6)\n \n const weekNumber = getISOWeek(weekStart)\n const year = weekStart.getFullYear()\n const weekKey = `${year}-W${weekNumber.toString().padStart(2, \"0\")}`\n \n weeks.push({\n weekNumber,\n year,\n startDate: weekStart,\n endDate: weekEnd,\n label: `W${weekNumber.toString().padStart(2, \"0\")}`,\n dateRange: formatDateRange(weekStart, weekEnd),\n isCurrentWeek: weekKey === currentWeekKey,\n })\n \n // Move to next week\n current.setDate(current.getDate() + 7)\n }\n \n return weeks\n}\n\n/**\n * Format a date range as \"Mon DD - Mon DD\"\n */\nfunction formatDateRange(start: Date, end: Date): string {\n const months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n const startMonth = months[start.getMonth()]\n const endMonth = months[end.getMonth()]\n \n if (startMonth === endMonth) {\n return `${startMonth} ${start.getDate()} - ${end.getDate()}`\n }\n return `${startMonth} ${start.getDate()} - ${endMonth} ${end.getDate()}`\n}\n\n/**\n * Format production unit for display\n */\nexport function formatProductionUnit(unit: ProductionUnit): string {\n const unitLabels: Record<ProductionUnit, string> = {\n quantity: \"pcs\",\n kvm: \"m²\",\n ton: \"ton\",\n kg: \"kg\",\n m: \"m\",\n pcs: \"pcs\",\n }\n return unitLabels[unit] || unit\n}\n","\"use client\"\n\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { ArrowUpDown } from \"lucide-react\"\n\nimport { Button } from \"../../components/button\"\nimport { SupplierCell } from \"./supplier-cell\"\nimport { WeekCell } from \"./week-cell\"\nimport { WeekHeader } from \"./week-header\"\nimport type { Supplier, Week, WeekCellData, PlanningTableConfig } from \"./types\"\nimport { getWeekKey } from \"./types\"\n\n/**\n * Custom header for the supplier column\n */\nfunction SupplierColumnHeader({ \n column \n}: { \n column: { toggleSorting: (desc?: boolean) => void; getIsSorted: () => false | \"asc\" | \"desc\" } \n}) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3 h-8 data-[state=open]:bg-accent\"\n onClick={() => column.toggleSorting(column.getIsSorted() === \"asc\")}\n >\n <span className=\"font-medium\">\n Supplier / Scope\n </span>\n <ArrowUpDown className=\"ml-2 h-4 w-4\" />\n </Button>\n )\n}\n\n/**\n * Generate the supplier column definition\n */\nexport function getSupplierColumn(): ColumnDef<Supplier> {\n return {\n id: \"supplier\",\n accessorKey: \"name\",\n header: ({ column }) => <SupplierColumnHeader column={column} />,\n cell: ({ row }) => <SupplierCell supplier={row.original} />,\n enableSorting: true,\n enableHiding: false,\n }\n}\n\n/**\n * Generate column definitions for week columns\n */\nexport function generateWeekColumns(\n weeks: Week[],\n config?: PlanningTableConfig\n): ColumnDef<Supplier>[] {\n return weeks.map((week) => {\n const weekKey = getWeekKey(week.startDate)\n \n return {\n id: weekKey,\n accessorFn: (supplier) => supplier.weeks[weekKey],\n header: () => <WeekHeader week={week} />,\n cell: ({ row }) => {\n const supplier = row.original\n const data: WeekCellData = supplier.weeks[weekKey] || { type: \"empty\" }\n \n return (\n <WeekCell\n data={data}\n week={week}\n supplier={supplier}\n isCurrentWeek={week.isCurrentWeek}\n onCellClick={\n config?.onCellClick\n ? () => config.onCellClick?.(supplier, week, data)\n : undefined\n }\n />\n )\n },\n enableSorting: false,\n enableHiding: true,\n } satisfies ColumnDef<Supplier>\n })\n}\n\n/**\n * Generate all column definitions for the planning table\n */\nexport function generateColumns(\n weeks: Week[],\n config?: PlanningTableConfig\n): ColumnDef<Supplier>[] {\n return [\n getSupplierColumn(),\n ...generateWeekColumns(weeks, config),\n ]\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n} from \"@tanstack/react-table\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea, ScrollBar } from \"../../components/scroll-area\"\nimport { DataTablePagination } from \"../../components/data-table\"\nimport { PlanningTableToolbar } from \"./planning-table-toolbar\"\nimport { generateColumns } from \"./columns\"\nimport { generateWeeks, getWeekKey } from \"./types\"\nimport type { PlanningTableProps } from \"./types\"\n\n/**\n * PlanningTable - A weekly supplier planning matrix\n * \n * Displays suppliers as rows and weeks as columns, with each cell showing\n * delivery data, progress, and status indicators.\n */\nfunction PlanningTable({\n className,\n suppliers,\n config = {},\n}: PlanningTableProps) {\n const {\n weekCount = 12,\n startDate = new Date(),\n highlightCurrentWeek = true,\n showToolbar = true,\n showPagination = true,\n pageSizeOptions = [10, 20, 30, 50],\n defaultPageSize = 10,\n stickySupplierColumn = true,\n maxHeight = \"600px\",\n } = config\n\n // Generate weeks based on config\n const weeks = React.useMemo(\n () => generateWeeks(startDate, weekCount),\n [startDate, weekCount]\n )\n\n // Find the current week key\n const currentWeekKey = React.useMemo(() => {\n const currentWeek = weeks.find(w => w.isCurrentWeek)\n return currentWeek ? getWeekKey(currentWeek.startDate) : null\n }, [weeks])\n\n // Generate columns with week data\n const columns = React.useMemo(\n () => generateColumns(weeks, config),\n [weeks, config]\n )\n\n // Table state\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = React.useState({})\n\n // Create table instance\n const table = useReactTable({\n data: suppliers,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n },\n initialState: {\n pagination: {\n pageSize: defaultPageSize,\n },\n },\n })\n\n return (\n <div\n data-slot=\"planning-table\"\n className={cn(\"flex flex-col gap-4\", className)}\n >\n {/* Toolbar */}\n {showToolbar && <PlanningTableToolbar table={table} />}\n\n {/* Table Container with shadow and ScrollArea */}\n <div className=\"rounded-lg border bg-card shadow-md\">\n <ScrollArea \n className=\"w-full\"\n style={{ maxHeight }}\n >\n <table className=\"w-full caption-bottom text-sm border-collapse\">\n {/* Header row - same grey as sidebar */}\n <thead className=\"[&_tr]:border-b bg-sidebar sticky top-0 z-20\">\n {table.getHeaderGroups().map((headerGroup) => (\n <tr \n key={headerGroup.id} \n className=\"border-b transition-colors\"\n >\n {headerGroup.headers.map((header, index) => {\n const isCurrentWeekColumn = header.id === currentWeekKey\n return (\n <th\n key={header.id}\n className={cn(\n \"h-14 px-4 text-left align-middle font-medium text-muted-foreground border-r border-border last:border-r-0\",\n index === 0 && stickySupplierColumn && [\n \"sticky left-0 z-30 bg-sidebar min-w-[200px]\",\n ],\n index > 0 && \"min-w-[120px] w-[120px]\",\n isCurrentWeekColumn && \"bg-primary/10 border-t-2 border-t-primary\"\n )}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody className=\"[&_tr:last-child]:border-0 bg-background\">\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <tr\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n className=\"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\"\n >\n {row.getVisibleCells().map((cell, index) => {\n const isCurrentWeekColumn = cell.column.id === currentWeekKey\n return (\n <td\n key={cell.id}\n className={cn(\n \"p-0 align-middle border-r border-border last:border-r-0\",\n index === 0 && stickySupplierColumn && [\n \"sticky left-0 z-10 bg-background min-w-[200px]\",\n ],\n index > 0 && \"min-w-[120px] w-[120px]\",\n isCurrentWeekColumn && \"bg-primary/5\"\n )}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </td>\n )\n })}\n </tr>\n ))\n ) : (\n <tr>\n <td\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No suppliers found.\n </td>\n </tr>\n )}\n </tbody>\n </table>\n <ScrollBar orientation=\"horizontal\" />\n <ScrollBar orientation=\"vertical\" />\n </ScrollArea>\n </div>\n\n {/* Pagination */}\n {showPagination && (\n <DataTablePagination\n table={table}\n showRowSelection={false}\n pageSizeOptions={pageSizeOptions}\n />\n )}\n </div>\n )\n}\n\nexport { PlanningTable }\nexport type { PlanningTableProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Factory, Truck, Calendar, AlertTriangle, ChevronDown, Package, CheckCircle2, XCircle } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../../components/dialog\"\nimport { Badge } from \"../../components/badge\"\nimport { Separator } from \"../../components/separator\"\nimport { Input } from \"../../components/input\"\nimport { Label } from \"../../components/label\"\nimport { Button } from \"../../components/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../../components/collapsible\"\nimport type { DeliveryStatus } from \"../../components/delivery-indicator\"\nimport type { Supplier, Week, WeekCellData, Delivery } from \"./types\"\nimport { formatProductionUnit } from \"./types\"\n\nexport interface WeekDetailDialogProps {\n /** Whether the dialog is open */\n open: boolean\n /** Callback when dialog open state changes */\n onOpenChange: (open: boolean) => void\n /** Supplier data */\n supplier: Supplier | null\n /** Week data */\n week: Week | null\n /** Week cell data */\n data: WeekCellData | null\n /** Callback when progress is updated */\n onProgressUpdate?: (supplierId: string, weekKey: string, newProgress: number, newProduced?: number) => void\n}\n\n/**\n * Get badge variant based on delivery status\n */\nfunction getStatusBadgeVariant(status: DeliveryStatus): \"default\" | \"secondary\" | \"destructive\" | \"outline\" {\n switch (status) {\n case \"on-time\": return \"outline\" // Green text with outline\n case \"delayed\": return \"secondary\"\n case \"critical\": return \"destructive\"\n default: return \"outline\"\n }\n}\n\n/**\n * Get custom badge classes for status colors\n */\nfunction getStatusBadgeClasses(status: DeliveryStatus): string {\n switch (status) {\n case \"on-time\": return \"border-green-500 text-green-600 bg-green-50 dark:bg-green-950/50\"\n case \"delayed\": return \"border-amber-500 text-amber-600 bg-amber-50 dark:bg-amber-950/50\"\n case \"critical\": return \"\" // Use default destructive\n default: return \"\"\n }\n}\n\n/**\n * Get status label\n */\nfunction getStatusLabel(status: DeliveryStatus): string {\n switch (status) {\n case \"on-time\": return \"On Track\"\n case \"delayed\": return \"At Risk\"\n case \"critical\": return \"Critical\"\n case \"pending\": return \"Pending\"\n default: return status\n }\n}\n\n/**\n * Delivery card component with expandable elements\n */\nfunction DeliveryCard({ delivery, index }: { delivery: Delivery; index: number }) {\n const [isOpen, setIsOpen] = React.useState(false)\n const hasElements = delivery.elements && delivery.elements.length > 0\n const elementsAtRisk = delivery.elementsAtRisk ?? delivery.elements?.filter(e => !e.isProduced).length ?? 0\n \n return (\n <Collapsible open={isOpen} onOpenChange={setIsOpen}>\n <div className=\"rounded-lg border overflow-hidden bg-card\">\n <CollapsibleTrigger asChild>\n <button\n className={cn(\n \"w-full flex items-center justify-between p-3 text-left\",\n \"hover:bg-muted/50 transition-colors\",\n hasElements && \"cursor-pointer\"\n )}\n disabled={!hasElements}\n >\n <div className=\"flex items-center gap-3\">\n <Truck className=\"h-4 w-4 text-muted-foreground\" />\n <div>\n <div className=\"text-sm font-medium\">\n {delivery.label || `Delivery ${index + 1}`}\n </div>\n {delivery.destination && (\n <div className=\"text-xs text-muted-foreground\">\n → {delivery.destination}\n </div>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Badge \n variant={getStatusBadgeVariant(delivery.status)} \n className={cn(\"text-xs\", getStatusBadgeClasses(delivery.status))}\n >\n {getStatusLabel(delivery.status)}\n </Badge>\n {hasElements && (\n <ChevronDown className={cn(\n \"h-4 w-4 text-muted-foreground transition-transform\",\n isOpen && \"rotate-180\"\n )} />\n )}\n </div>\n </button>\n </CollapsibleTrigger>\n \n {hasElements && (\n <CollapsibleContent>\n <Separator />\n <div className=\"p-3 space-y-2\">\n {elementsAtRisk > 0 && (\n <div className=\"flex items-center gap-2 text-xs text-amber-600 dark:text-amber-400 mb-2\">\n <AlertTriangle className=\"h-3.5 w-3.5\" />\n <span>{elementsAtRisk} element(s) probably not all produced</span>\n </div>\n )}\n <div className=\"space-y-1.5\">\n {delivery.elements?.map((element) => (\n <div\n key={element.id}\n className={cn(\n \"flex items-center justify-between text-xs p-2 rounded\",\n element.isProduced \n ? \"bg-muted/30\" \n : \"bg-amber-50/50 dark:bg-amber-950/30\"\n )}\n >\n <div className=\"flex items-center gap-2\">\n {element.isProduced ? (\n <CheckCircle2 className=\"h-3.5 w-3.5 text-green-600\" />\n ) : (\n <XCircle className=\"h-3.5 w-3.5 text-amber-600\" />\n )}\n <span className={element.isProduced ? \"text-foreground\" : \"text-amber-700 dark:text-amber-300\"}>\n {element.name}\n </span>\n </div>\n {element.quantity && (\n <span className=\"text-muted-foreground\">\n {element.quantity} {element.unit ? formatProductionUnit(element.unit) : \"pcs\"}\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n </CollapsibleContent>\n )}\n </div>\n </Collapsible>\n )\n}\n\n/**\n * Dialog component for displaying detailed week information.\n * Shows production progress and individual deliveries.\n */\nfunction WeekDetailDialog({\n open,\n onOpenChange,\n supplier,\n week,\n data,\n onProgressUpdate,\n}: WeekDetailDialogProps) {\n const production = data?.production\n const initialProgress = production?.progress ?? data?.progress ?? 0\n const initialProduced = production?.produced ?? 0\n \n const [progressValue, setProgressValue] = React.useState(initialProgress.toString())\n const [producedValue, setProducedValue] = React.useState(initialProduced.toString())\n const [hasChanges, setHasChanges] = React.useState(false)\n\n // Reset values when data changes\n React.useEffect(() => {\n const newProgress = data?.production?.progress ?? data?.progress ?? 0\n const newProduced = data?.production?.produced ?? 0\n setProgressValue(newProgress.toString())\n setProducedValue(newProduced.toString())\n setHasChanges(false)\n }, [data])\n\n const handleProgressChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n setProgressValue(value)\n setHasChanges(true)\n }\n\n const handleProducedChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n setProducedValue(value)\n // Auto-calculate progress if we have a target\n if (production?.target) {\n const produced = parseFloat(value) || 0\n const calculatedProgress = Math.round((produced / production.target) * 100)\n setProgressValue(Math.min(100, calculatedProgress).toString())\n }\n setHasChanges(true)\n }\n\n const handleSave = () => {\n if (!supplier || !week || !onProgressUpdate) return\n \n const newProgress = Math.min(100, Math.max(0, parseFloat(progressValue) || 0))\n const newProduced = parseFloat(producedValue) || 0\n const weekKey = `${week.year}-W${week.weekNumber.toString().padStart(2, \"0\")}`\n \n onProgressUpdate(supplier.id, weekKey, newProgress, production ? newProduced : undefined)\n setHasChanges(false)\n }\n\n if (!supplier || !week || !data) {\n return null\n }\n\n const productionProgress = parseFloat(progressValue) || 0\n const productionStatus = production?.status ?? \"on-time\"\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-lg max-h-[80vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n {supplier.name}\n <Badge variant=\"secondary\" className=\"text-xs font-normal\">\n {supplier.badgeType}\n </Badge>\n </DialogTitle>\n <DialogDescription className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4\" />\n {week.label} • {week.dateRange}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4 mt-2\">\n {/* Scope */}\n <div className=\"text-sm text-muted-foreground\">\n Scope: <span className=\"text-foreground\">{supplier.scope}</span>\n </div>\n\n {/* Production Section */}\n {data.type !== \"empty\" && (\n <>\n <Separator />\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Factory className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">Production Progress</span>\n <Badge \n variant={getStatusBadgeVariant(productionStatus)} \n className={cn(\"text-xs ml-auto\", getStatusBadgeClasses(productionStatus))}\n >\n {getStatusLabel(productionStatus)}\n </Badge>\n </div>\n \n {/* Progress bar */}\n <div className=\"space-y-1.5\">\n <div className=\"flex justify-between text-xs text-muted-foreground\">\n <span>Progress</span>\n <span>{Math.round(productionProgress)}%</span>\n </div>\n <div className=\"w-full h-2 bg-muted rounded-full overflow-hidden\">\n <div \n className={cn(\n \"h-full rounded-full transition-all\",\n productionStatus === \"critical\" ? \"bg-red-500\" :\n productionStatus === \"delayed\" ? \"bg-amber-500\" :\n \"bg-green-500\"\n )}\n style={{ width: `${productionProgress}%` }}\n />\n </div>\n </div>\n\n {/* Progress Input */}\n <div className={cn(\n \"p-3 rounded-lg border bg-card space-y-3\",\n )}>\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n Update Progress\n </div>\n \n {production ? (\n // If we have production data, show produced amount input\n <div className=\"grid gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"produced\" className=\"text-xs\">\n Produced ({formatProductionUnit(production.unit)})\n </Label>\n <div className=\"flex items-center gap-2\">\n <Input\n id=\"produced\"\n type=\"number\"\n min=\"0\"\n max={production.target}\n value={producedValue}\n onChange={handleProducedChange}\n className=\"h-8 text-sm\"\n />\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">\n / {production.target} {formatProductionUnit(production.unit)}\n </span>\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"progress\" className=\"text-xs\">\n Progress (%)\n </Label>\n <Input\n id=\"progress\"\n type=\"number\"\n min=\"0\"\n max=\"100\"\n value={progressValue}\n onChange={handleProgressChange}\n className=\"h-8 text-sm\"\n />\n </div>\n </div>\n ) : (\n // Simple progress input if no production data\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"progress\" className=\"text-xs\">\n Progress (%)\n </Label>\n <Input\n id=\"progress\"\n type=\"number\"\n min=\"0\"\n max=\"100\"\n value={progressValue}\n onChange={handleProgressChange}\n className=\"h-8 text-sm\"\n />\n </div>\n )}\n\n {/* Save button */}\n {onProgressUpdate && (\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={!hasChanges}\n onClick={handleSave}\n >\n {hasChanges ? \"Save Progress\" : \"No Changes\"}\n </Button>\n )}\n </div>\n\n {/* Production summary */}\n {production && (\n <div className=\"flex items-center justify-between p-3 rounded-lg border bg-muted/30\">\n <div className=\"flex items-center gap-2\">\n <Package className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm\">Target</span>\n </div>\n <span className=\"text-sm font-medium\">\n {production.target} {formatProductionUnit(production.unit)}\n </span>\n </div>\n )}\n </div>\n </>\n )}\n\n {/* Deliveries Section */}\n {data.deliveries && data.deliveries.length > 0 && (\n <>\n <Separator />\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Truck className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">Deliveries</span>\n <span className=\"text-xs text-muted-foreground ml-auto\">\n {data.deliveries.length} scheduled\n </span>\n </div>\n \n <div className=\"space-y-2\">\n {data.deliveries.map((delivery, index) => (\n <DeliveryCard key={delivery.id} delivery={delivery} index={index} />\n ))}\n </div>\n </div>\n </>\n )}\n\n {/* No logistics state */}\n {data.type === \"no-logistics\" && (\n <>\n <Separator />\n <div className=\"flex items-center gap-2 text-muted-foreground p-3 bg-muted/50 rounded-lg\">\n <Truck className=\"h-4 w-4\" />\n <span className=\"text-sm\">No logistics scheduled for this week</span>\n </div>\n </>\n )}\n\n {/* Warning */}\n {data.hasWarning && data.warningMessage && (\n <>\n <Separator />\n <div className=\"flex items-start gap-2 rounded-lg bg-amber-50 dark:bg-amber-950/50 p-3 text-amber-700 dark:text-amber-300\">\n <AlertTriangle className=\"h-4 w-4 mt-0.5 shrink-0\" />\n <div className=\"text-sm\">{data.warningMessage}</div>\n </div>\n </>\n )}\n\n {/* Notes */}\n {data.notes && (\n <>\n <Separator />\n <div className=\"space-y-1.5\">\n <span className=\"text-xs text-muted-foreground\">Notes</span>\n <p className=\"text-sm\">{data.notes}</p>\n </div>\n </>\n )}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\nexport { WeekDetailDialog }\n","/**\n * Event Calendar Types\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n// Event color options\nexport type TEventColor = \"blue\" | \"green\" | \"red\" | \"yellow\" | \"purple\" | \"orange\"\n\n// Badge display variants\nexport type TBadgeVariant = \"dot\" | \"colored\" | \"mixed\"\n\n// Calendar view types\nexport type TCalendarView = \"month\" | \"week\" | \"day\" | \"year\" | \"agenda\"\n\n// User interface\nexport interface IUser {\n id: string\n name: string\n picturePath?: string\n}\n\n// Event interface\nexport interface IEvent {\n id: string\n title: string\n description?: string\n startDate: string // ISO string\n endDate: string // ISO string\n color: TEventColor\n user: IUser\n}\n\n// Calendar context state\nexport interface ICalendarState {\n selectedDate: Date\n selectedUserId: string | null\n events: IEvent[]\n users: IUser[]\n badgeVariant: TBadgeVariant\n view: TCalendarView\n}\n\n// Calendar context actions\nexport interface ICalendarActions {\n setSelectedDate: (date: Date) => void\n setSelectedUserId: (userId: string | null) => void\n setEvents: (events: IEvent[]) => void\n addEvent: (event: IEvent) => void\n updateEvent: (event: IEvent) => void\n deleteEvent: (eventId: string) => void\n setBadgeVariant: (variant: TBadgeVariant) => void\n setView: (view: TCalendarView) => void\n goToToday: () => void\n goToPrevious: () => void\n goToNext: () => void\n}\n\n// Combined context type\nexport interface ICalendarContext extends ICalendarState, ICalendarActions {}\n\n// Event dialog props\nexport interface IEventDialogProps {\n mode: \"add\" | \"edit\"\n event?: IEvent\n defaultDate?: Date\n onSubmit: (event: Omit<IEvent, \"id\"> | IEvent) => void\n onClose: () => void\n}\n\n// View component props\nexport interface IViewProps {\n events: IEvent[]\n selectedDate: Date\n onEventClick?: (event: IEvent) => void\n onDateClick?: (date: Date) => void\n onEventDrop?: (event: IEvent, newStart: Date, newEnd: Date) => void\n}\n\n// Navigation header props\nexport interface ICalendarHeaderProps {\n showViewSwitcher?: boolean\n showUserFilter?: boolean\n showBadgeVariant?: boolean\n showToday?: boolean\n}\n\n// Day cell props for month view\nexport interface IDayCellProps {\n date: Date\n events: IEvent[]\n isCurrentMonth: boolean\n isToday: boolean\n isSelected: boolean\n onDateClick?: (date: Date) => void\n onEventClick?: (event: IEvent) => void\n onEventDrop?: (event: IEvent, newDate: Date) => void\n}\n\n// Time slot props for week/day view\nexport interface ITimeSlotProps {\n date: Date\n hour: number\n events: IEvent[]\n onTimeClick?: (date: Date, hour: number) => void\n onEventClick?: (event: IEvent) => void\n onEventDrop?: (event: IEvent, newStart: Date) => void\n}\n\n// Event badge props\nexport interface IEventBadgeProps {\n event: IEvent\n variant: TBadgeVariant\n onClick?: (event: IEvent) => void\n isDragging?: boolean\n}\n\n// Drag and drop context\nexport interface IDragContext {\n draggedEvent: IEvent | null\n setDraggedEvent: (event: IEvent | null) => void\n isDragging: boolean\n}\n\n// Working hours configuration (per-day, matching original)\nexport type TWorkingHours = { [key: number]: { from: number; to: number } }\n\n// Visible hours configuration\nexport type TVisibleHours = { from: number; to: number }\n\n// Simple working hours (legacy)\nexport interface IWorkingHours {\n start: number // Hour (0-23)\n end: number // Hour (0-23)\n}\n\n// Default working hours (Mon-Fri 9-17, Sat-Sun closed)\nexport const DEFAULT_WORKING_HOURS: TWorkingHours = {\n 0: { from: 0, to: 0 }, // Sunday - closed\n 1: { from: 9, to: 17 }, // Monday\n 2: { from: 9, to: 17 }, // Tuesday\n 3: { from: 9, to: 17 }, // Wednesday\n 4: { from: 9, to: 17 }, // Thursday\n 5: { from: 9, to: 17 }, // Friday\n 6: { from: 0, to: 0 }, // Saturday - closed\n}\n\n// Default visible hours\nexport const DEFAULT_VISIBLE_HOURS: TVisibleHours = { from: 0, to: 24 }\n\n// Calendar cell for month view\nexport interface ICalendarCell {\n day: number\n currentMonth: boolean\n date: Date\n}\n\n// Calendar configuration\nexport interface ICalendarConfig {\n workingHours?: TWorkingHours\n visibleHours?: TVisibleHours\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 // Sunday = 0\n locale?: string\n timeFormat?: \"12h\" | \"24h\"\n}\n\n// Event position for rendering (internal use)\nexport interface IEventPosition {\n top: number\n left: number\n width: number\n height: number\n}\n\n// Color mapping to CSS classes/tokens\nexport const EVENT_COLORS: Record<TEventColor, { bg: string; text: string; border: string }> = {\n blue: {\n bg: \"bg-blue-500/20\",\n text: \"text-blue-700 dark:text-blue-300\",\n border: \"border-blue-500\",\n },\n green: {\n bg: \"bg-green-500/20\",\n text: \"text-green-700 dark:text-green-300\",\n border: \"border-green-500\",\n },\n red: {\n bg: \"bg-red-500/20\",\n text: \"text-red-700 dark:text-red-300\",\n border: \"border-red-500\",\n },\n yellow: {\n bg: \"bg-yellow-500/20\",\n text: \"text-yellow-700 dark:text-yellow-300\",\n border: \"border-yellow-500\",\n },\n purple: {\n bg: \"bg-purple-500/20\",\n text: \"text-purple-700 dark:text-purple-300\",\n border: \"border-purple-500\",\n },\n orange: {\n bg: \"bg-primary/20\",\n text: \"text-primary dark:text-orange-300\",\n border: \"border-primary\",\n },\n}\n\n// View labels for UI\nexport const VIEW_LABELS: Record<TCalendarView, string> = {\n month: \"Month\",\n week: \"Week\",\n day: \"Day\",\n year: \"Year\",\n agenda: \"Agenda\",\n}\n\n// Badge variant labels for UI\nexport const BADGE_VARIANT_LABELS: Record<TBadgeVariant, string> = {\n dot: \"Dot\",\n colored: \"Colored\",\n mixed: \"Mixed\",\n}\n\n","/**\n * Event Calendar Context\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport {\n addDays,\n addMonths,\n addWeeks,\n addYears,\n subDays,\n subMonths,\n subWeeks,\n subYears,\n} from \"date-fns\"\n\nimport type {\n IEvent,\n IUser,\n TBadgeVariant,\n TCalendarView,\n TWorkingHours,\n TVisibleHours,\n} from \"./types\"\nimport {\n DEFAULT_WORKING_HOURS,\n DEFAULT_VISIBLE_HOURS,\n} from \"./types\"\n\n// Extended context interface with working hours and visible hours\nexport interface IExtendedCalendarContext {\n // State\n selectedDate: Date\n selectedUserId: string | null\n events: IEvent[]\n users: IUser[]\n badgeVariant: TBadgeVariant\n view: TCalendarView\n workingHours: TWorkingHours\n visibleHours: TVisibleHours\n // Actions\n setSelectedDate: (date: Date) => void\n setSelectedUserId: (userId: string | null) => void\n setEvents: (events: IEvent[]) => void\n addEvent: (event: IEvent) => void\n updateEvent: (event: IEvent) => void\n deleteEvent: (eventId: string) => void\n setBadgeVariant: (variant: TBadgeVariant) => void\n setView: (view: TCalendarView) => void\n setWorkingHours: (hours: TWorkingHours) => void\n setVisibleHours: (hours: TVisibleHours) => void\n goToToday: () => void\n goToPrevious: () => void\n goToNext: () => void\n}\n\nconst CalendarContext = React.createContext<IExtendedCalendarContext | null>(null)\n\nexport interface EventCalendarProviderProps {\n children: React.ReactNode\n events?: IEvent[]\n users?: IUser[]\n defaultDate?: Date\n defaultView?: TCalendarView\n defaultBadgeVariant?: TBadgeVariant\n defaultUserId?: string | null\n defaultWorkingHours?: TWorkingHours\n defaultVisibleHours?: TVisibleHours\n onEventAdd?: (event: IEvent) => void\n onEventUpdate?: (event: IEvent) => void\n onEventDelete?: (eventId: string) => void\n}\n\nexport function EventCalendarProvider({\n children,\n events: initialEvents = [],\n users: initialUsers = [],\n defaultDate = new Date(),\n defaultView = \"month\",\n defaultBadgeVariant = \"colored\",\n defaultUserId = null,\n defaultWorkingHours = DEFAULT_WORKING_HOURS,\n defaultVisibleHours = DEFAULT_VISIBLE_HOURS,\n onEventAdd,\n onEventUpdate,\n onEventDelete,\n}: EventCalendarProviderProps) {\n const [selectedDate, setSelectedDate] = React.useState<Date>(defaultDate)\n const [selectedUserId, setSelectedUserId] = React.useState<string | null>(defaultUserId)\n const [events, setEventsState] = React.useState<IEvent[]>(initialEvents)\n const [users] = React.useState<IUser[]>(initialUsers)\n const [badgeVariant, setBadgeVariant] = React.useState<TBadgeVariant>(defaultBadgeVariant)\n const [view, setView] = React.useState<TCalendarView>(defaultView)\n const [workingHours, setWorkingHours] = React.useState<TWorkingHours>(defaultWorkingHours)\n const [visibleHours, setVisibleHours] = React.useState<TVisibleHours>(defaultVisibleHours)\n\n // Sync events when initialEvents prop changes\n React.useEffect(() => {\n setEventsState(initialEvents)\n }, [initialEvents])\n\n const setEvents = React.useCallback((newEvents: IEvent[]) => {\n setEventsState(newEvents)\n }, [])\n\n const addEvent = React.useCallback((event: IEvent) => {\n setEventsState((prev) => [...prev, event])\n onEventAdd?.(event)\n }, [onEventAdd])\n\n const updateEvent = React.useCallback((event: IEvent) => {\n setEventsState((prev) =>\n prev.map((e) => (e.id === event.id ? event : e))\n )\n onEventUpdate?.(event)\n }, [onEventUpdate])\n\n const deleteEvent = React.useCallback((eventId: string) => {\n setEventsState((prev) => prev.filter((e) => e.id !== eventId))\n onEventDelete?.(eventId)\n }, [onEventDelete])\n\n const goToToday = React.useCallback(() => {\n setSelectedDate(new Date())\n }, [])\n\n const goToPrevious = React.useCallback(() => {\n setSelectedDate((current) => {\n switch (view) {\n case \"day\":\n return subDays(current, 1)\n case \"week\":\n return subWeeks(current, 1)\n case \"month\":\n return subMonths(current, 1)\n case \"year\":\n return subYears(current, 1)\n case \"agenda\":\n return subMonths(current, 1)\n default:\n return current\n }\n })\n }, [view])\n\n const goToNext = React.useCallback(() => {\n setSelectedDate((current) => {\n switch (view) {\n case \"day\":\n return addDays(current, 1)\n case \"week\":\n return addWeeks(current, 1)\n case \"month\":\n return addMonths(current, 1)\n case \"year\":\n return addYears(current, 1)\n case \"agenda\":\n return addMonths(current, 1)\n default:\n return current\n }\n })\n }, [view])\n\n const contextValue = React.useMemo<IExtendedCalendarContext>(\n () => ({\n // State\n selectedDate,\n selectedUserId,\n events,\n users,\n badgeVariant,\n view,\n workingHours,\n visibleHours,\n // Actions\n setSelectedDate,\n setSelectedUserId,\n setEvents,\n addEvent,\n updateEvent,\n deleteEvent,\n setBadgeVariant,\n setView,\n setWorkingHours,\n setVisibleHours,\n goToToday,\n goToPrevious,\n goToNext,\n }),\n [\n selectedDate,\n selectedUserId,\n events,\n users,\n badgeVariant,\n view,\n workingHours,\n visibleHours,\n setEvents,\n addEvent,\n updateEvent,\n deleteEvent,\n goToToday,\n goToPrevious,\n goToNext,\n ]\n )\n\n return (\n <CalendarContext.Provider value={contextValue}>\n {children}\n </CalendarContext.Provider>\n )\n}\n\nexport function useEventCalendar() {\n const context = React.useContext(CalendarContext)\n if (!context) {\n throw new Error(\"useEventCalendar must be used within an EventCalendarProvider\")\n }\n return context\n}\n\n// Optional hook to get filtered events by user\nexport function useFilteredEvents() {\n const { events, selectedUserId } = useEventCalendar()\n \n return React.useMemo(() => {\n if (!selectedUserId) return events\n return events.filter((event) => event.user.id === selectedUserId)\n }, [events, selectedUserId])\n}\n\n// Optional hook to get events for a specific date range\nexport function useEventsInRange(startDate: Date, endDate: Date) {\n const filteredEvents = useFilteredEvents()\n \n return React.useMemo(() => {\n return filteredEvents.filter((event) => {\n const eventStart = new Date(event.startDate)\n const eventEnd = new Date(event.endDate)\n return eventStart <= endDate && eventEnd >= startDate\n })\n }, [filteredEvents, startDate, endDate])\n}\n\nexport { CalendarContext }\n","/**\n * Event Calendar Helpers\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\nimport {\n addDays,\n addMinutes,\n addMonths,\n addWeeks,\n addYears,\n subDays,\n subMonths,\n subWeeks,\n subYears,\n differenceInDays,\n differenceInMinutes,\n eachDayOfInterval,\n eachHourOfInterval,\n endOfDay,\n endOfMonth,\n endOfWeek,\n endOfYear,\n format,\n getDay,\n getHours,\n getMinutes,\n isSameDay,\n isSameMonth,\n isSameWeek,\n isSameYear,\n isToday,\n isWithinInterval,\n parseISO,\n setHours,\n setMinutes,\n startOfDay,\n startOfMonth,\n startOfWeek,\n startOfYear,\n areIntervalsOverlapping,\n} from \"date-fns\"\n\nimport type {\n IEvent,\n ICalendarCell,\n TCalendarView,\n TWorkingHours,\n TVisibleHours,\n} from \"./types\"\n\n// ============================================================================\n// Header Helper Functions (from original)\n// ============================================================================\n\n/**\n * Get range text for header navigation\n */\nexport function rangeText(view: TCalendarView, date: Date) {\n const formatString = \"MMM d, yyyy\"\n let start: Date\n let end: Date\n\n switch (view) {\n case \"agenda\":\n start = startOfMonth(date)\n end = endOfMonth(date)\n break\n case \"year\":\n start = startOfYear(date)\n end = endOfYear(date)\n break\n case \"month\":\n start = startOfMonth(date)\n end = endOfMonth(date)\n break\n case \"week\":\n start = startOfWeek(date)\n end = endOfWeek(date)\n break\n case \"day\":\n return format(date, formatString)\n default:\n return \"Error while formatting\"\n }\n\n return `${format(start, formatString)} - ${format(end, formatString)}`\n}\n\n/**\n * Navigate date based on view\n */\nexport function navigateDate(\n date: Date,\n view: TCalendarView,\n direction: \"previous\" | \"next\"\n): Date {\n const operations = {\n agenda: direction === \"next\" ? addMonths : subMonths,\n year: direction === \"next\" ? addYears : subYears,\n month: direction === \"next\" ? addMonths : subMonths,\n week: direction === \"next\" ? addWeeks : subWeeks,\n day: direction === \"next\" ? addDays : subDays,\n }\n\n return operations[view](date, 1)\n}\n\n/**\n * Get events count for a date based on view\n */\nexport function getEventsCount(\n events: IEvent[],\n date: Date,\n view: TCalendarView\n): number {\n const compareFns = {\n agenda: isSameMonth,\n year: isSameYear,\n day: isSameDay,\n week: isSameWeek,\n month: isSameMonth,\n }\n\n return events.filter((event) =>\n compareFns[view](new Date(event.startDate), date)\n ).length\n}\n\n// ============================================================================\n// Week and Day View Helper Functions (from original)\n// ============================================================================\n\n/**\n * Get current events (happening now)\n */\nexport function getCurrentEvents(events: IEvent[]) {\n const now = new Date()\n return (\n events.filter((event) =>\n isWithinInterval(now, {\n start: parseISO(event.startDate),\n end: parseISO(event.endDate),\n })\n ) || []\n )\n}\n\n/**\n * Group events by time slots to handle overlapping\n */\nexport function groupEvents(dayEvents: IEvent[]) {\n const sortedEvents = dayEvents.sort(\n (a, b) => parseISO(a.startDate).getTime() - parseISO(b.startDate).getTime()\n )\n const groups: IEvent[][] = []\n\n for (const event of sortedEvents) {\n const eventStart = parseISO(event.startDate)\n\n let placed = false\n for (const group of groups) {\n const lastEventInGroup = group[group.length - 1]\n const lastEventEnd = parseISO(lastEventInGroup.endDate)\n\n if (eventStart >= lastEventEnd) {\n group.push(event)\n placed = true\n break\n }\n }\n\n if (!placed) groups.push([event])\n }\n\n return groups\n}\n\n/**\n * Get event block style for week/day view\n * Returns pixel-based positioning for 96px/hour grid\n */\nexport function getEventBlockStyle(\n event: IEvent,\n day: Date,\n groupIndex: number,\n groupSize: number,\n visibleHoursRange?: { from: number; to: number },\n hourHeight: number = 96\n) {\n const startDate = parseISO(event.startDate)\n const endDate = parseISO(event.endDate)\n const dayStart = new Date(day)\n dayStart.setHours(0, 0, 0, 0)\n \n const eventStart = startDate < dayStart ? dayStart : startDate\n const startMinutes = differenceInMinutes(eventStart, dayStart)\n const durationMinutes = differenceInMinutes(endDate, eventStart)\n\n // Calculate pixel position based on 96px per hour\n const visibleStartMinutes = (visibleHoursRange?.from ?? 0) * 60\n const topMinutes = startMinutes - visibleStartMinutes\n const topPx = (topMinutes / 60) * hourHeight\n \n // Calculate pixel height based on duration\n const heightPx = Math.max((durationMinutes / 60) * hourHeight, hourHeight / 4) // Min 15 min height\n\n const width = 100 / groupSize\n const left = groupIndex * width\n\n return { \n top: `${topPx}px`, \n height: `${heightPx}px`,\n width: `${width}%`, \n left: `${left}%` \n }\n}\n\n/**\n * Check if hour is working hour (per-day configuration)\n */\nexport function isWorkingHour(\n day: Date,\n hour: number,\n workingHours: TWorkingHours\n) {\n const dayIndex = day.getDay() as keyof typeof workingHours\n const dayHours = workingHours[dayIndex]\n return hour >= dayHours.from && hour < dayHours.to\n}\n\n/**\n * Get visible hours with adjustment for events\n */\nexport function getVisibleHours(\n visibleHours: TVisibleHours,\n singleDayEvents: IEvent[]\n) {\n let earliestEventHour = visibleHours.from\n let latestEventHour = visibleHours.to\n\n singleDayEvents.forEach((event) => {\n const startHour = parseISO(event.startDate).getHours()\n const endTime = parseISO(event.endDate)\n const endHour = endTime.getHours() + (endTime.getMinutes() > 0 ? 1 : 0)\n if (startHour < earliestEventHour) earliestEventHour = startHour\n if (endHour > latestEventHour) latestEventHour = endHour\n })\n\n latestEventHour = Math.min(latestEventHour, 24)\n\n const hours = Array.from(\n { length: latestEventHour - earliestEventHour },\n (_, i) => i + earliestEventHour\n )\n\n return { hours, earliestEventHour, latestEventHour }\n}\n\n// ============================================================================\n// Month View Helper Functions (from original)\n// ============================================================================\n\n/**\n * Get calendar cells for month view\n */\nexport function getCalendarCells(selectedDate: Date): ICalendarCell[] {\n const currentYear = selectedDate.getFullYear()\n const currentMonth = selectedDate.getMonth()\n\n const getDaysInMonth = (year: number, month: number) =>\n new Date(year, month + 1, 0).getDate()\n const getFirstDayOfMonth = (year: number, month: number) =>\n new Date(year, month, 1).getDay()\n\n const daysInMonth = getDaysInMonth(currentYear, currentMonth)\n const firstDayOfMonth = getFirstDayOfMonth(currentYear, currentMonth)\n const daysInPrevMonth = getDaysInMonth(currentYear, currentMonth - 1)\n const totalDays = firstDayOfMonth + daysInMonth\n\n const prevMonthCells = Array.from({ length: firstDayOfMonth }, (_, i) => ({\n day: daysInPrevMonth - firstDayOfMonth + i + 1,\n currentMonth: false,\n date: new Date(\n currentYear,\n currentMonth - 1,\n daysInPrevMonth - firstDayOfMonth + i + 1\n ),\n }))\n\n const currentMonthCells = Array.from({ length: daysInMonth }, (_, i) => ({\n day: i + 1,\n currentMonth: true,\n date: new Date(currentYear, currentMonth, i + 1),\n }))\n\n const nextMonthCells = Array.from(\n { length: (7 - (totalDays % 7)) % 7 },\n (_, i) => ({\n day: i + 1,\n currentMonth: false,\n date: new Date(currentYear, currentMonth + 1, i + 1),\n })\n )\n\n return [...prevMonthCells, ...currentMonthCells, ...nextMonthCells]\n}\n\n/**\n * Calculate event positions for month view (handles multi-day events)\n */\nexport function calculateMonthEventPositions(\n multiDayEvents: IEvent[],\n singleDayEvents: IEvent[],\n selectedDate: Date\n) {\n const monthStart = startOfMonth(selectedDate)\n const monthEnd = endOfMonth(selectedDate)\n\n const eventPositions: { [key: string]: number } = {}\n const occupiedPositions: { [key: string]: boolean[] } = {}\n\n eachDayOfInterval({ start: monthStart, end: monthEnd }).forEach((day) => {\n occupiedPositions[day.toISOString()] = [false, false, false]\n })\n\n const sortedEvents = [\n ...multiDayEvents.sort((a, b) => {\n const aDuration = differenceInDays(\n parseISO(a.endDate),\n parseISO(a.startDate)\n )\n const bDuration = differenceInDays(\n parseISO(b.endDate),\n parseISO(b.startDate)\n )\n return (\n bDuration - aDuration ||\n parseISO(a.startDate).getTime() - parseISO(b.startDate).getTime()\n )\n }),\n ...singleDayEvents.sort(\n (a, b) =>\n parseISO(a.startDate).getTime() - parseISO(b.startDate).getTime()\n ),\n ]\n\n sortedEvents.forEach((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n const eventDays = eachDayOfInterval({\n start: eventStart < monthStart ? monthStart : eventStart,\n end: eventEnd > monthEnd ? monthEnd : eventEnd,\n })\n\n let position = -1\n\n for (let i = 0; i < 3; i++) {\n if (\n eventDays.every((day) => {\n const dayPositions = occupiedPositions[startOfDay(day).toISOString()]\n return dayPositions && !dayPositions[i]\n })\n ) {\n position = i\n break\n }\n }\n\n if (position !== -1) {\n eventDays.forEach((day) => {\n const dayKey = startOfDay(day).toISOString()\n occupiedPositions[dayKey][position] = true\n })\n eventPositions[event.id] = position\n }\n })\n\n return eventPositions\n}\n\n/**\n * Get events for a specific month cell with positions\n */\nexport function getMonthCellEvents(\n date: Date,\n events: IEvent[],\n eventPositions: Record<string, number>\n) {\n const eventsForDate = events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n return (\n (date >= eventStart && date <= eventEnd) ||\n isSameDay(date, eventStart) ||\n isSameDay(date, eventEnd)\n )\n })\n\n return eventsForDate\n .map((event) => ({\n ...event,\n position: eventPositions[event.id] ?? -1,\n isMultiDay: event.startDate !== event.endDate,\n }))\n .sort((a, b) => {\n if (a.isMultiDay && !b.isMultiDay) return -1\n if (!a.isMultiDay && b.isMultiDay) return 1\n return a.position - b.position\n })\n}\n\n// ============================================================================\n// Date Navigation\n// ============================================================================\n\n/**\n * Get the days of the month grid (including days from prev/next months)\n */\nexport function getMonthDays(\n date: Date,\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0\n): Date[] {\n const start = startOfWeek(startOfMonth(date), { weekStartsOn })\n const end = endOfWeek(endOfMonth(date), { weekStartsOn })\n return eachDayOfInterval({ start, end })\n}\n\n/**\n * Get the days of a week\n */\nexport function getWeekDays(\n date: Date,\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0\n): Date[] {\n const start = startOfWeek(date, { weekStartsOn })\n const end = endOfWeek(date, { weekStartsOn })\n return eachDayOfInterval({ start, end })\n}\n\n/**\n * Get hours of a day\n */\nexport function getDayHours(date: Date, start = 0, end = 24): Date[] {\n const dayStart = setMinutes(setHours(date, start), 0)\n const dayEnd = setMinutes(setHours(date, end - 1), 59)\n return eachHourOfInterval({ start: dayStart, end: dayEnd })\n}\n\n/**\n * Get months of a year\n */\nexport function getYearMonths(date: Date): Date[] {\n const start = startOfYear(date)\n const months: Date[] = []\n for (let i = 0; i < 12; i++) {\n months.push(new Date(start.getFullYear(), i, 1))\n }\n return months\n}\n\n// ============================================================================\n// Event Helpers\n// ============================================================================\n\n/**\n * Filter events for a specific date\n */\nexport function getEventsForDate(events: IEvent[], date: Date): IEvent[] {\n return events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n return (\n isWithinInterval(date, {\n start: startOfDay(eventStart),\n end: endOfDay(eventEnd),\n }) ||\n isSameDay(eventStart, date) ||\n isSameDay(eventEnd, date)\n )\n })\n}\n\n/**\n * Filter events for a date range\n */\nexport function getEventsInRange(\n events: IEvent[],\n start: Date,\n end: Date\n): IEvent[] {\n return events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n return (\n (eventStart >= start && eventStart <= end) ||\n (eventEnd >= start && eventEnd <= end) ||\n (eventStart <= start && eventEnd >= end)\n )\n })\n}\n\n/**\n * Split events into single-day and multi-day\n */\nexport function splitEventsByDuration(events: IEvent[]): {\n singleDayEvents: IEvent[]\n multiDayEvents: IEvent[]\n} {\n const singleDayEvents: IEvent[] = []\n const multiDayEvents: IEvent[] = []\n\n events.forEach((event) => {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n if (isSameDay(start, end)) {\n singleDayEvents.push(event)\n } else {\n multiDayEvents.push(event)\n }\n })\n\n return { singleDayEvents, multiDayEvents }\n}\n\n/**\n * Check if an event spans multiple days\n */\nexport function isMultiDayEvent(event: IEvent): boolean {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return !isSameDay(start, end)\n}\n\n/**\n * Get the number of days an event spans\n */\nexport function getEventDuration(event: IEvent): number {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return differenceInDays(end, start) + 1\n}\n\n/**\n * Get the duration of an event in minutes\n */\nexport function getEventDurationMinutes(event: IEvent): number {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return differenceInMinutes(end, start)\n}\n\n/**\n * Sort events by start date, then by duration (longer first)\n */\nexport function sortEvents(events: IEvent[]): IEvent[] {\n return [...events].sort((a, b) => {\n const startDiff =\n parseISO(a.startDate).getTime() - parseISO(b.startDate).getTime()\n if (startDiff !== 0) return startDiff\n // Longer events first\n return getEventDuration(b) - getEventDuration(a)\n })\n}\n\n// ============================================================================\n// Time Helpers\n// ============================================================================\n\n/**\n * Get the top position percentage for an event in time view\n */\nexport function getTimePosition(\n event: IEvent,\n visibleHoursRange?: { from: number; to: number }\n): number {\n const start = parseISO(event.startDate)\n const hours = getHours(start)\n const minutes = getMinutes(start)\n\n const startHour = visibleHoursRange?.from ?? 0\n const totalMinutes = (hours - startHour) * 60 + minutes\n const totalDayMinutes = ((visibleHoursRange?.to ?? 24) - startHour) * 60\n\n return (totalMinutes / totalDayMinutes) * 100\n}\n\n/**\n * Get the height percentage for an event in time view\n */\nexport function getTimeHeight(\n event: IEvent,\n visibleHoursRange?: { from: number; to: number }\n): number {\n const duration = getEventDurationMinutes(event)\n const totalDayMinutes =\n ((visibleHoursRange?.to ?? 24) - (visibleHoursRange?.from ?? 0)) * 60\n return Math.min((duration / totalDayMinutes) * 100, 100)\n}\n\n/**\n * Format time based on 12h or 24h format\n */\nexport function formatTime(date: Date, use24h = false): string {\n return format(date, use24h ? \"HH:mm\" : \"h:mm a\")\n}\n\n// ============================================================================\n// Display Helpers\n// ============================================================================\n\n/**\n * Get the week day names\n */\nexport function getWeekDayNames(\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0,\n shortNames = true\n): string[] {\n const days = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ]\n const rotated = [...days.slice(weekStartsOn), ...days.slice(0, weekStartsOn)]\n return shortNames ? rotated.map((d) => d.slice(0, 3)) : rotated\n}\n\n/**\n * Get display label for calendar header\n */\nexport function getHeaderLabel(date: Date, view: string): string {\n switch (view) {\n case \"day\":\n return format(date, \"EEEE, MMMM d, yyyy\")\n case \"week\":\n const weekStart = startOfWeek(date)\n const weekEnd = endOfWeek(date)\n if (weekStart.getMonth() === weekEnd.getMonth()) {\n return format(weekStart, \"MMMM d\") + \" - \" + format(weekEnd, \"d, yyyy\")\n }\n return format(weekStart, \"MMM d\") + \" - \" + format(weekEnd, \"MMM d, yyyy\")\n case \"month\":\n return format(date, \"MMMM yyyy\")\n case \"year\":\n return format(date, \"yyyy\")\n case \"agenda\":\n return format(date, \"MMMM yyyy\")\n default:\n return format(date, \"MMMM yyyy\")\n }\n}\n\n/**\n * Get the date range for the current view\n */\nexport function getViewDateRange(\n date: Date,\n view: string\n): { start: Date; end: Date } {\n switch (view) {\n case \"day\":\n return { start: startOfDay(date), end: endOfDay(date) }\n case \"week\":\n return { start: startOfWeek(date), end: endOfWeek(date) }\n case \"month\":\n return { start: startOfMonth(date), end: endOfMonth(date) }\n case \"year\":\n return { start: startOfYear(date), end: endOfYear(date) }\n case \"agenda\":\n return { start: startOfMonth(date), end: endOfMonth(date) }\n default:\n return { start: startOfMonth(date), end: endOfMonth(date) }\n }\n}\n\n/**\n * Format date range for display\n */\nexport function formatDateRange(start: Date, end: Date): string {\n if (isSameDay(start, end)) {\n return format(start, \"MMM d, yyyy\")\n }\n if (start.getFullYear() === end.getFullYear()) {\n if (start.getMonth() === end.getMonth()) {\n return format(start, \"MMM d\") + \" - \" + format(end, \"d, yyyy\")\n }\n return format(start, \"MMM d\") + \" - \" + format(end, \"MMM d, yyyy\")\n }\n return format(start, \"MMM d, yyyy\") + \" - \" + format(end, \"MMM d, yyyy\")\n}\n\n/**\n * Check if a date is today\n */\nexport { isToday, isSameDay, isSameMonth }\n\n/**\n * Get day of week (0-6)\n */\nexport { getDay }\n\n// ============================================================================\n// Event Creation Helpers\n// ============================================================================\n\n/**\n * Create a new event with default values\n */\nexport function createDefaultEvent(\n startDate: Date,\n duration = 60 // minutes\n): Omit<IEvent, \"id\"> {\n return {\n title: \"\",\n description: \"\",\n startDate: startDate.toISOString(),\n endDate: addMinutes(startDate, duration).toISOString(),\n color: \"blue\",\n user: {\n id: \"\",\n name: \"\",\n },\n }\n}\n\n/**\n * Generate a unique ID for an event\n */\nexport function generateEventId(): string {\n return `event_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`\n}\n\n// ============================================================================\n// Drag and Drop Helpers\n// ============================================================================\n\n/**\n * Calculate new event dates after drag and drop\n */\nexport function calculateDropDates(\n event: IEvent,\n newStartDate: Date\n): { startDate: string; endDate: string } {\n const originalStart = parseISO(event.startDate)\n const originalEnd = parseISO(event.endDate)\n const duration = differenceInMinutes(originalEnd, originalStart)\n\n const newStart = newStartDate\n const newEnd = addMinutes(newStart, duration)\n\n return {\n startDate: newStart.toISOString(),\n endDate: newEnd.toISOString(),\n }\n}\n\n/**\n * Snap a date to the nearest time interval\n */\nexport function snapToInterval(date: Date, intervalMinutes = 15): Date {\n const minutes = getMinutes(date)\n const snappedMinutes = Math.round(minutes / intervalMinutes) * intervalMinutes\n return setMinutes(date, snappedMinutes)\n}\n\n// Export areIntervalsOverlapping for use in views\nexport { areIntervalsOverlapping, parseISO, format }\n","/**\n * Event Badge Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format, parseISO } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport type { IEvent, IEventBadgeProps, TBadgeVariant, TEventColor } from \"./types\"\n\n// Color classes for each event color - matching original big-calendar style\nconst colorClasses: Record<TEventColor, {\n dot: string\n bg: string\n text: string\n border: string\n solid: string\n}> = {\n blue: {\n dot: \"bg-blue-500\",\n bg: \"bg-blue-50 dark:bg-blue-950/50\",\n text: \"text-blue-600 dark:text-blue-400\",\n border: \"border-l-blue-500\",\n solid: \"bg-blue-500\",\n },\n green: {\n dot: \"bg-green-500\",\n bg: \"bg-green-50 dark:bg-green-950/50\",\n text: \"text-green-600 dark:text-green-400\",\n border: \"border-l-green-500\",\n solid: \"bg-green-500\",\n },\n red: {\n dot: \"bg-red-500\",\n bg: \"bg-red-50 dark:bg-red-950/50\",\n text: \"text-red-600 dark:text-red-400\",\n border: \"border-l-red-500\",\n solid: \"bg-red-500\",\n },\n yellow: {\n dot: \"bg-yellow-500\",\n bg: \"bg-yellow-50 dark:bg-yellow-950/50\",\n text: \"text-yellow-600 dark:text-yellow-400\",\n border: \"border-l-yellow-500\",\n solid: \"bg-yellow-500\",\n },\n purple: {\n dot: \"bg-purple-500\",\n bg: \"bg-purple-50 dark:bg-purple-950/50\",\n text: \"text-purple-600 dark:text-purple-400\",\n border: \"border-l-purple-500\",\n solid: \"bg-purple-500\",\n },\n orange: {\n dot: \"bg-primary\",\n bg: \"bg-orange-50 dark:bg-orange-950/50\",\n text: \"text-primary dark:text-orange-400\",\n border: \"border-l-primary\",\n solid: \"bg-primary\",\n },\n}\n\nexport interface EventBadgeProps extends Omit<IEventBadgeProps, \"onClick\"> {\n className?: string\n showTime?: boolean\n compact?: boolean\n onClick?: (event: IEvent, e: React.MouseEvent) => void\n}\n\nexport function EventBadge({\n event,\n variant = \"colored\",\n className,\n showTime = false,\n compact = false,\n isDragging = false,\n onClick,\n}: EventBadgeProps) {\n const colors = colorClasses[event.color]\n const startTime = format(parseISO(event.startDate), \"h:mm a\")\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n onClick?.(event, e)\n }\n\n if (variant === \"dot\") {\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"flex items-center gap-1.5 rounded-sm px-1.5 py-0.5 text-left text-xs transition-colors\",\n \"hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isDragging && \"opacity-50\",\n className\n )}\n >\n <span className={cn(\"size-2 shrink-0 rounded-full\", colors.dot)} />\n <span className=\"truncate text-foreground\">{event.title}</span>\n {showTime && (\n <span className=\"shrink-0 text-muted-foreground\">{startTime}</span>\n )}\n </button>\n )\n }\n\n if (variant === \"mixed\") {\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"flex items-center gap-1.5 rounded-sm border-l-2 px-1.5 py-0.5 text-left text-xs transition-colors\",\n \"hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n colors.border,\n isDragging && \"opacity-50\",\n className\n )}\n >\n <span className=\"truncate text-foreground\">{event.title}</span>\n {showTime && (\n <span className=\"shrink-0 text-muted-foreground\">{startTime}</span>\n )}\n </button>\n )\n }\n\n // Default: colored variant with left border stroke (matching original)\n // Content aligned to top-left for timeline views where events span multiple slots\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"flex flex-col items-start rounded-sm border-l-[3px] text-left text-xs transition-colors\",\n \"hover:opacity-80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n colors.border,\n colors.bg,\n colors.text,\n compact ? \"px-1.5 py-0.5\" : \"px-2 py-1\",\n isDragging && \"opacity-50 shadow-lg\",\n className\n )}\n >\n <span className=\"truncate font-medium max-w-full\">{event.title}</span>\n {showTime && (\n <span className=\"shrink-0 text-muted-foreground\">{startTime}</span>\n )}\n </button>\n )\n}\n\n// More events indicator\nexport interface MoreEventsProps {\n count: number\n onClick?: () => void\n className?: string\n}\n\nexport function MoreEvents({ count, onClick, className }: MoreEventsProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"w-full rounded-sm px-2 py-0.5 text-left text-xs text-muted-foreground transition-colors\",\n \"hover:bg-muted hover:text-foreground\",\n className\n )}\n >\n {count} more...\n </button>\n )\n}\n\n// Current time indicator for week/day views\nexport interface TimeIndicatorProps {\n className?: string\n}\n\nexport function TimeIndicator({ className }: TimeIndicatorProps) {\n const [now, setNow] = React.useState(new Date())\n\n React.useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 60000) // Update every minute\n return () => clearInterval(interval)\n }, [])\n\n const hours = now.getHours()\n const minutes = now.getMinutes()\n const topPercent = ((hours * 60 + minutes) / (24 * 60)) * 100\n\n return (\n <div\n className={cn(\n \"pointer-events-none absolute left-0 right-0 z-20 flex items-center\",\n className\n )}\n style={{ top: `${topPercent}%` }}\n >\n <div className=\"size-2.5 -translate-x-1/2 rounded-full bg-red-500\" />\n <div className=\"h-0.5 flex-1 bg-red-500\" />\n </div>\n )\n}\n\n","/**\n * Date Badge Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface DateBadgeProps {\n date: Date\n className?: string\n}\n\nexport function DateBadge({ date, className }: DateBadgeProps) {\n return (\n <div \n className={cn(\n \"flex flex-col w-14 overflow-hidden border border-border rounded-md\",\n className\n )}\n >\n {/* Month abbreviation - dark background */}\n <div className=\"bg-foreground text-background text-[10px] font-bold text-center py-1.5 uppercase tracking-wider\">\n {format(date, \"MMM\")}\n </div>\n {/* Day number - light background */}\n <div className=\"bg-background text-foreground text-2xl font-bold text-center py-2.5\">\n {format(date, \"d\")}\n </div>\n </div>\n )\n}\n\n","/**\n * Drag and Drop Context\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\n\nimport type { IEvent, IDragContext } from \"./types\"\nimport { calculateDropDates, snapToInterval } from \"./helpers\"\nimport { useEventCalendar } from \"./calendar-context\"\n\nconst DragContext = React.createContext<IDragContext | null>(null)\n\nexport interface DragProviderProps {\n children: React.ReactNode\n snapMinutes?: number\n onDragStart?: (event: IEvent) => void\n onDragEnd?: (event: IEvent, newStart: Date, newEnd: Date) => void\n}\n\nexport function DragProvider({\n children,\n snapMinutes = 15,\n onDragStart,\n onDragEnd,\n}: DragProviderProps) {\n const [draggedEvent, setDraggedEventState] = React.useState<IEvent | null>(null)\n const [isDragging, setIsDragging] = React.useState(false)\n const { updateEvent } = useEventCalendar()\n\n const setDraggedEvent = React.useCallback((event: IEvent | null) => {\n setDraggedEventState(event)\n setIsDragging(!!event)\n if (event) {\n onDragStart?.(event)\n }\n }, [onDragStart])\n\n const handleDrop = React.useCallback((newStartDate: Date) => {\n if (!draggedEvent) return\n\n const snappedDate = snapToInterval(newStartDate, snapMinutes)\n const { startDate, endDate } = calculateDropDates(draggedEvent, snappedDate)\n\n const updatedEvent: IEvent = {\n ...draggedEvent,\n startDate,\n endDate,\n }\n\n updateEvent(updatedEvent)\n onDragEnd?.(updatedEvent, new Date(startDate), new Date(endDate))\n setDraggedEvent(null)\n }, [draggedEvent, snapMinutes, updateEvent, onDragEnd, setDraggedEvent])\n\n const contextValue = React.useMemo<IDragContext>(\n () => ({\n draggedEvent,\n setDraggedEvent,\n isDragging,\n }),\n [draggedEvent, setDraggedEvent, isDragging]\n )\n\n return (\n <DragContext.Provider value={contextValue}>\n <DragDropHandler onDrop={handleDrop}>\n {children}\n </DragDropHandler>\n </DragContext.Provider>\n )\n}\n\nexport function useDrag() {\n const context = React.useContext(DragContext)\n if (!context) {\n throw new Error(\"useDrag must be used within a DragProvider\")\n }\n return context\n}\n\n// Internal component to handle drop coordinates\ninterface DragDropHandlerProps {\n children: React.ReactNode\n onDrop: (date: Date) => void\n}\n\nfunction DragDropHandler({ children, onDrop }: DragDropHandlerProps) {\n return <>{children}</>\n}\n\n// Draggable event wrapper\nexport interface DraggableEventProps {\n event: IEvent\n children: React.ReactNode\n disabled?: boolean\n}\n\nexport function DraggableEvent({\n event,\n children,\n disabled = false,\n}: DraggableEventProps) {\n const { setDraggedEvent, isDragging, draggedEvent } = useDrag()\n const isDragged = draggedEvent?.id === event.id\n\n const handleDragStart = (e: React.DragEvent) => {\n if (disabled) return\n e.dataTransfer.effectAllowed = \"move\"\n e.dataTransfer.setData(\"text/plain\", event.id)\n setDraggedEvent(event)\n }\n\n const handleDragEnd = () => {\n setDraggedEvent(null)\n }\n\n return (\n <div\n draggable={!disabled}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n className={isDragged ? \"opacity-50\" : \"\"}\n style={{ cursor: disabled ? \"default\" : \"grab\" }}\n >\n {children}\n </div>\n )\n}\n\n// Droppable zone for calendar cells\nexport interface DroppableZoneProps {\n date: Date\n children: React.ReactNode\n onDrop?: (event: IEvent, date: Date) => void\n className?: string\n}\n\nexport function DroppableZone({\n date,\n children,\n onDrop,\n className,\n}: DroppableZoneProps) {\n const { draggedEvent, setDraggedEvent } = useDrag()\n const { updateEvent } = useEventCalendar()\n const [isOver, setIsOver] = React.useState(false)\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = \"move\"\n setIsOver(true)\n }\n\n const handleDragLeave = () => {\n setIsOver(false)\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n setIsOver(false)\n\n if (!draggedEvent) return\n\n const { startDate, endDate } = calculateDropDates(draggedEvent, date)\n const updatedEvent: IEvent = {\n ...draggedEvent,\n startDate,\n endDate,\n }\n\n updateEvent(updatedEvent)\n onDrop?.(updatedEvent, date)\n setDraggedEvent(null)\n }\n\n return (\n <div\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n className={className}\n data-drag-over={isOver}\n >\n {children}\n </div>\n )\n}\n\n// Hook to make an element droppable with time calculation\nexport interface UseDroppableOptions {\n date: Date\n hour?: number\n minute?: number\n onDrop?: (event: IEvent, newDate: Date) => void\n}\n\nexport function useDroppable({ date, hour, minute = 0, onDrop }: UseDroppableOptions) {\n const { draggedEvent, setDraggedEvent } = useDrag()\n const { updateEvent } = useEventCalendar()\n const [isOver, setIsOver] = React.useState(false)\n\n const dropTargetDate = React.useMemo(() => {\n const targetDate = new Date(date)\n if (hour !== undefined) {\n targetDate.setHours(hour, minute, 0, 0)\n }\n return targetDate\n }, [date, hour, minute])\n\n const handleDragOver = React.useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = \"move\"\n if (!isOver) setIsOver(true)\n }, [isOver])\n\n const handleDragLeave = React.useCallback(() => {\n setIsOver(false)\n }, [])\n\n const handleDrop = React.useCallback((e: React.DragEvent) => {\n e.preventDefault()\n setIsOver(false)\n\n if (!draggedEvent) return\n\n const { startDate, endDate } = calculateDropDates(draggedEvent, dropTargetDate)\n const updatedEvent: IEvent = {\n ...draggedEvent,\n startDate,\n endDate,\n }\n\n updateEvent(updatedEvent)\n onDrop?.(updatedEvent, dropTargetDate)\n setDraggedEvent(null)\n }, [draggedEvent, dropTargetDate, updateEvent, onDrop, setDraggedEvent])\n\n return {\n isOver,\n dropProps: {\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n \"data-drag-over\": isOver,\n },\n }\n}\n\n// Hook to make an element draggable\nexport function useDraggable(event: IEvent, disabled = false) {\n const { setDraggedEvent, draggedEvent } = useDrag()\n const isDragged = draggedEvent?.id === event.id\n\n const handleDragStart = React.useCallback((e: React.DragEvent) => {\n if (disabled) return\n e.dataTransfer.effectAllowed = \"move\"\n e.dataTransfer.setData(\"text/plain\", event.id)\n setDraggedEvent(event)\n }, [disabled, event, setDraggedEvent])\n\n const handleDragEnd = React.useCallback(() => {\n setDraggedEvent(null)\n }, [setDraggedEvent])\n\n return {\n isDragged,\n dragProps: {\n draggable: !disabled,\n onDragStart: handleDragStart,\n onDragEnd: handleDragEnd,\n style: { cursor: disabled ? \"default\" : \"grab\" },\n },\n }\n}\n\nexport { DragContext }\n\n","/**\n * Month View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format, isSameDay, parseISO, startOfDay } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { EventBadge, MoreEvents } from \"./event-badge\"\nimport { useDroppable, useDraggable } from \"./dnd-context\"\nimport {\n getCalendarCells,\n calculateMonthEventPositions,\n getMonthCellEvents,\n isToday,\n isSameMonth,\n splitEventsByDuration,\n} from \"./helpers\"\nimport type { IEvent, IViewProps } from \"./types\"\n\nconst WEEK_DAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n\n// Draggable wrapper for events\nfunction DraggableEventWrapper({\n event,\n children,\n}: {\n event: IEvent\n children: React.ReactNode\n}) {\n const { isDragged, dragProps } = useDraggable(event)\n\n return (\n <div\n {...dragProps}\n className={cn(\n \"transition-opacity\",\n isDragged && \"opacity-50\"\n )}\n >\n {children}\n </div>\n )\n}\n\nexport interface MonthViewProps extends Partial<IViewProps> {\n className?: string\n maxEventsPerDay?: number\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n onMoreClick?: (date: Date, events: IEvent[]) => void\n}\n\nexport function MonthView({\n className,\n maxEventsPerDay = 3,\n weekStartsOn = 0,\n onEventClick,\n onDateClick,\n onMoreClick,\n}: MonthViewProps) {\n const { selectedDate, badgeVariant, setSelectedDate, setView } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Split events into single-day and multi-day\n const { singleDayEvents, multiDayEvents } = React.useMemo(\n () => splitEventsByDuration(filteredEvents),\n [filteredEvents]\n )\n\n // Get calendar cells\n const cells = React.useMemo(\n () => getCalendarCells(selectedDate),\n [selectedDate]\n )\n\n // Calculate event positions for multi-day events\n const eventPositions = React.useMemo(\n () => calculateMonthEventPositions(multiDayEvents, singleDayEvents, selectedDate),\n [multiDayEvents, singleDayEvents, selectedDate]\n )\n\n // All events combined for rendering\n const allEvents = [...multiDayEvents, ...singleDayEvents]\n\n const handleDateClick = (date: Date) => {\n setSelectedDate(date)\n setView(\"day\")\n onDateClick?.(date)\n }\n\n const handleMoreClick = (date: Date, events: IEvent[]) => {\n setSelectedDate(date)\n setView(\"day\")\n onMoreClick?.(date, events)\n }\n\n return (\n <div className={cn(\"\", className)}>\n {/* Week day headers */}\n <div className=\"grid grid-cols-7 divide-x divide-border/50\">\n {WEEK_DAYS.map((day) => (\n <div\n key={day}\n className=\"flex items-center justify-center py-2\"\n >\n <span className=\"text-xs font-medium text-muted-foreground\">\n {day}\n </span>\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 overflow-hidden\">\n {cells.map((cell) => (\n <DayCell\n key={cell.date.toISOString()}\n cell={cell}\n events={allEvents}\n eventPositions={eventPositions}\n selectedDate={selectedDate}\n badgeVariant={badgeVariant}\n maxEvents={maxEventsPerDay}\n onDateClick={handleDateClick}\n onEventClick={onEventClick}\n onMoreClick={handleMoreClick}\n />\n ))}\n </div>\n </div>\n )\n}\n\n// Day cell component\ninterface DayCellProps {\n cell: { day: number; currentMonth: boolean; date: Date }\n events: IEvent[]\n eventPositions: Record<string, number>\n selectedDate: Date\n badgeVariant: \"dot\" | \"colored\" | \"mixed\"\n maxEvents: number\n onDateClick: (date: Date) => void\n onEventClick?: (event: IEvent) => void\n onMoreClick: (date: Date, events: IEvent[]) => void\n}\n\nfunction DayCell({\n cell,\n events,\n eventPositions,\n selectedDate,\n badgeVariant,\n maxEvents,\n onDateClick,\n onEventClick,\n onMoreClick,\n}: DayCellProps) {\n const { date, currentMonth } = cell\n const isCurrentDay = isToday(date)\n const isSelectedDay = isSameDay(date, selectedDate)\n\n // Droppable zone for drag and drop\n const { isOver, dropProps } = useDroppable({ date })\n\n // Get events for this cell with positions\n const cellEvents = getMonthCellEvents(date, events, eventPositions)\n\n // Separate events by position\n const positionedEvents = cellEvents.filter((e) => e.position !== -1)\n const hiddenEvents = cellEvents.filter((e) => e.position === -1)\n\n // Create slots for events (max 3 visible rows)\n const slots: (typeof cellEvents[0] | null)[] = [null, null, null]\n positionedEvents.forEach((event) => {\n if (event.position >= 0 && event.position < 3) {\n slots[event.position] = event\n }\n })\n\n // Count hidden events\n const hiddenCount = hiddenEvents.length + positionedEvents.filter((e) => e.position >= 3).length\n\n // Check if this is the first day of a multi-day event\n const isEventStart = (event: IEvent) =>\n isSameDay(parseISO(event.startDate), date)\n\n return (\n <div\n {...dropProps}\n className={cn(\n \"relative min-h-[120px] border-b border-r border-border/50 p-1 transition-colors\",\n !currentMonth && \"bg-muted/30\",\n isOver && \"bg-primary/10 ring-2 ring-primary/50 ring-inset\"\n )}\n >\n {/* Date number */}\n <button\n type=\"button\"\n onClick={() => onDateClick(date)}\n className={cn(\n \"mb-1 flex size-7 items-center justify-center text-sm transition-colors\",\n \"hover:bg-muted rounded-sm\",\n isCurrentDay && \"bg-primary text-primary-foreground hover:bg-primary/90 rounded-sm\",\n isSelectedDay && !isCurrentDay && \"bg-muted font-semibold rounded-sm\",\n !currentMonth && \"text-muted-foreground\"\n )}\n >\n {cell.day}\n </button>\n\n {/* Event slots */}\n <div className=\"space-y-0.5\">\n {slots.map((event, index) => {\n if (!event) {\n return <div key={`empty-${index}`} className=\"h-5\" />\n }\n\n const showTitle = isEventStart(event) || startOfDay(date).getDay() === 0\n\n return (\n <DraggableEventWrapper key={event.id} event={event}>\n <EventBadge\n event={event}\n variant={badgeVariant}\n compact\n showTime={showTitle}\n onClick={(e) => onEventClick?.(e)}\n className={cn(\n \"w-full\",\n // If not showing title, make it appear as a continuation\n !showTitle && \"rounded-l-none border-l-0\"\n )}\n />\n </DraggableEventWrapper>\n )\n })}\n\n {/* More events indicator */}\n {hiddenCount > 0 && (\n <MoreEvents\n count={hiddenCount}\n onClick={() => onMoreClick(date, cellEvents)}\n />\n )}\n </div>\n </div>\n )\n}\n","/**\n * Week View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { startOfWeek, addDays, format, parseISO, isSameDay, areIntervalsOverlapping } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea } from \"../scroll-area\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { EventBadge } from \"./event-badge\"\nimport { useDroppable, useDraggable } from \"./dnd-context\"\nimport {\n getEventsForDate,\n getEventBlockStyle,\n groupEvents,\n isWorkingHour,\n getVisibleHours,\n isToday,\n splitEventsByDuration,\n} from \"./helpers\"\nimport type { IEvent, IViewProps } from \"./types\"\n\nexport interface WeekViewProps extends Partial<IViewProps> {\n className?: string\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n onTimeClick?: (date: Date, hour: number, minute: number) => void\n}\n\n// Draggable wrapper for events in week view\nfunction DraggableEventWrapper({\n event,\n children,\n className,\n style,\n}: {\n event: IEvent\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}) {\n const { isDragged, dragProps } = useDraggable(event)\n\n return (\n <div\n {...dragProps}\n className={cn(\n className,\n \"transition-opacity\",\n isDragged && \"opacity-50\"\n )}\n style={style}\n >\n {children}\n </div>\n )\n}\n\n// Droppable time slot for week view\nfunction DroppableTimeSlot({\n date,\n hour,\n minute,\n className,\n onClick,\n}: {\n date: Date\n hour: number\n minute: number\n className?: string\n onClick?: () => void\n}) {\n const { isOver, dropProps } = useDroppable({ date, hour, minute })\n\n return (\n <div\n {...dropProps}\n onClick={onClick}\n className={cn(\n className,\n \"cursor-pointer transition-colors hover:bg-accent\",\n isOver && \"bg-primary/20\"\n )}\n />\n )\n}\n\nexport function WeekView({\n className,\n weekStartsOn = 0,\n onEventClick,\n onDateClick,\n onTimeClick,\n}: WeekViewProps) {\n const {\n selectedDate,\n badgeVariant,\n workingHours,\n visibleHours,\n } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Split events\n const { singleDayEvents, multiDayEvents } = React.useMemo(\n () => splitEventsByDuration(filteredEvents),\n [filteredEvents]\n )\n\n // Calculate visible hours based on events\n const { hours, earliestEventHour, latestEventHour } = getVisibleHours(\n visibleHours,\n singleDayEvents\n )\n\n // Week days\n const weekStart = startOfWeek(selectedDate, { weekStartsOn })\n const weekDays = Array.from({ length: 7 }, (_, i) => addDays(weekStart, i))\n\n return (\n <>\n {/* Mobile message */}\n <div className=\"flex flex-col items-center justify-center border-b py-4 text-sm text-muted-foreground sm:hidden\">\n <p>Weekly view is not available on smaller devices.</p>\n <p>Please switch to daily or monthly view.</p>\n </div>\n\n {/* Desktop week view */}\n <div className={cn(\"hidden flex-col sm:flex\", className)}>\n {/* Multi-day events row */}\n <WeekViewMultiDayEventsRow\n selectedDate={selectedDate}\n multiDayEvents={multiDayEvents}\n />\n\n {/* Week header */}\n <div className=\"relative z-20 flex border-b border-border/50\">\n <div className=\"w-18\" />\n <div className=\"grid flex-1 grid-cols-7 divide-x divide-border/50 border-l border-border/50\">\n {weekDays.map((day, index) => (\n <span\n key={index}\n className=\"py-2 text-center text-xs font-medium text-muted-foreground\"\n >\n {format(day, \"EE\")}{\" \"}\n <span className=\"ml-1 font-semibold text-foreground\">\n {format(day, \"d\")}\n </span>\n </span>\n ))}\n </div>\n </div>\n\n {/* Time grid */}\n <ScrollArea className=\"h-[736px]\" type=\"always\">\n <div className=\"flex overflow-hidden\">\n {/* Hours column */}\n <div className=\"relative w-18\">\n {hours.map((hour, index) => (\n <div key={hour} className=\"relative\" style={{ height: \"96px\" }}>\n <div className=\"absolute -top-3 right-2 flex h-6 items-center\">\n {index !== 0 && (\n <span className=\"text-xs text-muted-foreground\">\n {format(new Date().setHours(hour, 0, 0, 0), \"hh a\")}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Week grid */}\n <div className=\"relative flex-1 border-l border-border/50\">\n <div className=\"grid grid-cols-7 divide-x divide-border/50\">\n {weekDays.map((day, dayIndex) => {\n const dayEvents = singleDayEvents.filter(\n (event) =>\n isSameDay(parseISO(event.startDate), day) ||\n isSameDay(parseISO(event.endDate), day)\n )\n const groupedEvents = groupEvents(dayEvents)\n\n return (\n <div key={dayIndex} className=\"relative\">\n {hours.map((hour, index) => {\n const isDisabled = !isWorkingHour(day, hour, workingHours)\n\n return (\n <div\n key={hour}\n className={cn(\n \"relative\",\n isDisabled &&\n \"bg-[repeating-linear-gradient(45deg,transparent,transparent_5px,rgba(0,0,0,0.04)_5px,rgba(0,0,0,0.04)_10px)] dark:bg-[repeating-linear-gradient(45deg,transparent,transparent_5px,rgba(255,255,255,0.04)_5px,rgba(255,255,255,0.04)_10px)]\"\n )}\n style={{ height: \"96px\" }}\n >\n {/* Hour line */}\n {index !== 0 && (\n <div className=\"pointer-events-none absolute inset-x-0 top-0 border-b border-border/40\" />\n )}\n\n {/* 15-minute click/drop zones */}\n <DroppableTimeSlot\n date={day}\n hour={hour}\n minute={0}\n className=\"absolute inset-x-0 top-0 h-[24px]\"\n onClick={() => onTimeClick?.(day, hour, 0)}\n />\n <DroppableTimeSlot\n date={day}\n hour={hour}\n minute={15}\n className=\"absolute inset-x-0 top-[24px] h-[24px]\"\n onClick={() => onTimeClick?.(day, hour, 15)}\n />\n\n {/* Half-hour line (dashed) */}\n <div className=\"pointer-events-none absolute inset-x-0 top-1/2 border-b border-dashed border-border/30\" />\n\n <DroppableTimeSlot\n date={day}\n hour={hour}\n minute={30}\n className=\"absolute inset-x-0 top-[48px] h-[24px]\"\n onClick={() => onTimeClick?.(day, hour, 30)}\n />\n <DroppableTimeSlot\n date={day}\n hour={hour}\n minute={45}\n className=\"absolute inset-x-0 top-[72px] h-[24px]\"\n onClick={() => onTimeClick?.(day, hour, 45)}\n />\n </div>\n )\n })}\n\n {/* Events */}\n {groupedEvents.map((group, groupIndex) =>\n group.map((event) => {\n let style = getEventBlockStyle(\n event,\n day,\n groupIndex,\n groupedEvents.length,\n { from: earliestEventHour, to: latestEventHour }\n )\n\n const hasOverlap = groupedEvents.some(\n (otherGroup, otherIndex) =>\n otherIndex !== groupIndex &&\n otherGroup.some((otherEvent) =>\n areIntervalsOverlapping(\n {\n start: parseISO(event.startDate),\n end: parseISO(event.endDate),\n },\n {\n start: parseISO(otherEvent.startDate),\n end: parseISO(otherEvent.endDate),\n }\n )\n )\n )\n\n if (!hasOverlap) {\n style = { ...style, width: \"100%\", left: \"0%\" }\n }\n\n return (\n <DraggableEventWrapper\n key={event.id}\n event={event}\n className=\"absolute px-0.5 py-0.5\"\n style={style}\n >\n <EventBadge\n event={event}\n variant={badgeVariant}\n showTime\n onClick={(e) => onEventClick?.(e)}\n className=\"h-full w-full\"\n />\n </DraggableEventWrapper>\n )\n })\n )}\n </div>\n )\n })}\n </div>\n\n {/* Current time indicator */}\n {weekDays.some((day) => isToday(day)) && (\n <CalendarTimeline\n firstVisibleHour={earliestEventHour}\n lastVisibleHour={latestEventHour}\n />\n )}\n </div>\n </div>\n </ScrollArea>\n </div>\n </>\n )\n}\n\n// Multi-day events row\ninterface WeekViewMultiDayEventsRowProps {\n selectedDate: Date\n multiDayEvents: IEvent[]\n}\n\nfunction WeekViewMultiDayEventsRow({\n selectedDate,\n multiDayEvents,\n}: WeekViewMultiDayEventsRowProps) {\n const { badgeVariant } = useEventCalendar()\n\n if (multiDayEvents.length === 0) return null\n\n const weekStart = startOfWeek(selectedDate)\n const weekDays = Array.from({ length: 7 }, (_, i) => addDays(weekStart, i))\n\n return (\n <div className=\"hidden border-b sm:flex\">\n <div className=\"w-18 shrink-0\" />\n <div className=\"grid flex-1 grid-cols-7 divide-x border-l\">\n {weekDays.map((day, index) => {\n const dayMultiEvents = multiDayEvents.filter((event) => {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return day >= start && day <= end\n })\n\n return (\n <div key={index} className=\"min-h-[32px] space-y-1 p-1\">\n {dayMultiEvents.slice(0, 2).map((event) => (\n <EventBadge\n key={event.id}\n event={event}\n variant={badgeVariant}\n compact\n className=\"w-full\"\n />\n ))}\n {dayMultiEvents.length > 2 && (\n <p className=\"text-xs text-muted-foreground text-center\">\n +{dayMultiEvents.length - 2} more\n </p>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\n// Calendar timeline (current time indicator)\ninterface CalendarTimelineProps {\n firstVisibleHour: number\n lastVisibleHour: number\n}\n\nfunction CalendarTimeline({\n firstVisibleHour,\n lastVisibleHour,\n}: CalendarTimelineProps) {\n const [currentTime, setCurrentTime] = React.useState(new Date())\n\n React.useEffect(() => {\n const interval = setInterval(() => {\n setCurrentTime(new Date())\n }, 60000)\n\n return () => clearInterval(interval)\n }, [])\n\n const currentHour = currentTime.getHours()\n const currentMinute = currentTime.getMinutes()\n\n if (currentHour < firstVisibleHour || currentHour >= lastVisibleHour) {\n return null\n }\n\n const minutesSinceStart =\n (currentHour - firstVisibleHour) * 60 + currentMinute\n const totalMinutes = (lastVisibleHour - firstVisibleHour) * 60\n const topPercent = (minutesSinceStart / totalMinutes) * 100\n\n return (\n <div\n className=\"pointer-events-none absolute inset-x-0 z-30 flex items-center\"\n style={{ top: `${topPercent}%` }}\n >\n <div className=\"size-3 -translate-x-1/2 rounded-full bg-red-500\" />\n <div className=\"h-0.5 flex-1 bg-red-500\" />\n </div>\n )\n}\n","/**\n * Day View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { Calendar as CalendarIcon, Clock, User } from \"lucide-react\"\nimport { format, parseISO, areIntervalsOverlapping } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea } from \"../scroll-area\"\nimport { Calendar } from \"../calendar\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { EventBadge, TimeIndicator } from \"./event-badge\"\nimport { useDroppable, useDraggable } from \"./dnd-context\"\nimport {\n getEventsForDate,\n getEventBlockStyle,\n groupEvents,\n getCurrentEvents,\n getVisibleHours,\n isWorkingHour,\n isToday,\n splitEventsByDuration,\n} from \"./helpers\"\nimport type { IEvent, IViewProps, TWorkingHours, TVisibleHours, TEventColor } from \"./types\"\nimport { DEFAULT_WORKING_HOURS, DEFAULT_VISIBLE_HOURS } from \"./types\"\n\n// Color classes for happening now cards\nconst colorClasses: Record<TEventColor, string> = {\n blue: \"border-l-blue-500\",\n green: \"border-l-green-500\",\n red: \"border-l-red-500\",\n yellow: \"border-l-yellow-500\",\n purple: \"border-l-purple-500\",\n orange: \"border-l-primary\",\n}\n\nexport interface DayViewProps extends Partial<IViewProps> {\n className?: string\n showSidebar?: boolean\n onTimeClick?: (date: Date, hour: number, minute: number) => void\n}\n\n// Draggable wrapper for events in day view\nfunction DraggableEventWrapper({\n event,\n children,\n className,\n style,\n}: {\n event: IEvent\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}) {\n const { isDragged, dragProps } = useDraggable(event)\n\n return (\n <div\n {...dragProps}\n className={cn(\n className,\n \"transition-opacity\",\n isDragged && \"opacity-50\"\n )}\n style={style}\n >\n {children}\n </div>\n )\n}\n\n// Droppable time slot for day view\nfunction DroppableTimeSlot({\n date,\n hour,\n minute,\n className,\n onClick,\n}: {\n date: Date\n hour: number\n minute: number\n className?: string\n onClick?: () => void\n}) {\n const { isOver, dropProps } = useDroppable({ date, hour, minute })\n\n return (\n <div\n {...dropProps}\n onClick={onClick}\n className={cn(\n className,\n \"cursor-pointer transition-colors hover:bg-accent\",\n isOver && \"bg-primary/20\"\n )}\n />\n )\n}\n\nexport function DayView({\n className,\n showSidebar = true,\n onEventClick,\n onTimeClick,\n}: DayViewProps) {\n const { \n selectedDate, \n setSelectedDate, \n badgeVariant, \n users,\n workingHours,\n visibleHours,\n } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Split events\n const { singleDayEvents, multiDayEvents } = React.useMemo(\n () => splitEventsByDuration(filteredEvents),\n [filteredEvents]\n )\n\n // Calculate visible hours based on events\n const { hours, earliestEventHour, latestEventHour } = getVisibleHours(\n visibleHours,\n singleDayEvents\n )\n\n // Get current events (happening now) - only for the selected day if it's today\n const currentEvents = React.useMemo(() => {\n if (!isToday(selectedDate)) return []\n return getCurrentEvents(singleDayEvents)\n }, [singleDayEvents, selectedDate])\n\n // Get events for the selected day\n const dayEvents = singleDayEvents.filter((event) => {\n const eventDate = parseISO(event.startDate)\n return (\n eventDate.getDate() === selectedDate.getDate() &&\n eventDate.getMonth() === selectedDate.getMonth() &&\n eventDate.getFullYear() === selectedDate.getFullYear()\n )\n })\n\n // Group events for positioning\n const groupedEvents = groupEvents(dayEvents)\n\n const handleDateSelect = (date: Date | undefined) => {\n if (date) {\n setSelectedDate(date)\n }\n }\n\n return (\n <div className={cn(\"flex\", className)}>\n {/* Main day view content */}\n <div className=\"flex flex-1 flex-col\">\n {/* Multi-day events row (if any) */}\n {multiDayEvents.length > 0 && (\n <DayViewMultiDayEventsRow\n selectedDate={selectedDate}\n multiDayEvents={multiDayEvents}\n />\n )}\n\n {/* Day header */}\n <div className=\"relative z-20 flex border-b border-border/50\">\n <div className=\"w-18\" />\n <span className=\"flex-1 border-l border-border/50 py-2 text-center text-xs font-medium text-muted-foreground\">\n {format(selectedDate, \"EE\")}{\" \"}\n <span className=\"font-semibold text-foreground\">\n {format(selectedDate, \"d\")}\n </span>\n </span>\n </div>\n\n {/* Time grid */}\n <ScrollArea className=\"h-[800px]\" type=\"always\">\n <div className=\"flex\">\n {/* Hours column */}\n <div className=\"relative w-18\">\n {hours.map((hour, index) => (\n <div key={hour} className=\"relative\" style={{ height: \"96px\" }}>\n <div className=\"absolute -top-3 right-2 flex h-6 items-center\">\n {index !== 0 && (\n <span className=\"text-xs text-muted-foreground\">\n {format(new Date().setHours(hour, 0, 0, 0), \"hh a\")}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"relative flex-1 border-l border-border/50\">\n <div className=\"relative\">\n {hours.map((hour, index) => {\n const isDisabled = !isWorkingHour(selectedDate, hour, workingHours)\n\n return (\n <div\n key={hour}\n className={cn(\n \"relative\",\n isDisabled && \"bg-[repeating-linear-gradient(45deg,transparent,transparent_5px,rgba(0,0,0,0.04)_5px,rgba(0,0,0,0.04)_10px)] dark:bg-[repeating-linear-gradient(45deg,transparent,transparent_5px,rgba(255,255,255,0.04)_5px,rgba(255,255,255,0.04)_10px)]\"\n )}\n style={{ height: \"96px\" }}\n >\n {/* Hour line */}\n {index !== 0 && (\n <div className=\"pointer-events-none absolute inset-x-0 top-0 border-b border-border/40\" />\n )}\n\n {/* 15-minute click/drop zones */}\n <DroppableTimeSlot\n date={selectedDate}\n hour={hour}\n minute={0}\n className=\"absolute inset-x-0 top-0 h-[24px]\"\n onClick={() => onTimeClick?.(selectedDate, hour, 0)}\n />\n <DroppableTimeSlot\n date={selectedDate}\n hour={hour}\n minute={15}\n className=\"absolute inset-x-0 top-[24px] h-[24px]\"\n onClick={() => onTimeClick?.(selectedDate, hour, 15)}\n />\n\n {/* Half-hour line (dashed) */}\n <div className=\"pointer-events-none absolute inset-x-0 top-1/2 border-b border-dashed border-border/30\" />\n\n <DroppableTimeSlot\n date={selectedDate}\n hour={hour}\n minute={30}\n className=\"absolute inset-x-0 top-[48px] h-[24px]\"\n onClick={() => onTimeClick?.(selectedDate, hour, 30)}\n />\n <DroppableTimeSlot\n date={selectedDate}\n hour={hour}\n minute={45}\n className=\"absolute inset-x-0 top-[72px] h-[24px]\"\n onClick={() => onTimeClick?.(selectedDate, hour, 45)}\n />\n </div>\n )\n })}\n\n {/* Events */}\n {groupedEvents.map((group, groupIndex) =>\n group.map((event) => {\n let style = getEventBlockStyle(\n event,\n selectedDate,\n groupIndex,\n groupedEvents.length,\n { from: earliestEventHour, to: latestEventHour }\n )\n\n // Check for overlaps\n const hasOverlap = groupedEvents.some(\n (otherGroup, otherIndex) =>\n otherIndex !== groupIndex &&\n otherGroup.some((otherEvent) =>\n areIntervalsOverlapping(\n {\n start: parseISO(event.startDate),\n end: parseISO(event.endDate),\n },\n {\n start: parseISO(otherEvent.startDate),\n end: parseISO(otherEvent.endDate),\n }\n )\n )\n )\n\n if (!hasOverlap) {\n style = { ...style, width: \"100%\", left: \"0%\" }\n }\n\n return (\n <DraggableEventWrapper\n key={event.id}\n event={event}\n className=\"absolute px-1 py-0.5\"\n style={style}\n >\n <EventBadge\n event={event}\n variant={badgeVariant}\n showTime\n onClick={(e) => onEventClick?.(e)}\n className=\"h-full w-full\"\n />\n </DraggableEventWrapper>\n )\n })\n )}\n </div>\n\n {/* Current time indicator */}\n {isToday(selectedDate) && (\n <CalendarTimeline\n firstVisibleHour={earliestEventHour}\n lastVisibleHour={latestEventHour}\n />\n )}\n </div>\n </div>\n </ScrollArea>\n </div>\n\n {/* Sidebar */}\n {showSidebar && (\n <div className=\"hidden w-64 divide-y border-l md:block\">\n {/* Mini Calendar */}\n <Calendar\n className=\"mx-auto w-fit\"\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleDateSelect}\n />\n\n {/* Happening Now */}\n <div className=\"flex-1 space-y-3\">\n {currentEvents.length > 0 ? (\n <div className=\"flex items-start gap-2 px-4 pt-4\">\n <span className=\"relative mt-[5px] flex size-2.5\">\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-green-400 opacity-75\" />\n <span className=\"relative inline-flex size-2.5 rounded-full bg-green-600\" />\n </span>\n <p className=\"text-sm font-semibold text-foreground\">\n Happening now\n </p>\n </div>\n ) : (\n <p className=\"p-4 text-center text-sm italic text-muted-foreground\">\n No appointments or consultations at the moment\n </p>\n )}\n\n {currentEvents.length > 0 && (\n <ScrollArea className=\"h-[422px] px-4\" type=\"always\">\n <div className=\"space-y-6 pb-4\">\n {currentEvents.map((event) => {\n const user = users.find((u) => u.id === event.user.id)\n\n return (\n <div key={event.id} className=\"space-y-1.5\">\n <p className=\"line-clamp-2 text-sm font-semibold\">\n {event.title}\n </p>\n\n {user && (\n <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n <User className=\"size-3.5\" />\n <span className=\"text-sm\">{user.name}</span>\n </div>\n )}\n\n <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n <CalendarIcon className=\"size-3.5\" />\n <span className=\"text-sm\">\n {format(new Date(), \"MMM d, yyyy\")}\n </span>\n </div>\n\n <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n <Clock className=\"size-3.5\" />\n <span className=\"text-sm\">\n {format(parseISO(event.startDate), \"h:mm a\")} -{\" \"}\n {format(parseISO(event.endDate), \"h:mm a\")}\n </span>\n </div>\n </div>\n )\n })}\n </div>\n </ScrollArea>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// Multi-day events row for day view\ninterface DayViewMultiDayEventsRowProps {\n selectedDate: Date\n multiDayEvents: IEvent[]\n}\n\nfunction DayViewMultiDayEventsRow({\n selectedDate,\n multiDayEvents,\n}: DayViewMultiDayEventsRowProps) {\n const { badgeVariant } = useEventCalendar()\n\n const relevantEvents = multiDayEvents.filter((event) => {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return selectedDate >= start && selectedDate <= end\n })\n\n if (relevantEvents.length === 0) return null\n\n return (\n <div className=\"flex border-b\">\n <div className=\"w-18 shrink-0\" />\n <div className=\"flex-1 space-y-1 border-l p-2\">\n {relevantEvents.map((event) => (\n <EventBadge\n key={event.id}\n event={event}\n variant={badgeVariant}\n className=\"w-full\"\n />\n ))}\n </div>\n </div>\n )\n}\n\n// Calendar timeline (current time indicator)\ninterface CalendarTimelineProps {\n firstVisibleHour: number\n lastVisibleHour: number\n}\n\nfunction CalendarTimeline({\n firstVisibleHour,\n lastVisibleHour,\n}: CalendarTimelineProps) {\n const [currentTime, setCurrentTime] = React.useState(new Date())\n\n React.useEffect(() => {\n const interval = setInterval(() => {\n setCurrentTime(new Date())\n }, 60000) // Update every minute\n\n return () => clearInterval(interval)\n }, [])\n\n const currentHour = currentTime.getHours()\n const currentMinute = currentTime.getMinutes()\n\n // Check if current time is within visible hours\n if (currentHour < firstVisibleHour || currentHour >= lastVisibleHour) {\n return null\n }\n\n const minutesSinceStart =\n (currentHour - firstVisibleHour) * 60 + currentMinute\n const totalMinutes = (lastVisibleHour - firstVisibleHour) * 60\n const topPercent = (minutesSinceStart / totalMinutes) * 100\n\n return (\n <div\n className=\"pointer-events-none absolute inset-x-0 z-30 flex items-center\"\n style={{ top: `${topPercent}%` }}\n >\n <div className=\"size-3 -translate-x-1/2 rounded-full bg-red-500\" />\n <div className=\"h-0.5 flex-1 bg-red-500\" />\n </div>\n )\n}\n","/**\n * Year View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { addMonths, startOfYear, format, isSameDay, isSameMonth, parseISO } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea } from \"../scroll-area\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { getCalendarCells, isToday } from \"./helpers\"\nimport type { IEvent, IViewProps } from \"./types\"\n\nexport interface YearViewProps extends Partial<IViewProps> {\n className?: string\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n onMonthClick?: (date: Date) => void\n}\n\nexport function YearView({\n className,\n weekStartsOn = 0,\n onMonthClick,\n onDateClick,\n}: YearViewProps) {\n const { selectedDate, setSelectedDate, setView } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Get all 12 months of the year\n const months = React.useMemo(() => {\n const yearStart = startOfYear(selectedDate)\n return Array.from({ length: 12 }, (_, i) => addMonths(yearStart, i))\n }, [selectedDate])\n\n const handleMonthClick = (date: Date) => {\n setSelectedDate(date)\n setView(\"month\")\n onMonthClick?.(date)\n }\n\n const handleDateClick = (date: Date) => {\n setSelectedDate(date)\n setView(\"day\")\n onDateClick?.(date)\n }\n\n return (\n <ScrollArea className={cn(\"h-full\", className)} type=\"always\">\n <div className=\"p-4\">\n {/* Responsive grid: 1 col on mobile, 2 on md, 3 on lg, 4 on xl */}\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {months.map((month) => (\n <YearViewMonth\n key={month.toString()}\n month={month}\n events={filteredEvents}\n onMonthClick={() => handleMonthClick(month)}\n onDateClick={handleDateClick}\n />\n ))}\n </div>\n </div>\n </ScrollArea>\n )\n}\n\n// Individual month component for year view\ninterface YearViewMonthProps {\n month: Date\n events: IEvent[]\n onMonthClick: () => void\n onDateClick: (date: Date) => void\n}\n\nfunction YearViewMonth({\n month,\n events,\n onMonthClick,\n onDateClick,\n}: YearViewMonthProps) {\n const cells = getCalendarCells(month)\n\n // Get events for this month\n const monthEvents = events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n return isSameMonth(eventStart, month)\n })\n\n return (\n <div className=\"rounded-sm border border-border/50 bg-card p-3\">\n {/* Month header */}\n <button\n type=\"button\"\n onClick={onMonthClick}\n className=\"mb-2 w-full text-left text-sm font-semibold transition-colors hover:text-primary\"\n >\n {format(month, \"MMMM\")}\n {monthEvents.length > 0 && (\n <span className=\"ml-2 text-xs font-normal text-muted-foreground\">\n ({monthEvents.length})\n </span>\n )}\n </button>\n\n {/* Week day headers */}\n <div className=\"mb-1 grid grid-cols-7\">\n {[\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"].map((day, i) => (\n <div\n key={i}\n className=\"text-center text-[10px] font-medium text-muted-foreground\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Day cells */}\n <div className=\"grid grid-cols-7\">\n {cells.map((cell) => (\n <YearViewDayCell\n key={cell.date.toISOString()}\n cell={cell}\n month={month}\n events={events}\n onDateClick={onDateClick}\n />\n ))}\n </div>\n </div>\n )\n}\n\n// Day cell for year view\ninterface YearViewDayCellProps {\n cell: { day: number; currentMonth: boolean; date: Date }\n month: Date\n events: IEvent[]\n onDateClick: (date: Date) => void\n}\n\nfunction YearViewDayCell({\n cell,\n month,\n events,\n onDateClick,\n}: YearViewDayCellProps) {\n const { date, currentMonth } = cell\n const isCurrentDay = isToday(date)\n\n // Check if this day has events\n const dayEvents = events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n return (\n (date >= eventStart && date <= eventEnd) ||\n isSameDay(eventStart, date) ||\n isSameDay(eventEnd, date)\n )\n })\n\n const hasEvents = dayEvents.length > 0\n\n if (!currentMonth) {\n return <div className=\"aspect-square\" />\n }\n\n return (\n <button\n type=\"button\"\n onClick={() => onDateClick(date)}\n className={cn(\n \"relative flex aspect-square items-center justify-center text-[11px] transition-colors\",\n \"hover:bg-muted rounded-sm\",\n isCurrentDay && \"bg-primary text-primary-foreground rounded-sm hover:bg-primary/90\"\n )}\n >\n {cell.day}\n {/* Event indicator dot */}\n {hasEvents && !isCurrentDay && (\n <span className=\"absolute bottom-0.5 left-1/2 size-1 -translate-x-1/2 rounded-full bg-primary\" />\n )}\n </button>\n )\n}\n","/**\n * Agenda View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { CalendarX2 } from \"lucide-react\"\nimport {\n endOfDay,\n endOfMonth,\n format,\n isSameMonth,\n parseISO,\n startOfDay,\n startOfMonth,\n} from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea } from \"../scroll-area\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"../avatar\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { isToday, splitEventsByDuration } from \"./helpers\"\nimport type { IEvent, IViewProps, TEventColor } from \"./types\"\n\n// Color classes for event cards\nconst colorClasses: Record<TEventColor, {\n border: string\n bg: string\n}> = {\n blue: { border: \"border-l-blue-500\", bg: \"bg-blue-50 dark:bg-blue-950/20\" },\n green: { border: \"border-l-green-500\", bg: \"bg-green-50 dark:bg-green-950/20\" },\n red: { border: \"border-l-red-500\", bg: \"bg-red-50 dark:bg-red-950/20\" },\n yellow: { border: \"border-l-yellow-500\", bg: \"bg-yellow-50 dark:bg-yellow-950/20\" },\n purple: { border: \"border-l-purple-500\", bg: \"bg-purple-50 dark:bg-purple-950/20\" },\n orange: { border: \"border-l-primary\", bg: \"bg-orange-50 dark:bg-orange-950/20\" },\n}\n\nexport interface AgendaViewProps extends Partial<IViewProps> {\n className?: string\n emptyMessage?: string\n}\n\nexport function AgendaView({\n className,\n emptyMessage = \"No events scheduled for the selected month\",\n onEventClick,\n onDateClick,\n}: AgendaViewProps) {\n const { selectedDate, setSelectedDate, setView } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Split events into single and multi-day\n const { singleDayEvents, multiDayEvents } = React.useMemo(\n () => splitEventsByDuration(filteredEvents),\n [filteredEvents]\n )\n\n // Group events by day (similar to original)\n const eventsByDay = React.useMemo(() => {\n const allDates = new Map<\n string,\n { date: Date; events: IEvent[]; multiDayEvents: IEvent[] }\n >()\n\n // Add single-day events\n singleDayEvents.forEach((event) => {\n const eventDate = parseISO(event.startDate)\n if (!isSameMonth(eventDate, selectedDate)) return\n\n const dateKey = format(eventDate, \"yyyy-MM-dd\")\n\n if (!allDates.has(dateKey)) {\n allDates.set(dateKey, {\n date: startOfDay(eventDate),\n events: [],\n multiDayEvents: [],\n })\n }\n\n allDates.get(dateKey)?.events.push(event)\n })\n\n // Add multi-day events\n multiDayEvents.forEach((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n\n let currentDate = startOfDay(eventStart)\n const lastDate = endOfDay(eventEnd)\n\n while (currentDate <= lastDate) {\n if (isSameMonth(currentDate, selectedDate)) {\n const dateKey = format(currentDate, \"yyyy-MM-dd\")\n\n if (!allDates.has(dateKey)) {\n allDates.set(dateKey, {\n date: new Date(currentDate),\n events: [],\n multiDayEvents: [],\n })\n }\n\n allDates.get(dateKey)?.multiDayEvents.push(event)\n }\n currentDate = new Date(currentDate.setDate(currentDate.getDate() + 1))\n }\n })\n\n return Array.from(allDates.values()).sort(\n (a, b) => a.date.getTime() - b.date.getTime()\n )\n }, [singleDayEvents, multiDayEvents, selectedDate])\n\n const hasAnyEvents = singleDayEvents.length > 0 || multiDayEvents.length > 0\n\n const handleDateClick = (date: Date) => {\n setSelectedDate(date)\n setView(\"day\")\n onDateClick?.(date)\n }\n\n return (\n <div className={cn(\"h-[800px]\", className)}>\n <ScrollArea className=\"h-full\" type=\"always\">\n <div className=\"space-y-6 p-4\">\n {eventsByDay.map((dayGroup) => (\n <AgendaDayGroup\n key={format(dayGroup.date, \"yyyy-MM-dd\")}\n date={dayGroup.date}\n events={dayGroup.events}\n multiDayEvents={dayGroup.multiDayEvents}\n onDateClick={handleDateClick}\n onEventClick={onEventClick}\n />\n ))}\n\n {!hasAnyEvents && (\n <div className=\"flex flex-col items-center justify-center gap-2 py-20 text-muted-foreground\">\n <CalendarX2 className=\"size-10\" />\n <p className=\"text-sm md:text-base\">{emptyMessage}</p>\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n )\n}\n\n// Day group component\ninterface AgendaDayGroupProps {\n date: Date\n events: IEvent[]\n multiDayEvents: IEvent[]\n onDateClick: (date: Date) => void\n onEventClick?: (event: IEvent) => void\n}\n\nfunction AgendaDayGroup({\n date,\n events,\n multiDayEvents,\n onDateClick,\n onEventClick,\n}: AgendaDayGroupProps) {\n const isCurrentDay = isToday(date)\n\n return (\n <div>\n {/* Date header */}\n <button\n type=\"button\"\n onClick={() => onDateClick(date)}\n className={cn(\n \"mb-3 flex items-center gap-2 text-left transition-colors hover:text-primary\",\n isCurrentDay && \"text-primary\"\n )}\n >\n <span\n className={cn(\n \"flex size-8 items-center justify-center rounded-full text-sm font-bold\",\n isCurrentDay && \"bg-primary text-primary-foreground\"\n )}\n >\n {format(date, \"d\")}\n </span>\n <div>\n <span className=\"font-semibold\">{format(date, \"EEEE\")}</span>\n <span className=\"ml-2 text-muted-foreground\">\n {format(date, \"MMMM d, yyyy\")}\n </span>\n </div>\n </button>\n\n {/* Events */}\n <div className=\"space-y-2 pl-10\">\n {/* Multi-day events first */}\n {multiDayEvents.map((event) => (\n <AgendaEventCard\n key={`multi-${event.id}`}\n event={event}\n isMultiDay\n onClick={() => onEventClick?.(event)}\n />\n ))}\n\n {/* Single-day events */}\n {events.map((event) => (\n <AgendaEventCard\n key={event.id}\n event={event}\n onClick={() => onEventClick?.(event)}\n />\n ))}\n </div>\n </div>\n )\n}\n\n// Event card component\ninterface AgendaEventCardProps {\n event: IEvent\n isMultiDay?: boolean\n onClick?: () => void\n}\n\nfunction AgendaEventCard({ event, isMultiDay, onClick }: AgendaEventCardProps) {\n const colors = colorClasses[event.color]\n\n const startTime = format(parseISO(event.startDate), \"h:mm a\")\n const endTime = format(parseISO(event.endDate), \"h:mm a\")\n\n // Get user initials\n const getInitials = (name: string) => {\n return name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n }\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex w-full items-start gap-3 rounded-lg border-l-4 p-3 text-left transition-colors\",\n \"hover:opacity-90\",\n colors.border,\n colors.bg\n )}\n >\n {/* User avatar */}\n <Avatar className=\"size-10 shrink-0\">\n <AvatarImage src={event.user.picturePath} alt={event.user.name} />\n <AvatarFallback>{getInitials(event.user.name)}</AvatarFallback>\n </Avatar>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {/* Multi-day indicator */}\n {isMultiDay && (\n <span className=\"text-xs text-muted-foreground\">Multi-day event</span>\n )}\n\n {/* Title */}\n <h3 className=\"font-semibold truncate\">{event.title}</h3>\n\n {/* User name */}\n <p className=\"text-sm text-muted-foreground\">{event.user.name}</p>\n\n {/* Time range */}\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {startTime} - {endTime}\n </p>\n\n {/* Description */}\n {event.description && (\n <p className=\"mt-2 text-sm text-muted-foreground line-clamp-2\">\n {event.description}\n </p>\n )}\n </div>\n </button>\n )\n}\n","/**\n * Calendar Header Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\nimport {\n ChevronLeft,\n ChevronRight,\n List,\n Columns,\n Grid2x2,\n Grid3x3,\n CalendarRange,\n Plus,\n Settings,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../button\"\nimport { Badge } from \"../badge\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"../avatar\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../select\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { getViewDateRange, formatDateRange } from \"./helpers\"\nimport type { ICalendarHeaderProps, TCalendarView } from \"./types\"\n\n// View icons mapping - matching original big-calendar exactly\n// Order: day, week, month, year, agenda\nconst VIEW_CONFIG: { view: TCalendarView; icon: React.ElementType; label: string }[] = [\n { view: \"day\", icon: List, label: \"View by day\" },\n { view: \"week\", icon: Columns, label: \"View by week\" },\n { view: \"month\", icon: Grid2x2, label: \"View by month\" },\n { view: \"year\", icon: Grid3x3, label: \"View by year\" },\n { view: \"agenda\", icon: CalendarRange, label: \"View by agenda\" },\n]\n\nexport interface CalendarHeaderProps extends ICalendarHeaderProps {\n className?: string\n showAddButton?: boolean\n showSettings?: boolean\n onAddClick?: () => void\n onSettingsClick?: () => void\n}\n\nexport function CalendarHeader({\n className,\n showViewSwitcher = true,\n showUserFilter = true,\n showBadgeVariant = false, // Hidden by default, controlled via settings\n showToday = true,\n showAddButton = true,\n showSettings = true,\n onAddClick,\n onSettingsClick,\n}: CalendarHeaderProps) {\n const {\n selectedDate,\n view,\n setView,\n setSelectedDate,\n selectedUserId,\n setSelectedUserId,\n users,\n badgeVariant,\n setBadgeVariant,\n goToPrevious,\n goToNext,\n } = useEventCalendar()\n\n const filteredEvents = useFilteredEvents()\n const eventCount = filteredEvents.length\n\n // Get date range for current view\n const { start: rangeStart, end: rangeEnd } = getViewDateRange(selectedDate, view)\n const dateRangeLabel = formatDateRange(rangeStart, rangeEnd)\n\n // Get initials from name\n const getInitials = (name: string) => {\n return name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n }\n\n // Navigate to today\n const handleTodayClick = () => {\n setSelectedDate(new Date())\n }\n\n const today = new Date()\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 border-b border-border p-4 lg:flex-row lg:items-center lg:justify-between\",\n className\n )}\n >\n {/* Left side - TodayButton + DateNavigator */}\n <div className=\"flex items-center gap-3\">\n {/* Today Button - shows today's date, navigates on click */}\n <button\n type=\"button\"\n onClick={handleTodayClick}\n className=\"flex size-14 flex-col items-start overflow-hidden rounded-lg border focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <p className=\"flex h-6 w-full items-center justify-center bg-primary text-center text-xs font-semibold text-primary-foreground\">\n {format(today, \"MMM\").toUpperCase()}\n </p>\n <p className=\"flex w-full flex-1 items-center justify-center text-lg font-bold\">\n {today.getDate()}\n </p>\n </button>\n\n {/* Date Navigator */}\n <div className=\"space-y-0.5\">\n {/* Title + Event Count */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-lg font-semibold\">\n {format(selectedDate, \"MMMM\")} {selectedDate.getFullYear()}\n </span>\n <Badge variant=\"outline\" className=\"px-1.5\">\n {eventCount} event{eventCount !== 1 ? \"s\" : \"\"}\n </Badge>\n </div>\n\n {/* Date Range Navigation */}\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-7 [&_svg]:size-4\"\n onClick={goToPrevious}\n >\n <ChevronLeft />\n <span className=\"sr-only\">Previous</span>\n </Button>\n\n <p className=\"text-sm text-muted-foreground\">\n {dateRangeLabel}\n </p>\n\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-7 [&_svg]:size-4\"\n onClick={goToNext}\n >\n <ChevronRight />\n <span className=\"sr-only\">Next</span>\n </Button>\n </div>\n </div>\n </div>\n\n {/* Right side - Controls */}\n <div className=\"flex flex-col items-center gap-1.5 sm:flex-row sm:justify-between\">\n <div className=\"flex w-full items-center gap-1.5\">\n {/* View Switcher - Pill container with spaced buttons */}\n {showViewSwitcher && (\n <div className=\"inline-flex items-center gap-1 rounded-full border border-border px-1 py-1\">\n {VIEW_CONFIG.map((config, index) => {\n const Icon = config.icon\n const isFirst = index === 0\n const isLast = index === VIEW_CONFIG.length - 1\n const isActive = view === config.view\n\n return (\n <Button\n key={config.view}\n aria-label={config.label}\n size=\"icon\"\n variant={isActive ? \"default\" : \"ghost\"}\n className={cn(\n \"size-8 border-0 [&_svg]:size-4\",\n isFirst && \"rounded-l-full rounded-r-sm\",\n isLast && \"rounded-r-full rounded-l-sm\",\n !isFirst && !isLast && \"rounded-sm\"\n )}\n onClick={() => setView(config.view)}\n >\n <Icon strokeWidth={1.8} />\n </Button>\n )\n })}\n </div>\n )}\n\n {/* User Select */}\n {showUserFilter && users.length > 0 && (\n <Select\n value={selectedUserId || \"all\"}\n onValueChange={(value) => setSelectedUserId(value === \"all\" ? null : value)}\n >\n <SelectTrigger className=\"flex-1 md:w-48\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"end\">\n <SelectItem value=\"all\">\n <div className=\"flex items-center gap-1\">\n {/* Avatar Group */}\n <div className=\"flex -space-x-2\">\n {users.slice(0, 2).map((user) => (\n <Avatar key={user.id} className=\"size-6 border-2 border-background\">\n <AvatarImage src={user.picturePath} alt={user.name} />\n <AvatarFallback className=\"text-[10px]\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n ))}\n {users.length > 2 && (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-background bg-muted text-[10px] font-medium\">\n +{users.length - 2}\n </div>\n )}\n </div>\n All\n </div>\n </SelectItem>\n {users.map((user) => (\n <SelectItem key={user.id} value={user.id}>\n <div className=\"flex items-center gap-2\">\n <Avatar className=\"size-6\">\n <AvatarImage src={user.picturePath} alt={user.name} />\n <AvatarFallback className=\"text-[10px]\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n <p className=\"truncate\">{user.name}</p>\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </div>\n\n {/* Settings & Add Event Buttons */}\n <div className=\"flex items-center gap-2\">\n {showSettings && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={onSettingsClick}\n className=\"shrink-0\"\n aria-label=\"Calendar settings\"\n >\n <Settings className=\"size-4\" />\n </Button>\n )}\n {showAddButton && (\n <Button onClick={onAddClick} className=\"w-full sm:w-auto\">\n <Plus />\n Add Event\n </Button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\n// Simplified header for mobile or compact views\nexport interface CalendarHeaderCompactProps {\n className?: string\n showAddButton?: boolean\n showSettings?: boolean\n onAddClick?: () => void\n onSettingsClick?: () => void\n}\n\nexport function CalendarHeaderCompact({\n className,\n showAddButton = true,\n showSettings = true,\n onAddClick,\n onSettingsClick,\n}: CalendarHeaderCompactProps) {\n const {\n selectedDate,\n setSelectedDate,\n view,\n setView,\n goToPrevious,\n goToNext,\n } = useEventCalendar()\n\n const filteredEvents = useFilteredEvents()\n const eventCount = filteredEvents.length\n const today = new Date()\n\n const handleTodayClick = () => {\n setSelectedDate(new Date())\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-between border-b border-border p-3\",\n className\n )}\n >\n {/* Left - Today button compact */}\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleTodayClick}\n className=\"flex size-10 flex-col items-start overflow-hidden rounded border focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <p className=\"flex h-4 w-full items-center justify-center bg-primary text-center text-[8px] font-semibold text-primary-foreground\">\n {format(today, \"MMM\").toUpperCase()}\n </p>\n <p className=\"flex w-full flex-1 items-center justify-center text-sm font-bold\">\n {today.getDate()}\n </p>\n </button>\n <div>\n <h2 className=\"text-sm font-semibold\">{format(selectedDate, \"MMM yyyy\")}</h2>\n <span className=\"text-xs text-muted-foreground\">{eventCount} events</span>\n </div>\n </div>\n\n {/* Right - Controls */}\n <div className=\"flex items-center gap-1\">\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8\" onClick={goToPrevious}>\n <ChevronLeft className=\"size-4\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8\" onClick={goToNext}>\n <ChevronRight className=\"size-4\" />\n </Button>\n \n <div className=\"ml-2 inline-flex items-center gap-0.5 rounded-full border border-border px-0.5 py-0.5\">\n <Button\n size=\"icon\"\n variant={view === \"day\" ? \"default\" : \"ghost\"}\n className=\"size-6 rounded-l-full rounded-r-sm border-0 [&_svg]:size-3\"\n onClick={() => setView(\"day\")}\n >\n <List strokeWidth={1.8} />\n </Button>\n <Button\n size=\"icon\"\n variant={view === \"week\" ? \"default\" : \"ghost\"}\n className=\"size-6 rounded-sm border-0 [&_svg]:size-3\"\n onClick={() => setView(\"week\")}\n >\n <Columns strokeWidth={1.8} />\n </Button>\n <Button\n size=\"icon\"\n variant={view === \"month\" ? \"default\" : \"ghost\"}\n className=\"size-6 rounded-r-full rounded-l-sm border-0 [&_svg]:size-3\"\n onClick={() => setView(\"month\")}\n >\n <Grid2x2 strokeWidth={1.8} />\n </Button>\n </div>\n\n {showSettings && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={onSettingsClick}\n className=\"ml-2 size-8\"\n aria-label=\"Calendar settings\"\n >\n <Settings className=\"size-4\" />\n </Button>\n )}\n {showAddButton && (\n <Button size=\"sm\" onClick={onAddClick} className=\"size-8 p-0\">\n <Plus className=\"size-4\" />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","/**\n * Event Dialog Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format, parseISO, setHours, setMinutes } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../dialog\"\nimport { Input } from \"../input\"\nimport { Label } from \"../label\"\nimport { Textarea } from \"../textarea\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../select\"\nimport { useEventCalendar } from \"./calendar-context\"\nimport { generateEventId } from \"./helpers\"\nimport type { IEvent, IEventDialogProps, TEventColor } from \"./types\"\n\nconst EVENT_COLORS: { value: TEventColor; label: string; className: string }[] = [\n { value: \"blue\", label: \"Blue\", className: \"bg-blue-500\" },\n { value: \"green\", label: \"Green\", className: \"bg-green-500\" },\n { value: \"red\", label: \"Red\", className: \"bg-red-500\" },\n { value: \"yellow\", label: \"Yellow\", className: \"bg-yellow-500\" },\n { value: \"purple\", label: \"Purple\", className: \"bg-purple-500\" },\n { value: \"orange\", label: \"Orange\", className: \"bg-primary\" },\n]\n\nexport interface EventDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n mode?: \"add\" | \"edit\"\n event?: IEvent | null\n defaultDate?: Date\n defaultUserId?: string\n}\n\nexport function EventDialog({\n open,\n onOpenChange,\n mode = \"add\",\n event,\n defaultDate = new Date(),\n defaultUserId,\n}: EventDialogProps) {\n const { addEvent, updateEvent, deleteEvent, users } = useEventCalendar()\n\n // Form state\n const [title, setTitle] = React.useState(\"\")\n const [description, setDescription] = React.useState(\"\")\n const [startDate, setStartDate] = React.useState(\"\")\n const [startTime, setStartTime] = React.useState(\"\")\n const [endDate, setEndDate] = React.useState(\"\")\n const [endTime, setEndTime] = React.useState(\"\")\n const [color, setColor] = React.useState<TEventColor>(\"blue\")\n const [userId, setUserId] = React.useState(\"\")\n const [isSubmitting, setIsSubmitting] = React.useState(false)\n\n // Reset form when dialog opens/closes or mode changes\n React.useEffect(() => {\n if (open) {\n if (mode === \"edit\" && event) {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n setTitle(event.title)\n setDescription(event.description || \"\")\n setStartDate(format(start, \"yyyy-MM-dd\"))\n setStartTime(format(start, \"HH:mm\"))\n setEndDate(format(end, \"yyyy-MM-dd\"))\n setEndTime(format(end, \"HH:mm\"))\n setColor(event.color)\n setUserId(event.user.id)\n } else {\n // Default values for new event\n const start = defaultDate\n const end = setMinutes(setHours(defaultDate, defaultDate.getHours() + 1), 0)\n setTitle(\"\")\n setDescription(\"\")\n setStartDate(format(start, \"yyyy-MM-dd\"))\n setStartTime(format(start, \"HH:mm\"))\n setEndDate(format(end, \"yyyy-MM-dd\"))\n setEndTime(format(end, \"HH:mm\"))\n setColor(\"blue\")\n setUserId(defaultUserId || users[0]?.id || \"\")\n }\n }\n }, [open, mode, event, defaultDate, defaultUserId, users])\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setIsSubmitting(true)\n\n try {\n const [startYear, startMonth, startDay] = startDate.split(\"-\").map(Number)\n const [startHour, startMinute] = startTime.split(\":\").map(Number)\n const [endYear, endMonth, endDay] = endDate.split(\"-\").map(Number)\n const [endHour, endMinute] = endTime.split(\":\").map(Number)\n\n const startDateTime = new Date(startYear, startMonth - 1, startDay, startHour, startMinute)\n const endDateTime = new Date(endYear, endMonth - 1, endDay, endHour, endMinute)\n\n const selectedUser = users.find((u) => u.id === userId)\n\n if (mode === \"edit\" && event) {\n const updatedEvent: IEvent = {\n ...event,\n title,\n description,\n startDate: startDateTime.toISOString(),\n endDate: endDateTime.toISOString(),\n color,\n user: {\n id: userId,\n name: selectedUser?.name || \"Unknown\",\n },\n }\n updateEvent(updatedEvent)\n } else {\n const newEvent: IEvent = {\n id: generateEventId(),\n title,\n description,\n startDate: startDateTime.toISOString(),\n endDate: endDateTime.toISOString(),\n color,\n user: {\n id: userId,\n name: selectedUser?.name || \"Unknown\",\n },\n }\n addEvent(newEvent)\n }\n\n onOpenChange(false)\n } catch (error) {\n console.error(\"Failed to save event:\", error)\n } finally {\n setIsSubmitting(false)\n }\n }\n\n const handleDelete = () => {\n if (event) {\n deleteEvent(event.id)\n onOpenChange(false)\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[500px]\">\n <form onSubmit={handleSubmit}>\n <DialogHeader>\n <DialogTitle>\n {mode === \"edit\" ? \"Edit Event\" : \"Add Event\"}\n </DialogTitle>\n <DialogDescription>\n {mode === \"edit\"\n ? \"Make changes to your event below.\"\n : \"Fill in the details for your new event.\"}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"grid gap-4 py-4\">\n {/* Title */}\n <div className=\"grid gap-2\">\n <Label htmlFor=\"title\">Title</Label>\n <Input\n id=\"title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Event title\"\n required\n />\n </div>\n\n {/* Description */}\n <div className=\"grid gap-2\">\n <Label htmlFor=\"description\">Description</Label>\n <Textarea\n id=\"description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Event description (optional)\"\n rows={3}\n />\n </div>\n\n {/* Start Date/Time */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"startDate\">Start Date</Label>\n <Input\n id=\"startDate\"\n type=\"date\"\n value={startDate}\n onChange={(e) => setStartDate(e.target.value)}\n required\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"startTime\">Start Time</Label>\n <Input\n id=\"startTime\"\n type=\"time\"\n value={startTime}\n onChange={(e) => setStartTime(e.target.value)}\n required\n />\n </div>\n </div>\n\n {/* End Date/Time */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"endDate\">End Date</Label>\n <Input\n id=\"endDate\"\n type=\"date\"\n value={endDate}\n onChange={(e) => setEndDate(e.target.value)}\n required\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"endTime\">End Time</Label>\n <Input\n id=\"endTime\"\n type=\"time\"\n value={endTime}\n onChange={(e) => setEndTime(e.target.value)}\n required\n />\n </div>\n </div>\n\n {/* Color and User */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"grid gap-2\">\n <Label>Color</Label>\n <Select value={color} onValueChange={(v) => setColor(v as TEventColor)}>\n <SelectTrigger>\n <SelectValue>\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n \"size-3 rounded-full\",\n EVENT_COLORS.find((c) => c.value === color)?.className\n )}\n />\n {EVENT_COLORS.find((c) => c.value === color)?.label}\n </div>\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {EVENT_COLORS.map((c) => (\n <SelectItem key={c.value} value={c.value}>\n <div className=\"flex items-center gap-2\">\n <span className={cn(\"size-3 rounded-full\", c.className)} />\n {c.label}\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {users.length > 0 && (\n <div className=\"grid gap-2\">\n <Label>Assignee</Label>\n <Select value={userId} onValueChange={setUserId}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select user\" />\n </SelectTrigger>\n <SelectContent>\n {users.map((user) => (\n <SelectItem key={user.id} value={user.id}>\n {user.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n </div>\n </div>\n\n <DialogFooter className=\"flex-row justify-between gap-2\">\n {/* Delete button on far left */}\n {mode === \"edit\" ? (\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={handleDelete}\n disabled={isSubmitting}\n >\n Delete\n </Button>\n ) : (\n <div /> /* Spacer when not in edit mode */\n )}\n \n {/* Cancel and Save on right */}\n <div className=\"flex gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={isSubmitting || !title.trim()}>\n {isSubmitting ? \"Saving...\" : mode === \"edit\" ? \"Save Changes\" : \"Add Event\"}\n </Button>\n </div>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n\n// Quick add event popover (for clicking on a day/time)\nexport interface QuickAddEventProps {\n date: Date\n onAdd: (event: Omit<IEvent, \"id\">) => void\n onOpenDialog: () => void\n onClose: () => void\n}\n\nexport function QuickAddEvent({\n date,\n onAdd,\n onOpenDialog,\n onClose,\n}: QuickAddEventProps) {\n const [title, setTitle] = React.useState(\"\")\n const { users } = useEventCalendar()\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (!title.trim()) return\n\n const end = setMinutes(setHours(date, date.getHours() + 1), 0)\n \n onAdd({\n title,\n description: \"\",\n startDate: date.toISOString(),\n endDate: end.toISOString(),\n color: \"blue\",\n user: {\n id: users[0]?.id || \"\",\n name: users[0]?.name || \"Unknown\",\n },\n })\n onClose()\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"flex flex-col gap-2 p-3\">\n <div className=\"text-xs text-muted-foreground\">\n {format(date, \"EEE, MMM d, h:mm a\")}\n </div>\n <Input\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Add title\"\n className=\"h-8\"\n autoFocus\n />\n <div className=\"flex gap-2\">\n <Button type=\"submit\" size=\"sm\" disabled={!title.trim()}>\n Add\n </Button>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onOpenDialog}>\n More options\n </Button>\n </div>\n </form>\n )\n}\n\n","/**\n * Badge Variant Input\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { useEventCalendar } from \"../calendar-context\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\"\nimport type { TBadgeVariant } from \"../types\"\n\nexport function ChangeBadgeVariantInput() {\n const { badgeVariant, setBadgeVariant } = useEventCalendar()\n\n return (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-semibold\">Change badge variant</p>\n\n <Select\n value={badgeVariant}\n onValueChange={(value) => setBadgeVariant(value as TBadgeVariant)}\n >\n <SelectTrigger className=\"w-48\">\n <SelectValue />\n </SelectTrigger>\n\n <SelectContent>\n <SelectItem value=\"dot\">Dot</SelectItem>\n <SelectItem value=\"colored\">Colored</SelectItem>\n <SelectItem value=\"mixed\">Mixed</SelectItem>\n </SelectContent>\n </Select>\n </div>\n )\n}\n\n","/**\n * Visible Hours Input\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { Info } from \"lucide-react\"\nimport { useEventCalendar } from \"../calendar-context\"\nimport { Button } from \"../../button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../../tooltip\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\"\n\n// Generate hour options (12-hour format with AM/PM)\nconst HOUR_OPTIONS = Array.from({ length: 25 }, (_, i) => {\n if (i === 0) return { value: \"0\", label: \"12 AM\" }\n if (i === 12) return { value: \"12\", label: \"12 PM\" }\n if (i === 24) return { value: \"24\", label: \"12 AM (next)\" }\n if (i < 12) return { value: String(i), label: `${i} AM` }\n return { value: String(i), label: `${i - 12} PM` }\n})\n\nexport function ChangeVisibleHoursInput() {\n const { visibleHours, setVisibleHours } = useEventCalendar()\n\n const [from, setFrom] = React.useState<number>(visibleHours.from)\n const [to, setTo] = React.useState<number>(visibleHours.to)\n\n const handleApply = () => {\n const toHour = to === 0 ? 24 : to\n setVisibleHours({ from, to: toHour })\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-semibold\">Change visible hours</p>\n\n <TooltipProvider delayDuration={100}>\n <Tooltip>\n <TooltipTrigger>\n <Info className=\"size-3\" />\n </TooltipTrigger>\n\n <TooltipContent className=\"max-w-80 text-center\">\n <p>\n If an event falls outside the specified visible hours, the\n visible hours will automatically adjust to include that event.\n </p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <p>From</p>\n <Select value={String(from)} onValueChange={(v) => setFrom(Number(v))}>\n <SelectTrigger className=\"w-28\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {HOUR_OPTIONS.slice(0, 24).map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <p>To</p>\n <Select value={String(to)} onValueChange={(v) => setTo(Number(v))}>\n <SelectTrigger className=\"w-28\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {HOUR_OPTIONS.slice(1).map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <Button className=\"mt-4 w-fit\" onClick={handleApply}>\n Apply\n </Button>\n </div>\n )\n}\n\n","/**\n * Working Hours Input\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { Info, Moon } from \"lucide-react\"\nimport { useEventCalendar } from \"../calendar-context\"\nimport { Button } from \"../../button\"\nimport { Switch } from \"../../switch\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../../tooltip\"\nimport type { TWorkingHours } from \"../types\"\n\nconst DAYS_OF_WEEK = [\n { index: 0, name: \"Sunday\" },\n { index: 1, name: \"Monday\" },\n { index: 2, name: \"Tuesday\" },\n { index: 3, name: \"Wednesday\" },\n { index: 4, name: \"Thursday\" },\n { index: 5, name: \"Friday\" },\n { index: 6, name: \"Saturday\" },\n]\n\n// Generate hour options (12-hour format with AM/PM)\nconst HOUR_OPTIONS = Array.from({ length: 25 }, (_, i) => {\n if (i === 0) return { value: \"0\", label: \"12 AM\" }\n if (i === 12) return { value: \"12\", label: \"12 PM\" }\n if (i === 24) return { value: \"24\", label: \"12 AM (next)\" }\n if (i < 12) return { value: String(i), label: `${i} AM` }\n return { value: String(i), label: `${i - 12} PM` }\n})\n\nexport function ChangeWorkingHoursInput() {\n const { workingHours, setWorkingHours } = useEventCalendar()\n\n const [localWorkingHours, setLocalWorkingHours] = React.useState<TWorkingHours>({\n ...workingHours,\n })\n\n const handleToggleDay = (dayId: number) => {\n setLocalWorkingHours((prev) => ({\n ...prev,\n [dayId]:\n prev[dayId].from > 0 || prev[dayId].to > 0\n ? { from: 0, to: 0 }\n : { from: 9, to: 17 },\n }))\n }\n\n const handleTimeChange = (\n dayId: number,\n timeType: \"from\" | \"to\",\n value: string\n ) => {\n const hour = Number(value)\n setLocalWorkingHours((prev) => {\n const updatedDay = { ...prev[dayId], [timeType]: hour }\n if (timeType === \"to\" && hour === 0 && updatedDay.from === 0) {\n updatedDay.to = 24\n }\n return { ...prev, [dayId]: updatedDay }\n })\n }\n\n const handleSave = () => {\n const updatedWorkingHours = { ...localWorkingHours }\n\n for (const dayId in updatedWorkingHours) {\n const day = updatedWorkingHours[parseInt(dayId)]\n const isDayActive =\n localWorkingHours[parseInt(dayId)].from > 0 ||\n localWorkingHours[parseInt(dayId)].to > 0\n\n if (isDayActive) {\n if (day.from === 0 && day.to === 0) {\n updatedWorkingHours[dayId] = { from: 0, to: 24 }\n } else if (day.to === 0 && day.from > 0) {\n updatedWorkingHours[dayId] = { ...day, to: 24 }\n }\n } else {\n updatedWorkingHours[dayId] = { from: 0, to: 0 }\n }\n }\n\n setWorkingHours(updatedWorkingHours)\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-semibold\">Change working hours</p>\n\n <TooltipProvider delayDuration={100}>\n <Tooltip>\n <TooltipTrigger>\n <Info className=\"size-3\" />\n </TooltipTrigger>\n\n <TooltipContent className=\"max-w-80 text-center\">\n <p>\n This will apply a dashed background to the hour cells that fall\n outside the working hours — only for week and day views.\n </p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n <div className=\"space-y-3\">\n {DAYS_OF_WEEK.map((day) => {\n const isDayActive =\n localWorkingHours[day.index].from > 0 ||\n localWorkingHours[day.index].to > 0\n\n return (\n <div key={day.index} className=\"flex flex-wrap items-center gap-2 sm:gap-4\">\n <div className=\"flex w-32 items-center gap-2 sm:w-36\">\n <Switch\n checked={isDayActive}\n onCheckedChange={() => handleToggleDay(day.index)}\n />\n <span className=\"text-sm font-medium\">{day.name.slice(0, 3)}</span>\n </div>\n\n {isDayActive ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <span className=\"text-sm\">From</span>\n <Select\n value={String(localWorkingHours[day.index].from)}\n onValueChange={(v) =>\n handleTimeChange(day.index, \"from\", v)\n }\n >\n <SelectTrigger className=\"w-24\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {HOUR_OPTIONS.slice(0, 24).map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center gap-1\">\n <span className=\"text-sm\">To</span>\n <Select\n value={String(localWorkingHours[day.index].to)}\n onValueChange={(v) =>\n handleTimeChange(day.index, \"to\", v)\n }\n >\n <SelectTrigger className=\"w-24\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {HOUR_OPTIONS.slice(1).map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n ) : (\n <div className=\"flex items-center gap-2 text-muted-foreground\">\n <Moon className=\"size-4\" />\n <span className=\"text-sm\">Closed</span>\n </div>\n )}\n </div>\n )\n })}\n </div>\n\n <Button className=\"mt-4 w-fit\" onClick={handleSave}>\n Apply\n </Button>\n </div>\n )\n}\n\n","/**\n * Calendar Settings Panel & Dialog\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { Settings } from \"lucide-react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from \"../../dialog\"\nimport { Button } from \"../../button\"\n\nimport { ChangeBadgeVariantInput } from \"./badge-variant-input\"\nimport { ChangeVisibleHoursInput } from \"./visible-hours-input\"\nimport { ChangeWorkingHoursInput } from \"./working-hours-input\"\n\nexport interface CalendarSettingsContentProps {\n className?: string\n showBadgeVariant?: boolean\n showVisibleHours?: boolean\n showWorkingHours?: boolean\n}\n\n/**\n * The inner content of calendar settings - used by both panel and dialog\n */\nexport function CalendarSettingsContent({\n className,\n showBadgeVariant = true,\n showVisibleHours = true,\n showWorkingHours = true,\n}: CalendarSettingsContentProps) {\n return (\n <div className={cn(\"flex flex-col gap-6\", className)}>\n {showBadgeVariant && <ChangeBadgeVariantInput />}\n {showVisibleHours && <ChangeVisibleHoursInput />}\n {showWorkingHours && <ChangeWorkingHoursInput />}\n </div>\n )\n}\n\nexport interface CalendarSettingsDialogProps extends CalendarSettingsContentProps {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\n/**\n * Calendar settings in a dialog/modal\n */\nexport function CalendarSettingsDialog({\n open,\n onOpenChange,\n showBadgeVariant = true,\n showVisibleHours = true,\n showWorkingHours = true,\n}: CalendarSettingsDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-md\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <Settings className=\"size-5\" />\n Calendar Settings\n </DialogTitle>\n <DialogDescription>\n Customize your calendar view and preferences.\n </DialogDescription>\n </DialogHeader>\n <CalendarSettingsContent\n showBadgeVariant={showBadgeVariant}\n showVisibleHours={showVisibleHours}\n showWorkingHours={showWorkingHours}\n />\n </DialogContent>\n </Dialog>\n )\n}\n\nexport interface CalendarSettingsButtonProps {\n onClick?: () => void\n className?: string\n}\n\n/**\n * Settings button trigger - can be placed in the header\n */\nexport function CalendarSettingsButton({\n onClick,\n className,\n}: CalendarSettingsButtonProps) {\n return (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={onClick}\n className={cn(\"shrink-0\", className)}\n aria-label=\"Calendar settings\"\n >\n <Settings className=\"size-4\" />\n </Button>\n )\n}\n\n","/**\n * Big Calendar Block\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Card, CardContent } from \"../card\"\nimport {\n EventCalendarProvider,\n useEventCalendar,\n type EventCalendarProviderProps,\n} from \"./calendar-context\"\nimport { CalendarHeader, CalendarHeaderCompact } from \"./calendar-header\"\nimport { CalendarSettingsDialog } from \"./settings\"\nimport { MonthView } from \"./month-view\"\nimport { WeekView } from \"./week-view\"\nimport { DayView } from \"./day-view\"\nimport { YearView } from \"./year-view\"\nimport { AgendaView } from \"./agenda-view\"\nimport { EventDialog } from \"./event-dialog\"\nimport { DragProvider } from \"./dnd-context\"\nimport type { IEvent, ICalendarConfig, TCalendarView } from \"./types\"\n\n// Custom hook for responsive breakpoints\nfunction useMediaQuery(query: string): boolean {\n const [matches, setMatches] = React.useState(false)\n\n React.useEffect(() => {\n const media = window.matchMedia(query)\n setMatches(media.matches)\n \n const listener = (event: MediaQueryListEvent) => {\n setMatches(event.matches)\n }\n \n media.addEventListener(\"change\", listener)\n return () => media.removeEventListener(\"change\", listener)\n }, [query])\n\n return matches\n}\n\nexport interface BigCalendarProps extends Omit<EventCalendarProviderProps, \"children\"> {\n className?: string\n compact?: boolean | \"auto\"\n bordered?: boolean\n showHeader?: boolean\n showAddButton?: boolean\n showSettings?: boolean\n enableDragDrop?: boolean\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n maxEventsPerDay?: number\n config?: ICalendarConfig\n}\n\nexport function BigCalendar({\n className,\n compact = \"auto\",\n bordered = true,\n showHeader = true,\n showAddButton = true,\n showSettings = true,\n enableDragDrop = true,\n weekStartsOn = 0,\n maxEventsPerDay = 3,\n config,\n ...providerProps\n}: BigCalendarProps) {\n return (\n <EventCalendarProvider {...providerProps}>\n <DragProvider>\n <BigCalendarInner\n className={className}\n compact={compact}\n bordered={bordered}\n showHeader={showHeader}\n showAddButton={showAddButton}\n showSettings={showSettings}\n enableDragDrop={enableDragDrop}\n weekStartsOn={weekStartsOn}\n maxEventsPerDay={maxEventsPerDay}\n config={config}\n />\n </DragProvider>\n </EventCalendarProvider>\n )\n}\n\ninterface BigCalendarInnerProps {\n className?: string\n compact?: boolean | \"auto\"\n bordered?: boolean\n showHeader?: boolean\n showAddButton?: boolean\n showSettings?: boolean\n enableDragDrop?: boolean\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n maxEventsPerDay?: number\n config?: ICalendarConfig\n}\n\nfunction BigCalendarInner({\n className,\n compact,\n bordered,\n showHeader,\n showAddButton,\n showSettings,\n enableDragDrop,\n weekStartsOn,\n maxEventsPerDay,\n}: BigCalendarInnerProps) {\n const { view, setView } = useEventCalendar()\n const [dialogOpen, setDialogOpen] = React.useState(false)\n const [settingsDialogOpen, setSettingsDialogOpen] = React.useState(false)\n const [selectedEvent, setSelectedEvent] = React.useState<IEvent | null>(null)\n const [dialogMode, setDialogMode] = React.useState<\"add\" | \"edit\">(\"add\")\n const [defaultDate, setDefaultDate] = React.useState(new Date())\n\n // Responsive: use compact header on screens below md breakpoint\n const isMobile = useMediaQuery(\"(max-width: 768px)\")\n const isCompact = compact === \"auto\" ? isMobile : compact\n\n const handleAddClick = () => {\n setSelectedEvent(null)\n setDialogMode(\"add\")\n setDefaultDate(new Date())\n setDialogOpen(true)\n }\n\n const handleSettingsClick = () => {\n setSettingsDialogOpen(true)\n }\n\n const handleEventClick = (event: IEvent) => {\n setSelectedEvent(event)\n setDialogMode(\"edit\")\n setDialogOpen(true)\n }\n\n const handleDateClick = (date: Date) => {\n setDefaultDate(date)\n }\n\n const handleMoreClick = (date: Date, events: IEvent[]) => {\n // Switch to day view to show all events\n setDefaultDate(date)\n setView(\"day\")\n }\n\n const handleTimeClick = (date: Date, hour: number, minute: number) => {\n setSelectedEvent(null)\n setDialogMode(\"add\")\n const clickedDate = new Date(date)\n clickedDate.setHours(hour, minute, 0, 0)\n setDefaultDate(clickedDate)\n setDialogOpen(true)\n }\n\n const Wrapper = bordered ? Card : \"div\"\n const Content = bordered ? CardContent : \"div\"\n\n return (\n <>\n <div className={cn(\"flex flex-col gap-4 relative\", className)}>\n <Wrapper\n className={cn(\n \"flex min-h-[600px] flex-col overflow-hidden rounded-sm\",\n !bordered && \"border border-border bg-card\"\n )}\n >\n {/* Header - responsive */}\n {showHeader && (\n isCompact ? (\n <CalendarHeaderCompact\n showAddButton={showAddButton}\n showSettings={showSettings}\n onAddClick={handleAddClick}\n onSettingsClick={handleSettingsClick}\n />\n ) : (\n <CalendarHeader\n showAddButton={showAddButton}\n showSettings={showSettings}\n onAddClick={handleAddClick}\n onSettingsClick={handleSettingsClick}\n />\n )\n )}\n\n {/* View content */}\n <Content className={cn(\"flex-1 overflow-hidden\", bordered ? \"p-0\" : \"\")}>\n <CalendarView\n view={view}\n weekStartsOn={weekStartsOn}\n maxEventsPerDay={maxEventsPerDay}\n onEventClick={handleEventClick}\n onDateClick={handleDateClick}\n onMoreClick={handleMoreClick}\n onTimeClick={handleTimeClick}\n />\n </Content>\n </Wrapper>\n\n </div>\n\n {/* Event dialog */}\n <EventDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n mode={dialogMode}\n event={selectedEvent}\n defaultDate={defaultDate}\n />\n\n {/* Settings dialog */}\n {showSettings && (\n <CalendarSettingsDialog\n open={settingsDialogOpen}\n onOpenChange={setSettingsDialogOpen}\n />\n )}\n </>\n )\n}\n\ninterface CalendarViewProps {\n view: TCalendarView\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n maxEventsPerDay?: number\n onEventClick: (event: IEvent) => void\n onDateClick: (date: Date) => void\n onMoreClick: (date: Date, events: IEvent[]) => void\n onTimeClick: (date: Date, hour: number, minute: number) => void\n}\n\nfunction CalendarView({\n view,\n weekStartsOn,\n maxEventsPerDay,\n onEventClick,\n onDateClick,\n onMoreClick,\n onTimeClick,\n}: CalendarViewProps) {\n switch (view) {\n case \"month\":\n return (\n <MonthView\n className=\"h-full\"\n weekStartsOn={weekStartsOn}\n maxEventsPerDay={maxEventsPerDay}\n onEventClick={onEventClick}\n onDateClick={onDateClick}\n onMoreClick={onMoreClick}\n />\n )\n case \"week\":\n return (\n <WeekView\n className=\"h-full\"\n weekStartsOn={weekStartsOn}\n onEventClick={onEventClick}\n onDateClick={onDateClick}\n onTimeClick={onTimeClick}\n />\n )\n case \"day\":\n return (\n <DayView\n className=\"h-full\"\n onEventClick={onEventClick}\n onTimeClick={onTimeClick}\n />\n )\n case \"year\":\n return (\n <YearView\n className=\"h-full\"\n weekStartsOn={weekStartsOn}\n onDateClick={onDateClick}\n />\n )\n case \"agenda\":\n return (\n <AgendaView\n className=\"h-full\"\n onEventClick={onEventClick}\n onDateClick={onDateClick}\n />\n )\n default:\n return null\n }\n}\n\n// Re-export for convenience\nexport { EventCalendarProvider, useEventCalendar } from \"./calendar-context\"\n"]}
1
+ {"version":3,"sources":["../src/hooks/use-mobile.ts","../src/lib/utils.ts","../src/components/button.tsx","../src/components/separator.tsx","../src/components/button-group.tsx","../src/components/input.tsx","../src/components/textarea.tsx","../src/components/input-group.tsx","../src/components/checkbox.tsx","../src/components/radio-group.tsx","../src/components/switch.tsx","../src/components/slider.tsx","../src/components/select.tsx","../src/components/native-select.tsx","../src/components/toggle.tsx","../src/components/toggle-group.tsx","../src/components/theme-switch.tsx","../src/components/toolbar-canvas.tsx","../src/components/player-canvas.tsx","../src/components/label.tsx","../src/components/form.tsx","../src/components/field.tsx","../src/components/card.tsx","../src/components/table.tsx","../src/components/badge.tsx","../src/components/avatar.tsx","../src/components/dropdown-menu.tsx","../src/components/user-avatars-dropdown.tsx","../src/components/skeleton.tsx","../src/components/accordion.tsx","../src/components/tabs.tsx","../src/components/calendar.tsx","../src/components/carousel.tsx","../src/components/chart.tsx","../src/components/aspect-ratio.tsx","../src/components/empty.tsx","../src/components/item.tsx","../src/components/kbd.tsx","../src/components/alert.tsx","../src/components/alert-dialog.tsx","../src/components/progress.tsx","../src/components/circular-progress.tsx","../src/components/tooltip.tsx","../src/components/sonner.tsx","../src/components/spinner.tsx","../src/components/delivery-indicator.tsx","../src/components/breadcrumb.tsx","../src/components/pagination.tsx","../src/components/dialog.tsx","../src/components/scroll-area.tsx","../src/components/command.tsx","../src/components/search-trigger.tsx","../src/components/menubar.tsx","../src/components/navigation-menu.tsx","../src/components/context-menu.tsx","../src/components/drawer.tsx","../src/components/sheet.tsx","../src/components/popover.tsx","../src/components/hover-card.tsx","../src/components/collapsible.tsx","../src/components/resizable.tsx","../src/components/sidebar.tsx","../src/components/section.tsx","../src/components/data-table/data-table-column-header.tsx","../src/components/data-table/data-table-pagination.tsx","../src/components/data-table/data-table-view-options.tsx","../src/blocks/sidebar-01/search-form.tsx","../src/blocks/sidebar-01/site-header.tsx","../src/blocks/sidebar-01/nav-main.tsx","../src/blocks/sidebar-01/nav-projects.tsx","../src/blocks/sidebar-01/nav-secondary.tsx","../src/blocks/sidebar-01/nav-user.tsx","../src/blocks/planning-table/planning-table-toolbar.tsx","../src/blocks/planning-table/supplier-cell.tsx","../src/blocks/planning-table/week-cell.tsx","../src/blocks/calibration-table/comment-button.tsx","../src/blocks/planning-table/types.ts","../src/blocks/planning-table/planning-week-comment-popover.tsx","../src/blocks/planning-table/week-header.tsx","../src/blocks/planning-table/columns.tsx","../src/blocks/planning-table/planning-table.tsx","../src/blocks/planning-table/week-detail-dialog.tsx","../src/blocks/calibration-table/row-header-cell.tsx","../src/blocks/calibration-table/net-badge.tsx","../src/blocks/calibration-table/types.ts","../src/blocks/calibration-table/calibration-week-cell.tsx","../src/blocks/calibration-table/comment-popover.tsx","../src/blocks/calibration-table/calibration-week-header.tsx","../src/blocks/calibration-table/calibration-table.tsx","../src/blocks/calibration-table/comment-dialog.tsx","../src/blocks/calibration-table/submit-calibration-bar.tsx","../src/blocks/supplier-weekly-loading/types.ts","../src/blocks/supplier-weekly-loading/delivery-badge.tsx","../src/blocks/supplier-weekly-loading/weekly-loading-view.tsx","../src/blocks/supplier-weekly-loading/delivery-detail-page.tsx","../src/blocks/supplier-weekly-loading/supplier-weekly-loading.tsx","../src/blocks/supplier-weekly-loading/delivery-card.tsx","../src/components/event-calendar/types.ts","../src/components/event-calendar/calendar-context.tsx","../src/components/event-calendar/helpers.ts","../src/components/event-calendar/event-badge.tsx","../src/components/event-calendar/date-badge.tsx","../src/components/event-calendar/dnd-context.tsx","../src/components/event-calendar/month-view.tsx","../src/components/event-calendar/week-view.tsx","../src/components/event-calendar/day-view.tsx","../src/components/event-calendar/year-view.tsx","../src/components/event-calendar/agenda-view.tsx","../src/components/event-calendar/calendar-header.tsx","../src/components/event-calendar/event-dialog.tsx","../src/components/event-calendar/settings/badge-variant-input.tsx","../src/components/event-calendar/settings/visible-hours-input.tsx","../src/components/event-calendar/settings/working-hours-input.tsx","../src/components/event-calendar/settings/settings-panel.tsx","../src/components/event-calendar/big-calendar.tsx"],"names":["React","React2","jsx","cva","Slot","React3","jsxs","CheckIcon","ChevronDownIcon","React4","React5","TogglePrimitive2","Label","React6","useMemo","CircleIcon","className","props","ChevronRightIcon","React7","React8","api","React9","config","Item","Tooltip","React10","isDark","Sonner","Loader2Icon","ChevronLeftIcon","CommandPrimitive","React11","SearchIcon","DrawerPrimitive","SheetPrimitive","XIcon","CollapsibleTrigger","CollapsibleContent","React12","open","React13","Fragment","ChevronRight","React14","MoreHorizontalIcon","Factory","Truck","React15","formatDate","React16","useReactTable","getCoreRowModel","getSortedRowModel","getFilteredRowModel","getPaginationRowModel","flexRender","React17","ChevronDown","Plus","Send","MessageSquare","ChevronLeft","Calendar","ArrowRight","Check","Flag","React18","React19","React20","React21","AlertTriangle","dayMap","React22","React23","getStatusBadgeVariant","getStatusBadgeClasses","React24","Package","React25","Content","getLeftStrokeStyles","React26","addDays","addMonths","subMonths","addYears","subYears","addWeeks","subWeeks","subDays","formatDateRange","format","parseISO","React28","React29","React30","isToday","isSameDay","startOfDay","DraggableEventWrapper","React31","startOfWeek","areIntervalsOverlapping","DroppableTimeSlot","React32","CalendarTimeline","CalendarIcon","React33","startOfYear","isSameMonth","colorClasses","React34","endOfDay","List","Icon","EVENT_COLORS","React35","setMinutes","setHours","React36","HOUR_OPTIONS","React37","Info","Settings","React38"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground border border-input hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n \"icon-sm\": \"h-8 w-8\",\n \"icon-lg\": \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant || \"default\"}\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { Separator } from \"./separator\"\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2\",\n {\n variants: {\n orientation: {\n horizontal:\n \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\",\n vertical:\n \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n }\n)\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n className={cn(\n \"bg-muted flex items-center gap-2 rounded-md border px-4 text-sm font-medium shadow-xs [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn(\n \"bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-4 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Textarea } from \"./textarea\"\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group border-input dark:bg-input/30 relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none\",\n \"h-9 min-w-0 has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Focus state.\n \"has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-[3px]\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className\n )}\n {...props}\n />\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n \"text-sm shadow-none flex gap-2 items-center\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n sm: \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [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-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] 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","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.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}: React.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 \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 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-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\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 >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.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\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm 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 >\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 SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\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 * as React from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction NativeSelect({ className, ...props }: React.ComponentProps<\"select\">) {\n return (\n <div\n className=\"group/native-select relative w-fit has-[select:disabled]:opacity-50\"\n data-slot=\"native-select-wrapper\"\n >\n <select\n data-slot=\"native-select\"\n className={cn(\n \"border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground bg-background dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 appearance-none rounded-full border pl-4 py-2 pr-8 text-sm shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n <ChevronDownIcon\n className=\"text-muted-foreground pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 opacity-50 select-none\"\n aria-hidden=\"true\"\n data-slot=\"native-select-icon\"\n />\n </div>\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return <option data-slot=\"native-select-option\" {...props} />\n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n <optgroup\n data-slot=\"native-select-optgroup\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-primary data-[state=on]:text-primary-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n 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","\"use client\"\n\nimport * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { toggleVariants } from \"./toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, spacing }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.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 toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n \"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10\",\n \"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\ninterface ThemeSwitchProps {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n disabled?: boolean\n className?: string\n /** Size variant */\n size?: \"sm\" | \"default\" | \"lg\"\n}\n\n/**\n * ThemeSwitch - A toggle switch for light/dark mode with sun/moon icons\n * \n * The thumb displays a sun icon when in light mode (unchecked) and\n * a moon icon when in dark mode (checked).\n */\nfunction ThemeSwitch({\n checked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n className,\n size = \"default\",\n}: ThemeSwitchProps) {\n const [isChecked, setIsChecked] = React.useState(defaultChecked)\n \n // Use controlled or uncontrolled state\n const isControlled = checked !== undefined\n const currentChecked = isControlled ? checked : isChecked\n\n const handleClick = () => {\n if (disabled) return\n \n const newValue = !currentChecked\n if (!isControlled) {\n setIsChecked(newValue)\n }\n onCheckedChange?.(newValue)\n }\n\n const sizeClasses = {\n sm: {\n track: \"h-5 w-9\",\n thumb: \"size-4\",\n icon: \"h-2.5 w-2.5\",\n translate: \"data-[state=checked]:translate-x-4\",\n },\n default: {\n track: \"h-6 w-11\",\n thumb: \"size-5\",\n icon: \"h-3 w-3\",\n translate: \"data-[state=checked]:translate-x-5\",\n },\n lg: {\n track: \"h-7 w-14\",\n thumb: \"size-6\",\n icon: \"h-3.5 w-3.5\",\n translate: \"data-[state=checked]:translate-x-7\",\n },\n }\n\n const sizes = sizeClasses[size]\n\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={currentChecked}\n aria-label={currentChecked ? \"Switch to light mode\" : \"Switch to dark mode\"}\n data-slot=\"theme-switch\"\n data-state={currentChecked ? \"checked\" : \"unchecked\"}\n disabled={disabled}\n onClick={handleClick}\n className={cn(\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full\",\n \"border border-transparent shadow-xs transition-all outline-none\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"bg-input data-[state=checked]:bg-primary\",\n sizes.track,\n className\n )}\n >\n <span\n data-state={currentChecked ? \"checked\" : \"unchecked\"}\n className={cn(\n \"pointer-events-none flex items-center justify-center rounded-full\",\n \"bg-white shadow-lg ring-0 transition-transform\",\n \"data-[state=unchecked]:translate-x-0.5\",\n sizes.thumb,\n sizes.translate\n )}\n >\n {currentChecked ? (\n <MoonIcon className={cn(sizes.icon, \"text-primary\")} />\n ) : (\n <SunIcon className={cn(sizes.icon, \"text-muted-foreground\")} />\n )}\n </span>\n </button>\n )\n}\n\n// Sun icon component\nfunction SunIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n )\n}\n\n// Moon icon component\nfunction MoonIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />\n </svg>\n )\n}\n\nexport { ThemeSwitch, type ThemeSwitchProps }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\n// ToolBarCanvas Container\nfunction ToolBarCanvas({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"toolbar-canvas\"\n className={cn(\n \"inline-flex items-center gap-1 rounded-full bg-background border border-input p-1.5\",\n className\n )}\n {...props}\n />\n )\n}\n\n// ToolBarCanvas Divider\nfunction ToolBarCanvasDivider({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"toolbar-canvas-divider\"\n className={cn(\"w-px h-6 mx-1.5 bg-foreground/20\", className)}\n {...props}\n />\n )\n}\n\n// ToolBarCanvas Group - for grouping items\nfunction ToolBarCanvasGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"toolbar-canvas-group\"\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\n// ToolBarCanvas Button variants\nconst toolBarCanvasButtonVariants = cva(\n \"inline-flex items-center justify-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n size: {\n default: \"size-10\",\n sm: \"size-8\",\n lg: \"size-12\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\n// ToolBarCanvas Button (Toggle)\nfunction ToolBarCanvasButton({\n className,\n size,\n children,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toolBarCanvasButtonVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toolbar-canvas-button\"\n className={cn(\n toolBarCanvasButtonVariants({ size }),\n \"bg-transparent text-foreground/70 hover:bg-muted hover:text-foreground\",\n \"data-[state=on]:bg-primary data-[state=on]:text-primary-foreground\",\n \"[&_svg]:size-5 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n </TogglePrimitive.Root>\n )\n}\n\nexport {\n ToolBarCanvas,\n ToolBarCanvasButton,\n ToolBarCanvasDivider,\n ToolBarCanvasGroup,\n toolBarCanvasButtonVariants,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\n// PlayerCanvas Container - outer wrapper for layout\nfunction PlayerCanvas({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"player-canvas\"\n className={cn(\n \"relative flex flex-col gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Controls - the main control area (pill-shaped)\nfunction PlayerCanvasControls({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"player-canvas-controls\"\n className={cn(\n \"flex items-center gap-2 px-1.5 py-1.5 rounded-full bg-background border border-input\",\n className\n )}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Play Button - large circular play/pause button\nconst playerCanvasPlayButtonVariants = cva(\n \"inline-flex items-center justify-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-white hover:opacity-90\",\n {\n variants: {\n size: {\n default: \"size-14\",\n sm: \"size-10\",\n lg: \"size-16\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\ninterface PlayerCanvasPlayButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof playerCanvasPlayButtonVariants> {\n isPlaying?: boolean\n}\n\nfunction PlayerCanvasPlayButton({\n className,\n size,\n isPlaying,\n children,\n style,\n ...props\n}: PlayerCanvasPlayButtonProps) {\n return (\n <button\n data-slot=\"player-canvas-play-button\"\n data-playing={isPlaying}\n className={cn(\n playerCanvasPlayButtonVariants({ size }),\n \"[&_svg]:size-6 [&_svg]:shrink-0\",\n className\n )}\n style={{\n backgroundColor: \"var(--j3m-orange-8)\",\n ...style,\n }}\n {...props}\n >\n {children}\n </button>\n )\n}\n\n// PlayerCanvas Skip Button - smaller navigation buttons\nconst playerCanvasSkipButtonVariants = cva(\n \"inline-flex items-center justify-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-transparent text-foreground/60 hover:text-foreground hover:bg-muted\",\n {\n variants: {\n size: {\n default: \"size-10\",\n sm: \"size-8\",\n lg: \"size-12\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nfunction PlayerCanvasSkipButton({\n className,\n size,\n children,\n ...props\n}: React.ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof playerCanvasSkipButtonVariants>) {\n return (\n <button\n data-slot=\"player-canvas-skip-button\"\n className={cn(\n playerCanvasSkipButtonVariants({ size }),\n \"[&_svg]:size-5 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\n// PlayerCanvas Divider\nfunction PlayerCanvasDivider({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"player-canvas-divider\"\n className={cn(\"w-px h-10 mx-2 bg-foreground/15\", className)}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Info - timeline/date section\nfunction PlayerCanvasInfo({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"player-canvas-info\"\n className={cn(\"flex flex-col justify-center flex-1 min-w-0\", className)}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Label - small label text\nfunction PlayerCanvasLabel({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"player-canvas-label\"\n className={cn(\n \"text-xs font-medium text-foreground/50 uppercase tracking-wider\",\n className\n )}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Title - main title/date text\nfunction PlayerCanvasTitle({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"player-canvas-title\"\n className={cn(\n \"text-lg font-semibold text-foreground truncate\",\n className\n )}\n {...props}\n />\n )\n}\n\n// PlayerCanvas Action Button - more options button\nfunction PlayerCanvasActionButton({\n className,\n children,\n ...props\n}: React.ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <button\n data-slot=\"player-canvas-action-button\"\n className={cn(\n \"inline-flex items-center justify-center size-10 rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-transparent text-foreground/40 hover:text-foreground hover:bg-muted\",\n \"[&_svg]:size-5 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\n// PlayerCanvas Progress - progress bar with glow (floating below controls)\ninterface PlayerCanvasProgressProps extends React.ComponentProps<\"div\"> {\n value?: number\n max?: number\n}\n\nfunction PlayerCanvasProgress({\n className,\n value = 0,\n max = 100,\n ...props\n}: PlayerCanvasProgressProps) {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100))\n\n return (\n <div\n data-slot=\"player-canvas-progress\"\n className={cn(\"relative h-2 w-full rounded-full bg-foreground/10 overflow-hidden\", className)}\n {...props}\n >\n <div\n data-slot=\"player-canvas-progress-bar\"\n className=\"absolute inset-y-0 left-0 rounded-full transition-all duration-200\"\n style={{\n width: `${percentage}%`,\n backgroundColor: \"var(--j3m-orange-8)\",\n }}\n />\n </div>\n )\n}\n\nexport {\n PlayerCanvas,\n PlayerCanvasControls,\n PlayerCanvasPlayButton,\n PlayerCanvasSkipButton,\n PlayerCanvasDivider,\n PlayerCanvasInfo,\n PlayerCanvasLabel,\n PlayerCanvasTitle,\n PlayerCanvasActionButton,\n PlayerCanvasProgress,\n playerCanvasPlayButtonVariants,\n playerCanvasSkipButtonVariants,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"../lib/utils\"\nimport { Label } from \"./label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState } = useFormContext()\n const formState = useFormState({ name: fieldContext.name })\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : props.children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-sm\", className)}\n {...props}\n >\n {body}\n </p>\n )\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","\"use client\"\n\nimport { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { Label } from \"./label\"\nimport { Separator } from \"./separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n \"data-[variant=label]:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive text-sm font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst cardVariants = cva(\n \"rounded-xl text-card-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-card border\",\n glass: [\n \"glass-context\", // Enables glass semantic token overrides for children\n \"bg-[var(--j3m-glass-frosted-card)]\",\n \"backdrop-blur-[var(--j3m-blur-frosted)]\",\n \"glass-border-gradient\",\n \"shadow-[var(--j3m-glass-shadow-md)]\",\n ].join(\" \"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\ninterface CardProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof cardVariants> {}\n\nfunction Card({ className, variant, ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n className={cn(cardVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\"flex flex-col gap-1.5 p-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold tracking-tight\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.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 CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"p-6 pt-0\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n )\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent, cardVariants }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\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 }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.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 }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover: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 }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.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 {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"bg-background text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted flex size-full items-center justify-center rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.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 \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_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 ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.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(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.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}: React.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 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.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 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\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","/**\n * User Avatars Dropdown Component\n * \n * A reusable component that displays stacked user avatars with a dropdown\n * for selection. Shows first N avatars with \"+X\" overflow indicator.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\"\n\nexport interface UserAvatarItem {\n id: string\n name: string\n image?: string\n}\n\nexport interface UserAvatarsDropdownProps {\n users: UserAvatarItem[]\n selectedUserId: string | null\n onSelect: (userId: string | null) => void\n maxVisible?: number\n label?: string\n className?: string\n}\n\nexport function UserAvatarsDropdown({\n users,\n selectedUserId,\n onSelect,\n maxVisible = 2,\n label = \"All\",\n className,\n}: UserAvatarsDropdownProps) {\n const visibleUsers = users.slice(0, maxVisible)\n const overflowCount = Math.max(0, users.length - maxVisible)\n \n // Get initials from name\n const getInitials = (name: string) => {\n return name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n }\n\n // Get selected user name for display\n const selectedUser = users.find((u) => u.id === selectedUserId)\n const displayLabel = selectedUserId ? selectedUser?.name || \"User\" : label\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex items-center gap-2 rounded border border-border bg-background px-3 py-1.5 text-sm transition-colors\",\n \"hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className\n )}\n >\n {/* Stacked avatars */}\n <div className=\"flex -space-x-2\">\n {visibleUsers.map((user) => (\n <Avatar\n key={user.id}\n className=\"size-6 border-2 border-background\"\n >\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback className=\"text-[10px]\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n ))}\n {overflowCount > 0 && (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-background bg-muted text-[10px] font-medium\">\n +{overflowCount}\n </div>\n )}\n </div>\n \n {/* Label */}\n <span className=\"font-medium\">{displayLabel}</span>\n \n {/* Chevron */}\n <ChevronDownIcon className=\"size-4 text-muted-foreground\" />\n </button>\n </DropdownMenuTrigger>\n \n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {/* All users option */}\n <DropdownMenuItem\n onClick={() => onSelect(null)}\n className=\"flex items-center justify-between\"\n >\n <span>All users</span>\n {selectedUserId === null && <CheckIcon className=\"size-4\" />}\n </DropdownMenuItem>\n \n <DropdownMenuSeparator />\n \n {/* Individual users */}\n {users.map((user) => (\n <DropdownMenuItem\n key={user.id}\n onClick={() => onSelect(user.id)}\n className=\"flex items-center justify-between\"\n >\n <div className=\"flex items-center gap-2\">\n <Avatar className=\"size-5\">\n <AvatarImage src={user.image} alt={user.name} />\n <AvatarFallback className=\"text-[8px]\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n <span>{user.name}</span>\n </div>\n {selectedUserId === user.id && <CheckIcon className=\"size-4\" />}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\n","import { cn } from \"../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:border-input data-[state=inactive]:hover:bg-accent data-[state=inactive]:hover:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker>) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-card group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-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 formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none inline-flex items-center justify-center rounded-full hover:bg-muted/50 transition-colors\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none inline-flex items-center justify-center rounded-full hover:bg-muted/50 transition-colors\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"rounded-full [&_button]:ring-2 [&_button]:ring-primary/50\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\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 as React.Ref<HTMLDivElement>}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\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 ...props\n}: React.ComponentProps<typeof DayButton>) {\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-day={day.date.toLocaleDateString()}\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 \"rounded-full hover:bg-muted/50 transition-colors data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent/50 data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:ring-ring/50 flex aspect-square size-auto w-full min-w-(--cell-size) items-center justify-center leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./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 = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.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] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.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 React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.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: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\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 >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\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\nfunction CarouselItem({ className, ...props }: React.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\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.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 size-8 rounded-full\",\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 {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.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 size-8 rounded-full\",\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 {...props}\n >\n <ArrowRight />\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}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as RechartsPrimitive from \"recharts\"\n\nimport { cn } from \"../lib/utils\"\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode\n icon?: React.ComponentType\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n )\n}\n\ntype ChartContextProps = {\n config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nfunction useChart() {\n const context = React.useContext(ChartContext)\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\")\n }\n\n return context\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n ...props\n}: React.ComponentProps<\"div\"> & {\n config: ChartConfig\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >[\"children\"]\n}) {\n const uniqueId = React.useId()\n const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n )\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme || config.color\n )\n\n if (!colorConfig.length) {\n return null\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n itemConfig.color\n return color ? ` --color-${key}: ${color};` : null\n })\n .join(\"\\n\")}\n}\n`\n )\n .join(\"\\n\"),\n }}\n />\n )\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<\"div\"> & {\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: \"line\" | \"dot\" | \"dashed\"\n nameKey?: string\n labelKey?: string\n }) {\n const { config } = useChart()\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null\n }\n\n const [item] = payload\n const key = `${labelKey || item?.dataKey || item?.name || \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const value =\n !labelKey && typeof label === \"string\"\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n )\n }\n\n if (!value) {\n return null\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ])\n\n if (!active || !payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\"\n\n return (\n <div\n className={cn(\n \"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\",\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const indicatorColor = color || item.payload.fill || item.color\n\n return (\n <div\n key={item.dataKey}\n className={cn(\n \"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5\",\n indicator === \"dot\" && \"items-center\"\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n }\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\"\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = \"bottom\",\n nameKey,\n}: React.ComponentProps<\"div\"> &\n Pick<RechartsPrimitive.LegendProps, \"payload\" | \"verticalAlign\"> & {\n hideIcon?: boolean\n nameKey?: string\n }) {\n const { config } = useChart()\n\n if (!payload?.length) {\n return null\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className\n )}\n >\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item) => {\n const key = `${nameKey || item.dataKey || \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n return (\n <div\n key={item.value}\n className={cn(\n \"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3\"\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n )\n })}\n </div>\n )\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined\n\n let configLabelKey: string = key\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string\n }\n\n return configLabelKey in config\n ? config[configLabelKey]\n : config[key as keyof typeof config]\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n}\n","\"use client\"\n\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\n\nfunction AspectRatio({\n ...props\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\n return <AspectRatioPrimitive.Root data-slot=\"aspect-ratio\" {...props} />\n}\n\nexport { AspectRatio }\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 min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\",\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(\n \"flex max-w-sm flex-col items-center gap-2 text-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\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(\"text-lg 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-4 text-sm text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport { Separator } from \"./separator\"\n\nfunction ItemGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"list\"\n data-slot=\"item-group\"\n className={cn(\"group/item-group flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction ItemSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"item-separator\"\n orientation=\"horizontal\"\n className={cn(\"my-0\", className)}\n {...props}\n />\n )\n}\n\nconst itemVariants = cva(\n \"group/item flex items-center border border-transparent text-sm rounded-md transition-colors [a]:hover:bg-accent/50 [a]:transition-colors duration-100 flex-wrap outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-border\",\n muted: \"bg-muted/50\",\n },\n size: {\n default: \"p-4 gap-4 \",\n sm: \"py-3 px-4 gap-2.5\",\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}: React.ComponentProps<\"div\"> &\n VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"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:self-start [&_svg]:pointer-events-none group-has-[[data-slot=item-description]]/item:translate-y-0.5\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"size-8 border rounded-sm bg-muted [&_svg:not([class*='size-'])]:size-4\",\n image:\n \"size-10 rounded-sm overflow-hidden [&_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}: React.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 }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-content\"\n className={cn(\n \"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-title\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm leading-snug font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"item-description\"\n className={cn(\n \"text-muted-foreground line-clamp-2 text-sm leading-normal font-normal text-balance\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemActions({ className, ...props }: React.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 }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-header\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-footer\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className\n )}\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 { cn } from \"../lib/utils\"\n\nfunction Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return (\n <kbd\n data-slot=\"kbd\"\n className={cn(\n \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none\",\n \"[&_svg:not([class*='size-'])]:size-3\",\n \"[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction KbdGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <kbd\n data-slot=\"kbd-group\"\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nexport { Kbd, KbdGroup }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"../lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Progress({\n className,\n value,\n ...props\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(\n \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"bg-primary h-full w-full flex-1 transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nexport interface CircularProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Progress value (0-100) */\n value: number\n /** Size of the circle in pixels */\n size?: number\n /** Stroke width in pixels */\n strokeWidth?: number\n /** Color variant for the progress arc */\n variant?: \"default\" | \"success\" | \"warning\" | \"destructive\"\n /** Whether to show the completed checkmark when value >= 100 */\n showCheckmark?: boolean\n /** Content to display in the center (overrides default) */\n children?: React.ReactNode\n}\n\n/**\n * Circular progress indicator component.\n * \n * Styled to match Quantum chart components:\n * - Uses chart color tokens\n * - Muted background track\n * - Clean typography for center content\n * \n * @example\n * ```tsx\n * <CircularProgress value={75} size={80}>\n * <span className=\"text-lg font-bold\">75%</span>\n * </CircularProgress>\n * ```\n */\nfunction CircularProgress({\n className,\n value,\n size = 80,\n strokeWidth = 8,\n variant = \"default\",\n showCheckmark = true,\n children,\n ...props\n}: CircularProgressProps) {\n // Clamp value between 0 and 100\n const clampedValue = Math.min(100, Math.max(0, value))\n const isComplete = clampedValue >= 100\n \n // Calculate circle geometry\n const radius = (size - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const strokeDashoffset = circumference - (clampedValue / 100) * circumference\n const center = size / 2\n\n // Get variant colors (matching chart token patterns)\n const getVariantColors = () => {\n switch (variant) {\n case \"success\":\n return {\n track: \"stroke-green-500/20\",\n progress: \"stroke-green-500\",\n text: \"text-green-600 dark:text-green-400\",\n }\n case \"warning\":\n return {\n track: \"stroke-amber-500/20\",\n progress: \"stroke-amber-500\",\n text: \"text-amber-600 dark:text-amber-400\",\n }\n case \"destructive\":\n return {\n track: \"stroke-red-500/20\",\n progress: \"stroke-red-500\",\n text: \"text-red-600 dark:text-red-400\",\n }\n default:\n return {\n track: \"stroke-primary/20\",\n progress: \"stroke-primary\",\n text: \"text-primary\",\n }\n }\n }\n\n const colors = getVariantColors()\n\n return (\n <div\n data-slot=\"circular-progress\"\n data-value={clampedValue}\n data-complete={isComplete}\n className={cn(\"relative inline-flex items-center justify-center\", className)}\n style={{ width: size, height: size }}\n {...props}\n >\n {/* SVG circle */}\n <svg\n className=\"transform -rotate-90\"\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n >\n {/* Background track */}\n <circle\n className={cn(\"transition-all\", colors.track)}\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n />\n {/* Progress arc */}\n <circle\n className={cn(\"transition-all duration-300 ease-out\", colors.progress)}\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n />\n </svg>\n \n {/* Center content */}\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {children ? (\n children\n ) : isComplete && showCheckmark ? (\n <Check className={cn(\"h-6 w-6\", colors.text)} />\n ) : (\n <span className={cn(\"text-sm font-semibold tabular-nums\", colors.text)}>\n {Math.round(clampedValue)}%\n </span>\n )}\n </div>\n </div>\n )\n}\n\nexport { CircularProgress }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.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({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n CircleCheckIcon,\n InfoIcon,\n Loader2Icon,\n OctagonXIcon,\n TriangleAlertIcon,\n} from \"lucide-react\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\n// Hook to detect dark mode from document.documentElement\nfunction useDetectTheme(): \"light\" | \"dark\" {\n const [theme, setTheme] = React.useState<\"light\" | \"dark\">(\"light\")\n\n React.useEffect(() => {\n // Check initial state\n const isDark = document.documentElement.classList.contains(\"dark\")\n setTheme(isDark ? \"dark\" : \"light\")\n\n // Watch for changes\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === \"class\") {\n const isDark = document.documentElement.classList.contains(\"dark\")\n setTheme(isDark ? \"dark\" : \"light\")\n }\n })\n })\n\n observer.observe(document.documentElement, { attributes: true })\n return () => observer.disconnect()\n }, [])\n\n return theme\n}\n\nconst Toaster = ({ theme: themeProp, ...props }: ToasterProps) => {\n const detectedTheme = useDetectTheme()\n // Use provided theme prop, or fall back to detected theme\n const theme = themeProp ?? detectedTheme\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import { Loader2Icon, type LucideProps } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Spinner({ className, ...props }: LucideProps) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"size-4 animate-spin\", className)}\n {...props}\n />\n )\n}\n\nexport { Spinner }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"./tooltip\"\n\nconst deliveryIndicatorVariants = cva(\n \"inline-block rounded-full shrink-0\",\n {\n variants: {\n status: {\n \"on-time\": \"bg-[var(--j3m-green-9,#84EBB4)]\",\n \"delayed\": \"bg-[var(--j3m-yellow-9,#FFDB43)]\",\n \"critical\": \"bg-[var(--j3m-red-9,#FB3748)]\",\n \"pending\": \"bg-[var(--j3m-gray-6,#D2D2D2)]\",\n },\n size: {\n sm: \"h-1.5 w-3\",\n default: \"h-1.5 w-3\",\n lg: \"h-2 w-4\",\n },\n },\n defaultVariants: {\n status: \"pending\",\n size: \"default\",\n },\n }\n)\n\nexport type DeliveryStatus = \"on-time\" | \"delayed\" | \"critical\" | \"pending\"\n\nexport interface DeliveryIndicatorProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof deliveryIndicatorVariants> {\n /** The delivery status */\n status?: DeliveryStatus\n /** Optional label for accessibility and tooltip */\n label?: string\n /** Show tooltip on hover */\n showTooltip?: boolean\n}\n\nfunction DeliveryIndicator({\n className,\n status,\n size,\n label,\n showTooltip = false,\n ...props\n}: DeliveryIndicatorProps) {\n const indicator = (\n <span\n data-slot=\"delivery-indicator\"\n data-status={status}\n className={cn(deliveryIndicatorVariants({ status, size }), className)}\n aria-label={label || `Delivery status: ${status}`}\n role=\"img\"\n {...props}\n />\n )\n\n if (showTooltip && label) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{indicator}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return indicator\n}\n\nexport interface DeliveryIndicatorsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Array of delivery statuses to display */\n deliveries: Array<{\n status: DeliveryStatus\n label?: string\n }>\n /** Size of the indicators */\n size?: \"sm\" | \"default\" | \"lg\"\n /** Show tooltips on hover */\n showTooltips?: boolean\n}\n\n/**\n * A group of delivery indicators for displaying multiple deliveries\n */\nfunction DeliveryIndicators({\n className,\n deliveries,\n size = \"default\",\n showTooltips = false,\n ...props\n}: DeliveryIndicatorsProps) {\n return (\n <div\n data-slot=\"delivery-indicators\"\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n >\n {deliveries.map((delivery, index) => (\n <DeliveryIndicator\n key={index}\n status={delivery.status}\n size={size}\n label={delivery.label}\n showTooltip={showTooltips}\n />\n ))}\n </div>\n )\n}\n\nexport { DeliveryIndicator, DeliveryIndicators, deliveryIndicatorVariants }\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.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\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(\"hover:text-foreground transition-colors\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.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-foreground font-normal\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\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 * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button, buttonVariants } from \"./button\"\n\nfunction Pagination({ className, ...props }: React.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({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\n {...props}\n >\n <ChevronLeftIcon />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRightIcon />\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\nimport { ScrollArea } from \"./scroll-area\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <ScrollArea className=\"max-h-[300px]\">\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"scroll-py-1\",\n className\n )}\n {...props}\n />\n </ScrollArea>\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground data-[selected=true]:[&_svg]:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\nimport { Kbd } from \"./kbd\"\n\ninterface SearchTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Placeholder text shown in the search button */\n placeholder?: string\n /** Whether to show the keyboard shortcut hint */\n showShortcut?: boolean\n /** Custom keyboard shortcut to display (defaults to ⌘K) */\n shortcutKey?: string\n /** Whether to use the command modifier symbol (⌘ on Mac, Ctrl on others) */\n shortcutModifier?: string\n}\n\nconst SearchTrigger = React.forwardRef<HTMLButtonElement, SearchTriggerProps>(\n (\n {\n className,\n placeholder = \"Search...\",\n showShortcut = true,\n shortcutKey = \"K\",\n shortcutModifier = \"⌘\",\n ...props\n },\n ref\n ) => {\n return (\n <Button\n ref={ref}\n variant=\"outline\"\n data-slot=\"search-trigger\"\n className={cn(\n \"relative h-9 w-full justify-start rounded-full bg-background text-sm text-muted-foreground\",\n \"sm:w-64 sm:max-w-[280px]\",\n className\n )}\n {...props}\n >\n <SearchIcon className=\"mr-2 h-4 w-4 shrink-0\" />\n <span className=\"hidden truncate sm:inline-flex\">{placeholder}</span>\n <span className=\"truncate sm:hidden\">Search</span>\n {showShortcut && (\n <Kbd className=\"pointer-events-none absolute right-2 hidden h-5 select-none items-center gap-0.5 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium sm:flex\">\n <span className=\"text-xs\">{shortcutModifier}</span>\n {shortcutKey}\n </Kbd>\n )}\n </Button>\n )\n }\n)\n\nSearchTrigger.displayName = \"SearchTrigger\"\n\n/**\n * A hook that sets up keyboard shortcut handling for the search trigger.\n * @param onOpen - Callback fired when the shortcut is pressed\n * @param key - The key to listen for (default: \"k\")\n */\nfunction useSearchShortcut(onOpen: () => void, key: string = \"k\") {\n React.useEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key.toLowerCase() === key.toLowerCase() && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n onOpen()\n }\n }\n document.addEventListener(\"keydown\", down)\n return () => document.removeEventListener(\"keydown\", down)\n }, [onOpen, key])\n}\n\nexport { SearchTrigger, useSearchShortcut }\nexport type { SearchTriggerProps }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n )\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </MenubarPortal>\n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n","import * as React from \"react\"\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.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 >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: React.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-1\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: React.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 inline-flex h-9 w-max items-center justify-center rounded-full bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDownIcon\n className=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n \"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out 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 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto\",\n \"group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 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-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div\n className={cn(\n \"absolute top-full left-0 isolate z-50 flex justify-center\"\n )}\n >\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n \"origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground hover:[&_svg]:text-accent-foreground hover:[&_p]:text-accent-foreground hover:[&_.text-muted-foreground]:text-accent-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n \"data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out 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 >\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","\"use client\"\n\nimport * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n )\n}\n\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n )\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n )\n}\n\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n )\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm 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\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content bg-background fixed z-50 flex h-auto flex-col\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 px-6 py-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 px-6 py-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetBody({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-body\"\n className={cn(\"flex-1 px-6 py-4\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetBody,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.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}: React.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 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n )\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Collapsible({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nfunction CollapsibleContent({\n className,\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n className={cn(\n \"data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) {\n return (\n <ResizablePrimitive.PanelGroup\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.Panel>) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.PanelResizeHandle\n data-slot=\"resizable-handle\"\n className={cn(\n \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n )\n}\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeftIcon } from \"lucide-react\"\n\nimport { useIsMobile } from \"../hooks/use-mobile\"\nimport { cn } from \"../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Separator } from \"./separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet\"\nimport { Skeleton } from \"./skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"bg-background relative flex w-full flex-1 flex-col\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\n/**\n * J3M Section\n * \n * A container component for grouping multiple components with glass morphism backgrounds.\n * Designed for use on canvas or neutral backgrounds.\n * Variants: default, glass-light, glass-dark, glass-neutral, glass-primary\n */\n\nconst sectionVariants = cva(\n // Base styles - larger padding than Card for section grouping\n \"flex flex-col rounded-[var(--j3m-radius-l)]\",\n {\n variants: {\n variant: {\n // Default solid section\n default: [\n \"bg-[var(--color-bg-surface)]\",\n \"border border-[var(--color-border-subtle)]\",\n \"text-[var(--color-text-main)]\",\n ].join(\" \"),\n \n // Glass Light - frosted glass for dark or image backgrounds\n \"glass-light\": [\n \"glass-context\", // Enables glass semantic token overrides\n \"glass-frosted\", // Strong blur effect\n \"glass-border-gradient\", // Gradient border (top lighter)\n \"text-[var(--color-text-main)]\",\n \"shadow-[var(--j3m-glass-shadow-lg)]\",\n ].join(\" \"),\n \n // Glass Dark - dark frosted glass\n \"glass-dark\": [\n \"bg-[var(--j3m-glass-dark)]\",\n \"backdrop-blur-[var(--j3m-blur-md)]\",\n \"border border-[var(--j3m-glass-border-dark)]\",\n \"text-white\",\n \"shadow-[var(--j3m-glass-shadow-lg)]\",\n ].join(\" \"),\n \n // Glass Neutral - subtle frosted effect (most common)\n \"glass-neutral\": [\n \"bg-[var(--j3m-glass-neutral)]\",\n \"backdrop-blur-[var(--j3m-blur-lg)]\",\n \"border border-[var(--j3m-glass-border-subtle)]\",\n \"text-[var(--color-text-main)]\",\n \"shadow-[var(--j3m-glass-shadow-sm)]\",\n ].join(\" \"),\n \n // Glass Primary - with orange tint\n \"glass-primary\": [\n \"bg-[var(--j3m-glass-primary)]\",\n \"backdrop-blur-[var(--j3m-blur-lg)]\",\n \"border border-[var(--j3m-glass-border-light)]\",\n \"text-[var(--color-text-main)]\",\n \"shadow-[var(--j3m-glass-shadow-glow)]\",\n ].join(\" \"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface SectionProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof sectionVariants> {}\n\n// Check if variant is a glass variant\nconst isGlassVariant = (variant: SectionProps[\"variant\"]) => \n variant?.startsWith(\"glass-\") ?? false\n\nconst Section = React.forwardRef<HTMLElement, SectionProps>(\n ({ className, variant, ...props }, ref) => (\n <section\n ref={ref}\n className={cn(sectionVariants({ variant, className }))}\n // Data attribute for portal components to detect glass context\n data-glass-context={isGlassVariant(variant) ? \"true\" : undefined}\n {...props}\n />\n )\n)\nSection.displayName = \"Section\"\n\nconst SectionHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-[var(--j3m-spacing-xs)]\",\n \"px-[var(--j3m-spacing-xl)] pt-[var(--j3m-spacing-xl)] pb-[var(--j3m-spacing-m)]\",\n className\n )}\n {...props}\n />\n )\n)\nSectionHeader.displayName = \"SectionHeader\"\n\nconst SectionTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n )\n)\nSectionTitle.displayName = \"SectionTitle\"\n\nconst SectionDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"text-sm opacity-70\",\n className\n )}\n {...props}\n />\n )\n)\nSectionDescription.displayName = \"SectionDescription\"\n\nconst SectionContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"px-[var(--j3m-spacing-xl)] py-[var(--j3m-spacing-l)]\",\n className\n )}\n {...props}\n />\n )\n)\nSectionContent.displayName = \"SectionContent\"\n\nconst SectionFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center\",\n \"px-[var(--j3m-spacing-xl)] py-[var(--j3m-spacing-l)]\",\n \"border-t border-[inherit]\",\n className\n )}\n {...props}\n />\n )\n)\nSectionFooter.displayName = \"SectionFooter\"\n\nexport { \n Section, \n SectionHeader, \n SectionFooter, \n SectionTitle, \n SectionDescription, \n SectionContent, \n sectionVariants \n}\n\n","\"use client\"\n\nimport { type Column } from \"@tanstack/react-table\"\nimport { ArrowDown, ArrowUp, ChevronsUpDown, EyeOff } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../dropdown-menu\"\n\ninterface DataTableColumnHeaderProps<TData, TValue>\n extends React.HTMLAttributes<HTMLDivElement> {\n column: Column<TData, TValue>\n title: string\n}\n\nfunction DataTableColumnHeader<TData, TValue>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>\n }\n\n return (\n <div className={cn(\"flex items-center gap-2\", className)}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"data-[state=open]:bg-accent -ml-3 h-8\"\n >\n <span>{title}</span>\n {column.getIsSorted() === \"desc\" ? (\n <ArrowDown />\n ) : column.getIsSorted() === \"asc\" ? (\n <ArrowUp />\n ) : (\n <ChevronsUpDown />\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuItem onClick={() => column.toggleSorting(false)}>\n <ArrowUp />\n Asc\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.toggleSorting(true)}>\n <ArrowDown />\n Desc\n </DropdownMenuItem>\n {column.getCanHide() && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => column.toggleVisibility(false)}>\n <EyeOff />\n Hide\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n}\n\nexport { DataTableColumnHeader, type DataTableColumnHeaderProps }\n\n","\"use client\"\n\nimport { type Table } from \"@tanstack/react-table\"\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from \"lucide-react\"\n\nimport { Button } from \"../button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../select\"\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>\n showRowSelection?: boolean\n pageSizeOptions?: number[]\n}\n\nfunction DataTablePagination<TData>({\n table,\n showRowSelection = true,\n pageSizeOptions = [10, 20, 25, 30, 40, 50],\n}: DataTablePaginationProps<TData>) {\n return (\n <div className=\"flex items-center justify-between px-2\">\n {showRowSelection && (\n <div className=\"text-muted-foreground flex-1 text-sm\">\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </div>\n )}\n <div className=\"flex items-center space-x-6 lg:space-x-8\">\n <div className=\"flex items-center space-x-2\">\n <p className=\"text-sm font-medium\">Rows per page</p>\n <Select\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => {\n table.setPageSize(Number(value))\n }}\n >\n <SelectTrigger className=\"h-8 w-[70px]\">\n <SelectValue placeholder={table.getState().pagination.pageSize} />\n </SelectTrigger>\n <SelectContent side=\"top\">\n {pageSizeOptions.map((pageSize) => (\n <SelectItem key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex w-[100px] items-center justify-center text-sm font-medium\">\n Page {table.getState().pagination.pageIndex + 1} of{\" \"}\n {table.getPageCount()}\n </div>\n <div className=\"flex items-center space-x-2\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"hidden size-8 lg:flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to first page</span>\n <ChevronsLeft />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-8\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <ChevronLeft />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-8\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to next page</span>\n <ChevronRight />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"hidden size-8 lg:flex\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to last page</span>\n <ChevronsRight />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nexport { DataTablePagination, type DataTablePaginationProps }\n\n","\"use client\"\n\nimport { type Table } from \"@tanstack/react-table\"\nimport { Settings2 } from \"lucide-react\"\n\nimport { Button } from \"../button\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../dropdown-menu\"\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>\n}\n\nfunction DataTableViewOptions<TData>({\n table,\n}: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"ml-auto hidden h-8 lg:flex\"\n >\n <Settings2 />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter(\n (column) =>\n typeof column.accessorFn !== \"undefined\" && column.getCanHide()\n )\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport { DataTableViewOptions, type DataTableViewOptionsProps }\n\n","import * as React from \"react\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { Label } from \"../../components/label\"\nimport { SidebarInput } from \"../../components/sidebar\"\n\nexport function SearchForm({ ...props }: React.ComponentProps<\"form\">) {\n return (\n <form {...props}>\n <div className=\"relative\">\n <Label htmlFor=\"search\" className=\"sr-only\">\n Search\n </Label>\n <SidebarInput\n id=\"search\"\n placeholder=\"Type to search...\"\n className=\"h-8 pl-7\"\n />\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2 size-4 -translate-y-1/2 opacity-50 select-none\" />\n </div>\n </form>\n )\n}\n\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Separator } from \"../../components/separator\"\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"../../components/breadcrumb\"\nimport { SearchForm } from \"./search-form\"\n\ninterface BreadcrumbItemType {\n label: string\n href?: string\n}\n\ninterface SiteHeaderProps {\n /** Slot for sidebar trigger - use <SidebarTrigger /> from @j3m-quantum/ui */\n trigger?: React.ReactNode\n breadcrumbs?: BreadcrumbItemType[]\n showSearch?: boolean\n className?: string\n children?: React.ReactNode\n}\n\nexport function SiteHeader({ \n trigger,\n breadcrumbs = [\n { label: \"Building Your Application\", href: \"#\" },\n { label: \"Data Fetching\" },\n ],\n showSearch = true,\n className,\n children \n}: SiteHeaderProps) {\n return (\n <header \n data-slot=\"site-header\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground sticky top-0 z-50 flex w-full items-center border-b border-sidebar-border\",\n className\n )}\n >\n <div className=\"flex h-[var(--header-height,3.5rem)] w-full items-center gap-[var(--j3m-spacing-s)] px-[var(--j3m-spacing-m)]\">\n {trigger}\n {trigger && <Separator orientation=\"vertical\" className=\"mr-[var(--j3m-spacing-s)] h-4\" />}\n <Breadcrumb className=\"hidden sm:block\">\n <BreadcrumbList>\n {breadcrumbs.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && <BreadcrumbSeparator />}\n <BreadcrumbItem>\n {item.href ? (\n <BreadcrumbLink href={item.href}>\n {item.label}\n </BreadcrumbLink>\n ) : (\n <BreadcrumbPage>{item.label}</BreadcrumbPage>\n )}\n </BreadcrumbItem>\n </React.Fragment>\n ))}\n </BreadcrumbList>\n </Breadcrumb>\n {showSearch && <SearchForm className=\"w-full sm:ml-auto sm:w-auto\" />}\n {children}\n </div>\n </header>\n )\n}\n\n","\"use client\"\n\nimport { ChevronRightIcon, type LucideIcon } from \"lucide-react\"\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../../components/collapsible\"\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"../../components/sidebar\"\n\nexport interface NavItem {\n title: string\n url: string\n icon?: LucideIcon\n isActive?: boolean\n items?: {\n title: string\n url: string\n }[]\n}\n\ninterface NavMainProps {\n items: NavItem[]\n label?: string\n}\n\nexport function NavMain({ items, label = \"Platform\" }: NavMainProps) {\n return (\n <SidebarGroup>\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarMenu>\n {items.map((item) => (\n <Collapsible key={item.title} asChild defaultOpen={item.isActive}>\n <SidebarMenuItem>\n <SidebarMenuButton asChild tooltip={item.title}>\n <a href={item.url}>\n {item.icon && <item.icon />}\n <span>{item.title}</span>\n </a>\n </SidebarMenuButton>\n {item.items?.length ? (\n <>\n <CollapsibleTrigger asChild>\n <SidebarMenuAction className=\"data-[state=open]:rotate-90\">\n <ChevronRightIcon />\n <span className=\"sr-only\">Toggle</span>\n </SidebarMenuAction>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <SidebarMenuSub>\n {item.items?.map((subItem) => (\n <SidebarMenuSubItem key={subItem.title}>\n <SidebarMenuSubButton asChild>\n <a href={subItem.url}>\n <span>{subItem.title}</span>\n </a>\n </SidebarMenuSubButton>\n </SidebarMenuSubItem>\n ))}\n </SidebarMenuSub>\n </CollapsibleContent>\n </>\n ) : null}\n </SidebarMenuItem>\n </Collapsible>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n )\n}\n\n","import * as React from \"react\"\nimport {\n FolderIcon,\n MoreHorizontalIcon,\n ShareIcon,\n TrashIcon,\n type LucideIcon,\n} from \"lucide-react\"\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../components/dropdown-menu\"\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n} from \"../../components/sidebar\"\n\nexport interface NavProject {\n name: string\n url: string\n icon: LucideIcon\n}\n\ninterface NavProjectsProps {\n projects: NavProject[]\n label?: string\n}\n\nexport function NavProjects({ projects, label = \"Projects\" }: NavProjectsProps) {\n return (\n <SidebarGroup className=\"group-data-[collapsible=icon]:hidden\">\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarMenu>\n {projects.map((item) => (\n <SidebarMenuItem key={item.name}>\n <SidebarMenuButton asChild>\n <a href={item.url}>\n <item.icon />\n <span>{item.name}</span>\n </a>\n </SidebarMenuButton>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuAction showOnHover>\n <MoreHorizontalIcon />\n <span className=\"sr-only\">More</span>\n </SidebarMenuAction>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-48 rounded-[var(--j3m-radius-m)]\"\n side=\"right\"\n align=\"start\"\n sideOffset={8}\n >\n <DropdownMenuItem>\n <FolderIcon className=\"text-muted-foreground\" />\n <span>View Project</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <ShareIcon className=\"text-muted-foreground\" />\n <span>Share Project</span>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <TrashIcon className=\"text-muted-foreground\" />\n <span>Delete Project</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n ))}\n <SidebarMenuItem>\n <SidebarMenuButton className=\"text-sidebar-foreground/70\">\n <MoreHorizontalIcon className=\"text-sidebar-foreground/70\" />\n <span>More</span>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarGroup>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type LucideIcon } from \"lucide-react\"\n\nimport {\n SidebarGroup,\n SidebarGroupContent,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from \"../../components/sidebar\"\n\ninterface NavSecondaryItem {\n title: string\n url: string\n icon: LucideIcon\n}\n\ninterface NavSecondaryProps extends React.ComponentProps<typeof SidebarGroup> {\n items: NavSecondaryItem[]\n}\n\nexport function NavSecondary({ items, ...props }: NavSecondaryProps) {\n return (\n <SidebarGroup {...props}>\n <SidebarGroupContent>\n <SidebarMenu>\n {items.map((item) => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton asChild size=\"sm\">\n <a href={item.url}>\n <item.icon />\n <span>{item.title}</span>\n </a>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n )\n}\n\n","import * as React from \"react\"\nimport {\n BadgeCheckIcon,\n BellIcon,\n ChevronsUpDownIcon,\n CreditCardIcon,\n LogOutIcon,\n SparklesIcon,\n} from \"lucide-react\"\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../components/avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../components/dropdown-menu\"\nimport {\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from \"../../components/sidebar\"\n\ninterface NavUserProps {\n user: {\n name: string\n email: string\n avatar: string\n }\n}\n\nexport function NavUser({ user }: NavUserProps) {\n return (\n <SidebarMenu>\n <SidebarMenuItem>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton\n size=\"lg\"\n className=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n >\n <Avatar className=\"h-8 w-8 rounded-lg\">\n <AvatarImage src={user.avatar} alt={user.name} />\n <AvatarFallback className=\"rounded-lg\">\n {user.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-semibold\">{user.name}</span>\n <span className=\"truncate text-xs\">{user.email}</span>\n </div>\n <ChevronsUpDownIcon className=\"ml-auto size-4\" />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className=\"w-[--radix-dropdown-menu-trigger-width] min-w-56 rounded-[var(--j3m-radius-m)]\"\n side=\"right\"\n align=\"end\"\n sideOffset={8}\n >\n <DropdownMenuLabel className=\"p-0 font-normal\">\n <div className=\"flex items-center gap-2 px-1 py-1.5 text-left text-sm\">\n <Avatar className=\"h-8 w-8 rounded-lg\">\n <AvatarImage src={user.avatar} alt={user.name} />\n <AvatarFallback className=\"rounded-lg\">\n {user.name.slice(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-semibold\">{user.name}</span>\n <span className=\"truncate text-xs\">{user.email}</span>\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <SparklesIcon />\n Upgrade to Pro\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem>\n <BadgeCheckIcon />\n Account\n </DropdownMenuItem>\n <DropdownMenuItem>\n <CreditCardIcon />\n Billing\n </DropdownMenuItem>\n <DropdownMenuItem>\n <BellIcon />\n Notifications\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem>\n <LogOutIcon />\n Log out\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarMenuItem>\n </SidebarMenu>\n )\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type Table } from \"@tanstack/react-table\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { Input } from \"../../components/input\"\nimport type { Supplier } from \"./types\"\n\nexport interface PlanningTableToolbarProps\n extends React.HTMLAttributes<HTMLDivElement> {\n table: Table<Supplier>\n}\n\n/**\n * Toolbar component for the PlanningTable.\n * Provides search/filter functionality.\n */\nfunction PlanningTableToolbar({\n className,\n table,\n ...props\n}: PlanningTableToolbarProps) {\n const isFiltered = table.getState().columnFilters.length > 0\n\n return (\n <div\n data-slot=\"planning-table-toolbar\"\n className={cn(\"flex items-center gap-2\", className)}\n {...props}\n >\n {/* Search by supplier name */}\n <Input\n placeholder=\"Filter suppliers...\"\n value={(table.getColumn(\"supplier\")?.getFilterValue() as string) ?? \"\"}\n onChange={(event) =>\n table.getColumn(\"supplier\")?.setFilterValue(event.target.value)\n }\n className=\"h-8 w-[150px] lg:w-[250px]\"\n />\n \n {/* Clear filters button */}\n {isFiltered && (\n <Button\n variant=\"ghost\"\n onClick={() => table.resetColumnFilters()}\n className=\"h-8 px-2 lg:px-3\"\n >\n Reset\n <X className=\"ml-2 h-4 w-4\" />\n </Button>\n )}\n </div>\n )\n}\n\nexport { PlanningTableToolbar }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Flag } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Badge } from \"../../components/badge\"\nimport type { Supplier, SupplierBadgeType } from \"./types\"\n\n/**\n * Get badge variant based on supplier badge type\n */\nfunction getBadgeVariant(badgeType: SupplierBadgeType): \"default\" | \"secondary\" | \"outline\" {\n // All badges use outline variant with custom styling to match Calibration\n return \"outline\"\n}\n\nexport interface SupplierCellProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Supplier data */\n supplier: Supplier\n}\n\n/**\n * Cell component for displaying supplier information in the Y-axis legend.\n * \n * Styling matches Calibration Table's RowHeaderCell:\n * - White background (Y-axis cells)\n * - Quantum spacing tokens (8px horizontal, 12px top)\n * - Same typography scale and badge styling\n */\nfunction SupplierCell({\n className,\n supplier,\n ...props\n}: SupplierCellProps) {\n // Quantum spacing tokens:\n // px-[var(--j3m-spacing-xs)] = 8px horizontal\n // pt-[var(--j3m-spacing-s)] = 12px top\n // pb-2 = 8px bottom\n const spacingClasses = \"px-[var(--j3m-spacing-xs)] pt-[var(--j3m-spacing-s)] pb-2\"\n\n return (\n <div\n data-slot=\"supplier-cell\"\n className={cn(\n // Same height as WeekCell (80px) for row alignment\n \"flex flex-col justify-center gap-1.5 min-w-[200px] h-[80px]\",\n // White background for Y-axis legend cells\n \"bg-background\",\n spacingClasses,\n className\n )}\n {...props}\n >\n {/* Top row: Name + Badge */}\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex flex-col min-w-0 flex-1\">\n {/* Supplier name */}\n <span className=\"text-sm font-bold leading-tight text-foreground truncate\">\n {supplier.name}\n </span>\n {/* Scope */}\n <span className=\"text-xs text-muted-foreground\">\n {supplier.scope}\n </span>\n </div>\n\n {/* Checkpoint badge with flag icon */}\n <Badge\n variant={getBadgeVariant(supplier.badgeType)}\n className=\"text-[10px] px-2 py-0.5 h-[19px] font-medium shrink-0 gap-1 bg-background border-border\"\n >\n <Flag className=\"h-2.5 w-2.5\" />\n {supplier.badgeType}\n </Badge>\n </div>\n </div>\n )\n}\n\nexport { SupplierCell }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Factory, Truck } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport type { DeliveryStatus } from \"../../components/delivery-indicator\"\nimport type { WeekCellData, Week, Supplier } from \"./types\"\n\nexport interface WeekCellProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Week cell data */\n data: WeekCellData\n /** Week information */\n week: Week\n /** Supplier information (for click handler context) */\n supplier?: Supplier\n /** Whether this cell is in the current week */\n isCurrentWeek?: boolean\n /** Callback when cell is clicked */\n onCellClick?: () => void\n}\n\n/**\n * Get the worst status from production and deliveries\n */\nfunction getCombinedRiskLevel(data: WeekCellData): \"normal\" | \"warning\" | \"critical\" {\n // Check production status\n const productionStatus = data.production?.status || \"on-time\"\n \n // Check delivery statuses\n const hasDeliveryCritical = data.deliveries?.some(d => d.status === \"critical\")\n const hasDeliveryDelayed = data.deliveries?.some(d => d.status === \"delayed\")\n \n // Critical takes priority\n if (productionStatus === \"critical\" || hasDeliveryCritical) {\n return \"critical\"\n }\n \n // Then warning/delayed\n if (productionStatus === \"delayed\" || hasDeliveryDelayed || data.hasWarning) {\n return \"warning\"\n }\n \n return \"normal\"\n}\n\n/**\n * Get status for a single row (production or delivery)\n */\nfunction getRowStatus(status?: DeliveryStatus): \"normal\" | \"warning\" | \"critical\" {\n if (status === \"critical\") return \"critical\"\n if (status === \"delayed\") return \"warning\"\n return \"normal\"\n}\n\n// Status fill classes - edge-to-edge (matching Calibration)\n// Uses left stroke + status fill reaching cell edges\nconst statusFillClasses = {\n normal: {\n border: \"border-l-[3px] border-l-green-500\",\n bg: \"bg-green-50/50 dark:bg-green-950/30\",\n },\n warning: {\n border: \"border-l-[3px] border-l-amber-500\",\n bg: \"bg-amber-50/50 dark:bg-amber-950/30\",\n },\n critical: {\n border: \"border-l-[3px] border-l-red-500\",\n bg: \"bg-red-50/50 dark:bg-red-950/30\",\n },\n}\n\n// Color classes for individual progress bars\nconst statusColors = {\n normal: {\n icon: \"text-green-600 dark:text-green-400\",\n progress: \"bg-green-500\",\n text: \"text-green-700 dark:text-green-300\",\n },\n warning: {\n icon: \"text-amber-600 dark:text-amber-400\",\n progress: \"bg-amber-500\",\n text: \"text-amber-700 dark:text-amber-300\",\n },\n critical: {\n icon: \"text-red-600 dark:text-red-400\",\n progress: \"bg-red-500\",\n text: \"text-red-700 dark:text-red-300\",\n },\n}\n\n/**\n * Cell component for displaying week data in the planning matrix.\n * \n * Styling matches Calibration Table:\n * - Edge-to-edge status fills (no inset card look)\n * - Quantum spacing tokens (8px horizontal, 12px top)\n * - Left stroke for status indication\n * \n * Note: Comments are shown in X-axis header only (not per-cell)\n */\nfunction WeekCell({\n className,\n data,\n week,\n supplier,\n isCurrentWeek,\n onCellClick,\n ...props\n}: WeekCellProps) {\n const combinedRisk = data.type === \"data\" ? getCombinedRiskLevel(data) : \"normal\"\n const statusClasses = statusFillClasses[combinedRisk]\n \n // Production data\n const productionProgress = data.production?.progress ?? data.progress ?? 0\n const productionStatus = getRowStatus(data.production?.status)\n const productionColors = statusColors[productionStatus]\n \n // Delivery data\n const deliveryCount = data.deliveries?.length ?? 0\n const worstDeliveryStatus = data.deliveries?.some(d => d.status === \"critical\") \n ? \"critical\" \n : data.deliveries?.some(d => d.status === \"delayed\") \n ? \"warning\" \n : \"normal\"\n const deliveryColors = statusColors[worstDeliveryStatus]\n\n // Get delivery status color class\n const getDeliveryStatusColor = (status: DeliveryStatus): string => {\n switch (status) {\n case \"critical\": return \"bg-red-500\"\n case \"delayed\": return \"bg-amber-500\"\n default: return \"bg-green-500\"\n }\n }\n\n const handleClick = () => {\n if (onCellClick && data.type !== \"empty\") {\n onCellClick()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if ((e.key === \"Enter\" || e.key === \" \") && onCellClick && data.type !== \"empty\") {\n e.preventDefault()\n onCellClick()\n }\n }\n\n // Quantum spacing tokens:\n // px-[var(--j3m-spacing-xs)] = 8px horizontal\n // pt-[var(--j3m-spacing-s)] = 12px top\n // pb-2 = 8px bottom\n const spacingClasses = \"px-[var(--j3m-spacing-xs)] pt-[var(--j3m-spacing-s)] pb-2\"\n\n // Empty state - white background (matching Calibration)\n if (data.type === \"empty\") {\n return (\n <div\n data-slot=\"week-cell\"\n data-state=\"empty\"\n data-current-week={isCurrentWeek}\n className={cn(\n \"flex h-[80px] items-center justify-center cursor-default\",\n \"bg-background\",\n spacingClasses,\n className\n )}\n {...props}\n >\n <span className=\"text-muted-foreground/30 text-xl\">·</span>\n </div>\n )\n }\n\n // No logistics state - white background with muted left stroke\n if (data.type === \"no-logistics\") {\n return (\n <div\n data-slot=\"week-cell\"\n data-state=\"no-logistics\"\n data-current-week={isCurrentWeek}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"flex flex-col h-[80px] justify-center gap-2\",\n \"cursor-pointer bg-background\",\n \"border-l-[3px] border-l-muted-foreground/30\",\n spacingClasses,\n // Hover lift effect\n \"transition-all duration-200 ease-out\",\n \"hover:-translate-y-0.5 hover:shadow-[var(--j3m-shadow-md)]\",\n className\n )}\n {...props}\n >\n {/* Production row */}\n <div className=\"flex items-center gap-2\">\n <Factory className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <div className=\"flex-1 h-1.5 bg-muted-foreground/20 rounded-full overflow-hidden\">\n <div \n className=\"h-full bg-muted-foreground/40 rounded-full\"\n style={{ width: `${productionProgress}%` }}\n />\n </div>\n </div>\n \n {/* Delivery row - No logistics */}\n <div className=\"flex items-center gap-2 text-muted-foreground\">\n <Truck className=\"h-3.5 w-3.5 shrink-0\" />\n <span className=\"text-[10px]\">No logistics</span>\n </div>\n </div>\n )\n }\n\n // Data state - edge-to-edge status fills (matching Calibration)\n return (\n <div\n data-slot=\"week-cell\"\n data-state=\"data\"\n data-risk={combinedRisk}\n data-current-week={isCurrentWeek}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"flex flex-col h-[80px] justify-center gap-2\",\n \"cursor-pointer\",\n // Edge-to-edge status fill (no inset card)\n statusClasses.border,\n statusClasses.bg,\n spacingClasses,\n // Hover lift effect\n \"transition-all duration-200 ease-out\",\n \"hover:-translate-y-0.5 hover:shadow-[var(--j3m-shadow-md)]\",\n className\n )}\n {...props}\n >\n {/* Production row - Factory icon + progress bar */}\n <div className=\"flex items-center gap-2\">\n <Factory className={cn(\"h-3.5 w-3.5 shrink-0\", productionColors.icon)} />\n <div className=\"flex-1 h-1.5 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden\">\n <div \n className={cn(\"h-full rounded-full transition-all\", productionColors.progress)}\n style={{ width: `${productionProgress}%` }}\n />\n </div>\n </div>\n \n {/* Delivery summary row - Truck icon + count */}\n <div className=\"flex items-center gap-2\">\n <Truck className={cn(\"h-3.5 w-3.5 shrink-0\", deliveryColors.icon)} />\n {deliveryCount > 0 ? (\n <span className={cn(\"text-[10px] font-medium\", deliveryColors.text)}>\n {deliveryCount}x delivery\n </span>\n ) : (\n <span className=\"text-[10px] text-muted-foreground\">—</span>\n )}\n </div>\n\n {/* Delivery micro-progress indicators */}\n {deliveryCount > 0 && (\n <div className=\"flex items-center gap-1\">\n {data.deliveries?.slice(0, 5).map((delivery, index) => {\n const deliveryProgress = delivery.progress ?? (delivery.status === \"on-time\" ? 100 : delivery.status === \"delayed\" ? 50 : 25)\n \n return (\n <div \n key={delivery.id || index} \n className=\"flex-1 max-w-[24px]\"\n title={delivery.label || `Delivery ${index + 1}`}\n >\n {/* Mini progress bar */}\n <div className=\"h-1 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden\">\n <div \n className={cn(\"h-full rounded-full transition-all\", getDeliveryStatusColor(delivery.status))}\n style={{ width: `${deliveryProgress}%` }}\n />\n </div>\n </div>\n )\n })}\n {deliveryCount > 5 && (\n <span className=\"text-[8px] text-muted-foreground\">+{deliveryCount - 5}</span>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { WeekCell }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { MessageSquare } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\n\nexport interface CommentButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Number of existing comments */\n commentCount?: number\n /** Size variant */\n size?: \"sm\" | \"default\"\n}\n\n/**\n * Comment button with icon states:\n * - No comments: Plain comment icon\n * - Has comments: Comment icon with notification dot (primary orange)\n */\nfunction CommentButton({\n className,\n commentCount = 0,\n size = \"default\",\n ...props\n}: CommentButtonProps) {\n const hasComments = commentCount > 0\n const sizeClasses = size === \"sm\" ? \"h-6 w-6\" : \"h-7 w-7\"\n const iconSize = size === \"sm\" ? \"h-3.5 w-3.5\" : \"h-4 w-4\"\n\n return (\n <Button\n variant=\"outline\"\n size=\"icon\"\n className={cn(\n sizeClasses,\n \"rounded-full shrink-0 relative\",\n \"border-border bg-background hover:bg-muted\",\n \"shadow-[var(--j3m-shadow-sm)]\",\n hasComments && \"border-primary/50\",\n className\n )}\n {...props}\n >\n {/* Main comment icon */}\n <MessageSquare className={cn(iconSize, hasComments && \"text-primary\")} />\n \n {/* Notification dot (only when has comments) - positioned at top-right, overlapping the icon */}\n {hasComments && (\n <span \n className={cn(\n \"absolute -top-0.5 -right-0.5\",\n \"h-2.5 w-2.5 rounded-full\",\n \"bg-primary\",\n \"border border-background\" // Subtle outline for contrast\n )}\n aria-hidden=\"true\"\n />\n )}\n \n <span className=\"sr-only\">\n {hasComments ? `${commentCount} comment${commentCount > 1 ? \"s\" : \"\"}` : \"Add comment\"}\n </span>\n </Button>\n )\n}\n\nexport { CommentButton }\n\n","import type { DeliveryStatus } from \"../../components/delivery-indicator\"\n\n/**\n * Represents a week in the planning matrix\n */\nexport interface Week {\n /** ISO week number (1-53) */\n weekNumber: number\n /** Year of the week */\n year: number\n /** Start date of the week */\n startDate: Date\n /** End date of the week */\n endDate: Date\n /** Formatted week label (e.g., \"W52\") */\n label: string\n /** Formatted date range (e.g., \"Dec 22 - Dec 28\") */\n dateRange: string\n /** Whether this is the current week */\n isCurrentWeek: boolean\n}\n\n/**\n * Unit type for production measurement\n */\nexport type ProductionUnit = \"quantity\" | \"kvm\" | \"ton\" | \"kg\" | \"m\" | \"pcs\"\n\n/**\n * Location type for a planning comment\n */\nexport type PlanningCommentLocationType = \"production\" | \"delivery\"\n\n/**\n * Location metadata for deep-linking to where a comment was created\n */\nexport interface PlanningCommentLocation {\n /** Type of location (production or delivery) */\n type: PlanningCommentLocationType\n /** Week key (YYYY-WXX format) */\n weekKey: string\n /** Supplier ID */\n supplierId: string\n /** Supplier name for display */\n supplierName?: string\n /** Delivery ID (if type is \"delivery\") */\n deliveryId?: string\n /** Delivery label for display (if type is \"delivery\") */\n deliveryLabel?: string\n}\n\n/**\n * A comment attached to production or delivery\n */\nexport interface PlanningComment {\n /** Unique identifier */\n id: string\n /** Author name */\n author: string\n /** Comment text */\n text: string\n /** Timestamp */\n createdAt: Date\n /** Whether the comment has been read */\n isRead?: boolean\n /** Location metadata for deep-linking */\n location?: PlanningCommentLocation\n}\n\n/**\n * Get display label for a comment location\n */\nexport function getCommentLocationLabel(location: PlanningCommentLocation): string {\n if (location.type === \"production\") {\n return location.supplierName ? `Production - ${location.supplierName}` : \"Production\"\n }\n if (location.type === \"delivery\") {\n return location.deliveryLabel || `Delivery ${location.deliveryId || \"\"}`\n }\n return \"Unknown\"\n}\n\n/**\n * Production data for a week\n */\nexport interface ProductionData {\n /** Current produced amount */\n produced: number\n /** Target/planned amount */\n target: number\n /** Unit of measurement */\n unit: ProductionUnit\n /** Production status */\n status: DeliveryStatus\n /** Progress percentage (0-100) - can be calculated from produced/target */\n progress?: number\n /** Comments about production */\n comments?: PlanningComment[]\n}\n\n/**\n * Shipment status for a delivery element\n */\nexport type ElementShipmentStatus = \n | \"sent\" // Sent on this delivery (confirmed via iPad)\n | \"not-sent\" // Not sent yet (missing from this delivery)\n | \"moved\" // Sent on another delivery (reassigned)\n | \"addon\" // Add-on from a previous delivery (carry-over)\n | \"planned\" // Originally planned for this delivery (default)\n\n/**\n * An element within a delivery\n */\nexport interface DeliveryElement {\n /** Unique identifier */\n id: string\n /** Element name/description */\n name: string\n /** Whether this element is produced / shipped (legacy, use shipmentStatus instead) */\n isProduced: boolean\n /** Shipment status for this element */\n shipmentStatus?: ElementShipmentStatus\n /** If moved/reassigned, reference to the actual delivery it was sent on */\n actualDeliveryId?: string\n /** If moved/reassigned, label of the actual delivery */\n actualDeliveryLabel?: string\n /** If addon, reference to the original planned delivery */\n originalDeliveryId?: string\n /** If addon, label of the original planned delivery */\n originalDeliveryLabel?: string\n /** Prefix code (e.g., \"VP\", \"YV\") */\n prefix?: string\n /** Element type (e.g., \"Wall panel\", \"Column\") */\n type?: string\n /** Weight in kg or tons */\n weight?: number\n /** Weight unit */\n weightUnit?: \"kg\" | \"ton\"\n /** Size in square meters */\n sizeSqm?: number\n /** Delivery identifier this element belongs to */\n deliveryId?: string\n /** Quantity */\n quantity?: number\n /** Unit */\n unit?: ProductionUnit\n}\n\n/**\n * Get derived shipment status for an element\n * Uses iPad flow data as source of truth if available\n */\nexport function getElementShipmentStatus(element: DeliveryElement, currentDeliveryId: string): ElementShipmentStatus {\n // If explicit status is set (from iPad flow), use it\n if (element.shipmentStatus) {\n return element.shipmentStatus\n }\n \n // Derive from legacy isProduced field\n if (element.isProduced) {\n // Check if it was sent on a different delivery\n if (element.actualDeliveryId && element.actualDeliveryId !== currentDeliveryId) {\n return \"moved\"\n }\n return \"sent\"\n }\n \n // Check if this is an addon (carried over from previous delivery)\n if (element.originalDeliveryId && element.originalDeliveryId !== currentDeliveryId) {\n return \"addon\"\n }\n \n // Default: not sent yet\n return \"not-sent\"\n}\n\n/**\n * Get label for element shipment status (non-critical tone)\n */\nexport function getShipmentStatusLabel(status: ElementShipmentStatus): string {\n switch (status) {\n case \"sent\": return \"Sent\"\n case \"not-sent\": return \"Missing\" // Neutral tone, not \"Not sent\"\n case \"moved\": return \"Moved to another delivery\"\n case \"addon\": return \"Add-on\"\n case \"planned\": return \"Planned\"\n default: return status\n }\n}\n\n/**\n * Represents a delivery within a week cell\n */\nexport interface Delivery {\n /** Unique identifier */\n id: string\n /** Delivery status */\n status: DeliveryStatus\n /** Optional label for tooltip */\n label?: string\n /** Delivery date within the week */\n date?: Date\n /** Destination/recipient */\n destination?: string\n /** Elements included in this delivery */\n elements?: DeliveryElement[]\n /** Number of elements at risk (not produced yet) */\n elementsAtRisk?: number\n /** Total elements count */\n totalElements?: number\n /** Delivery progress (0-100) */\n progress?: number\n /** Comments about this delivery */\n comments?: PlanningComment[]\n}\n\n/**\n * Data for a single week cell in the planning matrix\n */\nexport interface WeekCellData {\n /** Cell state type */\n type: \"data\" | \"empty\" | \"no-logistics\"\n /** Quantity value (e.g., units scheduled) - legacy */\n quantity?: number\n /** Progress percentage (0-100) - legacy */\n progress?: number\n /** Production data for this week */\n production?: ProductionData\n /** Array of deliveries for this week */\n deliveries?: Delivery[]\n /** Whether there's a warning/alert for this week */\n hasWarning?: boolean\n /** Warning message if applicable */\n warningMessage?: string\n /** Additional notes */\n notes?: string\n}\n\n/**\n * Badge type for supplier categorization\n */\nexport type SupplierBadgeType = \n | \"Welded\"\n | \"Painted\" \n | \"Glazed\"\n | \"Delivered\"\n | \"Cured\"\n | \"Assembled\"\n | \"Tested\"\n | \"Sealed\"\n | string // Allow custom badge types\n\n/**\n * Represents a supplier in the planning table\n */\nexport interface Supplier {\n /** Unique identifier */\n id: string\n /** Supplier name (e.g., \"Alpha Steel\") */\n name: string\n /** Badge/category type (e.g., \"Welded\", \"Painted\") */\n badgeType: SupplierBadgeType\n /** Scope description (e.g., \"Structure A\", \"Ext. Panels\") */\n scope: string\n /** Week data indexed by \"YYYY-WXX\" format (e.g., \"2025-W02\") */\n weeks: Record<string, WeekCellData>\n}\n\n/**\n * Configuration options for the planning table\n */\n/**\n * User role for role-based access control\n */\nexport type PlanningUserRole = \"supplier\" | \"j3m\"\n\nexport interface PlanningTableConfig {\n /** Number of weeks to display */\n weekCount?: number\n /** Start date for the week range */\n startDate?: Date\n /** Whether to highlight the current week */\n highlightCurrentWeek?: boolean\n /** Whether to show the toolbar */\n showToolbar?: boolean\n /** Whether to show pagination */\n showPagination?: boolean\n /** Rows per page options */\n pageSizeOptions?: number[]\n /** Default page size */\n defaultPageSize?: number\n /** Whether supplier column is sticky */\n stickySupplierColumn?: boolean\n /** Maximum height of the table (enables vertical scroll) */\n maxHeight?: string\n /** Callback when a cell is clicked */\n onCellClick?: (supplier: Supplier, week: Week, data: WeekCellData) => void\n /** Comments for all weeks (weekKey -> comments[]) - shown in X-axis header */\n weekComments?: Record<string, PlanningComment[]>\n /** Callback when a new comment is added via week header */\n onAddWeekComment?: (weekKey: string, text: string, location: PlanningCommentLocation) => void\n /** Callback when a comment is clicked (for navigation to location) */\n onCommentClick?: (comment: PlanningComment) => void\n /** User role for filtering supplier/prefix options in comments */\n userRole?: PlanningUserRole\n /** Current supplier ID (required when userRole is \"supplier\") - limits comment options to this supplier only */\n currentSupplierId?: string\n}\n\n/**\n * Props for the PlanningTable component\n */\nexport interface PlanningTableProps {\n /** Array of suppliers to display */\n suppliers: Supplier[]\n /** Configuration options */\n config?: PlanningTableConfig\n /** Additional class names */\n className?: string\n}\n\n/**\n * Get ISO week string from a date\n */\nexport function getWeekKey(date: Date): string {\n const year = date.getFullYear()\n const weekNumber = getISOWeek(date)\n return `${year}-W${weekNumber.toString().padStart(2, \"0\")}`\n}\n\n/**\n * Get ISO week number from a date\n */\nexport function getISOWeek(date: Date): number {\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))\n const dayNum = d.getUTCDay() || 7\n d.setUTCDate(d.getUTCDate() + 4 - dayNum)\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1))\n return Math.ceil((((d.getTime() - yearStart.getTime()) / 86400000) + 1) / 7)\n}\n\n/**\n * Generate an array of weeks starting from a given date\n */\nexport function generateWeeks(startDate: Date, count: number): Week[] {\n const weeks: Week[] = []\n const current = new Date(startDate)\n const today = new Date()\n const currentWeekKey = getWeekKey(today)\n \n // Align to start of week (Monday)\n const dayOfWeek = current.getDay()\n const daysToMonday = dayOfWeek === 0 ? -6 : 1 - dayOfWeek\n current.setDate(current.getDate() + daysToMonday)\n \n for (let i = 0; i < count; i++) {\n const weekStart = new Date(current)\n const weekEnd = new Date(current)\n weekEnd.setDate(weekEnd.getDate() + 6)\n \n const weekNumber = getISOWeek(weekStart)\n const year = weekStart.getFullYear()\n const weekKey = `${year}-W${weekNumber.toString().padStart(2, \"0\")}`\n \n weeks.push({\n weekNumber,\n year,\n startDate: weekStart,\n endDate: weekEnd,\n label: `W${weekNumber.toString().padStart(2, \"0\")}`,\n dateRange: formatDateRange(weekStart, weekEnd),\n isCurrentWeek: weekKey === currentWeekKey,\n })\n \n // Move to next week\n current.setDate(current.getDate() + 7)\n }\n \n return weeks\n}\n\n/**\n * Format a date range as \"Mon DD - Mon DD\"\n */\nfunction formatDateRange(start: Date, end: Date): string {\n const months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n const startMonth = months[start.getMonth()]\n const endMonth = months[end.getMonth()]\n \n if (startMonth === endMonth) {\n return `${startMonth} ${start.getDate()} - ${end.getDate()}`\n }\n return `${startMonth} ${start.getDate()} - ${endMonth} ${end.getDate()}`\n}\n\n/**\n * Format production unit for display\n */\nexport function formatProductionUnit(unit: ProductionUnit): string {\n const unitLabels: Record<ProductionUnit, string> = {\n quantity: \"pcs\",\n kvm: \"m²\",\n ton: \"ton\",\n kg: \"kg\",\n m: \"m\",\n pcs: \"pcs\",\n }\n return unitLabels[unit] || unit\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDown, ChevronRight, Send, Plus, Factory, Truck } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { Badge } from \"../../components/badge\"\nimport { Textarea } from \"../../components/textarea\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../components/popover\"\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../../components/collapsible\"\nimport { Separator } from \"../../components/separator\"\nimport { Label } from \"../../components/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/select\"\nimport { CommentButton } from \"../calibration-table/comment-button\"\nimport type { PlanningComment, PlanningCommentLocation, PlanningCommentLocationType, Supplier, Delivery } from \"./types\"\nimport { getCommentLocationLabel } from \"./types\"\n\n/** Location option for the comment form */\nexport interface CommentLocationOption {\n id: string\n label: string\n type: PlanningCommentLocationType\n supplierId: string\n supplierName: string\n deliveryId?: string\n deliveryLabel?: string\n}\n\nexport interface PlanningWeekCommentPopoverProps {\n /** Existing comments for this week */\n comments: PlanningComment[]\n /** Week label for display */\n weekLabel: string\n /** Week key (YYYY-WXX format) */\n weekKey: string\n /** Available location options (suppliers + their deliveries) */\n locationOptions: CommentLocationOption[]\n /** Callback when a new comment is added */\n onAddComment?: (text: string, location: PlanningCommentLocation) => void\n /** Callback when a comment is clicked (for navigation) */\n onCommentClick?: (comment: PlanningComment) => void\n /** Whether the popover is open */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n}\n\n/**\n * Get icon for comment location type\n */\nfunction LocationIcon({ type }: { type: PlanningCommentLocationType }) {\n if (type === \"production\") {\n return <Factory className=\"h-3 w-3\" />\n }\n return <Truck className=\"h-3 w-3\" />\n}\n\n/**\n * Popover for viewing and adding comments for a specific week in Planning Table X-axis.\n * \n * Features:\n * - Comments list with location Badge tags (clickable for navigation)\n * - \"Add comment\" Button that reveals input form with smooth animation\n * - Location selection (production or delivery) when adding\n * - Click-to-navigate to exact location where comment was created\n */\nfunction PlanningWeekCommentPopover({\n comments,\n weekLabel,\n weekKey,\n locationOptions,\n onAddComment,\n onCommentClick,\n open,\n onOpenChange,\n}: PlanningWeekCommentPopoverProps) {\n const [newCommentText, setNewCommentText] = React.useState(\"\")\n const [selectedLocationId, setSelectedLocationId] = React.useState<string>(\"\")\n const [viewCommentsOpen, setViewCommentsOpen] = React.useState(true)\n const [showAddForm, setShowAddForm] = React.useState(false)\n\n // Get selected location option\n const selectedLocation = React.useMemo(() => {\n return locationOptions.find(opt => opt.id === selectedLocationId)\n }, [locationOptions, selectedLocationId])\n\n const handleSubmit = () => {\n if (newCommentText.trim() && selectedLocation && onAddComment) {\n const location: PlanningCommentLocation = {\n type: selectedLocation.type,\n weekKey,\n supplierId: selectedLocation.supplierId,\n supplierName: selectedLocation.supplierName,\n deliveryId: selectedLocation.deliveryId,\n deliveryLabel: selectedLocation.deliveryLabel,\n }\n onAddComment(newCommentText.trim(), location)\n setNewCommentText(\"\")\n setSelectedLocationId(\"\")\n setShowAddForm(false)\n setViewCommentsOpen(true)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n if (e.key === \"Escape\") {\n setShowAddForm(false)\n setSelectedLocationId(\"\")\n setNewCommentText(\"\")\n }\n }\n\n const handleCommentClick = (comment: PlanningComment) => {\n if (comment.location && onCommentClick) {\n onCommentClick(comment)\n }\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n }).format(date)\n }\n\n // Track previous open state to detect close transition\n const prevOpenRef = React.useRef(open)\n \n // Reset add form when popover closes\n React.useEffect(() => {\n const wasOpen = prevOpenRef.current\n prevOpenRef.current = open\n \n if (wasOpen && !open) {\n setShowAddForm(false)\n setNewCommentText(\"\")\n setSelectedLocationId(\"\")\n }\n }, [open])\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <CommentButton size=\"sm\" commentCount={comments.length} />\n </PopoverTrigger>\n <PopoverContent \n className=\"w-80 p-0 z-[100]\" \n align=\"end\"\n sideOffset={8}\n collisionPadding={16}\n >\n {/* Header */}\n <div className=\"px-4 py-3 border-b border-border\">\n <h4 className=\"text-sm font-semibold\">Comments</h4>\n <p className=\"text-xs text-muted-foreground\">{weekLabel}</p>\n </div>\n\n <div className=\"p-2 space-y-2 h-fit overflow-y-auto\">\n {/* Comments list (collapsible) */}\n <Collapsible open={viewCommentsOpen} onOpenChange={setViewCommentsOpen}>\n <CollapsibleTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"w-full justify-between h-8 px-2\">\n <span className=\"text-xs font-medium\">\n Comments {comments.length > 0 && `(${comments.length})`}\n </span>\n <ChevronDown className={cn(\n \"h-4 w-4 transition-transform duration-200\",\n viewCommentsOpen && \"rotate-180\"\n )} />\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"space-y-2 pt-2\">\n {comments.length > 0 ? (\n comments.map((comment) => {\n const hasLocation = !!comment.location\n const locationLabel = comment.location \n ? getCommentLocationLabel(comment.location)\n : null\n \n return (\n <div\n key={comment.id}\n className={cn(\n \"rounded-lg bg-muted/50 p-3 space-y-2\",\n hasLocation && \"cursor-pointer hover:bg-muted/70 transition-colors\"\n )}\n onClick={() => handleCommentClick(comment)}\n role={hasLocation ? \"button\" : undefined}\n tabIndex={hasLocation ? 0 : undefined}\n onKeyDown={hasLocation ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n handleCommentClick(comment)\n }\n } : undefined}\n >\n {/* Location Badge (clickable indicator) */}\n {locationLabel && (\n <div className=\"flex items-center justify-between\">\n <Badge \n variant=\"outline\" \n className=\"text-[10px] px-2 py-0 h-5 font-medium bg-background gap-1\"\n >\n <LocationIcon type={comment.location!.type} />\n {locationLabel}\n </Badge>\n {hasLocation && (\n <ChevronRight className=\"h-3 w-3 text-muted-foreground\" />\n )}\n </div>\n )}\n \n {/* Author + date */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium\">{comment.author}</span>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatDate(comment.createdAt)}\n </span>\n </div>\n \n {/* Comment text */}\n <p className=\"text-sm text-foreground\">{comment.text}</p>\n </div>\n )\n })\n ) : (\n <p className=\"text-xs text-muted-foreground text-center py-2\">\n No comments yet\n </p>\n )}\n </CollapsibleContent>\n </Collapsible>\n\n <Separator className=\"my-2\" />\n\n {/* Add comment section */}\n {!showAddForm ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full justify-center gap-2 h-8\"\n onClick={() => setShowAddForm(true)}\n disabled={locationOptions.length === 0}\n >\n <Plus className=\"h-3.5 w-3.5\" />\n {locationOptions.length === 0 ? \"No suppliers available\" : \"Add comment\"}\n </Button>\n ) : (\n <div className={cn(\n \"space-y-3 p-3 rounded-lg border border-border bg-muted/30\",\n \"animate-in fade-in-0 slide-in-from-top-2 duration-200\"\n )}>\n {/* Supplier / Prefix Select - REQUIRED */}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"supplier-prefix-select\" className=\"text-xs font-medium\">\n Supplier / Prefix <span className=\"text-destructive\">*</span>\n </Label>\n <Select value={selectedLocationId} onValueChange={setSelectedLocationId}>\n <SelectTrigger id=\"supplier-prefix-select\" size=\"sm\" className=\"w-full\">\n <SelectValue placeholder=\"Select supplier / prefix...\" />\n </SelectTrigger>\n <SelectContent>\n {locationOptions.map((option) => (\n <SelectItem key={option.id} value={option.id}>\n <div className=\"flex items-center gap-2\">\n <LocationIcon type={option.type} />\n <span>{option.label}</span>\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n \n {/* Comment textarea */}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"comment-text\" className=\"text-xs font-medium\">\n Comment\n </Label>\n <Textarea\n id=\"comment-text\"\n placeholder=\"Type your comment...\"\n value={newCommentText}\n onChange={(e) => setNewCommentText(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"min-h-[80px] text-sm resize-none\"\n autoFocus\n />\n </div>\n \n {/* Actions */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-muted-foreground\">\n ⌘+Enter to send · Esc to cancel\n </span>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7\"\n onClick={() => {\n setShowAddForm(false)\n setNewCommentText(\"\")\n setSelectedLocationId(\"\")\n }}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n className=\"h-7 gap-1\"\n onClick={handleSubmit}\n disabled={!newCommentText.trim() || !selectedLocationId}\n >\n <Send className=\"h-3 w-3\" />\n Save\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\nexport { PlanningWeekCommentPopover }\n\n/**\n * Helper function to generate location options from suppliers and their deliveries\n */\nexport function generateLocationOptions(\n suppliers: Supplier[],\n weekKey: string\n): CommentLocationOption[] {\n const options: CommentLocationOption[] = []\n \n for (const supplier of suppliers) {\n const weekData = supplier.weeks[weekKey]\n \n // Add production option\n options.push({\n id: `${supplier.id}-production`,\n label: `${supplier.name} - Production`,\n type: \"production\",\n supplierId: supplier.id,\n supplierName: supplier.name,\n })\n \n // Add delivery options\n if (weekData?.deliveries) {\n for (const delivery of weekData.deliveries) {\n options.push({\n id: `${supplier.id}-delivery-${delivery.id}`,\n label: `${supplier.name} - ${delivery.label || `Delivery ${delivery.id}`}`,\n type: \"delivery\",\n supplierId: supplier.id,\n supplierName: supplier.name,\n deliveryId: delivery.id,\n deliveryLabel: delivery.label || `Delivery ${delivery.id}`,\n })\n }\n }\n }\n \n return options\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { PlanningWeekCommentPopover, type CommentLocationOption } from \"./planning-week-comment-popover\"\nimport type { Week, PlanningComment, PlanningCommentLocation } from \"./types\"\n\nexport interface WeekHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Week information */\n week: Week\n /** Week key (YYYY-WXX format) */\n weekKey?: string\n /** Comments for this week */\n comments?: PlanningComment[]\n /** Whether to show the comment button */\n showCommentButton?: boolean\n /** Available location options for comment form */\n locationOptions?: CommentLocationOption[]\n /** Callback when a new comment is added */\n onAddComment?: (text: string, location: PlanningCommentLocation) => void\n /** Callback when a comment is clicked (for navigation) */\n onCommentClick?: (comment: PlanningComment) => void\n}\n\n/**\n * Header component for week columns in the planning table.\n * Shows week number and date range with pulsating current week indicator.\n * \n * Styling matches Calibration table:\n * - Semibold week label with tracking-tight\n * - Current week: primary color text + pulsating dot (no full header tint)\n * - Date range: smaller, lower contrast, thinner weight (metadata)\n * - Comment popover in X-axis header (matching Calibration pattern)\n */\nfunction WeekHeader({\n className,\n week,\n weekKey,\n comments = [],\n showCommentButton = true,\n locationOptions = [],\n onAddComment,\n onCommentClick,\n ...props\n}: WeekHeaderProps) {\n return (\n <div\n data-slot=\"week-header\"\n data-current-week={week.isCurrentWeek}\n className={cn(\n \"flex items-center justify-between gap-2 min-w-[140px] text-left\",\n className\n )}\n {...props}\n >\n {/* Week info */}\n <div className=\"flex flex-col gap-0.5\">\n {/* Week label with optional pulsating current week indicator */}\n <div className=\"flex items-center gap-2\">\n <span className={cn(\n \"text-sm font-semibold tracking-tight\",\n week.isCurrentWeek ? \"text-primary\" : \"text-foreground\"\n )}>\n {week.label}\n </span>\n {week.isCurrentWeek && (\n <span className=\"relative flex h-2 w-2\">\n {/* Pulsating ring */}\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\n {/* Solid dot */}\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-primary\" />\n </span>\n )}\n </div>\n {/* Date range - smaller, lower contrast, thinner weight (metadata) */}\n <span className=\"text-[10px] font-normal text-muted-foreground/60 whitespace-nowrap\">\n {week.dateRange}\n </span>\n </div>\n\n {/* Comment popover with icon states (X-axis only, matching Calibration) */}\n {/* Always show if weekKey is available - allows adding comments even with 0 existing */}\n {showCommentButton && weekKey && (\n <PlanningWeekCommentPopover\n comments={comments}\n weekLabel={week.label}\n weekKey={weekKey}\n locationOptions={locationOptions}\n onAddComment={onAddComment}\n onCommentClick={onCommentClick}\n />\n )}\n </div>\n )\n}\n\nexport { WeekHeader }\n","\"use client\"\n\nimport type { ColumnDef } from \"@tanstack/react-table\"\nimport { ArrowUpDown } from \"lucide-react\"\n\nimport { Button } from \"../../components/button\"\nimport { SupplierCell } from \"./supplier-cell\"\nimport { WeekCell } from \"./week-cell\"\nimport { WeekHeader } from \"./week-header\"\nimport { generateLocationOptions, type CommentLocationOption } from \"./planning-week-comment-popover\"\nimport type { Supplier, Week, WeekCellData, PlanningTableConfig, PlanningCommentLocation, PlanningComment } from \"./types\"\nimport { getWeekKey } from \"./types\"\n\n/**\n * Custom header for the supplier column\n */\nfunction SupplierColumnHeader({ \n column \n}: { \n column: { toggleSorting: (desc?: boolean) => void; getIsSorted: () => false | \"asc\" | \"desc\" } \n}) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3 h-8 data-[state=open]:bg-accent\"\n onClick={() => column.toggleSorting(column.getIsSorted() === \"asc\")}\n >\n <span className=\"font-medium\">\n Supplier / Scope\n </span>\n <ArrowUpDown className=\"ml-2 h-4 w-4\" />\n </Button>\n )\n}\n\n/**\n * Generate the supplier column definition\n */\nexport function getSupplierColumn(): ColumnDef<Supplier> {\n return {\n id: \"supplier\",\n accessorKey: \"name\",\n header: ({ column }) => <SupplierColumnHeader column={column} />,\n cell: ({ row }) => <SupplierCell supplier={row.original} />,\n enableSorting: true,\n enableHiding: false,\n }\n}\n\n/**\n * Week header component wrapper that receives config and suppliers for comments\n */\nfunction WeekHeaderWithComments({\n week,\n weekKey,\n config,\n suppliers,\n}: {\n week: Week\n weekKey: string\n config?: PlanningTableConfig\n suppliers: Supplier[]\n}) {\n // Get comments for this week from config\n const weekComments = config?.weekComments?.[weekKey] ?? []\n \n // Generate location options from suppliers for this week\n // Apply role-based filtering if userRole is \"supplier\"\n let filteredSuppliers = suppliers\n if (config?.userRole === \"supplier\" && config?.currentSupplierId) {\n // Supplier role: only show their own supplier\n filteredSuppliers = suppliers.filter(s => s.id === config.currentSupplierId)\n }\n // J3M role (or no role specified): show all suppliers\n \n const locationOptions: CommentLocationOption[] = generateLocationOptions(filteredSuppliers, weekKey)\n\n // Handle add comment\n const handleAddComment = config?.onAddWeekComment \n ? (text: string, location: PlanningCommentLocation) => {\n config.onAddWeekComment?.(weekKey, text, location)\n }\n : undefined\n\n // Handle comment click (navigation)\n const handleCommentClick = config?.onCommentClick\n\n return (\n <WeekHeader\n week={week}\n weekKey={weekKey}\n comments={weekComments}\n showCommentButton={true}\n locationOptions={locationOptions}\n onAddComment={handleAddComment}\n onCommentClick={handleCommentClick}\n />\n )\n}\n\n/**\n * Generate column definitions for week columns\n */\nexport function generateWeekColumns(\n weeks: Week[],\n config?: PlanningTableConfig,\n suppliers?: Supplier[]\n): ColumnDef<Supplier>[] {\n return weeks.map((week) => {\n const weekKey = getWeekKey(week.startDate)\n \n return {\n id: weekKey,\n accessorFn: (supplier) => supplier.weeks[weekKey],\n header: () => (\n <WeekHeaderWithComments\n week={week}\n weekKey={weekKey}\n config={config}\n suppliers={suppliers ?? []}\n />\n ),\n cell: ({ row }) => {\n const supplier = row.original\n const data: WeekCellData = supplier.weeks[weekKey] || { type: \"empty\" }\n \n return (\n <WeekCell\n data={data}\n week={week}\n supplier={supplier}\n isCurrentWeek={week.isCurrentWeek}\n onCellClick={\n config?.onCellClick\n ? () => config.onCellClick?.(supplier, week, data)\n : undefined\n }\n />\n )\n },\n enableSorting: false,\n enableHiding: true,\n } satisfies ColumnDef<Supplier>\n })\n}\n\n/**\n * Generate all column definitions for the planning table\n */\nexport function generateColumns(\n weeks: Week[],\n config?: PlanningTableConfig,\n suppliers?: Supplier[]\n): ColumnDef<Supplier>[] {\n return [\n getSupplierColumn(),\n ...generateWeekColumns(weeks, config, suppliers),\n ]\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n} from \"@tanstack/react-table\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea, ScrollBar } from \"../../components/scroll-area\"\nimport { DataTablePagination } from \"../../components/data-table\"\nimport { PlanningTableToolbar } from \"./planning-table-toolbar\"\nimport { generateColumns } from \"./columns\"\nimport { generateWeeks, getWeekKey } from \"./types\"\nimport type { PlanningTableProps } from \"./types\"\n\n/**\n * PlanningTable - A weekly supplier planning matrix\n * \n * Displays suppliers as rows and weeks as columns, with each cell showing\n * delivery data, progress, and status indicators.\n */\nfunction PlanningTable({\n className,\n suppliers,\n config = {},\n}: PlanningTableProps) {\n const {\n weekCount = 12,\n startDate = new Date(),\n highlightCurrentWeek = true,\n showToolbar = true,\n showPagination = true,\n pageSizeOptions = [10, 20, 30, 50],\n defaultPageSize = 10,\n stickySupplierColumn = true,\n maxHeight = \"600px\",\n } = config\n\n // Generate weeks based on config\n const weeks = React.useMemo(\n () => generateWeeks(startDate, weekCount),\n [startDate, weekCount]\n )\n\n // Find the current week key\n const currentWeekKey = React.useMemo(() => {\n const currentWeek = weeks.find(w => w.isCurrentWeek)\n return currentWeek ? getWeekKey(currentWeek.startDate) : null\n }, [weeks])\n\n // Generate columns with week data (pass suppliers for comment location options)\n const columns = React.useMemo(\n () => generateColumns(weeks, config, suppliers),\n [weeks, config, suppliers]\n )\n\n // Table state\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = React.useState({})\n\n // Create table instance\n const table = useReactTable({\n data: suppliers,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n },\n initialState: {\n pagination: {\n pageSize: defaultPageSize,\n },\n },\n })\n\n return (\n <div\n data-slot=\"planning-table\"\n className={cn(\"flex flex-col gap-4\", className)}\n >\n {/* Toolbar */}\n {showToolbar && <PlanningTableToolbar table={table} />}\n\n {/* Table Container - matches Calibration: rounded-xl, overflow-hidden for clipping */}\n <div className=\"rounded-xl border bg-background shadow-sm overflow-hidden\">\n {/* Quantum ScrollArea for both axes */}\n <ScrollArea \n className=\"w-full\"\n style={{ maxHeight }}\n >\n <table className=\"w-full border-collapse\">\n {/* Header row - GREY background (sidebar token) like Calibration */}\n <thead className=\"sticky top-0 z-20\">\n {table.getHeaderGroups().map((headerGroup) => (\n <tr \n key={headerGroup.id} \n >\n {headerGroup.headers.map((header, index) => {\n const isCurrentWeekColumn = header.id === currentWeekKey\n return (\n <th\n key={header.id}\n className={cn(\n \"h-14 px-3 text-left align-middle font-semibold text-xs text-muted-foreground uppercase tracking-wide\",\n \"border-r border-b border-border last:border-r-0 bg-sidebar\",\n // First column: sticky with right-edge shadow (Quantum token)\n index === 0 && stickySupplierColumn && [\n \"sticky left-0 z-30 min-w-[200px]\",\n \"shadow-[var(--j3m-shadow-sticky-edge)]\",\n ],\n index > 0 && \"min-w-[140px]\",\n // Current week: only highlight text/dot, not full background\n isCurrentWeekColumn && highlightCurrentWeek && \"text-primary\"\n )}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n {/* Body rows - white cell area */}\n <tbody className=\"bg-background\">\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <tr\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n className=\"border-b border-border last:border-b-0\"\n >\n {row.getVisibleCells().map((cell, index) => {\n return (\n <td\n key={cell.id}\n className={cn(\n \"p-0 align-top border-r border-border last:border-r-0 bg-background\",\n // First column: sticky WHITE with right-edge shadow (Quantum token)\n index === 0 && stickySupplierColumn && [\n \"sticky left-0 z-10 min-w-[200px]\",\n \"shadow-[var(--j3m-shadow-sticky-edge)]\",\n ],\n index > 0 && \"min-w-[140px]\"\n )}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </td>\n )\n })}\n </tr>\n ))\n ) : (\n <tr>\n <td\n colSpan={columns.length}\n className=\"h-24 text-center text-muted-foreground bg-background\"\n >\n No suppliers found.\n </td>\n </tr>\n )}\n </tbody>\n </table>\n <ScrollBar orientation=\"horizontal\" />\n <ScrollBar orientation=\"vertical\" />\n </ScrollArea>\n </div>\n\n {/* Pagination */}\n {showPagination && (\n <DataTablePagination\n table={table}\n showRowSelection={false}\n pageSizeOptions={pageSizeOptions}\n />\n )}\n </div>\n )\n}\n\nexport { PlanningTable }\nexport type { PlanningTableProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { \n Factory, \n Truck, \n Calendar, \n AlertTriangle, \n ChevronLeft,\n ChevronRight,\n Package, \n CheckCircle2, \n XCircle,\n ArrowRight,\n Plus,\n MessageSquare,\n Send,\n Check,\n ChevronDown,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../../components/dialog\"\nimport { Badge } from \"../../components/badge\"\nimport { Input } from \"../../components/input\"\nimport { Label } from \"../../components/label\"\nimport { Button } from \"../../components/button\"\nimport { Textarea } from \"../../components/textarea\"\nimport { ScrollArea } from \"../../components/scroll-area\"\nimport { Separator } from \"../../components/separator\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../components/popover\"\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../../components/collapsible\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../../components/table\"\nimport { CircularProgress } from \"../../components/circular-progress\"\nimport type { DeliveryStatus } from \"../../components/delivery-indicator\"\nimport type { \n Supplier, \n Week, \n WeekCellData, \n Delivery, \n PlanningComment, \n DeliveryElement,\n ElementShipmentStatus,\n} from \"./types\"\nimport { formatProductionUnit, getElementShipmentStatus, getShipmentStatusLabel } from \"./types\"\n\n// Reuse CommentButton from calibration-table for consistency\nimport { CommentButton } from \"../calibration-table/comment-button\"\n\nexport interface WeekDetailDialogProps {\n /** Whether the dialog is open */\n open: boolean\n /** Callback when dialog open state changes */\n onOpenChange: (open: boolean) => void\n /** Supplier data */\n supplier: Supplier | null\n /** Week data */\n week: Week | null\n /** Week cell data */\n data: WeekCellData | null\n /** Callback when progress is updated */\n onProgressUpdate?: (supplierId: string, weekKey: string, newProgress: number, newProduced?: number) => void\n /** Callback when a production comment is added */\n onAddProductionComment?: (supplierId: string, weekKey: string, text: string) => void\n /** Callback when a delivery comment is added */\n onAddDeliveryComment?: (supplierId: string, weekKey: string, deliveryId: string, text: string) => void\n}\n\n/**\n * Get badge variant based on delivery status\n */\nfunction getStatusBadgeVariant(status: DeliveryStatus): \"default\" | \"secondary\" | \"destructive\" | \"outline\" {\n switch (status) {\n case \"on-time\": return \"outline\"\n case \"delayed\": return \"secondary\"\n case \"critical\": return \"destructive\"\n default: return \"outline\"\n }\n}\n\n/**\n * Get custom badge classes for status colors\n */\nfunction getStatusBadgeClasses(status: DeliveryStatus): string {\n switch (status) {\n case \"on-time\": return \"border-green-500 text-green-600 bg-green-50 dark:bg-green-950/50\"\n case \"delayed\": return \"border-amber-500 text-amber-600 bg-amber-50 dark:bg-amber-950/50\"\n case \"critical\": return \"\"\n default: return \"\"\n }\n}\n\n/**\n * Get status label\n */\nfunction getStatusLabel(status: DeliveryStatus): string {\n switch (status) {\n case \"on-time\": return \"On Track\"\n case \"delayed\": return \"At Risk\"\n case \"critical\": return \"Critical\"\n case \"pending\": return \"Pending\"\n default: return status\n }\n}\n\n/**\n * Get circular progress variant based on status\n */\nfunction getProgressVariant(status: DeliveryStatus): \"default\" | \"success\" | \"warning\" | \"destructive\" {\n switch (status) {\n case \"on-time\": return \"success\"\n case \"delayed\": return \"warning\"\n case \"critical\": return \"destructive\"\n default: return \"default\"\n }\n}\n\n/**\n * Get badge classes for element shipment status (non-critical styling)\n * \"Missing\" uses neutral/muted styling, not warning/error\n */\nfunction getShipmentStatusBadgeClasses(status: ElementShipmentStatus): string {\n switch (status) {\n case \"sent\": \n return \"border-green-500 text-green-600 bg-green-50 dark:bg-green-950/50\"\n case \"not-sent\": \n // Neutral/muted styling - not warning/error\n return \"border-muted-foreground/50 text-muted-foreground bg-muted/50\"\n case \"moved\": \n return \"border-blue-500 text-blue-600 bg-blue-50 dark:bg-blue-950/50\"\n case \"addon\": \n return \"border-purple-500 text-purple-600 bg-purple-50 dark:bg-purple-950/50\"\n case \"planned\":\n default:\n return \"border-muted-foreground/50 text-muted-foreground\"\n }\n}\n\n/**\n * Get row background for element shipment status (non-critical styling)\n * \"Missing\" uses neutral background, not warning\n */\nfunction getShipmentStatusRowBg(status: ElementShipmentStatus): string {\n switch (status) {\n case \"sent\": \n return \"bg-green-50/30 dark:bg-green-950/10\"\n case \"not-sent\": \n // Neutral background - not warning/amber\n return \"bg-muted/30\"\n case \"moved\": \n return \"bg-blue-50/30 dark:bg-blue-950/10\"\n case \"addon\": \n return \"bg-purple-50/30 dark:bg-purple-950/10\"\n default:\n return \"\"\n }\n}\n\n/**\n * Comment popover for deliveries (matching Calibration pattern)\n */\nfunction DeliveryCommentPopover({ \n comments = [], \n onAddComment,\n deliveryLabel,\n}: { \n comments?: PlanningComment[]\n onAddComment?: (text: string) => void\n deliveryLabel: string\n}) {\n const [open, setOpen] = React.useState(false)\n const [newCommentText, setNewCommentText] = React.useState(\"\")\n const [viewCommentsOpen, setViewCommentsOpen] = React.useState(true)\n const [showAddForm, setShowAddForm] = React.useState(false)\n\n const handleSubmit = () => {\n if (newCommentText.trim() && onAddComment) {\n onAddComment(newCommentText.trim())\n setNewCommentText(\"\")\n setShowAddForm(false)\n setViewCommentsOpen(true)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n if (e.key === \"Escape\") {\n setShowAddForm(false)\n setNewCommentText(\"\")\n }\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n }).format(date)\n }\n\n // Reset form when popover closes\n const prevOpenRef = React.useRef(open)\n React.useEffect(() => {\n const wasOpen = prevOpenRef.current\n prevOpenRef.current = open\n if (wasOpen && !open) {\n setShowAddForm(false)\n setNewCommentText(\"\")\n }\n }, [open])\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <CommentButton size=\"sm\" commentCount={comments.length} />\n </PopoverTrigger>\n <PopoverContent \n className=\"w-80 p-0 z-[100]\" \n align=\"end\"\n sideOffset={8}\n collisionPadding={16}\n >\n {/* Header */}\n <div className=\"px-4 py-3 border-b border-border\">\n <h4 className=\"text-sm font-semibold\">Comments</h4>\n <p className=\"text-xs text-muted-foreground\">{deliveryLabel}</p>\n </div>\n\n <div className=\"p-2 space-y-2 h-fit overflow-y-auto\">\n {/* Comments list (collapsible) */}\n <Collapsible open={viewCommentsOpen} onOpenChange={setViewCommentsOpen}>\n <CollapsibleTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"w-full justify-between h-8 px-2\">\n <span className=\"text-xs font-medium\">\n Comments {comments.length > 0 && `(${comments.length})`}\n </span>\n <ChevronDown className={cn(\n \"h-4 w-4 transition-transform duration-200\",\n viewCommentsOpen && \"rotate-180\"\n )} />\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"space-y-2 pt-2\">\n {comments.length > 0 ? (\n comments.map((comment) => (\n <div key={comment.id} className=\"rounded-lg bg-muted/50 p-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium\">{comment.author}</span>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatDate(comment.createdAt)}\n </span>\n </div>\n <p className=\"text-sm text-foreground\">{comment.text}</p>\n </div>\n ))\n ) : (\n <p className=\"text-xs text-muted-foreground text-center py-2\">\n No comments yet\n </p>\n )}\n </CollapsibleContent>\n </Collapsible>\n\n <Separator className=\"my-2\" />\n\n {/* Add comment section */}\n {!showAddForm ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full justify-center gap-2 h-8\"\n onClick={() => setShowAddForm(true)}\n >\n <Plus className=\"h-3.5 w-3.5\" />\n Add comment\n </Button>\n ) : (\n <div className={cn(\n \"space-y-3 p-3 rounded-lg border border-border bg-muted/30\",\n \"animate-in fade-in-0 slide-in-from-top-2 duration-200\"\n )}>\n <Textarea\n placeholder=\"Type your comment...\"\n value={newCommentText}\n onChange={(e) => setNewCommentText(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"min-h-[80px] text-sm resize-none\"\n autoFocus\n />\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-muted-foreground\">\n ⌘+Enter to send · Esc to cancel\n </span>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7\"\n onClick={() => {\n setShowAddForm(false)\n setNewCommentText(\"\")\n }}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n className=\"h-7 gap-1\"\n onClick={handleSubmit}\n disabled={!newCommentText.trim()}\n >\n <Send className=\"h-3 w-3\" />\n Save\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\n/**\n * Production comment section (matching Calibration pattern)\n */\nfunction ProductionCommentSection({ \n comments = [], \n onAddComment,\n}: { \n comments?: PlanningComment[]\n onAddComment?: (text: string) => void\n}) {\n const [showAddForm, setShowAddForm] = React.useState(false)\n const [newComment, setNewComment] = React.useState(\"\")\n\n const handleSubmit = () => {\n if (newComment.trim() && onAddComment) {\n onAddComment(newComment.trim())\n setNewComment(\"\")\n setShowAddForm(false)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n if (e.key === \"Escape\") {\n setShowAddForm(false)\n setNewComment(\"\")\n }\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n }).format(date)\n }\n\n return (\n <div className=\"space-y-2\">\n {/* Existing comments */}\n {comments.length > 0 && (\n <div className=\"space-y-2\">\n {comments.map((comment) => (\n <div key={comment.id} className=\"rounded-lg bg-muted/50 p-2.5 space-y-1\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium\">{comment.author}</span>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatDate(comment.createdAt)}\n </span>\n </div>\n <p className=\"text-sm text-foreground\">{comment.text}</p>\n </div>\n ))}\n </div>\n )}\n\n {/* Add comment */}\n {!showAddForm ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start gap-2 h-8 text-muted-foreground\"\n onClick={() => setShowAddForm(true)}\n >\n <MessageSquare className=\"h-3.5 w-3.5\" />\n {comments.length > 0 ? \"Add another comment\" : \"Add a comment...\"}\n </Button>\n ) : (\n <div className=\"space-y-2 animate-in fade-in-0 slide-in-from-top-2 duration-200\">\n <Textarea\n placeholder=\"Add a comment...\"\n value={newComment}\n onChange={(e) => setNewComment(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"min-h-[60px] text-sm resize-none\"\n autoFocus\n />\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-muted-foreground\">⌘+Enter to send</span>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7\"\n onClick={() => {\n setShowAddForm(false)\n setNewComment(\"\")\n }}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n className=\"h-7 gap-1\"\n onClick={handleSubmit}\n disabled={!newComment.trim()}\n >\n <Send className=\"h-3 w-3\" />\n Save\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Delivery list item for View A (main view)\n * Using truck icon (no progress bar) as per Quantum pattern\n */\nfunction DeliveryListItem({ \n delivery, \n index,\n onClick,\n}: { \n delivery: Delivery\n index: number\n onClick: () => void\n}) {\n const hasComments = (delivery.comments?.length ?? 0) > 0\n \n return (\n <button\n onClick={onClick}\n className={cn(\n \"w-full flex items-center justify-between p-3 rounded-lg\",\n \"bg-card border hover:bg-muted/50 transition-colors cursor-pointer\",\n \"text-left\"\n )}\n >\n <div className=\"flex items-center gap-3\">\n {/* Truck icon (no progress bar) - colored by status */}\n <div className={cn(\n \"flex items-center justify-center h-8 w-8 rounded-lg\",\n delivery.status === \"on-time\" && \"bg-green-100 dark:bg-green-950/50\",\n delivery.status === \"delayed\" && \"bg-amber-100 dark:bg-amber-950/50\",\n delivery.status === \"critical\" && \"bg-red-100 dark:bg-red-950/50\",\n )}>\n <Truck className={cn(\n \"h-4 w-4\",\n delivery.status === \"on-time\" && \"text-green-600 dark:text-green-400\",\n delivery.status === \"delayed\" && \"text-amber-600 dark:text-amber-400\",\n delivery.status === \"critical\" && \"text-red-600 dark:text-red-400\",\n )} />\n </div>\n \n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">\n {delivery.label || `Delivery ${index + 1}`}\n </span>\n {/* Comment indicator dot (matching Calibration) */}\n {hasComments && (\n <div className=\"relative\">\n <MessageSquare className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"absolute -top-0.5 -right-0.5 h-1.5 w-1.5 rounded-full bg-primary\" />\n </div>\n )}\n </div>\n {delivery.destination && (\n <div className=\"text-xs text-muted-foreground\">\n → {delivery.destination}\n </div>\n )}\n </div>\n </div>\n \n <div className=\"flex items-center gap-2\">\n <Badge \n variant={getStatusBadgeVariant(delivery.status)} \n className={cn(\"text-xs\", getStatusBadgeClasses(delivery.status))}\n >\n {getStatusLabel(delivery.status)}\n </Badge>\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n </button>\n )\n}\n\n/**\n * Delivery Details View (View B) with Quantum DataTable\n * Shows elements with shipment status: Sent, Not sent, Moved, Add-on\n */\nfunction DeliveryDetailsView({\n delivery,\n week,\n onBack,\n onAddComment,\n}: {\n delivery: Delivery\n week: Week\n onBack: () => void\n onAddComment?: (text: string) => void\n}) {\n const elements = delivery.elements ?? []\n \n // Categorize elements by shipment status\n const categorizedElements = React.useMemo(() => {\n const sent: DeliveryElement[] = []\n const notSent: DeliveryElement[] = []\n const moved: DeliveryElement[] = []\n const addons: DeliveryElement[] = []\n \n elements.forEach(element => {\n const status = getElementShipmentStatus(element, delivery.id)\n switch (status) {\n case \"sent\":\n sent.push(element)\n break\n case \"not-sent\":\n notSent.push(element)\n break\n case \"moved\":\n moved.push(element)\n break\n case \"addon\":\n addons.push(element)\n break\n default:\n notSent.push(element)\n }\n })\n \n return { sent, notSent, moved, addons }\n }, [elements, delivery.id])\n \n const totalCount = elements.length\n const sentCount = categorizedElements.sent.length\n const hasComments = (delivery.comments?.length ?? 0) > 0\n\n return (\n <div className=\"flex flex-col h-full animate-in slide-in-from-right-4 duration-200\">\n {/* Back button header */}\n <div className=\"flex items-center gap-2 px-6 py-3 border-b\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"gap-1 -ml-2\"\n onClick={onBack}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n Back\n </Button>\n </div>\n\n {/* Delivery header */}\n <div className=\"px-6 py-4 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold\">\n {delivery.label || \"Delivery Details\"}\n </h3>\n <div className=\"flex items-center gap-2\">\n {/* Comment button (matching Calibration) */}\n <DeliveryCommentPopover\n comments={delivery.comments}\n onAddComment={onAddComment}\n deliveryLabel={delivery.label || \"Delivery\"}\n />\n <Badge \n variant={getStatusBadgeVariant(delivery.status)} \n className={cn(\"text-xs\", getStatusBadgeClasses(delivery.status))}\n >\n {getStatusLabel(delivery.status)}\n </Badge>\n </div>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-1.5\">\n <Calendar className=\"h-3.5 w-3.5\" />\n <span>{week.label} • {week.dateRange}</span>\n </div>\n {delivery.destination && (\n <div className=\"flex items-center gap-1.5\">\n <Truck className=\"h-3.5 w-3.5\" />\n <span>→ {delivery.destination}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Scrollable content */}\n <ScrollArea className=\"flex-1 px-6 pb-6\">\n <div className=\"space-y-6\">\n {/* Shipment progress summary */}\n {totalCount > 0 && (\n <div className=\"rounded-lg bg-muted/50 p-4\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-sm font-medium\">Shipment Progress</span>\n <span className=\"text-sm font-semibold tabular-nums\">\n Shipped {sentCount} / {totalCount}\n </span>\n </div>\n <div className=\"h-2 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden\">\n <div \n className={cn(\n \"h-full rounded-full transition-all\",\n sentCount === totalCount ? \"bg-green-500\" : \"bg-primary\"\n )}\n style={{ width: `${totalCount > 0 ? (sentCount / totalCount) * 100 : 0}%` }}\n />\n </div>\n {/* Status breakdown */}\n <div className=\"flex items-center gap-3 mt-3 flex-wrap\">\n {categorizedElements.sent.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs\">\n <CheckCircle2 className=\"h-3 w-3 text-green-600\" />\n <span className=\"text-green-700 dark:text-green-300\">\n {categorizedElements.sent.length} Sent\n </span>\n </div>\n )}\n {categorizedElements.notSent.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs\">\n <XCircle className=\"h-3 w-3 text-amber-600\" />\n <span className=\"text-amber-700 dark:text-amber-300\">\n {categorizedElements.notSent.length} Not sent\n </span>\n </div>\n )}\n {categorizedElements.moved.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs\">\n <ArrowRight className=\"h-3 w-3 text-blue-600\" />\n <span className=\"text-blue-700 dark:text-blue-300\">\n {categorizedElements.moved.length} Moved\n </span>\n </div>\n )}\n {categorizedElements.addons.length > 0 && (\n <div className=\"flex items-center gap-1.5 text-xs\">\n <Plus className=\"h-3 w-3 text-purple-600\" />\n <span className=\"text-purple-700 dark:text-purple-300\">\n {categorizedElements.addons.length} Add-on\n </span>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Quantum DataTable - read-only */}\n {elements.length > 0 && (\n <div className=\"space-y-3\">\n <span className=\"text-sm font-medium\">Elements</span>\n <div className=\"rounded-lg border overflow-hidden\">\n <Table>\n <TableHeader>\n <TableRow className=\"bg-sidebar hover:bg-sidebar\">\n <TableHead className=\"font-semibold\">Prefix</TableHead>\n <TableHead className=\"font-semibold\">Type</TableHead>\n <TableHead className=\"font-semibold text-right\">Weight</TableHead>\n <TableHead className=\"font-semibold text-right\">Size (m²)</TableHead>\n <TableHead className=\"font-semibold text-center\">Status</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {elements.map((element) => {\n const shipmentStatus = getElementShipmentStatus(element, delivery.id)\n const statusLabel = getShipmentStatusLabel(shipmentStatus)\n \n return (\n <TableRow \n key={element.id}\n className={getShipmentStatusRowBg(shipmentStatus)}\n >\n <TableCell className=\"font-medium\">\n {element.prefix || \"—\"}\n </TableCell>\n <TableCell>\n {element.type || element.name || \"—\"}\n </TableCell>\n <TableCell className=\"text-right tabular-nums\">\n {element.weight ? (\n <span>\n {element.weight} {element.weightUnit || \"kg\"}\n </span>\n ) : (\n \"—\"\n )}\n </TableCell>\n <TableCell className=\"text-right tabular-nums\">\n {element.sizeSqm ? (\n <span>{element.sizeSqm}</span>\n ) : (\n \"—\"\n )}\n </TableCell>\n <TableCell>\n <div className=\"flex flex-col items-center gap-1\">\n <Badge \n variant=\"outline\" \n className={cn(\n \"text-[10px] h-5\",\n getShipmentStatusBadgeClasses(shipmentStatus)\n )}\n >\n {statusLabel}\n </Badge>\n {/* Show reference for moved/addon elements */}\n {shipmentStatus === \"moved\" && element.actualDeliveryLabel && (\n <span className=\"text-[9px] text-blue-600 dark:text-blue-400\">\n → {element.actualDeliveryLabel}\n </span>\n )}\n {shipmentStatus === \"addon\" && element.originalDeliveryLabel && (\n <span className=\"text-[9px] text-purple-600 dark:text-purple-400\">\n from {element.originalDeliveryLabel}\n </span>\n )}\n </div>\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </div>\n </div>\n )}\n\n {/* No elements message */}\n {elements.length === 0 && (\n <div className=\"text-center py-8 text-muted-foreground\">\n <Package className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p className=\"text-sm\">No elements in this delivery</p>\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n )\n}\n\n/**\n * Main View (View A) - Production + Deliveries list\n */\nfunction MainView({\n supplier,\n week,\n data,\n producedValue,\n hasChanges,\n onProducedChange,\n onSave,\n onSelectDelivery,\n onAddProductionComment,\n}: {\n supplier: Supplier\n week: Week\n data: WeekCellData\n producedValue: string\n hasChanges: boolean\n onProducedChange: (e: React.ChangeEvent<HTMLInputElement>) => void\n onSave: () => void\n onSelectDelivery: (delivery: Delivery) => void\n onAddProductionComment?: (text: string) => void\n}) {\n const production = data?.production\n const productionProgress = production \n ? Math.min(100, Math.round((production.produced / production.target) * 100))\n : data?.progress ?? 0\n const productionStatus = production?.status ?? \"on-time\"\n const isComplete = productionProgress >= 100\n const hasProductionComments = (production?.comments?.length ?? 0) > 0\n\n return (\n <div className=\"animate-in fade-in-0 duration-200\">\n {/* Header */}\n <DialogHeader className=\"px-6 pt-6 pb-4\">\n <DialogTitle className=\"flex items-center gap-2\">\n {supplier.name}\n <Badge variant=\"secondary\" className=\"text-xs font-normal\">\n {supplier.badgeType}\n </Badge>\n </DialogTitle>\n <DialogDescription className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4\" />\n {week.label} • {week.dateRange}\n </DialogDescription>\n </DialogHeader>\n\n {/* Scrollable content */}\n <ScrollArea className=\"flex-1 px-6 pb-6\">\n <div className=\"space-y-8\">\n {/* ============ PRODUCTION SECTION ============ */}\n {data.type !== \"empty\" && (\n <section className=\"space-y-4\">\n <div className=\"flex items-center gap-2\">\n <Factory className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-semibold\">Production</span>\n <Badge \n variant={getStatusBadgeVariant(productionStatus)} \n className={cn(\"text-xs ml-auto\", getStatusBadgeClasses(productionStatus))}\n >\n {getStatusLabel(productionStatus)}\n </Badge>\n </div>\n\n {/* Circular progress visualization */}\n <div className=\"flex items-center gap-6\">\n <CircularProgress \n value={productionProgress}\n size={100}\n strokeWidth={10}\n variant={getProgressVariant(productionStatus)}\n showCheckmark={isComplete}\n >\n {isComplete ? (\n <div className=\"flex flex-col items-center\">\n <Check className=\"h-6 w-6 text-green-600\" />\n <span className=\"text-xs font-semibold text-green-600\">\n {production?.produced ?? 0} {production ? formatProductionUnit(production.unit) : \"\"}\n </span>\n </div>\n ) : (\n <div className=\"flex flex-col items-center\">\n <span className=\"text-lg font-bold tabular-nums\">\n {production?.produced ?? 0}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n / {production?.target ?? 0} {production ? formatProductionUnit(production.unit) : \"\"}\n </span>\n </div>\n )}\n </CircularProgress>\n\n {/* Production input */}\n {production && (\n <div className=\"flex-1 space-y-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"produced\" className=\"text-xs\">\n Produced Amount ({formatProductionUnit(production.unit)})\n </Label>\n <div className=\"flex items-center gap-2\">\n <Input\n id=\"produced\"\n type=\"number\"\n min=\"0\"\n max={production.target * 2}\n value={producedValue}\n onChange={onProducedChange}\n className=\"h-9\"\n />\n </div>\n <p className=\"text-[10px] text-muted-foreground\">\n Target: {production.target} {formatProductionUnit(production.unit)}\n </p>\n </div>\n\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={!hasChanges}\n onClick={onSave}\n >\n {hasChanges ? \"Save Progress\" : \"No Changes\"}\n </Button>\n </div>\n )}\n </div>\n\n {/* Production comments (matching Calibration pattern) */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">Comments</span>\n {hasProductionComments && (\n <span className=\"text-[10px] text-muted-foreground\">\n ({production?.comments?.length})\n </span>\n )}\n </div>\n <ProductionCommentSection \n comments={production?.comments}\n onAddComment={onAddProductionComment}\n />\n </div>\n </section>\n )}\n\n {/* ============ DELIVERIES SECTION ============ */}\n {data.deliveries && data.deliveries.length > 0 && (\n <section className=\"space-y-4\">\n <div className=\"flex items-center gap-2\">\n <Truck className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-semibold\">Deliveries</span>\n <span className=\"text-xs text-muted-foreground ml-auto\">\n {data.deliveries.length} scheduled\n </span>\n </div>\n \n <div className=\"space-y-2\">\n {data.deliveries.map((delivery, index) => (\n <DeliveryListItem \n key={delivery.id} \n delivery={delivery} \n index={index}\n onClick={() => onSelectDelivery(delivery)}\n />\n ))}\n </div>\n </section>\n )}\n\n {/* No logistics state */}\n {data.type === \"no-logistics\" && (\n <div className=\"flex items-center gap-2 text-muted-foreground p-3 bg-muted/50 rounded-lg\">\n <Truck className=\"h-4 w-4\" />\n <span className=\"text-sm\">No logistics scheduled for this week</span>\n </div>\n )}\n\n {/* Warning */}\n {data.hasWarning && data.warningMessage && (\n <div className=\"flex items-start gap-2 rounded-lg bg-amber-50 dark:bg-amber-950/50 p-3 text-amber-700 dark:text-amber-300\">\n <AlertTriangle className=\"h-4 w-4 mt-0.5 shrink-0\" />\n <div className=\"text-sm\">{data.warningMessage}</div>\n </div>\n )}\n\n {/* Notes */}\n {data.notes && (\n <div className=\"space-y-1.5\">\n <span className=\"text-xs text-muted-foreground\">Notes</span>\n <p className=\"text-sm\">{data.notes}</p>\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n )\n}\n\n/**\n * Dialog component for displaying detailed week information.\n * Uses stack navigation pattern for delivery drilldown.\n * \n * View A: Main (Production + Deliveries list)\n * View B: Delivery Details (Quantum DataTable, read-only)\n */\nfunction WeekDetailDialog({\n open,\n onOpenChange,\n supplier,\n week,\n data,\n onProgressUpdate,\n onAddProductionComment,\n onAddDeliveryComment,\n}: WeekDetailDialogProps) {\n const production = data?.production\n const initialProduced = production?.produced ?? 0\n \n const [producedValue, setProducedValue] = React.useState(initialProduced.toString())\n const [hasChanges, setHasChanges] = React.useState(false)\n \n // Stack navigation state\n const [selectedDelivery, setSelectedDelivery] = React.useState<Delivery | null>(null)\n\n // Reset values when data changes or dialog closes\n React.useEffect(() => {\n const newProduced = data?.production?.produced ?? 0\n setProducedValue(newProduced.toString())\n setHasChanges(false)\n }, [data])\n\n // Reset navigation when dialog closes\n React.useEffect(() => {\n if (!open) {\n setSelectedDelivery(null)\n }\n }, [open])\n\n const handleProducedChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n setProducedValue(value)\n setHasChanges(true)\n }\n\n const handleSave = () => {\n if (!supplier || !week || !onProgressUpdate) return\n \n const newProduced = parseFloat(producedValue) || 0\n const target = production?.target || 100\n const newProgress = Math.min(100, Math.round((newProduced / target) * 100))\n const weekKey = `${week.year}-W${week.weekNumber.toString().padStart(2, \"0\")}`\n \n onProgressUpdate(supplier.id, weekKey, newProgress, newProduced)\n setHasChanges(false)\n }\n\n if (!supplier || !week || !data) {\n return null\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-lg max-h-[85vh] p-0 gap-0 overflow-hidden\">\n {/* Stack navigation: View A (main) or View B (delivery details) */}\n {selectedDelivery ? (\n <DeliveryDetailsView\n delivery={selectedDelivery}\n week={week}\n onBack={() => setSelectedDelivery(null)}\n onAddComment={onAddDeliveryComment\n ? (text) => {\n const weekKey = `${week.year}-W${week.weekNumber.toString().padStart(2, \"0\")}`\n onAddDeliveryComment(supplier.id, weekKey, selectedDelivery.id, text)\n }\n : undefined\n }\n />\n ) : (\n <MainView\n supplier={supplier}\n week={week}\n data={data}\n producedValue={producedValue}\n hasChanges={hasChanges}\n onProducedChange={handleProducedChange}\n onSave={handleSave}\n onSelectDelivery={setSelectedDelivery}\n onAddProductionComment={onAddProductionComment \n ? (text) => {\n const weekKey = `${week.year}-W${week.weekNumber.toString().padStart(2, \"0\")}`\n onAddProductionComment(supplier.id, weekKey, text)\n }\n : undefined\n }\n />\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\nexport { WeekDetailDialog }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Flag } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Badge } from \"../../components/badge\"\nimport type { CalibrationPrefix, CheckpointBadgeType } from \"./types\"\n\nexport interface RowHeaderCellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"prefix\"> {\n /** Prefix/row data */\n data: CalibrationPrefix\n /** Whether to show the progress bar */\n showProgress?: boolean\n}\n\n/**\n * Row header cell for the calibration table.\n * Shows prefix name, type code, checkpoint badge with flag, and progress bar.\n * \n * Based on Figma design:\n * - \"Trusses\" (prefix name, bold)\n * - \"TF\" (type code, muted)\n * - \"Paint\" badge with flag icon (checkpoint)\n * - Progress bar aligned to title text width\n */\nfunction RowHeaderCell({\n className,\n data,\n showProgress = true,\n ...props\n}: RowHeaderCellProps) {\n // Calculate progress percentage\n const progressPercent = data.totalRequired > 0\n ? Math.min((data.totalBooked / data.totalRequired) * 100, 100)\n : 0\n\n return (\n <div\n data-slot=\"row-header-cell\"\n className={cn(\n \"flex flex-col justify-center gap-1.5 py-2 px-3 min-w-[200px] h-[100px] bg-background\",\n className\n )}\n {...props}\n >\n {/* Top row: Name, Type, Badge */}\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex flex-col min-w-0 flex-1\">\n {/* Prefix name */}\n <span className=\"text-sm font-bold leading-tight text-foreground truncate\">\n {data.name}\n </span>\n {/* Type code */}\n <span className=\"text-xs text-muted-foreground\">\n {data.typeCode}\n </span>\n </div>\n \n {/* Checkpoint badge - \"Paint\" with flag icon */}\n <Badge \n variant=\"outline\"\n className=\"text-[10px] px-2 py-0.5 h-[19px] font-medium shrink-0 gap-1 bg-background border-border\"\n >\n <Flag className=\"h-2.5 w-2.5\" />\n Paint\n </Badge>\n </div>\n\n {/* Progress section - aligned to title text width */}\n {showProgress && (\n <div className=\"flex flex-col gap-1\">\n {/* Progress bar - same width as title block */}\n <div className=\"h-1.5 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden\">\n <div \n className=\"h-full bg-primary rounded-full transition-all\"\n style={{ width: `${progressPercent}%` }}\n />\n </div>\n \n {/* Progress text */}\n <span className=\"text-[10px] font-medium text-primary\">\n {data.totalBooked.toLocaleString()} / {data.totalRequired.toLocaleString()} Booked\n </span>\n </div>\n )}\n </div>\n )\n}\n\nexport { RowHeaderCell }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport type { CalibrationStatus } from \"./types\"\n\nexport interface NetBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Net value (accumulated entered - accumulated planned) */\n net: number\n /** Cell status */\n status: CalibrationStatus\n /** Whether to show compact version (icon only when valid) */\n compact?: boolean\n}\n\n/**\n * Badge showing accumulated net status.\n * - Grey: Pending (not finalized)\n * - Green: Valid (net >= 0)\n * - Red: Shortfall (net < 0)\n */\nfunction NetBadge({\n className,\n net,\n status,\n compact = false,\n ...props\n}: NetBadgeProps) {\n // Status-specific styles based on Figma design\n const statusStyles = {\n pending: {\n container: \"bg-muted border-border/50\",\n text: \"text-muted-foreground\",\n icon: \"text-muted-foreground\",\n },\n valid: {\n container: \"bg-green-100/50 border-green-500 dark:bg-green-950/30 dark:border-green-400\",\n text: \"text-green-700 dark:text-green-400\",\n icon: \"text-green-600 dark:text-green-400\",\n },\n shortfall: {\n container: \"bg-red-100/30 border-red-400/50 dark:bg-red-950/30 dark:border-red-400/50\",\n text: \"text-red-700 dark:text-red-400\",\n icon: \"text-red-600 dark:text-red-400\",\n },\n }\n\n const styles = statusStyles[status]\n const displayNet = net >= 0 ? net : net // Keep negative sign\n\n return (\n <div\n data-slot=\"net-badge\"\n data-status={status}\n className={cn(\n \"inline-flex items-center gap-1.5 px-3 py-0.5 rounded-full border\",\n styles.container,\n className\n )}\n {...props}\n >\n {/* Checkmark icon for valid status */}\n {status === \"valid\" && (\n <Check className={cn(\"h-3 w-3\", styles.icon)} />\n )}\n \n {/* Net value */}\n <span className={cn(\n \"text-xs font-bold leading-none\",\n styles.text\n )}>\n {net >= 0 ? net : net}\n </span>\n \n {/* \"net\" label */}\n {!compact && (\n <span className={cn(\n \"text-[10px] font-light opacity-80\",\n styles.text\n )}>\n net\n </span>\n )}\n </div>\n )\n}\n\nexport { NetBadge }\n\n","/**\n * Calibration Table Types\n * \n * Type definitions for the weekly production calibration table.\n * Suppliers enter weekly production amounts to meet accumulated requirements.\n */\n\n// Re-export shared week utilities from planning-table\nexport {\n type Week,\n getWeekKey,\n getISOWeek,\n generateWeeks,\n} from \"../planning-table/types\"\n\n/**\n * Unit type for production measurement\n */\nexport type CalibrationUnit = \"ton\" | \"pcs\" | \"m2\" | \"kg\" | \"m\"\n\n/**\n * Format unit for display\n */\nexport function formatCalibrationUnit(unit: CalibrationUnit): string {\n const unitLabels: Record<CalibrationUnit, string> = {\n ton: \"tons\",\n pcs: \"pcs\",\n m2: \"m²\",\n kg: \"kg\",\n m: \"m\",\n }\n return unitLabels[unit] || unit\n}\n\n/**\n * Status of a calibration cell based on accumulated constraint\n */\nexport type CalibrationStatus = \n | \"pending\" // Grey - not finalized, missing input\n | \"valid\" // Green - accumulated >= planned accumulated\n | \"shortfall\" // Red - accumulated < planned accumulated\n\n/**\n * Data for a single week cell in the calibration matrix\n */\nexport interface CalibrationCellData {\n /** Planned/required amount for this week */\n planned: number\n /** Supplier-entered production amount */\n entered: number | null\n /** Accumulated planned up to this week (calculated) */\n accumulatedPlanned: number\n /** Accumulated entered up to this week (calculated) */\n accumulatedEntered: number\n /** Net difference (accumulatedEntered - accumulatedPlanned) */\n net: number\n /** Cell status based on constraint */\n status: CalibrationStatus\n /** Whether this cell is editable */\n isEditable: boolean\n}\n\n/**\n * A comment attached to a specific week and prefix/row\n */\nexport interface CalibrationComment {\n /** Unique identifier */\n id: string\n /** Week key (YYYY-WXX format) */\n weekKey: string\n /** Prefix/row ID the comment is tagged to */\n prefixId: string\n /** Prefix/row name for display (e.g., \"Columns\", \"Wall panels\") */\n prefixName: string\n /** Author name */\n author: string\n /** Comment text */\n text: string\n /** Timestamp */\n createdAt: Date\n /** Whether the comment has been read */\n isRead?: boolean\n}\n\n/**\n * Badge type for checkpoint categorization\n */\nexport type CheckpointBadgeType = \n | \"Painted\"\n | \"Welded\"\n | \"Glazed\"\n | \"Cured\"\n | \"Assembled\"\n | \"Delivered\"\n | \"Tested\"\n | \"Sealed\"\n | string // Allow custom badge types\n\n/**\n * A prefix/element row in the calibration table (Supplier view)\n */\nexport interface CalibrationPrefix {\n /** Unique identifier */\n id: string\n /** Prefix name (e.g., \"Trusses\") */\n name: string\n /** Prefix type code (e.g., \"TF\") */\n typeCode: string\n /** Checkpoint badge type */\n checkpoint: CheckpointBadgeType\n /** Unit of measurement */\n unit: CalibrationUnit\n /** Total required quantity (sum of all planned) */\n totalRequired: number\n /** Total booked/committed quantity */\n totalBooked: number\n /** Week data indexed by \"YYYY-WXX\" format */\n weeks: Record<string, CalibrationCellData>\n /** Comments for this prefix */\n comments?: CalibrationComment[]\n}\n\n/**\n * Calibration status for a supplier submission\n */\nexport type SubmissionStatus = \"draft\" | \"submitted\" | \"approved\" | \"rejected\"\n\n/**\n * A supplier row in the J3M overview table\n */\nexport interface CalibrationSupplier {\n /** Unique identifier */\n id: string\n /** Supplier company name */\n name: string\n /** Submission status */\n status: SubmissionStatus\n /** Last updated timestamp */\n lastUpdated?: Date\n /** Submitted by user name */\n submittedBy?: string\n /** Prefixes/elements this supplier is responsible for */\n prefixes: CalibrationPrefix[]\n /** Overall calibration progress (0-100) */\n progress: number\n /** Number of shortfalls across all prefixes */\n shortfallCount: number\n /** Total comments count */\n commentsCount: number\n}\n\n/**\n * Mode for the calibration table\n */\nexport type CalibrationMode = \"supplier\" | \"j3m\"\n\n/**\n * Configuration options for the calibration table\n */\nexport interface CalibrationTableConfig {\n /** Mode: supplier (editing) or j3m (overview) */\n mode: CalibrationMode\n /** Number of weeks to display */\n weekCount?: number\n /** Start date for the week range (defaults to earliest planned week) */\n startDate?: Date\n /** Whether to allow adding earlier weeks */\n allowTimelineExtension?: boolean\n /** Maximum weeks that can be added earlier */\n maxEarlierWeeks?: number\n /** Whether to show the toolbar/filters */\n showToolbar?: boolean\n /** Whether to show pagination */\n showPagination?: boolean\n /** Rows per page options */\n pageSizeOptions?: number[]\n /** Default page size */\n defaultPageSize?: number\n /** Whether row header column is sticky */\n stickyRowHeader?: boolean\n /** Maximum height of the table */\n maxHeight?: string\n /** Callback when a cell value changes */\n onCellChange?: (prefixId: string, weekKey: string, value: number | null) => void\n /** Callback when calibration is submitted */\n onSubmit?: () => void\n /** Callback when a comment is added */\n onAddComment?: (prefixId: string, weekKey: string, text: string) => void\n /** Callback when a week is added earlier */\n onAddEarlierWeek?: () => void\n}\n\n/**\n * Props for CalibrationTable (Supplier mode)\n */\nexport interface CalibrationTableProps {\n /** Prefixes to display (for supplier mode) */\n prefixes: CalibrationPrefix[]\n /** Supplier information */\n supplierName?: string\n /** Submission status */\n status?: SubmissionStatus\n /** Configuration options */\n config?: Omit<CalibrationTableConfig, \"mode\">\n /** Additional class names */\n className?: string\n}\n\n/**\n * Props for CalibrationOverview (J3M mode)\n */\nexport interface CalibrationOverviewProps {\n /** Suppliers to display */\n suppliers: CalibrationSupplier[]\n /** Configuration options */\n config?: Omit<CalibrationTableConfig, \"mode\">\n /** Additional class names */\n className?: string\n}\n\n/**\n * Calculate calibration cell data with accumulated constraints\n */\nexport function calculateCalibrationCells(\n weeks: { weekKey: string; planned: number; entered: number | null }[]\n): Record<string, CalibrationCellData> {\n const result: Record<string, CalibrationCellData> = {}\n let accumulatedPlanned = 0\n let accumulatedEntered = 0\n \n for (const week of weeks) {\n accumulatedPlanned += week.planned\n accumulatedEntered += week.entered ?? 0\n const net = accumulatedEntered - accumulatedPlanned\n \n let status: CalibrationStatus = \"pending\"\n if (week.entered !== null) {\n status = net >= 0 ? \"valid\" : \"shortfall\"\n }\n \n result[week.weekKey] = {\n planned: week.planned,\n entered: week.entered,\n accumulatedPlanned,\n accumulatedEntered,\n net,\n status,\n isEditable: true,\n }\n }\n \n return result\n}\n\n/**\n * Check if calibration can be submitted (all cells valid, no shortfalls)\n */\nexport function canSubmitCalibration(prefixes: CalibrationPrefix[]): {\n canSubmit: boolean\n shortfallCount: number\n pendingCount: number\n message: string\n} {\n let shortfallCount = 0\n let pendingCount = 0\n \n for (const prefix of prefixes) {\n for (const weekKey in prefix.weeks) {\n const cell = prefix.weeks[weekKey]\n if (cell.status === \"shortfall\") shortfallCount++\n if (cell.status === \"pending\") pendingCount++\n }\n }\n \n const canSubmit = shortfallCount === 0 && pendingCount === 0\n \n let message = \"\"\n if (shortfallCount > 0) {\n message = `Resolve ${shortfallCount} shortfall${shortfallCount > 1 ? \"s\" : \"\"} to submit`\n } else if (pendingCount > 0) {\n message = `Enter production amounts for ${pendingCount} week${pendingCount > 1 ? \"s\" : \"\"}`\n } else {\n message = \"Ready to submit\"\n }\n \n return { canSubmit, shortfallCount, pendingCount, message }\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Plus } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { Input } from \"../../components/input\"\nimport { NetBadge } from \"./net-badge\"\nimport type { CalibrationCellData, CalibrationUnit, CalibrationStatus } from \"./types\"\nimport { formatCalibrationUnit } from \"./types\"\n\nexport interface CalibrationWeekCellProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Cell data */\n data: CalibrationCellData\n /** Unit of measurement */\n unit: CalibrationUnit\n /** Callback when value changes */\n onValueChange?: (value: number | null) => void\n /** Whether the cell is in a focused/active state */\n isFocused?: boolean\n /** Whether this cell is forced red due to prior deficit in the row */\n forcedRed?: boolean\n /** Whether this is an empty cell (no planned work) */\n isEmpty?: boolean\n /** Callback when \"+\" button is clicked to add amount */\n onAddClick?: () => void\n}\n\n/**\n * A single week cell in the calibration table.\n * Shows accumulated status, planned value, and editable input.\n * \n * Status styling rules:\n * - White (empty): no planned work AND not behind (not forcedRed)\n * - Valid (green): meets accumulated requirement\n * - Shortfall (red): accumulated < planned accumulated\n * - ForcedRed: behind as of this week due to prior deficit\n */\nfunction CalibrationWeekCell({\n className,\n data,\n unit,\n onValueChange,\n isFocused,\n forcedRed = false,\n isEmpty = false,\n onAddClick,\n ...props\n}: CalibrationWeekCellProps) {\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [localValue, setLocalValue] = React.useState<string>(\n data.entered !== null ? String(data.entered) : \"\"\n )\n const [isHovered, setIsHovered] = React.useState(false)\n const [isEditing, setIsEditing] = React.useState(false)\n \n // Sync local value with prop when data changes\n React.useEffect(() => {\n setLocalValue(data.entered !== null ? String(data.entered) : \"\")\n }, [data.entered])\n\n const unitLabel = formatCalibrationUnit(unit)\n\n // Determine effective status considering forcedRed\n const effectiveStatus: CalibrationStatus | \"forcedRed\" = forcedRed \n ? \"forcedRed\" \n : data.status\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value\n setLocalValue(val)\n \n // Parse and emit change\n if (val === \"\" || val === \"-\") {\n onValueChange?.(null)\n } else {\n const numVal = parseFloat(val)\n if (!isNaN(numVal)) {\n onValueChange?.(numVal)\n }\n }\n }\n\n const handleBlur = () => {\n setIsEditing(false)\n // Normalize value on blur\n if (localValue === \"\" || localValue === \"-\") {\n setLocalValue(\"\")\n onValueChange?.(null)\n } else {\n const numVal = parseFloat(localValue)\n if (!isNaN(numVal)) {\n setLocalValue(String(numVal))\n onValueChange?.(numVal)\n }\n }\n }\n\n const handleAddClick = () => {\n setIsEditing(true)\n onAddClick?.()\n // Focus input after state update\n setTimeout(() => {\n inputRef.current?.focus()\n }, 0)\n }\n\n // Determine cell styles based on effective status\n const getContainerStyles = () => {\n switch (effectiveStatus) {\n case \"valid\":\n // Green: subtle background with visible left stroke\n return \"border-l-2 border-l-green-500 bg-green-50/50 dark:bg-green-950/30\"\n case \"shortfall\":\n case \"forcedRed\":\n // Red: subtle background with visible left stroke\n return \"border-l-2 border-l-red-500 bg-red-50/50 dark:bg-red-950/30\"\n case \"pending\":\n default:\n // WHITE background: no stroke by default, stroke only on hover\n return cn(\n \"bg-background\",\n isHovered ? \"border-l-2 border-l-border\" : \"border-l-2 border-l-transparent\"\n )\n }\n }\n\n const getInputStyles = () => {\n switch (effectiveStatus) {\n case \"valid\":\n return \"text-green-700 dark:text-green-400\"\n case \"shortfall\":\n case \"forcedRed\":\n return \"text-red-700 dark:text-red-400 font-semibold\"\n default:\n return \"text-foreground\"\n }\n }\n\n // Show \"+\" button for empty white cells (not green, not red/forcedRed)\n // Only when: empty cell AND status is pending AND not forcedRed AND not editing\n const showAddButton = isEmpty && effectiveStatus === \"pending\" && !isEditing && data.entered === null\n\n // Render empty white cell with \"+\" button\n if (showAddButton) {\n return (\n <div\n data-slot=\"calibration-week-cell\"\n data-status=\"empty\"\n className={cn(\n \"flex items-center justify-center h-[100px]\",\n \"transition-all duration-200 ease-out\",\n \"hover:-translate-y-0.5 hover:shadow-[var(--j3m-shadow-md)]\",\n \"bg-background\",\n isHovered ? \"border-l-2 border-l-border\" : \"border-l-2 border-l-transparent\",\n className\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"h-10 w-10 rounded-full\",\n \"text-muted-foreground/40 hover:text-muted-foreground hover:bg-muted/50\",\n \"transition-all duration-200\",\n \"shadow-[var(--j3m-shadow-sm)]\"\n )}\n onClick={handleAddClick}\n >\n <Plus className=\"h-5 w-5\" />\n <span className=\"sr-only\">Add production amount</span>\n </Button>\n </div>\n )\n }\n\n // Render forced red empty cell (behind schedule)\n if (isEmpty && forcedRed) {\n return (\n <div\n data-slot=\"calibration-week-cell\"\n data-status=\"forcedRed\"\n className={cn(\n \"flex flex-col items-center justify-center gap-2 h-[100px] px-3 py-2\",\n \"transition-all duration-200 ease-out\",\n \"hover:-translate-y-0.5 hover:shadow-[var(--j3m-shadow-md)]\",\n \"border-l-2 border-l-red-500 bg-red-50/50 dark:bg-red-950/30\",\n className\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n <span className=\"text-[10px] font-medium text-red-600 dark:text-red-400 text-center\">\n Behind schedule\n </span>\n <NetBadge net={data.net} status=\"shortfall\" />\n </div>\n )\n }\n\n return (\n <div\n data-slot=\"calibration-week-cell\"\n data-status={effectiveStatus}\n className={cn(\n \"flex flex-col gap-2 px-3 py-2 h-[100px]\",\n // Hover lift effect with shadow (like planning table)\n \"transition-all duration-200 ease-out\",\n \"hover:-translate-y-0.5 hover:shadow-[var(--j3m-shadow-md)]\",\n getContainerStyles(),\n className\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n {/* Row 1: Accumulated label + NetBadge */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] font-medium text-muted-foreground tracking-wide\">\n Accumulated\n </span>\n <NetBadge net={data.net} status={forcedRed ? \"shortfall\" : data.status} />\n </div>\n\n {/* Row 2: Planned label + value pill */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] font-medium text-muted-foreground tracking-wide\">\n Planned\n </span>\n <div className=\"inline-flex items-center justify-center px-2 py-0 bg-card border border-border rounded-full\">\n <span className=\"text-[10px] font-medium text-muted-foreground\">\n {data.planned}\n </span>\n </div>\n </div>\n\n {/* Row 3: Editable input with unit - white background, empty by default */}\n <div className=\"relative\">\n <Input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n value={localValue}\n onChange={handleInputChange}\n onBlur={handleBlur}\n onFocus={() => setIsEditing(true)}\n disabled={!data.isEditable}\n placeholder=\"Enter amount\"\n className={cn(\n \"h-8 pl-3 pr-12 rounded-full text-sm font-semibold bg-background border-border\",\n // Placeholder: smaller, lighter, lower contrast\n \"placeholder:text-xs placeholder:font-normal placeholder:text-muted-foreground/50\",\n getInputStyles(),\n !data.isEditable && \"opacity-50 cursor-not-allowed\"\n )}\n />\n {/* Unit label inside input */}\n <span className=\"absolute right-4 top-1/2 -translate-y-1/2 text-[10px] text-muted-foreground/70 pointer-events-none\">\n {unitLabel}\n </span>\n </div>\n </div>\n )\n}\n\nexport { CalibrationWeekCell }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDown, Send, Plus } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { Badge } from \"../../components/badge\"\nimport { Textarea } from \"../../components/textarea\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../components/popover\"\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../../components/collapsible\"\nimport { Separator } from \"../../components/separator\"\nimport { Label } from \"../../components/label\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/select\"\nimport { CommentButton } from \"./comment-button\"\nimport type { CalibrationComment } from \"./types\"\n\n/** Option for the row/type select dropdown */\nexport interface PrefixOption {\n id: string\n name: string\n}\n\nexport interface CommentPopoverProps {\n /** Existing comments for this week (may include comments from multiple prefixes) */\n comments: CalibrationComment[]\n /** Week label for display */\n weekLabel: string\n /** Available prefixes/rows for selection */\n availablePrefixes: PrefixOption[]\n /** Callback when a new comment is added */\n onAddComment?: (text: string, prefixId: string, prefixName: string) => void\n /** Whether the popover is open */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n}\n\n/**\n * Popover for viewing and adding comments for a specific week.\n * \n * Features:\n * - Comments list with row/type Badge tags\n * - \"Add comment\" Button that reveals input form with smooth animation\n * - Select dropdown for choosing which row/type the comment applies to\n */\nfunction CommentPopover({\n comments,\n weekLabel,\n availablePrefixes,\n onAddComment,\n open,\n onOpenChange,\n}: CommentPopoverProps) {\n const [newCommentText, setNewCommentText] = React.useState(\"\")\n const [selectedPrefixId, setSelectedPrefixId] = React.useState<string>(\"\")\n const [viewCommentsOpen, setViewCommentsOpen] = React.useState(true)\n const [showAddForm, setShowAddForm] = React.useState(false)\n\n // Get selected prefix name for display\n const selectedPrefixName = React.useMemo(() => {\n const prefix = availablePrefixes.find(p => p.id === selectedPrefixId)\n return prefix?.name ?? \"\"\n }, [availablePrefixes, selectedPrefixId])\n\n const handleSubmit = () => {\n if (newCommentText.trim() && selectedPrefixId) {\n onAddComment?.(newCommentText.trim(), selectedPrefixId, selectedPrefixName)\n setNewCommentText(\"\")\n setSelectedPrefixId(\"\")\n setShowAddForm(false)\n setViewCommentsOpen(true)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n if (e.key === \"Escape\") {\n setShowAddForm(false)\n setSelectedPrefixId(\"\")\n setNewCommentText(\"\")\n }\n }\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n }).format(date)\n }\n\n // Track previous open state to detect close transition\n const prevOpenRef = React.useRef(open)\n \n // Reset add form when popover closes (only on actual close, not initial mount)\n React.useEffect(() => {\n const wasOpen = prevOpenRef.current\n prevOpenRef.current = open\n \n // Only reset when transitioning from open to closed\n if (wasOpen && !open) {\n setShowAddForm(false)\n setNewCommentText(\"\")\n setSelectedPrefixId(\"\")\n }\n }, [open])\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <CommentButton commentCount={comments.length} />\n </PopoverTrigger>\n {/* PopoverContent uses Portal by default, ensure high z-index */}\n <PopoverContent \n className=\"w-80 p-0 z-[100]\" \n align=\"end\"\n sideOffset={8}\n collisionPadding={16}\n >\n {/* Header */}\n <div className=\"px-4 py-3 border-b border-border\">\n <h4 className=\"text-sm font-semibold\">Comments</h4>\n <p className=\"text-xs text-muted-foreground\">\n {weekLabel}\n </p>\n </div>\n\n <div className=\"p-2 space-y-2 h-fit overflow-y-auto\">\n {/* Comments list (collapsible) */}\n <Collapsible open={viewCommentsOpen} onOpenChange={setViewCommentsOpen}>\n <CollapsibleTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-between h-8 px-2\"\n >\n <span className=\"text-xs font-medium\">\n Comments {comments.length > 0 && `(${comments.length})`}\n </span>\n <ChevronDown className={cn(\n \"h-4 w-4 transition-transform duration-200\",\n viewCommentsOpen && \"rotate-180\"\n )} />\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"space-y-2 pt-2\">\n {comments.length > 0 ? (\n comments.map((comment) => (\n <div\n key={comment.id}\n className=\"rounded-lg bg-muted/50 p-3 space-y-2\"\n aria-label={`Comment by ${comment.author} about ${comment.prefixName}`}\n >\n {/* Row/Type Badge */}\n <Badge \n variant=\"outline\" \n className=\"text-[10px] px-2 py-0 h-5 font-medium bg-background\"\n >\n {comment.prefixName}\n </Badge>\n \n {/* Author + date */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium\">{comment.author}</span>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatDate(comment.createdAt)}\n </span>\n </div>\n \n {/* Comment text */}\n <p className=\"text-sm text-foreground\">{comment.text}</p>\n </div>\n ))\n ) : (\n <p className=\"text-xs text-muted-foreground text-center py-2\">\n No comments yet\n </p>\n )}\n </CollapsibleContent>\n </Collapsible>\n\n <Separator className=\"my-2\" />\n\n {/* Add comment section with smooth animation */}\n <div className=\"overflow-hidden\">\n {!showAddForm ? (\n /* Add comment Button */\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full justify-center gap-2 h-8\"\n onClick={() => setShowAddForm(true)}\n >\n <Plus className=\"h-3.5 w-3.5\" />\n Add comment\n </Button>\n ) : (\n /* Comment input form with smooth expand animation */\n <div \n className={cn(\n \"space-y-3 p-3 rounded-lg border border-border bg-muted/30\",\n \"animate-in fade-in-0 slide-in-from-top-2 duration-200\"\n )}\n >\n {/* Row/Type Select - REQUIRED */}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"prefix-select\" className=\"text-xs font-medium\">\n Applies to <span className=\"text-destructive\">*</span>\n </Label>\n <Select value={selectedPrefixId} onValueChange={setSelectedPrefixId}>\n <SelectTrigger id=\"prefix-select\" size=\"sm\" className=\"w-full\">\n <SelectValue placeholder=\"Select row/type...\" />\n </SelectTrigger>\n <SelectContent>\n {availablePrefixes.map((prefix) => (\n <SelectItem key={prefix.id} value={prefix.id}>\n {prefix.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n \n {/* Comment textarea */}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"comment-text\" className=\"text-xs font-medium\">\n Comment\n </Label>\n <Textarea\n id=\"comment-text\"\n placeholder=\"Type your comment...\"\n value={newCommentText}\n onChange={(e) => setNewCommentText(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"min-h-[80px] text-sm resize-none\"\n autoFocus\n />\n </div>\n \n {/* Actions */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-muted-foreground\">\n ⌘+Enter to send · Esc to cancel\n </span>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7\"\n onClick={() => {\n setShowAddForm(false)\n setNewCommentText(\"\")\n setSelectedPrefixId(\"\")\n }}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n className=\"h-7 gap-1\"\n onClick={handleSubmit}\n disabled={!newCommentText.trim() || !selectedPrefixId}\n >\n <Send className=\"h-3 w-3\" />\n Save\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\nexport { CommentPopover }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { CommentPopover, type PrefixOption } from \"./comment-popover\"\nimport type { Week, CalibrationComment } from \"./types\"\n\nexport interface CalibrationWeekHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Week information */\n week: Week\n /** Comments for this week */\n comments?: CalibrationComment[]\n /** Whether to show the comment button */\n showCommentButton?: boolean\n /** Available prefixes/rows for the comment select dropdown */\n availablePrefixes?: PrefixOption[]\n /** Callback when a new comment is added (includes prefix info) */\n onAddComment?: (text: string, prefixId: string, prefixName: string) => void\n}\n\n/**\n * Header component for week columns in the calibration table.\n * Shows week number (W01, W02...), date range, and comment popover.\n * \n * Comment button states:\n * - No comments: Plain comment icon\n * - Has comments: Comment icon with notification dot (primary orange)\n */\nfunction CalibrationWeekHeader({\n className,\n week,\n comments = [],\n showCommentButton = true,\n availablePrefixes = [],\n onAddComment,\n ...props\n}: CalibrationWeekHeaderProps) {\n return (\n <div\n data-slot=\"calibration-week-header\"\n data-current-week={week.isCurrentWeek}\n className={cn(\n \"flex items-center justify-between gap-2 px-2 py-2 min-w-[200px]\",\n className\n )}\n {...props}\n >\n {/* Week info */}\n <div className=\"flex flex-col gap-0.5\">\n {/* Week label with optional current week indicator */}\n <div className=\"flex items-center gap-2\">\n <span className={cn(\n \"text-sm font-semibold tracking-tight\",\n week.isCurrentWeek ? \"text-primary\" : \"text-foreground\"\n )}>\n {week.label}\n </span>\n {week.isCurrentWeek && (\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-primary\" />\n </span>\n )}\n </div>\n {/* Date range - smaller, lower contrast, thinner weight (metadata) */}\n <span className=\"text-[10px] font-normal text-muted-foreground/60\">\n {week.dateRange}\n </span>\n </div>\n\n {/* Comment popover with icon states */}\n {showCommentButton && availablePrefixes.length > 0 && (\n <CommentPopover\n comments={comments}\n weekLabel={week.label}\n availablePrefixes={availablePrefixes}\n onAddComment={onAddComment}\n />\n )}\n </div>\n )\n}\n\nexport { CalibrationWeekHeader }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Plus } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { Input } from \"../../components/input\"\nimport { ScrollArea, ScrollBar } from \"../../components/scroll-area\"\n\nimport { RowHeaderCell } from \"./row-header-cell\"\nimport { CalibrationWeekCell } from \"./calibration-week-cell\"\nimport { CalibrationWeekHeader } from \"./calibration-week-header\"\nimport { \n type CalibrationTableProps, \n type CalibrationPrefix,\n type CalibrationCellData,\n type CalibrationComment,\n type Week,\n generateWeeks,\n getWeekKey,\n canSubmitCalibration,\n} from \"./types\"\n\n/**\n * CalibrationTable - Weekly production calibration matrix\n * \n * Suppliers use this to enter weekly production amounts to meet\n * accumulated requirements. Shows validation state (grey/green/red)\n * based on accumulated constraint logic.\n */\nfunction CalibrationTable({\n className,\n prefixes,\n supplierName,\n status = \"draft\",\n config = {},\n}: CalibrationTableProps) {\n const {\n weekCount = 8,\n startDate,\n allowTimelineExtension = true,\n maxEarlierWeeks = 4,\n showToolbar = true,\n showPagination = true,\n pageSizeOptions = [10, 20, 30],\n defaultPageSize = 10,\n stickyRowHeader = true,\n maxHeight = \"500px\",\n onCellChange,\n onSubmit,\n onAddComment,\n onAddEarlierWeek,\n } = config\n\n // Calculate start date from first production week (earliest week with planned > 0)\n const calculatedStartDate = React.useMemo(() => {\n if (startDate) return startDate\n \n // Find earliest week with planned > 0 (actual production work)\n let earliest: Date | null = null\n \n for (const prefix of prefixes) {\n for (const weekKey in prefix.weeks) {\n const cell = prefix.weeks[weekKey]\n // Only consider weeks with actual planned production\n if (cell.planned > 0) {\n // Parse week key (YYYY-WXX format)\n const match = weekKey.match(/(\\d{4})-W(\\d{2})/)\n if (match) {\n const year = parseInt(match[1])\n const week = parseInt(match[2])\n // Convert to approximate date (start of that week)\n const date = new Date(year, 0, 1 + (week - 1) * 7)\n if (earliest === null || date < earliest) {\n earliest = date\n }\n }\n }\n }\n }\n \n // If no planned production found, use current date\n return earliest ?? new Date()\n }, [startDate, prefixes])\n\n // Generate weeks\n const [additionalWeeks, setAdditionalWeeks] = React.useState(0)\n const weeks = React.useMemo(() => {\n const start = new Date(calculatedStartDate)\n start.setDate(start.getDate() - additionalWeeks * 7)\n return generateWeeks(start, weekCount + additionalWeeks)\n }, [calculatedStartDate, weekCount, additionalWeeks])\n\n // Current week key for highlighting\n const currentWeekKey = React.useMemo(() => {\n const currentWeek = weeks.find(w => w.isCurrentWeek)\n return currentWeek ? getWeekKey(currentWeek.startDate) : null\n }, [weeks])\n\n // Pagination state\n const [currentPage, setCurrentPage] = React.useState(0)\n const [pageSize, setPageSize] = React.useState(defaultPageSize)\n\n // Filter state\n const [searchQuery, setSearchQuery] = React.useState(\"\")\n\n // Filter prefixes\n const filteredPrefixes = React.useMemo(() => {\n if (!searchQuery) return prefixes\n const query = searchQuery.toLowerCase()\n return prefixes.filter(p => \n p.name.toLowerCase().includes(query) ||\n p.typeCode.toLowerCase().includes(query)\n )\n }, [prefixes, searchQuery])\n\n // Paginate prefixes\n const paginatedPrefixes = React.useMemo(() => {\n const start = currentPage * pageSize\n return filteredPrefixes.slice(start, start + pageSize)\n }, [filteredPrefixes, currentPage, pageSize])\n\n // Calculate submission status\n const submitStatus = React.useMemo(() => \n canSubmitCalibration(prefixes), \n [prefixes]\n )\n\n // Handler for adding earlier week\n const handleAddEarlierWeek = () => {\n if (additionalWeeks < maxEarlierWeeks) {\n setAdditionalWeeks(prev => prev + 1)\n onAddEarlierWeek?.()\n }\n }\n\n // Handler for cell value change\n const handleCellChange = (prefixId: string, weekKey: string, value: number | null) => {\n onCellChange?.(prefixId, weekKey, value)\n }\n\n // Handler for adding a comment (from week header) - includes prefix info from user selection\n const handleAddWeekComment = (weekKey: string, text: string, prefixId: string, prefixName: string) => {\n onAddComment?.(prefixId, weekKey, text)\n }\n\n // Get comments for a specific week (across all prefixes)\n const getWeekComments = (weekKey: string): CalibrationComment[] => {\n const allComments: CalibrationComment[] = []\n for (const prefix of prefixes) {\n const weekComments = prefix.comments?.filter(c => c.weekKey === weekKey) ?? []\n allComments.push(...weekComments)\n }\n return allComments\n }\n\n // Build available prefixes list for the comment select dropdown\n const availablePrefixes = React.useMemo(() => \n prefixes.map(p => ({ id: p.id, name: p.name })),\n [prefixes]\n )\n\n return (\n <div\n data-slot=\"calibration-table\"\n className={cn(\"flex flex-col gap-4\", className)}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex flex-col gap-1\">\n <h2 className=\"text-2xl font-semibold tracking-tight\">\n Weekly Production Calibration\n </h2>\n <p className=\"text-muted-foreground\">\n Review required weekly production and confirm achievable output at the selected checkpoint.\n </p>\n </div>\n </div>\n\n {/* Table section with toolbar directly above */}\n <div className=\"flex flex-col gap-2\">\n {/* Toolbar - directly above table, aligned to table width */}\n {showToolbar && (\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <Input\n placeholder=\"Search prefixes...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"h-8 w-[200px] lg:w-[300px]\"\n />\n </div>\n \n <div className=\"flex items-center gap-2\">\n {/* Add earlier week button */}\n {allowTimelineExtension && additionalWeeks < maxEarlierWeeks && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"gap-2\"\n onClick={handleAddEarlierWeek}\n >\n <Plus className=\"h-4 w-4\" />\n Add earlier week\n </Button>\n )}\n </div>\n </div>\n )}\n\n {/* Pure table grid - rounded container clips content */}\n <div className=\"rounded-xl border bg-background shadow-sm overflow-hidden\">\n {/* Quantum UI ScrollArea for both axes */}\n <ScrollArea \n className=\"w-full\"\n style={{ maxHeight }}\n >\n <table className=\"w-full border-collapse\">\n {/* Header row - GREY background (sidebar token) */}\n <thead className=\"sticky top-0 z-20\">\n <tr>\n {/* Top-left header cell - GREY (part of header band) with right shadow */}\n <th className={cn(\n \"h-14 px-3 text-left align-middle font-semibold text-xs text-muted-foreground uppercase tracking-wide\",\n \"border-r border-b border-border bg-sidebar\",\n stickyRowHeader && \"sticky left-0 z-30 min-w-[200px]\",\n // Right shadow using Quantum token\n stickyRowHeader && \"shadow-[var(--j3m-shadow-sticky-edge)]\"\n )}>\n Supplier / Scope\n </th>\n\n {/* Week columns - GREY header (sidebar token) */}\n {weeks.map((week) => {\n const weekKey = getWeekKey(week.startDate)\n const weekComments = getWeekComments(weekKey)\n return (\n <th\n key={weekKey}\n className=\"h-14 px-2 text-left align-middle border-r border-b border-border last:border-r-0 min-w-[220px] bg-sidebar\"\n >\n <CalibrationWeekHeader\n week={week}\n comments={weekComments}\n showCommentButton={true}\n availablePrefixes={availablePrefixes}\n onAddComment={(text, prefixId, prefixName) => \n handleAddWeekComment(weekKey, text, prefixId, prefixName)\n }\n />\n </th>\n )\n })}\n </tr>\n </thead>\n\n {/* Body rows - white cell area */}\n <tbody className=\"bg-background\">\n {paginatedPrefixes.length > 0 ? (\n paginatedPrefixes.map((prefix) => {\n // Compute forcedRed state for each week in this row\n // A cell is forcedRed if any prior cell has a shortfall (accumulated deficit)\n const sortedWeekKeys = weeks.map(w => getWeekKey(w.startDate))\n let hasDeficit = false\n const forcedRedMap: Record<string, boolean> = {}\n \n for (const weekKey of sortedWeekKeys) {\n const cellData = prefix.weeks[weekKey]\n \n if (hasDeficit) {\n // This cell and all subsequent are forcedRed\n forcedRedMap[weekKey] = true\n } else if (cellData && cellData.status === \"shortfall\") {\n // First shortfall found - this cell triggers deficit\n hasDeficit = true\n forcedRedMap[weekKey] = false // This cell shows its actual shortfall\n } else {\n forcedRedMap[weekKey] = false\n }\n }\n\n return (\n <tr key={prefix.id} className=\"border-b border-border last:border-b-0\">\n {/* Row header cell - WHITE with right shadow using Quantum token */}\n <td \n className={cn(\n \"p-0 align-top border-r border-border bg-background\",\n stickyRowHeader && \"sticky left-0 z-10 min-w-[200px]\",\n // Right shadow using Quantum token\n stickyRowHeader && \"shadow-[var(--j3m-shadow-sticky-edge)]\"\n )}\n >\n <RowHeaderCell data={prefix} showProgress={true} />\n </td>\n\n {/* Week cells - computed per cell based on row deficit state */}\n {weeks.map((week) => {\n const weekKey = getWeekKey(week.startDate)\n const cellData = prefix.weeks[weekKey]\n const isForcedRed = forcedRedMap[weekKey] ?? false\n \n // Cell is \"empty\" if no planned production for this week\n const isEmpty = !cellData || cellData.planned === 0\n \n // Create cell data for empty cells (inherit accumulated values from previous)\n const effectiveCellData: CalibrationCellData = cellData ?? {\n planned: 0,\n entered: null,\n accumulatedPlanned: 0,\n accumulatedEntered: 0,\n net: 0,\n status: \"pending\",\n isEditable: true,\n }\n\n return (\n <td\n key={weekKey}\n className=\"p-0 align-top border-r border-border last:border-r-0 min-w-[220px] bg-background\"\n >\n <CalibrationWeekCell\n data={effectiveCellData}\n unit={prefix.unit}\n onValueChange={(value) => handleCellChange(prefix.id, weekKey, value)}\n forcedRed={isForcedRed}\n isEmpty={isEmpty}\n onAddClick={() => {\n // Optional: could track which cell is being added\n }}\n />\n </td>\n )\n })}\n </tr>\n )\n })\n ) : (\n <tr>\n <td\n colSpan={weeks.length + 1}\n className=\"h-24 text-center text-muted-foreground bg-background\"\n >\n No prefixes found.\n </td>\n </tr>\n )}\n </tbody>\n </table>\n <ScrollBar orientation=\"horizontal\" />\n <ScrollBar orientation=\"vertical\" />\n </ScrollArea>\n </div>\n </div>\n\n {/* Pagination */}\n {showPagination && filteredPrefixes.length > pageSize && (\n <div className=\"flex items-center justify-between px-2\">\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <span>Rows per page</span>\n <select\n value={pageSize}\n onChange={(e) => {\n setPageSize(Number(e.target.value))\n setCurrentPage(0)\n }}\n className=\"h-8 w-16 rounded-md border bg-background px-2 text-sm\"\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <span>\n Page {currentPage + 1} of {Math.ceil(filteredPrefixes.length / pageSize)}\n </span>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n disabled={currentPage === 0}\n onClick={() => setCurrentPage(0)}\n >\n ««\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n disabled={currentPage === 0}\n onClick={() => setCurrentPage(prev => prev - 1)}\n >\n «\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n disabled={currentPage >= Math.ceil(filteredPrefixes.length / pageSize) - 1}\n onClick={() => setCurrentPage(prev => prev + 1)}\n >\n »\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n disabled={currentPage >= Math.ceil(filteredPrefixes.length / pageSize) - 1}\n onClick={() => setCurrentPage(Math.ceil(filteredPrefixes.length / pageSize) - 1)}\n >\n »»\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport { CalibrationTable }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { MessageSquarePlus } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { Textarea } from \"../../components/textarea\"\nimport { Label } from \"../../components/label\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../../components/dialog\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/select\"\nimport type { CalibrationPrefix, Week } from \"./types\"\nimport { getWeekKey } from \"./types\"\n\nexport interface CommentDialogProps {\n /** Available prefixes/rows to comment on */\n prefixes: CalibrationPrefix[]\n /** Available weeks */\n weeks: Week[]\n /** Callback when a comment is added */\n onAddComment?: (prefixId: string, weekKey: string, text: string) => void\n /** Trigger button variant */\n triggerVariant?: \"default\" | \"outline\" | \"ghost\"\n /** Whether the dialog is open */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n}\n\n/**\n * Dialog for adding a comment from the top toolbar.\n * \n * Allows user to:\n * - Select which prefix/row the comment refers to\n * - Select which week (optional, defaults to current context)\n * - Enter comment text\n */\nfunction CommentDialog({\n prefixes,\n weeks,\n onAddComment,\n triggerVariant = \"outline\",\n open,\n onOpenChange,\n}: CommentDialogProps) {\n const [selectedPrefixId, setSelectedPrefixId] = React.useState<string>(\"\")\n const [selectedWeekKey, setSelectedWeekKey] = React.useState<string>(\"\")\n const [commentText, setCommentText] = React.useState(\"\")\n\n // Find current week\n const currentWeek = React.useMemo(() => \n weeks.find(w => w.isCurrentWeek),\n [weeks]\n )\n\n // Reset form when dialog opens\n React.useEffect(() => {\n if (open) {\n setSelectedPrefixId(prefixes[0]?.id ?? \"\")\n setSelectedWeekKey(currentWeek ? getWeekKey(currentWeek.startDate) : weeks[0] ? getWeekKey(weeks[0].startDate) : \"\")\n setCommentText(\"\")\n }\n }, [open, prefixes, weeks, currentWeek])\n\n const handleSave = () => {\n if (selectedPrefixId && selectedWeekKey && commentText.trim()) {\n onAddComment?.(selectedPrefixId, selectedWeekKey, commentText.trim())\n onOpenChange?.(false)\n }\n }\n\n const isValid = selectedPrefixId && selectedWeekKey && commentText.trim()\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogTrigger asChild>\n <Button variant={triggerVariant} size=\"sm\" className=\"gap-2\">\n <MessageSquarePlus className=\"h-4 w-4\" />\n Add comment\n </Button>\n </DialogTrigger>\n <DialogContent className=\"sm:max-w-[425px]\">\n <DialogHeader>\n <DialogTitle>Add Comment</DialogTitle>\n <DialogDescription>\n Add a comment to a specific prefix and week. Comments help communicate production updates and issues.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"grid gap-4 py-4\">\n {/* Prefix selection */}\n <div className=\"grid gap-2\">\n <Label htmlFor=\"prefix-select\">Prefix / Element Type</Label>\n <Select value={selectedPrefixId} onValueChange={setSelectedPrefixId}>\n <SelectTrigger id=\"prefix-select\">\n <SelectValue placeholder=\"Select prefix...\" />\n </SelectTrigger>\n <SelectContent>\n {prefixes.map((prefix) => (\n <SelectItem key={prefix.id} value={prefix.id}>\n <span className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{prefix.name}</span>\n <span className=\"text-muted-foreground text-xs\">({prefix.typeCode})</span>\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Week selection */}\n <div className=\"grid gap-2\">\n <Label htmlFor=\"week-select\">Week</Label>\n <Select value={selectedWeekKey} onValueChange={setSelectedWeekKey}>\n <SelectTrigger id=\"week-select\">\n <SelectValue placeholder=\"Select week...\" />\n </SelectTrigger>\n <SelectContent>\n {weeks.map((week) => {\n const weekKey = getWeekKey(week.startDate)\n return (\n <SelectItem key={weekKey} value={weekKey}>\n <span className=\"flex items-center gap-2\">\n <span className={cn(\n \"font-medium\",\n week.isCurrentWeek && \"text-primary\"\n )}>\n {week.label}\n </span>\n <span className=\"text-muted-foreground text-xs\">\n {week.dateRange}\n </span>\n {week.isCurrentWeek && (\n <span className=\"text-[10px] text-primary font-medium\">\n (Current)\n </span>\n )}\n </span>\n </SelectItem>\n )\n })}\n </SelectContent>\n </Select>\n </div>\n\n {/* Comment text */}\n <div className=\"grid gap-2\">\n <Label htmlFor=\"comment-text\">Comment</Label>\n <Textarea\n id=\"comment-text\"\n placeholder=\"Enter your comment...\"\n value={commentText}\n onChange={(e) => setCommentText(e.target.value)}\n className=\"min-h-[100px] resize-none\"\n />\n </div>\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange?.(false)}>\n Cancel\n </Button>\n <Button onClick={handleSave} disabled={!isValid}>\n Save comment\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n\nexport { CommentDialog }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Calendar, AlertTriangle, CheckCircle } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { Badge } from \"../../components/badge\"\nimport type { SubmissionStatus } from \"./types\"\n\nexport interface SubmitCalibrationBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current submission status */\n status: SubmissionStatus\n /** Last saved date */\n lastSaved?: Date\n /** Whether calibration can be submitted */\n canSubmit: boolean\n /** Number of shortfalls */\n shortfallCount: number\n /** Number of pending (unfilled) cells */\n pendingCount: number\n /** Helper message explaining current state */\n message: string\n /** Callback when submit button is clicked */\n onSubmit?: () => void\n /** Callback when save draft is clicked */\n onSaveDraft?: () => void\n}\n\n/**\n * Get badge styling for submission status\n */\nfunction getStatusBadge(status: SubmissionStatus) {\n switch (status) {\n case \"draft\":\n return { variant: \"secondary\" as const, label: \"DRAFT\", color: \"bg-blue-500\" }\n case \"submitted\":\n return { variant: \"secondary\" as const, label: \"SUBMITTED\", color: \"bg-amber-500\" }\n case \"approved\":\n return { variant: \"secondary\" as const, label: \"APPROVED\", color: \"bg-green-500\" }\n case \"rejected\":\n return { variant: \"destructive\" as const, label: \"REJECTED\", color: \"bg-red-500\" }\n }\n}\n\n/**\n * Format date for display\n */\nfunction formatDate(date: Date): string {\n return date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"2-digit\",\n year: \"numeric\",\n })\n}\n\n/**\n * Sticky footer bar for calibration table.\n * Shows status badge, last saved date, and submit/save buttons.\n * \n * Based on Figma design:\n * - DRAFT badge (blue dot + text)\n * - Date display with calendar icon\n * - \"Submit calibration\" button (orange/primary)\n */\nfunction SubmitCalibrationBar({\n className,\n status,\n lastSaved,\n canSubmit,\n shortfallCount,\n pendingCount,\n message,\n onSubmit,\n onSaveDraft,\n ...props\n}: SubmitCalibrationBarProps) {\n const statusBadge = getStatusBadge(status)\n\n return (\n <div\n data-slot=\"submit-calibration-bar\"\n className={cn(\n \"flex items-center justify-between gap-4 px-4 py-4\",\n \"bg-background\",\n className\n )}\n {...props}\n >\n {/* Left side: Status info */}\n <div className=\"flex items-center gap-3\">\n {/* Validation message */}\n {!canSubmit && (shortfallCount > 0 || pendingCount > 0) && (\n <div className=\"flex items-center gap-2 text-sm\">\n <AlertTriangle className=\"h-4 w-4 text-amber-500\" />\n <span className=\"text-muted-foreground\">{message}</span>\n </div>\n )}\n {canSubmit && (\n <div className=\"flex items-center gap-2 text-sm\">\n <CheckCircle className=\"h-4 w-4 text-green-500\" />\n <span className=\"text-muted-foreground\">{message}</span>\n </div>\n )}\n </div>\n\n {/* Right side: Status badge, date, and buttons */}\n <div className=\"flex items-center gap-3\">\n {/* Status badge */}\n <Badge \n variant={statusBadge.variant}\n className=\"flex items-center gap-2 px-3 py-1 rounded-full\"\n >\n <span className={cn(\"h-2 w-2 rounded-full\", statusBadge.color)} />\n <span className=\"text-xs font-medium\">{statusBadge.label}</span>\n </Badge>\n\n {/* Last saved date */}\n {lastSaved && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"gap-2 rounded-full\"\n disabled\n >\n <Calendar className=\"h-4 w-4\" />\n <span>{formatDate(lastSaved)}</span>\n </Button>\n )}\n\n {/* Submit button */}\n <Button\n size=\"sm\"\n className=\"rounded-full px-4 min-w-[140px]\"\n disabled={!canSubmit || status === \"submitted\" || status === \"approved\"}\n onClick={onSubmit}\n >\n {status === \"submitted\" ? \"Submitted\" : \n status === \"approved\" ? \"Approved\" : \n \"Submit calibration\"}\n </Button>\n </div>\n </div>\n )\n}\n\nexport { SubmitCalibrationBar }\n\n","\"use client\"\n\n/**\n * Types for the Supplier Weekly Loading (iPad) block\n * \n * A touch-first weekly view for suppliers to view deliveries \n * and add pre-unloading comments.\n */\n\n/**\n * User role for role-based access control\n */\nexport type LoadingUserRole = \"supplier\" | \"j3m\"\n\n/**\n * Delivery status for loading\n */\nexport type LoadingDeliveryStatus = \n | \"planned\"\n | \"in_progress\" \n | \"loaded\"\n | \"shipped\"\n | \"delivered\"\n | \"cancelled\"\n\n/**\n * Element shipment status for loading (neutral tone, non-critical)\n */\nexport type LoadingElementStatus = \n | \"loaded\" // Element is on the truck\n | \"missing\" // Element is not loaded (neutral, not error)\n | \"moved\" // Element moved to another delivery\n | \"addon\" // Element added from another delivery\n\n/**\n * Get label for element shipment status (neutral tone)\n */\nexport function getLoadingElementStatusLabel(status: LoadingElementStatus): string {\n switch (status) {\n case \"loaded\": return \"Loaded\"\n case \"missing\": return \"Missing\"\n case \"moved\": return \"Moved to another delivery\"\n case \"addon\": return \"Add-on\"\n default: return status\n }\n}\n\n/**\n * Get status label for delivery\n */\nexport function getLoadingDeliveryStatusLabel(status: LoadingDeliveryStatus): string {\n switch (status) {\n case \"planned\": return \"Planned\"\n case \"in_progress\": return \"In Progress\"\n case \"loaded\": return \"Loaded\"\n case \"shipped\": return \"Shipped\"\n case \"delivered\": return \"Delivered\"\n case \"cancelled\": return \"Cancelled\"\n default: return status\n }\n}\n\n/**\n * Visual state for delivery cards (3-state model)\n * - sent: Greyed out with checkmark (shipped/delivered)\n * - ready: Highlighted as ready to unload \n * - normal: Default neutral state\n */\nexport type DeliveryVisualState = \"sent\" | \"ready\" | \"normal\"\n\n/**\n * Determine the visual state for a delivery card\n */\nexport function getDeliveryVisualState(delivery: LoadingDelivery): DeliveryVisualState {\n // Sent state: shipped or delivered\n if (delivery.status === \"shipped\" || delivery.status === \"delivered\") {\n return \"sent\"\n }\n // Ready state: marked as ready to unload\n if (delivery.isReadyToUnload) {\n return \"ready\"\n }\n // Normal state: everything else\n return \"normal\"\n}\n\n/**\n * An element to be loaded/unloaded\n */\nexport interface LoadingElement {\n /** Unique identifier */\n id: string\n /** Prefix code (e.g., \"VP\", \"YV\") */\n prefix: string\n /** Element type (e.g., \"Wall panel\", \"Column\") */\n type: string\n /** Weight in kg or tons */\n weight?: number\n /** Weight unit */\n weightUnit?: \"kg\" | \"ton\"\n /** Size in square meters */\n sizeSqm?: number\n /** Delivery reference (the delivery this element belongs to) */\n deliveryId: string\n /** Shipment status */\n status: LoadingElementStatus\n /** If moved, reference to actual delivery */\n actualDeliveryId?: string\n /** If moved, label of actual delivery */\n actualDeliveryLabel?: string\n /** If addon, reference to original delivery */\n originalDeliveryId?: string\n /** If addon, label of original delivery */\n originalDeliveryLabel?: string\n}\n\n/**\n * Comment context for pre-unloading notes\n */\nexport type CommentContext = \"pre_unloading\" | \"general\"\n\n/**\n * A comment attached to a delivery (pre-unloading)\n */\nexport interface LoadingComment {\n /** Unique identifier */\n id: string\n /** Author name */\n author: string\n /** Comment text */\n text: string\n /** Timestamp */\n createdAt: Date\n /** Context type */\n context: CommentContext\n /** Week ID (YYYY-WXX format) */\n weekId: string\n /** Delivery ID */\n deliveryId: string\n /** Supplier ID */\n supplierId?: string\n /** Supplier name for display */\n supplierName?: string\n /** Prefix ID (optional) */\n prefixId?: string\n /** Prefix name for display */\n prefixName?: string\n}\n\n/**\n * A delivery to be loaded\n */\nexport interface LoadingDelivery {\n /** Unique identifier */\n id: string\n /** Display label (e.g., \"Delivery #1\") */\n label: string\n /** Delivery date */\n date: Date\n /** Supplier ID */\n supplierId: string\n /** Supplier name */\n supplierName: string\n /** Prefix scope (if available) */\n prefixScope?: string\n /** Delivery status */\n status: LoadingDeliveryStatus\n /** Destination */\n destination?: string\n /** Elements to load */\n elements: LoadingElement[]\n /** Pre-unloading comments */\n comments: LoadingComment[]\n /** Number loaded (if loading has started) */\n loadedCount?: number\n /** Total elements count */\n totalCount?: number\n \n // Production tracking fields\n /** Number of elements produced (for \"Produced: X / Y\" display) */\n producedCount?: number\n /** Total weight in tons produced */\n producedTons?: number\n /** Total weight in tons planned */\n totalTons?: number\n /** Whether all elements are produced and ready to load */\n isReadyToUnload?: boolean\n /** Whether there's a production delay risk (shows red styling) */\n hasProductionRisk?: boolean\n /** Risk reason if hasProductionRisk is true */\n riskReason?: string\n}\n\n/**\n * A supplier with deliveries\n */\nexport interface LoadingSupplier {\n /** Unique identifier */\n id: string\n /** Supplier name */\n name: string\n /** Prefixes this supplier handles */\n prefixes?: string[]\n}\n\n/**\n * A prefix/delivery type for the Y-axis legend (like Calibration table)\n */\nexport interface LoadingPrefix {\n /** Unique identifier (prefix code) */\n id: string\n /** Display name (e.g., \"Wall Panels\") */\n name: string\n /** Short type code (e.g., \"VP\") */\n typeCode: string\n /** Supplier this prefix belongs to */\n supplierId: string\n /** Supplier name */\n supplierName: string\n /** Total deliveries for this prefix in the week */\n totalDeliveries: number\n /** Sent/completed deliveries */\n sentDeliveries: number\n /** Whether any delivery in this prefix has a risk */\n hasRisk?: boolean\n}\n\n/**\n * Week data for the loading view\n */\nexport interface LoadingWeek {\n /** Week key (YYYY-WXX format) */\n weekKey: string\n /** Week label (e.g., \"W02\") */\n label: string\n /** Start date (Monday) */\n startDate: Date\n /** End date (Friday) */\n endDate: Date\n /** Date range string (e.g., \"Jan 6 - Jan 10\") */\n dateRange: string\n /** Whether this is the current week */\n isCurrentWeek: boolean\n}\n\n/**\n * Props for the SupplierWeeklyLoading component\n */\nexport interface SupplierWeeklyLoadingProps {\n /** Current week data */\n week: LoadingWeek\n /** Deliveries for the week (grouped by day) */\n deliveries: LoadingDelivery[]\n /** Available suppliers (for comment selector) */\n suppliers: LoadingSupplier[]\n /** User role for access control */\n userRole?: LoadingUserRole\n /** Current supplier ID (required when userRole is \"supplier\") */\n currentSupplierId?: string\n /** Callback when a delivery card is tapped */\n onDeliveryClick?: (delivery: LoadingDelivery) => void\n /** Callback when navigating back from detail */\n onBack?: () => void\n /** Callback when a comment is added */\n onAddComment?: (comment: Omit<LoadingComment, \"id\" | \"createdAt\">) => void\n /** Callback when confirming a load */\n onConfirmLoad?: (deliveryId: string) => void\n /** Additional class names */\n className?: string\n}\n\n/**\n * Props for the DeliveryDetailPage component\n */\nexport interface DeliveryDetailPageProps {\n /** Delivery data */\n delivery: LoadingDelivery\n /** Week data */\n week: LoadingWeek\n /** Available suppliers for comment selector */\n suppliers: LoadingSupplier[]\n /** User role */\n userRole?: LoadingUserRole\n /** Current supplier ID */\n currentSupplierId?: string\n /** Callback to navigate back */\n onBack: () => void\n /** Callback when a comment is added */\n onAddComment?: (comment: Omit<LoadingComment, \"id\" | \"createdAt\">) => void\n /** Callback when confirming a load */\n onConfirmLoad?: (deliveryId: string) => void\n}\n\n/**\n * Helper: Get ISO week number from a date\n */\nexport function getLoadingISOWeek(date: Date): number {\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))\n const dayNum = d.getUTCDay() || 7\n d.setUTCDate(d.getUTCDate() + 4 - dayNum)\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1))\n return Math.ceil((((d.getTime() - yearStart.getTime()) / 86400000) + 1) / 7)\n}\n\n/**\n * Helper: Get week key from a date (YYYY-WXX format)\n */\nexport function getLoadingWeekKey(date: Date): string {\n const year = date.getFullYear()\n const weekNumber = getLoadingISOWeek(date)\n return `${year}-W${weekNumber.toString().padStart(2, \"0\")}`\n}\n\n/**\n * Helper: Generate week data from a date\n */\nexport function generateLoadingWeek(date: Date): LoadingWeek {\n const monday = new Date(date)\n const day = monday.getDay()\n const diff = monday.getDate() - day + (day === 0 ? -6 : 1)\n monday.setDate(diff)\n monday.setHours(0, 0, 0, 0)\n\n const friday = new Date(monday)\n friday.setDate(monday.getDate() + 4)\n\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n const isCurrentWeek = monday <= today && today <= friday\n\n const formatDate = (d: Date) => {\n return d.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" })\n }\n\n return {\n weekKey: getLoadingWeekKey(monday),\n label: `W${getLoadingISOWeek(monday).toString().padStart(2, \"0\")}`,\n startDate: monday,\n endDate: friday,\n dateRange: `${formatDate(monday)} - ${formatDate(friday)}`,\n isCurrentWeek,\n }\n}\n\n/**\n * Helper: Group deliveries by day of week (Mon-Fri)\n */\nexport function groupDeliveriesByDay(deliveries: LoadingDelivery[]): Map<number, LoadingDelivery[]> {\n const grouped = new Map<number, LoadingDelivery[]>()\n \n // Initialize Mon-Fri (1-5)\n for (let i = 1; i <= 5; i++) {\n grouped.set(i, [])\n }\n \n for (const delivery of deliveries) {\n const dayOfWeek = delivery.date.getDay()\n // Only include Mon-Fri (1-5)\n if (dayOfWeek >= 1 && dayOfWeek <= 5) {\n const dayDeliveries = grouped.get(dayOfWeek) ?? []\n dayDeliveries.push(delivery)\n grouped.set(dayOfWeek, dayDeliveries)\n }\n }\n \n return grouped\n}\n\n/**\n * Helper: Get day label\n */\nexport function getDayLabel(dayOfWeek: number): string {\n const labels: Record<number, string> = {\n 1: \"Monday\",\n 2: \"Tuesday\",\n 3: \"Wednesday\",\n 4: \"Thursday\",\n 5: \"Friday\",\n }\n return labels[dayOfWeek] ?? \"\"\n}\n\n/**\n * Helper: Get short day label\n */\nexport function getShortDayLabel(dayOfWeek: number): string {\n const labels: Record<number, string> = {\n 1: \"Mon\",\n 2: \"Tue\",\n 3: \"Wed\",\n 4: \"Thu\",\n 5: \"Fri\",\n }\n return labels[dayOfWeek] ?? \"\"\n}\n\n/**\n * Helper: Extract unique prefixes from deliveries\n */\nexport function extractPrefixes(deliveries: LoadingDelivery[]): LoadingPrefix[] {\n const prefixMap = new Map<string, LoadingPrefix>()\n \n for (const delivery of deliveries) {\n const prefixCode = delivery.prefixScope ?? \"GENERAL\"\n \n if (!prefixMap.has(prefixCode)) {\n prefixMap.set(prefixCode, {\n id: prefixCode,\n name: prefixCode === \"GENERAL\" ? \"General\" : prefixCode,\n typeCode: prefixCode,\n supplierId: delivery.supplierId,\n supplierName: delivery.supplierName,\n totalDeliveries: 0,\n sentDeliveries: 0,\n hasRisk: false,\n })\n }\n \n const prefix = prefixMap.get(prefixCode)!\n prefix.totalDeliveries += 1\n \n if (delivery.status === \"shipped\" || delivery.status === \"delivered\") {\n prefix.sentDeliveries += 1\n }\n \n if (delivery.hasProductionRisk) {\n prefix.hasRisk = true\n }\n }\n \n return Array.from(prefixMap.values())\n}\n\n/**\n * Helper: Group deliveries by prefix AND day (for grid view)\n * Returns Map<prefixId, Map<dayOfWeek, LoadingDelivery[]>>\n */\nexport function groupDeliveriesByPrefixAndDay(\n deliveries: LoadingDelivery[]\n): Map<string, Map<number, LoadingDelivery[]>> {\n const grouped = new Map<string, Map<number, LoadingDelivery[]>>()\n \n for (const delivery of deliveries) {\n const prefixCode = delivery.prefixScope ?? \"GENERAL\"\n const dayOfWeek = delivery.date.getDay()\n \n // Only include Mon-Fri (1-5)\n if (dayOfWeek < 1 || dayOfWeek > 5) continue\n \n if (!grouped.has(prefixCode)) {\n // Initialize all days for this prefix\n const dayMap = new Map<number, LoadingDelivery[]>()\n for (let i = 1; i <= 5; i++) {\n dayMap.set(i, [])\n }\n grouped.set(prefixCode, dayMap)\n }\n \n const dayMap = grouped.get(prefixCode)!\n const dayDeliveries = dayMap.get(dayOfWeek) ?? []\n dayDeliveries.push(delivery)\n dayMap.set(dayOfWeek, dayDeliveries)\n }\n \n return grouped\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, AlertTriangle, Factory } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport type { LoadingDelivery, DeliveryVisualState } from \"./types\"\nimport { getDeliveryVisualState } from \"./types\"\n\nexport interface DeliveryBadgeProps {\n /** Delivery data */\n delivery: LoadingDelivery\n /** Callback when badge is clicked */\n onClick?: () => void\n /** Additional class names */\n className?: string\n}\n\n/**\n * Get left-stroke styling for 3-state visual model\n * Uses border-l-[3px] for prominent status indication on top of full border\n */\nfunction getLeftStrokeStyles(state: DeliveryVisualState, hasRisk: boolean, isHovered: boolean) {\n if (hasRisk) {\n return {\n stroke: \"border-l-[3px] border-l-red-500\",\n content: \"text-foreground\",\n progressBg: \"bg-red-500\",\n iconColor: \"text-red-600 dark:text-red-400\",\n }\n }\n\n switch (state) {\n case \"sent\":\n return {\n stroke: \"border-l-[3px] border-l-green-500/50\",\n content: \"text-muted-foreground/60\",\n progressBg: \"bg-green-500\",\n iconColor: \"text-green-600 dark:text-green-400\",\n }\n case \"ready\":\n return {\n stroke: \"border-l-[3px] border-l-green-500\",\n content: \"text-foreground\",\n progressBg: \"bg-green-500\",\n iconColor: \"text-green-600 dark:text-green-400\",\n }\n default:\n return {\n stroke: isHovered \n ? \"border-l-[3px] border-l-primary/50\" \n : \"border-l-[3px] border-l-border\",\n content: \"text-foreground\",\n progressBg: \"bg-primary\",\n iconColor: \"text-muted-foreground\",\n }\n }\n}\n\n/**\n * DeliveryBadge - Touch-first card for weekly grid view\n * \n * Card title = prefixes carried (e.g., \"TF · WP · CF\")\n * Factory icon + progress bar for production readiness\n * \n * Spacing using Quantum tokens:\n * - Card height: h-[80px]\n * - Padding: px-6 py-4 (j3m.spacing.l / j3m.spacing.m)\n * - Row gap: gap-3 (j3m.spacing.s = 12px) - breathing room between title and progress\n * - Intra-row gap: gap-2 (j3m.spacing.xs = 8px) - tighter within rows\n */\nfunction DeliveryBadge({\n delivery,\n onClick,\n className,\n}: DeliveryBadgeProps) {\n const [isHovered, setIsHovered] = React.useState(false)\n const hasComments = delivery.comments.length > 0\n const visualState = getDeliveryVisualState(delivery)\n const styles = getLeftStrokeStyles(visualState, delivery.hasProductionRisk ?? false, isHovered)\n\n // Extract unique prefixes from elements, fallback to prefixScope\n const prefixTitle = React.useMemo(() => {\n // Get unique prefixes from elements\n const prefixSet = new Set<string>()\n if (delivery.elements && delivery.elements.length > 0) {\n for (const element of delivery.elements) {\n if (element.prefix) {\n prefixSet.add(element.prefix)\n }\n }\n }\n // Fallback to prefixScope if no elements\n if (prefixSet.size === 0 && delivery.prefixScope) {\n prefixSet.add(delivery.prefixScope)\n }\n \n const prefixes = Array.from(prefixSet)\n \n if (prefixes.length === 0) {\n return delivery.label // Fallback to original label\n }\n \n // Truncate if more than 3 prefixes\n if (prefixes.length > 3) {\n return `${prefixes.slice(0, 3).join(\" · \")} · +${prefixes.length - 3}`\n }\n \n return prefixes.join(\" · \")\n }, [delivery])\n\n // Calculate production progress percentage\n const productionProgress = React.useMemo(() => {\n if (delivery.producedTons !== undefined && delivery.totalTons !== undefined && delivery.totalTons > 0) {\n return Math.min((delivery.producedTons / delivery.totalTons) * 100, 100)\n }\n if (delivery.producedCount !== undefined && delivery.totalCount !== undefined && delivery.totalCount > 0) {\n return Math.min((delivery.producedCount / delivery.totalCount) * 100, 100)\n }\n if (delivery.loadedCount !== undefined && delivery.totalCount !== undefined && delivery.totalCount > 0) {\n return Math.min((delivery.loadedCount / delivery.totalCount) * 100, 100)\n }\n return 0\n }, [delivery])\n\n // Production display text\n const productionDisplay = React.useMemo(() => {\n if (delivery.producedTons !== undefined && delivery.totalTons !== undefined) {\n return `${delivery.producedTons}/${delivery.totalTons}t`\n }\n if (delivery.producedCount !== undefined && delivery.totalCount !== undefined) {\n return `${delivery.producedCount}/${delivery.totalCount}`\n }\n if (delivery.loadedCount !== undefined && delivery.totalCount !== undefined) {\n return `${delivery.loadedCount}/${delivery.totalCount}`\n }\n return null\n }, [delivery])\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n onClick?.()\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n e.stopPropagation()\n onClick?.()\n }\n }\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n // Position relative for comment dot\n \"relative\",\n // Full-width in cell, 90° corners\n \"w-full rounded-none\",\n // Sizing using Quantum tokens:\n // - h-[80px] card height\n // - px-6 = 24px horizontal (j3m.spacing.l)\n // - py-4 = 16px vertical (j3m.spacing.m)\n \"h-[80px] px-6 py-4\",\n // Layout\n \"flex items-center\",\n // Card base: white background, complete border\n \"bg-background border border-border\",\n // Left stroke for status\n styles.stroke,\n // Interactive states\n \"cursor-pointer transition-all duration-200 ease-out\",\n \"hover:-translate-y-0.5 hover:shadow-[var(--j3m-shadow-md)]\",\n \"active:translate-y-0 active:shadow-sm\",\n // Focus state\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-1\",\n // Greyed out for sent state\n visualState === \"sent\" && \"opacity-60\",\n className\n )}\n >\n {/* Comment indicator dot - top-right corner intersection */}\n {hasComments && (\n <span \n className=\"absolute -top-1 -right-1 h-3 w-3 rounded-full bg-primary ring-2 ring-background\"\n aria-label=\"Has comments\"\n />\n )}\n\n {/* Main content area - gap-3 (12px) between rows for breathing room */}\n <div className=\"flex flex-col justify-center gap-3 min-w-0 flex-1 overflow-hidden\">\n {/* Row 1: Prefix title + Status indicators - gap-2 (8px) within row */}\n <div className=\"flex items-center gap-2 overflow-hidden\">\n <span className={cn(\"text-sm font-semibold truncate\", styles.content)}>\n {prefixTitle}\n </span>\n \n {/* Sent checkmark */}\n {visualState === \"sent\" && (\n <Check className=\"h-4 w-4 text-green-600 dark:text-green-400 shrink-0\" />\n )}\n \n {/* Risk indicator */}\n {delivery.hasProductionRisk && (\n <AlertTriangle className=\"h-4 w-4 text-red-500 shrink-0\" />\n )}\n \n {/* Supplier name - pushed to right */}\n {delivery.supplierName && (\n <span className=\"text-xs text-muted-foreground truncate ml-auto\">\n {delivery.supplierName}\n </span>\n )}\n </div>\n \n {/* Row 2: Factory icon + Progress bar + tons - gap-2 (8px) within row */}\n <div className=\"flex items-center gap-2\">\n {/* Factory icon - same size as Planning Table */}\n <Factory className={cn(\"h-3.5 w-3.5 shrink-0\", styles.iconColor)} />\n \n {/* Progress bar - same styling as Planning Table */}\n <div className=\"flex-1 h-1.5 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden\">\n <div \n className={cn(\"h-full rounded-full transition-all\", styles.progressBg)}\n style={{ width: `${productionProgress}%` }}\n />\n </div>\n \n {/* Progress text */}\n {productionDisplay && (\n <span className={cn(\n \"text-xs tabular-nums font-medium shrink-0\",\n delivery.isReadyToUnload \n ? \"text-green-600 dark:text-green-400\"\n : delivery.hasProductionRisk\n ? \"text-red-600 dark:text-red-400\"\n : \"text-muted-foreground\"\n )}>\n {productionDisplay}\n </span>\n )}\n </div>\n </div>\n </button>\n )\n}\n\nexport { DeliveryBadge }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { addDays, isToday } from \"date-fns\"\nimport { ChevronLeft, ChevronRight, MessageSquare } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { ScrollArea } from \"../../components/scroll-area\"\nimport { DeliveryBadge } from \"./delivery-badge\"\nimport type { LoadingWeek, LoadingDelivery, LoadingComment } from \"./types\"\nimport { getShortDayLabel } from \"./types\"\n\nexport interface WeeklyLoadingViewProps {\n /** Week data */\n week: LoadingWeek\n /** Deliveries for the week */\n deliveries: LoadingDelivery[]\n /** Callback when a delivery is clicked */\n onDeliveryClick?: (delivery: LoadingDelivery) => void\n /** Callback for week navigation (optional) */\n onWeekChange?: (direction: \"prev\" | \"next\") => void\n /** Callback when day comment button is clicked */\n onDayCommentClick?: (dayOfWeek: number, date: Date) => void\n /** Show week navigation controls */\n showNavigation?: boolean\n /** Additional class names */\n className?: string\n}\n\n/**\n * WeeklyLoadingView - Clean weekly view with day columns\n * \n * Layout using Quantum spacing tokens:\n * - Columns = Mon-Fri (no vertical dividers)\n * - Day headers include comment button (top-right)\n * - Each column contains stacked delivery cards with gap-3 (j3m.spacing.s = 12px)\n * - Content-sized grid\n */\nfunction WeeklyLoadingView({\n week,\n deliveries,\n onDeliveryClick,\n onWeekChange,\n onDayCommentClick,\n showNavigation = true,\n className,\n}: WeeklyLoadingViewProps) {\n // Generate Mon-Fri days from week start\n const weekDays = React.useMemo(() => {\n const days: { date: Date; dayOfWeek: number; isToday: boolean }[] = []\n for (let i = 0; i < 5; i++) {\n const date = addDays(week.startDate, i)\n days.push({\n date,\n dayOfWeek: i + 1,\n isToday: isToday(date),\n })\n }\n return days\n }, [week.startDate])\n\n // Group deliveries by day\n const deliveriesByDay = React.useMemo(() => {\n const grouped = new Map<number, LoadingDelivery[]>()\n for (let i = 1; i <= 5; i++) {\n grouped.set(i, [])\n }\n for (const delivery of deliveries) {\n const dayOfWeek = delivery.date.getDay()\n if (dayOfWeek >= 1 && dayOfWeek <= 5) {\n const dayDeliveries = grouped.get(dayOfWeek) ?? []\n dayDeliveries.push(delivery)\n grouped.set(dayOfWeek, dayDeliveries)\n }\n }\n return grouped\n }, [deliveries])\n\n // Count comments per day (across all deliveries)\n const commentCountByDay = React.useMemo(() => {\n const counts = new Map<number, number>()\n for (let i = 1; i <= 5; i++) {\n counts.set(i, 0)\n }\n for (const delivery of deliveries) {\n const dayOfWeek = delivery.date.getDay()\n if (dayOfWeek >= 1 && dayOfWeek <= 5) {\n const current = counts.get(dayOfWeek) ?? 0\n counts.set(dayOfWeek, current + delivery.comments.length)\n }\n }\n return counts\n }, [deliveries])\n\n // Total deliveries count\n const totalDeliveries = deliveries.length\n\n return (\n <div className={cn(\"flex flex-col\", className)}>\n {/* Header - matches Big Calendar CalendarHeader style */}\n <div className=\"flex flex-col gap-4 border-b border-border p-4 lg:flex-row lg:items-center lg:justify-between\">\n {/* Left: Week info */}\n <div className=\"flex items-center gap-4\">\n {/* Week badge with live indicator */}\n <div className=\"flex items-center gap-2\">\n <span className={cn(\n \"text-2xl font-bold tabular-nums\",\n week.isCurrentWeek && \"text-primary\"\n )}>\n {week.label}\n </span>\n {week.isCurrentWeek && (\n <span className=\"relative flex h-2.5 w-2.5\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2.5 w-2.5 bg-primary\" />\n </span>\n )}\n </div>\n \n {/* Date range + count */}\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium\">{week.dateRange}</span>\n <span className=\"text-xs text-muted-foreground\">\n {totalDeliveries} {totalDeliveries === 1 ? \"delivery\" : \"deliveries\"}\n </span>\n </div>\n </div>\n\n {/* Right: Week navigation (optional) */}\n {showNavigation && onWeekChange && (\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onWeekChange(\"prev\")}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous week</span>\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n // Could reset to current week\n }}\n >\n Today\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onWeekChange(\"next\")}\n >\n <ChevronRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next week</span>\n </Button>\n </div>\n )}\n </div>\n\n {/* Week grid - Desktop: 5 columns, Mobile: stack vertically */}\n <ScrollArea className=\"flex-1\">\n {/* Desktop view */}\n <div className=\"hidden sm:block\">\n {/* Day headers - with comment button top-right */}\n <div className=\"grid grid-cols-5 border-b border-border bg-muted/30\">\n {weekDays.map(({ date, dayOfWeek, isToday: dayIsToday }) => {\n const dayCommentCount = commentCountByDay.get(dayOfWeek) ?? 0\n \n return (\n <div\n key={dayOfWeek}\n className={cn(\n // Relative for positioning comment button\n \"relative\",\n // Compact padding: py-2 px-3 (j3m.spacing.xs / j3m.spacing.s)\n \"flex items-center justify-center gap-2 py-2 px-3\",\n dayIsToday && \"bg-primary/5\"\n )}\n >\n {/* Day label and date */}\n <span className={cn(\n \"text-xs font-medium uppercase tracking-wide\",\n dayIsToday ? \"text-primary\" : \"text-muted-foreground\"\n )}>\n {getShortDayLabel(dayOfWeek)}\n </span>\n <span className={cn(\n \"text-base font-semibold tabular-nums\",\n dayIsToday ? \"text-primary\" : \"text-foreground\"\n )}>\n {date.getDate()}\n </span>\n \n {/* Comment button - top-right aligned */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"absolute top-1 right-1 h-7 w-7\",\n dayCommentCount > 0 && \"text-primary\"\n )}\n onClick={(e) => {\n e.stopPropagation()\n onDayCommentClick?.(dayOfWeek, date)\n }}\n >\n <div className=\"relative\">\n <MessageSquare className=\"h-4 w-4\" />\n {/* Comment count indicator dot */}\n {dayCommentCount > 0 && (\n <span className=\"absolute -top-1 -right-1 h-2 w-2 rounded-full bg-primary\" />\n )}\n </div>\n <span className=\"sr-only\">\n {dayCommentCount > 0 \n ? `${dayCommentCount} comments on ${getShortDayLabel(dayOfWeek)}`\n : `Add comment for ${getShortDayLabel(dayOfWeek)}`\n }\n </span>\n </Button>\n </div>\n )\n })}\n </div>\n\n {/* Day columns with stacked delivery cards */}\n <div className=\"grid grid-cols-5\">\n {weekDays.map(({ dayOfWeek, isToday: dayIsToday }) => {\n const dayDeliveries = deliveriesByDay.get(dayOfWeek) ?? []\n \n return (\n <div\n key={dayOfWeek}\n className={cn(\n // Column padding: p-3 = 12px (j3m.spacing.s)\n \"flex flex-col p-3\",\n dayIsToday && \"bg-primary/5\"\n )}\n >\n {/* Cards stack with gap-3 = 12px (j3m.spacing.s) */}\n <div className=\"flex flex-col gap-3\">\n {dayDeliveries.length > 0 ? (\n dayDeliveries.map((delivery) => (\n <DeliveryBadge\n key={delivery.id}\n delivery={delivery}\n onClick={() => onDeliveryClick?.(delivery)}\n />\n ))\n ) : (\n <div className=\"flex items-center justify-center py-6 text-sm text-muted-foreground/40\">\n —\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n\n {/* Mobile view - Stack days vertically */}\n <div className=\"sm:hidden divide-y divide-border\">\n {weekDays.map(({ date, dayOfWeek, isToday: dayIsToday }) => {\n const dayDeliveries = deliveriesByDay.get(dayOfWeek) ?? []\n const dayCommentCount = commentCountByDay.get(dayOfWeek) ?? 0\n \n return (\n <div\n key={dayOfWeek}\n className={cn(\n dayIsToday && \"bg-primary/5\"\n )}\n >\n {/* Day header - compact with comment button */}\n <div className=\"flex items-center justify-between px-4 py-2\">\n <div className=\"flex items-center gap-2\">\n <span className={cn(\n \"text-xs font-medium uppercase\",\n dayIsToday ? \"text-primary\" : \"text-muted-foreground\"\n )}>\n {getShortDayLabel(dayOfWeek)}\n </span>\n <span className={cn(\n \"text-base font-semibold tabular-nums\",\n dayIsToday ? \"text-primary\" : \"text-foreground\"\n )}>\n {date.getDate()}\n </span>\n {dayIsToday && (\n <span className=\"text-xs text-primary font-medium\">Today</span>\n )}\n </div>\n \n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground\">\n {dayDeliveries.length} {dayDeliveries.length === 1 ? \"delivery\" : \"deliveries\"}\n </span>\n \n {/* Comment button */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"h-7 w-7\",\n dayCommentCount > 0 && \"text-primary\"\n )}\n onClick={(e) => {\n e.stopPropagation()\n onDayCommentClick?.(dayOfWeek, date)\n }}\n >\n <div className=\"relative\">\n <MessageSquare className=\"h-4 w-4\" />\n {dayCommentCount > 0 && (\n <span className=\"absolute -top-1 -right-1 h-2 w-2 rounded-full bg-primary\" />\n )}\n </div>\n <span className=\"sr-only\">Comments</span>\n </Button>\n </div>\n </div>\n\n {/* Deliveries - padded container with gap-3 (j3m.spacing.s) */}\n <div className=\"flex flex-col gap-3 p-3 pt-0\">\n {dayDeliveries.length > 0 ? (\n dayDeliveries.map((delivery) => (\n <DeliveryBadge\n key={delivery.id}\n delivery={delivery}\n onClick={() => onDeliveryClick?.(delivery)}\n />\n ))\n ) : (\n <div className=\"text-sm text-muted-foreground/40 py-4 text-center\">\n —\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </ScrollArea>\n </div>\n )\n}\n\nexport { WeeklyLoadingView }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { \n ChevronLeft, \n Truck, \n Calendar, \n Package, \n MapPin,\n ChevronDown,\n Send,\n Plus,\n MessageSquare,\n Check,\n AlertTriangle,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../../components/button\"\nimport { Badge } from \"../../components/badge\"\nimport { ScrollArea } from \"../../components/scroll-area\"\nimport { Textarea } from \"../../components/textarea\"\nimport { Label } from \"../../components/label\"\nimport { Separator } from \"../../components/separator\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n DialogDescription,\n} from \"../../components/dialog\"\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../../components/collapsible\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../../components/table\"\nimport type { \n DeliveryDetailPageProps, \n LoadingComment, \n LoadingElementStatus,\n LoadingDeliveryStatus,\n LoadingDelivery,\n DeliveryVisualState,\n} from \"./types\"\nimport { getLoadingDeliveryStatusLabel, getLoadingElementStatusLabel, getDeliveryVisualState } from \"./types\"\n\n/**\n * Get badge variant for delivery status\n */\nfunction getStatusBadgeVariant(status: LoadingDeliveryStatus): \"default\" | \"secondary\" | \"outline\" | \"destructive\" {\n switch (status) {\n case \"shipped\":\n case \"delivered\":\n return \"default\"\n case \"loaded\":\n case \"in_progress\":\n return \"secondary\"\n case \"cancelled\":\n return \"destructive\"\n case \"planned\":\n default:\n return \"outline\"\n }\n}\n\n/**\n * Get badge classes for delivery status\n */\nfunction getStatusBadgeClasses(status: LoadingDeliveryStatus): string {\n switch (status) {\n case \"shipped\":\n case \"delivered\":\n return \"border-green-500 text-green-600 bg-green-50 dark:bg-green-950/50\"\n case \"loaded\":\n return \"border-blue-500 text-blue-600 bg-blue-50 dark:bg-blue-950/50\"\n case \"in_progress\":\n return \"border-amber-500 text-amber-600 bg-amber-50 dark:bg-amber-950/50\"\n case \"cancelled\":\n return \"\"\n case \"planned\":\n default:\n return \"border-muted-foreground/50 text-muted-foreground\"\n }\n}\n\n/**\n * Get badge classes for element status (neutral styling, non-critical)\n */\nfunction getElementStatusBadgeClasses(status: LoadingElementStatus): string {\n switch (status) {\n case \"loaded\":\n return \"border-green-500 text-green-600 bg-green-50 dark:bg-green-950/50\"\n case \"missing\":\n // Neutral/muted - NOT error/warning\n return \"border-muted-foreground/50 text-muted-foreground bg-muted/50\"\n case \"moved\":\n return \"border-blue-500 text-blue-600 bg-blue-50 dark:bg-blue-950/50\"\n case \"addon\":\n return \"border-purple-500 text-purple-600 bg-purple-50 dark:bg-purple-950/50\"\n default:\n return \"border-muted-foreground/50 text-muted-foreground\"\n }\n}\n\n/**\n * Get row background for element status (neutral styling)\n */\nfunction getElementRowBg(status: LoadingElementStatus): string {\n switch (status) {\n case \"loaded\":\n return \"bg-green-50/30 dark:bg-green-950/10\"\n case \"missing\":\n // Neutral background - not warning\n return \"bg-muted/30\"\n case \"moved\":\n return \"bg-blue-50/30 dark:bg-blue-950/10\"\n case \"addon\":\n return \"bg-purple-50/30 dark:bg-purple-950/10\"\n default:\n return \"\"\n }\n}\n\n/**\n * Add Comment Dialog - Modal for iPad/touch contexts\n * \n * No \"Applies to\" selector - comment is automatically tied to the delivery context.\n * Uses Quantum Dialog for reliable touch interactions.\n */\nfunction AddCommentDialog({\n open,\n onOpenChange,\n delivery,\n weekId,\n onAddComment,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n delivery: LoadingDelivery\n weekId: string\n onAddComment?: (comment: Omit<LoadingComment, \"id\" | \"createdAt\">) => void\n}) {\n const [commentText, setCommentText] = React.useState(\"\")\n\n const handleSubmit = () => {\n if (commentText.trim() && onAddComment) {\n // Auto-tie to delivery context (no selector needed)\n onAddComment({\n author: \"Current User\", // Would come from auth context in real app\n text: commentText.trim(),\n context: \"pre_unloading\",\n weekId,\n deliveryId: delivery.id,\n supplierId: delivery.supplierId,\n supplierName: delivery.supplierName,\n prefixId: delivery.prefixScope,\n prefixName: delivery.prefixScope,\n })\n setCommentText(\"\")\n onOpenChange(false)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n handleSubmit()\n }\n }\n\n // Reset form when dialog closes\n React.useEffect(() => {\n if (!open) {\n setCommentText(\"\")\n }\n }, [open])\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>Add pre-unloading note</DialogTitle>\n <DialogDescription>\n Add a note for <strong>{delivery.label}</strong> ({delivery.supplierName}\n {delivery.prefixScope && ` • ${delivery.prefixScope}`}).\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4 py-2\">\n {/* Comment textarea - no \"Applies to\" selector */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"comment-text\" className=\"text-sm font-medium\">\n Note\n </Label>\n <Textarea\n id=\"comment-text\"\n placeholder=\"Add a note before unloading...\"\n value={commentText}\n onChange={(e) => setCommentText(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"min-h-[120px] text-base resize-none\"\n autoFocus\n />\n <p className=\"text-xs text-muted-foreground\">\n ⌘+Enter to save\n </p>\n </div>\n </div>\n\n <DialogFooter className=\"gap-2 sm:gap-0\">\n <Button\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={!commentText.trim()}\n className=\"gap-1.5\"\n >\n <Send className=\"h-4 w-4\" />\n Save note\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n\n/**\n * Comments section with inline display and modal for adding\n */\nfunction CommentsSection({\n comments,\n delivery,\n weekId,\n onAddComment,\n}: {\n comments: LoadingComment[]\n delivery: LoadingDelivery\n weekId: string\n onAddComment?: (comment: Omit<LoadingComment, \"id\" | \"createdAt\">) => void\n}) {\n const [viewCommentsOpen, setViewCommentsOpen] = React.useState(true)\n const [addDialogOpen, setAddDialogOpen] = React.useState(false)\n\n const formatDate = (date: Date) => {\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n }).format(date)\n }\n\n return (\n <>\n <section className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <MessageSquare className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-semibold\">Notes before unloading</span>\n {comments.length > 0 && (\n <Badge variant=\"secondary\" className=\"text-[10px] h-5\">\n {comments.length}\n </Badge>\n )}\n </div>\n {/* Add button opens modal */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"gap-1.5 h-9\"\n onClick={() => setAddDialogOpen(true)}\n >\n <Plus className=\"h-4 w-4\" />\n Add note\n </Button>\n </div>\n\n {/* Comments list (collapsible) */}\n {comments.length > 0 ? (\n <Collapsible open={viewCommentsOpen} onOpenChange={setViewCommentsOpen}>\n <CollapsibleTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"w-full justify-between h-8 px-2\">\n <span className=\"text-xs font-medium\">\n {viewCommentsOpen ? \"Hide comments\" : \"Show comments\"}\n </span>\n <ChevronDown className={cn(\n \"h-4 w-4 transition-transform duration-200\",\n viewCommentsOpen && \"rotate-180\"\n )} />\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"space-y-2 pt-2\">\n {comments.map((comment) => (\n <div key={comment.id} className=\"rounded-lg bg-muted/50 p-3 space-y-1\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium\">{comment.author}</span>\n {comment.supplierName && (\n <Badge variant=\"outline\" className=\"text-[9px] px-1.5 py-0 h-4\">\n {comment.prefixName \n ? `${comment.supplierName} - ${comment.prefixName}`\n : comment.supplierName\n }\n </Badge>\n )}\n </div>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatDate(comment.createdAt)}\n </span>\n </div>\n <p className=\"text-sm\">{comment.text}</p>\n </div>\n ))}\n </CollapsibleContent>\n </Collapsible>\n ) : (\n <div className=\"rounded-lg border border-dashed p-4 text-center text-sm text-muted-foreground\">\n No pre-unloading notes yet. Add notes before confirming the load.\n </div>\n )}\n </section>\n\n {/* Add Comment Dialog - no \"Applies to\" selector */}\n <AddCommentDialog\n open={addDialogOpen}\n onOpenChange={setAddDialogOpen}\n delivery={delivery}\n weekId={weekId}\n onAddComment={onAddComment}\n />\n </>\n )\n}\n\n/**\n * Get visual state styling for delivery header\n */\nfunction getDeliveryHeaderStyles(state: DeliveryVisualState, hasRisk: boolean) {\n if (hasRisk) {\n return {\n iconBg: \"bg-red-100 dark:bg-red-950/50\",\n iconColor: \"text-red-600 dark:text-red-400\",\n }\n }\n \n switch (state) {\n case \"sent\":\n return {\n iconBg: \"bg-green-100 dark:bg-green-950/50\",\n iconColor: \"text-green-600 dark:text-green-400\",\n }\n case \"ready\":\n return {\n iconBg: \"bg-green-100 dark:bg-green-950/50\",\n iconColor: \"text-green-600 dark:text-green-400\",\n }\n default:\n return {\n iconBg: \"bg-muted\",\n iconColor: \"text-muted-foreground\",\n }\n }\n}\n\n/**\n * DeliveryDetailPage - Touch-first detail page for a delivery\n * \n * Shows:\n * - Delivery summary with visual state (sent/ready/normal)\n * - Production progress with risk indicators\n * - Elements table (view-only)\n * - Pre-unloading notes (Dialog for adding - no \"Applies to\" selector)\n * - Actions (Confirm load)\n */\nfunction DeliveryDetailPage({\n delivery,\n week,\n suppliers,\n userRole,\n currentSupplierId,\n onBack,\n onAddComment,\n onConfirmLoad,\n}: DeliveryDetailPageProps) {\n // Visual state\n const visualState = getDeliveryVisualState(delivery)\n const headerStyles = getDeliveryHeaderStyles(visualState, delivery.hasProductionRisk ?? false)\n\n // Calculate loading progress\n const loadedCount = delivery.loadedCount ?? delivery.elements.filter(e => e.status === \"loaded\").length\n const totalCount = delivery.totalCount ?? delivery.elements.length\n const loadedPercent = totalCount > 0 ? Math.round((loadedCount / totalCount) * 100) : 0\n\n // Production progress\n const producedCount = delivery.producedCount ?? loadedCount\n const producedPercent = totalCount > 0 ? Math.round((producedCount / totalCount) * 100) : 0\n\n // Group elements by status for display\n const elementsByStatus = React.useMemo(() => {\n const loaded = delivery.elements.filter(e => e.status === \"loaded\")\n const missing = delivery.elements.filter(e => e.status === \"missing\")\n const moved = delivery.elements.filter(e => e.status === \"moved\")\n const addons = delivery.elements.filter(e => e.status === \"addon\")\n return { loaded, missing, moved, addons }\n }, [delivery.elements])\n\n // Pre-unloading comments only\n const preUnloadingComments = delivery.comments.filter(c => c.context === \"pre_unloading\")\n\n return (\n <div className=\"flex flex-col h-full\">\n {/* Back button header */}\n <div className=\"flex items-center gap-2 px-4 py-3 border-b bg-background sticky top-0 z-10\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"gap-1 -ml-2\"\n onClick={onBack}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n Back\n </Button>\n </div>\n\n {/* Scrollable content */}\n <ScrollArea className=\"flex-1\">\n <div className=\"px-4 pb-6 space-y-6\">\n {/* ============ A) DELIVERY SUMMARY ============ */}\n <section className=\"pt-4 space-y-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-start gap-3\">\n {/* Truck icon with state styling */}\n <div className={cn(\n \"flex items-center justify-center h-12 w-12 rounded-xl shrink-0\",\n headerStyles.iconBg\n )}>\n <Truck className={cn(\"h-6 w-6\", headerStyles.iconColor)} />\n </div>\n\n <div>\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-lg font-semibold\">{delivery.label}</h1>\n {/* Sent checkmark */}\n {visualState === \"sent\" && (\n <Check className=\"h-5 w-5 text-green-600 dark:text-green-400\" />\n )}\n {/* Risk indicator */}\n {delivery.hasProductionRisk && (\n <AlertTriangle className=\"h-5 w-5 text-red-500\" />\n )}\n </div>\n <p className=\"text-sm text-muted-foreground\">\n {delivery.supplierName}\n {delivery.prefixScope && ` • ${delivery.prefixScope}`}\n </p>\n </div>\n </div>\n\n <div className=\"flex flex-col items-end gap-1.5\">\n <Badge \n variant={getStatusBadgeVariant(delivery.status)}\n className={cn(\"shrink-0\", getStatusBadgeClasses(delivery.status))}\n >\n {getLoadingDeliveryStatusLabel(delivery.status)}\n </Badge>\n {delivery.isReadyToUnload && (\n <Badge \n variant=\"outline\"\n className=\"bg-green-100 dark:bg-green-900/50 border-green-300 dark:border-green-700 text-green-700 dark:text-green-300\"\n >\n Ready to unload\n </Badge>\n )}\n </div>\n </div>\n\n {/* Risk warning banner */}\n {delivery.hasProductionRisk && (\n <div className=\"rounded-lg border-l-2 border-l-red-500 bg-red-50/50 dark:bg-red-950/30 p-3\">\n <div className=\"flex items-center gap-2\">\n <AlertTriangle className=\"h-4 w-4 text-red-600 dark:text-red-400 shrink-0\" />\n <span className=\"text-sm font-medium text-red-700 dark:text-red-400\">\n Production delay risk\n </span>\n </div>\n {delivery.riskReason && (\n <p className=\"text-sm text-red-600 dark:text-red-400 mt-1 ml-6\">\n {delivery.riskReason}\n </p>\n )}\n </div>\n )}\n\n {/* Metadata row */}\n <div className=\"flex flex-wrap items-center gap-4 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-1.5\">\n <Calendar className=\"h-4 w-4\" />\n <span>{delivery.date.toLocaleDateString(\"en-US\", { \n weekday: \"short\", \n month: \"short\", \n day: \"numeric\" \n })}</span>\n </div>\n {delivery.destination && (\n <div className=\"flex items-center gap-1.5\">\n <MapPin className=\"h-4 w-4\" />\n <span>{delivery.destination}</span>\n </div>\n )}\n </div>\n\n {/* Production / Loading progress */}\n <div className=\"rounded-lg bg-muted/50 p-4 space-y-3\">\n {/* Production progress */}\n {(delivery.producedCount !== undefined || delivery.producedTons !== undefined) && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Production</span>\n <span className={cn(\n \"text-sm font-semibold tabular-nums\",\n delivery.isReadyToUnload \n ? \"text-green-600 dark:text-green-400\"\n : delivery.hasProductionRisk\n ? \"text-red-600 dark:text-red-400\"\n : \"\"\n )}>\n {delivery.producedTons !== undefined && delivery.totalTons !== undefined\n ? `${delivery.producedTons} / ${delivery.totalTons} tons`\n : `Produced ${producedCount} / ${totalCount}`\n }\n {delivery.isReadyToUnload && \" ✓\"}\n </span>\n </div>\n <div className=\"h-2 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden\">\n <div \n className={cn(\n \"h-full rounded-full transition-all\",\n delivery.isReadyToUnload ? \"bg-green-500\" :\n delivery.hasProductionRisk ? \"bg-red-500\" :\n \"bg-amber-500\"\n )}\n style={{ width: `${producedPercent}%` }}\n />\n </div>\n </div>\n )}\n\n <Separator className=\"my-2\" />\n\n {/* Loading progress */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Loading Progress</span>\n <span className=\"text-sm font-semibold tabular-nums\">\n Loaded {loadedCount} / {totalCount}\n </span>\n </div>\n <div className=\"h-2 bg-black/10 dark:bg-white/10 rounded-full overflow-hidden\">\n <div \n className={cn(\n \"h-full rounded-full transition-all\",\n loadedPercent === 100 ? \"bg-green-500\" : \"bg-primary\"\n )}\n style={{ width: `${loadedPercent}%` }}\n />\n </div>\n {/* Status breakdown */}\n <div className=\"flex items-center gap-3 flex-wrap text-xs\">\n {elementsByStatus.loaded.length > 0 && (\n <span className=\"text-green-600 dark:text-green-400\">\n {elementsByStatus.loaded.length} Loaded\n </span>\n )}\n {elementsByStatus.missing.length > 0 && (\n <span className=\"text-muted-foreground\">\n {elementsByStatus.missing.length} Missing\n </span>\n )}\n {elementsByStatus.moved.length > 0 && (\n <span className=\"text-blue-600 dark:text-blue-400\">\n {elementsByStatus.moved.length} Moved\n </span>\n )}\n {elementsByStatus.addons.length > 0 && (\n <span className=\"text-purple-600 dark:text-purple-400\">\n {elementsByStatus.addons.length} Add-on\n </span>\n )}\n </div>\n </div>\n </div>\n </section>\n\n {/* ============ B) ELEMENTS TO UNLOAD (DataTable) ============ */}\n {delivery.elements.length > 0 && (\n <section className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Package className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-semibold\">Elements to Unload</span>\n <span className=\"text-xs text-muted-foreground ml-auto\">\n {delivery.elements.length} total\n </span>\n </div>\n\n <div className=\"rounded-lg border overflow-hidden\">\n <Table>\n <TableHeader>\n <TableRow className=\"bg-sidebar hover:bg-sidebar\">\n <TableHead className=\"font-semibold\">Prefix</TableHead>\n <TableHead className=\"font-semibold\">Type</TableHead>\n <TableHead className=\"font-semibold text-right\">Weight</TableHead>\n <TableHead className=\"font-semibold text-right\">Size (m²)</TableHead>\n <TableHead className=\"font-semibold text-center\">Status</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {delivery.elements.map((element) => (\n <TableRow \n key={element.id}\n className={getElementRowBg(element.status)}\n >\n <TableCell className=\"font-medium\">\n {element.prefix}\n </TableCell>\n <TableCell>\n {element.type}\n </TableCell>\n <TableCell className=\"text-right tabular-nums\">\n {element.weight ? (\n <span>{element.weight} {element.weightUnit || \"kg\"}</span>\n ) : (\n \"—\"\n )}\n </TableCell>\n <TableCell className=\"text-right tabular-nums\">\n {element.sizeSqm ?? \"—\"}\n </TableCell>\n <TableCell>\n <div className=\"flex flex-col items-center gap-1\">\n <Badge \n variant=\"outline\"\n className={cn(\n \"text-[10px] h-5\",\n getElementStatusBadgeClasses(element.status)\n )}\n >\n {getLoadingElementStatusLabel(element.status)}\n </Badge>\n {/* Show reference for moved/addon */}\n {element.status === \"moved\" && element.actualDeliveryLabel && (\n <span className=\"text-[9px] text-blue-600 dark:text-blue-400\">\n → {element.actualDeliveryLabel}\n </span>\n )}\n {element.status === \"addon\" && element.originalDeliveryLabel && (\n <span className=\"text-[9px] text-purple-600 dark:text-purple-400\">\n from {element.originalDeliveryLabel}\n </span>\n )}\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </section>\n )}\n\n {/* ============ C) PRE-UNLOADING NOTES / COMMENTS ============ */}\n <CommentsSection\n comments={preUnloadingComments}\n delivery={delivery}\n weekId={week.weekKey}\n onAddComment={onAddComment}\n />\n\n {/* ============ D) ACTIONS ============ */}\n {onConfirmLoad && (\n <section className=\"pt-4\">\n <Button \n className=\"w-full h-12 text-base\"\n onClick={() => onConfirmLoad(delivery.id)}\n >\n Start Loading\n </Button>\n <p className=\"text-xs text-muted-foreground text-center mt-2\">\n Comments are saved independently.\n </p>\n </section>\n )}\n </div>\n </ScrollArea>\n </div>\n )\n}\n\nexport { DeliveryDetailPage }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Card, CardContent } from \"../../components/card\"\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from \"../../components/sheet\"\nimport { WeeklyLoadingView } from \"./weekly-loading-view\"\nimport { DeliveryDetailPage } from \"./delivery-detail-page\"\nimport type { SupplierWeeklyLoadingProps, LoadingDelivery } from \"./types\"\n\n/**\n * SupplierWeeklyLoading - Weekly loading view matching Big Calendar patterns\n * \n * Features:\n * - Clean weekly grid (Mon-Fri) with compact delivery badges\n * - Sheet-based drilldown for delivery details\n * - Responsive layout (desktop centered, mobile full-width)\n * - Role-based supplier/prefix filtering\n * \n * Layout matches Big Calendar:\n * - Bordered card container\n * - Internal header with week navigation\n * - Scrollable content area\n * - Sheet overlay for details (not page replacement)\n */\nfunction SupplierWeeklyLoading({\n week,\n deliveries,\n suppliers,\n userRole,\n currentSupplierId,\n onDeliveryClick,\n onBack,\n onAddComment,\n onConfirmLoad,\n onWeekChange,\n showNavigation = true,\n bordered = true,\n className,\n}: SupplierWeeklyLoadingProps & {\n onWeekChange?: (direction: \"prev\" | \"next\") => void\n showNavigation?: boolean\n bordered?: boolean\n}) {\n // Sheet state for delivery detail\n const [selectedDelivery, setSelectedDelivery] = React.useState<LoadingDelivery | null>(null)\n const [sheetOpen, setSheetOpen] = React.useState(false)\n\n // Handle delivery click (open sheet)\n const handleDeliveryClick = (delivery: LoadingDelivery) => {\n setSelectedDelivery(delivery)\n setSheetOpen(true)\n onDeliveryClick?.(delivery)\n }\n\n // Handle sheet close\n const handleSheetClose = () => {\n setSheetOpen(false)\n // Delay clearing selection for animation\n setTimeout(() => setSelectedDelivery(null), 200)\n onBack?.()\n }\n\n const Wrapper = bordered ? Card : \"div\"\n const Content = bordered ? CardContent : \"div\"\n\n return (\n <>\n <Wrapper\n className={cn(\n \"flex flex-col overflow-hidden\",\n // Removed fixed min-height - content-driven sizing\n !bordered && \"border border-border bg-card rounded-lg\",\n className\n )}\n >\n <Content className={cn(\"flex-1 overflow-hidden p-0\", !bordered && \"\")}>\n <WeeklyLoadingView\n week={week}\n deliveries={deliveries}\n onDeliveryClick={handleDeliveryClick}\n onWeekChange={onWeekChange}\n showNavigation={showNavigation}\n />\n </Content>\n </Wrapper>\n\n {/* Delivery Detail Sheet */}\n <Sheet open={sheetOpen} onOpenChange={(open) => !open && handleSheetClose()}>\n <SheetContent \n side=\"right\" \n className=\"w-full sm:max-w-lg p-0 overflow-hidden\"\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>\n {selectedDelivery?.label ?? \"Delivery Details\"}\n </SheetTitle>\n </SheetHeader>\n {selectedDelivery && (\n <DeliveryDetailPage\n delivery={selectedDelivery}\n week={week}\n suppliers={suppliers}\n userRole={userRole}\n currentSupplierId={currentSupplierId}\n onBack={handleSheetClose}\n onAddComment={onAddComment}\n onConfirmLoad={onConfirmLoad}\n />\n )}\n </SheetContent>\n </Sheet>\n </>\n )\n}\n\nexport { SupplierWeeklyLoading }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Truck, Package, MessageSquare, ChevronRight, Check, AlertTriangle } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Badge } from \"../../components/badge\"\nimport type { LoadingDelivery, LoadingDeliveryStatus, DeliveryVisualState } from \"./types\"\nimport { getLoadingDeliveryStatusLabel, getDeliveryVisualState } from \"./types\"\n\nexport interface DeliveryCardProps {\n /** Delivery data */\n delivery: LoadingDelivery\n /** Callback when card is tapped */\n onTap?: () => void\n /** Additional class names */\n className?: string\n}\n\n/**\n * Get badge variant for delivery status\n */\nfunction getStatusBadgeVariant(status: LoadingDeliveryStatus): \"default\" | \"secondary\" | \"outline\" | \"destructive\" {\n switch (status) {\n case \"shipped\":\n case \"delivered\":\n return \"default\"\n case \"loaded\":\n case \"in_progress\":\n return \"secondary\"\n case \"cancelled\":\n return \"destructive\"\n case \"planned\":\n default:\n return \"outline\"\n }\n}\n\n/**\n * Get badge classes for delivery status (non-critical styling)\n */\nfunction getStatusBadgeClasses(status: LoadingDeliveryStatus): string {\n switch (status) {\n case \"shipped\":\n case \"delivered\":\n return \"border-green-500 text-green-600 bg-green-50 dark:bg-green-950/50\"\n case \"loaded\":\n return \"border-blue-500 text-blue-600 bg-blue-50 dark:bg-blue-950/50\"\n case \"in_progress\":\n return \"border-amber-500 text-amber-600 bg-amber-50 dark:bg-amber-950/50\"\n case \"cancelled\":\n return \"\"\n case \"planned\":\n default:\n return \"border-muted-foreground/50 text-muted-foreground\"\n }\n}\n\n/**\n * Get left-stroke styling for 3-state visual model\n * Matches Calibration table: uses border-l-2 (j3m.stroke.m = 2px) for status indication\n */\nfunction getLeftStrokeStyles(state: DeliveryVisualState, hasRisk: boolean, isHovered: boolean) {\n if (hasRisk) {\n // Risk: red left stroke (matches Calibration table forcedRed)\n return {\n stroke: \"border-l-2 border-l-red-500\",\n iconColor: \"text-muted-foreground\",\n }\n }\n\n switch (state) {\n case \"sent\":\n // Sent: subtle green stroke + greyed out content\n return {\n stroke: \"border-l-2 border-l-green-500/50\",\n iconColor: \"text-muted-foreground/40\",\n }\n case \"ready\":\n // Ready: green left stroke (matches Calibration valid)\n return {\n stroke: \"border-l-2 border-l-green-500\",\n iconColor: \"text-muted-foreground\",\n }\n default:\n // Normal: transparent stroke, shows on hover (like Calibration pending)\n return {\n stroke: isHovered \n ? \"border-l-2 border-l-border\" \n : \"border-l-2 border-l-transparent\",\n iconColor: \"text-muted-foreground\",\n }\n }\n}\n\n/**\n * DeliveryCard - Touch-first card for displaying a delivery.\n * \n * Matches Calibration table visual language:\n * - Full-width (no max-width)\n * - 90° corners (j3m.radius.none = rounded-none)\n * - Left stroke only for status (j3m.stroke.m = border-l-2)\n * - 56px min-height for iPad tap targets\n * \n * Visual States (left stroke):\n * - Sent: Green stroke (subtle) + greyed content + checkmark\n * - Ready: Green stroke + \"Ready\" badge\n * - Risk: Red stroke (same as Calibration)\n * - Normal: Transparent stroke (border on hover)\n */\nfunction DeliveryCard({\n delivery,\n onTap,\n className,\n}: DeliveryCardProps) {\n const [isHovered, setIsHovered] = React.useState(false)\n const hasComments = delivery.comments.length > 0\n const visualState = getDeliveryVisualState(delivery)\n const styles = getLeftStrokeStyles(visualState, delivery.hasProductionRisk ?? false, isHovered)\n\n // Production display\n const productionDisplay = React.useMemo(() => {\n if (delivery.producedTons !== undefined && delivery.totalTons !== undefined) {\n return `${delivery.producedTons} / ${delivery.totalTons}t produced`\n }\n if (delivery.producedCount !== undefined && delivery.totalCount !== undefined) {\n return `${delivery.producedCount} / ${delivery.totalCount} produced`\n }\n if (delivery.loadedCount !== undefined && delivery.totalCount !== undefined) {\n return `Loaded ${delivery.loadedCount} / ${delivery.totalCount}`\n }\n return null\n }, [delivery])\n\n const handleClick = () => {\n onTap?.()\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n onTap?.()\n }\n }\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n // Full-width, 90° corners (j3m.radius.none)\n \"w-full rounded-none\",\n // Touch-friendly sizing - 56px min-height for iPad\n \"min-h-[56px] p-4\",\n // Card styling: white background, standard border\n \"bg-background border border-border\",\n // Left stroke for status (j3m.stroke.m = 2px)\n styles.stroke,\n // Hover/tap state - lift effect like Calibration\n \"cursor-pointer transition-all duration-200 ease-out\",\n \"hover:-translate-y-0.5 hover:shadow-[var(--j3m-shadow-md)]\",\n \"active:translate-y-0 active:shadow-sm\",\n // Focus state\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary\",\n // Greyed out for sent state\n visualState === \"sent\" && \"opacity-60\",\n className\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n {/* Left: Icon + delivery info */}\n <div className=\"flex items-start gap-3 min-w-0 flex-1\">\n {/* Truck icon container */}\n <div className={cn(\n \"flex items-center justify-center h-10 w-10 rounded-md shrink-0 bg-muted/50\"\n )}>\n <Truck className={cn(\"h-5 w-5\", styles.iconColor)} />\n </div>\n\n {/* Delivery info */}\n <div className=\"flex flex-col gap-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold truncate\">\n {delivery.label}\n </span>\n {/* Sent checkmark */}\n {visualState === \"sent\" && (\n <Check className=\"h-4 w-4 text-green-600 dark:text-green-400 shrink-0\" />\n )}\n {/* Ready badge */}\n {visualState === \"ready\" && (\n <Badge \n variant=\"outline\" \n className=\"text-[9px] px-1.5 py-0 h-4 bg-green-100 dark:bg-green-900/50 border-green-300 dark:border-green-700 text-green-700 dark:text-green-300\"\n >\n Ready\n </Badge>\n )}\n {/* Risk indicator */}\n {delivery.hasProductionRisk && (\n <AlertTriangle className=\"h-4 w-4 text-red-500 shrink-0\" />\n )}\n {hasComments && (\n <div className=\"relative shrink-0\">\n <MessageSquare className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <span className=\"absolute -top-0.5 -right-0.5 h-2 w-2 rounded-full bg-primary\" />\n </div>\n )}\n </div>\n \n <span className=\"text-xs text-muted-foreground truncate\">\n {delivery.supplierName}\n {delivery.prefixScope && ` • ${delivery.prefixScope}`}\n </span>\n\n {/* Production/loaded progress */}\n {productionDisplay && (\n <div className=\"flex items-center gap-1.5 text-xs\">\n <Package className=\"h-3 w-3 text-muted-foreground\" />\n <span className={cn(\n delivery.isReadyToUnload \n ? \"text-green-600 dark:text-green-400 font-medium\"\n : delivery.hasProductionRisk\n ? \"text-red-600 dark:text-red-400\"\n : \"text-muted-foreground\"\n )}>\n {delivery.isReadyToUnload ? \"✓ \" : \"\"}{productionDisplay}\n </span>\n </div>\n )}\n </div>\n </div>\n\n {/* Right: Status + chevron */}\n <div className=\"flex items-center gap-2 shrink-0\">\n <Badge \n variant={getStatusBadgeVariant(delivery.status)}\n className={cn(\"text-[10px] h-5\", getStatusBadgeClasses(delivery.status))}\n >\n {getLoadingDeliveryStatusLabel(delivery.status)}\n </Badge>\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n </div>\n </div>\n )\n}\n\nexport { DeliveryCard }\n","/**\n * Event Calendar Types\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n// Event color options\nexport type TEventColor = \"blue\" | \"green\" | \"red\" | \"yellow\" | \"purple\" | \"orange\"\n\n// Badge display variants\nexport type TBadgeVariant = \"dot\" | \"colored\" | \"mixed\"\n\n// Calendar view types\nexport type TCalendarView = \"month\" | \"week\" | \"day\" | \"year\" | \"agenda\"\n\n// User interface\nexport interface IUser {\n id: string\n name: string\n picturePath?: string\n}\n\n// Event interface\nexport interface IEvent {\n id: string\n title: string\n description?: string\n startDate: string // ISO string\n endDate: string // ISO string\n color: TEventColor\n user: IUser\n}\n\n// Calendar context state\nexport interface ICalendarState {\n selectedDate: Date\n selectedUserId: string | null\n events: IEvent[]\n users: IUser[]\n badgeVariant: TBadgeVariant\n view: TCalendarView\n}\n\n// Calendar context actions\nexport interface ICalendarActions {\n setSelectedDate: (date: Date) => void\n setSelectedUserId: (userId: string | null) => void\n setEvents: (events: IEvent[]) => void\n addEvent: (event: IEvent) => void\n updateEvent: (event: IEvent) => void\n deleteEvent: (eventId: string) => void\n setBadgeVariant: (variant: TBadgeVariant) => void\n setView: (view: TCalendarView) => void\n goToToday: () => void\n goToPrevious: () => void\n goToNext: () => void\n}\n\n// Combined context type\nexport interface ICalendarContext extends ICalendarState, ICalendarActions {}\n\n// Event dialog props\nexport interface IEventDialogProps {\n mode: \"add\" | \"edit\"\n event?: IEvent\n defaultDate?: Date\n onSubmit: (event: Omit<IEvent, \"id\"> | IEvent) => void\n onClose: () => void\n}\n\n// View component props\nexport interface IViewProps {\n events: IEvent[]\n selectedDate: Date\n onEventClick?: (event: IEvent) => void\n onDateClick?: (date: Date) => void\n onEventDrop?: (event: IEvent, newStart: Date, newEnd: Date) => void\n}\n\n// Navigation header props\nexport interface ICalendarHeaderProps {\n showViewSwitcher?: boolean\n showUserFilter?: boolean\n showBadgeVariant?: boolean\n showToday?: boolean\n}\n\n// Day cell props for month view\nexport interface IDayCellProps {\n date: Date\n events: IEvent[]\n isCurrentMonth: boolean\n isToday: boolean\n isSelected: boolean\n onDateClick?: (date: Date) => void\n onEventClick?: (event: IEvent) => void\n onEventDrop?: (event: IEvent, newDate: Date) => void\n}\n\n// Time slot props for week/day view\nexport interface ITimeSlotProps {\n date: Date\n hour: number\n events: IEvent[]\n onTimeClick?: (date: Date, hour: number) => void\n onEventClick?: (event: IEvent) => void\n onEventDrop?: (event: IEvent, newStart: Date) => void\n}\n\n// Event badge props\nexport interface IEventBadgeProps {\n event: IEvent\n variant: TBadgeVariant\n onClick?: (event: IEvent) => void\n isDragging?: boolean\n}\n\n// Drag and drop context\nexport interface IDragContext {\n draggedEvent: IEvent | null\n setDraggedEvent: (event: IEvent | null) => void\n isDragging: boolean\n}\n\n// Working hours configuration (per-day, matching original)\nexport type TWorkingHours = { [key: number]: { from: number; to: number } }\n\n// Visible hours configuration\nexport type TVisibleHours = { from: number; to: number }\n\n// Simple working hours (legacy)\nexport interface IWorkingHours {\n start: number // Hour (0-23)\n end: number // Hour (0-23)\n}\n\n// Default working hours (Mon-Fri 9-17, Sat-Sun closed)\nexport const DEFAULT_WORKING_HOURS: TWorkingHours = {\n 0: { from: 0, to: 0 }, // Sunday - closed\n 1: { from: 9, to: 17 }, // Monday\n 2: { from: 9, to: 17 }, // Tuesday\n 3: { from: 9, to: 17 }, // Wednesday\n 4: { from: 9, to: 17 }, // Thursday\n 5: { from: 9, to: 17 }, // Friday\n 6: { from: 0, to: 0 }, // Saturday - closed\n}\n\n// Default visible hours\nexport const DEFAULT_VISIBLE_HOURS: TVisibleHours = { from: 0, to: 24 }\n\n// Calendar cell for month view\nexport interface ICalendarCell {\n day: number\n currentMonth: boolean\n date: Date\n}\n\n// Calendar configuration\nexport interface ICalendarConfig {\n workingHours?: TWorkingHours\n visibleHours?: TVisibleHours\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 // Sunday = 0\n locale?: string\n timeFormat?: \"12h\" | \"24h\"\n}\n\n// Event position for rendering (internal use)\nexport interface IEventPosition {\n top: number\n left: number\n width: number\n height: number\n}\n\n// Color mapping to CSS classes/tokens\nexport const EVENT_COLORS: Record<TEventColor, { bg: string; text: string; border: string }> = {\n blue: {\n bg: \"bg-blue-500/20\",\n text: \"text-blue-700 dark:text-blue-300\",\n border: \"border-blue-500\",\n },\n green: {\n bg: \"bg-green-500/20\",\n text: \"text-green-700 dark:text-green-300\",\n border: \"border-green-500\",\n },\n red: {\n bg: \"bg-red-500/20\",\n text: \"text-red-700 dark:text-red-300\",\n border: \"border-red-500\",\n },\n yellow: {\n bg: \"bg-yellow-500/20\",\n text: \"text-yellow-700 dark:text-yellow-300\",\n border: \"border-yellow-500\",\n },\n purple: {\n bg: \"bg-purple-500/20\",\n text: \"text-purple-700 dark:text-purple-300\",\n border: \"border-purple-500\",\n },\n orange: {\n bg: \"bg-primary/20\",\n text: \"text-primary dark:text-orange-300\",\n border: \"border-primary\",\n },\n}\n\n// View labels for UI\nexport const VIEW_LABELS: Record<TCalendarView, string> = {\n month: \"Month\",\n week: \"Week\",\n day: \"Day\",\n year: \"Year\",\n agenda: \"Agenda\",\n}\n\n// Badge variant labels for UI\nexport const BADGE_VARIANT_LABELS: Record<TBadgeVariant, string> = {\n dot: \"Dot\",\n colored: \"Colored\",\n mixed: \"Mixed\",\n}\n\n","/**\n * Event Calendar Context\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport {\n addDays,\n addMonths,\n addWeeks,\n addYears,\n subDays,\n subMonths,\n subWeeks,\n subYears,\n} from \"date-fns\"\n\nimport type {\n IEvent,\n IUser,\n TBadgeVariant,\n TCalendarView,\n TWorkingHours,\n TVisibleHours,\n} from \"./types\"\nimport {\n DEFAULT_WORKING_HOURS,\n DEFAULT_VISIBLE_HOURS,\n} from \"./types\"\n\n// Extended context interface with working hours and visible hours\nexport interface IExtendedCalendarContext {\n // State\n selectedDate: Date\n selectedUserId: string | null\n events: IEvent[]\n users: IUser[]\n badgeVariant: TBadgeVariant\n view: TCalendarView\n workingHours: TWorkingHours\n visibleHours: TVisibleHours\n // Actions\n setSelectedDate: (date: Date) => void\n setSelectedUserId: (userId: string | null) => void\n setEvents: (events: IEvent[]) => void\n addEvent: (event: IEvent) => void\n updateEvent: (event: IEvent) => void\n deleteEvent: (eventId: string) => void\n setBadgeVariant: (variant: TBadgeVariant) => void\n setView: (view: TCalendarView) => void\n setWorkingHours: (hours: TWorkingHours) => void\n setVisibleHours: (hours: TVisibleHours) => void\n goToToday: () => void\n goToPrevious: () => void\n goToNext: () => void\n}\n\nconst CalendarContext = React.createContext<IExtendedCalendarContext | null>(null)\n\nexport interface EventCalendarProviderProps {\n children: React.ReactNode\n events?: IEvent[]\n users?: IUser[]\n defaultDate?: Date\n defaultView?: TCalendarView\n defaultBadgeVariant?: TBadgeVariant\n defaultUserId?: string | null\n defaultWorkingHours?: TWorkingHours\n defaultVisibleHours?: TVisibleHours\n onEventAdd?: (event: IEvent) => void\n onEventUpdate?: (event: IEvent) => void\n onEventDelete?: (eventId: string) => void\n}\n\nexport function EventCalendarProvider({\n children,\n events: initialEvents = [],\n users: initialUsers = [],\n defaultDate = new Date(),\n defaultView = \"month\",\n defaultBadgeVariant = \"colored\",\n defaultUserId = null,\n defaultWorkingHours = DEFAULT_WORKING_HOURS,\n defaultVisibleHours = DEFAULT_VISIBLE_HOURS,\n onEventAdd,\n onEventUpdate,\n onEventDelete,\n}: EventCalendarProviderProps) {\n const [selectedDate, setSelectedDate] = React.useState<Date>(defaultDate)\n const [selectedUserId, setSelectedUserId] = React.useState<string | null>(defaultUserId)\n const [events, setEventsState] = React.useState<IEvent[]>(initialEvents)\n const [users] = React.useState<IUser[]>(initialUsers)\n const [badgeVariant, setBadgeVariant] = React.useState<TBadgeVariant>(defaultBadgeVariant)\n const [view, setView] = React.useState<TCalendarView>(defaultView)\n const [workingHours, setWorkingHours] = React.useState<TWorkingHours>(defaultWorkingHours)\n const [visibleHours, setVisibleHours] = React.useState<TVisibleHours>(defaultVisibleHours)\n\n // Sync events when initialEvents prop changes\n React.useEffect(() => {\n setEventsState(initialEvents)\n }, [initialEvents])\n\n const setEvents = React.useCallback((newEvents: IEvent[]) => {\n setEventsState(newEvents)\n }, [])\n\n const addEvent = React.useCallback((event: IEvent) => {\n setEventsState((prev) => [...prev, event])\n onEventAdd?.(event)\n }, [onEventAdd])\n\n const updateEvent = React.useCallback((event: IEvent) => {\n setEventsState((prev) =>\n prev.map((e) => (e.id === event.id ? event : e))\n )\n onEventUpdate?.(event)\n }, [onEventUpdate])\n\n const deleteEvent = React.useCallback((eventId: string) => {\n setEventsState((prev) => prev.filter((e) => e.id !== eventId))\n onEventDelete?.(eventId)\n }, [onEventDelete])\n\n const goToToday = React.useCallback(() => {\n setSelectedDate(new Date())\n }, [])\n\n const goToPrevious = React.useCallback(() => {\n setSelectedDate((current) => {\n switch (view) {\n case \"day\":\n return subDays(current, 1)\n case \"week\":\n return subWeeks(current, 1)\n case \"month\":\n return subMonths(current, 1)\n case \"year\":\n return subYears(current, 1)\n case \"agenda\":\n return subMonths(current, 1)\n default:\n return current\n }\n })\n }, [view])\n\n const goToNext = React.useCallback(() => {\n setSelectedDate((current) => {\n switch (view) {\n case \"day\":\n return addDays(current, 1)\n case \"week\":\n return addWeeks(current, 1)\n case \"month\":\n return addMonths(current, 1)\n case \"year\":\n return addYears(current, 1)\n case \"agenda\":\n return addMonths(current, 1)\n default:\n return current\n }\n })\n }, [view])\n\n const contextValue = React.useMemo<IExtendedCalendarContext>(\n () => ({\n // State\n selectedDate,\n selectedUserId,\n events,\n users,\n badgeVariant,\n view,\n workingHours,\n visibleHours,\n // Actions\n setSelectedDate,\n setSelectedUserId,\n setEvents,\n addEvent,\n updateEvent,\n deleteEvent,\n setBadgeVariant,\n setView,\n setWorkingHours,\n setVisibleHours,\n goToToday,\n goToPrevious,\n goToNext,\n }),\n [\n selectedDate,\n selectedUserId,\n events,\n users,\n badgeVariant,\n view,\n workingHours,\n visibleHours,\n setEvents,\n addEvent,\n updateEvent,\n deleteEvent,\n goToToday,\n goToPrevious,\n goToNext,\n ]\n )\n\n return (\n <CalendarContext.Provider value={contextValue}>\n {children}\n </CalendarContext.Provider>\n )\n}\n\nexport function useEventCalendar() {\n const context = React.useContext(CalendarContext)\n if (!context) {\n throw new Error(\"useEventCalendar must be used within an EventCalendarProvider\")\n }\n return context\n}\n\n// Optional hook to get filtered events by user\nexport function useFilteredEvents() {\n const { events, selectedUserId } = useEventCalendar()\n \n return React.useMemo(() => {\n if (!selectedUserId) return events\n return events.filter((event) => event.user.id === selectedUserId)\n }, [events, selectedUserId])\n}\n\n// Optional hook to get events for a specific date range\nexport function useEventsInRange(startDate: Date, endDate: Date) {\n const filteredEvents = useFilteredEvents()\n \n return React.useMemo(() => {\n return filteredEvents.filter((event) => {\n const eventStart = new Date(event.startDate)\n const eventEnd = new Date(event.endDate)\n return eventStart <= endDate && eventEnd >= startDate\n })\n }, [filteredEvents, startDate, endDate])\n}\n\nexport { CalendarContext }\n","/**\n * Event Calendar Helpers\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\nimport {\n addDays,\n addMinutes,\n addMonths,\n addWeeks,\n addYears,\n subDays,\n subMonths,\n subWeeks,\n subYears,\n differenceInDays,\n differenceInMinutes,\n eachDayOfInterval,\n eachHourOfInterval,\n endOfDay,\n endOfMonth,\n endOfWeek,\n endOfYear,\n format,\n getDay,\n getHours,\n getMinutes,\n isSameDay,\n isSameMonth,\n isSameWeek,\n isSameYear,\n isToday,\n isWithinInterval,\n parseISO,\n setHours,\n setMinutes,\n startOfDay,\n startOfMonth,\n startOfWeek,\n startOfYear,\n areIntervalsOverlapping,\n} from \"date-fns\"\n\nimport type {\n IEvent,\n ICalendarCell,\n TCalendarView,\n TWorkingHours,\n TVisibleHours,\n} from \"./types\"\n\n// ============================================================================\n// Header Helper Functions (from original)\n// ============================================================================\n\n/**\n * Get range text for header navigation\n */\nexport function rangeText(view: TCalendarView, date: Date) {\n const formatString = \"MMM d, yyyy\"\n let start: Date\n let end: Date\n\n switch (view) {\n case \"agenda\":\n start = startOfMonth(date)\n end = endOfMonth(date)\n break\n case \"year\":\n start = startOfYear(date)\n end = endOfYear(date)\n break\n case \"month\":\n start = startOfMonth(date)\n end = endOfMonth(date)\n break\n case \"week\":\n start = startOfWeek(date)\n end = endOfWeek(date)\n break\n case \"day\":\n return format(date, formatString)\n default:\n return \"Error while formatting\"\n }\n\n return `${format(start, formatString)} - ${format(end, formatString)}`\n}\n\n/**\n * Navigate date based on view\n */\nexport function navigateDate(\n date: Date,\n view: TCalendarView,\n direction: \"previous\" | \"next\"\n): Date {\n const operations = {\n agenda: direction === \"next\" ? addMonths : subMonths,\n year: direction === \"next\" ? addYears : subYears,\n month: direction === \"next\" ? addMonths : subMonths,\n week: direction === \"next\" ? addWeeks : subWeeks,\n day: direction === \"next\" ? addDays : subDays,\n }\n\n return operations[view](date, 1)\n}\n\n/**\n * Get events count for a date based on view\n */\nexport function getEventsCount(\n events: IEvent[],\n date: Date,\n view: TCalendarView\n): number {\n const compareFns = {\n agenda: isSameMonth,\n year: isSameYear,\n day: isSameDay,\n week: isSameWeek,\n month: isSameMonth,\n }\n\n return events.filter((event) =>\n compareFns[view](new Date(event.startDate), date)\n ).length\n}\n\n// ============================================================================\n// Week and Day View Helper Functions (from original)\n// ============================================================================\n\n/**\n * Get current events (happening now)\n */\nexport function getCurrentEvents(events: IEvent[]) {\n const now = new Date()\n return (\n events.filter((event) =>\n isWithinInterval(now, {\n start: parseISO(event.startDate),\n end: parseISO(event.endDate),\n })\n ) || []\n )\n}\n\n/**\n * Group events by time slots to handle overlapping\n */\nexport function groupEvents(dayEvents: IEvent[]) {\n const sortedEvents = dayEvents.sort(\n (a, b) => parseISO(a.startDate).getTime() - parseISO(b.startDate).getTime()\n )\n const groups: IEvent[][] = []\n\n for (const event of sortedEvents) {\n const eventStart = parseISO(event.startDate)\n\n let placed = false\n for (const group of groups) {\n const lastEventInGroup = group[group.length - 1]\n const lastEventEnd = parseISO(lastEventInGroup.endDate)\n\n if (eventStart >= lastEventEnd) {\n group.push(event)\n placed = true\n break\n }\n }\n\n if (!placed) groups.push([event])\n }\n\n return groups\n}\n\n/**\n * Get event block style for week/day view\n * Returns pixel-based positioning for 96px/hour grid\n */\nexport function getEventBlockStyle(\n event: IEvent,\n day: Date,\n groupIndex: number,\n groupSize: number,\n visibleHoursRange?: { from: number; to: number },\n hourHeight: number = 96\n) {\n const startDate = parseISO(event.startDate)\n const endDate = parseISO(event.endDate)\n const dayStart = new Date(day)\n dayStart.setHours(0, 0, 0, 0)\n \n const eventStart = startDate < dayStart ? dayStart : startDate\n const startMinutes = differenceInMinutes(eventStart, dayStart)\n const durationMinutes = differenceInMinutes(endDate, eventStart)\n\n // Calculate pixel position based on 96px per hour\n const visibleStartMinutes = (visibleHoursRange?.from ?? 0) * 60\n const topMinutes = startMinutes - visibleStartMinutes\n const topPx = (topMinutes / 60) * hourHeight\n \n // Calculate pixel height based on duration\n const heightPx = Math.max((durationMinutes / 60) * hourHeight, hourHeight / 4) // Min 15 min height\n\n const width = 100 / groupSize\n const left = groupIndex * width\n\n return { \n top: `${topPx}px`, \n height: `${heightPx}px`,\n width: `${width}%`, \n left: `${left}%` \n }\n}\n\n/**\n * Check if hour is working hour (per-day configuration)\n */\nexport function isWorkingHour(\n day: Date,\n hour: number,\n workingHours: TWorkingHours\n) {\n const dayIndex = day.getDay() as keyof typeof workingHours\n const dayHours = workingHours[dayIndex]\n return hour >= dayHours.from && hour < dayHours.to\n}\n\n/**\n * Get visible hours with adjustment for events\n */\nexport function getVisibleHours(\n visibleHours: TVisibleHours,\n singleDayEvents: IEvent[]\n) {\n let earliestEventHour = visibleHours.from\n let latestEventHour = visibleHours.to\n\n singleDayEvents.forEach((event) => {\n const startHour = parseISO(event.startDate).getHours()\n const endTime = parseISO(event.endDate)\n const endHour = endTime.getHours() + (endTime.getMinutes() > 0 ? 1 : 0)\n if (startHour < earliestEventHour) earliestEventHour = startHour\n if (endHour > latestEventHour) latestEventHour = endHour\n })\n\n latestEventHour = Math.min(latestEventHour, 24)\n\n const hours = Array.from(\n { length: latestEventHour - earliestEventHour },\n (_, i) => i + earliestEventHour\n )\n\n return { hours, earliestEventHour, latestEventHour }\n}\n\n// ============================================================================\n// Month View Helper Functions (from original)\n// ============================================================================\n\n/**\n * Get calendar cells for month view\n */\nexport function getCalendarCells(selectedDate: Date): ICalendarCell[] {\n const currentYear = selectedDate.getFullYear()\n const currentMonth = selectedDate.getMonth()\n\n const getDaysInMonth = (year: number, month: number) =>\n new Date(year, month + 1, 0).getDate()\n const getFirstDayOfMonth = (year: number, month: number) =>\n new Date(year, month, 1).getDay()\n\n const daysInMonth = getDaysInMonth(currentYear, currentMonth)\n const firstDayOfMonth = getFirstDayOfMonth(currentYear, currentMonth)\n const daysInPrevMonth = getDaysInMonth(currentYear, currentMonth - 1)\n const totalDays = firstDayOfMonth + daysInMonth\n\n const prevMonthCells = Array.from({ length: firstDayOfMonth }, (_, i) => ({\n day: daysInPrevMonth - firstDayOfMonth + i + 1,\n currentMonth: false,\n date: new Date(\n currentYear,\n currentMonth - 1,\n daysInPrevMonth - firstDayOfMonth + i + 1\n ),\n }))\n\n const currentMonthCells = Array.from({ length: daysInMonth }, (_, i) => ({\n day: i + 1,\n currentMonth: true,\n date: new Date(currentYear, currentMonth, i + 1),\n }))\n\n const nextMonthCells = Array.from(\n { length: (7 - (totalDays % 7)) % 7 },\n (_, i) => ({\n day: i + 1,\n currentMonth: false,\n date: new Date(currentYear, currentMonth + 1, i + 1),\n })\n )\n\n return [...prevMonthCells, ...currentMonthCells, ...nextMonthCells]\n}\n\n/**\n * Calculate event positions for month view (handles multi-day events)\n */\nexport function calculateMonthEventPositions(\n multiDayEvents: IEvent[],\n singleDayEvents: IEvent[],\n selectedDate: Date\n) {\n const monthStart = startOfMonth(selectedDate)\n const monthEnd = endOfMonth(selectedDate)\n\n const eventPositions: { [key: string]: number } = {}\n const occupiedPositions: { [key: string]: boolean[] } = {}\n\n eachDayOfInterval({ start: monthStart, end: monthEnd }).forEach((day) => {\n occupiedPositions[day.toISOString()] = [false, false, false]\n })\n\n const sortedEvents = [\n ...multiDayEvents.sort((a, b) => {\n const aDuration = differenceInDays(\n parseISO(a.endDate),\n parseISO(a.startDate)\n )\n const bDuration = differenceInDays(\n parseISO(b.endDate),\n parseISO(b.startDate)\n )\n return (\n bDuration - aDuration ||\n parseISO(a.startDate).getTime() - parseISO(b.startDate).getTime()\n )\n }),\n ...singleDayEvents.sort(\n (a, b) =>\n parseISO(a.startDate).getTime() - parseISO(b.startDate).getTime()\n ),\n ]\n\n sortedEvents.forEach((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n const eventDays = eachDayOfInterval({\n start: eventStart < monthStart ? monthStart : eventStart,\n end: eventEnd > monthEnd ? monthEnd : eventEnd,\n })\n\n let position = -1\n\n for (let i = 0; i < 3; i++) {\n if (\n eventDays.every((day) => {\n const dayPositions = occupiedPositions[startOfDay(day).toISOString()]\n return dayPositions && !dayPositions[i]\n })\n ) {\n position = i\n break\n }\n }\n\n if (position !== -1) {\n eventDays.forEach((day) => {\n const dayKey = startOfDay(day).toISOString()\n occupiedPositions[dayKey][position] = true\n })\n eventPositions[event.id] = position\n }\n })\n\n return eventPositions\n}\n\n/**\n * Get events for a specific month cell with positions\n */\nexport function getMonthCellEvents(\n date: Date,\n events: IEvent[],\n eventPositions: Record<string, number>\n) {\n const eventsForDate = events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n return (\n (date >= eventStart && date <= eventEnd) ||\n isSameDay(date, eventStart) ||\n isSameDay(date, eventEnd)\n )\n })\n\n return eventsForDate\n .map((event) => ({\n ...event,\n position: eventPositions[event.id] ?? -1,\n isMultiDay: event.startDate !== event.endDate,\n }))\n .sort((a, b) => {\n if (a.isMultiDay && !b.isMultiDay) return -1\n if (!a.isMultiDay && b.isMultiDay) return 1\n return a.position - b.position\n })\n}\n\n// ============================================================================\n// Date Navigation\n// ============================================================================\n\n/**\n * Get the days of the month grid (including days from prev/next months)\n */\nexport function getMonthDays(\n date: Date,\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0\n): Date[] {\n const start = startOfWeek(startOfMonth(date), { weekStartsOn })\n const end = endOfWeek(endOfMonth(date), { weekStartsOn })\n return eachDayOfInterval({ start, end })\n}\n\n/**\n * Get the days of a week\n */\nexport function getWeekDays(\n date: Date,\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0\n): Date[] {\n const start = startOfWeek(date, { weekStartsOn })\n const end = endOfWeek(date, { weekStartsOn })\n return eachDayOfInterval({ start, end })\n}\n\n/**\n * Get hours of a day\n */\nexport function getDayHours(date: Date, start = 0, end = 24): Date[] {\n const dayStart = setMinutes(setHours(date, start), 0)\n const dayEnd = setMinutes(setHours(date, end - 1), 59)\n return eachHourOfInterval({ start: dayStart, end: dayEnd })\n}\n\n/**\n * Get months of a year\n */\nexport function getYearMonths(date: Date): Date[] {\n const start = startOfYear(date)\n const months: Date[] = []\n for (let i = 0; i < 12; i++) {\n months.push(new Date(start.getFullYear(), i, 1))\n }\n return months\n}\n\n// ============================================================================\n// Event Helpers\n// ============================================================================\n\n/**\n * Filter events for a specific date\n */\nexport function getEventsForDate(events: IEvent[], date: Date): IEvent[] {\n return events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n return (\n isWithinInterval(date, {\n start: startOfDay(eventStart),\n end: endOfDay(eventEnd),\n }) ||\n isSameDay(eventStart, date) ||\n isSameDay(eventEnd, date)\n )\n })\n}\n\n/**\n * Filter events for a date range\n */\nexport function getEventsInRange(\n events: IEvent[],\n start: Date,\n end: Date\n): IEvent[] {\n return events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n return (\n (eventStart >= start && eventStart <= end) ||\n (eventEnd >= start && eventEnd <= end) ||\n (eventStart <= start && eventEnd >= end)\n )\n })\n}\n\n/**\n * Split events into single-day and multi-day\n */\nexport function splitEventsByDuration(events: IEvent[]): {\n singleDayEvents: IEvent[]\n multiDayEvents: IEvent[]\n} {\n const singleDayEvents: IEvent[] = []\n const multiDayEvents: IEvent[] = []\n\n events.forEach((event) => {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n if (isSameDay(start, end)) {\n singleDayEvents.push(event)\n } else {\n multiDayEvents.push(event)\n }\n })\n\n return { singleDayEvents, multiDayEvents }\n}\n\n/**\n * Check if an event spans multiple days\n */\nexport function isMultiDayEvent(event: IEvent): boolean {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return !isSameDay(start, end)\n}\n\n/**\n * Get the number of days an event spans\n */\nexport function getEventDuration(event: IEvent): number {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return differenceInDays(end, start) + 1\n}\n\n/**\n * Get the duration of an event in minutes\n */\nexport function getEventDurationMinutes(event: IEvent): number {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return differenceInMinutes(end, start)\n}\n\n/**\n * Sort events by start date, then by duration (longer first)\n */\nexport function sortEvents(events: IEvent[]): IEvent[] {\n return [...events].sort((a, b) => {\n const startDiff =\n parseISO(a.startDate).getTime() - parseISO(b.startDate).getTime()\n if (startDiff !== 0) return startDiff\n // Longer events first\n return getEventDuration(b) - getEventDuration(a)\n })\n}\n\n// ============================================================================\n// Time Helpers\n// ============================================================================\n\n/**\n * Get the top position percentage for an event in time view\n */\nexport function getTimePosition(\n event: IEvent,\n visibleHoursRange?: { from: number; to: number }\n): number {\n const start = parseISO(event.startDate)\n const hours = getHours(start)\n const minutes = getMinutes(start)\n\n const startHour = visibleHoursRange?.from ?? 0\n const totalMinutes = (hours - startHour) * 60 + minutes\n const totalDayMinutes = ((visibleHoursRange?.to ?? 24) - startHour) * 60\n\n return (totalMinutes / totalDayMinutes) * 100\n}\n\n/**\n * Get the height percentage for an event in time view\n */\nexport function getTimeHeight(\n event: IEvent,\n visibleHoursRange?: { from: number; to: number }\n): number {\n const duration = getEventDurationMinutes(event)\n const totalDayMinutes =\n ((visibleHoursRange?.to ?? 24) - (visibleHoursRange?.from ?? 0)) * 60\n return Math.min((duration / totalDayMinutes) * 100, 100)\n}\n\n/**\n * Format time based on 12h or 24h format\n */\nexport function formatTime(date: Date, use24h = false): string {\n return format(date, use24h ? \"HH:mm\" : \"h:mm a\")\n}\n\n// ============================================================================\n// Display Helpers\n// ============================================================================\n\n/**\n * Get the week day names\n */\nexport function getWeekDayNames(\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0,\n shortNames = true\n): string[] {\n const days = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ]\n const rotated = [...days.slice(weekStartsOn), ...days.slice(0, weekStartsOn)]\n return shortNames ? rotated.map((d) => d.slice(0, 3)) : rotated\n}\n\n/**\n * Get display label for calendar header\n */\nexport function getHeaderLabel(date: Date, view: string): string {\n switch (view) {\n case \"day\":\n return format(date, \"EEEE, MMMM d, yyyy\")\n case \"week\":\n const weekStart = startOfWeek(date)\n const weekEnd = endOfWeek(date)\n if (weekStart.getMonth() === weekEnd.getMonth()) {\n return format(weekStart, \"MMMM d\") + \" - \" + format(weekEnd, \"d, yyyy\")\n }\n return format(weekStart, \"MMM d\") + \" - \" + format(weekEnd, \"MMM d, yyyy\")\n case \"month\":\n return format(date, \"MMMM yyyy\")\n case \"year\":\n return format(date, \"yyyy\")\n case \"agenda\":\n return format(date, \"MMMM yyyy\")\n default:\n return format(date, \"MMMM yyyy\")\n }\n}\n\n/**\n * Get the date range for the current view\n */\nexport function getViewDateRange(\n date: Date,\n view: string\n): { start: Date; end: Date } {\n switch (view) {\n case \"day\":\n return { start: startOfDay(date), end: endOfDay(date) }\n case \"week\":\n return { start: startOfWeek(date), end: endOfWeek(date) }\n case \"month\":\n return { start: startOfMonth(date), end: endOfMonth(date) }\n case \"year\":\n return { start: startOfYear(date), end: endOfYear(date) }\n case \"agenda\":\n return { start: startOfMonth(date), end: endOfMonth(date) }\n default:\n return { start: startOfMonth(date), end: endOfMonth(date) }\n }\n}\n\n/**\n * Format date range for display\n */\nexport function formatDateRange(start: Date, end: Date): string {\n if (isSameDay(start, end)) {\n return format(start, \"MMM d, yyyy\")\n }\n if (start.getFullYear() === end.getFullYear()) {\n if (start.getMonth() === end.getMonth()) {\n return format(start, \"MMM d\") + \" - \" + format(end, \"d, yyyy\")\n }\n return format(start, \"MMM d\") + \" - \" + format(end, \"MMM d, yyyy\")\n }\n return format(start, \"MMM d, yyyy\") + \" - \" + format(end, \"MMM d, yyyy\")\n}\n\n/**\n * Check if a date is today\n */\nexport { isToday, isSameDay, isSameMonth }\n\n/**\n * Get day of week (0-6)\n */\nexport { getDay }\n\n// ============================================================================\n// Event Creation Helpers\n// ============================================================================\n\n/**\n * Create a new event with default values\n */\nexport function createDefaultEvent(\n startDate: Date,\n duration = 60 // minutes\n): Omit<IEvent, \"id\"> {\n return {\n title: \"\",\n description: \"\",\n startDate: startDate.toISOString(),\n endDate: addMinutes(startDate, duration).toISOString(),\n color: \"blue\",\n user: {\n id: \"\",\n name: \"\",\n },\n }\n}\n\n/**\n * Generate a unique ID for an event\n */\nexport function generateEventId(): string {\n return `event_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`\n}\n\n// ============================================================================\n// Drag and Drop Helpers\n// ============================================================================\n\n/**\n * Calculate new event dates after drag and drop\n */\nexport function calculateDropDates(\n event: IEvent,\n newStartDate: Date\n): { startDate: string; endDate: string } {\n const originalStart = parseISO(event.startDate)\n const originalEnd = parseISO(event.endDate)\n const duration = differenceInMinutes(originalEnd, originalStart)\n\n const newStart = newStartDate\n const newEnd = addMinutes(newStart, duration)\n\n return {\n startDate: newStart.toISOString(),\n endDate: newEnd.toISOString(),\n }\n}\n\n/**\n * Snap a date to the nearest time interval\n */\nexport function snapToInterval(date: Date, intervalMinutes = 15): Date {\n const minutes = getMinutes(date)\n const snappedMinutes = Math.round(minutes / intervalMinutes) * intervalMinutes\n return setMinutes(date, snappedMinutes)\n}\n\n// Export areIntervalsOverlapping for use in views\nexport { areIntervalsOverlapping, parseISO, format }\n","/**\n * Event Badge Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format, parseISO } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport type { IEvent, IEventBadgeProps, TBadgeVariant, TEventColor } from \"./types\"\n\n// Color classes for each event color - matching original big-calendar style\nconst colorClasses: Record<TEventColor, {\n dot: string\n bg: string\n text: string\n border: string\n solid: string\n}> = {\n blue: {\n dot: \"bg-blue-500\",\n bg: \"bg-blue-50 dark:bg-blue-950/50\",\n text: \"text-blue-600 dark:text-blue-400\",\n border: \"border-l-blue-500\",\n solid: \"bg-blue-500\",\n },\n green: {\n dot: \"bg-green-500\",\n bg: \"bg-green-50 dark:bg-green-950/50\",\n text: \"text-green-600 dark:text-green-400\",\n border: \"border-l-green-500\",\n solid: \"bg-green-500\",\n },\n red: {\n dot: \"bg-red-500\",\n bg: \"bg-red-50 dark:bg-red-950/50\",\n text: \"text-red-600 dark:text-red-400\",\n border: \"border-l-red-500\",\n solid: \"bg-red-500\",\n },\n yellow: {\n dot: \"bg-yellow-500\",\n bg: \"bg-yellow-50 dark:bg-yellow-950/50\",\n text: \"text-yellow-600 dark:text-yellow-400\",\n border: \"border-l-yellow-500\",\n solid: \"bg-yellow-500\",\n },\n purple: {\n dot: \"bg-purple-500\",\n bg: \"bg-purple-50 dark:bg-purple-950/50\",\n text: \"text-purple-600 dark:text-purple-400\",\n border: \"border-l-purple-500\",\n solid: \"bg-purple-500\",\n },\n orange: {\n dot: \"bg-primary\",\n bg: \"bg-orange-50 dark:bg-orange-950/50\",\n text: \"text-primary dark:text-orange-400\",\n border: \"border-l-primary\",\n solid: \"bg-primary\",\n },\n}\n\nexport interface EventBadgeProps extends Omit<IEventBadgeProps, \"onClick\"> {\n className?: string\n showTime?: boolean\n compact?: boolean\n onClick?: (event: IEvent, e: React.MouseEvent) => void\n}\n\nexport function EventBadge({\n event,\n variant = \"colored\",\n className,\n showTime = false,\n compact = false,\n isDragging = false,\n onClick,\n}: EventBadgeProps) {\n const colors = colorClasses[event.color]\n const startTime = format(parseISO(event.startDate), \"h:mm a\")\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n onClick?.(event, e)\n }\n\n if (variant === \"dot\") {\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"flex items-center gap-1.5 rounded-sm px-1.5 py-0.5 text-left text-xs transition-colors\",\n \"hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isDragging && \"opacity-50\",\n className\n )}\n >\n <span className={cn(\"size-2 shrink-0 rounded-full\", colors.dot)} />\n <span className=\"truncate text-foreground\">{event.title}</span>\n {showTime && (\n <span className=\"shrink-0 text-muted-foreground\">{startTime}</span>\n )}\n </button>\n )\n }\n\n if (variant === \"mixed\") {\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"flex items-center gap-1.5 rounded-sm border-l-2 px-1.5 py-0.5 text-left text-xs transition-colors\",\n \"hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n colors.border,\n isDragging && \"opacity-50\",\n className\n )}\n >\n <span className=\"truncate text-foreground\">{event.title}</span>\n {showTime && (\n <span className=\"shrink-0 text-muted-foreground\">{startTime}</span>\n )}\n </button>\n )\n }\n\n // Default: colored variant with left border stroke (matching original)\n // Content aligned to top-left for timeline views where events span multiple slots\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"flex flex-col items-start rounded-sm border-l-[3px] text-left text-xs transition-colors\",\n \"hover:opacity-80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n colors.border,\n colors.bg,\n colors.text,\n compact ? \"px-1.5 py-0.5\" : \"px-2 py-1\",\n isDragging && \"opacity-50 shadow-lg\",\n className\n )}\n >\n <span className=\"truncate font-medium max-w-full\">{event.title}</span>\n {showTime && (\n <span className=\"shrink-0 text-muted-foreground\">{startTime}</span>\n )}\n </button>\n )\n}\n\n// More events indicator\nexport interface MoreEventsProps {\n count: number\n onClick?: () => void\n className?: string\n}\n\nexport function MoreEvents({ count, onClick, className }: MoreEventsProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"w-full rounded-sm px-2 py-0.5 text-left text-xs text-muted-foreground transition-colors\",\n \"hover:bg-muted hover:text-foreground\",\n className\n )}\n >\n {count} more...\n </button>\n )\n}\n\n// Current time indicator for week/day views\nexport interface TimeIndicatorProps {\n className?: string\n}\n\nexport function TimeIndicator({ className }: TimeIndicatorProps) {\n const [now, setNow] = React.useState(new Date())\n\n React.useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 60000) // Update every minute\n return () => clearInterval(interval)\n }, [])\n\n const hours = now.getHours()\n const minutes = now.getMinutes()\n const topPercent = ((hours * 60 + minutes) / (24 * 60)) * 100\n\n return (\n <div\n className={cn(\n \"pointer-events-none absolute left-0 right-0 z-20 flex items-center\",\n className\n )}\n style={{ top: `${topPercent}%` }}\n >\n <div className=\"size-2.5 -translate-x-1/2 rounded-full bg-red-500\" />\n <div className=\"h-0.5 flex-1 bg-red-500\" />\n </div>\n )\n}\n\n","/**\n * Date Badge Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface DateBadgeProps {\n date: Date\n className?: string\n}\n\nexport function DateBadge({ date, className }: DateBadgeProps) {\n return (\n <div \n className={cn(\n \"flex flex-col w-14 overflow-hidden border border-border rounded-md\",\n className\n )}\n >\n {/* Month abbreviation - dark background */}\n <div className=\"bg-foreground text-background text-[10px] font-bold text-center py-1.5 uppercase tracking-wider\">\n {format(date, \"MMM\")}\n </div>\n {/* Day number - light background */}\n <div className=\"bg-background text-foreground text-2xl font-bold text-center py-2.5\">\n {format(date, \"d\")}\n </div>\n </div>\n )\n}\n\n","/**\n * Drag and Drop Context\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\n\nimport type { IEvent, IDragContext } from \"./types\"\nimport { calculateDropDates, snapToInterval } from \"./helpers\"\nimport { useEventCalendar } from \"./calendar-context\"\n\nconst DragContext = React.createContext<IDragContext | null>(null)\n\nexport interface DragProviderProps {\n children: React.ReactNode\n snapMinutes?: number\n onDragStart?: (event: IEvent) => void\n onDragEnd?: (event: IEvent, newStart: Date, newEnd: Date) => void\n}\n\nexport function DragProvider({\n children,\n snapMinutes = 15,\n onDragStart,\n onDragEnd,\n}: DragProviderProps) {\n const [draggedEvent, setDraggedEventState] = React.useState<IEvent | null>(null)\n const [isDragging, setIsDragging] = React.useState(false)\n const { updateEvent } = useEventCalendar()\n\n const setDraggedEvent = React.useCallback((event: IEvent | null) => {\n setDraggedEventState(event)\n setIsDragging(!!event)\n if (event) {\n onDragStart?.(event)\n }\n }, [onDragStart])\n\n const handleDrop = React.useCallback((newStartDate: Date) => {\n if (!draggedEvent) return\n\n const snappedDate = snapToInterval(newStartDate, snapMinutes)\n const { startDate, endDate } = calculateDropDates(draggedEvent, snappedDate)\n\n const updatedEvent: IEvent = {\n ...draggedEvent,\n startDate,\n endDate,\n }\n\n updateEvent(updatedEvent)\n onDragEnd?.(updatedEvent, new Date(startDate), new Date(endDate))\n setDraggedEvent(null)\n }, [draggedEvent, snapMinutes, updateEvent, onDragEnd, setDraggedEvent])\n\n const contextValue = React.useMemo<IDragContext>(\n () => ({\n draggedEvent,\n setDraggedEvent,\n isDragging,\n }),\n [draggedEvent, setDraggedEvent, isDragging]\n )\n\n return (\n <DragContext.Provider value={contextValue}>\n <DragDropHandler onDrop={handleDrop}>\n {children}\n </DragDropHandler>\n </DragContext.Provider>\n )\n}\n\nexport function useDrag() {\n const context = React.useContext(DragContext)\n if (!context) {\n throw new Error(\"useDrag must be used within a DragProvider\")\n }\n return context\n}\n\n// Internal component to handle drop coordinates\ninterface DragDropHandlerProps {\n children: React.ReactNode\n onDrop: (date: Date) => void\n}\n\nfunction DragDropHandler({ children, onDrop }: DragDropHandlerProps) {\n return <>{children}</>\n}\n\n// Draggable event wrapper\nexport interface DraggableEventProps {\n event: IEvent\n children: React.ReactNode\n disabled?: boolean\n}\n\nexport function DraggableEvent({\n event,\n children,\n disabled = false,\n}: DraggableEventProps) {\n const { setDraggedEvent, isDragging, draggedEvent } = useDrag()\n const isDragged = draggedEvent?.id === event.id\n\n const handleDragStart = (e: React.DragEvent) => {\n if (disabled) return\n e.dataTransfer.effectAllowed = \"move\"\n e.dataTransfer.setData(\"text/plain\", event.id)\n setDraggedEvent(event)\n }\n\n const handleDragEnd = () => {\n setDraggedEvent(null)\n }\n\n return (\n <div\n draggable={!disabled}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n className={isDragged ? \"opacity-50\" : \"\"}\n style={{ cursor: disabled ? \"default\" : \"grab\" }}\n >\n {children}\n </div>\n )\n}\n\n// Droppable zone for calendar cells\nexport interface DroppableZoneProps {\n date: Date\n children: React.ReactNode\n onDrop?: (event: IEvent, date: Date) => void\n className?: string\n}\n\nexport function DroppableZone({\n date,\n children,\n onDrop,\n className,\n}: DroppableZoneProps) {\n const { draggedEvent, setDraggedEvent } = useDrag()\n const { updateEvent } = useEventCalendar()\n const [isOver, setIsOver] = React.useState(false)\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = \"move\"\n setIsOver(true)\n }\n\n const handleDragLeave = () => {\n setIsOver(false)\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n setIsOver(false)\n\n if (!draggedEvent) return\n\n const { startDate, endDate } = calculateDropDates(draggedEvent, date)\n const updatedEvent: IEvent = {\n ...draggedEvent,\n startDate,\n endDate,\n }\n\n updateEvent(updatedEvent)\n onDrop?.(updatedEvent, date)\n setDraggedEvent(null)\n }\n\n return (\n <div\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n className={className}\n data-drag-over={isOver}\n >\n {children}\n </div>\n )\n}\n\n// Hook to make an element droppable with time calculation\nexport interface UseDroppableOptions {\n date: Date\n hour?: number\n minute?: number\n onDrop?: (event: IEvent, newDate: Date) => void\n}\n\nexport function useDroppable({ date, hour, minute = 0, onDrop }: UseDroppableOptions) {\n const { draggedEvent, setDraggedEvent } = useDrag()\n const { updateEvent } = useEventCalendar()\n const [isOver, setIsOver] = React.useState(false)\n\n const dropTargetDate = React.useMemo(() => {\n const targetDate = new Date(date)\n if (hour !== undefined) {\n targetDate.setHours(hour, minute, 0, 0)\n }\n return targetDate\n }, [date, hour, minute])\n\n const handleDragOver = React.useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = \"move\"\n if (!isOver) setIsOver(true)\n }, [isOver])\n\n const handleDragLeave = React.useCallback(() => {\n setIsOver(false)\n }, [])\n\n const handleDrop = React.useCallback((e: React.DragEvent) => {\n e.preventDefault()\n setIsOver(false)\n\n if (!draggedEvent) return\n\n const { startDate, endDate } = calculateDropDates(draggedEvent, dropTargetDate)\n const updatedEvent: IEvent = {\n ...draggedEvent,\n startDate,\n endDate,\n }\n\n updateEvent(updatedEvent)\n onDrop?.(updatedEvent, dropTargetDate)\n setDraggedEvent(null)\n }, [draggedEvent, dropTargetDate, updateEvent, onDrop, setDraggedEvent])\n\n return {\n isOver,\n dropProps: {\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n \"data-drag-over\": isOver,\n },\n }\n}\n\n// Hook to make an element draggable\nexport function useDraggable(event: IEvent, disabled = false) {\n const { setDraggedEvent, draggedEvent } = useDrag()\n const isDragged = draggedEvent?.id === event.id\n\n const handleDragStart = React.useCallback((e: React.DragEvent) => {\n if (disabled) return\n e.dataTransfer.effectAllowed = \"move\"\n e.dataTransfer.setData(\"text/plain\", event.id)\n setDraggedEvent(event)\n }, [disabled, event, setDraggedEvent])\n\n const handleDragEnd = React.useCallback(() => {\n setDraggedEvent(null)\n }, [setDraggedEvent])\n\n return {\n isDragged,\n dragProps: {\n draggable: !disabled,\n onDragStart: handleDragStart,\n onDragEnd: handleDragEnd,\n style: { cursor: disabled ? \"default\" : \"grab\" },\n },\n }\n}\n\nexport { DragContext }\n\n","/**\n * Month View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format, isSameDay, parseISO, startOfDay } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { EventBadge, MoreEvents } from \"./event-badge\"\nimport { useDroppable, useDraggable } from \"./dnd-context\"\nimport {\n getCalendarCells,\n calculateMonthEventPositions,\n getMonthCellEvents,\n isToday,\n isSameMonth,\n splitEventsByDuration,\n} from \"./helpers\"\nimport type { IEvent, IViewProps } from \"./types\"\n\nconst WEEK_DAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n\n// Draggable wrapper for events\nfunction DraggableEventWrapper({\n event,\n children,\n}: {\n event: IEvent\n children: React.ReactNode\n}) {\n const { isDragged, dragProps } = useDraggable(event)\n\n return (\n <div\n {...dragProps}\n className={cn(\n \"transition-opacity\",\n isDragged && \"opacity-50\"\n )}\n >\n {children}\n </div>\n )\n}\n\nexport interface MonthViewProps extends Partial<IViewProps> {\n className?: string\n maxEventsPerDay?: number\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n onMoreClick?: (date: Date, events: IEvent[]) => void\n}\n\nexport function MonthView({\n className,\n maxEventsPerDay = 3,\n weekStartsOn = 0,\n onEventClick,\n onDateClick,\n onMoreClick,\n}: MonthViewProps) {\n const { selectedDate, badgeVariant, setSelectedDate, setView } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Split events into single-day and multi-day\n const { singleDayEvents, multiDayEvents } = React.useMemo(\n () => splitEventsByDuration(filteredEvents),\n [filteredEvents]\n )\n\n // Get calendar cells\n const cells = React.useMemo(\n () => getCalendarCells(selectedDate),\n [selectedDate]\n )\n\n // Calculate event positions for multi-day events\n const eventPositions = React.useMemo(\n () => calculateMonthEventPositions(multiDayEvents, singleDayEvents, selectedDate),\n [multiDayEvents, singleDayEvents, selectedDate]\n )\n\n // All events combined for rendering\n const allEvents = [...multiDayEvents, ...singleDayEvents]\n\n const handleDateClick = (date: Date) => {\n setSelectedDate(date)\n setView(\"day\")\n onDateClick?.(date)\n }\n\n const handleMoreClick = (date: Date, events: IEvent[]) => {\n setSelectedDate(date)\n setView(\"day\")\n onMoreClick?.(date, events)\n }\n\n return (\n <div className={cn(\"\", className)}>\n {/* Week day headers */}\n <div className=\"grid grid-cols-7 divide-x divide-border/50\">\n {WEEK_DAYS.map((day) => (\n <div\n key={day}\n className=\"flex items-center justify-center py-2\"\n >\n <span className=\"text-xs font-medium text-muted-foreground\">\n {day}\n </span>\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 overflow-hidden\">\n {cells.map((cell) => (\n <DayCell\n key={cell.date.toISOString()}\n cell={cell}\n events={allEvents}\n eventPositions={eventPositions}\n selectedDate={selectedDate}\n badgeVariant={badgeVariant}\n maxEvents={maxEventsPerDay}\n onDateClick={handleDateClick}\n onEventClick={onEventClick}\n onMoreClick={handleMoreClick}\n />\n ))}\n </div>\n </div>\n )\n}\n\n// Day cell component\ninterface DayCellProps {\n cell: { day: number; currentMonth: boolean; date: Date }\n events: IEvent[]\n eventPositions: Record<string, number>\n selectedDate: Date\n badgeVariant: \"dot\" | \"colored\" | \"mixed\"\n maxEvents: number\n onDateClick: (date: Date) => void\n onEventClick?: (event: IEvent) => void\n onMoreClick: (date: Date, events: IEvent[]) => void\n}\n\nfunction DayCell({\n cell,\n events,\n eventPositions,\n selectedDate,\n badgeVariant,\n maxEvents,\n onDateClick,\n onEventClick,\n onMoreClick,\n}: DayCellProps) {\n const { date, currentMonth } = cell\n const isCurrentDay = isToday(date)\n const isSelectedDay = isSameDay(date, selectedDate)\n\n // Droppable zone for drag and drop\n const { isOver, dropProps } = useDroppable({ date })\n\n // Get events for this cell with positions\n const cellEvents = getMonthCellEvents(date, events, eventPositions)\n\n // Separate events by position\n const positionedEvents = cellEvents.filter((e) => e.position !== -1)\n const hiddenEvents = cellEvents.filter((e) => e.position === -1)\n\n // Create slots for events (max 3 visible rows)\n const slots: (typeof cellEvents[0] | null)[] = [null, null, null]\n positionedEvents.forEach((event) => {\n if (event.position >= 0 && event.position < 3) {\n slots[event.position] = event\n }\n })\n\n // Count hidden events\n const hiddenCount = hiddenEvents.length + positionedEvents.filter((e) => e.position >= 3).length\n\n // Check if this is the first day of a multi-day event\n const isEventStart = (event: IEvent) =>\n isSameDay(parseISO(event.startDate), date)\n\n return (\n <div\n {...dropProps}\n className={cn(\n \"relative min-h-[120px] border-b border-r border-border/50 p-1 transition-colors\",\n !currentMonth && \"bg-muted/30\",\n isOver && \"bg-primary/10 ring-2 ring-primary/50 ring-inset\"\n )}\n >\n {/* Date number */}\n <button\n type=\"button\"\n onClick={() => onDateClick(date)}\n className={cn(\n \"mb-1 flex size-7 items-center justify-center text-sm transition-colors\",\n \"hover:bg-muted rounded-sm\",\n isCurrentDay && \"bg-primary text-primary-foreground hover:bg-primary/90 rounded-sm\",\n isSelectedDay && !isCurrentDay && \"bg-muted font-semibold rounded-sm\",\n !currentMonth && \"text-muted-foreground\"\n )}\n >\n {cell.day}\n </button>\n\n {/* Event slots */}\n <div className=\"space-y-0.5\">\n {slots.map((event, index) => {\n if (!event) {\n return <div key={`empty-${index}`} className=\"h-5\" />\n }\n\n const showTitle = isEventStart(event) || startOfDay(date).getDay() === 0\n\n return (\n <DraggableEventWrapper key={event.id} event={event}>\n <EventBadge\n event={event}\n variant={badgeVariant}\n compact\n showTime={showTitle}\n onClick={(e) => onEventClick?.(e)}\n className={cn(\n \"w-full\",\n // If not showing title, make it appear as a continuation\n !showTitle && \"rounded-l-none border-l-0\"\n )}\n />\n </DraggableEventWrapper>\n )\n })}\n\n {/* More events indicator */}\n {hiddenCount > 0 && (\n <MoreEvents\n count={hiddenCount}\n onClick={() => onMoreClick(date, cellEvents)}\n />\n )}\n </div>\n </div>\n )\n}\n","/**\n * Week View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { startOfWeek, addDays, format, parseISO, isSameDay, areIntervalsOverlapping } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea } from \"../scroll-area\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { EventBadge } from \"./event-badge\"\nimport { useDroppable, useDraggable } from \"./dnd-context\"\nimport {\n getEventsForDate,\n getEventBlockStyle,\n groupEvents,\n isWorkingHour,\n getVisibleHours,\n isToday,\n splitEventsByDuration,\n} from \"./helpers\"\nimport type { IEvent, IViewProps } from \"./types\"\n\nexport interface WeekViewProps extends Partial<IViewProps> {\n className?: string\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n onTimeClick?: (date: Date, hour: number, minute: number) => void\n}\n\n// Draggable wrapper for events in week view\nfunction DraggableEventWrapper({\n event,\n children,\n className,\n style,\n}: {\n event: IEvent\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}) {\n const { isDragged, dragProps } = useDraggable(event)\n\n return (\n <div\n {...dragProps}\n className={cn(\n className,\n \"transition-opacity\",\n isDragged && \"opacity-50\"\n )}\n style={style}\n >\n {children}\n </div>\n )\n}\n\n// Droppable time slot for week view\nfunction DroppableTimeSlot({\n date,\n hour,\n minute,\n className,\n onClick,\n}: {\n date: Date\n hour: number\n minute: number\n className?: string\n onClick?: () => void\n}) {\n const { isOver, dropProps } = useDroppable({ date, hour, minute })\n\n return (\n <div\n {...dropProps}\n onClick={onClick}\n className={cn(\n className,\n \"cursor-pointer transition-colors hover:bg-accent\",\n isOver && \"bg-primary/20\"\n )}\n />\n )\n}\n\nexport function WeekView({\n className,\n weekStartsOn = 0,\n onEventClick,\n onDateClick,\n onTimeClick,\n}: WeekViewProps) {\n const {\n selectedDate,\n badgeVariant,\n workingHours,\n visibleHours,\n } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Split events\n const { singleDayEvents, multiDayEvents } = React.useMemo(\n () => splitEventsByDuration(filteredEvents),\n [filteredEvents]\n )\n\n // Calculate visible hours based on events\n const { hours, earliestEventHour, latestEventHour } = getVisibleHours(\n visibleHours,\n singleDayEvents\n )\n\n // Week days\n const weekStart = startOfWeek(selectedDate, { weekStartsOn })\n const weekDays = Array.from({ length: 7 }, (_, i) => addDays(weekStart, i))\n\n return (\n <>\n {/* Mobile message */}\n <div className=\"flex flex-col items-center justify-center border-b py-4 text-sm text-muted-foreground sm:hidden\">\n <p>Weekly view is not available on smaller devices.</p>\n <p>Please switch to daily or monthly view.</p>\n </div>\n\n {/* Desktop week view */}\n <div className={cn(\"hidden flex-col sm:flex\", className)}>\n {/* Multi-day events row */}\n <WeekViewMultiDayEventsRow\n selectedDate={selectedDate}\n multiDayEvents={multiDayEvents}\n />\n\n {/* Week header */}\n <div className=\"relative z-20 flex border-b border-border/50\">\n <div className=\"w-18\" />\n <div className=\"grid flex-1 grid-cols-7 divide-x divide-border/50 border-l border-border/50\">\n {weekDays.map((day, index) => (\n <span\n key={index}\n className=\"py-2 text-center text-xs font-medium text-muted-foreground\"\n >\n {format(day, \"EE\")}{\" \"}\n <span className=\"ml-1 font-semibold text-foreground\">\n {format(day, \"d\")}\n </span>\n </span>\n ))}\n </div>\n </div>\n\n {/* Time grid */}\n <ScrollArea className=\"h-[736px]\" type=\"always\">\n <div className=\"flex overflow-hidden\">\n {/* Hours column */}\n <div className=\"relative w-18\">\n {hours.map((hour, index) => (\n <div key={hour} className=\"relative\" style={{ height: \"96px\" }}>\n <div className=\"absolute -top-3 right-2 flex h-6 items-center\">\n {index !== 0 && (\n <span className=\"text-xs text-muted-foreground\">\n {format(new Date().setHours(hour, 0, 0, 0), \"hh a\")}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Week grid */}\n <div className=\"relative flex-1 border-l border-border/50\">\n <div className=\"grid grid-cols-7 divide-x divide-border/50\">\n {weekDays.map((day, dayIndex) => {\n const dayEvents = singleDayEvents.filter(\n (event) =>\n isSameDay(parseISO(event.startDate), day) ||\n isSameDay(parseISO(event.endDate), day)\n )\n const groupedEvents = groupEvents(dayEvents)\n\n return (\n <div key={dayIndex} className=\"relative\">\n {hours.map((hour, index) => {\n const isDisabled = !isWorkingHour(day, hour, workingHours)\n\n return (\n <div\n key={hour}\n className={cn(\n \"relative\",\n isDisabled &&\n \"bg-[repeating-linear-gradient(45deg,transparent,transparent_5px,rgba(0,0,0,0.04)_5px,rgba(0,0,0,0.04)_10px)] dark:bg-[repeating-linear-gradient(45deg,transparent,transparent_5px,rgba(255,255,255,0.04)_5px,rgba(255,255,255,0.04)_10px)]\"\n )}\n style={{ height: \"96px\" }}\n >\n {/* Hour line */}\n {index !== 0 && (\n <div className=\"pointer-events-none absolute inset-x-0 top-0 border-b border-border/40\" />\n )}\n\n {/* 15-minute click/drop zones */}\n <DroppableTimeSlot\n date={day}\n hour={hour}\n minute={0}\n className=\"absolute inset-x-0 top-0 h-[24px]\"\n onClick={() => onTimeClick?.(day, hour, 0)}\n />\n <DroppableTimeSlot\n date={day}\n hour={hour}\n minute={15}\n className=\"absolute inset-x-0 top-[24px] h-[24px]\"\n onClick={() => onTimeClick?.(day, hour, 15)}\n />\n\n {/* Half-hour line (dashed) */}\n <div className=\"pointer-events-none absolute inset-x-0 top-1/2 border-b border-dashed border-border/30\" />\n\n <DroppableTimeSlot\n date={day}\n hour={hour}\n minute={30}\n className=\"absolute inset-x-0 top-[48px] h-[24px]\"\n onClick={() => onTimeClick?.(day, hour, 30)}\n />\n <DroppableTimeSlot\n date={day}\n hour={hour}\n minute={45}\n className=\"absolute inset-x-0 top-[72px] h-[24px]\"\n onClick={() => onTimeClick?.(day, hour, 45)}\n />\n </div>\n )\n })}\n\n {/* Events */}\n {groupedEvents.map((group, groupIndex) =>\n group.map((event) => {\n let style = getEventBlockStyle(\n event,\n day,\n groupIndex,\n groupedEvents.length,\n { from: earliestEventHour, to: latestEventHour }\n )\n\n const hasOverlap = groupedEvents.some(\n (otherGroup, otherIndex) =>\n otherIndex !== groupIndex &&\n otherGroup.some((otherEvent) =>\n areIntervalsOverlapping(\n {\n start: parseISO(event.startDate),\n end: parseISO(event.endDate),\n },\n {\n start: parseISO(otherEvent.startDate),\n end: parseISO(otherEvent.endDate),\n }\n )\n )\n )\n\n if (!hasOverlap) {\n style = { ...style, width: \"100%\", left: \"0%\" }\n }\n\n return (\n <DraggableEventWrapper\n key={event.id}\n event={event}\n className=\"absolute px-0.5 py-0.5\"\n style={style}\n >\n <EventBadge\n event={event}\n variant={badgeVariant}\n showTime\n onClick={(e) => onEventClick?.(e)}\n className=\"h-full w-full\"\n />\n </DraggableEventWrapper>\n )\n })\n )}\n </div>\n )\n })}\n </div>\n\n {/* Current time indicator */}\n {weekDays.some((day) => isToday(day)) && (\n <CalendarTimeline\n firstVisibleHour={earliestEventHour}\n lastVisibleHour={latestEventHour}\n />\n )}\n </div>\n </div>\n </ScrollArea>\n </div>\n </>\n )\n}\n\n// Multi-day events row\ninterface WeekViewMultiDayEventsRowProps {\n selectedDate: Date\n multiDayEvents: IEvent[]\n}\n\nfunction WeekViewMultiDayEventsRow({\n selectedDate,\n multiDayEvents,\n}: WeekViewMultiDayEventsRowProps) {\n const { badgeVariant } = useEventCalendar()\n\n if (multiDayEvents.length === 0) return null\n\n const weekStart = startOfWeek(selectedDate)\n const weekDays = Array.from({ length: 7 }, (_, i) => addDays(weekStart, i))\n\n return (\n <div className=\"hidden border-b sm:flex\">\n <div className=\"w-18 shrink-0\" />\n <div className=\"grid flex-1 grid-cols-7 divide-x border-l\">\n {weekDays.map((day, index) => {\n const dayMultiEvents = multiDayEvents.filter((event) => {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return day >= start && day <= end\n })\n\n return (\n <div key={index} className=\"min-h-[32px] space-y-1 p-1\">\n {dayMultiEvents.slice(0, 2).map((event) => (\n <EventBadge\n key={event.id}\n event={event}\n variant={badgeVariant}\n compact\n className=\"w-full\"\n />\n ))}\n {dayMultiEvents.length > 2 && (\n <p className=\"text-xs text-muted-foreground text-center\">\n +{dayMultiEvents.length - 2} more\n </p>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\n// Calendar timeline (current time indicator)\ninterface CalendarTimelineProps {\n firstVisibleHour: number\n lastVisibleHour: number\n}\n\nfunction CalendarTimeline({\n firstVisibleHour,\n lastVisibleHour,\n}: CalendarTimelineProps) {\n const [currentTime, setCurrentTime] = React.useState(new Date())\n\n React.useEffect(() => {\n const interval = setInterval(() => {\n setCurrentTime(new Date())\n }, 60000)\n\n return () => clearInterval(interval)\n }, [])\n\n const currentHour = currentTime.getHours()\n const currentMinute = currentTime.getMinutes()\n\n if (currentHour < firstVisibleHour || currentHour >= lastVisibleHour) {\n return null\n }\n\n const minutesSinceStart =\n (currentHour - firstVisibleHour) * 60 + currentMinute\n const totalMinutes = (lastVisibleHour - firstVisibleHour) * 60\n const topPercent = (minutesSinceStart / totalMinutes) * 100\n\n return (\n <div\n className=\"pointer-events-none absolute inset-x-0 z-30 flex items-center\"\n style={{ top: `${topPercent}%` }}\n >\n <div className=\"size-3 -translate-x-1/2 rounded-full bg-red-500\" />\n <div className=\"h-0.5 flex-1 bg-red-500\" />\n </div>\n )\n}\n","/**\n * Day View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { Calendar as CalendarIcon, Clock, User } from \"lucide-react\"\nimport { format, parseISO, areIntervalsOverlapping } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea } from \"../scroll-area\"\nimport { Calendar } from \"../calendar\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { EventBadge, TimeIndicator } from \"./event-badge\"\nimport { useDroppable, useDraggable } from \"./dnd-context\"\nimport {\n getEventsForDate,\n getEventBlockStyle,\n groupEvents,\n getCurrentEvents,\n getVisibleHours,\n isWorkingHour,\n isToday,\n splitEventsByDuration,\n} from \"./helpers\"\nimport type { IEvent, IViewProps, TWorkingHours, TVisibleHours, TEventColor } from \"./types\"\nimport { DEFAULT_WORKING_HOURS, DEFAULT_VISIBLE_HOURS } from \"./types\"\n\n// Color classes for happening now cards\nconst colorClasses: Record<TEventColor, string> = {\n blue: \"border-l-blue-500\",\n green: \"border-l-green-500\",\n red: \"border-l-red-500\",\n yellow: \"border-l-yellow-500\",\n purple: \"border-l-purple-500\",\n orange: \"border-l-primary\",\n}\n\nexport interface DayViewProps extends Partial<IViewProps> {\n className?: string\n showSidebar?: boolean\n onTimeClick?: (date: Date, hour: number, minute: number) => void\n}\n\n// Draggable wrapper for events in day view\nfunction DraggableEventWrapper({\n event,\n children,\n className,\n style,\n}: {\n event: IEvent\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}) {\n const { isDragged, dragProps } = useDraggable(event)\n\n return (\n <div\n {...dragProps}\n className={cn(\n className,\n \"transition-opacity\",\n isDragged && \"opacity-50\"\n )}\n style={style}\n >\n {children}\n </div>\n )\n}\n\n// Droppable time slot for day view\nfunction DroppableTimeSlot({\n date,\n hour,\n minute,\n className,\n onClick,\n}: {\n date: Date\n hour: number\n minute: number\n className?: string\n onClick?: () => void\n}) {\n const { isOver, dropProps } = useDroppable({ date, hour, minute })\n\n return (\n <div\n {...dropProps}\n onClick={onClick}\n className={cn(\n className,\n \"cursor-pointer transition-colors hover:bg-accent\",\n isOver && \"bg-primary/20\"\n )}\n />\n )\n}\n\nexport function DayView({\n className,\n showSidebar = true,\n onEventClick,\n onTimeClick,\n}: DayViewProps) {\n const { \n selectedDate, \n setSelectedDate, \n badgeVariant, \n users,\n workingHours,\n visibleHours,\n } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Split events\n const { singleDayEvents, multiDayEvents } = React.useMemo(\n () => splitEventsByDuration(filteredEvents),\n [filteredEvents]\n )\n\n // Calculate visible hours based on events\n const { hours, earliestEventHour, latestEventHour } = getVisibleHours(\n visibleHours,\n singleDayEvents\n )\n\n // Get current events (happening now) - only for the selected day if it's today\n const currentEvents = React.useMemo(() => {\n if (!isToday(selectedDate)) return []\n return getCurrentEvents(singleDayEvents)\n }, [singleDayEvents, selectedDate])\n\n // Get events for the selected day\n const dayEvents = singleDayEvents.filter((event) => {\n const eventDate = parseISO(event.startDate)\n return (\n eventDate.getDate() === selectedDate.getDate() &&\n eventDate.getMonth() === selectedDate.getMonth() &&\n eventDate.getFullYear() === selectedDate.getFullYear()\n )\n })\n\n // Group events for positioning\n const groupedEvents = groupEvents(dayEvents)\n\n const handleDateSelect = (date: Date | undefined) => {\n if (date) {\n setSelectedDate(date)\n }\n }\n\n return (\n <div className={cn(\"flex\", className)}>\n {/* Main day view content */}\n <div className=\"flex flex-1 flex-col\">\n {/* Multi-day events row (if any) */}\n {multiDayEvents.length > 0 && (\n <DayViewMultiDayEventsRow\n selectedDate={selectedDate}\n multiDayEvents={multiDayEvents}\n />\n )}\n\n {/* Day header */}\n <div className=\"relative z-20 flex border-b border-border/50\">\n <div className=\"w-18\" />\n <span className=\"flex-1 border-l border-border/50 py-2 text-center text-xs font-medium text-muted-foreground\">\n {format(selectedDate, \"EE\")}{\" \"}\n <span className=\"font-semibold text-foreground\">\n {format(selectedDate, \"d\")}\n </span>\n </span>\n </div>\n\n {/* Time grid */}\n <ScrollArea className=\"h-[800px]\" type=\"always\">\n <div className=\"flex\">\n {/* Hours column */}\n <div className=\"relative w-18\">\n {hours.map((hour, index) => (\n <div key={hour} className=\"relative\" style={{ height: \"96px\" }}>\n <div className=\"absolute -top-3 right-2 flex h-6 items-center\">\n {index !== 0 && (\n <span className=\"text-xs text-muted-foreground\">\n {format(new Date().setHours(hour, 0, 0, 0), \"hh a\")}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"relative flex-1 border-l border-border/50\">\n <div className=\"relative\">\n {hours.map((hour, index) => {\n const isDisabled = !isWorkingHour(selectedDate, hour, workingHours)\n\n return (\n <div\n key={hour}\n className={cn(\n \"relative\",\n isDisabled && \"bg-[repeating-linear-gradient(45deg,transparent,transparent_5px,rgba(0,0,0,0.04)_5px,rgba(0,0,0,0.04)_10px)] dark:bg-[repeating-linear-gradient(45deg,transparent,transparent_5px,rgba(255,255,255,0.04)_5px,rgba(255,255,255,0.04)_10px)]\"\n )}\n style={{ height: \"96px\" }}\n >\n {/* Hour line */}\n {index !== 0 && (\n <div className=\"pointer-events-none absolute inset-x-0 top-0 border-b border-border/40\" />\n )}\n\n {/* 15-minute click/drop zones */}\n <DroppableTimeSlot\n date={selectedDate}\n hour={hour}\n minute={0}\n className=\"absolute inset-x-0 top-0 h-[24px]\"\n onClick={() => onTimeClick?.(selectedDate, hour, 0)}\n />\n <DroppableTimeSlot\n date={selectedDate}\n hour={hour}\n minute={15}\n className=\"absolute inset-x-0 top-[24px] h-[24px]\"\n onClick={() => onTimeClick?.(selectedDate, hour, 15)}\n />\n\n {/* Half-hour line (dashed) */}\n <div className=\"pointer-events-none absolute inset-x-0 top-1/2 border-b border-dashed border-border/30\" />\n\n <DroppableTimeSlot\n date={selectedDate}\n hour={hour}\n minute={30}\n className=\"absolute inset-x-0 top-[48px] h-[24px]\"\n onClick={() => onTimeClick?.(selectedDate, hour, 30)}\n />\n <DroppableTimeSlot\n date={selectedDate}\n hour={hour}\n minute={45}\n className=\"absolute inset-x-0 top-[72px] h-[24px]\"\n onClick={() => onTimeClick?.(selectedDate, hour, 45)}\n />\n </div>\n )\n })}\n\n {/* Events */}\n {groupedEvents.map((group, groupIndex) =>\n group.map((event) => {\n let style = getEventBlockStyle(\n event,\n selectedDate,\n groupIndex,\n groupedEvents.length,\n { from: earliestEventHour, to: latestEventHour }\n )\n\n // Check for overlaps\n const hasOverlap = groupedEvents.some(\n (otherGroup, otherIndex) =>\n otherIndex !== groupIndex &&\n otherGroup.some((otherEvent) =>\n areIntervalsOverlapping(\n {\n start: parseISO(event.startDate),\n end: parseISO(event.endDate),\n },\n {\n start: parseISO(otherEvent.startDate),\n end: parseISO(otherEvent.endDate),\n }\n )\n )\n )\n\n if (!hasOverlap) {\n style = { ...style, width: \"100%\", left: \"0%\" }\n }\n\n return (\n <DraggableEventWrapper\n key={event.id}\n event={event}\n className=\"absolute px-1 py-0.5\"\n style={style}\n >\n <EventBadge\n event={event}\n variant={badgeVariant}\n showTime\n onClick={(e) => onEventClick?.(e)}\n className=\"h-full w-full\"\n />\n </DraggableEventWrapper>\n )\n })\n )}\n </div>\n\n {/* Current time indicator */}\n {isToday(selectedDate) && (\n <CalendarTimeline\n firstVisibleHour={earliestEventHour}\n lastVisibleHour={latestEventHour}\n />\n )}\n </div>\n </div>\n </ScrollArea>\n </div>\n\n {/* Sidebar */}\n {showSidebar && (\n <div className=\"hidden w-64 divide-y border-l md:block\">\n {/* Mini Calendar */}\n <Calendar\n className=\"mx-auto w-fit\"\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleDateSelect}\n />\n\n {/* Happening Now */}\n <div className=\"flex-1 space-y-3\">\n {currentEvents.length > 0 ? (\n <div className=\"flex items-start gap-2 px-4 pt-4\">\n <span className=\"relative mt-[5px] flex size-2.5\">\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-green-400 opacity-75\" />\n <span className=\"relative inline-flex size-2.5 rounded-full bg-green-600\" />\n </span>\n <p className=\"text-sm font-semibold text-foreground\">\n Happening now\n </p>\n </div>\n ) : (\n <p className=\"p-4 text-center text-sm italic text-muted-foreground\">\n No appointments or consultations at the moment\n </p>\n )}\n\n {currentEvents.length > 0 && (\n <ScrollArea className=\"h-[422px] px-4\" type=\"always\">\n <div className=\"space-y-6 pb-4\">\n {currentEvents.map((event) => {\n const user = users.find((u) => u.id === event.user.id)\n\n return (\n <div key={event.id} className=\"space-y-1.5\">\n <p className=\"line-clamp-2 text-sm font-semibold\">\n {event.title}\n </p>\n\n {user && (\n <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n <User className=\"size-3.5\" />\n <span className=\"text-sm\">{user.name}</span>\n </div>\n )}\n\n <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n <CalendarIcon className=\"size-3.5\" />\n <span className=\"text-sm\">\n {format(new Date(), \"MMM d, yyyy\")}\n </span>\n </div>\n\n <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n <Clock className=\"size-3.5\" />\n <span className=\"text-sm\">\n {format(parseISO(event.startDate), \"h:mm a\")} -{\" \"}\n {format(parseISO(event.endDate), \"h:mm a\")}\n </span>\n </div>\n </div>\n )\n })}\n </div>\n </ScrollArea>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// Multi-day events row for day view\ninterface DayViewMultiDayEventsRowProps {\n selectedDate: Date\n multiDayEvents: IEvent[]\n}\n\nfunction DayViewMultiDayEventsRow({\n selectedDate,\n multiDayEvents,\n}: DayViewMultiDayEventsRowProps) {\n const { badgeVariant } = useEventCalendar()\n\n const relevantEvents = multiDayEvents.filter((event) => {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n return selectedDate >= start && selectedDate <= end\n })\n\n if (relevantEvents.length === 0) return null\n\n return (\n <div className=\"flex border-b\">\n <div className=\"w-18 shrink-0\" />\n <div className=\"flex-1 space-y-1 border-l p-2\">\n {relevantEvents.map((event) => (\n <EventBadge\n key={event.id}\n event={event}\n variant={badgeVariant}\n className=\"w-full\"\n />\n ))}\n </div>\n </div>\n )\n}\n\n// Calendar timeline (current time indicator)\ninterface CalendarTimelineProps {\n firstVisibleHour: number\n lastVisibleHour: number\n}\n\nfunction CalendarTimeline({\n firstVisibleHour,\n lastVisibleHour,\n}: CalendarTimelineProps) {\n const [currentTime, setCurrentTime] = React.useState(new Date())\n\n React.useEffect(() => {\n const interval = setInterval(() => {\n setCurrentTime(new Date())\n }, 60000) // Update every minute\n\n return () => clearInterval(interval)\n }, [])\n\n const currentHour = currentTime.getHours()\n const currentMinute = currentTime.getMinutes()\n\n // Check if current time is within visible hours\n if (currentHour < firstVisibleHour || currentHour >= lastVisibleHour) {\n return null\n }\n\n const minutesSinceStart =\n (currentHour - firstVisibleHour) * 60 + currentMinute\n const totalMinutes = (lastVisibleHour - firstVisibleHour) * 60\n const topPercent = (minutesSinceStart / totalMinutes) * 100\n\n return (\n <div\n className=\"pointer-events-none absolute inset-x-0 z-30 flex items-center\"\n style={{ top: `${topPercent}%` }}\n >\n <div className=\"size-3 -translate-x-1/2 rounded-full bg-red-500\" />\n <div className=\"h-0.5 flex-1 bg-red-500\" />\n </div>\n )\n}\n","/**\n * Year View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { addMonths, startOfYear, format, isSameDay, isSameMonth, parseISO } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea } from \"../scroll-area\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { getCalendarCells, isToday } from \"./helpers\"\nimport type { IEvent, IViewProps } from \"./types\"\n\nexport interface YearViewProps extends Partial<IViewProps> {\n className?: string\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n onMonthClick?: (date: Date) => void\n}\n\nexport function YearView({\n className,\n weekStartsOn = 0,\n onMonthClick,\n onDateClick,\n}: YearViewProps) {\n const { selectedDate, setSelectedDate, setView } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Get all 12 months of the year\n const months = React.useMemo(() => {\n const yearStart = startOfYear(selectedDate)\n return Array.from({ length: 12 }, (_, i) => addMonths(yearStart, i))\n }, [selectedDate])\n\n const handleMonthClick = (date: Date) => {\n setSelectedDate(date)\n setView(\"month\")\n onMonthClick?.(date)\n }\n\n const handleDateClick = (date: Date) => {\n setSelectedDate(date)\n setView(\"day\")\n onDateClick?.(date)\n }\n\n return (\n <ScrollArea className={cn(\"h-full\", className)} type=\"always\">\n <div className=\"p-4\">\n {/* Responsive grid: 1 col on mobile, 2 on md, 3 on lg, 4 on xl */}\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {months.map((month) => (\n <YearViewMonth\n key={month.toString()}\n month={month}\n events={filteredEvents}\n onMonthClick={() => handleMonthClick(month)}\n onDateClick={handleDateClick}\n />\n ))}\n </div>\n </div>\n </ScrollArea>\n )\n}\n\n// Individual month component for year view\ninterface YearViewMonthProps {\n month: Date\n events: IEvent[]\n onMonthClick: () => void\n onDateClick: (date: Date) => void\n}\n\nfunction YearViewMonth({\n month,\n events,\n onMonthClick,\n onDateClick,\n}: YearViewMonthProps) {\n const cells = getCalendarCells(month)\n\n // Get events for this month\n const monthEvents = events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n return isSameMonth(eventStart, month)\n })\n\n return (\n <div className=\"rounded-sm border border-border/50 bg-card p-3\">\n {/* Month header */}\n <button\n type=\"button\"\n onClick={onMonthClick}\n className=\"mb-2 w-full text-left text-sm font-semibold transition-colors hover:text-primary\"\n >\n {format(month, \"MMMM\")}\n {monthEvents.length > 0 && (\n <span className=\"ml-2 text-xs font-normal text-muted-foreground\">\n ({monthEvents.length})\n </span>\n )}\n </button>\n\n {/* Week day headers */}\n <div className=\"mb-1 grid grid-cols-7\">\n {[\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"].map((day, i) => (\n <div\n key={i}\n className=\"text-center text-[10px] font-medium text-muted-foreground\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Day cells */}\n <div className=\"grid grid-cols-7\">\n {cells.map((cell) => (\n <YearViewDayCell\n key={cell.date.toISOString()}\n cell={cell}\n month={month}\n events={events}\n onDateClick={onDateClick}\n />\n ))}\n </div>\n </div>\n )\n}\n\n// Day cell for year view\ninterface YearViewDayCellProps {\n cell: { day: number; currentMonth: boolean; date: Date }\n month: Date\n events: IEvent[]\n onDateClick: (date: Date) => void\n}\n\nfunction YearViewDayCell({\n cell,\n month,\n events,\n onDateClick,\n}: YearViewDayCellProps) {\n const { date, currentMonth } = cell\n const isCurrentDay = isToday(date)\n\n // Check if this day has events\n const dayEvents = events.filter((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n return (\n (date >= eventStart && date <= eventEnd) ||\n isSameDay(eventStart, date) ||\n isSameDay(eventEnd, date)\n )\n })\n\n const hasEvents = dayEvents.length > 0\n\n if (!currentMonth) {\n return <div className=\"aspect-square\" />\n }\n\n return (\n <button\n type=\"button\"\n onClick={() => onDateClick(date)}\n className={cn(\n \"relative flex aspect-square items-center justify-center text-[11px] transition-colors\",\n \"hover:bg-muted rounded-sm\",\n isCurrentDay && \"bg-primary text-primary-foreground rounded-sm hover:bg-primary/90\"\n )}\n >\n {cell.day}\n {/* Event indicator dot */}\n {hasEvents && !isCurrentDay && (\n <span className=\"absolute bottom-0.5 left-1/2 size-1 -translate-x-1/2 rounded-full bg-primary\" />\n )}\n </button>\n )\n}\n","/**\n * Agenda View Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { CalendarX2 } from \"lucide-react\"\nimport {\n endOfDay,\n endOfMonth,\n format,\n isSameMonth,\n parseISO,\n startOfDay,\n startOfMonth,\n} from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ScrollArea } from \"../scroll-area\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"../avatar\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { isToday, splitEventsByDuration } from \"./helpers\"\nimport type { IEvent, IViewProps, TEventColor } from \"./types\"\n\n// Color classes for event cards\nconst colorClasses: Record<TEventColor, {\n border: string\n bg: string\n}> = {\n blue: { border: \"border-l-blue-500\", bg: \"bg-blue-50 dark:bg-blue-950/20\" },\n green: { border: \"border-l-green-500\", bg: \"bg-green-50 dark:bg-green-950/20\" },\n red: { border: \"border-l-red-500\", bg: \"bg-red-50 dark:bg-red-950/20\" },\n yellow: { border: \"border-l-yellow-500\", bg: \"bg-yellow-50 dark:bg-yellow-950/20\" },\n purple: { border: \"border-l-purple-500\", bg: \"bg-purple-50 dark:bg-purple-950/20\" },\n orange: { border: \"border-l-primary\", bg: \"bg-orange-50 dark:bg-orange-950/20\" },\n}\n\nexport interface AgendaViewProps extends Partial<IViewProps> {\n className?: string\n emptyMessage?: string\n}\n\nexport function AgendaView({\n className,\n emptyMessage = \"No events scheduled for the selected month\",\n onEventClick,\n onDateClick,\n}: AgendaViewProps) {\n const { selectedDate, setSelectedDate, setView } = useEventCalendar()\n const filteredEvents = useFilteredEvents()\n\n // Split events into single and multi-day\n const { singleDayEvents, multiDayEvents } = React.useMemo(\n () => splitEventsByDuration(filteredEvents),\n [filteredEvents]\n )\n\n // Group events by day (similar to original)\n const eventsByDay = React.useMemo(() => {\n const allDates = new Map<\n string,\n { date: Date; events: IEvent[]; multiDayEvents: IEvent[] }\n >()\n\n // Add single-day events\n singleDayEvents.forEach((event) => {\n const eventDate = parseISO(event.startDate)\n if (!isSameMonth(eventDate, selectedDate)) return\n\n const dateKey = format(eventDate, \"yyyy-MM-dd\")\n\n if (!allDates.has(dateKey)) {\n allDates.set(dateKey, {\n date: startOfDay(eventDate),\n events: [],\n multiDayEvents: [],\n })\n }\n\n allDates.get(dateKey)?.events.push(event)\n })\n\n // Add multi-day events\n multiDayEvents.forEach((event) => {\n const eventStart = parseISO(event.startDate)\n const eventEnd = parseISO(event.endDate)\n\n let currentDate = startOfDay(eventStart)\n const lastDate = endOfDay(eventEnd)\n\n while (currentDate <= lastDate) {\n if (isSameMonth(currentDate, selectedDate)) {\n const dateKey = format(currentDate, \"yyyy-MM-dd\")\n\n if (!allDates.has(dateKey)) {\n allDates.set(dateKey, {\n date: new Date(currentDate),\n events: [],\n multiDayEvents: [],\n })\n }\n\n allDates.get(dateKey)?.multiDayEvents.push(event)\n }\n currentDate = new Date(currentDate.setDate(currentDate.getDate() + 1))\n }\n })\n\n return Array.from(allDates.values()).sort(\n (a, b) => a.date.getTime() - b.date.getTime()\n )\n }, [singleDayEvents, multiDayEvents, selectedDate])\n\n const hasAnyEvents = singleDayEvents.length > 0 || multiDayEvents.length > 0\n\n const handleDateClick = (date: Date) => {\n setSelectedDate(date)\n setView(\"day\")\n onDateClick?.(date)\n }\n\n return (\n <div className={cn(\"h-[800px]\", className)}>\n <ScrollArea className=\"h-full\" type=\"always\">\n <div className=\"space-y-6 p-4\">\n {eventsByDay.map((dayGroup) => (\n <AgendaDayGroup\n key={format(dayGroup.date, \"yyyy-MM-dd\")}\n date={dayGroup.date}\n events={dayGroup.events}\n multiDayEvents={dayGroup.multiDayEvents}\n onDateClick={handleDateClick}\n onEventClick={onEventClick}\n />\n ))}\n\n {!hasAnyEvents && (\n <div className=\"flex flex-col items-center justify-center gap-2 py-20 text-muted-foreground\">\n <CalendarX2 className=\"size-10\" />\n <p className=\"text-sm md:text-base\">{emptyMessage}</p>\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n )\n}\n\n// Day group component\ninterface AgendaDayGroupProps {\n date: Date\n events: IEvent[]\n multiDayEvents: IEvent[]\n onDateClick: (date: Date) => void\n onEventClick?: (event: IEvent) => void\n}\n\nfunction AgendaDayGroup({\n date,\n events,\n multiDayEvents,\n onDateClick,\n onEventClick,\n}: AgendaDayGroupProps) {\n const isCurrentDay = isToday(date)\n\n return (\n <div>\n {/* Date header */}\n <button\n type=\"button\"\n onClick={() => onDateClick(date)}\n className={cn(\n \"mb-3 flex items-center gap-2 text-left transition-colors hover:text-primary\",\n isCurrentDay && \"text-primary\"\n )}\n >\n <span\n className={cn(\n \"flex size-8 items-center justify-center rounded-full text-sm font-bold\",\n isCurrentDay && \"bg-primary text-primary-foreground\"\n )}\n >\n {format(date, \"d\")}\n </span>\n <div>\n <span className=\"font-semibold\">{format(date, \"EEEE\")}</span>\n <span className=\"ml-2 text-muted-foreground\">\n {format(date, \"MMMM d, yyyy\")}\n </span>\n </div>\n </button>\n\n {/* Events */}\n <div className=\"space-y-2 pl-10\">\n {/* Multi-day events first */}\n {multiDayEvents.map((event) => (\n <AgendaEventCard\n key={`multi-${event.id}`}\n event={event}\n isMultiDay\n onClick={() => onEventClick?.(event)}\n />\n ))}\n\n {/* Single-day events */}\n {events.map((event) => (\n <AgendaEventCard\n key={event.id}\n event={event}\n onClick={() => onEventClick?.(event)}\n />\n ))}\n </div>\n </div>\n )\n}\n\n// Event card component\ninterface AgendaEventCardProps {\n event: IEvent\n isMultiDay?: boolean\n onClick?: () => void\n}\n\nfunction AgendaEventCard({ event, isMultiDay, onClick }: AgendaEventCardProps) {\n const colors = colorClasses[event.color]\n\n const startTime = format(parseISO(event.startDate), \"h:mm a\")\n const endTime = format(parseISO(event.endDate), \"h:mm a\")\n\n // Get user initials\n const getInitials = (name: string) => {\n return name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n }\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex w-full items-start gap-3 rounded-lg border-l-4 p-3 text-left transition-colors\",\n \"hover:opacity-90\",\n colors.border,\n colors.bg\n )}\n >\n {/* User avatar */}\n <Avatar className=\"size-10 shrink-0\">\n <AvatarImage src={event.user.picturePath} alt={event.user.name} />\n <AvatarFallback>{getInitials(event.user.name)}</AvatarFallback>\n </Avatar>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {/* Multi-day indicator */}\n {isMultiDay && (\n <span className=\"text-xs text-muted-foreground\">Multi-day event</span>\n )}\n\n {/* Title */}\n <h3 className=\"font-semibold truncate\">{event.title}</h3>\n\n {/* User name */}\n <p className=\"text-sm text-muted-foreground\">{event.user.name}</p>\n\n {/* Time range */}\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {startTime} - {endTime}\n </p>\n\n {/* Description */}\n {event.description && (\n <p className=\"mt-2 text-sm text-muted-foreground line-clamp-2\">\n {event.description}\n </p>\n )}\n </div>\n </button>\n )\n}\n","/**\n * Calendar Header Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\nimport {\n ChevronLeft,\n ChevronRight,\n List,\n Columns,\n Grid2x2,\n Grid3x3,\n CalendarRange,\n Plus,\n Settings,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../button\"\nimport { Badge } from \"../badge\"\nimport { Avatar, AvatarFallback, AvatarImage } from \"../avatar\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../select\"\nimport { useEventCalendar, useFilteredEvents } from \"./calendar-context\"\nimport { getViewDateRange, formatDateRange } from \"./helpers\"\nimport type { ICalendarHeaderProps, TCalendarView } from \"./types\"\n\n// View icons mapping - matching original big-calendar exactly\n// Order: day, week, month, year, agenda\nconst VIEW_CONFIG: { view: TCalendarView; icon: React.ElementType; label: string }[] = [\n { view: \"day\", icon: List, label: \"View by day\" },\n { view: \"week\", icon: Columns, label: \"View by week\" },\n { view: \"month\", icon: Grid2x2, label: \"View by month\" },\n { view: \"year\", icon: Grid3x3, label: \"View by year\" },\n { view: \"agenda\", icon: CalendarRange, label: \"View by agenda\" },\n]\n\nexport interface CalendarHeaderProps extends ICalendarHeaderProps {\n className?: string\n showAddButton?: boolean\n showSettings?: boolean\n onAddClick?: () => void\n onSettingsClick?: () => void\n}\n\nexport function CalendarHeader({\n className,\n showViewSwitcher = true,\n showUserFilter = true,\n showBadgeVariant = false, // Hidden by default, controlled via settings\n showToday = true,\n showAddButton = true,\n showSettings = true,\n onAddClick,\n onSettingsClick,\n}: CalendarHeaderProps) {\n const {\n selectedDate,\n view,\n setView,\n setSelectedDate,\n selectedUserId,\n setSelectedUserId,\n users,\n badgeVariant,\n setBadgeVariant,\n goToPrevious,\n goToNext,\n } = useEventCalendar()\n\n const filteredEvents = useFilteredEvents()\n const eventCount = filteredEvents.length\n\n // Get date range for current view\n const { start: rangeStart, end: rangeEnd } = getViewDateRange(selectedDate, view)\n const dateRangeLabel = formatDateRange(rangeStart, rangeEnd)\n\n // Get initials from name\n const getInitials = (name: string) => {\n return name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n }\n\n // Navigate to today\n const handleTodayClick = () => {\n setSelectedDate(new Date())\n }\n\n const today = new Date()\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 border-b border-border p-4 lg:flex-row lg:items-center lg:justify-between\",\n className\n )}\n >\n {/* Left side - TodayButton + DateNavigator */}\n <div className=\"flex items-center gap-3\">\n {/* Today Button - shows today's date, navigates on click */}\n <button\n type=\"button\"\n onClick={handleTodayClick}\n className=\"flex size-14 flex-col items-start overflow-hidden rounded-lg border focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <p className=\"flex h-6 w-full items-center justify-center bg-primary text-center text-xs font-semibold text-primary-foreground\">\n {format(today, \"MMM\").toUpperCase()}\n </p>\n <p className=\"flex w-full flex-1 items-center justify-center text-lg font-bold\">\n {today.getDate()}\n </p>\n </button>\n\n {/* Date Navigator */}\n <div className=\"space-y-0.5\">\n {/* Title + Event Count */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-lg font-semibold\">\n {format(selectedDate, \"MMMM\")} {selectedDate.getFullYear()}\n </span>\n <Badge variant=\"outline\" className=\"px-1.5\">\n {eventCount} event{eventCount !== 1 ? \"s\" : \"\"}\n </Badge>\n </div>\n\n {/* Date Range Navigation */}\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-7 [&_svg]:size-4\"\n onClick={goToPrevious}\n >\n <ChevronLeft />\n <span className=\"sr-only\">Previous</span>\n </Button>\n\n <p className=\"text-sm text-muted-foreground\">\n {dateRangeLabel}\n </p>\n\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"size-7 [&_svg]:size-4\"\n onClick={goToNext}\n >\n <ChevronRight />\n <span className=\"sr-only\">Next</span>\n </Button>\n </div>\n </div>\n </div>\n\n {/* Right side - Controls */}\n <div className=\"flex flex-col items-center gap-1.5 sm:flex-row sm:justify-between\">\n <div className=\"flex w-full items-center gap-1.5\">\n {/* View Switcher - Pill container with spaced buttons */}\n {showViewSwitcher && (\n <div className=\"inline-flex items-center gap-1 rounded-full border border-border px-1 py-1\">\n {VIEW_CONFIG.map((config, index) => {\n const Icon = config.icon\n const isFirst = index === 0\n const isLast = index === VIEW_CONFIG.length - 1\n const isActive = view === config.view\n\n return (\n <Button\n key={config.view}\n aria-label={config.label}\n size=\"icon\"\n variant={isActive ? \"default\" : \"ghost\"}\n className={cn(\n \"size-8 border-0 [&_svg]:size-4\",\n isFirst && \"rounded-l-full rounded-r-sm\",\n isLast && \"rounded-r-full rounded-l-sm\",\n !isFirst && !isLast && \"rounded-sm\"\n )}\n onClick={() => setView(config.view)}\n >\n <Icon strokeWidth={1.8} />\n </Button>\n )\n })}\n </div>\n )}\n\n {/* User Select */}\n {showUserFilter && users.length > 0 && (\n <Select\n value={selectedUserId || \"all\"}\n onValueChange={(value) => setSelectedUserId(value === \"all\" ? null : value)}\n >\n <SelectTrigger className=\"flex-1 md:w-48\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"end\">\n <SelectItem value=\"all\">\n <div className=\"flex items-center gap-1\">\n {/* Avatar Group */}\n <div className=\"flex -space-x-2\">\n {users.slice(0, 2).map((user) => (\n <Avatar key={user.id} className=\"size-6 border-2 border-background\">\n <AvatarImage src={user.picturePath} alt={user.name} />\n <AvatarFallback className=\"text-[10px]\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n ))}\n {users.length > 2 && (\n <div className=\"flex size-6 items-center justify-center rounded-full border-2 border-background bg-muted text-[10px] font-medium\">\n +{users.length - 2}\n </div>\n )}\n </div>\n All\n </div>\n </SelectItem>\n {users.map((user) => (\n <SelectItem key={user.id} value={user.id}>\n <div className=\"flex items-center gap-2\">\n <Avatar className=\"size-6\">\n <AvatarImage src={user.picturePath} alt={user.name} />\n <AvatarFallback className=\"text-[10px]\">\n {getInitials(user.name)}\n </AvatarFallback>\n </Avatar>\n <p className=\"truncate\">{user.name}</p>\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </div>\n\n {/* Settings & Add Event Buttons */}\n <div className=\"flex items-center gap-2\">\n {showSettings && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={onSettingsClick}\n className=\"shrink-0\"\n aria-label=\"Calendar settings\"\n >\n <Settings className=\"size-4\" />\n </Button>\n )}\n {showAddButton && (\n <Button onClick={onAddClick} className=\"w-full sm:w-auto\">\n <Plus />\n Add Event\n </Button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\n// Simplified header for mobile or compact views\nexport interface CalendarHeaderCompactProps {\n className?: string\n showAddButton?: boolean\n showSettings?: boolean\n onAddClick?: () => void\n onSettingsClick?: () => void\n}\n\nexport function CalendarHeaderCompact({\n className,\n showAddButton = true,\n showSettings = true,\n onAddClick,\n onSettingsClick,\n}: CalendarHeaderCompactProps) {\n const {\n selectedDate,\n setSelectedDate,\n view,\n setView,\n goToPrevious,\n goToNext,\n } = useEventCalendar()\n\n const filteredEvents = useFilteredEvents()\n const eventCount = filteredEvents.length\n const today = new Date()\n\n const handleTodayClick = () => {\n setSelectedDate(new Date())\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-between border-b border-border p-3\",\n className\n )}\n >\n {/* Left - Today button compact */}\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleTodayClick}\n className=\"flex size-10 flex-col items-start overflow-hidden rounded border focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <p className=\"flex h-4 w-full items-center justify-center bg-primary text-center text-[8px] font-semibold text-primary-foreground\">\n {format(today, \"MMM\").toUpperCase()}\n </p>\n <p className=\"flex w-full flex-1 items-center justify-center text-sm font-bold\">\n {today.getDate()}\n </p>\n </button>\n <div>\n <h2 className=\"text-sm font-semibold\">{format(selectedDate, \"MMM yyyy\")}</h2>\n <span className=\"text-xs text-muted-foreground\">{eventCount} events</span>\n </div>\n </div>\n\n {/* Right - Controls */}\n <div className=\"flex items-center gap-1\">\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8\" onClick={goToPrevious}>\n <ChevronLeft className=\"size-4\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"size-8\" onClick={goToNext}>\n <ChevronRight className=\"size-4\" />\n </Button>\n \n <div className=\"ml-2 inline-flex items-center gap-0.5 rounded-full border border-border px-0.5 py-0.5\">\n <Button\n size=\"icon\"\n variant={view === \"day\" ? \"default\" : \"ghost\"}\n className=\"size-6 rounded-l-full rounded-r-sm border-0 [&_svg]:size-3\"\n onClick={() => setView(\"day\")}\n >\n <List strokeWidth={1.8} />\n </Button>\n <Button\n size=\"icon\"\n variant={view === \"week\" ? \"default\" : \"ghost\"}\n className=\"size-6 rounded-sm border-0 [&_svg]:size-3\"\n onClick={() => setView(\"week\")}\n >\n <Columns strokeWidth={1.8} />\n </Button>\n <Button\n size=\"icon\"\n variant={view === \"month\" ? \"default\" : \"ghost\"}\n className=\"size-6 rounded-r-full rounded-l-sm border-0 [&_svg]:size-3\"\n onClick={() => setView(\"month\")}\n >\n <Grid2x2 strokeWidth={1.8} />\n </Button>\n </div>\n\n {showSettings && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={onSettingsClick}\n className=\"ml-2 size-8\"\n aria-label=\"Calendar settings\"\n >\n <Settings className=\"size-4\" />\n </Button>\n )}\n {showAddButton && (\n <Button size=\"sm\" onClick={onAddClick} className=\"size-8 p-0\">\n <Plus className=\"size-4\" />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","/**\n * Event Dialog Component\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { format, parseISO, setHours, setMinutes } from \"date-fns\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"../button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../dialog\"\nimport { Input } from \"../input\"\nimport { Label } from \"../label\"\nimport { Textarea } from \"../textarea\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../select\"\nimport { useEventCalendar } from \"./calendar-context\"\nimport { generateEventId } from \"./helpers\"\nimport type { IEvent, IEventDialogProps, TEventColor } from \"./types\"\n\nconst EVENT_COLORS: { value: TEventColor; label: string; className: string }[] = [\n { value: \"blue\", label: \"Blue\", className: \"bg-blue-500\" },\n { value: \"green\", label: \"Green\", className: \"bg-green-500\" },\n { value: \"red\", label: \"Red\", className: \"bg-red-500\" },\n { value: \"yellow\", label: \"Yellow\", className: \"bg-yellow-500\" },\n { value: \"purple\", label: \"Purple\", className: \"bg-purple-500\" },\n { value: \"orange\", label: \"Orange\", className: \"bg-primary\" },\n]\n\nexport interface EventDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n mode?: \"add\" | \"edit\"\n event?: IEvent | null\n defaultDate?: Date\n defaultUserId?: string\n}\n\nexport function EventDialog({\n open,\n onOpenChange,\n mode = \"add\",\n event,\n defaultDate = new Date(),\n defaultUserId,\n}: EventDialogProps) {\n const { addEvent, updateEvent, deleteEvent, users } = useEventCalendar()\n\n // Form state\n const [title, setTitle] = React.useState(\"\")\n const [description, setDescription] = React.useState(\"\")\n const [startDate, setStartDate] = React.useState(\"\")\n const [startTime, setStartTime] = React.useState(\"\")\n const [endDate, setEndDate] = React.useState(\"\")\n const [endTime, setEndTime] = React.useState(\"\")\n const [color, setColor] = React.useState<TEventColor>(\"blue\")\n const [userId, setUserId] = React.useState(\"\")\n const [isSubmitting, setIsSubmitting] = React.useState(false)\n\n // Reset form when dialog opens/closes or mode changes\n React.useEffect(() => {\n if (open) {\n if (mode === \"edit\" && event) {\n const start = parseISO(event.startDate)\n const end = parseISO(event.endDate)\n setTitle(event.title)\n setDescription(event.description || \"\")\n setStartDate(format(start, \"yyyy-MM-dd\"))\n setStartTime(format(start, \"HH:mm\"))\n setEndDate(format(end, \"yyyy-MM-dd\"))\n setEndTime(format(end, \"HH:mm\"))\n setColor(event.color)\n setUserId(event.user.id)\n } else {\n // Default values for new event\n const start = defaultDate\n const end = setMinutes(setHours(defaultDate, defaultDate.getHours() + 1), 0)\n setTitle(\"\")\n setDescription(\"\")\n setStartDate(format(start, \"yyyy-MM-dd\"))\n setStartTime(format(start, \"HH:mm\"))\n setEndDate(format(end, \"yyyy-MM-dd\"))\n setEndTime(format(end, \"HH:mm\"))\n setColor(\"blue\")\n setUserId(defaultUserId || users[0]?.id || \"\")\n }\n }\n }, [open, mode, event, defaultDate, defaultUserId, users])\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setIsSubmitting(true)\n\n try {\n const [startYear, startMonth, startDay] = startDate.split(\"-\").map(Number)\n const [startHour, startMinute] = startTime.split(\":\").map(Number)\n const [endYear, endMonth, endDay] = endDate.split(\"-\").map(Number)\n const [endHour, endMinute] = endTime.split(\":\").map(Number)\n\n const startDateTime = new Date(startYear, startMonth - 1, startDay, startHour, startMinute)\n const endDateTime = new Date(endYear, endMonth - 1, endDay, endHour, endMinute)\n\n const selectedUser = users.find((u) => u.id === userId)\n\n if (mode === \"edit\" && event) {\n const updatedEvent: IEvent = {\n ...event,\n title,\n description,\n startDate: startDateTime.toISOString(),\n endDate: endDateTime.toISOString(),\n color,\n user: {\n id: userId,\n name: selectedUser?.name || \"Unknown\",\n },\n }\n updateEvent(updatedEvent)\n } else {\n const newEvent: IEvent = {\n id: generateEventId(),\n title,\n description,\n startDate: startDateTime.toISOString(),\n endDate: endDateTime.toISOString(),\n color,\n user: {\n id: userId,\n name: selectedUser?.name || \"Unknown\",\n },\n }\n addEvent(newEvent)\n }\n\n onOpenChange(false)\n } catch (error) {\n console.error(\"Failed to save event:\", error)\n } finally {\n setIsSubmitting(false)\n }\n }\n\n const handleDelete = () => {\n if (event) {\n deleteEvent(event.id)\n onOpenChange(false)\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[500px]\">\n <form onSubmit={handleSubmit}>\n <DialogHeader>\n <DialogTitle>\n {mode === \"edit\" ? \"Edit Event\" : \"Add Event\"}\n </DialogTitle>\n <DialogDescription>\n {mode === \"edit\"\n ? \"Make changes to your event below.\"\n : \"Fill in the details for your new event.\"}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"grid gap-4 py-4\">\n {/* Title */}\n <div className=\"grid gap-2\">\n <Label htmlFor=\"title\">Title</Label>\n <Input\n id=\"title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Event title\"\n required\n />\n </div>\n\n {/* Description */}\n <div className=\"grid gap-2\">\n <Label htmlFor=\"description\">Description</Label>\n <Textarea\n id=\"description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Event description (optional)\"\n rows={3}\n />\n </div>\n\n {/* Start Date/Time */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"startDate\">Start Date</Label>\n <Input\n id=\"startDate\"\n type=\"date\"\n value={startDate}\n onChange={(e) => setStartDate(e.target.value)}\n required\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"startTime\">Start Time</Label>\n <Input\n id=\"startTime\"\n type=\"time\"\n value={startTime}\n onChange={(e) => setStartTime(e.target.value)}\n required\n />\n </div>\n </div>\n\n {/* End Date/Time */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"endDate\">End Date</Label>\n <Input\n id=\"endDate\"\n type=\"date\"\n value={endDate}\n onChange={(e) => setEndDate(e.target.value)}\n required\n />\n </div>\n <div className=\"grid gap-2\">\n <Label htmlFor=\"endTime\">End Time</Label>\n <Input\n id=\"endTime\"\n type=\"time\"\n value={endTime}\n onChange={(e) => setEndTime(e.target.value)}\n required\n />\n </div>\n </div>\n\n {/* Color and User */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"grid gap-2\">\n <Label>Color</Label>\n <Select value={color} onValueChange={(v) => setColor(v as TEventColor)}>\n <SelectTrigger>\n <SelectValue>\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n \"size-3 rounded-full\",\n EVENT_COLORS.find((c) => c.value === color)?.className\n )}\n />\n {EVENT_COLORS.find((c) => c.value === color)?.label}\n </div>\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {EVENT_COLORS.map((c) => (\n <SelectItem key={c.value} value={c.value}>\n <div className=\"flex items-center gap-2\">\n <span className={cn(\"size-3 rounded-full\", c.className)} />\n {c.label}\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {users.length > 0 && (\n <div className=\"grid gap-2\">\n <Label>Assignee</Label>\n <Select value={userId} onValueChange={setUserId}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select user\" />\n </SelectTrigger>\n <SelectContent>\n {users.map((user) => (\n <SelectItem key={user.id} value={user.id}>\n {user.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n </div>\n </div>\n\n <DialogFooter className=\"flex-row justify-between gap-2\">\n {/* Delete button on far left */}\n {mode === \"edit\" ? (\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={handleDelete}\n disabled={isSubmitting}\n >\n Delete\n </Button>\n ) : (\n <div /> /* Spacer when not in edit mode */\n )}\n \n {/* Cancel and Save on right */}\n <div className=\"flex gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={isSubmitting || !title.trim()}>\n {isSubmitting ? \"Saving...\" : mode === \"edit\" ? \"Save Changes\" : \"Add Event\"}\n </Button>\n </div>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n\n// Quick add event popover (for clicking on a day/time)\nexport interface QuickAddEventProps {\n date: Date\n onAdd: (event: Omit<IEvent, \"id\">) => void\n onOpenDialog: () => void\n onClose: () => void\n}\n\nexport function QuickAddEvent({\n date,\n onAdd,\n onOpenDialog,\n onClose,\n}: QuickAddEventProps) {\n const [title, setTitle] = React.useState(\"\")\n const { users } = useEventCalendar()\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (!title.trim()) return\n\n const end = setMinutes(setHours(date, date.getHours() + 1), 0)\n \n onAdd({\n title,\n description: \"\",\n startDate: date.toISOString(),\n endDate: end.toISOString(),\n color: \"blue\",\n user: {\n id: users[0]?.id || \"\",\n name: users[0]?.name || \"Unknown\",\n },\n })\n onClose()\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"flex flex-col gap-2 p-3\">\n <div className=\"text-xs text-muted-foreground\">\n {format(date, \"EEE, MMM d, h:mm a\")}\n </div>\n <Input\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Add title\"\n className=\"h-8\"\n autoFocus\n />\n <div className=\"flex gap-2\">\n <Button type=\"submit\" size=\"sm\" disabled={!title.trim()}>\n Add\n </Button>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onOpenDialog}>\n More options\n </Button>\n </div>\n </form>\n )\n}\n\n","/**\n * Badge Variant Input\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { useEventCalendar } from \"../calendar-context\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\"\nimport type { TBadgeVariant } from \"../types\"\n\nexport function ChangeBadgeVariantInput() {\n const { badgeVariant, setBadgeVariant } = useEventCalendar()\n\n return (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-semibold\">Change badge variant</p>\n\n <Select\n value={badgeVariant}\n onValueChange={(value) => setBadgeVariant(value as TBadgeVariant)}\n >\n <SelectTrigger className=\"w-48\">\n <SelectValue />\n </SelectTrigger>\n\n <SelectContent>\n <SelectItem value=\"dot\">Dot</SelectItem>\n <SelectItem value=\"colored\">Colored</SelectItem>\n <SelectItem value=\"mixed\">Mixed</SelectItem>\n </SelectContent>\n </Select>\n </div>\n )\n}\n\n","/**\n * Visible Hours Input\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { Info } from \"lucide-react\"\nimport { useEventCalendar } from \"../calendar-context\"\nimport { Button } from \"../../button\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../../tooltip\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\"\n\n// Generate hour options (12-hour format with AM/PM)\nconst HOUR_OPTIONS = Array.from({ length: 25 }, (_, i) => {\n if (i === 0) return { value: \"0\", label: \"12 AM\" }\n if (i === 12) return { value: \"12\", label: \"12 PM\" }\n if (i === 24) return { value: \"24\", label: \"12 AM (next)\" }\n if (i < 12) return { value: String(i), label: `${i} AM` }\n return { value: String(i), label: `${i - 12} PM` }\n})\n\nexport function ChangeVisibleHoursInput() {\n const { visibleHours, setVisibleHours } = useEventCalendar()\n\n const [from, setFrom] = React.useState<number>(visibleHours.from)\n const [to, setTo] = React.useState<number>(visibleHours.to)\n\n const handleApply = () => {\n const toHour = to === 0 ? 24 : to\n setVisibleHours({ from, to: toHour })\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-semibold\">Change visible hours</p>\n\n <TooltipProvider delayDuration={100}>\n <Tooltip>\n <TooltipTrigger>\n <Info className=\"size-3\" />\n </TooltipTrigger>\n\n <TooltipContent className=\"max-w-80 text-center\">\n <p>\n If an event falls outside the specified visible hours, the\n visible hours will automatically adjust to include that event.\n </p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <p>From</p>\n <Select value={String(from)} onValueChange={(v) => setFrom(Number(v))}>\n <SelectTrigger className=\"w-28\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {HOUR_OPTIONS.slice(0, 24).map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <p>To</p>\n <Select value={String(to)} onValueChange={(v) => setTo(Number(v))}>\n <SelectTrigger className=\"w-28\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {HOUR_OPTIONS.slice(1).map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <Button className=\"mt-4 w-fit\" onClick={handleApply}>\n Apply\n </Button>\n </div>\n )\n}\n\n","/**\n * Working Hours Input\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { Info, Moon } from \"lucide-react\"\nimport { useEventCalendar } from \"../calendar-context\"\nimport { Button } from \"../../button\"\nimport { Switch } from \"../../switch\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../../tooltip\"\nimport type { TWorkingHours } from \"../types\"\n\nconst DAYS_OF_WEEK = [\n { index: 0, name: \"Sunday\" },\n { index: 1, name: \"Monday\" },\n { index: 2, name: \"Tuesday\" },\n { index: 3, name: \"Wednesday\" },\n { index: 4, name: \"Thursday\" },\n { index: 5, name: \"Friday\" },\n { index: 6, name: \"Saturday\" },\n]\n\n// Generate hour options (12-hour format with AM/PM)\nconst HOUR_OPTIONS = Array.from({ length: 25 }, (_, i) => {\n if (i === 0) return { value: \"0\", label: \"12 AM\" }\n if (i === 12) return { value: \"12\", label: \"12 PM\" }\n if (i === 24) return { value: \"24\", label: \"12 AM (next)\" }\n if (i < 12) return { value: String(i), label: `${i} AM` }\n return { value: String(i), label: `${i - 12} PM` }\n})\n\nexport function ChangeWorkingHoursInput() {\n const { workingHours, setWorkingHours } = useEventCalendar()\n\n const [localWorkingHours, setLocalWorkingHours] = React.useState<TWorkingHours>({\n ...workingHours,\n })\n\n const handleToggleDay = (dayId: number) => {\n setLocalWorkingHours((prev) => ({\n ...prev,\n [dayId]:\n prev[dayId].from > 0 || prev[dayId].to > 0\n ? { from: 0, to: 0 }\n : { from: 9, to: 17 },\n }))\n }\n\n const handleTimeChange = (\n dayId: number,\n timeType: \"from\" | \"to\",\n value: string\n ) => {\n const hour = Number(value)\n setLocalWorkingHours((prev) => {\n const updatedDay = { ...prev[dayId], [timeType]: hour }\n if (timeType === \"to\" && hour === 0 && updatedDay.from === 0) {\n updatedDay.to = 24\n }\n return { ...prev, [dayId]: updatedDay }\n })\n }\n\n const handleSave = () => {\n const updatedWorkingHours = { ...localWorkingHours }\n\n for (const dayId in updatedWorkingHours) {\n const day = updatedWorkingHours[parseInt(dayId)]\n const isDayActive =\n localWorkingHours[parseInt(dayId)].from > 0 ||\n localWorkingHours[parseInt(dayId)].to > 0\n\n if (isDayActive) {\n if (day.from === 0 && day.to === 0) {\n updatedWorkingHours[dayId] = { from: 0, to: 24 }\n } else if (day.to === 0 && day.from > 0) {\n updatedWorkingHours[dayId] = { ...day, to: 24 }\n }\n } else {\n updatedWorkingHours[dayId] = { from: 0, to: 0 }\n }\n }\n\n setWorkingHours(updatedWorkingHours)\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-semibold\">Change working hours</p>\n\n <TooltipProvider delayDuration={100}>\n <Tooltip>\n <TooltipTrigger>\n <Info className=\"size-3\" />\n </TooltipTrigger>\n\n <TooltipContent className=\"max-w-80 text-center\">\n <p>\n This will apply a dashed background to the hour cells that fall\n outside the working hours — only for week and day views.\n </p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n <div className=\"space-y-3\">\n {DAYS_OF_WEEK.map((day) => {\n const isDayActive =\n localWorkingHours[day.index].from > 0 ||\n localWorkingHours[day.index].to > 0\n\n return (\n <div key={day.index} className=\"flex flex-wrap items-center gap-2 sm:gap-4\">\n <div className=\"flex w-32 items-center gap-2 sm:w-36\">\n <Switch\n checked={isDayActive}\n onCheckedChange={() => handleToggleDay(day.index)}\n />\n <span className=\"text-sm font-medium\">{day.name.slice(0, 3)}</span>\n </div>\n\n {isDayActive ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <span className=\"text-sm\">From</span>\n <Select\n value={String(localWorkingHours[day.index].from)}\n onValueChange={(v) =>\n handleTimeChange(day.index, \"from\", v)\n }\n >\n <SelectTrigger className=\"w-24\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {HOUR_OPTIONS.slice(0, 24).map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center gap-1\">\n <span className=\"text-sm\">To</span>\n <Select\n value={String(localWorkingHours[day.index].to)}\n onValueChange={(v) =>\n handleTimeChange(day.index, \"to\", v)\n }\n >\n <SelectTrigger className=\"w-24\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {HOUR_OPTIONS.slice(1).map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n ) : (\n <div className=\"flex items-center gap-2 text-muted-foreground\">\n <Moon className=\"size-4\" />\n <span className=\"text-sm\">Closed</span>\n </div>\n )}\n </div>\n )\n })}\n </div>\n\n <Button className=\"mt-4 w-fit\" onClick={handleSave}>\n Apply\n </Button>\n </div>\n )\n}\n\n","/**\n * Calendar Settings Panel & Dialog\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n */\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { Settings } from \"lucide-react\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from \"../../dialog\"\nimport { Button } from \"../../button\"\n\nimport { ChangeBadgeVariantInput } from \"./badge-variant-input\"\nimport { ChangeVisibleHoursInput } from \"./visible-hours-input\"\nimport { ChangeWorkingHoursInput } from \"./working-hours-input\"\n\nexport interface CalendarSettingsContentProps {\n className?: string\n showBadgeVariant?: boolean\n showVisibleHours?: boolean\n showWorkingHours?: boolean\n}\n\n/**\n * The inner content of calendar settings - used by both panel and dialog\n */\nexport function CalendarSettingsContent({\n className,\n showBadgeVariant = true,\n showVisibleHours = true,\n showWorkingHours = true,\n}: CalendarSettingsContentProps) {\n return (\n <div className={cn(\"flex flex-col gap-6\", className)}>\n {showBadgeVariant && <ChangeBadgeVariantInput />}\n {showVisibleHours && <ChangeVisibleHoursInput />}\n {showWorkingHours && <ChangeWorkingHoursInput />}\n </div>\n )\n}\n\nexport interface CalendarSettingsDialogProps extends CalendarSettingsContentProps {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\n/**\n * Calendar settings in a dialog/modal\n */\nexport function CalendarSettingsDialog({\n open,\n onOpenChange,\n showBadgeVariant = true,\n showVisibleHours = true,\n showWorkingHours = true,\n}: CalendarSettingsDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-md\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <Settings className=\"size-5\" />\n Calendar Settings\n </DialogTitle>\n <DialogDescription>\n Customize your calendar view and preferences.\n </DialogDescription>\n </DialogHeader>\n <CalendarSettingsContent\n showBadgeVariant={showBadgeVariant}\n showVisibleHours={showVisibleHours}\n showWorkingHours={showWorkingHours}\n />\n </DialogContent>\n </Dialog>\n )\n}\n\nexport interface CalendarSettingsButtonProps {\n onClick?: () => void\n className?: string\n}\n\n/**\n * Settings button trigger - can be placed in the header\n */\nexport function CalendarSettingsButton({\n onClick,\n className,\n}: CalendarSettingsButtonProps) {\n return (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={onClick}\n className={cn(\"shrink-0\", className)}\n aria-label=\"Calendar settings\"\n >\n <Settings className=\"size-4\" />\n </Button>\n )\n}\n\n","/**\n * Big Calendar Block\n * Based on big-calendar by Leonardo Ramos (MIT License)\n * https://github.com/lramos33/big-calendar\n * \n * Adapted for J3M UI with Tailwind v4 and design token integration.\n */\n\n\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Card, CardContent } from \"../card\"\nimport {\n EventCalendarProvider,\n useEventCalendar,\n type EventCalendarProviderProps,\n} from \"./calendar-context\"\nimport { CalendarHeader, CalendarHeaderCompact } from \"./calendar-header\"\nimport { CalendarSettingsDialog } from \"./settings\"\nimport { MonthView } from \"./month-view\"\nimport { WeekView } from \"./week-view\"\nimport { DayView } from \"./day-view\"\nimport { YearView } from \"./year-view\"\nimport { AgendaView } from \"./agenda-view\"\nimport { EventDialog } from \"./event-dialog\"\nimport { DragProvider } from \"./dnd-context\"\nimport type { IEvent, ICalendarConfig, TCalendarView } from \"./types\"\n\n// Custom hook for responsive breakpoints\nfunction useMediaQuery(query: string): boolean {\n const [matches, setMatches] = React.useState(false)\n\n React.useEffect(() => {\n const media = window.matchMedia(query)\n setMatches(media.matches)\n \n const listener = (event: MediaQueryListEvent) => {\n setMatches(event.matches)\n }\n \n media.addEventListener(\"change\", listener)\n return () => media.removeEventListener(\"change\", listener)\n }, [query])\n\n return matches\n}\n\nexport interface BigCalendarProps extends Omit<EventCalendarProviderProps, \"children\"> {\n className?: string\n compact?: boolean | \"auto\"\n bordered?: boolean\n showHeader?: boolean\n showAddButton?: boolean\n showSettings?: boolean\n enableDragDrop?: boolean\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n maxEventsPerDay?: number\n config?: ICalendarConfig\n}\n\nexport function BigCalendar({\n className,\n compact = \"auto\",\n bordered = true,\n showHeader = true,\n showAddButton = true,\n showSettings = true,\n enableDragDrop = true,\n weekStartsOn = 0,\n maxEventsPerDay = 3,\n config,\n ...providerProps\n}: BigCalendarProps) {\n return (\n <EventCalendarProvider {...providerProps}>\n <DragProvider>\n <BigCalendarInner\n className={className}\n compact={compact}\n bordered={bordered}\n showHeader={showHeader}\n showAddButton={showAddButton}\n showSettings={showSettings}\n enableDragDrop={enableDragDrop}\n weekStartsOn={weekStartsOn}\n maxEventsPerDay={maxEventsPerDay}\n config={config}\n />\n </DragProvider>\n </EventCalendarProvider>\n )\n}\n\ninterface BigCalendarInnerProps {\n className?: string\n compact?: boolean | \"auto\"\n bordered?: boolean\n showHeader?: boolean\n showAddButton?: boolean\n showSettings?: boolean\n enableDragDrop?: boolean\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n maxEventsPerDay?: number\n config?: ICalendarConfig\n}\n\nfunction BigCalendarInner({\n className,\n compact,\n bordered,\n showHeader,\n showAddButton,\n showSettings,\n enableDragDrop,\n weekStartsOn,\n maxEventsPerDay,\n}: BigCalendarInnerProps) {\n const { view, setView } = useEventCalendar()\n const [dialogOpen, setDialogOpen] = React.useState(false)\n const [settingsDialogOpen, setSettingsDialogOpen] = React.useState(false)\n const [selectedEvent, setSelectedEvent] = React.useState<IEvent | null>(null)\n const [dialogMode, setDialogMode] = React.useState<\"add\" | \"edit\">(\"add\")\n const [defaultDate, setDefaultDate] = React.useState(new Date())\n\n // Responsive: use compact header on screens below md breakpoint\n const isMobile = useMediaQuery(\"(max-width: 768px)\")\n const isCompact = compact === \"auto\" ? isMobile : compact\n\n const handleAddClick = () => {\n setSelectedEvent(null)\n setDialogMode(\"add\")\n setDefaultDate(new Date())\n setDialogOpen(true)\n }\n\n const handleSettingsClick = () => {\n setSettingsDialogOpen(true)\n }\n\n const handleEventClick = (event: IEvent) => {\n setSelectedEvent(event)\n setDialogMode(\"edit\")\n setDialogOpen(true)\n }\n\n const handleDateClick = (date: Date) => {\n setDefaultDate(date)\n }\n\n const handleMoreClick = (date: Date, events: IEvent[]) => {\n // Switch to day view to show all events\n setDefaultDate(date)\n setView(\"day\")\n }\n\n const handleTimeClick = (date: Date, hour: number, minute: number) => {\n setSelectedEvent(null)\n setDialogMode(\"add\")\n const clickedDate = new Date(date)\n clickedDate.setHours(hour, minute, 0, 0)\n setDefaultDate(clickedDate)\n setDialogOpen(true)\n }\n\n const Wrapper = bordered ? Card : \"div\"\n const Content = bordered ? CardContent : \"div\"\n\n return (\n <>\n <div className={cn(\"flex flex-col gap-4 relative\", className)}>\n <Wrapper\n className={cn(\n \"flex min-h-[600px] flex-col overflow-hidden rounded-sm\",\n !bordered && \"border border-border bg-card\"\n )}\n >\n {/* Header - responsive */}\n {showHeader && (\n isCompact ? (\n <CalendarHeaderCompact\n showAddButton={showAddButton}\n showSettings={showSettings}\n onAddClick={handleAddClick}\n onSettingsClick={handleSettingsClick}\n />\n ) : (\n <CalendarHeader\n showAddButton={showAddButton}\n showSettings={showSettings}\n onAddClick={handleAddClick}\n onSettingsClick={handleSettingsClick}\n />\n )\n )}\n\n {/* View content */}\n <Content className={cn(\"flex-1 overflow-hidden\", bordered ? \"p-0\" : \"\")}>\n <CalendarView\n view={view}\n weekStartsOn={weekStartsOn}\n maxEventsPerDay={maxEventsPerDay}\n onEventClick={handleEventClick}\n onDateClick={handleDateClick}\n onMoreClick={handleMoreClick}\n onTimeClick={handleTimeClick}\n />\n </Content>\n </Wrapper>\n\n </div>\n\n {/* Event dialog */}\n <EventDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n mode={dialogMode}\n event={selectedEvent}\n defaultDate={defaultDate}\n />\n\n {/* Settings dialog */}\n {showSettings && (\n <CalendarSettingsDialog\n open={settingsDialogOpen}\n onOpenChange={setSettingsDialogOpen}\n />\n )}\n </>\n )\n}\n\ninterface CalendarViewProps {\n view: TCalendarView\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n maxEventsPerDay?: number\n onEventClick: (event: IEvent) => void\n onDateClick: (date: Date) => void\n onMoreClick: (date: Date, events: IEvent[]) => void\n onTimeClick: (date: Date, hour: number, minute: number) => void\n}\n\nfunction CalendarView({\n view,\n weekStartsOn,\n maxEventsPerDay,\n onEventClick,\n onDateClick,\n onMoreClick,\n onTimeClick,\n}: CalendarViewProps) {\n switch (view) {\n case \"month\":\n return (\n <MonthView\n className=\"h-full\"\n weekStartsOn={weekStartsOn}\n maxEventsPerDay={maxEventsPerDay}\n onEventClick={onEventClick}\n onDateClick={onDateClick}\n onMoreClick={onMoreClick}\n />\n )\n case \"week\":\n return (\n <WeekView\n className=\"h-full\"\n weekStartsOn={weekStartsOn}\n onEventClick={onEventClick}\n onDateClick={onDateClick}\n onTimeClick={onTimeClick}\n />\n )\n case \"day\":\n return (\n <DayView\n className=\"h-full\"\n onEventClick={onEventClick}\n onTimeClick={onTimeClick}\n />\n )\n case \"year\":\n return (\n <YearView\n className=\"h-full\"\n weekStartsOn={weekStartsOn}\n onDateClick={onDateClick}\n />\n )\n case \"agenda\":\n return (\n <AgendaView\n className=\"h-full\"\n onEventClick={onEventClick}\n onDateClick={onDateClick}\n />\n )\n default:\n return null\n }\n}\n\n// Re-export for convenience\nexport { EventCalendarProvider, useEventCalendar } from \"./calendar-context\"\n"]}