hazo_ui 3.1.0 → 3.1.2
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/CHANGE_LOG.md +31 -0
- package/dist/index.cjs +4 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -12
- package/dist/index.d.ts +13 -12
- package/dist/index.js +5 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/@babel/runtime/helpers/extends.js","../../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../src/lib/utils.ts","../src/components/hazo_context_provider/index.tsx","../src/utils/logger.ts","../src/utils/uuid.ts","../src/lib/hazo_ui_config.ts","../src/components/ui/button.tsx","../src/components/ui/dialog.tsx","../src/components/ui/command.tsx","../src/components/ui/popover.tsx","../src/components/ui/input.tsx","../src/components/ui/select.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/calendar.tsx","../src/components/hazo_ui_multi_filter_dialog/index.tsx","../src/components/hazo_ui_multi_sort_dialog/index.tsx","../src/components/ui/radio-group.tsx","../src/components/hazo_ui_flex_radio/index.tsx","../src/components/hazo_ui_pill_radio/index.tsx","../src/components/hazo_ui_flex_input/index.tsx","../src/components/hazo_ui_rte/toolbar/toolbar_button.tsx","../../node_modules/@uiw/react-color-sketch/esm/index.js","../../node_modules/@uiw/react-color-saturation/esm/index.js","../../node_modules/@uiw/color-convert/esm/index.js","../../node_modules/@uiw/react-drag-event-interactive/esm/index.js","../../node_modules/@uiw/react-drag-event-interactive/esm/utils.js","../../node_modules/@uiw/react-color-saturation/esm/Pointer.js","../../node_modules/@uiw/react-color-alpha/esm/index.js","../../node_modules/@uiw/react-color-alpha/esm/Pointer.js","../../node_modules/@uiw/react-color-editable-input/esm/index.js","../../node_modules/@uiw/react-color-editable-input-rgba/esm/index.js","../../node_modules/@uiw/react-color-hue/esm/index.js","../../node_modules/@uiw/react-color-swatch/esm/index.js","../src/components/hazo_ui_rte/types.ts","../src/components/hazo_ui_rte/utils.ts","../src/components/hazo_ui_rte/toolbar/toolbar.tsx","../src/components/hazo_ui_rte/attachments/attachments_list.tsx","../src/components/hazo_ui_rte/extensions/font_size_extension.tsx","../src/components/hazo_ui_rte/extensions/variable_extension.tsx","../src/components/ui/tabs.tsx","../src/components/hazo_ui_rte/index.tsx","../src/components/hazo_ui_command/extensions/command_node_extension.tsx","../src/components/hazo_ui_command/extensions/command_suggestion.tsx","../src/components/hazo_ui_command/components/command_pill.tsx","../src/components/hazo_ui_command/components/command_popover.tsx","../src/components/hazo_ui_command/index.tsx","../../node_modules/@tiptap/extension-document/src/document.ts","../../node_modules/@tiptap/extension-document/src/index.ts","../../node_modules/@tiptap/extension-paragraph/src/paragraph.ts","../../node_modules/@tiptap/extension-paragraph/src/index.ts","../../node_modules/@tiptap/extension-text/src/text.ts","../../node_modules/@tiptap/extension-text/src/index.ts","../src/components/hazo_ui_textbox/index.tsx","../../node_modules/@tiptap/extension-hard-break/src/hard-break.ts","../../node_modules/@tiptap/extension-hard-break/src/index.ts","../src/components/hazo_ui_textarea/index.tsx","../src/lib/animations.ts","../src/components/hazo_ui_dialog/index.tsx","../src/components/hazo_ui_confirm_dialog/index.tsx","../src/components/ui/drawer.tsx","../src/hooks/use_media_query.ts","../src/components/ui/accordion.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/hover-card.tsx","../src/components/ui/label.tsx","../src/components/ui/switch.tsx","../src/components/ui/textarea.tsx","../src/components/ui/separator.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/card.tsx","../src/components/ui/spinner.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/button-group.tsx","../src/components/skeleton/index.tsx","../src/components/empty_state/index.tsx","../src/components/error_banner/index.tsx","../src/components/error_page/index.tsx","../src/components/loading_timeout/index.tsx","../src/components/progressive_image/index.tsx","../src/components/toaster/index.tsx","../src/hooks/use_loading_state.ts","../src/hooks/use_error_display.ts","../src/hooks/use_debounce.ts","../src/hooks/use_copy_to_clipboard.ts","../src/hooks/use_is_mobile.ts","../src/hooks/use_local_storage.ts","../src/hooks/use_session_storage.ts","../src/hooks/use_click_outside.ts","../src/hooks/use_wake_lock.ts","../src/hooks/use_fullscreen.ts","../src/components/hazo_ui_kanban/kanban_card.tsx","../src/components/hazo_ui_kanban/kanban_column.tsx","../src/components/hazo_ui_kanban/kanban_editor.tsx","../src/components/hazo_ui_kanban/kanban_filter.tsx","../src/components/hazo_ui_kanban/apply_kanban_filter.ts","../src/components/hazo_ui_kanban/index.tsx","../src/components/ui/table.tsx","../src/components/hazo_ui_table/table_mobile_cards.tsx","../src/components/hazo_ui_table/use_table_state.ts","../src/components/hazo_ui_table/index.tsx","../src/components/hazo_ui_charts/sparkline.tsx","../src/components/hazo_ui_charts/inverse_sparkline.tsx","../src/components/hazo_ui_charts/format.ts","../src/components/hazo_ui_charts/line_chart.tsx","../src/components/hazo_ui_charts/multi_line_chart.tsx","../src/components/hazo_ui_charts/stacked_bars.tsx","../src/components/hazo_ui_charts/date_range_selector.tsx","../src/components/hazo_ui_celebration/index.tsx"],"names":["_extends","_objectWithoutPropertiesLoose","twMerge","clsx","React","generateRequestId","withContext","setBrowserCorrelationId","createLogger","cva","React2","Slot","jsx","DialogPrimitive","React3","jsxs","X","React4","PopoverPrimitive","React5","React6","SelectPrimitive","React7","ChevronDown","ChevronUp","Check","TooltipPrimitive","React8","DayPicker","ChevronLeft","ChevronRight","useState","CalendarIcon","format","useEffect","Filter","Plus","useSortable","CSS","GripVertical","ArrowUp","ArrowDown","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","arrayMove","ArrowUpDown","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","React9","RadioGroupPrimitive","Circle","FaIcons","MdIcons","HiIcons","BiIcons","AiIcons","BsIcons","FiIcons","IoIcons","RiIcons","TbIcons","CiIcons","isSelected","color","parts","React10","React11","import_extends","import_objectWithoutPropertiesLoose","translateColor","useRef","useCallback","clamp","useMemo","_jsx","_excluded","esm_default","Pointer","validHex","value","_jsxs","Fragment","React22","LuUndo2","LuRedo2","LuMinus","LuPlus","LuBold","LuItalic","LuUnderline","LuStrikethrough","LuSubscript","LuSuperscript","LuLink","LuRemoveFormatting","LuPalette","LuHighlighter","LuAlignLeft","LuAlignCenter","LuAlignRight","LuAlignJustify","LuList","LuListOrdered","LuListChecks","LuIndentDecrease","LuIndentIncrease","RxDividerHorizontal","LuImage","LuTable","LuTableRowsSplit","LuTableColumnsSplit","LuTrash2","_","LuGrid3X3","LuVariable","LuPaperclip","LuFileText","LuFileCode","LuFile","LuX","Extension","NodeViewWrapper","Node","mergeAttributes","ReactNodeViewRenderer","TabsPrimitive","React23","React24","useEditor","StarterKit","TextStyle","FontFamily","Underline","Subscript","Superscript","Link","TextAlign","Highlight","Color","Image","Placeholder","HorizontalRule","Table","TableRow","TableCell","TableHeader","TaskList","TaskItem","editor","EditorContent","PluginKey","Suggestion","get_variant_classes","get_custom_color_styles","React25","group_commands","createPortal","index_default","React26","get_editor_output","React27","DialogPrimitive2","Loader2","React28","DialogPrimitive3","DrawerPrimitive","React29","React30","AccordionPrimitive","React31","React32","CheckboxPrimitive","DropdownMenuPrimitive","React33","HoverCardPrimitive","React34","Label","React35","React36","SwitchPrimitives","React37","Separator","React38","SeparatorPrimitive","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","React39","ScrollAreaPrimitive","React40","React41","TogglePrimitive","React42","ToggleGroupPrimitive","AlertDialogPrimitive","React43","React44","AlertTriangle","OctagonAlert","React45","React46","SonnerToaster","toast","CheckCircle2","Pencil","useDroppable","React47","React48","React49","closestCorners","DragOverlay","React50","renderCell","Toolbar","React51","ChevronsUpDown","PAD","React52","PAD_LEFT","PAD_RIGHT","PAD_TOP","PAD_BOTTOM","AXIS_LABEL_COLOR","GRIDLINE_COLOR","compute_geometry","React53","React54","Download","Share2","Copy"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,eAAA,GAAA,UAAA,CAAA;AAAA,EAAA,mDAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAA,SAASA,UAAAA,GAAW;AAClB,MAAA,OAAO,MAAA,CAAO,OAAA,GAAUA,UAAAA,GAAW,MAAA,CAAO,MAAA,GAAS,OAAO,MAAA,CAAO,IAAA,EAAK,GAAI,SAAU,CAAA,EAAG;AACrF,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACzC,UAAA,IAAI,CAAA,GAAI,UAAU,CAAC,CAAA;AACnB,UAAA,KAAA,IAAS,CAAA,IAAK,CAAA,EAAG,CAAC,IAAI,cAAA,CAAe,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,EAAE,CAAC,CAAA,CAAA;AAAA,QAChE;AACA,QAAA,OAAO,CAAA;AAAA,MACT,CAAA,EAAG,MAAA,CAAO,OAAA,CAAQ,UAAA,GAAa,MAAM,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,GAAI,MAAA,CAAO,OAAA,EAASA,UAAAA,CAAS,KAAA,CAAM,MAAM,SAAS,CAAA;AAAA,IACjH;AACA,IAAA,MAAA,CAAO,OAAA,GAAUA,UAAAA,EAAU,MAAA,CAAO,OAAA,CAAQ,UAAA,GAAa,MAAM,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,GAAI,MAAA,CAAO,OAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACThG,IAAA,oCAAA,GAAA,UAAA,CAAA;AAAA,EAAA,wEAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAA,SAASC,+BAAAA,CAA8B,GAAG,CAAA,EAAG;AAC3C,MAAA,IAAI,IAAA,IAAQ,CAAA,EAAG,OAAO,EAAC;AACvB,MAAA,IAAI,IAAI,EAAC;AACT,MAAA,KAAA,IAAS,CAAA,IAAK,GAAG,IAAI,GAAG,cAAA,CAAe,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA,EAAG;AACjD,QAAA,IAAI,EAAA,KAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,EAAG;AACzB,QAAA,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA;AAAA,MACZ;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAA,CAAO,OAAA,GAAUA,+BAAAA,EAA+B,MAAA,CAAO,OAAA,CAAQ,UAAA,GAAa,MAAM,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,GAAI,MAAA,CAAO,OAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACE9G,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOC,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACsCO,SAAS,mBAAA,CAAoB;AAAA,EAClC,aAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAiD;AAE/C,EAAA,MAAM,EAAA,GAAWC,kBAAA,CAAA,OAAA;AAAA,IACf,MAAM,iBAAiBC,2BAAA,EAAkB;AAAA,IACzC,CAAC,aAAa;AAAA,GAChB;AAEA,EAAMD,6BAAU,MAAM;AAGpB,IAAAE,kBAAA,CAAY,EAAE,aAAA,EAAe,EAAA,EAAI,MAAA,IAAU,MAAM;AAC/C,MAAAC,8BAAA,CAAwB,EAAE,CAAA;AAAA,IAC5B,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AAEX,MAAAA,8BAAA,CAAwB,MAAS,CAAA;AAAA,IACnC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,EAAA,EAAI,MAAM,CAAC,CAAA;AAEf,EAAA,6DAAU,QAAA,EAAS,CAAA;AACrB;ACrDA,IAAM,cAAA,GAAyB;AAAA,EAC7B,MAAM,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,GAAI,QAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE,CAAA;AAAA,EACpF,OAAO,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,GAAI,QAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE,CAAA;AAAA,EACzF,MAAM,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,GAAI,QAAQ,IAAA,CAAK,CAAA,UAAA,EAAa,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE,CAAA;AAAA,EACtF,OAAO,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,GAAI,QAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE;AAC3F,CAAA;AAEA,SAAS,oBAAA,GAA+B;AACtC,EAAA,IAAI;AACF,IAAA,OAAOC,uBAAa,SAAS,CAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,cAAA;AAAA,EACT;AACF;AAEA,IAAI,cAAA,GAAgC,IAAA;AAM7B,SAAS,WAAW,MAAA,EAAkC;AAC3D,EAAA,cAAA,GAAiB,MAAA,IAAU,IAAA;AAC7B;AAMO,SAAS,UAAA,GAAqB;AACnC,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,cAAA,GAAiB,oBAAA,EAAqB;AAAA,EACxC;AACA,EAAA,OAAO,cAAA;AACT;ACtCO,SAAS,YAAA,GAAuB;AACrC,EAAA,OAAOH,2BAAAA,EAAkB,CAAE,KAAA,CAAM,CAAC,CAAA;AACpC;;;ACWA,IAAM,cAAA,GAA+B;AAAA;AAAA,EAEnC,uBAAA,EAAyB,MAAA;AAAA,EACzB,iBAAA,EAAmB,MAAA;AAAA;AAAA,EAGnB,8BAAA,EAAgC,MAAA;AAAA,EAChC,wBAAA,EAA0B,MAAA;AAAA,EAC1B,yBAAA,EAA2B,MAAA;AAAA;AAAA,EAG3B,8BAAA,EAAgC,MAAA;AAAA,EAChC,wBAAA,EAA0B,MAAA;AAAA,EAC1B,0BAAA,EAA4B,MAAA;AAAA,EAC5B,yBAAA,EAA2B,MAAA;AAAA;AAAA,EAG3B,6BAAA,EAA+B,MAAA;AAAA,EAC/B,uBAAA,EAAyB,MAAA;AAAA,EACzB,yBAAA,EAA2B,MAAA;AAAA,EAC3B,wBAAA,EAA0B;AAC5B,CAAA;AAGA,IAAI,aAAA,GAA8B,EAAE,GAAG,cAAA,EAAe;AAK/C,SAAS,kBAAA,GAA6C;AAC3D,EAAA,OAAO,EAAE,GAAG,aAAA,EAAc;AAC5B;AAkBO,SAAS,mBAAmB,MAAA,EAAqC;AACtE,EAAA,aAAA,GAAgB,EAAE,GAAG,aAAA,EAAe,GAAG,MAAA,EAAO;AAChD;AAKO,SAAS,oBAAA,GAA6B;AAC3C,EAAA,aAAA,GAAgB,EAAE,GAAG,cAAA,EAAe;AACtC;ACnFA,IAAM,cAAA,GAAiBI,0BAAA;AAAA,EACrB,wRAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,wDAAA;AAAA,QACT,WAAA,EAAa,oEAAA;AAAA,QACb,OAAA,EAAS,gFAAA;AAAA,QACT,SAAA,EAAW,8DAAA;AAAA,QACX,KAAA,EAAO,8CAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,gBAAA;AAAA,QACT,EAAA,EAAI,qBAAA;AAAA,QACJ,EAAA,EAAI,sBAAA;AAAA,QACJ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAcA,IAAM,cAAA,GAAsD;AAAA,EAC1D,OAAA,EAAS;AAAA,IACP,eAAA,EAAiB,qBAAA;AAAA,IACjB,KAAA,EAAO,gCAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,WAAA,EAAa;AAAA,IACX,eAAA,EAAiB,yBAAA;AAAA,IACjB,KAAA,EAAO,oCAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP,eAAA,EAAiB,wBAAA;AAAA,IACjB,KAAA,EAAO,wBAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,uBAAA;AAAA,IACjB,KAAA,EAAO;AAAA;AAEX,CAAA;AAEA,IAAM,MAAA,GAAeC,kBAAA,CAAA,UAAA;AAAA,EACnB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,OAAA,GAAU,KAAA,EAAO,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACvE,IAAA,MAAM,IAAA,GAAO,UAAUC,cAAA,GAAO,QAAA;AAC9B,IAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,OAAA,IAAW,SAAS,KAAK,EAAC;AACjE,IAAA,uBACEC,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,QAC1D,KAAA,EAAO,EAAE,GAAG,eAAA,EAAiB,GAAG,KAAA,EAAM;AAAA,QACtC,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;AC1ErB,IAAM,MAAA,GAAyBC,0BAAA,CAAA;AAC/B,IAAM,aAAA,GAAgCA,0BAAA,CAAA;AACtC,IAAM,YAAA,GAA+BA,0BAAA,CAAA;AACrC,IAAM,WAAA,GAA8BA,0BAAA,CAAA;AAEpC,IAAM,aAAA,GAAsBC,8BAG1B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BF,cAAAA;AAAA,EAAiBC,0BAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,yJAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,aAAA,CAAc,cAA8BA,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,aAAA,GAAsBC,kBAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCC,eAAA,CAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAAH,eAAC,aAAA,EAAA,EAAc,CAAA;AAAA,kBACfG,eAAA;AAAA,IAAiBF,0BAAA,CAAA,OAAA;AAAA,IAAhB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,qVAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDE,eAAA,CAAiBF,0BAAA,CAAA,KAAA,EAAhB,EAAsB,SAAA,EAAU,+QAAA,EAC/B,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAACI,aAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,0BACvBJ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA,SAAA,EACjC;AAAA;AAAA;AAAA;AACF,CAAA,EACF,CACD;AACD,aAAA,CAAc,cAA8BC,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,eAAe,CAAC;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACED,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,oDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,eAAe,CAAC;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEA,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,+DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,WAAA,GAAoBE,8BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BF,cAAAA;AAAA,EAAiBC,0BAAA,CAAA,KAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,mDAAA;AAAA,MACA,sCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA8BA,0BAAA,CAAA,KAAA,CAAM,WAAA;AAEhD,IAAM,iBAAA,GAA0BC,8BAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BF,cAAAA;AAAA,EAAiBC,0BAAA,CAAA,WAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,iBAAA,CAAkB,cAA8BA,0BAAA,CAAA,WAAA,CAAY,WAAA;ACpG5D,IAAM,OAAA,GAAgBI,8BAGpB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BL,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,2FAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,OAAA,CAAQ,WAAA,GAAc,SAAA;AAEtB,IAAM,YAAA,GAAqBK,kBAAA,CAAA,UAAA,CAKzB,CAAC,EAAE,SAAA,EAAW,aAAA,EAAe,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnDL,cAAAA;AAAA,EAAC,OAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,iLAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,MAAA,QAAA,GAAW,CAAC,CAAA;AACZ,MAAA,aAAA,GAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,IAChC,CAAA;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,WAAA,GAAoBK,8BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BL,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,iDAAA,EAAmD,SAAS,CAAA;AAAA,IACzE,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAE1B,IAAM,YAAA,GAAqBK,kBAAA,CAAA,UAAA,CAGzB,CAAC,KAAA,EAAO,wBACRL,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAU,0BAAA;AAAA,IACT,GAAG;AAAA;AACN,CACD;AACD,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,YAAA,GAAqBK,kBAAA,CAAA,UAAA,CAKzB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC7CF,eAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,OAAA,oBACCH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDACZ,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,MAED;AAAA;AAAA;AACH,CACD;AACD,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,WAAA,GAAoBK,kBAAA,CAAA,UAAA,CAOxB,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACpE,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,YAAY,KAAA,EAAO;AACrB,MAAA,QAAA,CAAS,KAAK,CAAA;AAAA,IAChB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEL,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,kBAAA;AAAA,QACA,4QAAA;AAAA;AAAA,QAEA,QAAA,IAAY,uFAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,OAAO,QAAA,GAAW;AAAA;AAAA,QAEhB,eAAA,EAAiB,wBAAA;AAAA,QACjB,KAAA,EAAO,mCAAA;AAAA,QACP,GAAG;AAAA,OACL,GAAI,KAAA;AAAA,MACJ,OAAA,EAAS,WAAA;AAAA,MACR,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;ACtH1B,IAAM,OAAA,GAA2BM,2BAAA,CAAA;AACjC,IAAM,cAAA,GAAkCA,2BAAA,CAAA;AACxC,IAAM,iBAAuBC,kBAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,QAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,OAAM,EAAG,GAAA,qBAC5DP,cAAAA,CAAkBM,2BAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAN,cAAAA;AAAA,EAAkBM,2BAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,4aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,cAAA,CAAe,cAA+BA,2BAAA,CAAA,OAAA,CAAQ,WAAA;ACjBtD,IAAM,KAAA,GAAcE,kBAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtC,IAAA,uBACER,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,8VAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;AChBpB,IAAM,MAAA,GAAyBS,0BAAA,CAAA;AAC/B,IAAM,WAAA,GAA8BA,0BAAA,CAAA;AACpC,IAAM,WAAA,GAA8BA,0BAAA,CAAA;AAEpC,IAAM,aAAA,GAAsBC,kBAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCP,eAAAA;AAAA,EAAiBM,0BAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,iTAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACDT,cAAAA,CAAiBS,0BAAA,CAAA,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EAC3B,QAAA,kBAAAT,cAAAA,CAACW,uBAAA,EAAA,EAAY,SAAA,EAAU,oBAAA,EAAqB,CAAA,EAC9C;AAAA;AAAA;AACF,CACD;AACD,aAAA,CAAc,cAA8BF,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,oBAAA,GAA6BC,8BAGjC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BV,cAAAA;AAAA,EAAiBS,0BAAA,CAAA,cAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,sDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAT,cAAAA,CAACY,qBAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU;AAAA;AACjC,CACD;AACD,oBAAA,CAAqB,cAA8BH,0BAAA,CAAA,cAAA,CAAe,WAAA;AAElE,IAAM,sBAAA,GAA+BC,8BAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BV,cAAAA;AAAA,EAAiBS,0BAAA,CAAA,gBAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,sDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAT,cAAAA,CAACW,uBAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AACnC,CACD;AACD,sBAAA,CAAuB,cACLF,0BAAA,CAAA,gBAAA,CAAiB,WAAA;AAEnC,IAAM,gBAAsBC,kBAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,SAAA,EAAW,UAAU,QAAA,GAAW,QAAA,EAAU,GAAG,KAAA,IAAS,GAAA,qBACzDV,cAAAA,CAAiBS,0BAAA,CAAA,MAAA,EAAhB,EACC,QAAA,kBAAAN,eAAAA;AAAA,EAAiBM,0BAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qcAAA;AAAA,MACA,aAAa,QAAA,IACX,iIAAA;AAAA,MACF;AAAA,KACF;AAAA,IACA,QAAA;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAT,eAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,sBACtBA,cAAAA;AAAA,QAAiBS,0BAAA,CAAA,QAAA;AAAA,QAAhB;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,KAAA;AAAA,YACA,aAAa,QAAA,IACX;AAAA,WACJ;AAAA,UAEC;AAAA;AAAA,OACH;AAAA,sBACAT,eAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAC1B,CAAA,EACF,CACD;AACD,aAAA,CAAc,cAA8BS,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,WAAA,GAAoBC,8BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BV,cAAAA;AAAA,EAAiBS,0BAAA,CAAA,KAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,wCAAA,EAA0C,SAAS,CAAA;AAAA,IAChE,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA8BA,0BAAA,CAAA,KAAA,CAAM,WAAA;AAEhD,IAAM,UAAA,GAAmBC,kBAAA,CAAA,UAAA,CAGvB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCP,eAAAA;AAAA,EAAiBM,0BAAA,CAAA,IAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,2NAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EACd,0BAAAA,cAAAA,CAAiBS,0BAAA,CAAA,aAAA,EAAhB,EACC,QAAA,kBAAAT,cAAAA,CAACa,iBAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,GAC7B,CAAA,EACF,CAAA;AAAA,sBAEAb,cAAAA,CAAiBS,0BAAA,CAAA,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AACtC,CACD;AACD,UAAA,CAAW,cAA8BA,0BAAA,CAAA,IAAA,CAAK,WAAA;AAE9C,IAAM,eAAA,GAAwBC,8BAG5B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BV,cAAAA;AAAA,EAAiBS,0BAAA,CAAA,SAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,IAClD,GAAG;AAAA;AACN,CACD;AACD,eAAA,CAAgB,cAA8BA,0BAAA,CAAA,SAAA,CAAU,WAAA;ACzIxD,IAAM,eAAA,GAAmCK,2BAAA,CAAA;AACzC,IAAM,OAAA,GAA2BA,2BAAA,CAAA;AACjC,IAAM,cAAA,GAAkCA,2BAAA,CAAA;AAExC,IAAM,cAAA,GAAuBC,kBAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1Cf,cAAAA;AAAA,EAAkBc,2BAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,oYAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,cAAA,CAAe,cAA+BA,2BAAA,CAAA,OAAA,CAAQ,WAAA;ACftD,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,uBACEd,cAAAA;AAAA,IAACgB,wBAAA;AAAA,IAAA;AAAA,MACC,eAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,SAAS,CAAA;AAAA,MAC9B,UAAA,EAAY;AAAA,QACV,MAAA,EAAQ,+DAAA;AAAA,QACR,KAAA,EAAO,WAAA;AAAA,QACP,OAAA,EAAS,gDAAA;AAAA,QACT,aAAA,EAAe,qBAAA;AAAA,QACf,GAAA,EAAK,6BAAA;AAAA,QACL,UAAA,EAAY,EAAA;AAAA,UACV;AAAA,SACF;AAAA,QACA,mBAAA,EAAqB,iBAAA;AAAA,QACrB,eAAA,EAAiB,kBAAA;AAAA,QACjB,KAAA,EAAO,kCAAA;AAAA,QACP,QAAA,EAAU,MAAA;AAAA,QACV,SAAA,EACE,gEAAA;AAAA,QACF,GAAA,EAAK,kBAAA;AAAA,QACL,IAAA,EAAM,kTAAA;AAAA,QACN,GAAA,EAAK,EAAA;AAAA,UACH;AAAA,SACF;AAAA,QACA,aAAA,EAAe,eAAA;AAAA,QACf,YAAA,EACE,kIAAA;AAAA,QACF,SAAA,EAAW,kCAAA;AAAA,QACX,WAAA,EACE,sIAAA;AAAA,QACF,YAAA,EAAc,kCAAA;AAAA,QACd,gBAAA,EACE,8DAAA;AAAA,QACF,UAAA,EAAY,WAAA;AAAA,QACZ,GAAG;AAAA,OACL;AAAA,MACA,UAAA,EAAY;AAAA,QACV,UAAU,sBAAMhB,cAAAA,CAACiB,uBAAA,EAAA,EAAY,WAAU,SAAA,EAAU,CAAA;AAAA,QACjD,WAAW,sBAAMjB,cAAAA,CAACkB,wBAAA,EAAA,EAAa,WAAU,SAAA,EAAU;AAAA,OACrD;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;ACwCvB,SAAS,eAAA,CAAgB;AAAA,EACvB,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIC,iBAAS,KAAK,CAAA;AAE1D,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,QAAQ,YAAY,IAAA;AAAM,MACxB,KAAK,MAAA;AACH,QAAA,uBACEnB,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,aAAa,KAAA,IAAS,EAAA;AAAA,YAC7B,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,cAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,CAAO,KAAA;AACvB,cAAA,IAAI,YAAY,UAAA,EAAY,SAAA,IAAa,MAAM,MAAA,GAAS,WAAA,CAAY,WAAW,SAAA,EAAW;AACxF,gBAAA;AAAA,cACF;AACA,cAAA,aAAA,CAAc,KAAK,CAAA;AAAA,YACrB,CAAA;AAAA,YACA,WAAA,EAAY,eAAA;AAAA,YACZ,SAAA,EAAW,YAAY,UAAA,EAAY,SAAA;AAAA,YACnC,SAAA,EAAW,YAAY,UAAA,EAAY,SAAA;AAAA,YACnC,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,MAGJ,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,eAAA,GAAkB;AAAA,UACtB,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,GAAA,EAAI;AAAA,UAC9B,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,QAAA,EAAI;AAAA,UAClC,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,GAAA,EAAI;AAAA,UACpC,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,GAAA,EAAI;AAAA,UACjC,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAI;AAAA,UACrC,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,QAAA;AAAI,SACpC;AAEA,QAAA,uBACEG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8DAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,aAAa,QAAA,IAAY,QAAA;AAAA,cAChC,aAAA,EAAe,CAAC,KAAA,KAAU,gBAAA,GAAmB,KAAK,CAAA;AAAA,cAElD,QAAA,EAAA;AAAA,gCAAAH,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,qDACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,gCACAA,cAAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,EAAA,qBACpBA,cAAAA,CAAC,UAAA,EAAA,EAA0B,KAAA,EAAO,EAAA,CAAG,OACnC,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAA,EAAa,QAAA,EAAA,EAAA,CAAG,OAAM,CAAA,EAAA,EADvB,EAAA,CAAG,KAEpB,CACD,CAAA,EACH;AAAA;AAAA;AAAA,WACF;AAAA,0BACAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAO,aAAa,KAAA,KAAU,MAAA,IAAa,aAAa,KAAA,KAAU,IAAA,GAAO,aAAa,KAAA,GAAQ,EAAA;AAAA,cAC9F,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,gBAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,CAAO,KAAA;AACvB,gBAAA,IAAI,UAAU,EAAA,EAAI;AAChB,kBAAA,aAAA,CAAc,EAAE,CAAA;AAChB,kBAAA;AAAA,gBACF;AACA,gBAAA,IAAI,QAAA,GAAW,YAAY,YAAA,EAAc,YAAA,GACrC,WAAW,KAAK,CAAA,GAChB,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AAEtB,gBAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG;AAErB,gBAAA,IAAI,WAAA,CAAY,YAAA,EAAc,YAAA,IAAgB,WAAA,CAAY,cAAc,aAAA,EAAe;AACrF,kBAAA,MAAM,gBAAgB,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,GAAG,MAAA,IAAU,CAAA;AACrD,kBAAA,IAAI,aAAA,GAAgB,WAAA,CAAY,YAAA,CAAa,aAAA,EAAe;AAAA,gBAC9D;AAEA,gBAAA,IAAI,YAAY,YAAA,EAAc,GAAA,KAAQ,UAAa,QAAA,GAAW,WAAA,CAAY,aAAa,GAAA,EAAK;AAC1F,kBAAA,QAAA,GAAW,YAAY,YAAA,CAAa,GAAA;AAAA,gBACtC;AACA,gBAAA,IAAI,YAAY,YAAA,EAAc,GAAA,KAAQ,UAAa,QAAA,GAAW,WAAA,CAAY,aAAa,GAAA,EAAK;AAC1F,kBAAA,QAAA,GAAW,YAAY,YAAA,CAAa,GAAA;AAAA,gBACtC;AAEA,gBAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,cACxB,CAAA;AAAA,cACA,WAAA,EAAY,OAAA;AAAA,cACZ,GAAA,EAAK,YAAY,YAAA,EAAc,GAAA;AAAA,cAC/B,GAAA,EAAK,YAAY,YAAA,EAAc,GAAA;AAAA,cAC/B,IAAA,EAAM,WAAA,CAAY,YAAA,EAAc,YAAA,GAAe,IAAA,GAAO,CAAA;AAAA,cACtD,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,MAEJ;AAAA,MAEA,KAAK,UAAA;AACH,QAAA,uBACEG,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,aAAa,KAAA,IAAS,EAAA;AAAA,YAC7B,aAAA,EAAe,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,CAAA;AAAA,YAE7C,QAAA,EAAA;AAAA,8BAAAH,cAAAA,CAAC,iBAAc,SAAA,EAAU,uDAAA,EACvB,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAY,kBAAA,EAAmB,CAAA,EAC9C,CAAA;AAAA,8BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,sBAAY,eAAA,EAAiB,GAAA,CAAI,CAAC,MAAA,qBACjCA,eAAC,UAAA,EAAA,EAA8B,KAAA,EAAO,OAAO,KAAA,EAC1C,QAAA,EAAA,MAAA,CAAO,SADO,MAAA,CAAO,KAExB,CACD,CAAA,EACH;AAAA;AAAA;AAAA,SACF;AAAA,MAGJ,KAAK,SAAA,EAAW;AACd,QAAA,MAAM,SAAA,GAAY,WAAA,CAAY,aAAA,EAAe,SAAA,IAAa,IAAA;AAC1D,QAAA,MAAM,UAAA,GAAa,WAAA,CAAY,aAAA,EAAe,UAAA,IAAc,KAAA;AAE5D,QAAA,uBACEG,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,YAAA,CAAa,KAAA,KAAU,MAAA,IAAa,YAAA,CAAa,UAAU,IAAA,GAAO,MAAA,CAAO,YAAA,CAAa,KAAK,CAAA,GAAI,EAAA;AAAA,YACtG,aAAA,EAAe,CAAC,KAAA,KAAU,aAAA,CAAc,UAAU,MAAM,CAAA;AAAA,YAExD,QAAA,EAAA;AAAA,8BAAAH,cAAAA,CAAC,iBAAc,SAAA,EAAU,sDAAA,EACvB,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAY,WAAA,EAAY,CAAA,EACvC,CAAA;AAAA,8BACAG,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,MAAA,EAAQ,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,gCACpCA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,SAAS,QAAA,EAAA,UAAA,EAAW;AAAA,eAAA,EACxC;AAAA;AAAA;AAAA,SACF;AAAA,MAEJ;AAAA,MAEA,KAAK,MAAA,EAAQ;AACX,QAAA,MAAM,aAAA,GAAgB;AAAA,UACpB,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,GAAA,EAAI;AAAA,UAC9B,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,QAAA,EAAI;AAAA,UAClC,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,GAAA,EAAI;AAAA,UACpC,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,GAAA,EAAI;AAAA,UACjC,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,QAAA,EAAI;AAAA,UACrC,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,QAAA;AAAI,SACpC;AAEA,QAAA,MAAM,YAAA,GAAe,YAAA,CAAa,KAAA,GAC7B,OAAO,YAAA,CAAa,KAAA,KAAU,QAAA,GAAW,IAAI,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA,GAAI,aAAa,KAAA,GACtF,MAAA;AAEJ,QAAA,uBACEG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,aAAa,QAAA,IAAY,QAAA;AAAA,cAChC,aAAA,EAAe,CAAC,KAAA,KAAU,gBAAA,GAAmB,KAAK,CAAA;AAAA,cAElD,QAAA,EAAA;AAAA,gCAAAH,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,qDACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,gCACAA,cAAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,EAAA,qBAClBA,cAAAA,CAAC,UAAA,EAAA,EAA0B,KAAA,EAAO,EAAA,CAAG,OACnC,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAA,EAAa,QAAA,EAAA,EAAA,CAAG,OAAM,CAAA,EAAA,EADvB,EAAA,CAAG,KAEpB,CACD,CAAA,EACH;AAAA;AAAA;AAAA,WACF;AAAA,0BACAG,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,cAAA,EAAgB,cAAc,iBAAA,EAC3C,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAG,eAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,SAAA;AAAA,gBACR,SAAA,EAAW,EAAA;AAAA,kBACT,qGAAA;AAAA,kBACA,CAAC,YAAA,IAAgB;AAAA,iBACnB;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAH,cAAAA,CAACoB,oBAAA,EAAA,EAAa,SAAA,EAAU,wCAAA,EAAyC,CAAA;AAAA,kCACjEpB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EACb,yBAAeqB,cAAA,CAAO,YAAA,EAAc,aAAa,CAAA,GAAI,aAAA,EACxD;AAAA;AAAA;AAAA,aACF,EACF,CAAA;AAAA,4BACArB,cAAAA,CAAC,cAAA,EAAA,EAAe,WAAU,iCAAA,EAAkC,KAAA,EAAM,SAChE,QAAA,kBAAAA,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,QAAA,EAAU,YAAA;AAAA,gBACV,QAAA,EAAU,CAAC,IAAA,KAAS;AAClB,kBAAA,aAAA,CAAc,IAAI,CAAA;AAClB,kBAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,gBACzB,CAAA;AAAA,gBACA,YAAA,EAAY;AAAA;AAAA,aACd,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,MAEJ;AAAA,MAEA;AACE,QAAA,OAAO,IAAA;AAAA;AACX,EACF,CAAA;AAEA,EAAA,uBACEG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mLAAA,EACb,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0MAAA,EACb,sBAAY,KAAA,EACf,CAAA;AAAA,oBACAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kEAAA,EACb,QAAA,EAAA;AAAA,sBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAkB,uBAAY,EAAE,CAAA;AAAA,sBAC/CA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,QAAA;AAAA,UACT,SAAA,EAAU,6GAAA;AAAA,UACV,YAAA,EAAY,CAAA,OAAA,EAAU,WAAA,CAAY,KAAK,CAAA,OAAA,CAAA;AAAA,UAEvC,QAAA,kBAAAA,cAAAA,CAACI,aAAAA,EAAA,EAAE,WAAU,6BAAA,EAA8B;AAAA;AAAA;AAC7C,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,SAAS,uBAAA,CAAwB;AAAA,EACtC,eAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAiB,EAAC;AAAA,EAClB,KAAA,GAAQ,QAAA;AAAA,EACR,WAAA,GAAc,4DAAA;AAAA,EACd,qBAAA;AAAA,EACA,eAAA;AAAA,EACA,2BAAA;AAAA,EACA,qBAAA;AAAA,EACA,2BAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,0BAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,EAAiC;AAC/B,EAAA,MAAM,SAAS,kBAAA,EAAmB;AAElC,EAAA,MAAM,kBAAA,GAAqB,+BAA+B,MAAA,CAAO,8BAAA;AACjE,EAAA,MAAM,oBAAA,GAAuB,yBAAyB,MAAA,CAAO,wBAAA;AAC7D,EAAA,MAAM,kBAAA,GAAqB,+BAA+B,MAAA,CAAO,8BAAA;AACjE,EAAA,MAAM,oBAAA,GAAuB,yBAAyB,MAAA,CAAO,wBAAA;AAC7D,EAAA,MAAM,sBAAA,GAAyB,2BAA2B,MAAA,CAAO,0BAAA;AACjE,EAAA,MAAM,iBAAA,GAAoB,8BAA8B,MAAA,CAAO,6BAAA;AAC/D,EAAA,MAAM,mBAAA,GAAsB,wBAAwB,MAAA,CAAO,uBAAA;AAC3D,EAAA,MAAM,qBAAA,GAAwB,0BAA0B,MAAA,CAAO,yBAAA;AAE/D,EAAA,MAAM,kBAAA,GAA0C;AAAA,IAC9C,GAAI,kBAAA,IAAsB,EAAE,eAAA,EAAiB,kBAAA,EAAoB,aAAa,kBAAA,EAAmB;AAAA,IACjG,GAAI,oBAAA,IAAwB,EAAE,KAAA,EAAO,oBAAA;AAAqB,GAC5D;AAEA,EAAA,MAAM,kBAAA,GAA0C;AAAA,IAC9C,GAAI,kBAAA,IAAsB,EAAE,eAAA,EAAiB,kBAAA,EAAmB;AAAA,IAChE,GAAI,oBAAA,IAAwB,EAAE,KAAA,EAAO,oBAAA,EAAqB;AAAA,IAC1D,GAAI,sBAAA,IAA0B,EAAE,WAAA,EAAa,sBAAA;AAAuB,GACtE;AAEA,EAAA,MAAM,iBAAA,GAAyC;AAAA,IAC7C,GAAI,iBAAA,IAAqB,EAAE,eAAA,EAAiB,iBAAA,EAAkB;AAAA,IAC9D,GAAI,mBAAA,IAAuB,EAAE,KAAA,EAAO,mBAAA,EAAoB;AAAA,IACxD,GAAI,qBAAA,IAAyB,EAAE,WAAA,EAAa,qBAAA;AAAsB,GACpE;AAEA,EAAA,MAAM,kBAAA,GAAqB,yBAAyB,MAAA,CAAO,uBAAA;AAC3D,EAAA,MAAM,oBAAA,GAAuB,mBAAmB,MAAA,CAAO,iBAAA;AAEvD,EAAA,MAAM,YAAA,GAAoC;AAAA,IACxC,GAAI,kBAAA,IAAsB,EAAE,eAAA,EAAiB,kBAAA,EAAmB;AAAA,IAChE,GAAI,oBAAA,IAAwB,EAAE,KAAA,EAAO,oBAAA;AAAqB,GAC5D;AAEA,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIe,iBAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,iBAAyB,cAAc,CAAA;AAC/E,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,iBAAS,KAAK,CAAA;AAE1D,EAAAG,kBAAU,MAAM;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,eAAA,CAAgB,cAAc,CAAA;AAAA,IAChC;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,cAAc,CAAC,CAAA;AAE3B,EAAA,MAAM,cAAA,GAAiB,CAAC,UAAA,KAAuB;AAC7C,IAAA,IAAI,aAAa,IAAA,CAAK,CAAA,EAAA,KAAM,EAAA,CAAG,KAAA,KAAU,UAAU,CAAA,EAAG;AAEtD,IAAA,MAAM,cAAc,eAAA,CAAgB,IAAA,CAAK,CAAA,EAAA,KAAM,EAAA,CAAG,UAAU,UAAU,CAAA;AACtE,IAAA,IAAI,CAAC,WAAA,EAAa;AAElB,IAAA,IAAI,YAAA,GAAoB,EAAA;AACxB,IAAA,IAAI,WAAA,CAAY,SAAS,SAAA,EAAW;AAClC,MAAA,YAAA,GAAe,KAAA;AAAA,IACjB,CAAA,MAAA,IAAW,WAAA,CAAY,IAAA,KAAS,QAAA,EAAU;AACxC,MAAA,YAAA,GAAe,WAAA,CAAY,cAAc,GAAA,IAAO,CAAA;AAAA,IAClD,CAAA,MAAA,IAAW,WAAA,CAAY,IAAA,KAAS,MAAA,EAAQ;AACtC,MAAA,YAAA,uBAAmB,IAAA,EAAK;AAAA,IAC1B;AAEA,IAAA,MAAM,SAAA,GAA0B;AAAA,MAC9B,KAAA,EAAO,UAAA;AAAA,MACP,UAAW,WAAA,CAAY,IAAA,KAAS,YAAY,WAAA,CAAY,IAAA,KAAS,SAAU,QAAA,GAAW,MAAA;AAAA,MACtF,KAAA,EAAO;AAAA,KACT;AACA,IAAA,eAAA,CAAgB,CAAC,GAAG,YAAA,EAAc,SAAS,CAAC,CAAA;AAC5C,IAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,UAAA,KAAuB;AAChD,IAAA,eAAA,CAAgB,aAAa,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,CAAG,KAAA,KAAU,UAAU,CAAC,CAAA;AAAA,EACpE,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,UAAA,EAAoB,KAAA,KAAe;AAC5D,IAAA,eAAA;AAAA,MACE,YAAA,CAAa,GAAA;AAAA,QAAI,CAAA,EAAA,KACf,GAAG,KAAA,KAAU,UAAA,GAAa,EAAE,GAAG,EAAA,EAAI,OAAM,GAAI;AAAA;AAC/C,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,UAAA,EAAoB,QAAA,KAAqB;AACrE,IAAA,eAAA;AAAA,MACE,YAAA,CAAa,GAAA;AAAA,QAAI,CAAA,EAAA,KACf,GAAG,KAAA,KAAU,UAAA,GAAa,EAAE,GAAG,EAAA,EAAI,UAAS,GAAI;AAAA;AAClD,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,cAAA,CAAe,CAAC,GAAG,YAAY,CAAC,CAAA;AAChC,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,eAAA,CAAgB,cAAc,CAAA;AAC9B,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,eAAA,CAAgB,EAAE,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,uBAAuB,eAAA,CAAgB,MAAA;AAAA,IAC3C,CAAA,EAAA,KAAM,CAAC,YAAA,CAAa,IAAA,CAAK,QAAM,EAAA,CAAG,KAAA,KAAU,GAAG,KAAK;AAAA,GACtD;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,UAAA,KAAgD;AACtE,IAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,CAAA,EAAA,KAAM,EAAA,CAAG,UAAU,UAAU,CAAA;AAAA,EAC3D,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,eAAe,MAAA,GAAS,CAAA;AAEjD,EAAA,MAAM,iBAAiB,gBAAA,mBACrBnB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sCAAA,EACb,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EAA+C,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,IAC3E,cAAA,CAAe,GAAA,CAAI,CAAC,YAAA,KAAiB;AACpC,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,YAAA,CAAa,KAAK,CAAA;AACrD,MAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,MAAA,IAAI,YAAA,GAAe,MAAA,CAAO,YAAA,CAAa,KAAK,CAAA;AAC5C,MAAA,IAAI,WAAA,CAAY,SAAS,SAAA,EAAW;AAClC,QAAA,YAAA,GAAe,YAAA,CAAa,QACvB,WAAA,CAAY,aAAA,EAAe,aAAa,IAAA,GACxC,WAAA,CAAY,eAAe,UAAA,IAAc,KAAA;AAAA,MAChD,CAAA,MAAA,IAAW,WAAA,CAAY,IAAA,KAAS,UAAA,EAAY;AAC1C,QAAA,MAAM,MAAA,GAAS,YAAY,eAAA,EAAiB,IAAA,CAAK,SAAO,GAAA,CAAI,KAAA,KAAU,aAAa,KAAK,CAAA;AACxF,QAAA,YAAA,GAAe,QAAQ,KAAA,IAAS,YAAA;AAAA,MAClC,CAAA,MAAA,IAAW,WAAA,CAAY,IAAA,KAAS,MAAA,EAAQ;AACtC,QAAA,MAAM,SAAA,GAAY,aAAa,KAAA,YAAiB,IAAA,GAC5C,aAAa,KAAA,GACb,IAAI,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA;AAC/B,QAAA,IAAI,CAAC,KAAA,CAAM,SAAA,CAAU,OAAA,EAAS,CAAA,EAAG;AAC/B,UAAA,YAAA,GAAeqB,cAAA,CAAO,WAAW,aAAa,CAAA;AAAA,QAChD;AAAA,MACF;AAEA,MAAA,MAAM,gBAAgB,YAAA,CAAa,QAAA,GAC/B,YAAA,CAAa,QAAA,CAAS,QAAQ,GAAA,EAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA,CAAA,KAAK,CAAA,CAAE,WAAA,EAAa,IAAI,GAAA,GACjF,EAAA;AAEJ,MAAA,uBACElB,eAAAA,CAAC,KAAA,EAAA,EAA6B,SAAA,EAAU,0BAAA,EACrC,QAAA,EAAA;AAAA,QAAA,WAAA,CAAY,KAAA;AAAA,QAAM,IAAA;AAAA,QAAG,aAAA;AAAA,QAAe;AAAA,OAAA,EAAA,EAD7B,aAAa,KAEvB,CAAA;AAAA,IAEJ,CAAC;AAAA,GAAA,EACH,oBAEAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAqC,QAAA,EAAA,mBAAA,EAAiB,CAAA;AAGvE,EAAA,uBACEG,eAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,cAAc,SAAA,EAClC,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAAG,eAAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAH,cAAAA,CAAC,kBAAe,OAAA,EAAO,IAAA,EACrB,0BAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAO,IAAA,EACpB,QAAA,kBAAAG,eAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,SAAA,EAAU,mBAAA;AAAA,UACV,YAAA,EAAW,oBAAA;AAAA,UAEX,QAAA,EAAA;AAAA,4BAAAH,cAAAA;AAAA,cAACuB,kBAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,8BAAA;AAAA,kBACA,gBAAA,IAAoB;AAAA;AACtB;AAAA,aACF;AAAA,YAAE,QAAA;AAAA,YAED,oCACCvB,cAAAA,CAAC,UAAK,SAAA,EAAU,8IAAA,EACb,yBAAe,MAAA,EAClB;AAAA;AAAA;AAAA,SAGN,CAAA,EACF,CAAA;AAAA,sBACAA,cAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,cAAA,EAAe;AAAA,KAAA,EAClC,CAAA,EACF,CAAA;AAAA,oBACAG,eAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,yEAAA,EACvB,QAAA,EAAA;AAAA,sBAAAA,eAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,iEAAA;AAAA,UACV,KAAA,EAAO,YAAA;AAAA,UAEP,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,yBAAA,EAA2B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BACxDA,cAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,iDAC1B,QAAA,EAAA,WAAA,EACH;AAAA;AAAA;AAAA,OACF;AAAA,sBAEAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACZ,QAAA,EAAA;AAAA,QAAA,YAAA,CAAa,MAAA,GAAS,CAAA,mBACrBH,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oCAAA,EACZ,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,YAAA,KAAiB;AAClC,UAAA,MAAM,WAAA,GAAc,cAAA,CAAe,YAAA,CAAa,KAAK,CAAA;AACrD,UAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,UAAA,uBACEA,cAAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cAEC,YAAA;AAAA,cACA,WAAA;AAAA,cACA,eAAe,CAAC,KAAA,KAAU,iBAAA,CAAkB,YAAA,CAAa,OAAO,KAAK,CAAA;AAAA,cACrE,kBAAkB,CAAC,QAAA,KAAa,oBAAA,CAAqB,YAAA,CAAa,OAAO,QAAQ,CAAA;AAAA,cACjF,QAAA,EAAU,MAAM,iBAAA,CAAkB,YAAA,CAAa,KAAK;AAAA,aAAA;AAAA,YAL/C,YAAA,CAAa;AAAA,WAMpB;AAAA,QAEJ,CAAC,GACH,CAAA,mBAEAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4IAA2I,QAAA,EAAA,2DAAA,EAE1J,CAAA;AAAA,wBAGFA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,kBAAAG,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,cAAA,EAAgB,YAAA,EAAc,iBAAA,EAC3C,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAG,eAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,UAAA;AAAA,cACL,eAAA,EAAe,cAAA;AAAA,cACf,QAAA,EAAU,qBAAqB,MAAA,KAAW,CAAA;AAAA,cAC1C,SAAA,EAAU,+LAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAACwB,gBAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,gCACxCxB,cAAAA,CAAC,MAAA,EAAA,EACE,+BAAqB,MAAA,KAAW,CAAA,GAAI,qBAAqB,kBAAA,EAC5D;AAAA;AAAA;AAAA,WACF,EACF,CAAA;AAAA,0BACAA,eAAC,cAAA,EAAA,EAAe,SAAA,EAAU,mEAAkE,KAAA,EAAM,OAAA,EAChG,QAAA,kBAAAG,eAAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAAY,kBAAA,EAAmB,WAAU,mBAAA,EAAoB,CAAA;AAAA,4BAC3EA,cAAAA,CAAC,WAAA,EAAA,EACE,+BAAqB,MAAA,KAAW,CAAA,mBAC/BA,cAAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAA,sBAAA,EAAoB,CAAA,mBAElCA,cAAAA,CAAC,YAAA,EAAA,EACE,+BAAqB,GAAA,CAAI,CAAC,0BACzBA,cAAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBAEC,OAAO,KAAA,CAAM,KAAA;AAAA,gBACb,QAAA,EAAU,MAAM,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA;AAAA,gBAC1C,SAAA,EAAU,kBAAA;AAAA,gBAET,QAAA,EAAA,KAAA,CAAM;AAAA,eAAA;AAAA,cALF,KAAA,CAAM;AAAA,aAOd,GACH,CAAA,EAEJ;AAAA,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAG,eAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,0IAAA,EACtB,QAAA,EAAA;AAAA,wBAAAH,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBACZ,QAAA,EAAA,YAAA,CAAa,MAAA,GAAS,qBACrBA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,cAAA;AAAA,YACT,SAAA,EAAU,+DAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACR,QAAA,EAAA;AAAA;AAAA,SAED,EAEJ,CAAA;AAAA,wBACAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,YAAA;AAAA,cACT,SAAA,EAAU,gBAAA;AAAA,cACV,KAAA,EAAO,kBAAA;AAAA,cACR,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,WAAA;AAAA,cACT,SAAA,EAAU,eAAA;AAAA,cACV,KAAA,EAAO,kBAAA;AAAA,cACR,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACpiBA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACEyB,oBAAA,CAAY,EAAE,EAAA,EAAI,UAAA,CAAW,OAAO,CAAA;AAExC,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,SAAA,EAAWC,aAAA,CAAI,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA;AAAA,IAC3C,UAAA;AAAA,IACA,OAAA,EAAS,aAAa,GAAA,GAAM,CAAA;AAAA,IAC5B,MAAA,EAAQ,aAAa,EAAA,GAAK;AAAA,GAC5B;AAEA,EAAA,uBACEvB,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,KAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,4IAAA;AAAA,QACA,aAAa,WAAA,GAAc;AAAA,OAC7B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAH,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACJ,GAAG,UAAA;AAAA,YACH,GAAG,SAAA;AAAA,YACJ,SAAA,EAAU,6JAAA;AAAA,YACV,YAAA,EAAY,WAAW,UAAU,CAAA,CAAA;AAAA,YAEjC,QAAA,kBAAAA,cAAAA,CAAC2B,wBAAA,EAAA,EAAa,SAAA,EAAU,uBAAA,EAAwB;AAAA;AAAA,SAClD;AAAA,wBACA3B,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,gKAAA;AAAA,YACV,YAAA,EAAY,iBAAiB,QAAQ,CAAA,CAAA;AAAA,YAEpC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uEACb,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,wBACAG,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,YAAA;AAAA,YACL,YAAA,EAAY,sBAAsB,UAAU,CAAA,CAAA;AAAA,YAC5C,SAAA,EAAU,8GAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAA,eAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,IAAA,EAAK,OAAA;AAAA,kBACL,cAAA,EAAc,WAAW,SAAA,KAAc,KAAA;AAAA,kBACvC,aAAA,EAAa,WAAW,SAAA,KAAc,KAAA;AAAA,kBACtC,OAAA,EAAS,MAAM,iBAAA,CAAkB,KAAK,CAAA;AAAA,kBACtC,SAAA,EAAU,iPAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAH,cAAAA,CAAC4B,mBAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,oBAAE;AAAA;AAAA;AAAA,eAEjC;AAAA,8BACAzB,eAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,IAAA,EAAK,OAAA;AAAA,kBACL,cAAA,EAAc,WAAW,SAAA,KAAc,MAAA;AAAA,kBACvC,aAAA,EAAa,WAAW,SAAA,KAAc,MAAA;AAAA,kBACtC,OAAA,EAAS,MAAM,iBAAA,CAAkB,MAAM,CAAA;AAAA,kBACvC,SAAA,EAAU,kPAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAH,cAAAA,CAAC6B,qBAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,oBAAE;AAAA;AAAA;AAAA;AAEnC;AAAA;AAAA,SACF;AAAA,wBACA7B,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,QAAA;AAAA,YACT,SAAA,EAAU,6GAAA;AAAA,YACV,YAAA,EAAY,UAAU,UAAU,CAAA,UAAA,CAAA;AAAA,YAEhC,QAAA,kBAAAA,cAAAA,CAACI,aAAAA,EAAA,EAAE,WAAU,6BAAA,EAA8B;AAAA;AAAA;AAC7C;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,eAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAoB,EAAC;AAAA,EACrB,KAAA,GAAQ,MAAA;AAAA,EACR,WAAA,GAAc,yEAAA;AAAA,EACd,qBAAA;AAAA,EACA,eAAA;AAAA,EACA,2BAAA;AAAA,EACA,qBAAA;AAAA,EACA,2BAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,0BAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAE7B,EAAA,MAAM,SAAS,kBAAA,EAAmB;AAGlC,EAAA,MAAM,kBAAA,GAAqB,+BAA+B,MAAA,CAAO,8BAAA;AACjE,EAAA,MAAM,oBAAA,GAAuB,yBAAyB,MAAA,CAAO,wBAAA;AAC7D,EAAA,MAAM,kBAAA,GAAqB,+BAA+B,MAAA,CAAO,8BAAA;AACjE,EAAA,MAAM,oBAAA,GAAuB,yBAAyB,MAAA,CAAO,wBAAA;AAC7D,EAAA,MAAM,sBAAA,GAAyB,2BAA2B,MAAA,CAAO,0BAAA;AACjE,EAAA,MAAM,iBAAA,GAAoB,8BAA8B,MAAA,CAAO,6BAAA;AAC/D,EAAA,MAAM,mBAAA,GAAsB,wBAAwB,MAAA,CAAO,uBAAA;AAC3D,EAAA,MAAM,qBAAA,GAAwB,0BAA0B,MAAA,CAAO,yBAAA;AAE/D,EAAA,MAAM,kBAAA,GAA0C;AAAA,IAC9C,GAAI,kBAAA,IAAsB,EAAE,eAAA,EAAiB,kBAAA,EAAoB,aAAa,kBAAA,EAAmB;AAAA,IACjG,GAAI,oBAAA,IAAwB,EAAE,KAAA,EAAO,oBAAA;AAAqB,GAC5D;AAEA,EAAA,MAAM,kBAAA,GAA0C;AAAA,IAC9C,GAAI,kBAAA,IAAsB,EAAE,eAAA,EAAiB,kBAAA,EAAmB;AAAA,IAChE,GAAI,oBAAA,IAAwB,EAAE,KAAA,EAAO,oBAAA,EAAqB;AAAA,IAC1D,GAAI,sBAAA,IAA0B,EAAE,WAAA,EAAa,sBAAA;AAAuB,GACtE;AAEA,EAAA,MAAM,iBAAA,GAAyC;AAAA,IAC7C,GAAI,iBAAA,IAAqB,EAAE,eAAA,EAAiB,iBAAA,EAAkB;AAAA,IAC9D,GAAI,mBAAA,IAAuB,EAAE,KAAA,EAAO,mBAAA,EAAoB;AAAA,IACxD,GAAI,qBAAA,IAAyB,EAAE,WAAA,EAAa,qBAAA;AAAsB,GACpE;AAGA,EAAA,MAAM,kBAAA,GAAqB,yBAAyB,MAAA,CAAO,uBAAA;AAC3D,EAAA,MAAM,oBAAA,GAAuB,mBAAmB,MAAA,CAAO,iBAAA;AAEvD,EAAA,MAAM,YAAA,GAAoC;AAAA,IACxC,GAAI,kBAAA,IAAsB,EAAE,eAAA,EAAiB,kBAAA,EAAmB;AAAA,IAChE,GAAI,oBAAA,IAAwB,EAAE,KAAA,EAAO,oBAAA;AAAqB,GAC5D;AAEA,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIe,iBAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,iBAAuB,iBAAiB,CAAA;AAC5E,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,iBAAS,KAAK,CAAA;AAE1D,EAAA,MAAM,OAAA,GAAUW,iBAAA;AAAA,IACdC,gBAAA,CAAUC,sBAAe,EAAE,oBAAA,EAAsB,EAAE,QAAA,EAAU,CAAA,IAAK,CAAA;AAAA,IAClED,iBAAUE,qBAAA,EAAgB;AAAA,MACxB,gBAAA,EAAkBC;AAAA,KACnB;AAAA,GACH;AAGA,EAAAZ,kBAAU,MAAM;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,aAAA,CAAc,iBAAiB,CAAA;AAAA,IACjC;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAE9B,EAAA,MAAM,cAAA,GAAiB,CAAC,UAAA,KAAuB;AAC7C,IAAA,IAAI,WAAW,IAAA,CAAK,CAAA,EAAA,KAAM,EAAA,CAAG,KAAA,KAAU,UAAU,CAAA,EAAG;AAClD,MAAA;AAAA,IACF;AACA,IAAA,aAAA,CAAc,CAAC,GAAG,UAAA,EAAY,EAAE,OAAO,UAAA,EAAY,SAAA,EAAW,KAAA,EAAO,CAAC,CAAA;AACtE,IAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,UAAA,KAAuB;AAChD,IAAA,aAAA,CAAc,WAAW,MAAA,CAAO,CAAA,EAAA,KAAM,EAAA,CAAG,KAAA,KAAU,UAAU,CAAC,CAAA;AAAA,EAChE,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,UAAA,EAAoB,SAAA,KAA8B;AAC/E,IAAA,aAAA;AAAA,MACE,UAAA,CAAW,GAAA;AAAA,QAAI,CAAA,EAAA,KACb,GAAG,KAAA,KAAU,UAAA,GAAa,EAAE,GAAG,EAAA,EAAI,WAAU,GAAI;AAAA;AACnD,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAC7C,IAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,KAAA;AACzB,IAAA,IAAI,CAAC,IAAA,IAAQ,MAAA,CAAO,EAAA,KAAO,KAAK,EAAA,EAAI;AAEpC,IAAA,MAAM,WAAW,UAAA,CAAW,SAAA,CAAU,QAAM,EAAA,CAAG,KAAA,KAAU,OAAO,EAAE,CAAA;AAClE,IAAA,MAAM,WAAW,UAAA,CAAW,SAAA,CAAU,QAAM,EAAA,CAAG,KAAA,KAAU,KAAK,EAAE,CAAA;AAChE,IAAA,IAAI,QAAA,KAAa,EAAA,IAAM,QAAA,KAAa,EAAA,EAAI;AACtC,MAAA,aAAA,CAAca,kBAAA,CAAU,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IACzD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,YAAA,CAAa,CAAC,GAAG,UAAU,CAAC,CAAA;AAC5B,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,aAAA,CAAc,iBAAiB,CAAA;AAC/B,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,aAAA,CAAc,EAAE,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,uBAAuB,eAAA,CAAgB,MAAA;AAAA,IAC3C,CAAA,EAAA,KAAM,CAAC,UAAA,CAAW,IAAA,CAAK,QAAM,EAAA,CAAG,KAAA,KAAU,GAAG,KAAK;AAAA,GACpD;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,UAAA,KAA+B;AACpD,IAAA,OAAO,gBAAgB,IAAA,CAAK,CAAA,EAAA,KAAM,GAAG,KAAA,KAAU,UAAU,GAAG,KAAA,IAAS,UAAA;AAAA,EACvE,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,kBAAkB,MAAA,GAAS,CAAA;AAElD,EAAA,MAAM,iBAAiB,cAAA,mBACrBhC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oCAAA,EACb,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EAA+C,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,IACzE,iBAAA,CAAkB,IAAI,CAAC,UAAA,EAAY,0BAClCG,eAAAA,CAAC,KAAA,EAAA,EAA2B,SAAA,EAAU,0BAAA,EACnC,QAAA,EAAA;AAAA,MAAA,KAAA,GAAQ,CAAA;AAAA,MAAE,IAAA;AAAA,MAAG,aAAA,CAAc,WAAW,KAAK,CAAA;AAAA,MAAE,IAAA;AAAA,MAAG,UAAA,CAAW,SAAA,KAAc,KAAA,GAAQ,KAAA,GAAQ,MAAA;AAAA,MAAO;AAAA,KAAA,EAAA,EADzF,UAAA,CAAW,KAErB,CACD;AAAA,GAAA,EACH,oBAEAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAmC,QAAA,EAAA,iBAAA,EAAe,CAAA;AAGnE,EAAA,uBACEG,eAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,cAAc,SAAA,EAClC,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAAG,eAAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAH,cAAAA,CAAC,kBAAe,OAAA,EAAO,IAAA,EACrB,0BAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAO,IAAA,EACpB,QAAA,kBAAAG,eAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,SAAA,EAAU,iBAAA;AAAA,UACV,YAAA,EAAW,kBAAA;AAAA,UAEX,QAAA,EAAA;AAAA,4BAAAH,cAAAA;AAAA,cAACoC,uBAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,4BAAA;AAAA,kBACA,cAAA,IAAkB;AAAA;AACpB;AAAA,aACF;AAAA,YAAE,MAAA;AAAA,YAED,kCACCpC,cAAAA,CAAC,UAAK,SAAA,EAAU,4IAAA,EACb,4BAAkB,MAAA,EACrB;AAAA;AAAA;AAAA,SAGN,CAAA,EACF,CAAA;AAAA,sBACAA,cAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,cAAA,EAAe;AAAA,KAAA,EAClC,CAAA,EACF,CAAA;AAAA,oBACAG,eAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,0DAAA,EACvB,QAAA,EAAA;AAAA,sBAAAA,eAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,+DAAA;AAAA,UACV,KAAA,EAAO,YAAA;AAAA,UAEP,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,yBAAA,EAA2B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BACxDA,cAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,iDAC1B,QAAA,EAAA,WAAA,EACH;AAAA;AAAA;AAAA,OACF;AAAA,sBAEAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACZ,QAAA,EAAA;AAAA,QAAA,UAAA,CAAW,SAAS,CAAA,mBACnBH,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCACb,QAAA,kBAAAA,cAAAA;AAAA,UAACqC,iBAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,kBAAA,EAAoBC,oBAAA;AAAA,YACpB,SAAA,EAAW,aAAA;AAAA,YAEX,QAAA,kBAAAtC,cAAAA;AAAA,cAACuC,wBAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,UAAA,CAAW,GAAA,CAAI,CAAA,EAAA,KAAM,GAAG,KAAK,CAAA;AAAA,gBACpC,QAAA,EAAUC,oCAAA;AAAA,gBAET,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,UAAA,EAAY,wBAC3BxC,cAAAA;AAAA,kBAAC,qBAAA;AAAA,kBAAA;AAAA,oBAEC,UAAA;AAAA,oBACA,UAAA,EAAY,aAAA,CAAc,UAAA,CAAW,KAAK,CAAA;AAAA,oBAC1C,UAAU,GAAA,GAAM,CAAA;AAAA,oBAChB,mBAAmB,CAAC,SAAA,KAClB,qBAAA,CAAsB,UAAA,CAAW,OAAO,SAAS,CAAA;AAAA,oBAEnD,QAAA,EAAU,MAAM,iBAAA,CAAkB,UAAA,CAAW,KAAK;AAAA,mBAAA;AAAA,kBAP7C,UAAA,CAAW;AAAA,iBASnB;AAAA;AAAA;AACH;AAAA,WAEJ,CAAA,mBAEAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0IAAyI,QAAA,EAAA,2DAAA,EAExJ,CAAA;AAAA,wBAGFA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,kBAAAG,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,cAAA,EAAgB,YAAA,EAAc,iBAAA,EAC3C,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAG,eAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,UAAA;AAAA,cACL,eAAA,EAAe,cAAA;AAAA,cACf,QAAA,EAAU,qBAAqB,MAAA,KAAW,CAAA;AAAA,cAC1C,SAAA,EAAU,+LAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAACwB,gBAAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,gCACxCxB,cAAAA,CAAC,MAAA,EAAA,EACE,+BAAqB,MAAA,KAAW,CAAA,GAAI,qBAAqB,gBAAA,EAC5D;AAAA;AAAA;AAAA,WACF,EACF,CAAA;AAAA,0BACAA,eAAC,cAAA,EAAA,EAAe,SAAA,EAAU,mEAAkE,KAAA,EAAM,OAAA,EAChG,QAAA,kBAAAG,eAAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAAY,kBAAA,EAAmB,WAAU,mBAAA,EAAoB,CAAA;AAAA,4BAC3EA,cAAAA,CAAC,WAAA,EAAA,EACE,+BAAqB,MAAA,KAAW,CAAA,mBAC/BA,cAAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAA,sBAAA,EAAoB,CAAA,mBAElCA,cAAAA,CAAC,YAAA,EAAA,EACE,+BAAqB,GAAA,CAAI,CAAC,0BACzBA,cAAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBAEC,OAAO,KAAA,CAAM,KAAA;AAAA,gBACb,QAAA,EAAU,MAAM,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA;AAAA,gBAC1C,SAAA,EAAU,kBAAA;AAAA,gBAET,QAAA,EAAA,KAAA,CAAM;AAAA,eAAA;AAAA,cALF,KAAA,CAAM;AAAA,aAOd,GACH,CAAA,EAEJ;AAAA,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAG,eAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,wIAAA,EACtB,QAAA,EAAA;AAAA,wBAAAH,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBACZ,QAAA,EAAA,UAAA,CAAW,MAAA,GAAS,qBACnBA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,cAAA;AAAA,YACT,SAAA,EAAU,+DAAA;AAAA,YACV,KAAA,EAAO,iBAAA;AAAA,YACR,QAAA,EAAA;AAAA;AAAA,SAED,EAEJ,CAAA;AAAA,wBACAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,YAAA;AAAA,cACT,SAAA,EAAU,gBAAA;AAAA,cACV,KAAA,EAAO,kBAAA;AAAA,cACR,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAS,WAAA;AAAA,cACT,SAAA,EAAU,eAAA;AAAA,cACV,KAAA,EAAO,kBAAA;AAAA,cACR,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACtdA,IAAM,UAAA,GAAmByC,8BAGvB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAClC,EAAA,uBACEzC,cAAAA;AAAA,IAAqB0C,8BAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,MACpC,GAAG,KAAA;AAAA,MACJ;AAAA;AAAA,GACF;AAEJ,CAAC;AACD,UAAA,CAAW,cAAkCA,8BAAA,CAAA,IAAA,CAAK,WAAA;AAElD,IAAM,cAAA,GAAuBD,8BAG3B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAClC,EAAA,uBACEzC,cAAAA;AAAA,IAAqB0C,8BAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,0OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA1C,cAAAA,CAAqB0C,8BAAA,CAAA,SAAA,EAApB,EAA8B,SAAA,EAAU,kCAAA,EACvC,QAAA,kBAAA1C,cAAAA,CAAC2C,kBAAA,EAAA,EAAO,SAAA,EAAU,uCAAA,EAAwC,CAAA,EAC5D;AAAA;AAAA,GACF;AAEJ,CAAC;AACD,cAAA,CAAe,cAAkCD,8BAAA,CAAA,IAAA,CAAK,WAAA;ACbtD,IAAM,UAAA,GAAkC;AAAA,EACtC,EAAA,EAAIE,kBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,GAAA,EAAKA,kBAAA;AAAA,EACL,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC,kBAAA;AAAA,EACJ,EAAA,EAAIC;AACN,CAAA;AAKA,SAAS,eAAe,OAAA,EAAsB;AAC5C,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,aAAA,GAAgB,QAAQ,WAAA,EAAY;AAC1C,EAAA,OAAO,UAAA,CAAW,aAAa,CAAA,IAAK,IAAA;AACtC;AA2BA,SAAS,gBAAA,CAAiB,SAA6B,QAAA,EAA+D;AACpH,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,QAAA,EAAU,OAAO,IAAA;AAElC,EAAA,MAAM,WAAA,GAAc,eAAe,OAAO,CAAA;AAC1C,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,EAAA,MAAM,aAAA,GAAgB,YAAY,QAAQ,CAAA;AAC1C,EAAA,OAAO,aAAA,IAAiB,IAAA;AAC1B;AAMO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA,GAAS,YAAA;AAAA,EACT,KAAA,GAAQ,OAAA;AAAA,EACR,aAAA,GAAgB,IAAA;AAAA,EAChB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA,GAAY,QAAA;AAAA,EACZ,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAAyB;AAMvB,EAAA,MAAM,qBAAA,GAAwB,CAAC,aAAA,KAA0B;AACvD,IAAA,QAAA,CAAS,aAAa,CAAA;AAAA,EACxB,CAAA;AAKA,EAAA,MAAM,oBAAA,GAAuB,CAAC,aAAA,KAA0B;AACtD,IAAA,MAAM,gBAAgB,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,EAAC;AACtD,IAAA,MAAMC,WAAAA,GAAa,aAAA,CAAc,QAAA,CAAS,aAAa,CAAA;AAEvD,IAAA,IAAIA,WAAAA,EAAY;AAEd,MAAA,QAAA,CAAS,cAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,aAAa,CAAC,CAAA;AAAA,IAC3D,CAAA,MAAO;AAEL,MAAA,QAAA,CAAS,CAAC,GAAG,aAAA,EAAe,aAAa,CAAC,CAAA;AAAA,IAC5C;AAAA,EACF,CAAA;AAKA,EAAA,MAAM,UAAA,GAAa,CAAC,SAAA,KAA+B;AACjD,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,OAAO,KAAA,KAAU,SAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,MAAM,gBAAgB,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,EAAC;AACtD,MAAA,OAAO,aAAA,CAAc,SAAS,SAAS,CAAA;AAAA,IACzC;AAAA,EACF,CAAA;AAKA,EAAA,MAAM,iBAAA,GAAoB,CAAC,IAAA,KAA8B;AACvD,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAEtC,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,MAAM,gCACJpD,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,0CAAA;AAAA,YACA,MAAA,KAAW,eAAe,UAAA,GAAa,UAAA;AAAA,YACvC,aAAa,EAAA,GAAK,gBAAA;AAAA,YAClB,mCAAA;AAAA,YACA,QAAA,IAAY;AAAA,WACd;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAH,cAAAA;AAAA,cAAC,cAAA;AAAA,cAAA;AAAA,gBACC,OAAO,IAAA,CAAK,KAAA;AAAA,gBACZ,EAAA,EAAI,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,gBACvB,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,YACC,iCACCA,cAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,gBAC5B,SAAA,EAAU,2DAAA;AAAA,gBAET,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR;AAAA;AAAA,OAEJ;AAGF,MAAA,uBACEG,eAAAA,CAAC,OAAA,EAAA,EAAyB,aAAA,EAAe,GAAA,EACvC,QAAA,EAAA;AAAA,wBAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACpB,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,wBACAA,cAAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,OAAE,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA,EAC9C;AAAA,OAAA,EAAA,EANY,KAAK,KAOnB,CAAA;AAAA,IAEJ,CAAA,MAAO;AAEL,MAAA,MAAM,gCACJG,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,yDAAA;AAAA,YACA,MAAA,KAAW,eAAe,UAAA,GAAa,UAAA;AAAA,YACvC,aAAa,EAAA,GAAK,gBAAA;AAAA,YAClB,mCAAA;AAAA,YACA,QAAA,IAAY;AAAA,WACd;AAAA,UACA,OAAA,EAAS,MAAM,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA;AAAA,UAC9C,IAAA,EAAK,QAAA;AAAA,UACL,QAAA,EAAU,CAAA;AAAA,UACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,YAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,cAAA,CAAA,CAAE,cAAA,EAAe;AACjB,cAAA,oBAAA,CAAqB,KAAK,KAAK,CAAA;AAAA,YACjC;AAAA,UACF,CAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAH,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,+HAAA;AAAA,kBACA,WAAW,YAAA,GAAe;AAAA,iBAC5B;AAAA,gBAEC,sCACCA,cAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,+CAAA;AAAA,oBACV,IAAA,EAAK,MAAA;AAAA,oBACL,OAAA,EAAQ,WAAA;AAAA,oBACR,MAAA,EAAO,cAAA;AAAA,oBACP,WAAA,EAAa,CAAA;AAAA,oBAEb,QAAA,kBAAAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,aAAA,EAAc,OAAA;AAAA,wBACd,cAAA,EAAe,OAAA;AAAA,wBACf,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AACF;AAAA,aAEJ;AAAA,YACC,iCACCA,cAAAA,CAAC,UAAK,SAAA,EAAU,+CAAA,EACb,eAAK,KAAA,EACR;AAAA;AAAA;AAAA,OAEJ;AAGF,MAAA,uBACEG,eAAAA,CAAC,OAAA,EAAA,EAAyB,aAAA,EAAe,GAAA,EACvC,QAAA,EAAA;AAAA,wBAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACpB,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,wBACAA,cAAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,OAAE,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA,EAC9C;AAAA,OAAA,EAAA,EANY,KAAK,KAOnB,CAAA;AAAA,IAEJ;AAAA,EACF,CAAA;AAKA,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAA8B;AACtD,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAGtC,IAAA,MAAM,YAAA,GAAe,YAAY,IAAA,CAAK,aAAA,GAClC,iBAAiB,QAAA,EAAU,IAAA,CAAK,aAAa,CAAA,GAC7C,IAAA;AACJ,IAAA,MAAM,cAAA,GAAiB,YAAY,IAAA,CAAK,eAAA,GACpC,iBAAiB,QAAA,EAAU,IAAA,CAAK,eAAe,CAAA,GAC/C,IAAA;AAEJ,IAAA,MAAM,aAAA,GAAgB,QAAA,IAAY,YAAA,GAAe,YAAA,GAAgB,cAAA,IAAkB,YAAA;AAGnF,IAAA,MAAM,eAAoC,EAAC;AAC3C,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,YAAA,CAAa,kBAAkB,IAAA,CAAK,OAAA;AAAA,IACtC;AAEA,IAAA,MAAM,gCACJG,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,WAAW,SAAA,GAAY,OAAA;AAAA,QAChC,IAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,0BAAA;AAAA,UACA,MAAA,KAAW,eAAe,UAAA,GAAa,UAAA;AAAA,UACvC,cAAA;AAAA,UACA,aAAa,WAAA,GAAc,2BAAA;AAAA;AAAA,UAE3B,CAAC,IAAA,CAAK,OAAA,IAAW,QAAA,IAAY,oCAAA;AAAA,UAC7B,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,QAAA,IAAY;AAAA,SAChC;AAAA,QACA,OAAO,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,MAAA,GAAS,IAAI,YAAA,GAAe,MAAA;AAAA,QAC7D,SAAS,MAAM;AACb,UAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,YAAA,qBAAA,CAAsB,KAAK,KAAK,CAAA;AAAA,UAClC,CAAA,MAAO;AACL,YAAA,oBAAA,CAAqB,KAAK,KAAK,CAAA;AAAA,UACjC;AAAA,QACF,CAAA;AAAA,QACA,cAAY,IAAA,CAAK,KAAA;AAAA,QACjB,cAAA,EAAc,QAAA;AAAA,QAEb,QAAA,EAAA;AAAA,UAAA,aAAA,oBACCH,cAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,gCAAA;AAAA,cACV,OAAO,IAAA,CAAK,OAAA,GAAU,EAAE,KAAA,EAAO,IAAA,CAAK,SAAQ,GAAI;AAAA;AAAA,WAClD;AAAA,UAED,iCACCA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,oCAAA;AAAA,cACV,OAAO,IAAA,CAAK,OAAA,GAAU,EAAE,KAAA,EAAO,IAAA,CAAK,SAAQ,GAAI,MAAA;AAAA,cAE/C,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR;AAAA;AAAA,KAEJ;AAGF,IAAA,uBACEG,eAAAA,CAAC,OAAA,EAAA,EAAyB,aAAA,EAAe,GAAA,EACvC,QAAA,EAAA;AAAA,sBAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACpB,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,sBACAA,cAAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,OAAE,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA,EAC9C;AAAA,KAAA,EAAA,EANY,KAAK,KAOnB,CAAA;AAAA,EAEJ,CAAA;AAGA,EAAA,MAAM,gBAAA,GAAmB,EAAA;AAAA,IACvB,uDAAA;AAAA,IACA,aAAa,EAAA,GAAK,YAAA;AAAA,IAClB,WAAW,YAAA,GACP,EAAA;AAAA,MACE,yBAAA;AAAA,MACA,aAAa,OAAA,GAAU;AAAA,KACzB,GACA,EAAA;AAAA,MACE,eAAA;AAAA,MACA,aAAa,OAAA,GAAU;AAAA,KACzB;AAAA,IACJ;AAAA,GACF;AAGA,EAAA,MAAM,iBAAA,GAAoB,EAAA;AAAA,IACxB,gBAAA;AAAA,IACA;AAAA;AAAA,GACF;AAEA,EAAA,IAAI,UAAU,OAAA,EAAS;AAErB,IAAA,uBACEA,eAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,KAC9B,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAA,EAAkB,IAAA,EAAM,cAAc,QAAA,GAAW,YAAA,GAAe,OAAA,EAC7E,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,SAAS,gBAAA,CAAiB,IAAI,CAAC,CAAA,EAC5C,CAAA,EACF,CAAA;AAAA,EAEF,CAAA,MAAO;AAEL,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,uBACEA,cAAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,KAC9B,QAAA,kBAAAA,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,UAC3C,aAAA,EAAe,qBAAA;AAAA,UACf,SAAA,EAAW,WAAW,YAAA,GAClB,EAAA,CAAG,mBAAmB,WAAW,CAAA,GACjC,EAAA,CAAG,iBAAA,EAAmB,WAAW,CAAA;AAAA,UAGpC,eAAK,GAAA,CAAI,CAAC,IAAA,KAAS,iBAAA,CAAkB,IAAI,CAAC;AAAA;AAAA,OAC7C,EACF,CAAA;AAAA,IAEJ,CAAA,MAAO;AACL,MAAA,uBACEA,eAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,KAC9B,QAAA,kBAAAA,cAAAA,CAAC,SAAI,SAAA,EAAW,gBAAA,EAAkB,MAAK,OAAA,EACpC,QAAA,EAAA,IAAA,CAAK,IAAI,CAAC,IAAA,KAAS,kBAAkB,IAAI,CAAC,GAC7C,CAAA,EACF,CAAA;AAAA,IAEJ;AAAA,EACF;AACJ;ACjWA,IAAM,YAAA,GAAoC;AAAA,EACxC,EAAA,EAAI4C,kBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,GAAA,EAAKA,kBAAAA;AAAA,EACL,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC,kBAAAA;AAAA,EACJ,EAAA,EAAIC;AACN,CAAA;AAKA,SAAS,kBAAA,CAAmB,UAA8B,SAAA,EAAgE;AACxH,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,SAAA,EAAW,OAAO,IAAA;AACpC,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,QAAA,CAAS,WAAA,EAAa,CAAA;AACnD,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,IAAK,IAAA;AAC/B;AAqBA,IAAM,aAAA,GAAgB,SAAA;AAKtB,SAAS,kBAAA,CAAmBE,QAAe,OAAA,EAAyB;AAElE,EAAA,IAAIA,MAAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,IAAA,MAAM,GAAA,GAAMA,MAAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AACjC,IAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC1C,IAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC1C,IAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC1C,IAAA,OAAO,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,OAAO,CAAA,CAAA,CAAA;AAAA,EAC1C;AACA,EAAA,OAAOA,MAAAA;AACT;AAKA,IAAM,YAAA,GAAuC;AAAA,EAC3C,EAAA,EAAI,6BAAA;AAAA,EACJ,EAAA,EAAI,yBAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,iBAAA,GAA4C;AAAA,EAChD,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA,GAAS,YAAA;AAAA,EACT,QAAA,GAAW,IAAA;AAAA,EACX,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,WAAA,GAAc;AAChB,CAAA,EAAyB;AACvB,EAAA,uBACExD,cAAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,KAC9B,QAAA,kBAAAA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,wBAAA;AAAA,QACA,MAAA,KAAW,eACP,+BAAA,GACA,4BAAA;AAAA,QACJ;AAAA,OACF;AAAA,MACA,IAAA,EAAK,YAAA;AAAA,MAEJ,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,KAAS;AAClB,QAAA,MAAM,WAAA,GAAc,UAAU,IAAA,CAAK,KAAA;AACnC,QAAA,MAAM,MAAA,GAAS,KAAK,KAAA,IAAS,aAAA;AAC7B,QAAA,MAAM,aAAA,GAAgB,kBAAA,CAAmB,QAAA,EAAU,IAAA,CAAK,IAAI,CAAA;AAE5D,QAAA,uBACEG,eAAAA,CAAC,OAAA,EAAA,EAAyB,aAAA,EAAe,GAAA,EACvC,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAG,eAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,IAAA,EAAK,OAAA;AAAA,cACL,cAAA,EAAc,WAAA;AAAA,cACd,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAAA,cAClC,SAAA,EAAW,EAAA;AAAA,gBACT,qBAAA;AAAA,gBACA,6DAAA;AAAA,gBACA,2DAAA;AAAA,gBACA,qGAAA;AAAA,gBACA,aAAa,SAAS,CAAA;AAAA,gBACtB,WAAA,IAAe,uBAAA;AAAA,gBACf,CAAC,WAAA,IAAe;AAAA,eAClB;AAAA,cACA,OACE,WAAA,GACI;AAAA,gBACE,WAAA,EAAa,MAAA;AAAA,gBACb,eAAA,EAAiB,kBAAA,CAAmB,MAAA,EAAQ,IAAI,CAAA;AAAA,gBAChD,KAAA,EAAO;AAAA,eACT,GACA,MAAA;AAAA,cAGL,QAAA,EAAA;AAAA,gBAAA,aAAA,oBACCH,cAAAA;AAAA,kBAAC,aAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA,CAAG,8BAAA,EAAgC,iBAAA,CAAkB,SAAS,CAAC;AAAA;AAAA,iBAC5E;AAAA,gCAEFA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EAAwB,eAAK,KAAA,EAAM;AAAA;AAAA;AAAA,WACrD,EACF,CAAA;AAAA,0BACAA,cAAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,OAAE,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA,EAC9C;AAAA,SAAA,EAAA,EApCY,KAAK,KAqCnB,CAAA;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;ACjJA,SAAS,aAAA,CACP,OACA,UAAA,EACA,YAAA,EACA,cACA,OAAA,EACA,OAAA,EACA,OACA,YAAA,EAC6C;AAE7C,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAAA,EACzB;AAGA,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,SAAA,EAAW;AAEd,MAAA,MAAM,QAAA,GAAW,WAAW,KAAK,CAAA;AACjC,MAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG;AACnB,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,YAAA,EAAc,wBAAA,EAAyB;AAAA,MAClE;AAGA,MAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,QAAA,MAAM,gBAAgB,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,GAAG,MAAA,IAAU,CAAA;AACrD,QAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,UAAA,OAAO;AAAA,YACL,OAAA,EAAS,KAAA;AAAA,YACT,cAAc,CAAA,QAAA,EAAW,YAAY,iBAAiB,YAAA,KAAiB,CAAA,GAAI,MAAM,EAAE,CAAA,QAAA;AAAA,WACrF;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,KAAY,MAAA,IAAa,QAAA,GAAW,OAAA,EAAS;AAC/C,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,YAAA,EAAc,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAA,EAAG;AAAA,MACvE;AACA,MAAA,IAAI,OAAA,KAAY,MAAA,IAAa,QAAA,GAAW,OAAA,EAAS;AAC/C,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,YAAA,EAAc,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAA,EAAG;AAAA,MACtE;AACA,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,OAAA,EAAS;AAEZ,MAAA,MAAM,UAAA,GAAa,kBAAA;AACnB,MAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,EAAG;AAC3B,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,YAAA,EAAc,+CAAA,EAAgD;AAAA,MACzF;AACA,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,OAAA,EAAS;AAEZ,MAAA,MAAM,UAAA,GAAa,4BAAA;AACnB,MAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,EAAG;AAC3B,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,YAAA,EAAc,+BAAA,EAAgC;AAAA,MACzE;AACA,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,OAAA,EAAS;AAEZ,MAAA,IAAI,YAAA,KAAiB,MAAA,IAAa,KAAA,CAAM,MAAA,GAAS,YAAA,EAAc;AAC7D,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,cAAc,CAAA,iBAAA,EAAoB,YAAY,aAAa,YAAA,KAAiB,CAAA,GAAI,MAAM,EAAE,CAAA;AAAA,SAC1F;AAAA,MACF;AACA,MAAA,IAAI,YAAA,KAAiB,MAAA,IAAa,KAAA,CAAM,MAAA,GAAS,YAAA,EAAc;AAC7D,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,cAAc,CAAA,gBAAA,EAAmB,YAAY,aAAa,YAAA,KAAiB,CAAA,GAAI,MAAM,EAAE,CAAA;AAAA,SACzF;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAAA;AAIF,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,eAAe,OAAO,KAAA,KAAU,WAAW,IAAI,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA;AACrE,IAAA,IAAI,CAAC,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,EAAG;AAC7B,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,YAAA,EAAc,gBAAA,EAAiB;AAAA,IAC1D;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AACzB;AAKA,SAAS,gBAAA,CACP,KAAA,EACA,UAAA,EACA,YAAA,EACQ;AACR,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,SAAA,EAAW;AAEd,MAAA,IAAI,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAG3C,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAChC,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,QAAA,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA,GAAM,MAAM,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,MACpD;AAGA,MAAA,IAAI,YAAA,KAAiB,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AAChD,QAAA,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAAA,MACrC;AAGA,MAAA,IAAI,YAAA,KAAiB,MAAA,IAAa,YAAA,GAAe,CAAA,EAAG;AAClD,QAAA,MAAMyD,MAAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAChC,QAAA,IAAIA,OAAM,MAAA,KAAW,CAAA,IAAKA,OAAM,CAAC,CAAA,CAAE,SAAS,YAAA,EAAc;AACxD,UAAA,QAAA,GAAWA,MAAAA,CAAM,CAAC,CAAA,GAAI,GAAA,GAAMA,OAAM,CAAC,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,YAAY,CAAA;AAAA,QAChE;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,IAEA,KAAK,OAAA,EAAS;AAEZ,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA;AAAA,IAC5C;AAAA,IAEA,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,SAAS;AAEP,MAAA,OAAO,KAAA;AAAA,IACT;AAAA;AAEJ;AAEO,IAAM,eAAA,GAAwBC,kBAAA,CAAA,UAAA;AAAA,EAInC,CACE;AAAA,IACE,SAAA;AAAA,IACA,UAAA,GAAa,OAAA;AAAA,IACb,YAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA,GAAoB,KAAA;AAAA,IACpB,KAAA,EAAO,eAAA;AAAA,IACP,QAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,kBAAA,CAAA,QAAA;AAAA,MAC9C,OAAO,oBAAoB,QAAA,GAAW,eAAA,GAAmB,OAAO,eAAA,KAAoB,QAAA,GAAW,MAAA,CAAO,eAAe,CAAA,GAAI;AAAA,KAC3H;AACA,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,kBAAA,CAAA,QAAA,EAA6B;AAG3E,IAAA,MAAM,eAAe,eAAA,KAAoB,MAAA;AACzC,IAAA,MAAM,YAAA,GAAe,eAChB,OAAO,eAAA,KAAoB,WAAW,eAAA,GAAkB,MAAA,CAAO,eAAA,IAAmB,EAAE,CAAA,GACrF,aAAA;AAGJ,IAAMA,6BAAU,MAAM;AACpB,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,WAAW,OAAO,eAAA,KAAoB,WAAW,eAAA,GAAkB,MAAA,CAAO,mBAAmB,EAAE,CAAA;AACrG,QAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,UAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IAEF,CAAA,EAAG,CAAC,eAAA,EAAiB,YAAY,CAAC,CAAA;AAKlC,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA2C;AAC/D,MAAA,IAAI,QAAA,GAAW,EAAE,MAAA,CAAO,KAAA;AAGxB,MAAA,IAAI,UAAA,KAAe,SAAA,IAAa,UAAA,KAAe,OAAA,EAAS;AACtD,QAAA,QAAA,GAAW,gBAAA,CAAiB,QAAA,EAAU,UAAA,EAAY,YAAY,CAAA;AAAA,MAChE;AAGA,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA,MAC3B;AAGA,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,eAAA,CAAgB,MAAS,CAAA;AAAA,MAC3B;AAGA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,cAAA,GAAiB;AAAA,UACrB,GAAG,CAAA;AAAA,UACH,QAAQ,EAAE,GAAG,CAAA,CAAE,MAAA,EAAQ,OAAO,QAAA;AAAS,SACzC;AACA,QAAA,QAAA,CAAS,cAAc,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAKA,IAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAA0C;AAC5D,MAAA,MAAM,UAAA,GAAa,aAAA;AAAA,QACjB,YAAA;AAAA,QACA,UAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,QAAA,eAAA,CAAgB,UAAA,CAAW,YAAA,IAAgB,YAAA,IAAgB,eAAe,CAAA;AAAA,MAC5E,CAAA,MAAO;AACL,QAAA,eAAA,CAAgB,MAAS,CAAA;AAAA,MAC3B;AAGA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,CAAC,CAAA;AAAA,MACV;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,gBACJ,UAAA,KAAe,OAAA,GAAU,OAAA,GAAU,UAAA,KAAe,YAAY,MAAA,GAAS,MAAA;AAGzE,IAAA,MAAM,WAAW,YAAA,KAAiB,MAAA;AAElC,IAAA,uBACEvD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,sBAAAH,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAM,aAAA;AAAA,UACN,KAAA,EAAO,YAAA;AAAA,UACP,QAAA,EAAU,YAAA;AAAA,UACV,MAAA,EAAQ,UAAA;AAAA,UACR,SAAA,EAAW,EAAA;AAAA,YACT,QAAA,IAAY,mDAAA;AAAA,YACZ;AAAA,WACF;AAAA,UACC,GAAG;AAAA;AAAA,OACN;AAAA,MACC,YAAY,YAAA,oBACXA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDACV,QAAA,EAAA,YAAA,EACH,CAAA;AAAA,MAED,iBAAA,IAAqB,gCACpBA,cAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,iEAAA;AAAA,YACA,QAAA,IAAY;AAAA,WACd;AAAA,UAEC,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AC/RvB,IAAM,aAAA,GAAsB2D,kBAAA,CAAA,UAAA;AAAA,EAIjC,CACE,EAAE,OAAA,EAAS,SAAA,GAAY,KAAA,EAAO,QAAA,GAAW,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,QAAA,EAAS,EAC7E,GAAA,KACG;AACH,IAAA,MAAM,yBACJ3D,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,OAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,wBAAA;AAAA,UACA,yCAAA;AAAA,UACA,oBAAA;AAAA,UACA,qBAAA;AAAA,UACA,gCAAA;AAAA,UACA,yEAAA;AAAA;AAAA,UAEA,mFAAA;AAAA;AAAA,UAEA,SAAA,IAAa,kCAAA;AAAA;AAAA,UAEb,QAAA,IAAY,gFAAA;AAAA,UACZ;AAAA,SACF;AAAA,QAEC;AAAA;AAAA,KACH;AAGF,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,uBACEG,gBAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,wBAChCA,cAAAA,CAAC,cAAA,EAAA,EAAe,MAAK,QAAA,EAAS,SAAA,EAAU,WACrC,QAAA,EAAA,OAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,IAEJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;;;AC3E5B,IAAA4D,gBAAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAAC,oCAAAA,GAA0C,OAAA,CAAA,oCAAA,EAAA,CAAA;;;ACD1C,IAAAD,eAAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAAC,oCAAAA,GAA0C,OAAA,CAAA,oCAAA,EAAA,CAAA;;;ACD1C,IAAA,cAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAI,OAAA,GAAU,GAAA;AAEd,IAAI,MAAA,GAAS,GAAA;AAMN,IAAI,aAAa,CAAA,IAAA,KAAQ;AAC9B,EAAA,IAAI,CAAA,GAAI,IAAA,CAAK,CAAA,EACX,CAAA,GAAI,IAAA,CAAK,GACT,CAAA,GAAI,IAAA,CAAK,CAAA,EACT,CAAA,GAAI,IAAA,CAAK,CAAA;AACX,EAAA,IAAI,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAC1B,EAAA,IAAI,QAAQ,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAGlC,EAAA,IAAI,KAAK,KAAA,GAAQ,GAAA,KAAQ,CAAA,GAAA,CAAK,CAAA,GAAI,KAAK,KAAA,GAAQ,GAAA,KAAQ,CAAA,GAAI,CAAA,GAAA,CAAK,IAAI,CAAA,IAAK,KAAA,GAAQ,CAAA,GAAA,CAAK,CAAA,GAAI,KAAK,KAAA,GAAQ,CAAA;AACvG,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,EAAA,IAAM,EAAA,GAAK,CAAA,GAAI,KAAK,CAAA,GAAI,EAAA,CAAA;AAAA,IAC3B,CAAA,EAAG,GAAA,GAAM,KAAA,GAAQ,GAAA,GAAM,MAAA,GAAS,CAAA;AAAA,IAChC,CAAA,EAAG,MAAM,OAAA,GAAU,MAAA;AAAA,IACnB;AAAA,GACF;AACF,CAAA;AAsBO,IAAI,mBAAmB,CAAA,IAAA,KAAQ;AACpC,EAAA,IAAI,YAAA,GAAe,UAAA,CAAW,IAAI,CAAA,EAChC,IAAI,YAAA,CAAa,CAAA,EACjB,CAAA,GAAI,YAAA,CAAa,CAAA,EACjB,CAAA,GAAI,YAAA,CAAa,CAAA,EACjB,IAAI,YAAA,CAAa,CAAA;AACnB,EAAA,OAAO,UAAU,CAAA,GAAI,IAAA,GAAO,IAAI,KAAA,GAAQ,CAAA,GAAI,QAAQ,CAAA,GAAI,GAAA;AAC1D,CAAA;AA4CO,IAAI,aAAa,CAAA,KAAA,KAAS;AAC/B,EAAA,IAAI,CAAA,GAAI,KAAA,CAAM,CAAA,EACZ,CAAA,GAAI,KAAA,CAAM,GACV,CAAA,GAAI,KAAA,CAAM,CAAA,EACV,CAAA,GAAI,KAAA,CAAM,CAAA;AACZ,EAAA,IAAI,EAAA,GAAA,CAAM,GAAA,GAAM,CAAA,IAAK,CAAA,GAAI,MAAA;AACzB,EAAA,OAAO;AAAA,IACL,CAAA;AAAA,IACA,CAAA,EAAG,EAAA,GAAK,CAAA,IAAK,EAAA,GAAK,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,MAAA,IAAU,EAAA,IAAM,MAAA,GAAS,EAAA,GAAK,GAAA,GAAM,MAAM,MAAA,GAAS,CAAA;AAAA,IACnF,GAAG,EAAA,GAAK,CAAA;AAAA,IACR;AAAA,GACF;AACF,CAAA;AA+DO,IAAI,WAAW,CAAA,KAAA,KAAS;AAC7B,EAAA,IAAI,IAAI,KAAA,CAAM,CAAA,EACZ,IAAI,KAAA,CAAM,CAAA,EACV,IAAI,KAAA,CAAM,CAAA;AACZ,EAAA,IAAI,GAAA,GAAM,CAAA,IAAK,EAAA,GAAK,CAAA,IAAK,CAAA,GAAI,CAAA;AAC7B,EAAA,OAAO,GAAA,GAAA,CAAO,CAAA,CAAA,KAAK,IAAI,KAAA,CAAM,IAAI,CAAA,CAAE,MAAM,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,EAAE,CAAC,CAAA;AAC5E,CAAA;AACO,IAAI,aAAa,CAAA,KAAA,KAAS;AAC/B,EAAA,IAAI,CAAA,GAAI,KAAA,CAAM,CAAA,EACZ,CAAA,GAAI,KAAA,CAAM,GACV,CAAA,GAAI,KAAA,CAAM,CAAA,EACV,CAAA,GAAI,KAAA,CAAM,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,OAAO,CAAA,KAAM,QAAA,IAAA,CAAa,CAAA,GAAI,GAAA,GAAM,CAAA,IAAK,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AAC5E,EAAA,OAAO,KAAK,QAAA,CAAS;AAAA,IACnB,CAAA;AAAA,IACA,CAAA;AAAA,IACA;AAAA,GACD,CAAA,IAAK,KAAA,GAAQ,KAAA,GAAQ,EAAA,CAAA;AACxB,CAAA;AACO,IAAI,SAAA,GAAY,CAAA,GAAA,KAAO,UAAA,CAAW,SAAA,CAAU,GAAG,CAAC,CAAA;AAChD,IAAI,YAAY,CAAA,GAAA,KAAO;AAC5B,EAAA,IAAI,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAC/B,EAAA,IAAI,MAAM,IAAA,CAAK,GAAG,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AACzC,IAAA,GAAA,GAAM,GAAA,GAAM,MAAM,MAAA,CAAO,CAAC,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA,CAAM,OAAO,CAAC,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AAAA,EACtH;AACA,EAAA,IAAI,GAAA,GAAM,IAAI,MAAA,CAAO,gBAAA,EAAkB,GAAG,CAAA;AAC1C,EAAA,IAAI,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,QAAA,CAAS,CAAA,EAAG,EAAE,CAAC,CAAA,EACjD,IAAI,KAAA,CAAM,CAAC,CAAA,EACX,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,EACX,MAAA,GAAS,MAAM,CAAC,CAAA,EAChB,CAAA,GAAI,MAAA,KAAW,MAAA,GAAS,CAAA,GAAI,MAAA,EAC5B,CAAA,GAAI,MAAM,CAAC,CAAA;AACb,EAAA,OAAO;AAAA,IACL,CAAA;AAAA,IACA,CAAA;AAAA,IACA,CAAA;AAAA,IACA,CAAA,EAAA,CAAI,CAAA,IAAK,IAAA,GAAO,CAAA,GAAI,GAAA,IAAO;AAAA,GAC7B;AACF,CAAA;AAMO,IAAI,aAAa,CAAA,KAAA,KAAS;AAC/B,EAAA,IAAI,CAAA,GAAI,KAAA,CAAM,CAAA,EACZ,CAAA,GAAI,KAAA,CAAM,GACV,CAAA,GAAI,KAAA,CAAM,CAAA,EACV,CAAA,GAAI,KAAA,CAAM,CAAA;AACZ,EAAA,IAAI,EAAA,GAAK,CAAA,GAAI,EAAA,EACX,EAAA,GAAK,CAAA,GAAI,MAAA,EACT,EAAA,GAAK,CAAA,GAAI,MAAA,EACT,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,GAAI,CAAA;AACxB,EAAA,IAAI,CAAA,GAAI,KAAK,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,EACxB,EAAA,GAAK,OAAA,GAAU,EAAA,IAAM,CAAA,GAAI,EAAA,CAAA,EACzB,KAAK,OAAA,GAAU,EAAA,IAAM,IAAI,EAAA,GAAK,CAAA,CAAA,EAC9B,KAAK,OAAA,GAAU,EAAA,IAAM,CAAA,GAAI,EAAA,IAAM,CAAA,GAAI,CAAA,CAAA,CAAA;AACrC,EAAA,EAAA,IAAM,OAAA;AACN,EAAA,IAAI,OAAO,EAAC;AACZ,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,CAAA;AACH,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AACT,MAAA;AAAA;AAEJ,EAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC1B,EAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC1B,EAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC1B,EAAA,OAAA,IAAO,cAAA,CAAAzE,OAAAA,EAAS,EAAC,EAAG,IAAA,EAAM;AAAA,IACxB;AAAA,GACD,CAAA;AACH,CAAA;AAQO,IAAI,mBAAmB,CAAA,IAAA,KAAQ;AACpC,EAAA,IAAI,YAAA,GAAe,UAAA,CAAW,IAAI,CAAA,EAChC,IAAI,YAAA,CAAa,CAAA,EACjB,CAAA,GAAI,YAAA,CAAa,CAAA,EACjB,CAAA,GAAI,YAAA,CAAa,CAAA,EACjB,IAAI,YAAA,CAAa,CAAA;AACnB,EAAA,OAAO,UAAU,CAAA,GAAI,IAAA,GAAO,IAAI,IAAA,GAAO,CAAA,GAAI,OAAO,CAAA,GAAI,GAAA;AACxD,CAAA;AACO,IAAI,YAAY,CAAA,KAAA,KAAS;AAC9B,EAAA,IAAI,IAAI,KAAA,CAAM,CAAA,EACZ,IAAI,KAAA,CAAM,CAAA,EACV,IAAI,KAAA,CAAM,CAAA;AACZ,EAAA,OAAO;AAAA,IACL,CAAA;AAAA,IACA,CAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AACO,IAAI,YAAY,CAAA,KAAA,KAAS;AAC9B,EAAA,IAAI,IAAI,KAAA,CAAM,CAAA,EACZ,IAAI,KAAA,CAAM,CAAA,EACV,IAAI,KAAA,CAAM,CAAA;AACZ,EAAA,OAAO;AAAA,IACL,CAAA;AAAA,IACA,CAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AACO,IAAI,SAAA,GAAY,CAAA,IAAA,KAAQ,QAAA,CAAS,UAAA,CAAW,IAAI,CAAC,CAAA;AAEjD,IAAI,YAAY,CAAA,MAAA,KAAU;AAC/B,EAAA,IAAI,IAAI,MAAA,CAAO,CAAA,EACb,IAAI,MAAA,CAAO,CAAA,EACX,IAAI,MAAA,CAAO,CAAA;AACb,EAAA,OAAO;AAAA,IACL,CAAA;AAAA,IACA,CAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AA8BO,IAAI,UAAU,CAAA,MAAA,KAAU;AAC7B,EAAA,IAAI,IAAI,MAAA,CAAO,CAAA,EACb,IAAI,MAAA,CAAO,CAAA,EACX,IAAI,MAAA,CAAO,CAAA;AACb,EAAA,IAAI,cAAA,GAAiB,SAAS0E,eAAAA,CAAeN,MAAAA,EAAO;AAClD,IAAA,OAAOA,MAAAA,IAAS,UAAUA,MAAAA,GAAQ,KAAA,GAAQ,KAAK,GAAA,CAAA,CAAKA,MAAAA,GAAQ,KAAA,IAAS,KAAA,EAAO,GAAG,CAAA;AAAA,EACjF,CAAA;AACA,EAAA,IAAI,GAAA,GAAM,cAAA,CAAe,CAAA,GAAI,GAAG,CAAA;AAChC,EAAA,IAAI,KAAA,GAAQ,cAAA,CAAe,CAAA,GAAI,GAAG,CAAA;AAClC,EAAA,IAAI,IAAA,GAAO,cAAA,CAAe,CAAA,GAAI,GAAG,CAAA;AACjC,EAAA,IAAI,MAAM,EAAC;AACX,EAAA,GAAA,CAAI,CAAA,GAAI,GAAA,GAAM,MAAA,GAAS,KAAA,GAAQ,SAAS,IAAA,GAAO,MAAA;AAC/C,EAAA,GAAA,CAAI,CAAA,GAAI,GAAA,GAAM,MAAA,GAAS,KAAA,GAAQ,SAAS,IAAA,GAAO,MAAA;AAC/C,EAAA,GAAA,CAAI,GAAA,GAAM,GAAA,GAAM,MAAA,GAAS,KAAA,GAAQ,SAAS,IAAA,GAAO,MAAA;AACjD,EAAA,OAAO,GAAA;AACT,CAAA;AACO,IAAI,QAAQ,CAAA,GAAA,KAAO;AACxB,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5C,IAAA,IAAA,GAAO,UAAU,GAAG,CAAA;AACpB,IAAA,GAAA,GAAM,GAAA;AAAA,EACR,CAAA,MAAA,IAAW,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,IAAA,IAAA,GAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,GAAA,GAAM,UAAU,IAAI,CAAA;AACpB,IAAA,IAAA,GAAO,WAAW,IAAI,CAAA;AACtB,IAAA,IAAA,GAAO,WAAW,IAAI,CAAA;AACtB,IAAA,IAAA,GAAO,WAAW,IAAI,CAAA;AACtB,IAAA,GAAA,GAAM,UAAU,IAAI,CAAA;AACpB,IAAA,GAAA,GAAM,UAAU,IAAI,CAAA;AACpB,IAAA,GAAA,GAAM,UAAU,IAAI,CAAA;AACpB,IAAA,EAAA,GAAK,QAAQ,GAAG,CAAA;AAAA,EAClB;AACA,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AA8BO,IAAI,QAAA,GAAW,CAAA,GAAA,KAAO,6BAAA,CAA8B,IAAA,CAAK,GAAG,CAAA;;;AC9anE,IAAAI,eAAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAA,mCAAA,GAA0C,OAAA,CAAA,oCAAA,EAAA,CAAA;ACEnC,SAAS,iBAAiB,OAAA,EAAS;AACxC,EAAA,IAAI,WAAA,GAAcG,eAAO,OAAO,CAAA;AAChC,EAAAzC,kBAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,OAAA;AAAA,EACxB,CAAC,CAAA;AACD,EAAA,OAAO0C,mBAAA,CAAY,CAAC,KAAA,EAAO,KAAA,KAAU,WAAA,CAAY,OAAA,IAAW,WAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA,EAAG,EAAE,CAAA;AACnG;AAGO,IAAI,OAAA,GAAU,WAAS,SAAA,IAAa,KAAA;AAKpC,IAAI,qBAAqB,CAAA,KAAA,KAAS;AACvC,EAAA,CAAC,QAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,cAAA,IAAkB,MAAM,cAAA,EAAe;AAClE,CAAA;AAIO,IAAI,KAAA,GAAQ,SAASC,MAAAA,CAAM,MAAA,EAAQ,KAAK,GAAA,EAAK;AAClD,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,GAAA,GAAM,CAAA;AAAA,EACR;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,GAAA,GAAM,CAAA;AAAA,EACR;AACA,EAAA,OAAO,MAAA,GAAS,GAAA,GAAM,GAAA,GAAM,MAAA,GAAS,MAAM,GAAA,GAAM,MAAA;AACnD,CAAA;AAEO,IAAI,mBAAA,GAAsB,CAAC,IAAA,EAAM,KAAA,KAAU;AAChD,EAAA,IAAI,IAAA,GAAO,KAAK,qBAAA,EAAsB;AAGtC,EAAA,IAAI,UAAU,OAAA,CAAQ,KAAK,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,KAAA;AAClD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAO,OAAA,CAAQ,KAAA,IAAS,KAAK,IAAA,GAAO,MAAA,CAAO,WAAA,CAAA,IAAgB,IAAA,CAAK,KAAK,CAAA;AAAA,IAC3E,GAAA,EAAK,OAAO,OAAA,CAAQ,KAAA,IAAS,KAAK,GAAA,GAAM,MAAA,CAAO,WAAA,CAAA,IAAgB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1E,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,CAAA,EAAG,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,OAAO,MAAA,CAAO,WAAA,CAAA;AAAA,IACvC,CAAA,EAAG,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,MAAM,MAAA,CAAO,WAAA;AAAA,GACxC;AACF,CAAA;AD5CA,IAAI,SAAA,GAAY,CAAC,WAAA,EAAa,WAAA,EAAa,UAAU,QAAQ,CAAA;AAK7D,IAAI,8BAA2BzE,0BAAAA,CAAM,UAAA,CAAW,CAAC,OAAO,GAAA,KAAQ;AAC9D,EAAA,IAAI,gBAAA,GAAmB,MAAM,SAAA,EAC3B,SAAA,GAAY,qBAAqB,MAAA,GAAS,qBAAA,GAAwB,kBAClE,SAAA,GAAY,KAAA,CAAM,WAClB,MAAA,GAAS,KAAA,CAAM,QACf,MAAA,GAAS,KAAA,CAAM,QACf,KAAA,GAAA,IAAQ,mCAAA,CAAAH,OAAAA,EAA8B,KAAA,EAAO,SAAS,CAAA;AACxD,EAAA,IAAI,SAAA,GAAY0E,eAAO,IAAI,CAAA;AAC3B,EAAA,IAAI,UAAA,GAAaA,eAAO,KAAK,CAAA;AAC7B,EAAA,IAAI,SAAA,GAAY5C,gBAAAA,CAAS,KAAK,CAAA,EAC5B,UAAA,GAAa,UAAU,CAAC,CAAA,EACxB,WAAA,GAAc,SAAA,CAAU,CAAC,CAAA;AAC3B,EAAA,IAAI,cAAA,GAAiB,iBAAiB,MAAM,CAAA;AAC5C,EAAA,IAAI,aAAA,GAAgB,iBAAiB,MAAM,CAAA;AAI3C,EAAA,IAAI,UAAU,CAAA,KAAA,KAAS;AACrB,IAAA,IAAI,WAAW,OAAA,IAAW,CAAC,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA;AAClD,IAAA,UAAA,CAAW,OAAA,GAAU,QAAQ,KAAK,CAAA;AAClC,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,IAAI,UAAA,GAAa6C,oBAAY,CAAA,KAAA,KAAS;AACpC,IAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,IAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACxB,IAAA,IAAI,MAAA,GAAS,QAAQ,KAAK,CAAA,GAAI,MAAM,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,OAAA,GAAU,CAAA;AACzE,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,WAAA,CAAY,KAAK,CAAA;AACjB,MAAA;AAAA,IACF;AACA,IAAA,cAAA,IAAkB,QAAQ,cAAA,CAAe,mBAAA,CAAoB,UAAU,OAAA,EAAS,KAAK,GAAG,KAAK,CAAA;AAAA,EAC/F,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AACnB,EAAA,IAAI,gBAAgBA,mBAAAA,CAAY,MAAM,YAAY,KAAK,CAAA,EAAG,EAAE,CAAA;AAC5D,EAAA,IAAI,oBAAA,GAAuBA,oBAAY,CAAA,KAAA,KAAS;AAC9C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAA,CAAO,gBAAA,CAAiB,UAAA,CAAW,OAAA,GAAU,WAAA,GAAc,aAAa,UAAU,CAAA;AAClF,MAAA,MAAA,CAAO,gBAAA,CAAiB,UAAA,CAAW,OAAA,GAAU,UAAA,GAAa,WAAW,aAAa,CAAA;AAAA,IACpF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,UAAU,CAAA;AAClD,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACnD,MAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,UAAU,CAAA;AAClD,MAAA,MAAA,CAAO,mBAAA,CAAoB,YAAY,aAAa,CAAA;AAAA,IACtD;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,aAAa,CAAC,CAAA;AAC9B,EAAA1C,kBAAU,MAAM;AACd,IAAA,oBAAA,CAAqB,UAAU,CAAA;AAC/B,IAAA,OAAO,MAAM;AACX,MAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA,IAC5B,CAAA;AAAA,EACF,GAAG,CAAC,UAAA,EAAY,UAAA,EAAY,aAAA,EAAe,oBAAoB,CAAC,CAAA;AAChE,EAAA,IAAI,eAAA,GAAkB0C,oBAAY,CAAA,KAAA,KAAS;AACzC,IAAA,IAAI,WAAW,QAAA,CAAS,aAAA;AACxB,IAAA,QAAA,IAAY,IAAA,IAAQ,SAAS,IAAA,EAAK;AAClC,IAAA,kBAAA,CAAmB,MAAM,WAAW,CAAA;AACpC,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,EAAG;AACjC,IAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACxB,IAAA,aAAA,IAAiB,IAAA,IAAQ,cAAc,mBAAA,CAAoB,SAAA,CAAU,SAAS,KAAA,CAAM,WAAW,CAAA,EAAG,KAAA,CAAM,WAAW,CAAA;AACnH,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAClB,EAAA,sCAAyB,KAAA,EAAA,IAAO,eAAA,CAAA5E,OAAAA,EAAS,IAAI,KAAA,EAAO;AAAA,IAClD,SAAA,EAAW,CAAC,SAAA,EAAW,SAAA,IAAa,EAAE,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,IAChE,WAAO,eAAA,CAAAA,OAAAA,EAAS,EAAC,EAAG,MAAM,KAAA,EAAO;AAAA,MAC/B,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,IACD,GAAA,EAAK,SAAA;AAAA,IACL,QAAA,EAAU,CAAA;AAAA,IACV,WAAA,EAAa,eAAA;AAAA,IACb,YAAA,EAAc;AAAA,GACf,CAAC,CAAA;AACJ,CAAC,CAAA;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAC1B,IAAO,WAAA,GAAQ,WAAA;AE5ER,IAAI,UAAU,CAAA,IAAA,KAAQ;AAC3B,EAAA,IAAI,SAAA,GAAY,IAAA,CAAK,SAAA,EACnBoE,MAAAA,GAAQ,IAAA,CAAK,KAAA,EACb,IAAA,GAAO,IAAA,CAAK,IAAA,EACZ,GAAA,GAAM,IAAA,CAAK,GAAA,EACX,YAAY,IAAA,CAAK,SAAA;AACnB,EAAA,IAAI,KAAA,GAAQ;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,GAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,YAAA,GAAe;AAAA,IACjB,iCAAA,EAAmC,8GAAA;AAAA,IACnC,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,SAAA,EAAW,uBAAA;AAAA,IACX,SAAA,EAAW,sCAAA;AAAA,IACX,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiBA;AAAA,GACnB;AACA,EAAA,OAAOU,eAAAA,CAAQ,sBAAmBC,cAAAA,CAAK,KAAA,EAAO;AAAA,IAC5C,SAAA,EAAW,SAAA,GAAY,WAAA,IAAe,SAAA,IAAa,EAAA,CAAA;AAAA,IACnD,KAAA;AAAA,IACA,QAAA,kBAAuBA,cAAAA,CAAK,KAAA,EAAO;AAAA,MACjC,WAAW,SAAA,GAAY,OAAA;AAAA,MACvB,KAAA,EAAO;AAAA,KACR;AAAA,GACF,GAAG,CAAC,GAAA,EAAK,MAAMX,MAAAA,EAAO,SAAA,EAAW,SAAS,CAAC,CAAA;AAC9C,CAAA;AJ5BA,IAAIY,UAAAA,GAAY,CAAC,WAAA,EAAa,QAAA,EAAU,WAAW,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA;AAMlG,IAAI,6BAA0B5E,0BAAAA,CAAM,UAAA,CAAW,CAAC,OAAO,GAAA,KAAQ;AAC7D,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,mBAAmB,KAAA,CAAM,SAAA,EAC3B,YAAY,gBAAA,KAAqB,MAAA,GAAS,uBAAuB,gBAAA,EACjE,aAAA,GAAgB,MAAM,MAAA,EACtB,MAAA,GAAS,kBAAkB,MAAA,GAAS,CAAA,GAAI,eACxC,OAAA,GAAU,KAAA,CAAM,SAChB,SAAA,GAAY,KAAA,CAAM,WAClB,UAAA,GAAa,KAAA,CAAM,KACnB,GAAA,GAAM,UAAA,KAAe,SAAS,CAAA,GAAI,UAAA,EAClC,QAAQ,KAAA,CAAM,KAAA,EACd,OAAO,KAAA,CAAM,IAAA,EACb,WAAW,KAAA,CAAM,QAAA,EACjB,YAAQ,oCAAA,CAAAH,OAAAA,EAA8B,OAAO+E,UAAS,CAAA;AACxD,EAAA,IAAI,cAAA,GAAA,IAAiB,gBAAAhF,OAAAA,EAAS;AAAA,IAC5B,KAAA,EAAO,GAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,YAAA,EAAc;AAAA,KACb,KAAA,EAAO;AAAA,IACR,QAAA,EAAU;AAAA,GACX,CAAA;AACD,EAAA,IAAI,YAAA,GAAe2E,eAAO,IAAI,CAAA;AAG9B,EAAA,IAAI,WAAA,GAAcC,oBAAY,CAAA,IAAA,KAAQ;AACpC,IAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,IAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,MAAA,GAAA,CAAI,IAAI,CAAA;AAAA,IACV,CAAA,MAAA,IAAW,GAAA,IAAO,SAAA,IAAa,GAAA,EAAK;AAClC,MAAA,GAAA,CAAI,OAAA,GAAU,IAAA;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AACR,EAAA,IAAI,YAAA,GAAeA,mBAAAA,CAAY,CAAC,WAAA,EAAa,KAAA,KAAU;AACrD,IAAA,QAAA,IAAY,QAAQ,QAAA,CAAS;AAAA,MAC3B,GAAG,IAAA,CAAK,CAAA;AAAA,MACR,CAAA,EAAG,YAAY,IAAA,GAAO,GAAA;AAAA,MACtB,CAAA,EAAA,CAAI,CAAA,GAAI,WAAA,CAAY,GAAA,IAAO,GAAA;AAAA,MAC3B,GAAG,IAAA,CAAK;AAAA;AAAA,KAET,CAAA;AAED,IAAA,IAAI,UAAU,YAAA,CAAa,OAAA;AAC3B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,QAAQ,CAAC,CAAA;AACnB,EAAA,IAAI,aAAA,GAAgBA,oBAAY,CAAA,KAAA,KAAS;AACvC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,QAAA,EAAU;AACxB,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,IAAI,OAAO,IAAA,CAAK,CAAA;AAChB,IAAA,IAAI,OAAO,IAAA,CAAK,CAAA;AAChB,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,QAAQ,MAAM,GAAA;AAAK,MACjB,KAAK,WAAA;AACH,QAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,IAAI,CAAA;AAChC,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,IAAI,CAAA;AAClC,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,IAAI,CAAA;AAClC,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,IAAI,CAAA;AAChC,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA;AAAA,MACF;AACE,QAAA;AAAA;AAEJ,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,IAAA,CAAK,CAAA;AAAA,QACR,CAAA,EAAG,IAAA;AAAA,QACH,CAAA,EAAG,IAAA;AAAA,QACH,GAAG,IAAA,CAAK;AAAA,OACT,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,QAAQ,CAAC,CAAA;AACnB,EAAA,IAAI,cAAA,GAAiBE,gBAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,IAAI,QAAA,GAAW;AAAA,MACb,GAAA,EAAK,GAAA,GAAM,IAAA,CAAK,CAAA,GAAI,GAAA;AAAA,MACpB,IAAA,EAAM,KAAK,CAAA,GAAI,GAAA;AAAA,MACf,KAAA,EAAO,iBAAiB,IAAI;AAAA,KAC9B;AACA,IAAA,IAAI,OAAA,IAAW,OAAO,OAAA,KAAY,UAAA,EAAY;AAC5C,MAAA,OAAO,OAAA,CAAA,IAAQ,gBAAA9E,OAAAA,EAAS;AAAA,QACtB;AAAA,OACF,EAAG,QAAQ,CAAC,CAAA;AAAA,IACd;AACA,IAAA,uBAAoB+E,cAAAA,CAAK,OAAA,EAAA,IAAS,eAAA,CAAA/E,OAAAA,EAAS;AAAA,MACzC;AAAA,KACF,EAAG,QAAQ,CAAC,CAAA;AAAA,EACd,CAAA,EAAG,CAAC,IAAA,EAAM,OAAA,EAAS,SAAS,CAAC,CAAA;AAC7B,EAAA,IAAI,WAAA,GAAc4E,oBAAY,CAAA,KAAA,KAAS;AACrC,IAAA,KAAA,CAAM,OAAO,KAAA,EAAM;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,uBAAoBG,cAAAA,CAAK,WAAA,EAAA,IAAa,eAAA,CAAA/E,OAAAA,EAAS;AAAA,IAC7C,SAAA,EAAW,CAAC,SAAA,EAAW,SAAA,IAAa,EAAE,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG;AAAA,KAC/D,KAAA,EAAO;AAAA,IACR,KAAA,EAAA,IAAO,gBAAAA,OAAAA,EAAS;AAAA,MACd,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,CAAA;AAAA,MACP,MAAA,EAAQ,WAAA;AAAA,MACR,eAAA,EAAiB,6EAAA,IAAA,CAAkF,OAAA,GAAU,IAAA,IAAQ,IAAA,GAAO,SAAS,IAAA,CAAK,CAAA,KAAM,IAAA,GAAO,OAAA,GAAU,GAAA,CAAA,GAAO;AAAA,OACvK,cAAA,EAAgB;AAAA,MACjB,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,IACD,GAAA,EAAK,WAAA;AAAA,IACL,MAAA,EAAQ,YAAA;AAAA,IACR,MAAA,EAAQ,YAAA;AAAA,IACR,SAAA,EAAW,aAAA;AAAA,IACX,OAAA,EAAS,WAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAC,CAAA;AACJ,CAAC,CAAA;AACD,UAAA,CAAW,WAAA,GAAc,YAAA;AACzB,IAAOiF,YAAAA,GAAQ,UAAA;;;AKpIf,IAAAT,eAAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAAC,oCAAAA,GAA0C,OAAA,CAAA,oCAAA,EAAA,CAAA;;;ACD1C,IAAAD,eAAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAAC,oCAAAA,GAA0C,OAAA,CAAA,oCAAA,EAAA,CAAA;AAC1C,IAAIO,aAAY,CAAC,WAAA,EAAa,aAAa,MAAA,EAAQ,KAAA,EAAO,SAAS,WAAW,CAAA;AAGvE,IAAIE,WAAU,CAAA,IAAA,KAAQ;AAC3B,EAAA,IAAI,SAAA,GAAY,KAAK,SAAA,EACnB,SAAA,GAAY,KAAK,SAAA,EACjB,IAAA,GAAO,IAAA,CAAK,IAAA,EACZ,GAAA,GAAM,IAAA,CAAK,KACX,KAAA,GAAQ,IAAA,CAAK,OACb,SAAA,GAAY,IAAA,CAAK,WACjB,KAAA,GAAA,IAAQ,oCAAA,CAAAjF,OAAAA,EAA8B,IAAA,EAAM+E,UAAS,CAAA;AACvD,EAAA,IAAI,YAAA,GAAA,IAAe,eAAA,CAAAhF,OAAAA,EAAS,IAAI,KAAA,EAAO;AAAA,IACrC,QAAA,EAAU,UAAA;AAAA,IACV,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,IAAI,YAAA,GAAA,IAAe,gBAAAA,OAAAA,EAAS;AAAA,IAC1B,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,SAAA,EAAW,iCAAA;AAAA,IACX,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB;AAAA,GACnB,EAAG,SAAA,IAAa,IAAA,GAAO,MAAA,GAAS,UAAU,KAAA,EAAO;AAAA,IAC/C,SAAA,EAAW,OAAO,uBAAA,GAA0B;AAAA,GAC7C,CAAA;AACD,EAAA,uBAAoB+E,cAAAA,CAAK,KAAA,EAAA,IAAO,eAAA,CAAA/E,OAAAA,EAAS;AAAA,IACvC,SAAA,EAAW,SAAA,GAAY,WAAA,IAAe,SAAA,IAAa,EAAA,CAAA;AAAA,IACnD,KAAA,EAAO;AAAA,KACN,KAAA,EAAO;AAAA,IACR,QAAA,kBAAuB+E,cAAAA,CAAK,KAAA,EAAA,IAAO,gBAAA/E,OAAAA,EAAS;AAAA,MAC1C,WAAW,SAAA,GAAY;AAAA,OACtB,SAAA,EAAW;AAAA,MACZ,KAAA,EAAO;AAAA,KACR,CAAC;AAAA,GACH,CAAC,CAAA;AACJ,CAAA;ADnCA,IAAIgF,aAAY,CAAC,WAAA,EAAa,WAAA,EAAa,MAAA,EAAQ,cAAc,SAAA,EAAW,YAAA,EAAc,cAAA,EAAgB,QAAA,EAAU,SAAS,QAAA,EAAU,WAAA,EAAa,SAAA,EAAW,OAAA,EAAS,YAAY,SAAS,CAAA;AAOtL,IAAI,cAAA,GAAiB,wKAAA;AAC5B,IAAI,wBAAqB5E,0BAAAA,CAAM,UAAA,CAAW,CAAC,OAAO,GAAA,KAAQ;AACxD,EAAA,IAAI,gBAAA,GAAmB,MAAM,SAAA,EAC3B,SAAA,GAAY,qBAAqB,MAAA,GAAS,eAAA,GAAkB,kBAC5D,SAAA,GAAY,KAAA,CAAM,WAClB,IAAA,GAAO,KAAA,CAAM,MACb,UAAA,GAAa,KAAA,CAAM,YACnB,cAAA,GAAiB,KAAA,CAAM,SACvB,OAAA,GAAU,cAAA,KAAmB,SAAS,EAAC,GAAI,gBAC3C,iBAAA,GAAoB,KAAA,CAAM,YAC1B,UAAA,GAAa,iBAAA,KAAsB,SAAS,EAAC,GAAI,mBACjD,mBAAA,GAAsB,KAAA,CAAM,cAC5B,YAAA,GAAe,mBAAA,KAAwB,SAAS,EAAC,GAAI,qBACrD,aAAA,GAAgB,KAAA,CAAM,QACtB,MAAA,GAAS,aAAA,KAAkB,SAAS,CAAA,GAAI,aAAA,EACxC,QAAQ,KAAA,CAAM,KAAA,EACd,gBAAgB,KAAA,CAAM,MAAA,EACtB,SAAS,aAAA,KAAkB,MAAA,GAAS,KAAK,aAAA,EACzC,gBAAA,GAAmB,MAAM,SAAA,EACzB,SAAA,GAAY,qBAAqB,MAAA,GAAS,YAAA,GAAe,kBACzD,cAAA,GAAiB,KAAA,CAAM,SACvB,OAAA,GAAU,cAAA,KAAmB,SAAS,KAAA,GAAQ,cAAA,EAC9C,QAAQ,KAAA,CAAM,KAAA,EACd,WAAW,KAAA,CAAM,QAAA,EACjB,UAAU,KAAA,CAAM,OAAA,EAChB,YAAQ,oCAAA,CAAAH,OAAAA,EAA8B,OAAO+E,UAAS,CAAA;AACxD,EAAA,IAAI,aAAA,GAAgBJ,oBAAY,CAAA,MAAA,KAAU;AACxC,IAAA,IAAI,KAAA,GAAQ,SAAA,KAAc,YAAA,GAAe,MAAA,CAAO,OAAO,MAAA,CAAO,GAAA;AAC9D,IAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,MAAA,OAAO,OAAA,GAAU,IAAI,KAAA,GAAQ,KAAA;AAAA,IAC/B;AACA,IAAA,OAAO,OAAA,GAAU,QAAQ,CAAA,GAAI,KAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,SAAA,EAAW,OAAO,CAAC,CAAA;AACvB,EAAA,IAAI,aAAA,GAAgBA,oBAAY,CAAA,KAAA,KAAS;AACvC,IAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,MAAA,OAAO,OAAA,GAAU,IAAI,KAAA,GAAQ,KAAA;AAAA,IAC/B;AACA,IAAA,OAAO,OAAA,GAAU,QAAQ,CAAA,GAAI,KAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,SAAA,EAAW,OAAO,CAAC,CAAA;AACvB,EAAA,IAAI,eAAe,CAAA,MAAA,KAAU;AAC3B,IAAA,IAAI,KAAA,GAAQ,cAAc,MAAM,CAAA;AAChC,IAAA,QAAA,IAAY,QAAA,CAAA,IAAS,eAAA,CAAA5E,OAAAA,EAAS,IAAI,IAAA,EAAM;AAAA,MACtC,CAAA,EAAG;AAAA,KACJ,GAAG,MAAM,CAAA;AAAA,EACZ,CAAA;AACA,EAAA,IAAI,UAAU,gBAAA,CAAiB,MAAA,CAAO,MAAA,CAAO,IAAI,IAAA,EAAM;AAAA,IACrD,CAAA,EAAG;AAAA,GACJ,CAAC,CAAA;AACF,EAAA,IAAI,qBAAqB,OAAA,GAAU,4BAAA,GAA+B,OAAA,GAAU,iCAAA,GAAoC,wDAAwD,OAAA,GAAU,QAAA;AAClL,EAAA,IAAI,mBAAmB,OAAA,GAAU,sDAAA,GAAyD,OAAA,GAAU,QAAA,GAAW,gCAAgC,OAAA,GAAU,iCAAA;AACzJ,EAAA,IAAI,eAAA,GAAkB,SAAA,KAAc,YAAA,GAAe,kBAAA,GAAqB,gBAAA;AACxE,EAAA,IAAI,WAAW,EAAC;AAChB,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,QAAA,CAAS,IAAA,GAAO,aAAA,CAAc,IAAA,CAAK,CAAC,IAAI,GAAA,GAAM,GAAA;AAAA,EAChD,CAAA,MAAO;AACL,IAAA,QAAA,CAAS,GAAA,GAAM,aAAA,CAAc,IAAA,CAAK,CAAC,IAAI,GAAA,GAAM,GAAA;AAAA,EAC/C;AACA,EAAA,IAAI,YAAA,GAAA,IAAe,gBAAAA,OAAAA,EAAS;AAAA,IAC1B,0BAAA,EAA4B,MAAA;AAAA,IAC5B,kCAAA,EAAoC,oBAAA;AAAA,IACpC,4BAAA,EAA8B,kCAAA;AAAA,IAC9B,YAAA,EAAc,MAAA;AAAA,IACd,UAAA,EAAY,SAAS,cAAA,GAAiB,eAAA;AAAA,IACtC,eAAA,EAAiB;AAAA,GACnB,EAAG;AAAA,IACD,KAAA;AAAA,IACA;AAAA,KACC,KAAA,EAAO;AAAA,IACR,QAAA,EAAU;AAAA,GACX,CAAA;AACD,EAAA,IAAI,aAAA,GAAgB4E,oBAAY,CAAA,KAAA,KAAS;AACvC,IAAA,IAAI,IAAA,GAAO,IAAA;AACX,IAAA,IAAI,eAAe,IAAA,CAAK,CAAA;AACxB,IAAA,IAAI,QAAA,GAAW,YAAA;AACf,IAAA,QAAQ,MAAM,GAAA;AAAK,MACjB,KAAK,WAAA;AACH,QAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,UAAA,QAAA,GAAW,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,IAAI,CAAA;AACvF,UAAA,KAAA,CAAM,cAAA,EAAe;AAAA,QACvB;AACA,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,UAAA,QAAA,GAAW,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,IAAI,CAAA;AACvF,UAAA,KAAA,CAAM,cAAA,EAAe;AAAA,QACvB;AACA,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,UAAA,QAAA,GAAW,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,IAAI,CAAA;AACvF,UAAA,KAAA,CAAM,cAAA,EAAe;AAAA,QACvB;AACA,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,UAAA,QAAA,GAAW,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,IAAI,CAAA;AACvF,UAAA,KAAA,CAAM,cAAA,EAAe;AAAA,QACvB;AACA,QAAA;AAAA,MACF;AACE,QAAA;AAAA;AAEJ,IAAA,IAAI,aAAa,YAAA,EAAc;AAC7B,MAAA,IAAI,mBAAA,GAAsB,cAAc,QAAQ,CAAA;AAChD,MAAA,IAAI,eAAA,GAAkB;AAAA,QACpB,IAAA,EAAM,SAAA,KAAc,YAAA,GAAe,mBAAA,GAAsB,IAAA,CAAK,CAAA;AAAA,QAC9D,GAAA,EAAK,SAAA,KAAc,UAAA,GAAa,mBAAA,GAAsB,IAAA,CAAK,CAAA;AAAA,QAC3D,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,CAAA,EAAG,CAAA;AAAA,QACH,CAAA,EAAG;AAAA,OACL;AACA,MAAA,QAAA,IAAY,QAAA,CAAA,IAAS,eAAA,CAAA5E,OAAAA,EAAS,IAAI,IAAA,EAAM;AAAA,QACtC,CAAA,EAAG;AAAA,OACJ,GAAG,eAAe,CAAA;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,aAAA,EAAe,MAAM,SAAA,EAAW,QAAA,EAAU,OAAO,CAAC,CAAA;AACtD,EAAA,IAAI,WAAA,GAAc4E,oBAAY,CAAA,KAAA,KAAS;AACrC,IAAA,KAAA,CAAM,OAAO,KAAA,EAAM;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,IAAI,iBAAiB,OAAA,IAAW,OAAO,YAAY,UAAA,GAAa,OAAA,CAAA,IAAQ,gBAAA5E,OAAAA,EAAS;AAAA,IAC/E;AAAA,GACF,EAAG,YAAA,EAAc,QAAQ,CAAC,CAAA,mBAAiB+E,cAAAA,CAAKG,QAAAA,EAAAA,IAAS,eAAA,CAAAlF,OAAAA,EAAS,EAAC,EAAG,YAAA,EAAc;AAAA,IAClF;AAAA,GACF,EAAG,QAAQ,CAAC,CAAA;AACZ,EAAA,uCAA0B,KAAA,EAAA,IAAO,eAAA,CAAAA,OAAAA,EAAS,IAAI,KAAA,EAAO;AAAA,IACnD,SAAA,EAAW,CAAC,SAAA,EAAW,SAAA,GAAY,GAAA,GAAM,SAAA,EAAW,SAAA,IAAa,EAAE,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,IAC7F,KAAA,EAAO,YAAA;AAAA,IACP,GAAA;AAAA,IACA,QAAA,EAAU,iBAAc+E,cAAAA,CAAK,WAAO,eAAA,CAAA/E,OAAAA,EAAS,EAAC,EAAG,OAAA,EAAS;AAAA,MACxD,KAAA,EAAA,IAAO,gBAAAA,OAAAA,EAAS;AAAA,QACd,KAAA,EAAO,CAAA;AAAA,QACP,QAAA,EAAU,UAAA;AAAA,QACV,YAAY,UAAA,IAAc,eAAA;AAAA,QAC1B,YAAA,EAAc;AAAA,OAChB,EAAG,QAAQ,KAAK;AAAA,KACjB,CAAC,CAAA,kBAAgB+E,cAAAA,CAAK,iBAAa,eAAA,CAAA/E,OAAAA,EAAS,EAAC,EAAG,UAAA,EAAY;AAAA,MAC3D,WAAO,eAAA,CAAAA,OAAAA,EAAS,EAAC,EAAG,WAAW,KAAA,EAAO;AAAA,QACpC,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,MACD,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAC,CAAC;AAAA,GACJ,CAAC,CAAA;AACJ,CAAC,CAAA;AACD,KAAA,CAAM,WAAA,GAAc,OAAA;AACpB,IAAOiF,YAAAA,GAAQ,KAAA;;;AEjKf,IAAAT,eAAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAAC,oCAAAA,GAA0C,OAAA,CAAA,oCAAA,EAAA,CAAA;AAC1C,IAAIO,UAAAA,GAAY,CAAC,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAA,EAAS,YAAA,EAAc,YAAA,EAAc,UAAA,EAAY,QAAA,EAAU,aAAa,CAAA;AAIlJ,IAAIG,SAAAA,GAAW,CAAA,GAAA,KAAO,6BAAA,CAA8B,IAAA,CAAK,GAAG,CAAA;AAC5D,IAAI,cAAA,GAAiB,WAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA;AACpE,IAAI,gCAA6B/E,0BAAAA,CAAM,UAAA,CAAW,CAAC,OAAO,GAAA,KAAQ;AAChE,EAAA,IAAI,gBAAA,GAAmB,MAAM,SAAA,EAC3B,SAAA,GAAY,qBAAqB,MAAA,GAAS,wBAAA,GAA2B,kBACrE,gBAAA,GAAmB,KAAA,CAAM,WACzB,SAAA,GAAY,gBAAA,KAAqB,SAAS,QAAA,GAAW,gBAAA,EACrD,QAAQ,KAAA,CAAM,KAAA,EACd,SAAA,GAAY,KAAA,CAAM,KAAA,EAClB,SAAA,GAAY,MAAM,SAAA,EAClB,KAAA,GAAQ,MAAM,KAAA,EACd,UAAA,GAAa,MAAM,UAAA,EACnB,UAAA,GAAa,KAAA,CAAM,UAAA,EACnB,QAAA,GAAW,KAAA,CAAM,UACjB,MAAA,GAAS,KAAA,CAAM,QACf,WAAA,GAAc,KAAA,CAAM,aACpB,KAAA,GAAA,IAAQ,oCAAA,CAAAH,OAAAA,EAA8B,KAAA,EAAO+E,UAAS,CAAA;AACxD,EAAA,IAAI,SAAA,GAAYjD,gBAAAA,CAAS,SAAS,CAAA,EAChC,KAAA,GAAQ,UAAU,CAAC,CAAA,EACnB,QAAA,GAAW,SAAA,CAAU,CAAC,CAAA;AACxB,EAAA,IAAI,OAAA,GAAU4C,eAAO,KAAK,CAAA;AAC1B,EAAA,IAAI,UAAA,GAAaA,cAAAA,CAAO,KAAA,CAAM,EAAA,IAAM,YAAY,GAAA,GAAM,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAC7F,EAAA,IAAI,OAAA,GAAU,KAAA,CAAM,EAAA,IAAM,UAAA,CAAW,OAAA;AACrC,EAAAzC,kBAAU,MAAM;AACd,IAAA,IAAI,KAAA,CAAM,UAAU,KAAA,EAAO;AACzB,MAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,QAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,KAAK,CAAC,CAAA;AAChB,EAAA,SAAS,YAAA,CAAa,KAAK,OAAA,EAAS;AAClC,IAAA,IAAIkD,MAAAA,GAAAA,CAAS,WAAW,GAAA,CAAI,MAAA,CAAO,OAAO,IAAA,EAAK,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AACjE,IAAA,IAAID,SAAAA,CAASC,MAAK,CAAA,EAAG;AACnB,MAAA,QAAA,IAAY,QAAA,CAAS,KAAKA,MAAK,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,GAAA,GAAM,eAAeA,MAAK,CAAA;AAC9B,IAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG;AACf,MAAA,QAAA,IAAY,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,IAC/B;AACA,IAAA,QAAA,CAASA,MAAK,CAAA;AAAA,EAChB;AACA,EAAA,SAAS,WAAW,GAAA,EAAK;AACvB,IAAA,OAAA,CAAQ,OAAA,GAAU,KAAA;AAClB,IAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AACpB,IAAA,MAAA,IAAU,OAAO,GAAG,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,iBAAiB,EAAC;AACtB,EAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,IAAA,cAAA,CAAe,eAAe,CAAA,GAAI,QAAA;AAAA,EACpC;AACA,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,cAAA,CAAe,eAAe,CAAA,GAAI,gBAAA;AAAA,EACpC;AACA,EAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,IAAA,cAAA,CAAe,eAAe,CAAA,GAAI,aAAA;AAAA,EACpC;AACA,EAAA,IAAI,YAAA,GAAA,IAAe,gBAAApF,OAAAA,EAAS;AAAA,IAC1B,8BAAA,EAAgC,oBAAA;AAAA,IAChC,6BAAA,EAA+B,wCAAA;AAAA,IAC/B,wBAAA,EAA0B,MAAA;AAAA,IAC1B,QAAA,EAAU,UAAA;AAAA,IACV,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ,EAAG,gBAAgB,KAAK,CAAA;AACxB,EAAA,IAAI,aAAA,GAAA,IAAgB,gBAAAA,OAAAA,EAAS;AAAA,IAC3B,KAAA,EAAO,MAAA;AAAA,IACP,UAAA,EAAY,CAAA;AAAA,IACZ,aAAA,EAAe,CAAA;AAAA,IACf,WAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAc,CAAA;AAAA,IACd,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,aAAA;AAAA,IACZ,SAAA,EAAW,YAAA;AAAA,IACX,MAAA,EAAQ,MAAA;AAAA,IACR,KAAA,EAAO,6BAAA;AAAA,IACP,SAAA,EAAW;AAAA,KACV,UAAU,CAAA;AACb,EAAA,IAAI,UAAA,GAAA,IAAa,gBAAAA,OAAAA,EAAS;AAAA,IACxB,KAAA;AAAA,IACA,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA,GAAU;AAAA,KAChC,KAAA,EAAO;AAAA,IACR,EAAA,EAAI,OAAA;AAAA,IACJ,KAAA,EAAO,aAAA;AAAA,IACP,gBAAgB,CAAA,CAAA,KAAK;AACnB,MAAA,IAAI,MAAM,CAAA,CAAE,MAAA;AACZ,MAAA,GAAA,CAAI,kBAAkB,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,GAAA,CAAI,MAAM,MAAM,CAAA;AAAA,IAC1D;AAAA,GACD,CAAA;AACD,EAAA,uBAAoBqF,gBAAM,KAAA,EAAO;AAAA,IAC/B,SAAA,EAAW,CAAC,SAAA,EAAW,SAAA,IAAa,EAAE,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,IAChE,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,CAAC,WAAA,GAAc,WAAA,CAAY,UAAA,EAAY,GAAG,CAAA,mBAAiBN,cAAAA,CAAK,OAAA,EAAA,IAAS,eAAA,CAAA/E,OAAAA,EAAS;AAAA,MAC1F;AAAA,OACC,UAAU,CAAC,GAAG,KAAA,oBAAsB+E,eAAK,OAAA,EAAS;AAAA,MACnD,OAAA,EAAS,OAAA;AAAA,MACT,KAAA,EAAA,IAAO,gBAAA/E,OAAAA,EAAS;AAAA,QACd,KAAA,EAAO,mCAAA;AAAA,QACP,aAAA,EAAe;AAAA,SACd,UAAU,CAAA;AAAA,MACb,QAAA,EAAU;AAAA,KACX,CAAC;AAAA,GACH,CAAA;AACH,CAAC,CAAA;AACD,aAAA,CAAc,WAAA,GAAc,eAAA;AAC5B,IAAOiF,YAAAA,GAAQ,aAAA;;;AClHf,IAAAT,eAAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAAC,oCAAAA,GAA0C,OAAA,CAAA,oCAAA,EAAA,CAAA;AAC1C,IAAIO,UAAAA,GAAY,CAAC,WAAA,EAAa,MAAA,EAAQ,WAAA,EAAa,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,WAAA,EAAa,OAAA,EAAS,UAAU,CAAA;AAK3H,IAAI,oCAAiC5E,0BAAAA,CAAM,UAAA,CAAW,CAAC,OAAO,GAAA,KAAQ;AACpE,EAAA,IAAI,gBAAA,GAAmB,KAAA,CAAM,SAAA,EAC3B,SAAA,GAAY,qBAAqB,MAAA,GAAS,6BAAA,GAAgC,gBAAA,EAC1E,IAAA,GAAO,KAAA,CAAM,IAAA,EACb,gBAAA,GAAmB,KAAA,CAAM,WACzB,SAAA,GAAY,gBAAA,KAAqB,MAAA,GAAS,QAAA,GAAW,gBAAA,EACrD,aAAA,GAAgB,KAAA,CAAM,MAAA,EACtB,SAAS,aAAA,KAAkB,MAAA,GAAS,EAAC,GAAI,aAAA,EACzC,aAAA,GAAgB,KAAA,CAAM,MAAA,EACtB,SAAS,aAAA,KAAkB,MAAA,GAAS,EAAC,GAAI,aAAA,EACzC,aAAA,GAAgB,KAAA,CAAM,MAAA,EACtB,SAAS,aAAA,KAAkB,MAAA,GAAS,EAAC,GAAI,aAAA,EACzC,aAAA,GAAgB,KAAA,CAAM,MAAA,EACtB,SAAS,aAAA,KAAkB,MAAA,GAAS,EAAC,GAAI,aAAA,EACzC,SAAA,GAAY,KAAA,CAAM,SAAA,EAClB,QAAQ,KAAA,CAAM,KAAA,EACd,QAAA,GAAW,KAAA,CAAM,QAAA,EACjB,KAAA,GAAA,IAAQ,oCAAA,CAAAH,OAAAA,EAA8B,OAAO+E,UAAS,CAAA;AACxD,EAAA,IAAI,IAAA,GAAO,IAAA,GAAO,UAAA,CAAW,IAAI,IAAI,EAAC;AACtC,EAAA,SAAS,WAAW,GAAA,EAAK;AACvB,IAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AACnC,IAAA,IAAI,KAAA,IAAS,QAAQ,GAAA,EAAK;AACxB,MAAA,GAAA,CAAI,OAAO,KAAA,GAAQ,KAAA;AAAA,IACrB;AACA,IAAA,IAAI,KAAA,IAAS,QAAQ,CAAA,EAAG;AACtB,MAAA,GAAA,CAAI,OAAO,KAAA,GAAQ,GAAA;AAAA,IACrB;AAAA,EACF;AACA,EAAA,IAAI,kBAAkB,CAAA,GAAA,KAAO;AAC3B,IAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AACnC,IAAA,IAAI,KAAA,IAAS,QAAQ,GAAA,EAAK;AACxB,MAAA,GAAA,CAAI,OAAO,KAAA,GAAQ,KAAA;AAAA,IACrB;AACA,IAAA,IAAI,KAAA,IAAS,QAAQ,CAAA,EAAG;AACtB,MAAA,GAAA,CAAI,OAAO,KAAA,GAAQ,GAAA;AAAA,IACrB;AAAA,EACF,CAAA;AACA,EAAA,IAAI,YAAA,GAAe,CAAC,KAAA,EAAO,IAAA,EAAM,GAAA,KAAQ;AACvC,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,IAAI,KAAA,GAAQ,GAAG,KAAA,GAAQ,CAAA;AACvB,QAAA,IAAI,KAAA,GAAQ,KAAK,KAAA,GAAQ,GAAA;AACzB,QAAA,QAAA,IAAY,SAAS,KAAA,CAAY,UAAA,CAAA,IAAW,gBAAAhF,OAAAA,EAAS,IAAI,IAAA,EAAM;AAAA,UAC7D,GAAG,KAAA,GAAQ;AAAA,SACZ,CAAC,CAAC,CAAC,CAAA;AAAA,MACN;AACA,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,KAAA,GAAQ,GAAA;AACR,QAAA,GAAA,CAAI,OAAO,KAAA,GAAQ,KAAA;AAAA,MACrB;AACA,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,KAAA,GAAQ,CAAA;AACR,QAAA,GAAA,CAAI,OAAO,KAAA,GAAQ,GAAA;AAAA,MACrB;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,QAAA,IAAY,SAAS,KAAA,CAAY,UAAA,CAAA,IAAW,gBAAAA,OAAAA,EAAS,IAAI,IAAA,EAAM;AAAA,UAC7D,CAAA,EAAG;AAAA,SACJ,CAAC,CAAC,CAAC,CAAA;AAAA,MACN;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,QAAA,IAAY,SAAS,KAAA,CAAY,UAAA,CAAA,IAAW,gBAAAA,OAAAA,EAAS,IAAI,IAAA,EAAM;AAAA,UAC7D,CAAA,EAAG;AAAA,SACJ,CAAC,CAAC,CAAC,CAAA;AAAA,MACN;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,QAAA,IAAY,SAAS,KAAA,CAAY,UAAA,CAAA,IAAW,gBAAAA,OAAAA,EAAS,IAAI,IAAA,EAAM;AAAA,UAC7D,CAAA,EAAG;AAAA,SACJ,CAAC,CAAC,CAAC,CAAA;AAAA,MACN;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,IAAI,YAAA,GAAe,KAAK,CAAA,GAAI,IAAA,CAAK,MAAM,IAAA,CAAK,CAAA,GAAI,GAAG,CAAA,GAAI,GAAA,GAAM,CAAA;AAC7D,EAAA,uBAAoBqF,eAAAA,CAAM,KAAA,EAAA,IAAO,eAAA,CAAArF,OAAAA,EAAS;AAAA,IACxC,GAAA;AAAA,IACA,SAAA,EAAW,CAAC,SAAA,EAAW,SAAA,IAAa,EAAE,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG;AAAA,KAC/D,KAAA,EAAO;AAAA,IACR,KAAA,EAAA,IAAO,gBAAAA,OAAAA,EAAS;AAAA,MACd,QAAA,EAAU,EAAA;AAAA,MACV,OAAA,EAAS;AAAA,OACR,KAAK,CAAA;AAAA,IACR,UAAU,iBAAc+E,cAAAA,CAAKE,YAAAA,EAAAA,IAAe,gBAAAjF,OAAAA,EAAS;AAAA,MACnD,KAAA,EAAO,GAAA;AAAA,MACP,KAAA,EAAO,KAAK,CAAA,IAAK,CAAA;AAAA,MACjB,MAAA,EAAQ,UAAA;AAAA,MACR,SAAA;AAAA,MACA,UAAU,CAAC,GAAA,EAAK,QAAQ,YAAA,CAAa,GAAA,EAAK,KAAK,GAAG;AAAA,OACjD,MAAA,EAAQ;AAAA,MACT,WAAO,eAAA,CAAAA,OAAAA,EAAS,EAAC,EAAG,OAAO,KAAK;AAAA,KACjC,CAAC,CAAA,kBAAgB+E,cAAAA,CAAKE,YAAAA,EAAAA,IAAe,gBAAAjF,OAAAA,EAAS;AAAA,MAC7C,KAAA,EAAO,GAAA;AAAA,MACP,KAAA,EAAO,KAAK,CAAA,IAAK,CAAA;AAAA,MACjB,MAAA,EAAQ,UAAA;AAAA,MACR,SAAA;AAAA,MACA,UAAU,CAAC,GAAA,EAAK,QAAQ,YAAA,CAAa,GAAA,EAAK,KAAK,GAAG;AAAA,OACjD,MAAA,EAAQ;AAAA,MACT,KAAA,EAAA,IAAO,gBAAAA,OAAAA,EAAS;AAAA,QACd,UAAA,EAAY;AAAA,OACd,EAAG,OAAO,KAAK;AAAA,KAChB,CAAC,CAAA,kBAAgB+E,cAAAA,CAAKE,YAAAA,EAAAA,IAAe,gBAAAjF,OAAAA,EAAS;AAAA,MAC7C,KAAA,EAAO,GAAA;AAAA,MACP,KAAA,EAAO,KAAK,CAAA,IAAK,CAAA;AAAA,MACjB,MAAA,EAAQ,UAAA;AAAA,MACR,SAAA;AAAA,MACA,UAAU,CAAC,GAAA,EAAK,QAAQ,YAAA,CAAa,GAAA,EAAK,KAAK,GAAG;AAAA,OACjD,MAAA,EAAQ;AAAA,MACT,KAAA,EAAA,IAAO,gBAAAA,OAAAA,EAAS;AAAA,QACd,UAAA,EAAY;AAAA,OACd,EAAG,OAAO,KAAK;AAAA,KAChB,CAAC,CAAA,EAAG,MAAA,oBAAuB+E,cAAAA,CAAKE,YAAAA,EAAAA,IAAe,gBAAAjF,OAAAA,EAAS;AAAA,MACvD,KAAA,EAAO,GAAA;AAAA,MACP,OAAO,QAAA,CAAS,MAAA,CAAO,YAAA,GAAe,GAAG,GAAG,EAAE,CAAA;AAAA,MAC9C,MAAA,EAAQ,eAAA;AAAA,MACR,SAAA;AAAA,MACA,UAAU,CAAC,GAAA,EAAK,QAAQ,YAAA,CAAa,GAAA,EAAK,KAAK,GAAG;AAAA,OACjD,MAAA,EAAQ;AAAA,MACT,KAAA,EAAA,IAAO,gBAAAA,OAAAA,EAAS;AAAA,QACd,UAAA,EAAY;AAAA,OACd,EAAG,OAAO,KAAK;AAAA,KAChB,CAAC,CAAC;AAAA,GACJ,CAAC,CAAA;AACJ,CAAC,CAAA;AACD,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAChC,IAAOiF,YAAAA,GAAQ,iBAAA;;;ACjIf,IAAAT,eAAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAAC,oCAAAA,GAA0C,OAAA,CAAA,oCAAA,EAAA,CAAA;AAC1C,IAAIO,aAAY,CAAC,WAAA,EAAa,aAAa,KAAA,EAAO,UAAA,EAAY,aAAa,SAAS,CAAA;AAIpF,IAAI,aAAA,GAAgB,kJAAA;AACpB,IAAI,eAAA,GAAkB,kJAAA;AACtB,IAAI,sBAAmB5E,0BAAAA,CAAM,UAAA,CAAW,CAAC,OAAO,GAAA,KAAQ;AACtD,EAAA,IAAI,mBAAmB,KAAA,CAAM,SAAA,EAC3B,YAAY,gBAAA,KAAqB,MAAA,GAAS,gBAAgB,gBAAA,EAC1D,SAAA,GAAY,MAAM,SAAA,EAClB,UAAA,GAAa,MAAM,GAAA,EACnB,GAAA,GAAM,eAAe,MAAA,GAAS,CAAA,GAAI,YAClC,SAAA,GAAY,KAAA,CAAM,QAAA,EAClB,gBAAA,GAAmB,MAAM,SAAA,EACzB,SAAA,GAAY,qBAAqB,MAAA,GAAS,YAAA,GAAe,kBACzD,cAAA,GAAiB,KAAA,CAAM,SACvB,OAAA,GAAU,cAAA,KAAmB,SAAS,KAAA,GAAQ,cAAA,EAC9C,YAAQ,oCAAA,CAAAH,OAAAA,EAA8B,OAAO+E,UAAS,CAAA;AACxD,EAAA,IAAI,qBAAA,GAAwBJ,oBAAY,MAAM;AAC5C,IAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,MAAA,IAAI,MAAA,GAAS,UAAU,eAAA,GAAkB,aAAA;AACzC,MAAA,IAAI,iBAAA,GAAoB,OAAA;AACxB,MAAA,OAAO,qBAAA,GAAwB,iBAAA,GAAoB,IAAA,GAAO,MAAA,GAAS,GAAA;AAAA,IACrE,CAAA,MAAO;AAEL,MAAA,IAAI,OAAA,GAAU,UAAU,aAAA,GAAgB,eAAA;AACxC,MAAA,IAAI,kBAAA,GAAqB,QAAA;AACzB,MAAA,OAAO,qBAAA,GAAwB,kBAAA,GAAqB,IAAA,GAAO,OAAA,GAAU,GAAA;AAAA,IACvE;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,OAAO,CAAC,CAAA;AACvB,EAAA,IAAI,qBAAA,GAAwBA,oBAAY,CAAA,WAAA,KAAe;AACrD,IAAA,IAAI,KAAA,GAAQ,SAAA,KAAc,YAAA,GAAe,WAAA,CAAY,OAAO,WAAA,CAAY,GAAA;AACxE,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,MAAA,eAAA,GAAkB,OAAA,GAAU,IAAI,KAAA,GAAQ,KAAA;AAAA,IAC1C,CAAA,MAAO;AAEL,MAAA,eAAA,GAAkB,OAAA,GAAU,QAAQ,CAAA,GAAI,KAAA;AAAA,IAC1C;AACA,IAAA,OAAO,GAAA,GAAM,eAAA;AAAA,EACf,CAAA,EAAG,CAAC,SAAA,EAAW,OAAO,CAAC,CAAA;AACvB,EAAA,IAAI,qBAAqBE,eAAAA,CAAQ,MAAM,uBAAsB,EAAG,CAAC,qBAAqB,CAAC,CAAA;AACvF,EAAA,uBAAoBC,cAAAA,CAAKE,YAAAA,EAAAA,IAAO,eAAA,CAAAjF,OAAAA,EAAS;AAAA,IACvC,GAAA;AAAA,IACA,SAAA,EAAW,SAAA,GAAY,GAAA,IAAO,SAAA,IAAa,EAAA;AAAA,KAC1C,KAAA,EAAO;AAAA,IACR,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAM;AAAA,MACJ,CAAA,EAAG,GAAA;AAAA,MACH,CAAA,EAAG,GAAA;AAAA,MACH,CAAA,EAAG,GAAA;AAAA,MACH,GAAG,GAAA,GAAM;AAAA,KACX;AAAA,IACA,QAAA,EAAU,CAAC,CAAA,EAAG,WAAA,KAAgB;AAC5B,MAAA,SAAA,IAAa,SAAA,CAAU;AAAA,QACrB,CAAA,EAAG,sBAAsB,WAAW;AAAA,OACrC,CAAA;AAAA,IACH;AAAA,GACD,CAAC,CAAA;AACJ,CAAC,CAAA;AACD,GAAA,CAAI,WAAA,GAAc,KAAA;AAClB,IAAOiF,YAAAA,GAAQ,GAAA;;;ACjEf,IAAAT,eAAAA,GAAqB,OAAA,CAAA,eAAA,EAAA,CAAA;AACrB,IAAAC,oCAAAA,GAA0C,OAAA,CAAA,oCAAA,EAAA,CAAA;AAC1C,IAAIO,UAAAA,GAAY,CAAC,WAAA,EAAa,WAAA,EAAa,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,WAAA,EAAa,UAAA,EAAY,YAAA,EAAc,aAAA,EAAe,YAAY,CAAA;AAIzI,IAAI,yBAAsB5E,0BAAAA,CAAM,UAAA,CAAW,CAAC,OAAO,GAAA,KAAQ;AACzD,EAAA,IAAI,gBAAA,GAAmB,MAAM,SAAA,EAC3B,SAAA,GAAY,qBAAqB,MAAA,GAAS,gBAAA,GAAmB,gBAAA,EAC7D,SAAA,GAAY,KAAA,CAAM,SAAA,EAClBgE,SAAQ,KAAA,CAAM,KAAA,EACd,aAAA,GAAgB,KAAA,CAAM,MAAA,EACtB,MAAA,GAAS,kBAAkB,MAAA,GAAS,EAAC,GAAI,aAAA,EACzC,KAAA,GAAQ,KAAA,CAAM,OACd,gBAAA,GAAmB,KAAA,CAAM,SAAA,EACzB,SAAA,GAAY,gBAAA,KAAqB,MAAA,GAAS,EAAC,GAAI,gBAAA,EAC/C,QAAA,GAAW,KAAA,CAAM,QAAA,EACjB,UAAA,GAAa,MAAM,UAAA,EACnB,WAAA,GAAc,KAAA,CAAM,WAAA,EACpB,UAAA,GAAa,KAAA,CAAM,YACnB,KAAA,GAAA,IAAQ,oCAAA,CAAAnE,OAAAA,EAA8B,KAAA,EAAO+E,UAAS,CAAA;AACxD,EAAA,IAAI,SAAA,GAAA,IAAY,gBAAAhF,OAAAA,EAAS;AAAA,IACvB,2BAAA,EAA6B,mBAAA;AAAA,IAC7B,UAAA,EAAY,gCAAA;AAAA,IACZ,MAAA,EAAQ,EAAA;AAAA,IACR,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAc,CAAA;AAAA,IACd,MAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS,MAAA;AAAA,IACT,YAAA,EAAc;AAAA,GAChB,EAAG,UAAU,KAAK,CAAA;AAClB,EAAA,IAAI,WAAA,GAAc,CAAC,GAAA,EAAK,GAAA,KAAQ;AAC9B,IAAA,QAAA,IAAY,QAAA,CAAS,UAAU,GAAG,CAAA,EAAG,MAAY,SAAA,CAAU,GAAG,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,EACvE,CAAA;AACA,EAAA,uBAAoBqF,eAAAA,CAAM,KAAA,EAAA,IAAO,eAAA,CAAArF,OAAAA,EAAS;AAAA,IACxC;AAAA,KACC,KAAA,EAAO;AAAA,IACR,SAAA,EAAW,CAAC,SAAA,EAAW,SAAA,IAAa,EAAE,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,IAChE,KAAA,EAAA,IAAO,gBAAAA,OAAAA,EAAS;AAAA,MACd,OAAA,EAAS,MAAA;AAAA,MACT,QAAA,EAAU,MAAA;AAAA,MACV,QAAA,EAAU;AAAA,OACT,KAAK,CAAA;AAAA,IACR,UAAU,CAAC,WAAA,oBAA4BI,0BAAAA,CAAM,cAAA,CAAe,WAAW,CAAA,IAAK,WAAA,EAAa,MAAA,IAAU,KAAA,CAAM,QAAQ,MAAM,CAAA,IAAK,OAAO,GAAA,CAAI,CAAC,MAAM,GAAA,KAAQ;AACpJ,MAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,MAAA,IAAI,UAAA,GAAa,EAAA;AACjB,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,KAAA,GAAQ,IAAA;AACR,QAAA,UAAA,GAAa,IAAA;AAAA,MACf;AACA,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,KAAA,EAAO;AAC1C,QAAA,KAAA,GAAQ,IAAA,CAAK,SAAS,IAAA,CAAK,KAAA;AAC3B,QAAA,UAAA,GAAa,IAAA,CAAK,KAAA;AAAA,MACpB;AACA,MAAA,IAAI,UAAUgE,MAAAA,IAASA,MAAAA,CAAM,iBAAA,EAAkB,KAAM,WAAW,iBAAA,EAAkB;AAClF,MAAA,IAAI,MAAA,GAAS,cAAc,UAAA,CAAW;AAAA,QACpC,KAAA;AAAA,QACA,KAAA,EAAO,UAAA;AAAA,QACP,OAAA,EAAS,CAAC,CAAC,OAAA;AAAA,QACX,KAAA,EAAA,IAAO,eAAA,CAAApE,OAAAA,EAAS,IAAI,SAAA,EAAW;AAAA,UAC7B;AAAA,SACD,CAAA;AAAA,QACD,OAAA,EAAS,CAAA,GAAA,KAAO,WAAA,CAAY,UAAA,EAAY,GAAG;AAAA,OAC5C,CAAA;AACD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,uBAAoB+E,eAAKO,gBAAAA,EAAU;AAAA,UACjC,QAAA,EAAU;AAAA,WACT,GAAG,CAAA;AAAA,MACR;AACA,MAAA,IAAI,KAAA,GAAQ,SAAA,CAAU,QAAA,oBAAyBlF,0BAAAA,CAAM,cAAA,CAAe,SAAA,CAAU,QAAQ,CAAA,mBAAiBA,0BAAAA,CAAM,YAAA,CAAa,UAAU,QAAA,EAAU;AAAA,QAC5I,KAAA,EAAO,UAAA;AAAA,QACP;AAAA,OACD,CAAA,GAAI,IAAA;AACL,MAAA,uBAAoB2E,cAAAA,CAAK,KAAA,EAAA,IAAO,eAAA,CAAA/E,OAAAA,EAAS;AAAA,QACvC,QAAA,EAAU,CAAA;AAAA,QACV,KAAA;AAAA,QACA,OAAA,EAAS,CAAA,GAAA,KAAO,WAAA,CAAY,UAAA,EAAY,GAAG;AAAA,SAC1C,SAAA,EAAW;AAAA,QACZ,QAAA,EAAU,KAAA;AAAA,QACV,KAAA,EAAA,IAAO,eAAA,CAAAA,OAAAA,EAAS,IAAI,SAAA,EAAW;AAAA,UAC7B;AAAA,SACD;AAAA,OACF,GAAG,GAAG,CAAA;AAAA,IACT,CAAC,GAAG,UAAA,oBAA2BI,2BAAM,cAAA,CAAe,UAAU,KAAK,UAAU;AAAA,GAC9E,CAAC,CAAA;AACJ,CAAC,CAAA;AACD,MAAA,CAAO,WAAA,GAAc,QAAA;AACrB,IAAO6E,YAAAA,GAAQ,MAAA;AXvFf,IAAID,UAAAA,GAAY,CAAC,WAAA,EAAa,WAAA,EAAa,UAAA,EAAY,SAAS,cAAA,EAAgB,OAAA,EAAS,iBAAA,EAAmB,cAAA,EAAgB,OAAO,CAAA;AAWnI,IAAI,gBAAgB,CAAC,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AACxL,IAAI,GAAA,GAAM,CAAA,KAAA,qBAAsBD,cAAAA,CAAK,KAAA,EAAO;AAAA,EAC1C,KAAA,EAAO;AAAA,IACL,SAAA,EAAW,8BAAA;AAAA,IACX,KAAA,EAAO,CAAA;AAAA,IACP,GAAA,EAAK,CAAA;AAAA,IACL,MAAA,EAAQ,CAAA;AAAA,IACR,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,YAAA,EAAc,CAAA;AAAA,IACd,QAAA,EAAU,UAAA;AAAA,IACV,eAAA,EAAiB;AAAA;AAErB,CAAC,CAAA;AACD,IAAI,yBAAsB3E,0BAAAA,CAAM,UAAA,CAAW,CAAC,OAAO,GAAA,KAAQ;AACzD,EAAA,IAAI,gBAAA,GAAmB,KAAA,CAAM,SAAA,EAC3B,SAAA,GAAY,gBAAA,KAAqB,MAAA,GAAS,gBAAA,GAAmB,gBAAA,EAC7D,SAAA,GAAY,KAAA,CAAM,SAAA,EAClB,QAAA,GAAW,KAAA,CAAM,UACjB,YAAA,GAAe,KAAA,CAAM,KAAA,EACrB,KAAA,GAAQ,YAAA,KAAiB,MAAA,GAAS,GAAA,GAAM,YAAA,EACxC,mBAAA,GAAsB,KAAA,CAAM,YAAA,EAC5B,YAAA,GAAe,mBAAA,KAAwB,MAAA,GAAS,gBAAgB,mBAAA,EAChEgE,MAAAA,GAAQ,KAAA,CAAM,KAAA,EACd,qBAAA,GAAwB,KAAA,CAAM,eAAA,EAC9B,eAAA,GAAkB,qBAAA,KAA0B,MAAA,GAAS,IAAA,GAAO,qBAAA,EAC5D,mBAAA,GAAsB,KAAA,CAAM,cAC5B,YAAA,GAAe,mBAAA,KAAwB,MAAA,GAAS,KAAA,GAAQ,mBAAA,EACxD,KAAA,GAAQ,KAAA,CAAM,KAAA,EACd,KAAA,GAAA,IAAQ,oCAAA,CAAAnE,OAAAA,EAA8B,KAAA,EAAO+E,UAAS,CAAA;AACxD,EAAA,IAAI,YAAYjD,gBAAAA,CAAS;AAAA,IACrB,CAAA,EAAG,GAAA;AAAA,IACH,CAAA,EAAG,EAAA;AAAA,IACH,CAAA,EAAG,EAAA;AAAA,IACH,CAAA,EAAG;AAAA,GACJ,GACD,IAAA,GAAO,SAAA,CAAU,CAAC,CAAA,EAClB,OAAA,GAAU,UAAU,CAAC,CAAA;AACvB,EAAAG,kBAAU,MAAM;AACd,IAAA,IAAI,OAAOkC,MAAAA,KAAU,QAAA,IAAY,QAAA,CAASA,MAAK,CAAA,EAAG;AAChD,MAAA,OAAA,CAAQ,SAAA,CAAUA,MAAK,CAAC,CAAA;AAAA,IAC1B;AACA,IAAA,IAAI,OAAOA,WAAU,QAAA,EAAU;AAC7B,MAAA,OAAA,CAAQA,MAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AACV,EAAA,IAAI,eAAe,CAAA,GAAA,KAAO;AACxB,IAAA,OAAA,CAAQ,GAAG,CAAA;AACX,IAAA,QAAA,IAAY,QAAA,CAAS,KAAA,CAAY,GAAG,CAAC,CAAA;AAAA,EACvC,CAAA;AACA,EAAA,IAAI,SAAA,GAAY,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC9B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,QAAA,CAAS,KAAK,CAAA,IAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA,EAAG;AACtF,MAAA,YAAA,CAAa,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,IAC/B;AAAA,EACF,CAAA;AACA,EAAA,IAAI,oBAAoB,CAAA,QAAA,KAAY,YAAA,CAAA,IAAa,iBAAApE,OAAAA,EAAS,IAAI,IAAA,EAAM;AAAA,IAClE,GAAG,QAAA,CAAS;AAAA,GACb,CAAC,CAAA;AACF,EAAA,IAAI,sBAAA,GAAyB,cAAY,YAAA,CAAA,IAAa,gBAAA,CAAAA,SAAS,EAAC,EAAG,MAAM,QAAA,EAAU;AAAA,IACjF,GAAG,IAAA,CAAK;AAAA,GACT,CAAC,CAAA;AACF,EAAA,IAAI,SAAA,GAAA,IAAY,iBAAAA,OAAAA,EAAS;AAAA,IACvB,qBAAA,EAAuB,oBAAA;AAAA,IACvB,qBAAA,EAAuB,iEAAA;AAAA,IACvB,4BAAA,EAA8B,wCAAA;AAAA,IAC9B,2BAAA,EAA6B,4EAAA;AAAA,IAC7B,4BAAA,EAA8B,8BAAA;AAAA,IAC9B,UAAA,EAAY,0BAAA;AAAA,IACZ,YAAA,EAAc,CAAA;AAAA,IACd,SAAA,EAAW,0BAAA;AAAA,IACX;AAAA,KACC,KAAK,CAAA;AACR,EAAA,IAAI,UAAA,GAAa;AAAA,IACf,YAAA,EAAc,CAAA;AAAA,IACd,UAAA,EAAY,iBAAiB,IAAI,CAAA;AAAA,IACjC,SAAA,EAAW;AAAA,GACb;AACA,EAAA,IAAI,WAAA,GAAc;AAAA,IAChB,SAAA,EAAW,iCAAA;AAAA,IACX,UAAA,EAAY,EAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACf;AACA,EAAA,IAAI,eAAA,GAAkB;AAAA,IACpB,WAAA,EAAa,EAAA;AAAA,IACb,YAAA,EAAc,EAAA;AAAA,IACd,YAAA,EAAc,CAAA;AAAA,IACd,SAAA,EAAW;AAAA,GACb;AACA,EAAA,uBAAoBqF,eAAAA,CAAM,KAAA,EAAA,IAAO,iBAAArF,OAAAA,EAAS,IAAI,KAAA,EAAO;AAAA,IACnD,SAAA,EAAW,SAAA,GAAY,GAAA,IAAO,SAAA,IAAa,EAAA,CAAA;AAAA,IAC3C,GAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,iBAAcqF,eAAAA,CAAM,KAAA,EAAO;AAAA,MACnC,KAAA,EAAO;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA,QAAA,EAAU,iBAAcN,cAAAA,CAAKE,YAAAA,EAAY;AAAA,QACvC,IAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,MAAA;AAAA,UACP,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAU;AAAA,OACX,CAAA,kBAAgBI,eAAAA,CAAM,KAAA,EAAO;AAAA,QAC5B,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,SAAA,EAAW;AAAA,SACb;AAAA,QACA,QAAA,EAAU,iBAAcA,eAAAA,CAAM,KAAA,EAAO;AAAA,UACnC,KAAA,EAAO;AAAA,YACL,IAAA,EAAM;AAAA,WACR;AAAA,UACA,QAAA,EAAU,iBAAcN,cAAAA,CAAKE,YAAAA,EAAK;AAAA,YAChC,KAAA,EAAO,MAAA;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,KAAK,IAAA,CAAK,CAAA;AAAA,YACV,OAAA,EAAS,GAAA;AAAA,YACT,UAAA,EAAY;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,UAAA,EAAY,CAAA;AAAA,gBACZ,WAAA,EAAa;AAAA;AACf,aACF;AAAA,YACA,QAAA,EAAU,YAAU,YAAA,CAAA,IAAa,gBAAA,CAAAjF,SAAS,EAAC,EAAG,IAAA,EAAM,MAAM,CAAC;AAAA,WAC5D,CAAA,EAAG,CAAC,YAAA,oBAA6B+E,eAAKE,YAAAA,EAAO;AAAA,YAC5C,KAAA,EAAO,MAAA;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,IAAA;AAAA,YACA,OAAA,EAAS,GAAA;AAAA,YACT,KAAA,EAAO;AAAA,cACL,SAAA,EAAW;AAAA,aACb;AAAA,YACA,UAAA,EAAY;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,UAAA,EAAY,CAAA;AAAA,gBACZ,WAAA,EAAa;AAAA;AACf,aACF;AAAA,YACA,QAAA,EAAU;AAAA,WACX,CAAC;AAAA,SACH,CAAA,EAAG,CAAC,YAAA,oBAA6BF,eAAKE,YAAAA,EAAO;AAAA,UAC5C,KAAA,EAAO,EAAA;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,IAAA;AAAA,UACA,MAAA,EAAQ,CAAA;AAAA,UACR,KAAA,EAAO;AAAA,YACL,UAAA,EAAY;AAAA,WACd;AAAA,UACA,OAAA,EAAS;AAAA,YACP,KAAA,EAAO;AAAA,cACL,UAAA,EAAY;AAAA;AACd,WACF;AAAA,UACA,UAAA,EAAY;AAAA,YACV,KAAA,EAAO;AAAA,WACT;AAAA,UACA,SAAS,sBAAmBF,cAAAA,CAAKO,gBAAAA,EAAU,EAAE;AAAA,SAC9C,CAAC;AAAA,OACH,CAAC;AAAA,KACH,CAAA,EAAG,eAAA,oBAAgCD,gBAAM,KAAA,EAAO;AAAA,MAC/C,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,QAAA,EAAU,iBAAcN,cAAAA,CAAKE,YAAAA,EAAe;AAAA,QAC1C,KAAA,EAAO,KAAA;AAAA,QACP,KAAA,EAAO,UAAU,IAAI,CAAA,CAAE,QAAQ,IAAA,EAAM,EAAE,EAAE,iBAAA,EAAkB;AAAA,QAC3D,UAAU,CAAC,GAAA,EAAK,GAAA,KAAQ,SAAA,CAAU,GAAQ,CAAA;AAAA,QAC1C,KAAA,EAAO;AAAA,UACL,QAAA,EAAU;AAAA;AACZ,OACD,CAAA,kBAAgBF,cAAAA,CAAKE,YAAAA,EAAM;AAAA,QAC1B,IAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,UAAA,EAAY;AAAA,SACd;AAAA,QACA,MAAA,EAAQ,CAAC,YAAA,GAAe,EAAC,GAAI,KAAA;AAAA,QAC7B,QAAA,EAAU,CAAA,MAAA,KAAU,YAAA,CAAa,MAAA,CAAO,IAAI;AAAA,OAC7C,CAAC;AAAA,KACH,GAAG,YAAA,IAAgB,YAAA,CAAa,SAAS,CAAA,oBAAkBF,eAAKE,YAAAA,EAAQ;AAAA,MACvE,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAO,UAAU,IAAI,CAAA;AAAA,MACrB,QAAA,EAAU,CAAA,QAAA,KAAY,YAAA,CAAa,QAAQ,CAAA;AAAA,MAC3C,SAAA,EAAW;AAAA,QACT,KAAA,EAAO;AAAA;AACT,KACD,CAAC;AAAA,GACH,CAAC,CAAA;AACJ,CAAC,CAAA;AACD,MAAA,CAAO,WAAA,GAAc,QAAA;AACrB,IAAOA,YAAAA,GAAQ,MAAA;;;AY7IR,IAAM,aAAA,GAAgB;AAAA,EAC3B,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,mBAAA,EAAoB;AAAA,EAC7C,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,qBAAA,EAAsB;AAAA,EACjD,EAAE,KAAA,EAAO,iBAAA,EAAmB,KAAA,EAAO,wBAAA,EAAyB;AAAA,EAC5D,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,gBAAA,EAAiB;AAAA,EAC5C,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,wBAAA,EAAyB;AAAA,EACxD,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,0BAAA;AAClC,CAAA;AAKO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,OAAA,EAAS,EAAA;AAAA,EACT,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,EAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAKO,IAAM,WAAA,GAAc;AAAA,EACzB,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,MAAM,WAAA,EAAY;AAAA,EAC5D,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,MAAM,IAAA,EAAK;AAAA,EACrD,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,MAAM,IAAA,EAAK;AAAA,EACrD,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,MAAM,IAAA,EAAK;AAAA,EACrD,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,cAAA,EAAgB,MAAM,cAAA,EAAe;AAAA,EACtE,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,aAAA,EAAe,MAAM,MAAA,EAAO;AAAA,EAC7D,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,MAAM,aAAA,EAAc;AAAA,EAC/D,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,YAAA,EAAc,MAAM,MAAA,EAAO;AAAA,EACzD,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,YAAA,EAAc,MAAM,OAAA;AAC/C,CAAA;;;ACnFO,SAAS,eAAe,IAAA,EAA6B;AAC1D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AAEtB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAClC,MAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,IAChB,CAAA;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA;AACjB,IAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,EAC3B,CAAC,CAAA;AACH;AAKA,eAAsB,mBAAmB,IAAA,EAAoC;AAC3E,EAAA,MAAM,IAAA,GAAO,MAAM,cAAA,CAAe,IAAI,CAAA;AACtC,EAAA,OAAO;AAAA,IACL,UAAU,IAAA,CAAK,IAAA;AAAA,IACf,SAAA,EAAW,KAAK,IAAA,IAAQ,0BAAA;AAAA,IACxB;AAAA,GACF;AACF;AAKO,SAAS,iBAAiB,IAAA,EAA6B;AAC5D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,IAAA,MAAA,CAAO,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,MAAgB,CAAA;AACrD,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA;AACjB,IAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,EAC3B,CAAC,CAAA;AACH;AAoDO,SAAS,iBAAiB,KAAA,EAAuB;AACtD,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,KAAA;AACxB,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AACpC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAClD,EAAA,OAAO,CAAA,EAAG,UAAA,CAAA,CAAY,KAAA,GAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,CAAC,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACvE;AAKO,SAAS,mBAAmB,QAAA,EAA0B;AAC3D,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAChC,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,GAAI,KAAA,CAAM,KAAI,EAAG,WAAA,MAAiB,EAAA,GAAK,EAAA;AAC/D;AAKO,SAAS,cAAc,SAAA,EAA4B;AACxD,EAAA,OAAO,SAAA,CAAU,WAAW,QAAQ,CAAA;AACtC;AC9BA,IAAM,mBAAmB,sBACvBrE,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mDAAA,EAAoD,CAAA;AAG9D,IAAM,UAAkC,CAAC;AAAA,EAC9C,MAAA;AAAA,EACA,YAAY,EAAC;AAAA,EACb,WAAA;AAAA,EACA,qBAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,QAAA,EAAU,YAAY,CAAA,GAAU2E,4BAAS,UAAU,CAAA;AAC1D,EAAA,MAAM,CAAC,iBAAA,EAAmB,qBAAqB,CAAA,GAAUA,4BAAS,KAAK,CAAA;AACvE,EAAA,MAAM,CAAC,eAAA,EAAiB,mBAAmB,CAAA,GAAUA,4BAAS,KAAK,CAAA;AACnE,EAAA,MAAM,CAAC,oBAAA,EAAsB,wBAAwB,CAAA,GAAUA,4BAAS,KAAK,CAAA;AAC7E,EAAA,MAAM,CAAC,mBAAA,EAAqB,uBAAuB,CAAA,GAAUA,4BAAS,KAAK,CAAA;AAC3E,EAAA,MAAM,CAAC,eAAA,EAAiB,mBAAmB,CAAA,GAAUA,4BAAS,KAAK,CAAA;AACnE,EAAA,MAAM,CAAC,UAAA,EAAY,cAAc,CAAA,GAAUA,4BAAS,SAAS,CAAA;AAC7D,EAAA,MAAM,CAAC,eAAA,EAAiB,mBAAmB,CAAA,GAAUA,4BAAS,SAAS,CAAA;AACvE,EAAA,MAAM,CAAC,UAAA,EAAY,cAAc,CAAA,GAAUA,4BAAS,CAAC,CAAA;AACrD,EAAA,MAAM,CAAC,UAAA,EAAY,cAAc,CAAA,GAAUA,4BAAS,CAAC,CAAA;AACrD,EAAA,MAAM,CAAC,YAAA,EAAc,gBAAgB,CAAA,GAAUA,4BAA8C,IAAI,CAAA;AAEjG,EAAA,MAAM,cAAA,GAAuBA,0BAAyB,IAAI,CAAA;AAC1D,EAAA,MAAM,eAAA,GAAwBA,0BAAyB,IAAI,CAAA;AAE3D,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,wBAAwB,MAAc;AAC1C,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,aAAA,CAAc,WAAW,CAAA;AAC9C,IAAA,OAAO,KAAA,CAAM,YAAY,gBAAA,CAAiB,OAAA;AAAA,EAC5C,CAAA;AAGA,EAAA,MAAM,0BAA0B,MAAc;AAC5C,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,aAAA,CAAc,WAAW,CAAA;AAC9C,IAAA,OAAO,KAAA,CAAM,UAAA,IAAc,aAAA,CAAc,CAAC,CAAA,CAAE,KAAA;AAAA,EAC9C,CAAA;AAGA,EAAA,MAAM,yBAAyB,MAAc;AAC3C,IAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW,EAAE,OAAO,CAAA,EAAG,GAAG,OAAO,WAAA;AACrD,IAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW,EAAE,OAAO,CAAA,EAAG,GAAG,OAAO,WAAA;AACrD,IAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW,EAAE,OAAO,CAAA,EAAG,GAAG,OAAO,WAAA;AACrD,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,aAAA;AAC1C,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA,EAAG,OAAO,cAAA;AAC3C,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG,OAAO,WAAA;AACxC,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAAG,OAAO,YAAA;AACzC,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,YAAA;AAC1C,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AAGA,EAAA,MAAM,wBAAA,GAA2B,CAAC,KAAA,KAAkB;AAClD,IAAA,QAAQ,KAAA;AAAO,MACb,KAAK,WAAA;AACH,QAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAC1C,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI;AACvD,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI;AACvD,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI;AACvD,QAAA;AAAA,MACF,KAAK,aAAA;AACH,QAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,gBAAA,GAAmB,GAAA,EAAI;AAC9C,QAAA;AAAA,MACF,KAAK,cAAA;AACH,QAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,iBAAA,GAAoB,GAAA,EAAI;AAC/C,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,cAAA,GAAiB,GAAA,EAAI;AAC5C,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,eAAA,GAAkB,GAAA,EAAI;AAC7C,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,gBAAA,GAAmB,GAAA,EAAI;AAC9C,QAAA;AAAA;AACJ,EACF,CAAA;AAGA,EAAA,MAAM,yBAAA,GAA4B,CAAC,KAAA,KAAkB;AACnD,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,aAAA,CAAc,KAAK,EAAE,GAAA,EAAI;AAAA,EAClD,CAAA;AAGA,EAAA,MAAM,uBAAA,GAA0B,CAAC,KAAA,KAAkB;AACjD,IAAA,MAAM,UAAU,qBAAA,EAAsB;AACtC,IAAA,MAAM,WAAW,IAAA,CAAK,GAAA;AAAA,MACpB,gBAAA,CAAiB,GAAA;AAAA,MACjB,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,GAAA,EAAK,UAAU,KAAK;AAAA,KAChD;AACA,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,cAAA,CAAe,QAAQ,EAAE,GAAA,EAAI;AAAA,EACtD,CAAA;AAGA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,IAAI,QAAA,IAAY,aAAa,UAAA,EAAY;AACvC,MAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,OAAA,CAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA,CAAE,GAAA,EAAI;AACvD,MAAA,YAAA,CAAa,UAAU,CAAA;AACvB,MAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,SAAA,GAAY,GAAA,EAAI;AACvC,IAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,EAC7B,CAAA;AAGA,EAAA,MAAM,wBAAA,GAA2B,CAACnB,MAAAA,KAA2B;AAC3D,IAAA,cAAA,CAAeA,OAAM,GAAG,CAAA;AACxB,IAAA,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,SAASA,MAAAA,CAAM,GAAG,EAAE,GAAA,EAAI;AAAA,EACjD,CAAA;AAGA,EAAA,MAAM,6BAAA,GAAgC,CAACA,MAAAA,KAA2B;AAChE,IAAA,mBAAA,CAAoBA,OAAM,GAAG,CAAA;AAC7B,IAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,YAAA,CAAa,EAAE,KAAA,EAAOA,MAAAA,CAAM,GAAA,EAAK,CAAA,CAAE,GAAA,EAAI;AAAA,EAChE,CAAA;AAGA,EAAA,MAAM,mBAAA,GAAsB,OAAO,CAAA,KAA2C;AAC5E,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAC/B,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC1C,MAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAC5C,MAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,QAAA,CAAS,EAAE,GAAA,EAAK,QAAA,EAAU,CAAA,CAAE,GAAA,EAAI;AAAA,IACzD;AACA,IAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,MAAA,eAAA,CAAgB,QAAQ,KAAA,GAAQ,EAAA;AAAA,IAClC;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,kBAAA,GAAqB,OAAO,CAAA,KAA2C;AAC3E,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAC/B,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,UAAA,GAAa,MAAM,kBAAA,CAAmB,IAAI,CAAA;AAChD,MAAA,qBAAA,CAAsB,CAAC,GAAG,WAAA,EAAa,UAAU,CAAC,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,cAAA,CAAe,QAAQ,KAAA,GAAQ,EAAA;AAAA,IACjC;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,mBAAA,GAAsB,CAAC,IAAA,EAAc,IAAA,KAAiB;AAC1D,IAAA,MAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,WAAA,CAAY,EAAE,IAAA,EAAM,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,CAAA,CAC/C,GAAA,EAAI;AACP,IAAA,mBAAA,CAAoB,KAAK,CAAA;AACzB,IAAA,cAAA,CAAe,CAAC,CAAA;AAChB,IAAA,cAAA,CAAe,CAAC,CAAA;AAChB,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA;AAGA,EAAA,MAAM,wBAAwB,MAAM;AAClC,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,WAAA,GAAc,GAAA,EAAI;AAAA,EAC3C,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,SAAA,GAAY,GAAA,EAAI;AAAA,EACzC,CAAA;AAEA,EAAA,MAAM,wBAAwB,MAAM;AAClC,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,eAAA,GAAkB,GAAA,EAAI;AAAA,EAC/C,CAAA;AAEA,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,cAAA,GAAiB,GAAA,EAAI;AAAA,EAC9C,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,WAAA,GAAc,GAAA,EAAI;AAAA,EAC3C,CAAA;AAGA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,iBAAA,GAAoB,GAAA,EAAI;AAAA,EACjD,CAAA;AAGA,EAAA,MAAM,sBAAA,GAAyB,CAAC,aAAA,KAA0B;AACxD,IAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,cAAA,CAAe,aAAa,EAAE,GAAA,EAAI;AACzD,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAAA,EAC/B,CAAA;AAEA,EAAA,uBACExD,cAAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,KAC9B,QAAA,kBAAAG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,iBAAA;AAAA,QACA,qCAAA;AAAA,QACA,oBAAA;AAAA,QACA,iCAAA;AAAA,QACA,QAAA,IAAY;AAAA,OACd;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAH,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,IAAA,EAAK,CAAE,GAAA,EAAI;AAAA,YACjD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAA,GAAM,IAAA,EAAK;AAAA,YAC7B,OAAA,EAAQ,MAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAAC4E,UAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAC/B;AAAA,wBACA5E,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,IAAA,EAAK,CAAE,GAAA,EAAI;AAAA,YACjD,QAAA,EAAU,CAAC,MAAA,CAAO,GAAA,GAAM,IAAA,EAAK;AAAA,YAC7B,OAAA,EAAQ,MAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAAC6E,UAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAC/B;AAAA,wBAEA7E,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,wBAGlBG,eAAAA,CAAC,MAAA,EAAA,EAAO,OAAO,sBAAA,EAAuB,EAAG,eAAe,wBAAA,EACtD,QAAA,EAAA;AAAA,0BAAAH,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,yBACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,0BACAA,eAAC,aAAA,EAAA,EACE,QAAA,EAAA,WAAA,CAAY,IAAI,CAAC,IAAA,qBAChBA,cAAAA,CAAC,UAAA,EAAA,EAA4B,OAAO,IAAA,CAAK,KAAA,EAAO,WAAU,SAAA,EACvD,QAAA,EAAA,IAAA,CAAK,SADS,IAAA,CAAK,KAEtB,CACD,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAA,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,wBAGlBG,eAAAA,CAAC,MAAA,EAAA,EAAO,OAAO,uBAAA,EAAwB,EAAG,eAAe,yBAAA,EACvD,QAAA,EAAA;AAAA,0BAAAH,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,yBACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,0BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,wBAAc,GAAA,CAAI,CAAC,yBAClBA,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cAEC,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,SAAA,EAAU,SAAA;AAAA,cACV,KAAA,EAAO,EAAE,UAAA,EAAY,IAAA,CAAK,KAAA,EAAM;AAAA,cAE/B,QAAA,EAAA,IAAA,CAAK;AAAA,aAAA;AAAA,YALD,IAAA,CAAK;AAAA,WAOb,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,cAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAM,uBAAA,CAAwB,EAAsB,CAAA;AAAA,cAC7D,OAAA,EAAQ,oBAAA;AAAA,cAER,QAAA,kBAAAA,cAAAA,CAAC8E,UAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,WAC/B;AAAA,0BACA9E,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EACb,iCAAsB,EACzB,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAM,uBAAA,CAAwB,gBAAA,CAAiB,IAAI,CAAA;AAAA,cAC5D,OAAA,EAAQ,oBAAA;AAAA,cAER,QAAA,kBAAAA,cAAAA,CAAC+E,SAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC9B,SAAA,EACF,CAAA;AAAA,wBAEA/E,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,wBAGlBA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,GAAA,EAAI;AAAA,YACvD,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAAA,YACjC,OAAA,EAAQ,MAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACgF,SAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAC9B;AAAA,wBACAhF,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,YAAA,EAAa,CAAE,GAAA,EAAI;AAAA,YACzD,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,YACnC,OAAA,EAAQ,QAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACiF,WAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAChC;AAAA,wBACAjF,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,eAAA,EAAgB,CAAE,GAAA,EAAI;AAAA,YAC5D,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA;AAAA,YACtC,OAAA,EAAQ,WAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACkF,cAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACnC;AAAA,wBACAlF,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,YAAA,EAAa,CAAE,GAAA,EAAI;AAAA,YACzD,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,YACnC,OAAA,EAAQ,eAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACmF,kBAAA,EAAA,EAAgB,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACvC;AAAA,wBACAnF,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,eAAA,EAAgB,CAAE,GAAA,EAAI;AAAA,YAC5D,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA;AAAA,YACtC,OAAA,EAAQ,WAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACoF,cAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACnC;AAAA,wBACApF,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,iBAAA,EAAkB,CAAE,GAAA,EAAI;AAAA,YAC9D,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,YACxC,OAAA,EAAQ,aAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACqF,gBAAA,EAAA,EAAc,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACrC;AAAA,wBAEArF,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,wBAGlBG,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,iBAAA,EAAmB,cAAc,qBAAA,EAC9C,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,kBAAe,OAAA,EAAO,IAAA,EACrB,0BAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,WAAW,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG,OAAA,EAAQ,QACzD,QAAA,kBAAAA,cAAAA,CAACsF,aAAO,SAAA,EAAU,SAAA,EAAU,GAC9B,CAAA,EACF,CAAA;AAAA,0BACAtF,eAAC,cAAA,EAAA,EAAe,SAAA,EAAU,YACxB,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,4BAAAH,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,QAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBAC5C,WAAA,EAAY,qBAAA;AAAA,gBACZ,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,4BACAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,gBAAC,MAAA,EAAA,EAAO,IAAA,EAAK,MAAK,OAAA,EAAS,eAAA,EAAiB,WAAU,QAAA,EACnD,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,QAAA,GAAW,KAAA;AAAA,gBAAM;AAAA,eAAA,EAC9C,CAAA;AAAA,cACC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,oBACrBH,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAQ,aAAA;AAAA,kBACR,OAAA,EAAS,kBAAA;AAAA,kBACV,QAAA,EAAA;AAAA;AAAA;AAED,aAAA,EAEJ;AAAA,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,EAAc,CAAE,UAAA,EAAW,CAAE,GAAA,EAAI;AAAA,YACvE,OAAA,EAAQ,kBAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACuF,qBAAA,EAAA,EAAmB,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAC1C;AAAA,wBAEAvF,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,wBAGlBG,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,eAAA,EAAiB,cAAc,mBAAA,EAC5C,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAQ,YAAA,EACrB,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAACwF,YAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BAC/BxF,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,+BAAA;AAAA,gBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,UAAA;AAAW;AAAA;AACvC,WAAA,EACF,GACF,CAAA,EACF,CAAA;AAAA,0BACAA,cAAAA,CAAC,cAAA,EAAA,EAAe,WAAU,YAAA,EAAa,KAAA,EAAM,SAC3C,QAAA,kBAAAA,cAAAA;AAAA,YAACqE,YAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,UAAA;AAAA,cACP,QAAA,EAAU,wBAAA;AAAA,cACV,YAAA,EAAc;AAAA,gBACZ,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBACvD,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBACvD,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW;AAAA;AACzD;AAAA,WACF,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAlE,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,oBAAA,EAAsB,cAAc,wBAAA,EACjD,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAQ,iBAAA,EACrB,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAACyF,gBAAA,EAAA,EAAc,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BACnCzF,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,+BAAA;AAAA,gBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,eAAA;AAAgB;AAAA;AAC5C,WAAA,EACF,GACF,CAAA,EACF,CAAA;AAAA,0BACAA,cAAAA,CAAC,cAAA,EAAA,EAAe,WAAU,YAAA,EAAa,KAAA,EAAM,SAC3C,QAAA,kBAAAA,cAAAA;AAAA,YAACqE,YAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,eAAA;AAAA,cACP,QAAA,EAAU,6BAAA;AAAA,cACV,YAAA,EAAc;AAAA,gBACZ,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBACvD,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW,SAAA;AAAA,gBAAW;AAAA;AACzD;AAAA,WACF,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAEArE,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,wBAGlBA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,CAAa,MAAM,CAAA,CAAE,GAAA,EAAI;AAAA,YAC/D,WAAW,MAAA,CAAO,QAAA,CAAS,EAAE,SAAA,EAAW,QAAQ,CAAA;AAAA,YAChD,OAAA,EAAQ,YAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAAC0F,cAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACnC;AAAA,wBACA1F,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,CAAa,QAAQ,CAAA,CAAE,GAAA,EAAI;AAAA,YACjE,WAAW,MAAA,CAAO,QAAA,CAAS,EAAE,SAAA,EAAW,UAAU,CAAA;AAAA,YAClD,OAAA,EAAQ,cAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAAC2F,gBAAA,EAAA,EAAc,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACrC;AAAA,wBACA3F,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,CAAa,OAAO,CAAA,CAAE,GAAA,EAAI;AAAA,YAChE,WAAW,MAAA,CAAO,QAAA,CAAS,EAAE,SAAA,EAAW,SAAS,CAAA;AAAA,YACjD,OAAA,EAAQ,aAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAAC4F,eAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACpC;AAAA,wBACA5F,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,CAAa,SAAS,CAAA,CAAE,GAAA,EAAI;AAAA,YAClE,WAAW,MAAA,CAAO,QAAA,CAAS,EAAE,SAAA,EAAW,WAAW,CAAA;AAAA,YACnD,OAAA,EAAQ,SAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAAC6F,iBAAA,EAAA,EAAe,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACtC;AAAA,wBAEA7F,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,wBAGlBA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,gBAAA,EAAiB,CAAE,GAAA,EAAI;AAAA,YAC7D,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA;AAAA,YACvC,OAAA,EAAQ,aAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAAC8F,SAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAC9B;AAAA,wBACA9F,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,iBAAA,EAAkB,CAAE,GAAA,EAAI;AAAA,YAC9D,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,YACxC,OAAA,EAAQ,eAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAAC+F,gBAAA,EAAA,EAAc,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACrC;AAAA,wBACA/F,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,cAAA,EAAe,CAAE,GAAA,EAAI;AAAA,YAC3D,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA;AAAA,YACrC,OAAA,EAAQ,WAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACgG,eAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACpC;AAAA,wBAEAhG,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,wBAGlBA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AACb,cAAA,IAAI,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG;AAC/B,gBAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,YAAA,CAAa,UAAU,EAAE,GAAA,EAAI;AAAA,cACtD,CAAA,MAAA,IAAW,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG;AACtC,gBAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,YAAA,CAAa,UAAU,EAAE,GAAA,EAAI;AAAA,cACtD;AAAA,YACF,CAAA;AAAA,YACA,QAAA,EAAU,CAAC,MAAA,CAAO,GAAA,EAAI,CAAE,YAAA,CAAa,UAAU,CAAA,IAAK,CAAC,MAAA,CAAO,GAAA,EAAI,CAAE,aAAa,UAAU,CAAA;AAAA,YACzF,OAAA,EAAQ,iBAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACiG,mBAAA,EAAA,EAAiB,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACxC;AAAA,wBACAjG,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AACb,cAAA,IAAI,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG;AAC/B,gBAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,YAAA,CAAa,UAAU,EAAE,GAAA,EAAI;AAAA,cACtD,CAAA,MAAA,IAAW,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG;AACtC,gBAAA,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,YAAA,CAAa,UAAU,EAAE,GAAA,EAAI;AAAA,cACtD;AAAA,YACF,CAAA;AAAA,YACA,QAAA,EAAU,CAAC,MAAA,CAAO,GAAA,EAAI,CAAE,YAAA,CAAa,UAAU,CAAA,IAAK,CAAC,MAAA,CAAO,GAAA,EAAI,CAAE,aAAa,UAAU,CAAA;AAAA,YACzF,OAAA,EAAQ,iBAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACkG,mBAAA,EAAA,EAAiB,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACxC;AAAA,wBAEAlG,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,wBAGlBA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,gBAAA;AAAA,YACT,OAAA,EAAQ,iBAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACmG,sBAAA,EAAA,EAAoB,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAC3C;AAAA,wBAGAnG,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,eAAA,CAAgB,OAAA,EAAS,KAAA,EAAM;AAAA,YAC9C,OAAA,EAAQ,cAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAACoG,UAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SAC/B;AAAA,wBAGAjG,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,eAAA,EAAiB,cAAc,mBAAA,EAC5C,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,cAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA;AAAA,cAClC,OAAA,EAAQ,OAAA;AAAA,cAER,QAAA,kBAAAA,cAAAA,CAACqG,UAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,WAC/B,EACF,CAAA;AAAA,0BACArG,eAAC,cAAA,EAAA,EAAe,SAAA,EAAU,cAAa,KAAA,EAAM,OAAA,EAC1C,QAAA,EAAA,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA;AAAA;AAAA,4BAEtBG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,8BAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EAA2B,QAAA,EAAA,kBAAA,EAAgB,CAAA;AAAA,8BAC1DG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,eAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,IAAA;AAAA,oBACL,SAAA,EAAU,2BAAA;AAAA,oBACV,OAAA,EAAS,qBAAA;AAAA,oBAET,QAAA,EAAA;AAAA,sCAAAH,cAAAA,CAACsG,mBAAA,EAAA,EAAiB,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,sBAAE;AAAA;AAAA;AAAA,iBAE/C;AAAA,gCACAnG,eAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,IAAA;AAAA,oBACL,SAAA,EAAU,2BAAA;AAAA,oBACV,OAAA,EAAS,oBAAA;AAAA,oBAET,QAAA,EAAA;AAAA,sCAAAH,cAAAA,CAACsG,mBAAA,EAAA,EAAiB,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,sBAAE;AAAA;AAAA;AAAA,iBAE/C;AAAA,gCACAnG,eAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,IAAA;AAAA,oBACL,SAAA,EAAU,2BAAA;AAAA,oBACV,OAAA,EAAS,qBAAA;AAAA,oBAET,QAAA,EAAA;AAAA,sCAAAH,cAAAA,CAACuG,sBAAA,EAAA,EAAoB,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,sBAAE;AAAA;AAAA;AAAA,iBAElD;AAAA,gCACApG,eAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,IAAA;AAAA,oBACL,SAAA,EAAU,2BAAA;AAAA,oBACV,OAAA,EAAS,oBAAA;AAAA,oBAET,QAAA,EAAA;AAAA,sCAAAH,cAAAA,CAACuG,sBAAA,EAAA,EAAoB,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,sBAAE;AAAA;AAAA;AAAA,iBAElD;AAAA,gCACApG,eAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,IAAA;AAAA,oBACL,SAAA,EAAU,mEAAA;AAAA,oBACV,OAAA,EAAS,iBAAA;AAAA,oBAET,QAAA,EAAA;AAAA,sCAAAH,cAAAA,CAACwG,WAAA,EAAA,EAAS,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,sBAAE;AAAA;AAAA;AAAA,iBAEvC;AAAA,gCACArG,eAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,IAAA;AAAA,oBACL,SAAA,EAAU,mEAAA;AAAA,oBACV,OAAA,EAAS,iBAAA;AAAA,oBAET,QAAA,EAAA;AAAA,sCAAAH,cAAAA,CAACwG,WAAA,EAAA,EAAS,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,sBAAE;AAAA;AAAA;AAAA;AAEvC,eAAA,EACF,CAAA;AAAA,8BACArG,eAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,aAAA;AAAA,kBACR,IAAA,EAAK,IAAA;AAAA,kBACL,SAAA,EAAU,iCAAA;AAAA,kBACV,OAAA,EAAS,mBAAA;AAAA,kBAET,QAAA,EAAA;AAAA,oCAAAH,cAAAA,CAACwG,WAAA,EAAA,EAAS,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,oBAAE;AAAA;AAAA;AAAA;AAEvC,aAAA,EACF;AAAA;AAAA;AAAA,4BAGArG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,8BAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EAA2B,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,8BAEtDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBACZ,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,OAAA,qBACjCA,cAAAA,CAAC,KAAA,EAAA,EAAkB,SAAA,EAAU,cAAA,EAC1B,QAAA,EAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,CAACyG,EAAAA,EAAG,4BACjCzG,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAW,EAAA;AAAA,oBACT,4DAAA;AAAA,oBACA,gBAAgB,OAAA,GAAU,YAAA,CAAa,OAAO,OAAA,GAAU,YAAA,CAAa,MACjE,2BAAA,GACA;AAAA,mBACN;AAAA,kBACA,YAAA,EAAc,MAAM,gBAAA,CAAiB,EAAE,GAAA,EAAK,UAAU,CAAA,EAAG,GAAA,EAAK,OAAA,GAAU,CAAA,EAAG,CAAA;AAAA,kBAC3E,YAAA,EAAc,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,kBACzC,SAAS,MAAM,mBAAA,CAAoB,OAAA,GAAU,CAAA,EAAG,UAAU,CAAC;AAAA,iBAAA;AAAA,gBATtD;AAAA,eAWR,CAAA,EAAA,EAdO,OAeV,CACD,CAAA,EACH,CAAA;AAAA,8BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACZ,QAAA,EAAA,YAAA,GAAe,CAAA,EAAG,YAAA,CAAa,GAAG,CAAA,GAAA,EAAM,YAAA,CAAa,GAAG,KAAK,aAAA,EAChE,CAAA;AAAA,8BACAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,gCAC/DG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,kCAAAH,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,GAAA,EAAK,CAAA;AAAA,sBACL,GAAA,EAAK,EAAA;AAAA,sBACL,KAAA,EAAO,UAAA;AAAA,sBACP,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,SAAS,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,CAAC,CAAC,CAAA;AAAA,sBACxF,SAAA,EAAU;AAAA;AAAA,mBACZ;AAAA,kCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,kCAC3BA,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,GAAA,EAAK,CAAA;AAAA,sBACL,GAAA,EAAK,EAAA;AAAA,sBACL,KAAA,EAAO,UAAA;AAAA,sBACP,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,SAAS,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,CAAC,CAAC,CAAA;AAAA,sBACxF,SAAA,EAAU;AAAA;AAAA,mBACZ;AAAA,kCACAG,eAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,IAAA;AAAA,sBACL,SAAA,EAAU,aAAA;AAAA,sBACV,OAAA,EAAS,MAAM,mBAAA,CAAoB,UAAA,EAAY,UAAU,CAAA;AAAA,sBAEzD,QAAA,EAAA;AAAA,wCAAAH,cAAAA,CAAC0G,YAAA,EAAA,EAAU,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,wBAAE;AAAA;AAAA;AAAA;AAExC,iBAAA,EACF;AAAA,eAAA,EACF;AAAA,aAAA,EACF;AAAA,WAAA,EAEJ;AAAA,SAAA,EACF,CAAA;AAAA,wBAEA1G,eAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,QAGjB,SAAA,CAAU,SAAS,CAAA,oBAClBG,gBAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,mBAAA,EAAqB,YAAA,EAAc,uBAAA,EAChD,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,0BAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAQ,iBAAA,EACrB,0BAAAA,cAAAA,CAAC2G,aAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,GAClC,CAAA,EACF,CAAA;AAAA,0BACA3G,eAAC,cAAA,EAAA,EAAe,SAAA,EAAU,YAAW,KAAA,EAAM,OAAA,EACzC,QAAA,kBAAAG,eAAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAAY,qBAAA,EAAsB,WAAU,aAAA,EAAc,CAAA;AAAA,4BACxEG,gBAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAH,cAAAA,CAAC,gBAAa,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,8BACjCA,cAAAA,CAAC,YAAA,EAAA,EACE,oBAAU,GAAA,CAAI,CAAC,6BACdA,cAAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBAEC,OAAO,QAAA,CAAS,IAAA;AAAA,kBAChB,QAAA,EAAU,MAAM,sBAAA,CAAuB,QAAA,CAAS,IAAI,CAAA;AAAA,kBACpD,SAAA,EAAU,SAAA;AAAA,kBAEV,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,oCAAAH,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAA,CAAA,EAAA,EAAK,QAAA,CAAS,IAAI,CAAA,EAAA,CAAA,EAAK,CAAA;AAAA,oBACrD,QAAA,CAAS,+BACRA,cAAAA,CAAC,UAAK,SAAA,EAAU,mCAAA,EACb,mBAAS,WAAA,EACZ;AAAA,mBAAA,EAEJ;AAAA,iBAAA;AAAA,gBAZK,QAAA,CAAS;AAAA,eAcjB,CAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAIFA,cAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,cAAA,CAAe,OAAA,EAAS,KAAA,EAAM;AAAA,YAC7C,OAAA,EAAQ,aAAA;AAAA,YAER,QAAA,kBAAAA,cAAAA,CAAC4G,cAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACnC;AAAA,wBAGA5G,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,cAAA;AAAA,YACL,IAAA,EAAK,MAAA;AAAA,YACL,SAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,eAAA;AAAA,YACL,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,SAAA;AAAA,YACP,SAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,GACF,EACF,CAAA;AAEJ,CAAA;AC3yBA,IAAM,aAAA,GAAgB,CAAC,SAAA,EAAmB,QAAA,KAAqB;AAC7D,EAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,IAAA,uBAAOA,cAAAA,CAACoG,UAAAA,EAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,GAAA,GAAM,mBAAmB,QAAQ,CAAA;AACvC,EAAA,IAAI,CAAC,OAAO,IAAA,EAAM,KAAA,EAAO,QAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AACrD,IAAA,uBAAOpG,cAAAA,CAAC6G,aAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,CAAC,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AACnE,IAAA,uBAAO7G,cAAAA,CAAC8G,aAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,EACzC;AAEA,EAAA,uBAAO9G,cAAAA,CAAC+G,SAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU,CAAA;AACrC,CAAA;AAKA,IAAM,eAAA,GAAkB,CAAC,MAAA,KAA2B;AAElD,EAAA,MAAM,OAAA,GAAA,CAAW,OAAO,KAAA,CAAM,KAAK,KAAK,CAAC,EAAE,CAAA,EAAG,CAAC,CAAA,CAAE,MAAA;AACjD,EAAA,OAAO,KAAK,KAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,GAAK,CAAC,CAAA,GAAI,OAAA;AAC/C,CAAA;AAEO,IAAM,kBAAkD,CAAC;AAAA,EAC9D,WAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAM;AACJ,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE/G,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,qBAAA;AAAA,QACA,0BAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,EAAY,KAAA,KAAU;AACtC,QAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,UAAA,CAAW,IAAI,CAAA;AAC5C,QAAA,MAAM,QAAA,GAAW,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AAEnD,QAAA,uBACEG,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW,EAAA;AAAA,cACT,yBAAA;AAAA,cACA,yBAAA;AAAA,cACA,wBAAA;AAAA,cACA,oCAAA;AAAA,cACA;AAAA,aACF;AAAA,YAGC,QAAA,EAAA;AAAA,cAAA,QAAA,mBACCH,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,KAAK,CAAA,KAAA,EAAQ,UAAA,CAAW,SAAS,CAAA,QAAA,EAAW,WAAW,IAAI,CAAA,CAAA;AAAA,kBAC3D,KAAK,UAAA,CAAW,QAAA;AAAA,kBAChB,SAAA,EAAU;AAAA;AAAA,eACZ,mBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EACZ,QAAA,EAAA,aAAA,CAAc,UAAA,CAAW,SAAA,EAAW,UAAA,CAAW,QAAQ,CAAA,EAC1D,CAAA;AAAA,8BAIFG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EACb,qBAAW,QAAA,EACd,CAAA;AAAA,gCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mCAAA,EACb,QAAA,EAAA,gBAAA,CAAiB,IAAI,CAAA,EACxB;AAAA,eAAA,EACF,CAAA;AAAA,8BAGAA,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,SAAA,EAAU,cAAA;AAAA,kBACV,OAAA,EAAS,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,kBAC9B,QAAA;AAAA,kBAEA,QAAA,kBAAAA,cAAAA,CAACgH,MAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC3B;AAAA,WAAA;AAAA,UAzCK,CAAA,EAAG,UAAA,CAAW,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,SA0CtC;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ,CAAA;ACtFO,IAAM,iBAAA,GAAoBC,eAAU,MAAA,CAAwB;AAAA,EACjE,IAAA,EAAM,gBAAA;AAAA,EAEN,UAAA,GAAa;AACX,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,CAAC,WAAW,CAAA;AAAA,MACnB,YAAA,EAAc,EAAA;AAAA,MACd,QAAA,EAAU,CAAA;AAAA,MACV,QAAA,EAAU,EAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACR;AAAA,EACF,CAAA;AAAA,EAEA,mBAAA,GAAsB;AACpB,IAAA,OAAO;AAAA,MACL;AAAA,QACE,KAAA,EAAO,KAAK,OAAA,CAAQ,KAAA;AAAA,QACpB,UAAA,EAAY;AAAA,UACV,QAAA,EAAU;AAAA,YACR,OAAA,EAAS,IAAA;AAAA,YACT,SAAA,EAAW,CAAC,OAAA,KAAY;AACtB,cAAA,MAAM,OAAO,OAAA,CAAQ,KAAA,CAAM,QAAA,EAAU,OAAA,CAAQ,WAAW,EAAE,CAAA;AAC1D,cAAA,OAAO,IAAA,GAAO,QAAA,CAAS,IAAA,EAAM,EAAE,CAAA,GAAI,IAAA;AAAA,YACrC,CAAA;AAAA,YACA,UAAA,EAAY,CAAC,UAAA,KAAe;AAC1B,cAAA,IAAI,CAAC,WAAW,QAAA,EAAU;AACxB,gBAAA,OAAO,EAAC;AAAA,cACV;AACA,cAAA,OAAO;AAAA,gBACL,KAAA,EAAO,CAAA,WAAA,EAAc,UAAA,CAAW,QAAQ,CAAA,EAAA;AAAA,eAC1C;AAAA,YACF;AAAA;AACF;AACF;AACF,KACF;AAAA,EACF,CAAA;AAAA,EAEA,WAAA,GAAc;AACZ,IAAA,OAAO;AAAA,MACL,gBACE,CAAC,IAAA,KACD,CAAC,EAAE,OAAM,KAAM;AACb,QAAA,MAAM,cAAc,IAAA,CAAK,GAAA;AAAA,UACvB,KAAK,OAAA,CAAQ,QAAA;AAAA,UACb,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,UAAU,IAAI;AAAA,SACtC;AACA,QAAA,OAAO,KAAA,GAAQ,OAAA,CAAQ,WAAA,EAAa,EAAE,QAAA,EAAU,WAAA,EAAa,CAAA,CAAE,GAAA,EAAI;AAAA,MACrE,CAAA;AAAA,MACF,gBAAA,EACE,MACA,CAAC,EAAE,OAAM,KAAM;AACb,QAAA,OAAO,KAAA,EAAM,CACV,OAAA,CAAQ,WAAA,EAAa,EAAE,QAAA,EAAU,IAAA,EAAM,CAAA,CACvC,oBAAA,EAAqB,CACrB,GAAA,EAAI;AAAA,MACT;AAAA,KACJ;AAAA,EACF;AACF,CAAC,CAAA;AC7ED,IAAM,YAAA,GAAwC,CAAC,EAAE,IAAA,EAAM,UAAS,KAAM;AACpE,EAAA,uBACEjH,cAAAA,CAACkH,qBAAA,EAAA,EAAgB,IAAG,MAAA,EAAO,SAAA,EAAU,UACnC,QAAA,kBAAAlH,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,uBAAA;AAAA,QACA,0BAAA;AAAA,QACA,oBAAA;AAAA,QACA,cAAA;AAAA,QACA,qBAAA;AAAA,QACA,4BAAA;AAAA,QACA,0BAAA;AAAA,QACA,4BAAA;AAAA,QACA,QAAA,IAAY;AAAA,OACd;AAAA,MACA,eAAA,EAAiB,KAAA;AAAA,MACjB,eAAA,EAAe,KAAK,KAAA,CAAM,IAAA;AAAA,MAEzB,QAAA,EAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAA;AAAA;AAAA,GACvB,EACF,CAAA;AAEJ,CAAA;AAaO,IAAM,iBAAA,GAAoBmH,UAAK,MAAA,CAAO;AAAA,EAC3C,IAAA,EAAM,UAAA;AAAA,EAEN,KAAA,EAAO,QAAA;AAAA,EAEP,MAAA,EAAQ,IAAA;AAAA;AAAA,EAGR,IAAA,EAAM,IAAA;AAAA;AAAA,EAGN,SAAA,EAAW,IAAA;AAAA;AAAA,EAGX,UAAA,EAAY,IAAA;AAAA,EAEZ,aAAA,GAAgB;AACd,IAAA,OAAO;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,eAAe,CAAA;AAAA,QAC5D,UAAA,EAAY,CAAC,UAAA,MAAgB;AAAA,UAC3B,iBAAiB,UAAA,CAAW;AAAA,SAC9B;AAAA;AACF,KACF;AAAA,EACF,CAAA;AAAA,EAEA,SAAA,GAAY;AACV,IAAA,OAAO;AAAA,MACL;AAAA,QACE,GAAA,EAAK;AAAA;AACP,KACF;AAAA,EACF,CAAA;AAAA,EAEA,UAAA,CAAW,EAAE,cAAA,EAAe,EAAG;AAC7B,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACAC,qBAAgB,cAAA,EAAgB;AAAA,QAC9B,KAAA,EAAO,uBAAA;AAAA,QACP,eAAA,EAAiB;AAAA,OAClB,CAAA;AAAA,MACD,CAAA,EAAA,EAAK,cAAA,CAAe,eAAe,CAAC,CAAA,EAAA;AAAA,KACtC;AAAA,EACF,CAAA;AAAA,EAEA,UAAA,CAAW,EAAE,IAAA,EAAK,EAAG;AACnB,IAAA,OAAO,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAA,CAAA;AAAA,EAC7B,CAAA;AAAA,EAEA,WAAA,GAAc;AACZ,IAAA,OAAOC,4BAAsB,YAAY,CAAA;AAAA,EAC3C,CAAA;AAAA,EAEA,WAAA,GAAc;AACZ,IAAA,OAAO;AAAA,MACL,gBACE,CAAC,IAAA,KACD,CAAC,EAAE,UAAS,KAAM;AAChB,QAAA,OAAO,SAAS,aAAA,CAAc;AAAA,UAC5B,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,KAAA,EAAO,EAAE,IAAA;AAAK,SACf,CAAA;AAAA,MACH;AAAA,KACJ;AAAA,EACF,CAAA;AAAA;AAAA,EAGA,oBAAA,GAAuB;AACrB,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,MACT,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAC,EAAE,EAAA,EAAI,KAAA,EAAM,KAAM;AAC9C,QAAA,IAAI,WAAA,GAAc,KAAA;AAClB,QAAA,MAAM,EAAE,WAAU,GAAI,KAAA;AACtB,QAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,SAAA;AAE1B,QAAA,IAAI,CAAC,KAAA,EAAO;AACV,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,KAAA,CAAM,IAAI,YAAA,CAAa,MAAA,GAAS,GAAG,MAAA,EAAQ,CAAC,MAAM,GAAA,KAAQ;AACxD,UAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM;AAChC,YAAA,WAAA,GAAc,IAAA;AACd,YAAA,EAAA,CAAG,UAAA,CAAW,EAAA,EAAI,GAAA,EAAK,GAAA,GAAM,KAAK,QAAQ,CAAA;AAC1C,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,QACF,CAAC,CAAA;AAED,QAAA,OAAO,WAAA;AAAA,MACT,CAAC;AAAA,KACL;AAAA,EACF;AACF,CAAC,CAAA;ACpID,IAAM,IAAA,GAAqBC,wBAAA,CAAA;AAE3B,IAAM,QAAA,GAAiBC,8BAGrB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BvH,cAAAA;AAAA,EAAesH,wBAAA,CAAA,IAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,2FAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,QAAA,CAAS,cAA4BA,wBAAA,CAAA,IAAA,CAAK,WAAA;AAE1C,IAAM,WAAA,GAAoBC,8BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BvH,cAAAA;AAAA,EAAesH,wBAAA,CAAA,OAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,gYAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA4BA,wBAAA,CAAA,OAAA,CAAQ,WAAA;AAEhD,IAAM,WAAA,GAAoBC,8BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BvH,cAAAA;AAAA,EAAesH,wBAAA,CAAA,OAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,iIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA4BA,wBAAA,CAAA,OAAA,CAAQ,WAAA;ACNhD,SAAS,WAAA,CACP,MACA,IAAA,EACqB;AACrB,EAAA,IAAI,UAAA,GAAmD,IAAA;AAEvD,EAAA,OAAO,CAAC,MAAA,KAAc;AACpB,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,YAAA,CAAa,UAAU,CAAA;AAAA,IACzB;AACA,IAAA,UAAA,GAAa,WAAW,MAAM;AAC5B,MAAA,IAAA,CAAK,MAAM,CAAA;AAAA,IACb,GAAG,IAAI,CAAA;AAAA,EACT,CAAA;AACF;AAKO,IAAM,YAAsC,CAAC;AAAA,EAClD,IAAA,GAAO,EAAA;AAAA,EACP,WAAA,EAAa,sBAAsB,EAAC;AAAA,EACpC,YAAY,EAAC;AAAA,EACb,SAAA;AAAA,EACA,WAAA,GAAc,iBAAA;AAAA,EACd,UAAA,GAAa,OAAA;AAAA,EACb,UAAA,GAAa,OAAA;AAAA,EACb,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,kBAAA,GAAqB;AACvB,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,WAAA,EAAa,eAAe,CAAA,GAAUE,kBAAA,CAAA,QAAA;AAAA,IAC3C;AAAA,GACF;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,cAAc,CAAA,GAAUA,4BAA6C,MAAM,CAAA;AAG9F,EAAA,MAAM,eAAe,UAAA,KAAe,MAAA;AAGpC,EAAA,MAAM,eAAA,GAAwBA,0BAAO,WAAW,CAAA;AAChD,EAAA,eAAA,CAAgB,OAAA,GAAU,WAAA;AAG1B,EAAA,MAAM,mBAAA,GAA4BA,kBAAA,CAAA,OAAA;AAAA,IAChC,MACE,WAAA,CAAuB,CAAC,MAAA,KAAsB;AAC5C,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,SAAA,CAAU,MAAM,CAAA;AAAA,MAClB;AAAA,IACF,GAAG,GAAG,CAAA;AAAA,IACR,CAAC,SAAS;AAAA,GACZ;AAGA,EAAA,MAAM,SAASC,eAAA,CAAU;AAAA,IACvB,UAAA,EAAY;AAAA,MACVC,4BAAW,SAAA,CAAU;AAAA,QACnB,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC;AAAA;AAClB,OACD,CAAA;AAAA,MACDC,4BAAA;AAAA,MACAC,2BAAA;AAAA,MACA,iBAAA;AAAA,MACAC,0BAAA;AAAA,MACAC,0BAAA;AAAA,MACAC,4BAAA;AAAA,MACAC,sBAAK,SAAA,CAAU;AAAA,QACb,WAAA,EAAa,KAAA;AAAA,QACb,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO;AAAA;AACT,OACD,CAAA;AAAA,MACDC,2BAAU,SAAA,CAAU;AAAA,QAClB,KAAA,EAAO,CAAC,SAAA,EAAW,WAAW;AAAA,OAC/B,CAAA;AAAA,MACDC,2BAAU,SAAA,CAAU;AAAA,QAClB,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,MACDC,sBAAA;AAAA,MACAC,uBAAM,SAAA,CAAU;AAAA,QACd,MAAA,EAAQ,IAAA;AAAA,QACR,WAAA,EAAa,IAAA;AAAA,QACb,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO;AAAA;AACT,OACD,CAAA;AAAA,MACDC,6BAAY,SAAA,CAAU;AAAA,QACpB;AAAA,OACD,CAAA;AAAA,MACDC,+BAAA;AAAA,MACAC,qBAAM,SAAA,CAAU;AAAA,QACd,SAAA,EAAW,IAAA;AAAA,QACX,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO;AAAA;AACT,OACD,CAAA;AAAA,MACDC,yBAAA;AAAA,MACAC,2BAAU,SAAA,CAAU;AAAA,QAClB,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO;AAAA;AACT,OACD,CAAA;AAAA,MACDC,6BAAY,SAAA,CAAU;AAAA,QACpB,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO;AAAA;AACT,OACD,CAAA;AAAA,MACDC,0BAAS,SAAA,CAAU;AAAA,QACjB,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO;AAAA;AACT,OACD,CAAA;AAAA,MACDC,0BAAS,SAAA,CAAU;AAAA,QACjB,MAAA,EAAQ,IAAA;AAAA,QACR,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO;AAAA;AACT,OACD,CAAA;AAAA,MACD;AAAA,KACF;AAAA,IACA,OAAA,EAAS,IAAA;AAAA,IACT,UAAU,CAAC,QAAA;AAAA,IACX,iBAAA,EAAmB,KAAA;AAAA;AAAA,IACnB,WAAA,EAAa;AAAA,MACX,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,EAAA;AAAA,UACL,gBAAA;AAAA,UACA,6CAAA;AAAA,UACA,wBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,CAAA,YAAA,EAAe,UAAU,CAAA,cAAA,EAAiB,UAAU,CAAA;AAAA;AAC7D,KACF;AAAA,IACA,QAAA,EAAU,CAAC,EAAE,MAAA,EAAAC,SAAO,KAAM;AACxB,MAAA,MAAM,MAAA,GAAoB;AAAA,QACxB,IAAA,EAAMA,QAAO,OAAA,EAAQ;AAAA,QACrB,UAAA,EAAYA,QAAO,OAAA,EAAQ;AAAA,QAC3B,aAAa,eAAA,CAAgB;AAAA,OAC/B;AACA,MAAA,mBAAA,CAAoB,MAAM,CAAA;AAAA,IAC5B;AAAA,GACD,CAAA;AAGD,EAAMrB,6BAAU,MAAM;AACpB,IAAA,IAAI,MAAA,IAAU,SAAS,MAAA,EAAW;AAChC,MAAA,MAAM,YAAA,GAAe,OAAO,OAAA,EAAQ;AAEpC,MAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,CAAC,MAAA,CAAO,SAAA,EAAW;AAC9C,QAAA,MAAA,CAAO,SAAS,UAAA,CAAW,IAAA,EAAM,EAAE,UAAA,EAAY,OAAO,CAAA;AAAA,MACxD;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,MAAM,CAAC,CAAA;AAGjB,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAGrB,EAAA,MAAM,0BAAA,GAAmCA,0BAAO,KAAK,CAAA;AACrD,EAAA,MAAM,4BAAA,GAAqCA,0BAAO,mBAAmB,CAAA;AAGrE,EAAMA,6BAAU,MAAM;AAEpB,IAAA,IAAI,IAAA,CAAK,UAAU,mBAAmB,CAAA,KAAM,KAAK,SAAA,CAAU,4BAAA,CAA6B,OAAO,CAAA,EAAG;AAChG,MAAA,4BAAA,CAA6B,OAAA,GAAU,mBAAA;AACvC,MAAA,0BAAA,CAA2B,OAAA,GAAU,IAAA;AACrC,MAAA,eAAA,CAAgB,mBAAmB,CAAA;AAAA,IACrC;AAAA,EACF,CAAA,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAGxB,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,2BAA2B,OAAA,EAAS;AACtC,MAAA,0BAAA,CAA2B,OAAA,GAAU,KAAA;AACrC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,MAAM,MAAA,GAAoB;AAAA,QACxB,IAAA,EAAM,OAAO,OAAA,EAAQ;AAAA,QACrB,UAAA,EAAY,OAAO,OAAA,EAAQ;AAAA,QAC3B;AAAA,OACF;AACA,MAAA,SAAA,CAAU,MAAM,CAAA;AAAA,IAClB;AAAA,EAEF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAA,MAAM,wBAAA,GAA2B,CAAC,KAAA,KAAkB;AAClD,IAAA,eAAA,CAAgB,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAAA,EAC9D,CAAA;AAGA,EAAA,MAAM,yBAAA,GAA4B,CAAC,eAAA,KAAqC;AACtE,IAAA,eAAA,CAAgB,eAAe,CAAA;AAAA,EACjC,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc,CAAC,QAAA,KAA6B;AAChD,IAAA,IAAI,SAAA,GAAY,EAAA;AAChB,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,MAAM,OAAO,QAAA,CAAS,KAAA,CAAM,YAAY,CAAA,CAAE,OAAO,OAAO,CAAA;AAExD,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AACxB,QAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,GAAS,CAAC,CAAA;AAC/B,QAAA,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAAI,GAAA,GAAM,IAAA;AAAA,MAC3C,CAAA,MAAA,IAAW,GAAA,CAAI,UAAA,CAAW,GAAG,KAAK,CAAC,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,IAAK,CAAC,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9E,QAAA,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAAI,GAAA,GAAM,IAAA;AACzC,QAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,IAAI,KAAK,CAAC,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,IAAK,CAAC,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACtE,UAAA,MAAA,EAAA;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AAC9B,QAAA,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAAI,GAAA,GAAM,IAAA;AAAA,MAC3C,CAAA,MAAA,IAAW,GAAA,CAAI,IAAA,EAAK,EAAG;AACrB,QAAA,SAAA,IAAa,KAAK,MAAA,CAAO,MAAM,CAAA,GAAI,GAAA,CAAI,MAAK,GAAI,IAAA;AAAA,MAClD;AAAA,IACF;AACA,IAAA,OAAO,UAAU,IAAA,EAAK;AAAA,EACxB,CAAA;AAEA,EAAA,uBACErH,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,mBAAA;AAAA,QACA,8CAAA;AAAA,QACA,uEAAA;AAAA,QACA,QAAA,IAAY,+BAAA;AAAA,QACZ;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAH,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,SAAA;AAAA,YACA,WAAA;AAAA,YACA,qBAAA,EAAuB,yBAAA;AAAA,YACvB,UAAU,QAAA,IAAY;AAAA;AAAA,SACxB;AAAA,QAGC,kBAAA,IAAsB,0BACrBA,cAAAA,CAAC,SAAI,SAAA,EAAU,+CAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,YAAY,aAAA,EAAe,CAAC,MAAM,cAAA,CAAe,CAAsB,GAClF,QAAA,kBAAAG,eAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,KAAA,EAClB,QAAA,EAAA;AAAA,0BAAAH,eAAC,WAAA,EAAA,EAAY,KAAA,EAAM,MAAA,EAAO,SAAA,EAAU,WAAU,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,0BAClDA,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAM,YAAA,EAAa,SAAA,EAAU,WAAU,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BAC9DA,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAM,UAAA,EAAW,SAAA,EAAU,WAAU,QAAA,EAAA,UAAA,EAAQ;AAAA,SAAA,EAC5D,GACF,CAAA,EACF,CAAA;AAAA,wBAIFG,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAA,EAAW,EAAG,SAAA,EAAU,eAAA,EAErE,QAAA,EAAA;AAAA,UAAA,UAAA,KAAe,0BACdH,cAAAA;AAAA,YAAC8I,mBAAA;AAAA,YAAA;AAAA,cACC,MAAA;AAAA,cACA,SAAA,EAAW,EAAA;AAAA,gBACT,iBAAA;AAAA,gBACA,QAAA,IAAY;AAAA;AACd;AAAA,WACF;AAAA,UAID,UAAA,KAAe,YAAA,oBACd9I,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACZ,QAAA,EAAA,MAAA,EAAQ,OAAA,EAAQ,IAAK,SAAA,EACxB,CAAA;AAAA,UAID,UAAA,KAAe,UAAA,oBACdA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yFAAA,EACZ,QAAA,EAAA,WAAA,CAAY,MAAA,EAAQ,OAAA,EAAQ,IAAK,EAAE,KAAK,SAAA,EAC3C;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAGAA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,WAAA;AAAA,YACA,SAAA,EAAW,wBAAA;AAAA,YACX;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AC7UxB,IAAM,sBAAsB,MAAc;AACxC,EAAA,OAAO,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACrE,CAAA;AAKA,IAAM,mBAAA,GAAsB,CAAC,OAAA,GAAuC,SAAA,KAAsB;AACxF,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,SAAA;AACH,MAAA,OAAO,+CAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,mDAAA;AAAA,IACT,KAAK,SAAA;AAAA,IACL;AACE,MAAA,OAAO,8CAAA;AAAA;AAEb,CAAA;AAKA,IAAM,uBAAA,GAA0B,CAC9B,QAAA,EACA,QAAA,EACA,YAAA,KACwB;AACxB,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,QAAA,IAAY,CAAC,YAAA,EAAc;AAC3C,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,OAAO;AAAA,IACL,GAAI,QAAA,IAAY,EAAE,eAAA,EAAiB,QAAA,EAAS;AAAA,IAC5C,GAAI,QAAA,IAAY,EAAE,KAAA,EAAO,QAAA,EAAS;AAAA,IAClC,GAAI,YAAA,IAAgB,EAAE,WAAA,EAAa,YAAA;AAAa,GAClD;AACF,CAAA;AAKA,IAAM,iBAAA,GAAoB,CACxB,QAAA,EACA,QAAA,EACA,YAAA,KACY;AACZ,EAAA,OAAO,OAAA,CAAQ,QAAA,IAAY,QAAA,IAAY,YAAY,CAAA;AACrD,CAAA;AAKA,IAAM,kBAA2C,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,QAAO,KAAM;AAC/E,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,EAAA,EAAI,SAAS,QAAA,EAAU,QAAA,EAAU,YAAA,EAAa,GAAI,IAAA,CAAK,KAAA;AAE7F,EAAA,MAAM,eAAe,MAAM;AAEzB,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,oBAAA,EAAsB;AAAA,MAClD,MAAA,EAAQ;AAAA,QACN,EAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAA;AAAA,QACA,QAAA,EAAU,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,IAAA,GAAO;AAAA,OAC1C;AAAA,MACA,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,QAAA,CAAS,cAAc,KAAK,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,QAAA,EAAU,QAAA,EAAU,YAAY,CAAA;AAC5E,EAAA,MAAM,aAAA,GAAgB,uBAAA,CAAwB,QAAA,EAAU,QAAA,EAAU,YAAY,CAAA;AAE9E,EAAA,uBACEA,eAACkH,qBAAAA,EAAA,EAAgB,IAAG,MAAA,EAAO,SAAA,EAAU,UACnC,QAAA,kBAAA/G,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,kBAAA;AAAA,QACA,0BAAA;AAAA,QACA,sBAAA;AAAA,QACA,YAAA;AAAA,QACA,qBAAA;AAAA,QACA,QAAA;AAAA,QACA,4BAAA;AAAA,QACA,6BAAA;AAAA;AAAA,QAEA,CAAC,iBAAA,IAAqB,mBAAA,CAAoB,OAAO,CAAA;AAAA,QACjD,QAAA,IAAY,gCAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,KAAA,EAAO,aAAA;AAAA,MACP,eAAA,EAAiB,KAAA;AAAA,MACjB,iBAAA,EAAiB,EAAA;AAAA,MACjB,qBAAA,EAAqB,MAAA;AAAA,MACrB,qBAAA,EAAqB,MAAA;AAAA,MACrB,OAAA,EAAS,YAAA;AAAA,MAET,QAAA,EAAA;AAAA,wBAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,CAAC,iBAAA,IAAqB,kCAAkC,CAAA,EAAG,KAAA,EAAO,oBAAoB,EAAE,OAAA,EAAS,GAAA,EAAI,GAAI,QAAY,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,wBAChJA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,YAAA,EAAa;AAAA;AAAA;AAAA,GACtB,EACF,CAAA;AAEJ,CAAA;AA0BO,IAAM,oBAAA,GAAuBmH,UAAK,MAAA,CAAO;AAAA,EAC9C,IAAA,EAAM,aAAA;AAAA,EAEN,KAAA,EAAO,QAAA;AAAA,EAEP,MAAA,EAAQ,IAAA;AAAA;AAAA,EAGR,IAAA,EAAM,IAAA;AAAA;AAAA,EAGN,SAAA,EAAW,IAAA;AAAA;AAAA,EAGX,UAAA,EAAY,IAAA;AAAA,EAEZ,aAAA,GAAgB;AACd,IAAA,OAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,iBAAiB,CAAA;AAAA,QAC9D,UAAA,EAAY,CAAC,UAAA,MAAgB;AAAA,UAC3B,mBAAmB,UAAA,CAAW;AAAA,SAChC;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,qBAAqB,CAAA;AAAA,QAClE,UAAA,EAAY,CAAC,UAAA,MAAgB;AAAA,UAC3B,uBAAuB,UAAA,CAAW;AAAA,SACpC;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,qBAAqB,CAAA;AAAA,QAClE,UAAA,EAAY,CAAC,UAAA,MAAgB;AAAA,UAC3B,uBAAuB,UAAA,CAAW;AAAA,SACpC;AAAA,OACF;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,oBAAoB,CAAA;AAAA,QACjE,UAAA,EAAY,CAAC,UAAA,MAAgB;AAAA,UAC3B,sBAAsB,UAAA,CAAW;AAAA,SACnC;AAAA,OACF;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,SAAA;AAAA,QACT,WAAW,CAAC,OAAA,KACV,OAAA,CAAQ,YAAA,CAAa,sBAAsB,CAAA,IAAK,SAAA;AAAA,QAClD,UAAA,EAAY,CAAC,UAAA,MAAgB;AAAA,UAC3B,wBAAwB,UAAA,CAAW;AAAA,SACrC;AAAA,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,uBAAuB,CAAA;AAAA,QACpE,UAAA,EAAY,CAAC,UAAA,MAAgB;AAAA,UAC3B,yBAAyB,UAAA,CAAW;AAAA,SACtC;AAAA,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,uBAAuB,CAAA;AAAA,QACpE,UAAA,EAAY,CAAC,UAAA,MAAgB;AAAA,UAC3B,yBAAyB,UAAA,CAAW;AAAA,SACtC;AAAA,OACF;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAa,2BAA2B,CAAA;AAAA,QACxE,UAAA,EAAY,CAAC,UAAA,MAAgB;AAAA,UAC3B,6BAA6B,UAAA,CAAW;AAAA,SAC1C;AAAA;AACF,KACF;AAAA,EACF,CAAA;AAAA,EAEA,SAAA,GAAY;AACV,IAAA,OAAO;AAAA,MACL;AAAA,QACE,GAAA,EAAK;AAAA;AACP,KACF;AAAA,EACF,CAAA;AAAA,EAEA,UAAA,CAAW,EAAE,cAAA,EAAe,EAAG;AAC7B,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACAC,qBAAgB,cAAA,EAAgB;AAAA,QAC9B,KAAA,EAAO,kBAAA;AAAA,QACP,eAAA,EAAiB;AAAA,OAClB,CAAA;AAAA,MACD,GAAG,cAAA,CAAe,qBAAqB,CAAC,CAAA,EAAG,cAAA,CAAe,oBAAoB,CAAC,CAAA;AAAA,KACjF;AAAA,EACF,CAAA;AAAA;AAAA,EAGA,UAAA,CAAW,EAAE,IAAA,EAAK,EAAG;AACnB,IAAA,OAAO,GAAG,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,EAAG,IAAA,CAAK,MAAM,MAAM,CAAA,CAAA;AAAA,EACjD,CAAA;AAAA,EAEA,WAAA,GAAc;AACZ,IAAA,OAAOC,4BAAsB,eAAe,CAAA;AAAA,EAC9C,CAAA;AAAA,EAEA,WAAA,GAAc;AACZ,IAAA,OAAO;AAAA,MACL,eACE,CAAC,KAAA,KACD,CAAC,EAAE,UAAS,KAAM;AAEhB,QAAA,MAAM,EAAE,KAAA,EAAA7D,MAAAA,EAAO,GAAG,YAAW,GAAI,KAAA;AACjC,QAAA,OAAO,SAAS,aAAA,CAAc;AAAA,UAC5B,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,KAAA,EAAO;AAAA,YACL,GAAG,UAAA;AAAA,YACH,IAAI,mBAAA,EAAoB;AAAA,YACxB,GAAIA,MAAAA,EAAO,EAAA,IAAM,EAAE,QAAA,EAAUA,OAAM,EAAA,EAAG;AAAA,YACtC,GAAIA,MAAAA,EAAO,EAAA,IAAM,EAAE,QAAA,EAAUA,OAAM,EAAA,EAAG;AAAA,YACtC,GAAIA,MAAAA,EAAO,MAAA,IAAU,EAAE,YAAA,EAAcA,OAAM,MAAA;AAAO;AACpD,SACD,CAAA;AAAA,MACH,CAAA;AAAA,MACF,aAAA,EACE,CAAC,EAAA,EAAI,KAAA,KACL,CAAC,EAAE,EAAA,EAAI,OAAM,KAAM;AACjB,QAAA,IAAI,OAAA,GAAU,KAAA;AACd,QAAA,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,CAAC,IAAA,EAAM,GAAA,KAAQ;AACnC,UAAA,IAAI,IAAA,CAAK,KAAK,IAAA,KAAS,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,EAAA,EAAI;AACxD,YAAA,EAAA,CAAG,aAAA,CAAc,KAAK,MAAA,EAAW;AAAA,cAC/B,GAAG,IAAA,CAAK,KAAA;AAAA,cACR,GAAG;AAAA,aACJ,CAAA;AACD,YAAA,OAAA,GAAU,IAAA;AACV,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,QACF,CAAC,CAAA;AACD,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,KACJ;AAAA,EACF,CAAA;AAAA;AAAA,EAGA,oBAAA,GAAuB;AACrB,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,MACT,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAC,EAAE,EAAA,EAAI,KAAA,EAAM,KAAM;AAC9C,QAAA,IAAI,UAAA,GAAa,KAAA;AACjB,QAAA,MAAM,EAAE,WAAU,GAAI,KAAA;AACtB,QAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,SAAA;AAE1B,QAAA,IAAI,CAAC,KAAA,EAAO;AACV,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,KAAA,CAAM,IAAI,YAAA,CAAa,MAAA,GAAS,GAAG,MAAA,EAAQ,CAAC,MAAM,GAAA,KAAQ;AACxD,UAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM;AAChC,YAAA,UAAA,GAAa,IAAA;AACb,YAAA,EAAA,CAAG,UAAA,CAAW,EAAA,EAAI,GAAA,EAAK,GAAA,GAAM,KAAK,QAAQ,CAAA;AAC1C,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,QACF,CAAC,CAAA;AAED,QAAA,OAAO,UAAA;AAAA,MACT,CAAC;AAAA,KACL;AAAA,EACF;AACF,CAAC;AC9QD,IAAM,wBAAA,GAA2B,CAC/B,aAAA,EACA,oBAAA,EACA,iBAAA,KAC+B;AAC/B,EAAA,OAAO;AAAA,IACL,MAAM,aAAA,CAAc,IAAA;AAAA,IACpB,WAAA,EAAa,KAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IAEb,KAAA,EAAO,CAAC,EAAE,KAAA,EAAM,KAAM;AACpB,MAAA,IAAI,CAAC,KAAA,EAAO,OAAO,aAAA,CAAc,QAAA;AAEjC,MAAA,MAAM,WAAA,GAAc,MAAM,WAAA,EAAY;AACtC,MAAA,OAAO,cAAc,QAAA,CAAS,MAAA;AAAA,QAC5B,CAAC,QACC,GAAA,CAAI,YAAA,CAAa,aAAY,CAAE,QAAA,CAAS,WAAW,CAAA,IACnD,GAAA,CAAI,OAAO,WAAA,EAAY,CAAE,SAAS,WAAW,CAAA,IAC7C,IAAI,kBAAA,EAAoB,WAAA,EAAY,CAAE,QAAA,CAAS,WAAW;AAAA,OAC9D;AAAA,IACF,CAAA;AAAA,IAEA,QAAQ,MAAM;AACZ,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAC,KAAA,KAAU;AAElB,UAAA,cAAA,CAAe,MAAM;AACnB,YAAA,oBAAA,CAAqB;AAAA,cACnB,SAAA,EAAW,IAAA;AAAA,cACX,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,QAAQ,aAAA,CAAc,IAAA;AAAA,cACtB,aAAa,KAAA,CAAM,UAAA;AAAA,cACnB,UAAU,aAAA,CAAc,QAAA;AAAA,cACxB,OAAO,KAAA,CAAM;AAAA,aACd,CAAA;AAAA,UACH,CAAC,CAAA;AAAA,QACH,CAAA;AAAA,QAEA,QAAA,EAAU,CAAC,KAAA,KAAU;AAEnB,UAAA,cAAA,CAAe,MAAM;AACnB,YAAA,oBAAA,CAAqB;AAAA,cACnB,SAAA,EAAW,IAAA;AAAA,cACX,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,QAAQ,aAAA,CAAc,IAAA;AAAA,cACtB,aAAa,KAAA,CAAM,UAAA;AAAA,cACnB,UAAU,aAAA,CAAc,QAAA;AAAA,cACxB,OAAO,KAAA,CAAM;AAAA,aACd,CAAA;AAAA,UACH,CAAC,CAAA;AAAA,QACH,CAAA;AAAA,QAEA,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,UAAA,IAAI,KAAA,CAAM,KAAA,CAAM,GAAA,KAAQ,QAAA,EAAU;AAChC,YAAA,cAAA,CAAe,MAAM;AACnB,cAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,YAC3B,CAAC,CAAA;AACD,YAAA,OAAO,IAAA;AAAA,UACT;AAEA,UAAA,IACE,KAAA,CAAM,KAAA,CAAM,GAAA,KAAQ,SAAA,IACpB,KAAA,CAAM,KAAA,CAAM,GAAA,KAAQ,WAAA,IACpB,KAAA,CAAM,KAAA,CAAM,GAAA,KAAQ,OAAA,EACpB;AACA,YAAA,OAAO,IAAA;AAAA,UACT;AACA,UAAA,OAAO,KAAA;AAAA,QACT,CAAA;AAAA,QAEA,QAAQ,MAAM;AAEZ,UAAA,cAAA,CAAe,MAAM;AACnB,YAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,UAC3B,CAAC,CAAA;AAAA,QACH;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,OAAA,EAAS,CAAC,EAAE,KAAA,EAAO,OAAM,KAAM;AAC7B,MAAA,MAAM,OAAA,GAAU,KAAA;AAChB,MAAA,iBAAA,CAAkB,OAAA,EAAS,aAAA,CAAc,IAAA,EAAM,KAAK,CAAA;AAAA,IACtD;AAAA,GACF;AACF,CAAA;AAQO,IAAM,mCAAA,GAAsC,CACjD,MAAA,KACgB;AAChB,EAAA,MAAM,EAAE,QAAA,EAAU,oBAAA,EAAsB,iBAAA,EAAmB,aAAY,GAAI,MAAA;AAG3E,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,aAAA,EAAe,KAAA,KAAU;AAE5C,IAAA,MAAM,UAAA,GAAa,IAAIuF,eAAA,CAAU,CAAA,WAAA,EAAc,WAAW,IAAI,aAAA,CAAc,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAE3F,IAAA,OAAO9B,eAAU,MAAA,CAAO;AAAA,MACtB,MAAM,CAAA,kBAAA,EAAqB,WAAW,IAAI,aAAA,CAAc,IAAI,IAAI,KAAK,CAAA,CAAA;AAAA,MAErE,qBAAA,GAAwB;AACtB,QAAA,OAAO;AAAA,UACL+B,2BAAA,CAAW;AAAA,YACT,QAAQ,IAAA,CAAK,MAAA;AAAA,YACb,SAAA,EAAW,UAAA;AAAA,YACX,GAAG,wBAAA;AAAA,cACD,aAAA;AAAA,cACA,oBAAA;AAAA,cACA;AAAA;AACF,WACD;AAAA,SACH;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAmBO,IAAM,0BAAA,GAA6B,CACxC,MAAA,EACA,OAAA,EACA,QACA,KAAA,EACA,OAAA,GAA4C,WAC5CxF,MAAAA,KACS;AACT,EAAA,MAAA,CACG,OAAM,CACN,KAAA,GACA,WAAA,CAAY,KAAK,EACjB,aAAA,CAAc;AAAA,IACb,MAAA;AAAA,IACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,OAAA;AAAA,IACA,KAAA,EAAAA;AAAA,GACD,EACA,GAAA,EAAI;AACT,CAAA;AC1LA,IAAMyF,oBAAAA,GAAsB,CAAC,OAAA,GAAuC,SAAA,KAAsB;AACxF,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,SAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,qEAAA;AAAA,IACT,KAAK,SAAA;AAAA,IACL;AACE,MAAA,OAAO,kEAAA;AAAA;AAEb,CAAA;AAKA,IAAMC,wBAAAA,GAA0B,CAC9B1F,MAAAA,KACwB;AACxB,EAAA,IAAI,CAACA,MAAAA,EAAO;AACV,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,OAAO;AAAA,IACL,GAAIA,MAAAA,CAAM,EAAA,IAAM,EAAE,eAAA,EAAiBA,OAAM,EAAA,EAAG;AAAA,IAC5C,GAAIA,MAAAA,CAAM,EAAA,IAAM,EAAE,KAAA,EAAOA,OAAM,EAAA,EAAG;AAAA,IAClC,GAAIA,MAAAA,CAAM,MAAA,IAAU,EAAE,WAAA,EAAaA,OAAM,MAAA;AAAO,GAClD;AACF,CAAA;AAKO,IAAM,cAA0C,CAAC;AAAA,EACtD,MAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,EAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,SAAA;AAAA,EACV,KAAA,EAAAA,MAAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,oBAAoB,OAAA,CAAQA,MAAAA,EAAO,MAAMA,MAAAA,EAAO,EAAA,IAAMA,QAAO,MAAM,CAAA;AACzE,EAAA,MAAM,aAAA,GAAgB0F,yBAAwB1F,MAAK,CAAA;AAEnD,EAAA,uBACErD,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,6BAAA;AAAA,QACA,0BAAA;AAAA,QACA,eAAA;AAAA,QACA,YAAA;AAAA,QACA,qBAAA;AAAA,QACA,QAAA;AAAA,QACA,6BAAA;AAAA;AAAA,QAEA,CAAC,iBAAA,IAAqB8I,oBAAAA,CAAoB,OAAO,CAAA;AAAA,QACjD,QAAA,IAAY,gCAAA;AAAA,QACZ,QAAA,IAAY;AAAA,OACd;AAAA,MACA,KAAA,EAAO,aAAA;AAAA,MACP,iBAAA,EAAiB,EAAA;AAAA,MACjB,qBAAA,EAAqB,MAAA;AAAA,MACrB,qBAAA,EAAqB,MAAA;AAAA,MACrB,OAAA,EAAS,QAAA;AAAA,MACT,IAAA,EAAM,WAAW,QAAA,GAAW,MAAA;AAAA,MAC5B,QAAA,EAAU,WAAW,CAAA,GAAI,MAAA;AAAA,MACzB,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,aAAa,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,CAAA,EAAM;AACpD,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,QAAA,EAAS;AAAA,QACX;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAjJ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,CAAC,iBAAA,IAAqB,kCAAkC,CAAA,EAAG,KAAA,EAAO,oBAAoB,EAAE,OAAA,EAAS,GAAA,EAAI,GAAI,QAAY,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,wBAChJA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,YAAA,EAAa;AAAA;AAAA;AAAA,GACtB;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;ACjE1B,IAAM,cAAA,GAAiB,CAAC,QAAA,KAAgE;AACtF,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA+B;AAElD,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,UAAA,GAAa,IAAI,KAAA,IAAS,EAAA;AAChC,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA,EAAG;AAC3B,MAAA,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,EAAE,CAAA;AAAA,IAC3B;AACA,IAAA,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA,CAAG,IAAA,CAAK,GAAG,CAAA;AAAA,EAClC;AAEA,EAAA,OAAO,MAAA;AACT,CAAA;AAKO,IAAM,iBAAgD,CAAC;AAAA,EAC5D,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA,EAAqB,oBAAA;AAAA,EACrB;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,aAAA,GAAsBmJ,0BAAuB,IAAI,CAAA;AAGvD,EAAA,MAAM,gBAAA,GAAyBA,kBAAA,CAAA,OAAA;AAAA,IAC7B,MAAM,eAAe,QAAQ,CAAA;AAAA,IAC7B,CAAC,QAAQ;AAAA,GACX;AAGA,EAAMA,6BAAU,MAAM;AACpB,IAAA,MAAM,oBAAA,GAAuB,CAAC,CAAA,KAAkB;AAC9C,MAAA,IACE,aAAA,CAAc,WACd,CAAC,aAAA,CAAc,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAChD;AACA,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,oBAAoB,CAAA;AAC3D,MAAA,OAAO,MAAM;AACX,QAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,oBAAoB,CAAA;AAAA,MAChE,CAAA;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,QAAQ,CAAC,CAAA;AAGtB,EAAA,MAAM,CAAC,OAAA,EAAS,WAAW,CAAA,GAAUA,4BAAS,KAAK,CAAA;AAEnD,EAAMA,6BAAU,MAAM;AACpB,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS,OAAO,IAAA;AAEjC,EAAA,MAAM,kCACJnJ,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,aAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,qBAAA;AAAA,QACA,OAAA;AAAA,QACA,kCAAA;AAAA,QACA,gEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,KAAK,QAAA,CAAS,GAAA;AAAA,QACd,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,MAAA,EAAQ,IAAA;AAAA;AAAA;AAAA,QAGR,eAAA,EAAiB,gCAAA;AAAA,QACjB,KAAA,EAAO;AAAA,OACT;AAAA,MAEA,QAAA,kBAAAG,eAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,YAAA,EAEhB,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA;AAAA,UAAA,aAAA;AAAA,0BACrDA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA;AAAA,YAAA,MAAA;AAAA,YAAQ;AAAA,WAAA,EAAM;AAAA,SAAA,EAC1D,CAAA;AAAA,wBAEFA,eAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,eAAA,EACpB,QAAA,EAAA;AAAA,UAAA,QAAA,CAAS,MAAA,KAAW,CAAA,oBACnBH,cAAAA,CAAC,gBAAa,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,UAEjC,KAAA,CAAM,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,UAAA,EAAYoJ,eAAc,CAAA,qBACtEpJ,cAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cAEC,SAAS,UAAA,IAAc,MAAA;AAAA,cAEtB,QAAA,EAAAoJ,eAAAA,CAAe,GAAA,CAAI,CAAC,KAAK,GAAA,KAAQ;AAEhC,gBAAA,IAAI,QAAA,GAAW,CAAA;AACf,gBAAA,KAAA,MAAW,CAAC,CAAA,EAAG,IAAI,CAAA,IAAK,gBAAA,CAAiB,SAAQ,EAAG;AAClD,kBAAA,IAAI,MAAM,UAAA,EAAY;AACpB,oBAAA,QAAA,IAAY,GAAA;AACZ,oBAAA;AAAA,kBACF;AACA,kBAAA,QAAA,IAAY,IAAA,CAAK,MAAA;AAAA,gBACnB;AAEA,gBAAA,uBACEpJ,cAAAA;AAAA,kBAAC,WAAA;AAAA,kBAAA;AAAA,oBAEC,OAAO,GAAA,CAAI,MAAA;AAAA,oBACX,QAAA,EAAU,MAAM,SAAA,CAAU,GAAG,CAAA;AAAA,oBAC7B,UAAU,QAAA,KAAa,cAAA;AAAA,oBAEvB,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EAEZ,QAAA,EAAA;AAAA,sBAAA,YAAA,KAAiB,YAAA,CAAa,EAAA,IAAM,YAAA,CAAa,EAAA,CAAA,oBAChDH,cAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,oCAAA;AAAA,0BACV,KAAA,EAAO;AAAA,4BACL,eAAA,EAAiB,YAAA,CAAa,EAAA,IAAM,YAAA,CAAa,EAAA;AAAA,4BACjD,QAAQ,YAAA,CAAa,MAAA,GAAS,CAAA,UAAA,EAAa,YAAA,CAAa,MAAM,CAAA,CAAA,GAAK;AAAA;AACrE;AAAA,uBACF;AAAA,sBAED,GAAA,CAAI,wBACHA,cAAAA,CAAC,UAAK,SAAA,EAAU,qCAAA,EACb,cAAI,IAAA,EACP,CAAA;AAAA,sCAEFG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wCAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,0BAAA,MAAA;AAAA,0BACA,GAAA,CAAI;AAAA,yBAAA,EACP,CAAA;AAAA,wBACC,GAAA,CAAI,sCACHH,cAAAA,CAAC,SAAI,SAAA,EAAU,wCAAA,EACZ,cAAI,kBAAA,EACP;AAAA,uBAAA,EAEJ;AAAA,qBAAA,EACF;AAAA,mBAAA;AAAA,kBAhCK,GAAA,CAAI;AAAA,iBAiCX;AAAA,cAEJ,CAAC;AAAA,aAAA;AAAA,YAnDI,UAAA,IAAc;AAAA,WAqDtB;AAAA,SAAA,EACH;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAIF,EAAA,OAAOqJ,qBAAA,CAAa,eAAA,EAAiB,QAAA,CAAS,IAAI,CAAA;AACpD;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;;;AC7HtB,IAAM,wBAAA,GAA2B,CACtC,IAAA,EACA,QAAA,KACsH;AACtH,EAAA,MAAM,SAOA,EAAC;AAGP,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAoE;AAChG,EAAA,KAAA,MAAW,iBAAiB,QAAA,EAAU;AACpC,IAAA,KAAA,MAAW,GAAA,IAAO,cAAc,QAAA,EAAU;AACxC,MAAA,eAAA,CAAgB,IAAI,CAAA,EAAG,aAAA,CAAc,IAAI,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI;AAAA,QACxD,OAAO,GAAA,CAAI,YAAA;AAAA,QACX,QAAQ,aAAA,CAAc,IAAA;AAAA,QACtB,OAAO,aAAA,CAAc;AAAA,OACtB,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAEvE,EAAA,MAAM,UAAU,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,YAAY,WAAW,GAAG,CAAA;AAEzD,EAAA,IAAI,KAAA;AACJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAC5C,IAAA,MAAM,UAAA,GAAa,MAAM,CAAC,CAAA;AAC1B,IAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,IAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,IAAA,MAAM,UAAA,GAAa,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA;AAErC,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA;AAC3C,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,MAAA;AAAA,QACA,cAAc,IAAA,CAAK,KAAA;AAAA,QACnB,MAAA;AAAA,QACA,UAAU,KAAA,CAAM,KAAA;AAAA,QAChB,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,OAAO,IAAA,CAAK;AAAA,OACb,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,IAAM,YAAA,GAAe,CAAC,GAAA,KAAwB;AAC5C,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AAClD,CAAA;AAUO,IAAM,sBAAA,GAAyB,CACpC,IAAA,EACA,QAAA,EACA,UAA4C,SAAA,KAChB;AAC5B,EAAA,MAAM,QAAA,GAAW,wBAAA,CAAyB,IAAA,EAAM,QAAQ,CAAA;AAExD,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,WAAA;AAAA,UACN,OAAA,EAAS,OAAO,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,GAAI;AAAC;AAC9C;AACF,KACF;AAAA,EACF;AAGA,EAAA,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAG/C,EAAA,MAAM,UAAqC,EAAC;AAC5C,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAE1B,IAAA,IAAI,GAAA,CAAI,WAAW,QAAA,EAAU;AAC3B,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,IAAI,QAAQ;AAAA,OACxC,CAAA;AAAA,IACH;AAGA,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,aAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,EAAA,EAAI,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,QAChE,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,cAAc,GAAA,CAAI,YAAA;AAAA,QAClB,OAAA;AAAA,QACA,GAAI,IAAI,KAAA,EAAO,EAAA,IAAM,EAAE,QAAA,EAAU,GAAA,CAAI,MAAM,EAAA,EAAG;AAAA,QAC9C,GAAI,IAAI,KAAA,EAAO,EAAA,IAAM,EAAE,QAAA,EAAU,GAAA,CAAI,MAAM,EAAA,EAAG;AAAA,QAC9C,GAAI,IAAI,KAAA,EAAO,MAAA,IAAU,EAAE,YAAA,EAAc,GAAA,CAAI,MAAM,MAAA;AAAO;AAC5D,KACD,CAAA;AAED,IAAA,QAAA,GAAW,GAAA,CAAI,WAAW,GAAA,CAAI,MAAA;AAAA,EAChC;AAGA,EAAA,IAAI,QAAA,GAAW,KAAK,MAAA,EAAQ;AAC1B,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,QAAQ;AAAA,KAC1B,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,WAAA;AAAA,QACN;AAAA;AACF;AACF,GACF;AACF;ACrMO,IAAM,QAAA,GAAWlC,UAAK,MAAA,CAAO;EAClC,IAAA,EAAM,KAAA;EACN,OAAA,EAAS,IAAA;EACT,OAAA,EAAS,QAAA;EAET,cAAA,EAAgB,CAAC,MAAM,CAAA,KAAM;AAC3B,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,OAAO,EAAA;AACT,IAAA;AAEA,IAAA,OAAO,CAAA,CAAE,cAAA,CAAe,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAC9C,EAAA;AACF,CAAC,CAAA;ACdD,IAAO,aAAA,GAAQ,QAAA;ACwBf,IAAM,wBAAA,GAA2B,QAAA;AAMjC,IAAM,SAAA,GAAY,MAAA;AAMX,IAAM,SAAA,GAAYA,UAAK,MAAA,CAAyB;EACrD,IAAA,EAAM,WAAA;EAEN,QAAA,EAAU,GAAA;EAEV,UAAA,GAAa;AACX,IAAA,OAAO;AACL,MAAA,cAAA,EAAgB;AAClB,KAAA;AACF,EAAA,CAAA;EAEA,KAAA,EAAO,OAAA;EAEP,OAAA,EAAS,SAAA;EAET,SAAA,GAAY;AACV,IAAA,OAAO,CAAC,EAAE,GAAA,EAAK,GAAA,EAAK,CAAA;AACtB,EAAA,CAAA;EAEA,UAAA,CAAW,EAAE,gBAAe,EAAG;AAC7B,IAAA,OAAO,CAAC,KAAKC,oBAAAA,CAAgB,IAAA,CAAK,QAAQ,cAAA,EAAgB,cAAc,GAAG,CAAC,CAAA;AAC9E,EAAA,CAAA;EAEA,aAAA,EAAe,CAAC,OAAO,OAAA,KAAY;AACjC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,MAAA,IAAU,EAAC;AAIhC,IAAA,IAAI,OAAO,MAAA,KAAW,CAAA,IAAK,OAAO,CAAC,CAAA,CAAE,SAAS,OAAA,EAAS;AAErD,MAAA,OAAO,QAAQ,aAAA,CAAc,CAAC,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAC1C,IAAA;AAGA,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,WAAA,CAAY,MAAM,CAAA;AAI1C,IAAA,MAAM,+BAAA,GACJ,MAAA,CAAO,MAAA,KAAW,CAAA,IAClB,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,KAAS,MAAA,KAClB,MAAA,CAAO,CAAC,CAAA,CAAE,GAAA,KAAQ,wBAAA,IACjB,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,KAAS,wBAAA,IACnB,MAAA,CAAO,CAAC,CAAA,CAAE,GAAA,KAAQ,SAAA,IAClB,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,KAAS,SAAA,CAAA;AAEvB,IAAA,IACE,mCACA,OAAA,CAAQ,MAAA,KAAW,KACnB,OAAA,CAAQ,CAAC,EAAE,IAAA,KAAS,MAAA,KACnB,OAAA,CAAQ,CAAC,EAAE,IAAA,KAAS,wBAAA,IAA4B,QAAQ,CAAC,CAAA,CAAE,SAAS,SAAA,CAAA,EACrE;AACA,MAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,WAAA,EAAa,MAAA,EAAW,EAAE,CAAA;AACtD,IAAA;AAGA,IAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,WAAA,EAAa,MAAA,EAAW,OAAO,CAAA;AAC3D,EAAA,CAAA;EAEA,cAAA,EAAgB,CAAC,IAAA,EAAM,CAAA,EAAG,GAAA,KAAQ;AAnGpC,IAAA,IAAA,EAAA,EAAA,EAAA;AAoGI,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAA;AACT,IAAA;AAGA,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA,CAAK,UAAU,EAAC;AAE9D,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAIxB,MAAA,MAAM,kBAAkB,KAAA,CAAM,OAAA,CAAA,CAAQ,EAAA,GAAA,GAAA,IAAA,OAAA,MAAA,GAAA,GAAA,CAAK,YAAA,KAAL,IAAA,GAAA,SAAA,EAAA,CAAmB,OAAO,IAAI,GAAA,CAAI,YAAA,CAAa,UAAU,EAAC;AAChG,MAAA,MAAM,4BAAA,GAAA,CAAA,CAA+B,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,YAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,IAAA,MAAS,WAAA,IAAe,gBAAgB,MAAA,KAAW,CAAA;AAE3G,MAAA,OAAO,+BAA+B,wBAAA,GAA2B,EAAA;AACnE,IAAA;AAEA,IAAA,OAAO,CAAA,CAAE,eAAe,OAAO,CAAA;AACjC,EAAA,CAAA;EAEA,WAAA,GAAc;AACZ,IAAA,OAAO;AACL,MAAA,YAAA,EACE,MACA,CAAC,EAAE,QAAA,EAAS,KAAM;AAChB,QAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACnC,MAAA;AACJ,KAAA;AACF,EAAA,CAAA;EAEA,oBAAA,GAAuB;AACrB,IAAA,OAAO;AACL,MAAA,WAAA,EAAa,MAAM,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,YAAA;AAC1C,KAAA;AACF,EAAA;AACF,CAAC,CAAA;ACnID,IAAOkC,cAAAA,GAAQ,SAAA;ACER,IAAM,IAAA,GAAOnC,UAAK,MAAA,CAAO;EAC9B,IAAA,EAAM,MAAA;EACN,KAAA,EAAO,QAAA;AAEP,EAAA,aAAA,EAAe,CAAA,KAAA,KAAS;AAEtB,IAAA,OAAO;MACL,IAAA,EAAM,MAAA;AACN,MAAA,IAAA,EAAM,MAAM,IAAA,IAAQ;AACtB,KAAA;AACF,EAAA,CAAA;EAEA,cAAA,EAAgB,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,IAAQ;AACvC,CAAC,CAAA;ACfD,IAAOmC,cAAAA,GAAQ,IAAA;ACoCf,IAAM,kBAAA,GAAqB,cAAS,MAAA,CAAO;AAAA,EACzC,OAAA,EAAS;AACX,CAAC,CAAA;AAKD,IAAM,iBAAA,GAAoB,CACxB,MAAA,KACsB;AACtB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAE,UAAA,EAAY,EAAA,EAAI,cAAc,EAAA,EAAI,QAAA,EAAU,EAAC,EAAE;AAAA,EAC1D;AAEA,EAAA,MAAM,UAAA,GAAa,OAAO,OAAA,EAAQ;AAClC,EAAA,MAAM,WAA8B,EAAC;AACrC,EAAA,IAAI,YAAA,GAAe,EAAA;AACnB,EAAA,IAAI,QAAA,GAAW,CAAA;AAGf,EAAA,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,CAAC,MAAM,IAAA,KAAS;AAC3C,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAC7B,MAAA,YAAA,IAAgB,KAAK,IAAA,IAAQ,EAAA;AAC7B,MAAA,QAAA,IAAA,CAAa,IAAA,CAAK,QAAQ,EAAA,EAAI,MAAA;AAAA,IAChC,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,aAAA,EAAe;AAC3C,MAAA,MAAM,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,YAAA,KAAiB,IAAA,CAAK,KAAA;AAClD,MAAA,MAAM,cAAA,GAAiB,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA;AACzC,MAAA,MAAM,gBAAA,GAAmB,CAAA,EAAG,MAAM,CAAA,EAAG,YAAY,CAAA,CAAA;AAEjD,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,EAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAQ,cAAA,CAAe;AAAA,OACxB,CAAA;AAED,MAAA,YAAA,IAAgB,gBAAA;AAChB,MAAA,QAAA,IAAY,cAAA,CAAe,MAAA;AAAA,IAC7B;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,UAAA,EAAY,YAAA,EAAc,QAAA,EAAS;AAC9C,CAAA;AAKO,IAAM,gBAA8C,CAAC;AAAA,EAC1D,KAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,cAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA,EAAa,oBAAA;AAAA,EACb,SAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,KAAM;AAGJ,EAAA,MAAM,wBAA8BC,kBAAA,CAAA,KAAA,EAAM;AAC1C,EAAA,MAAM,cAAc,oBAAA,IAAwB,qBAAA;AAG5C,EAAA,MAAM,CAAC,gBAAA,EAAkB,oBAAoB,CAAA,GACrCA,4BAAiC,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAC,cAAA,EAAgB,kBAAkB,CAAA,GAAUA,4BAAS,CAAC,CAAA;AAC7D,EAAA,MAAM,CAAC,gBAAA,EAAkB,oBAAoB,CAAA,GAAUA,kBAAA,CAAA,QAAA,CAAwC,EAAE,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,CAAA;AAGlH,EAAA,MAAM,CAAC,YAAA,EAAc,gBAAgB,CAAA,GAAUA,4BAAoC,IAAI,CAAA;AACvF,EAAA,MAAM,CAAC,mBAAA,EAAqB,uBAAuB,CAAA,GAAUA,4BAAS,CAAC,CAAA;AAGvE,EAAA,MAAM,gBAAgB,KAAA,KAAU,MAAA;AAChC,EAAA,MAAM,oBAAA,GAA6BA,0BAAuB,IAAI,CAAA;AAC9D,EAAA,MAAM,gBAAA,GAAyBA,0BAAuB,IAAI,CAAA;AAG1D,EAAA,MAAM,CAAC,OAAA,EAAS,WAAW,CAAA,GAAUA,4BAAS,KAAK,CAAA;AAEnD,EAAMA,6BAAU,MAAM;AACpB,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,qBAAA,GAA8BA,2BAAQ,MAAM;AAChD,IAAA,OAAO,mCAAA,CAAoC;AAAA,MACzC,QAAA;AAAA,MACA,WAAA;AAAA,MACA,oBAAA,EAAsB,CAAC,KAAA,KAAU;AAC/B,QAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,QAAA,kBAAA,CAAmB,CAAC,CAAA;AAAA,MACtB,CAAA;AAAA,MACA,iBAAA,EAAmB,CAAC,QAAA,EAAU,OAAA,EAAS,MAAA,KAAW;AAAA,MAElD;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,QAAA,EAAU,WAAW,CAAC,CAAA;AAG1B,EAAA,MAAM,SAAS9B,eAAAA,CAAU;AAAA,IACvB,UAAA,EAAY;AAAA,MACV,kBAAA;AAAA,MACA6B,cAAAA;AAAA,MACAA,cAAAA;AAAA,MACAjB,6BAAY,SAAA,CAAU;AAAA,QACpB;AAAA,OACD,CAAA;AAAA,MACD,oBAAA,CAAqB,SAAA,CAAU,EAAE,CAAA;AAAA,MACjC,GAAG;AAAA,KACL;AAAA,IACA,OAAA,EAAS,aAAA,GACL,sBAAA,CAAuB,KAAA,IAAS,EAAA,EAAI,QAAA,EAAU,YAAY,CAAA,GAC1D,sBAAA,CAAuB,aAAA,IAAiB,EAAA,EAAI,QAAA,EAAU,YAAY,CAAA;AAAA,IACtE,UAAU,CAAC,QAAA;AAAA,IACX,iBAAA,EAAmB,KAAA;AAAA,IACnB,WAAA,EAAa;AAAA,MACX,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,EAAA;AAAA,UACL,oBAAA;AAAA,UACA,qBAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,aAAA,EAAe,CAAC,KAAA,EAAO,KAAA,KAAU;AAE/B,QAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,CAAC,kBAAkB,SAAA,EAAW;AACzD,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,YAAA,SAAA,CAAU,iBAAA,CAAkB,MAAM,CAAC,CAAA;AAAA,UACrC;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,KACF;AAAA,IACA,QAAA,EAAU,CAAC,EAAE,MAAA,EAAAQ,SAAO,KAAM;AACxB,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,SAAA,CAAU,iBAAA,CAAkBA,OAAM,CAAC,CAAA;AAAA,MACrC;AAAA,IACF;AAAA,GACD,CAAA;AAID,EAAMU,6BAAU,MAAM;AACpB,IAAA,IAAI,gBAAA,EAAkB,aAAa,MAAA,EAAQ;AAEzC,MAAA,qBAAA,CAAsB,MAAM;AAE1B,QAAA,MAAM,EAAE,IAAA,EAAK,GAAI,gBAAA,CAAiB,KAAA;AAClC,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAC3C,UAAA,IAAI,MAAA,EAAQ;AAEV,YAAA,oBAAA,CAAqB;AAAA,cACnB,GAAA,EAAK,OAAO,MAAA,GAAS,CAAA;AAAA,cACrB,MAAM,MAAA,CAAO;AAAA,aACd,CAAA;AAAA,UACH;AAAA,QACF,CAAA,CAAA,MAAQ;AAEN,UAAA,MAAM,IAAA,GAAO,iBAAiB,WAAA,IAAc;AAC5C,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,oBAAA,CAAqB;AAAA,cACnB,GAAA,EAAK,KAAK,MAAA,GAAS,CAAA;AAAA,cACnB,MAAM,IAAA,CAAK;AAAA,aACZ,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,MAAM,CAAC,CAAA;AAG7B,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,aAAA,IAAiB,MAAA,IAAU,CAAC,MAAA,CAAO,SAAA,EAAW;AAChD,MAAA,MAAM,YAAA,GAAe,OAAO,OAAA,EAAQ;AACpC,MAAA,IAAI,UAAU,YAAA,EAAc;AAC1B,QAAA,MAAM,OAAA,GAAU,sBAAA,CAAuB,KAAA,IAAS,EAAA,EAAI,UAAU,YAAY,CAAA;AAC1E,QAAA,MAAA,CAAO,SAAS,UAAA,CAAW,OAAA,EAAS,EAAE,UAAA,EAAY,OAAO,CAAA;AAAA,MAC3D;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,QAAQ,aAAA,EAAe,QAAA,EAAU,YAAY,CAAC,CAAA;AAGzD,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAGrB,EAAA,MAAM,qBAAA,GAA8BA,kBAAA,CAAA,WAAA;AAAA,IAClC,CAAC,OAAA,KAAyB;AACxB,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,gBAAA,EAAkB;AAGlC,MAAA,MAAM,aAAA,GAAgB,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,iBAAiB,MAAM,CAAA;AAC7E,MAAA,MAAM,eAAe,aAAA,EAAe,KAAA;AAEpC,MAAA,0BAAA;AAAA,QACE,MAAA;AAAA,QACA,OAAA;AAAA,QACA,gBAAA,CAAiB,MAAA;AAAA,QACjB,gBAAA,CAAiB,KAAA;AAAA,QACjB,YAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,iBAAA,CAAkB,OAAA,EAAS,iBAAiB,MAAM,CAAA;AAAA,MACpD;AAEA,MAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,gBAAA,EAAkB,YAAA,EAAc,mBAAmB,QAAQ;AAAA,GACtE;AAGA,EAAA,MAAM,oBAAA,GAA6BA,+BAAY,MAAM;AACnD,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,EACzB,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAA,MAAM,iBAAA,GAA0BA,+BAAY,MAAM;AAChD,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,EACzB,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAA,MAAM,qBAAA,GAA8BA,kBAAA,CAAA,WAAA;AAAA,IAClC,CAAC,WAAA,KAA6B;AAC5B,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAE9B,MAAA,MAAM,cAAc,YAAA,CAAa,OAAA;AAGjC,MAAA,MAAA,CAAO,QAAA,CAAS,aAAA,CAAc,WAAA,CAAY,EAAA,EAAI;AAAA,QAC5C,QAAQ,WAAA,CAAY,MAAA;AAAA,QACpB,cAAc,WAAA,CAAY;AAAA,OAC3B,CAAA;AAGD,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,iBAAA,CAAkB,aAAa,WAAW,CAAA;AAAA,MAC5C;AAEA,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,MAAA,CAAO,SAAS,KAAA,EAAM;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,YAAA,EAAc,iBAAiB;AAAA,GAC1C;AAGA,EAAA,MAAM,qBAAA,GAA8BA,+BAAY,MAAM;AACpD,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAE9B,IAAA,MAAM,UAAU,YAAA,CAAa,OAAA;AAG7B,IAAA,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,CAAC,MAAM,GAAA,KAAQ;AAC1C,MAAA,IAAI,IAAA,CAAK,KAAK,IAAA,KAAS,aAAA,IAAiB,KAAK,KAAA,CAAM,EAAA,KAAO,QAAQ,EAAA,EAAI;AACpE,QAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,YAAY,EAAE,IAAA,EAAM,GAAA,EAAK,EAAA,EAAI,GAAA,GAAM,IAAA,CAAK,QAAA,EAAU,EAAE,GAAA,EAAI;AAC/E,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,IAC3B;AAEA,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,iBAAiB,CAAC,CAAA;AAG5C,EAAA,MAAM,iBAAA,GAA0BA,2BAAQ,MAAM;AAC5C,IAAA,IAAI,CAAC,gBAAA,EAAkB,OAAO,EAAC;AAE/B,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,KAAA,CAAM,WAAA,EAAY;AACjD,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,gBAAA,CAAiB,QAAA;AAEpC,IAAA,OAAO,iBAAiB,QAAA,CAAS,MAAA;AAAA,MAC/B,CAAC,QACC,GAAA,CAAI,YAAA,CAAa,aAAY,CAAE,QAAA,CAAS,KAAK,CAAA,IAC7C,GAAA,CAAI,OAAO,WAAA,EAAY,CAAE,SAAS,KAAK,CAAA,IACvC,IAAI,kBAAA,EAAoB,WAAA,EAAY,CAAE,QAAA,CAAS,KAAK;AAAA,KACxD;AAAA,EACF,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAGrB,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,kBAAkB,SAAA,EAAW;AAElC,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAqB;AAC3C,MAAA,QAAQ,EAAE,GAAA;AAAK,QACb,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,kBAAA;AAAA,YAAmB,CAAC,SAClB,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG,iBAAA,CAAkB,SAAS,CAAC;AAAA,WACjD;AACA,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,kBAAA,CAAmB,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,IAAA,GAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AAClD,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,iBAAA,CAAkB,cAAc,CAAA,EAAG;AACrC,YAAA,qBAAA,CAAsB,iBAAA,CAAkB,cAAc,CAAC,CAAA;AAAA,UACzD;AACA,UAAA;AAAA,QACF,KAAK,QAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,oBAAA,EAAqB;AACrB,UAAA;AAAA;AACJ,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,cAAc,CAAA;AACjD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,cAAc,CAAA;AAAA,EACnE,CAAA,EAAG;AAAA,IACD,gBAAA,EAAkB,SAAA;AAAA,IAClB,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,MAAM,oBAAA,GAAuB,CAAC,CAAA,KAAkB;AAC9C,MAAA,IACE,gBAAA,CAAiB,WACjB,CAAC,gBAAA,CAAiB,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EACnD;AACA,QAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,oBAAoB,CAAA;AAAA,IAC7D,GAAG,GAAG,CAAA;AAEN,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AACpB,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,oBAAoB,CAAA;AAAA,IAChE,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAGjB,EAAA,MAAM,aAAA,GAAsBA,2BAAQ,MAAM;AACxC,IAAA,IAAI,CAAC,YAAA,EAAc,OAAO,EAAC;AAC3B,IAAA,MAAM,aAAA,GAAgB,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,YAAA,CAAa,OAAA,CAAQ,MAAM,CAAA;AACjF,IAAA,OAAO,aAAA,EAAe,YAAY,EAAC;AAAA,EACrC,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAqB;AAC3C,MAAA,QAAQ,EAAE,GAAA;AAAK,QACb,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,uBAAA;AAAA,YAAwB,CAAC,IAAA,KACvB,IAAA,CAAK,IAAI,IAAA,GAAO,CAAA,EAAG,cAAc,MAAM;AAAA,WACzC;AACA,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,uBAAA,CAAwB,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,IAAA,GAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AACvD,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,UAAA,IAAI,mBAAA,KAAwB,cAAc,MAAA,EAAQ;AAChD,YAAA,qBAAA,EAAsB;AAAA,UACxB,CAAA,MAAA,IAAW,aAAA,CAAc,mBAAmB,CAAA,EAAG;AAC7C,YAAA,qBAAA,CAAsB,aAAA,CAAc,mBAAmB,CAAC,CAAA;AAAA,UAC1D;AACA,UAAA;AAAA,QACF,KAAK,QAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,iBAAA,EAAkB;AAClB,UAAA;AAAA;AACJ,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,cAAc,CAAA;AACjD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,cAAc,CAAA;AAAA,EACnE,CAAA,EAAG;AAAA,IACD,YAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAMA,6BAAU,MAAM;AACpB,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAa;AACtC,MAAA,MAAM,SAAU,CAAA,CAAkB,MAAA;AAClC,MAAA,MAAM,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,UAAS,GAAI,MAAA;AAGvD,MAAA,IAAI,MAAA,EAAQ;AAEV,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA;AAC/C,UAAA,IAAI,MAAA,EAAQ;AAEV,YAAA,MAAM,gBAAgB,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AAC5D,YAAA,MAAM,aAAA,GAAgB,eAAe,QAAA,CAAS,SAAA;AAAA,cAC5C,CAAC,GAAA,KAAQ,GAAA,CAAI,MAAA,KAAW;AAAA,aAC1B,IAAK,CAAA;AAGL,YAAA,gBAAA,CAAiB;AAAA,cACf,OAAA,EAAS;AAAA,gBACP,EAAA;AAAA,gBACA,MAAA;AAAA,gBACA,MAAA;AAAA,gBACA,YAAA;AAAA,gBACA,QAAA,EAAU,QAAA;AAAA,gBACV,MAAA,EAAQ;AAAA,eACV;AAAA,cACA,QAAA;AAAA,cACA,MAAM,IAAI,OAAA;AAAA,gBACR,MAAA,CAAO,IAAA;AAAA,gBACP,OAAO,MAAA,GAAS,CAAA;AAAA,gBAChB,CAAA;AAAA,gBACA;AAAA;AACF,aACD,CAAA;AACD,YAAA,uBAAA,CAAwB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,UACpD;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,sBAAsB,iBAAiB,CAAA;AACjE,IAAA,OAAO,MACL,QAAA,CAAS,mBAAA,CAAoB,oBAAA,EAAsB,iBAAiB,CAAA;AAAA,EACxE,CAAA,EAAG,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAErB,EAAA,uBACEpJ,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,oBAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,qBAAA;AAAA,QACA,kFAAA;AAAA,QACA,gCAAA;AAAA,QACA,iGAAA;AAAA,QACA,QAAA,IAAY,+BAAA;AAAA,QACZ;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAH,cAAAA;AAAA,UAAC8I,mBAAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACT,qBAAA;AAAA,cACA,gBAAA;AAAA,cACA,+BAAA;AAAA,cACA,wBAAA;AAAA,cACA,wFAAA;AAAA,cACA,6EAAA;AAAA,cACA,2EAAA;AAAA,cACA,kEAAA;AAAA,cACA;AAAA;AACF;AAAA,SACF;AAAA,QAGC,gBAAA,EAAkB,6BACjB9I,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,IAAA;AAAA,YACT,QAAA,EAAU,iBAAA;AAAA,YACV,QAAQ,gBAAA,CAAiB,MAAA;AAAA,YACzB,OAAO,gBAAA,CAAiB,KAAA;AAAA,YACxB,cAAA;AAAA,YACA,QAAA,EAAU,gBAAA;AAAA,YACV,iBAAiB,MAAM;AAAA,YAAC,CAAA;AAAA,YACxB,SAAA,EAAW,qBAAA;AAAA,YACX,QAAA,EAAU,oBAAA;AAAA,YACV,mBAAA,EAAqB,kBAAA;AAAA,YACrB,YAAA,EAAc,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,gBAAA,CAAiB,MAAM,CAAA,EAAG;AAAA;AAAA,SAC1E;AAAA,QAID,gBAAgB,OAAA,IAAWqJ,qBAAAA;AAAA,0BAC1BrJ,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,gBAAA;AAAA,cACL,SAAA,EAAW,EAAA;AAAA,gBACT,kBAAA;AAAA,gBACA,OAAA;AAAA,gBACA,kCAAA;AAAA,gBACA,gEAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,OAAA;AAAA,gBACV,GAAA,EAAK,aAAa,IAAA,CAAK,CAAA;AAAA,gBACvB,IAAA,EAAM,aAAa,IAAA,CAAK,CAAA;AAAA,gBACxB,MAAA,EAAQ;AAAA,eACV;AAAA,cAEA,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,gBAAA,EAElE,CAAA;AAAA,gCACAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACZ,QAAA,EAAA;AAAA,kBAAA,aAAA,CAAc,GAAA,CAAI,CAAC,GAAA,EAAK,GAAA,qBACvBA,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBAEC,SAAA,EAAW,EAAA;AAAA,wBACT,kDAAA;AAAA,wBACA,iBAAA;AAAA,wBACA,QAAQ,mBAAA,IAAuB,WAAA;AAAA,wBAC/B,GAAA,CAAI,MAAA,KAAW,YAAA,CAAa,OAAA,CAAQ,MAAA,IAAU;AAAA,uBAChD;AAAA,sBACA,OAAA,EAAS,MAAM,qBAAA,CAAsB,GAAG,CAAA;AAAA,sBAEvC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAI,wBACHH,cAAAA,CAAC,UAAK,SAAA,EAAU,qCAAA,EACb,cAAI,IAAA,EACP,CAAA;AAAA,wCAEFG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0CAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACZ,QAAA,EAAA;AAAA,4BAAA,YAAA,CAAa,OAAA,CAAQ,MAAA;AAAA,4BACrB,GAAA,CAAI;AAAA,2BAAA,EACP,CAAA;AAAA,0BACC,GAAA,CAAI,sCACHH,cAAAA,CAAC,SAAI,SAAA,EAAU,wCAAA,EACZ,cAAI,kBAAA,EACP;AAAA,yBAAA,EAEJ,CAAA;AAAA,wBACC,GAAA,CAAI,MAAA,KAAW,YAAA,CAAa,OAAA,CAAQ,MAAA,oBACnCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,SAAA,EAAO;AAAA;AAAA,qBAAA;AAAA,oBA1BpD,GAAA,CAAI;AAAA,mBA6BZ,CAAA;AAAA,kCAEDA,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA;AAAA,wBACT,4EAAA;AAAA,wBACA,yBAAA;AAAA,wBACA,mBAAA,KAAwB,cAAc,MAAA,IAAU;AAAA,uBAClD;AAAA,sBACA,OAAA,EAAS,qBAAA;AAAA,sBAET,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,QAAA,EAAM;AAAA;AAAA;AACd,iBAAA,EACF;AAAA,eAAA,EACF;AAAA;AAAA,WACF;AAAA,UACA,QAAA,CAAS;AAAA;AACX;AAAA;AAAA,GACF;AAEJ;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AC1kBrB,IAAM,SAAA,GAAYmH,UAAK,MAAA,CAAyB;EACrD,IAAA,EAAM,WAAA;EAEN,iBAAA,EAAmB,IAAA;EAEnB,UAAA,GAAa;AACX,IAAA,OAAO;MACL,SAAA,EAAW,IAAA;AACX,MAAA,cAAA,EAAgB;AAClB,KAAA;AACF,EAAA,CAAA;EAEA,MAAA,EAAQ,IAAA;EAER,KAAA,EAAO,QAAA;EAEP,UAAA,EAAY,KAAA;EAEZ,oBAAA,EAAsB,IAAA;EAEtB,SAAA,GAAY;AACV,IAAA,OAAO,CAAC,EAAE,GAAA,EAAK,IAAA,EAAM,CAAA;AACvB,EAAA,CAAA;EAEA,UAAA,CAAW,EAAE,gBAAe,EAAG;AAC7B,IAAA,OAAO,CAAC,IAAA,EAAMC,oBAAAA,CAAgB,KAAK,OAAA,CAAQ,cAAA,EAAgB,cAAc,CAAC,CAAA;AAC5E,EAAA,CAAA;EAEA,UAAA,GAAa;AACX,IAAA,OAAO,IAAA;AACT,EAAA,CAAA;AAEA,EAAA,cAAA,EAAgB,MAAM,CAAA;;AAEtB,EAAA,aAAA,EAAe,MAAM;AACnB,IAAA,OAAO;MACL,IAAA,EAAM;AACR,KAAA;AACF,EAAA,CAAA;EAEA,WAAA,GAAc;AACZ,IAAA,OAAO;AACL,MAAA,YAAA,EACE,MACA,CAAC,EAAE,UAAU,KAAA,EAAO,KAAA,EAAO,QAAO,KAAM;AACtC,QAAA,OAAO,SAAS,KAAA,CAAM;AACpB,UAAA,MAAM,SAAS,QAAA,EAAS;UACxB,MACE,QAAA,CAAS,QAAQ,MAAM;AACrB,YAAA,MAAM,EAAE,SAAA,EAAW,WAAA,EAAY,GAAI,KAAA;AAEnC,YAAA,IAAI,SAAA,CAAU,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,KAAK,SAAA,EAAW;AAC9C,cAAA,OAAO,KAAA;AACT,YAAA;AAEA,YAAA,MAAM,EAAE,SAAA,EAAU,GAAI,IAAA,CAAK,OAAA;AAC3B,YAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAA,CAAO,gBAAA;AACnC,YAAA,MAAM,QAAQ,WAAA,IAAgB,SAAA,CAAU,IAAI,YAAA,IAAgB,SAAA,CAAU,MAAM,KAAA,EAAM;AAElF,YAAA,OAAO,KAAA,EAAM,CACV,aAAA,CAAc,EAAE,MAAM,IAAA,CAAK,IAAA,EAAM,CAAA,CACjC,OAAA,CAAQ,CAAC,EAAE,EAAA,EAAI,UAAS,KAAM;AAC7B,cAAA,IAAI,QAAA,IAAY,SAAS,SAAA,EAAW;AAClC,gBAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,gBAAgB,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AAEnF,gBAAA,EAAA,CAAG,YAAY,aAAa,CAAA;AAC9B,cAAA;AAEA,cAAA,OAAO,IAAA;AACT,YAAA,CAAC,EACA,GAAA,EAAI;UACT,CAAC;SACJ,CAAA;AACH,MAAA;AACJ,KAAA;AACF,EAAA,CAAA;EAEA,oBAAA,GAAuB;AACrB,IAAA,OAAO;AACL,MAAA,WAAA,EAAa,MAAM,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,YAAA,EAAa;AACrD,MAAA,aAAA,EAAe,MAAM,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,YAAA;AAC5C,KAAA;AACF,EAAA;AACF,CAAC,CAAA;ACjHD,IAAOkC,cAAAA,GAAQ,SAAA;ACqCf,IAAME,kBAAAA,GAAoB,CACxB,MAAA,KACsB;AACtB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAE,UAAA,EAAY,EAAA,EAAI,cAAc,EAAA,EAAI,QAAA,EAAU,EAAC,EAAE;AAAA,EAC1D;AAEA,EAAA,MAAM,UAAA,GAAa,OAAO,OAAA,EAAQ;AAClC,EAAA,MAAM,WAA8B,EAAC;AACrC,EAAA,IAAI,YAAA,GAAe,EAAA;AACnB,EAAA,IAAI,QAAA,GAAW,CAAA;AAGf,EAAA,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,CAAC,MAAM,IAAA,KAAS;AAC3C,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAC7B,MAAA,YAAA,IAAgB,KAAK,IAAA,IAAQ,EAAA;AAC7B,MAAA,QAAA,IAAA,CAAa,IAAA,CAAK,QAAQ,EAAA,EAAI,MAAA;AAAA,IAChC,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,aAAA,EAAe;AAC3C,MAAA,MAAM,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,YAAA,KAAiB,IAAA,CAAK,KAAA;AAClD,MAAA,MAAM,cAAA,GAAiB,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA;AACzC,MAAA,MAAM,gBAAA,GAAmB,CAAA,EAAG,MAAM,CAAA,EAAG,YAAY,CAAA,CAAA;AAEjD,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,EAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAQ,cAAA,CAAe;AAAA,OACxB,CAAA;AAED,MAAA,YAAA,IAAgB,gBAAA;AAChB,MAAA,QAAA,IAAY,cAAA,CAAe,MAAA;AAAA,IAC7B,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,IAAA,KAAS,WAAA,EAAa;AACzC,MAAA,YAAA,IAAgB,IAAA;AAChB,MAAA,QAAA,IAAY,CAAA;AAAA,IACd;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,UAAA,EAAY,YAAA,EAAc,QAAA,EAAS;AAC9C,CAAA;AAKA,IAAM,gCAAA,GAAmC,CACvC,IAAA,EACA,QAAA,EACA,UAA4C,SAAA,KAChB;AAE5B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,EAAA,MAAM,aAAwC,EAAC;AAE/C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,IAAA,EAAM,QAAA,EAAU,OAAO,CAAA;AACnE,IAAA,MAAM,IAAA,GAAQ,YAAA,CAAwD,OAAA,GAAU,CAAC,CAAA;AACjF,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,UAAA,CAAW,KAAK,IAAI,CAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,KAAK,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,IAAI,CAAA;AAAA,IACpD;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,OAAA,EAAS,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,CAAC,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,EAAC,EAAG;AAAA,GACnF;AACF,CAAA;AAKO,IAAM,iBAAgD,CAAC;AAAA,EAC5D,KAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,cAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,UAAA,GAAa,MAAA;AAAA,EACb,UAAA,GAAa,OAAA;AAAA,EACb,IAAA;AAAA,EACA,WAAA,EAAa,oBAAA;AAAA,EACb,SAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,KAAM;AAGJ,EAAA,MAAM,wBAA8BC,kBAAA,CAAA,KAAA,EAAM;AAC1C,EAAA,MAAM,cAAc,oBAAA,IAAwB,qBAAA;AAE5C,EAAA,MAAM,CAAC,gBAAA,EAAkB,oBAAoB,CAAA,GACrCA,4BAAiC,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAC,cAAA,EAAgB,kBAAkB,CAAA,GAAUA,4BAAS,CAAC,CAAA;AAC7D,EAAA,MAAM,CAAC,gBAAA,EAAkB,oBAAoB,CAAA,GAAUA,kBAAA,CAAA,QAAA,CAAwC,EAAE,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,CAAA;AAGlH,EAAA,MAAM,CAAC,YAAA,EAAc,gBAAgB,CAAA,GAAUA,4BAAoC,IAAI,CAAA;AACvF,EAAA,MAAM,CAAC,mBAAA,EAAqB,uBAAuB,CAAA,GAAUA,4BAAS,CAAC,CAAA;AAGvE,EAAA,MAAM,gBAAgB,KAAA,KAAU,MAAA;AAChC,EAAA,MAAM,oBAAA,GAA6BA,0BAAuB,IAAI,CAAA;AAC9D,EAAA,MAAM,gBAAA,GAAyBA,0BAAuB,IAAI,CAAA;AAG1D,EAAA,MAAM,CAAC,OAAA,EAAS,WAAW,CAAA,GAAUA,4BAAS,KAAK,CAAA;AAEnD,EAAMA,6BAAU,MAAM;AACpB,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,qBAAA,GAAwB,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,GAAG,CAAA,EAAA,CAAA,GAAO,UAAA;AAGzD,EAAA,MAAM,qBAAA,GAA8BA,2BAAQ,MAAM;AAChD,IAAA,OAAO,mCAAA,CAAoC;AAAA,MACzC,QAAA;AAAA,MACA,WAAA;AAAA,MACA,oBAAA,EAAsB,CAAC,KAAA,KAAU;AAC/B,QAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,QAAA,kBAAA,CAAmB,CAAC,CAAA;AAAA,MACtB,CAAA;AAAA,MACA,iBAAA,EAAmB,CAAC,QAAA,EAAU,OAAA,EAAS,MAAA,KAAW;AAAA,MAElD;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,QAAA,EAAU,WAAW,CAAC,CAAA;AAG1B,EAAA,MAAM,SAAShC,eAAAA,CAAU;AAAA,IACvB,UAAA,EAAY;AAAA,MACV,aAAA;AAAA,MACA6B,cAAAA;AAAA,MACAA,cAAAA;AAAA,MACAA,cAAAA;AAAA,MACAjB,6BAAY,SAAA,CAAU;AAAA,QACpB;AAAA,OACD,CAAA;AAAA,MACD,oBAAA,CAAqB,SAAA,CAAU,EAAE,CAAA;AAAA,MACjC,GAAG;AAAA,KACL;AAAA,IACA,OAAA,EAAS,aAAA,GACL,gCAAA,CAAiC,KAAA,IAAS,EAAA,EAAI,QAAA,EAAU,YAAY,CAAA,GACpE,gCAAA,CAAiC,aAAA,IAAiB,EAAA,EAAI,QAAA,EAAU,YAAY,CAAA;AAAA,IAChF,UAAU,CAAC,QAAA;AAAA,IACX,iBAAA,EAAmB,KAAA;AAAA,IACnB,WAAA,EAAa;AAAA,MACX,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,EAAA,CAAG,qBAAA,EAAuB,qBAAqB,CAAA;AAAA,QACtD,KAAA,EAAO,CAAA,YAAA,EAAe,qBAAqB,CAAA,cAAA,EAAiB,UAAU,CAAA;AAAA,OACxE;AAAA,MACA,aAAA,EAAe,CAAC,KAAA,EAAO,KAAA,KAAU;AAE/B,QAAA,IACE,KAAA,CAAM,QAAQ,OAAA,KACb,KAAA,CAAM,WAAW,KAAA,CAAM,OAAA,CAAA,IACxB,CAAC,gBAAA,EAAkB,SAAA,EACnB;AACA,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,YAAA,SAAA,CAAUmB,kBAAAA,CAAkB,MAAM,CAAC,CAAA;AAAA,UACrC;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,KACF;AAAA,IACA,QAAA,EAAU,CAAC,EAAE,MAAA,EAAAX,SAAO,KAAM;AACxB,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,SAAA,CAAUW,kBAAAA,CAAkBX,OAAM,CAAC,CAAA;AAAA,MACrC;AAAA,IACF;AAAA,GACD,CAAA;AAID,EAAMY,6BAAU,MAAM;AACpB,IAAA,IAAI,gBAAA,EAAkB,aAAa,MAAA,EAAQ;AAEzC,MAAA,qBAAA,CAAsB,MAAM;AAE1B,QAAA,MAAM,EAAE,IAAA,EAAK,GAAI,gBAAA,CAAiB,KAAA;AAClC,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAC3C,UAAA,IAAI,MAAA,EAAQ;AAEV,YAAA,oBAAA,CAAqB;AAAA,cACnB,GAAA,EAAK,OAAO,MAAA,GAAS,CAAA;AAAA,cACrB,MAAM,MAAA,CAAO;AAAA,aACd,CAAA;AAAA,UACH;AAAA,QACF,CAAA,CAAA,MAAQ;AAEN,UAAA,MAAM,IAAA,GAAO,iBAAiB,WAAA,IAAc;AAC5C,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,oBAAA,CAAqB;AAAA,cACnB,GAAA,EAAK,KAAK,MAAA,GAAS,CAAA;AAAA,cACnB,MAAM,IAAA,CAAK;AAAA,aACZ,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,MAAM,CAAC,CAAA;AAG7B,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,aAAA,IAAiB,MAAA,IAAU,CAAC,MAAA,CAAO,SAAA,EAAW;AAChD,MAAA,MAAM,YAAA,GAAe,OAAO,OAAA,EAAQ;AACpC,MAAA,IAAI,UAAU,YAAA,EAAc;AAC1B,QAAA,MAAM,OAAA,GAAU,gCAAA;AAAA,UACd,KAAA,IAAS,EAAA;AAAA,UACT,QAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,MAAA,CAAO,SAAS,UAAA,CAAW,OAAA,EAAS,EAAE,UAAA,EAAY,OAAO,CAAA;AAAA,MAC3D;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,QAAQ,aAAA,EAAe,QAAA,EAAU,YAAY,CAAC,CAAA;AAGzD,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAGrB,EAAA,MAAM,qBAAA,GAA8BA,kBAAA,CAAA,WAAA;AAAA,IAClC,CAAC,OAAA,KAAyB;AACxB,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,gBAAA,EAAkB;AAGlC,MAAA,MAAM,aAAA,GAAgB,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,iBAAiB,MAAM,CAAA;AAC7E,MAAA,MAAM,eAAe,aAAA,EAAe,KAAA;AAEpC,MAAA,0BAAA;AAAA,QACE,MAAA;AAAA,QACA,OAAA;AAAA,QACA,gBAAA,CAAiB,MAAA;AAAA,QACjB,gBAAA,CAAiB,KAAA;AAAA,QACjB,YAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,iBAAA,CAAkB,OAAA,EAAS,iBAAiB,MAAM,CAAA;AAAA,MACpD;AAEA,MAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,gBAAA,EAAkB,YAAA,EAAc,mBAAmB,QAAQ;AAAA,GACtE;AAGA,EAAA,MAAM,oBAAA,GAA6BA,+BAAY,MAAM;AACnD,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,EACzB,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAA,MAAM,iBAAA,GAA0BA,+BAAY,MAAM;AAChD,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,EACzB,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAA,MAAM,qBAAA,GAA8BA,kBAAA,CAAA,WAAA;AAAA,IAClC,CAAC,WAAA,KAA6B;AAC5B,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAE9B,MAAA,MAAM,cAAc,YAAA,CAAa,OAAA;AAGjC,MAAA,MAAA,CAAO,QAAA,CAAS,aAAA,CAAc,WAAA,CAAY,EAAA,EAAI;AAAA,QAC5C,QAAQ,WAAA,CAAY,MAAA;AAAA,QACpB,cAAc,WAAA,CAAY;AAAA,OAC3B,CAAA;AAGD,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,iBAAA,CAAkB,aAAa,WAAW,CAAA;AAAA,MAC5C;AAEA,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,MAAA,CAAO,SAAS,KAAA,EAAM;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,YAAA,EAAc,iBAAiB;AAAA,GAC1C;AAGA,EAAA,MAAM,qBAAA,GAA8BA,+BAAY,MAAM;AACpD,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAE9B,IAAA,MAAM,UAAU,YAAA,CAAa,OAAA;AAG7B,IAAA,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,CAAC,MAAM,GAAA,KAAQ;AAC1C,MAAA,IAAI,IAAA,CAAK,KAAK,IAAA,KAAS,aAAA,IAAiB,KAAK,KAAA,CAAM,EAAA,KAAO,QAAQ,EAAA,EAAI;AACpE,QAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,YAAY,EAAE,IAAA,EAAM,GAAA,EAAK,EAAA,EAAI,GAAA,GAAM,IAAA,CAAK,QAAA,EAAU,EAAE,GAAA,EAAI;AAC/E,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,IAC3B;AAEA,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,iBAAiB,CAAC,CAAA;AAG5C,EAAA,MAAM,iBAAA,GAA0BA,2BAAQ,MAAM;AAC5C,IAAA,IAAI,CAAC,gBAAA,EAAkB,OAAO,EAAC;AAE/B,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,KAAA,CAAM,WAAA,EAAY;AACjD,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,gBAAA,CAAiB,QAAA;AAEpC,IAAA,OAAO,iBAAiB,QAAA,CAAS,MAAA;AAAA,MAC/B,CAAC,QACC,GAAA,CAAI,YAAA,CAAa,aAAY,CAAE,QAAA,CAAS,KAAK,CAAA,IAC7C,GAAA,CAAI,OAAO,WAAA,EAAY,CAAE,SAAS,KAAK,CAAA,IACvC,IAAI,kBAAA,EAAoB,WAAA,EAAY,CAAE,QAAA,CAAS,KAAK;AAAA,KACxD;AAAA,EACF,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAGrB,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,kBAAkB,SAAA,EAAW;AAElC,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAqB;AAC3C,MAAA,QAAQ,EAAE,GAAA;AAAK,QACb,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,kBAAA;AAAA,YAAmB,CAAC,SAClB,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG,iBAAA,CAAkB,SAAS,CAAC;AAAA,WACjD;AACA,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,kBAAA,CAAmB,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,IAAA,GAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AAClD,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,iBAAA,CAAkB,cAAc,CAAA,EAAG;AACrC,YAAA,qBAAA,CAAsB,iBAAA,CAAkB,cAAc,CAAC,CAAA;AAAA,UACzD;AACA,UAAA;AAAA,QACF,KAAK,QAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,oBAAA,EAAqB;AACrB,UAAA;AAAA;AACJ,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,cAAc,CAAA;AACjD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,cAAc,CAAA;AAAA,EACnE,CAAA,EAAG;AAAA,IACD,gBAAA,EAAkB,SAAA;AAAA,IAClB,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,MAAM,oBAAA,GAAuB,CAAC,CAAA,KAAkB;AAC9C,MAAA,IACE,gBAAA,CAAiB,WACjB,CAAC,gBAAA,CAAiB,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EACnD;AACA,QAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,oBAAoB,CAAA;AAAA,IAC7D,GAAG,GAAG,CAAA;AAEN,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AACpB,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,oBAAoB,CAAA;AAAA,IAChE,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAGjB,EAAA,MAAM,aAAA,GAAsBA,2BAAQ,MAAM;AACxC,IAAA,IAAI,CAAC,YAAA,EAAc,OAAO,EAAC;AAC3B,IAAA,MAAM,aAAA,GAAgB,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,YAAA,CAAa,OAAA,CAAQ,MAAM,CAAA;AACjF,IAAA,OAAO,aAAA,EAAe,YAAY,EAAC;AAAA,EACrC,CAAA,EAAG,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG3B,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAqB;AAC3C,MAAA,QAAQ,EAAE,GAAA;AAAK,QACb,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,uBAAA;AAAA,YAAwB,CAAC,IAAA,KACvB,IAAA,CAAK,IAAI,IAAA,GAAO,CAAA,EAAG,cAAc,MAAM;AAAA,WACzC;AACA,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,uBAAA,CAAwB,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,IAAA,GAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AACvD,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,UAAA,IAAI,mBAAA,KAAwB,cAAc,MAAA,EAAQ;AAChD,YAAA,qBAAA,EAAsB;AAAA,UACxB,CAAA,MAAA,IAAW,aAAA,CAAc,mBAAmB,CAAA,EAAG;AAC7C,YAAA,qBAAA,CAAsB,aAAA,CAAc,mBAAmB,CAAC,CAAA;AAAA,UAC1D;AACA,UAAA;AAAA,QACF,KAAK,QAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,iBAAA,EAAkB;AAClB,UAAA;AAAA;AACJ,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,cAAc,CAAA;AACjD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,cAAc,CAAA;AAAA,EACnE,CAAA,EAAG;AAAA,IACD,YAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAMA,6BAAU,MAAM;AACpB,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAa;AACtC,MAAA,MAAM,SAAU,CAAA,CAAkB,MAAA;AAClC,MAAA,MAAM,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,UAAS,GAAI,MAAA;AAGvD,MAAA,IAAI,MAAA,EAAQ;AAEV,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA;AAC/C,UAAA,IAAI,MAAA,EAAQ;AAEV,YAAA,MAAM,gBAAgB,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AAC5D,YAAA,MAAM,aAAA,GAAgB,eAAe,QAAA,CAAS,SAAA;AAAA,cAC5C,CAAC,GAAA,KAAQ,GAAA,CAAI,MAAA,KAAW;AAAA,aAC1B,IAAK,CAAA;AAGL,YAAA,gBAAA,CAAiB;AAAA,cACf,OAAA,EAAS;AAAA,gBACP,EAAA;AAAA,gBACA,MAAA;AAAA,gBACA,MAAA;AAAA,gBACA,YAAA;AAAA,gBACA,QAAA,EAAU,QAAA;AAAA,gBACV,MAAA,EAAQ;AAAA,eACV;AAAA,cACA,QAAA;AAAA,cACA,MAAM,IAAI,OAAA;AAAA,gBACR,MAAA,CAAO,IAAA;AAAA,gBACP,OAAO,MAAA,GAAS,CAAA;AAAA,gBAChB,CAAA;AAAA,gBACA;AAAA;AACF,aACD,CAAA;AACD,YAAA,uBAAA,CAAwB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,UACpD;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,sBAAsB,iBAAiB,CAAA;AACjE,IAAA,OAAO,MACL,QAAA,CAAS,mBAAA,CAAoB,oBAAA,EAAsB,iBAAiB,CAAA;AAAA,EACxE,CAAA,EAAG,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAErB,EAAA,uBACEtJ,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,oBAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,sBAAA;AAAA,QACA,6EAAA;AAAA,QACA,gCAAA;AAAA,QACA,iGAAA;AAAA,QACA,QAAA,IAAY,+BAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,SAAA,EAAW,qBAAA;AAAA,QACX,SAAA,EAAW;AAAA,OACb;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAH,cAAAA;AAAA,UAAC8I,mBAAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACT,sBAAA;AAAA,cACA,gCAAA;AAAA,cACA,+BAAA;AAAA,cACA,gDAAA;AAAA,cACA,wFAAA;AAAA,cACA,6EAAA;AAAA,cACA,2EAAA;AAAA,cACA,kEAAA;AAAA,cACA;AAAA;AACF;AAAA,SACF;AAAA,QAGC,gBAAA,EAAkB,6BACjB9I,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,IAAA;AAAA,YACT,QAAA,EAAU,iBAAA;AAAA,YACV,QAAQ,gBAAA,CAAiB,MAAA;AAAA,YACzB,OAAO,gBAAA,CAAiB,KAAA;AAAA,YACxB,cAAA;AAAA,YACA,QAAA,EAAU,gBAAA;AAAA,YACV,iBAAiB,MAAM;AAAA,YAAC,CAAA;AAAA,YACxB,SAAA,EAAW,qBAAA;AAAA,YACX,QAAA,EAAU,oBAAA;AAAA,YACV,mBAAA,EAAqB,kBAAA;AAAA,YACrB,YAAA,EAAc,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,gBAAA,CAAiB,MAAM,CAAA,EAAG;AAAA;AAAA,SAC1E;AAAA,QAID,gBAAgB,OAAA,IAAWqJ,qBAAAA;AAAA,0BAC1BrJ,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,gBAAA;AAAA,cACL,SAAA,EAAW,EAAA;AAAA,gBACT,kBAAA;AAAA,gBACA,OAAA;AAAA,gBACA,kCAAA;AAAA,gBACA,gEAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,OAAA;AAAA,gBACV,GAAA,EAAK,aAAa,IAAA,CAAK,CAAA;AAAA,gBACvB,IAAA,EAAM,aAAa,IAAA,CAAK,CAAA;AAAA,gBACxB,MAAA,EAAQ,IAAA;AAAA;AAAA,gBAER,eAAA,EAAiB,yBAAA;AAAA,gBACjB,KAAA,EAAO;AAAA,eACT;AAAA,cAEA,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EAAmD,QAAA,EAAA,gBAAA,EAElE,CAAA;AAAA,gCACAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACZ,QAAA,EAAA;AAAA,kBAAA,aAAA,CAAc,GAAA,CAAI,CAAC,GAAA,EAAK,GAAA,qBACvBA,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBAEC,SAAA,EAAW,EAAA;AAAA,wBACT,kDAAA;AAAA,wBACA,iBAAA;AAAA,wBACA,QAAQ,mBAAA,IAAuB,WAAA;AAAA,wBAC/B,GAAA,CAAI,MAAA,KAAW,YAAA,CAAa,OAAA,CAAQ,MAAA,IAAU;AAAA,uBAChD;AAAA,sBACA,KAAA,EAAO;AAAA;AAAA,wBAEL,eAAA,EAAiB,GAAA,KAAQ,mBAAA,GACrB,wBAAA,GACA;AAAA,uBACN;AAAA,sBACA,OAAA,EAAS,MAAM,qBAAA,CAAsB,GAAG,CAAA;AAAA,sBAEvC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAI,wBACHH,cAAAA,CAAC,UAAK,SAAA,EAAU,qCAAA,EACb,cAAI,IAAA,EACP,CAAA;AAAA,wCAEFG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0CAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACZ,QAAA,EAAA;AAAA,4BAAA,YAAA,CAAa,OAAA,CAAQ,MAAA;AAAA,4BACrB,GAAA,CAAI;AAAA,2BAAA,EACP,CAAA;AAAA,0BACC,GAAA,CAAI,sCACHH,cAAAA,CAAC,SAAI,SAAA,EAAU,wCAAA,EACZ,cAAI,kBAAA,EACP;AAAA,yBAAA,EAEJ,CAAA;AAAA,wBACC,GAAA,CAAI,MAAA,KAAW,YAAA,CAAa,OAAA,CAAQ,MAAA,oBACnCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,SAAA,EAAO;AAAA;AAAA,qBAAA;AAAA,oBAhCpD,GAAA,CAAI;AAAA,mBAmCZ,CAAA;AAAA,kCAEDA,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA;AAAA,wBACT,4EAAA;AAAA,wBACA,yBAAA;AAAA,wBACA,mBAAA,KAAwB,cAAc,MAAA,IAAU;AAAA,uBAClD;AAAA,sBACA,KAAA,EAAO;AAAA;AAAA,wBAEL,eAAA,EAAiB,mBAAA,KAAwB,aAAA,CAAc,MAAA,GACnD,wBAAA,GACA;AAAA,uBACN;AAAA,sBACA,OAAA,EAAS,qBAAA;AAAA,sBAET,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,QAAA,EAAM;AAAA;AAAA;AACd,iBAAA,EACF;AAAA,eAAA,EACF;AAAA;AAAA,WACF;AAAA,UACA,QAAA,CAAS;AAAA;AACX;AAAA;AAAA,GACF;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;;;ACxpBtB,IAAM,iBAAA,GAA8E;AAAA,EACzF,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,qBAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,6BAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,qBAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,uBAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,sBAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,qBAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,2BAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,4BAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,0BAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM,EAAE,IAAA,EAAM,EAAA,EAAI,OAAO,EAAA;AAC3B;AAMO,SAAS,yBAAA,CACd,SAAA,GAAsC,MAAA,EACtC,UAAA,GAAuC,MAAA,EAC/B;AACR,EAAA,MAAM,eAAgB,SAAA,IAAa,iBAAA,GAC/B,iBAAA,CAAkB,SAA4B,EAAE,IAAA,GAChD,SAAA;AACJ,EAAA,MAAM,gBAAiB,UAAA,IAAc,iBAAA,GACjC,iBAAA,CAAkB,UAA6B,EAAE,KAAA,GACjD,UAAA;AACJ,EAAA,OAAO,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA;AACzC;AChBA,IAAM,eAAA,GAA4E;AAAA,EAChF,IAAA,EAAM;AAAA,IACJ,uBAAA,EAAyB,oBAAA;AAAA,IACzB,4BAAA,EAA8B,oBAAA;AAAA,IAC9B,iBAAA,EAAmB,kBAAA;AAAA,IACnB,YAAA,EAAc,mBAAA;AAAA,IACd,YAAA,EAAc,mBAAA;AAAA,IACd,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,uBAAA,EAAyB,oBAAA;AAAA,IACzB,4BAAA,EAA8B,oBAAA;AAAA,IAC9B,iBAAA,EAAmB,kBAAA;AAAA,IACnB,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,kBAAA;AAAA,IACd,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,uBAAA,EAAyB,oBAAA;AAAA,IACzB,4BAAA,EAA8B,oBAAA;AAAA,IAC9B,iBAAA,EAAmB,kBAAA;AAAA,IACnB,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,kBAAA;AAAA,IACd,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,uBAAA,EAAyB,oBAAA;AAAA,IACzB,4BAAA,EAA8B,oBAAA;AAAA,IAC9B,iBAAA,EAAmB,kBAAA;AAAA,IACnB,YAAA,EAAc,kBAAA;AAAA,IACd,YAAA,EAAc,kBAAA;AAAA,IACd,kBAAA,EAAoB,eAAA;AAAA,IACpB,qBAAA,EAAuB;AAAA;AAE3B,CAAA;AAoGO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,iBAAA;AAAA,EACR,WAAA;AAAA,EACA,gBAAA,GAAmB,SAAA;AAAA,EACnB,mBAAA;AAAA,EACA,gBAAA,GAAmB,QAAA;AAAA,EACnB,gBAAA,GAAmB,IAAA;AAAA,EACnB,mBAAA,GAAsB,KAAA;AAAA,EACtB,oBAAA,GAAuB,KAAA;AAAA,EACvB,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA,GAAY,kBAAA;AAAA,EACZ,UAAA,GAAa,kBAAA;AAAA,EACb,SAAA,GAAY,KAAA;AAAA,EACZ,aAAA,GAAgB,MAAA;AAAA,EAChB,cAAA,GAAiB,MAAA;AAAA,EACjB,OAAA,GAAU,SAAA;AAAA,EACV,WAAA,GAAc,IAAA;AAAA,EACd,qBAAA;AAAA,EACA,0BAAA;AAAA,EACA,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,cAAA,GAAiB,SAAA;AAAA,EACjB,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA,GAAkB;AACpB,CAAA,EAAsB;AAEpB,EAAA,MAAM,SAAS,kBAAA,EAAmB;AAGlC,EAAA,MAAM,cAAA,GAAiB,OAAA,KAAY,SAAA,GAAY,eAAA,CAAgB,OAAO,CAAA,GAAI,MAAA;AAG1E,EAAA,MAAM,8BAAA,GAAiC,mBAAA,IAAuB,cAAA,EAAgB,qBAAA,IAAyB,SAAA;AAGvG,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,SAAA,IAAY;AAAA,EAEd,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAA,IAAW;AACX,IAAA,YAAA,GAAe,KAAK,CAAA;AAAA,EACtB,CAAA;AAGA,EAAA,MAAM,gBAAA,GAAmB,yBAAA,CAA0B,aAAA,EAAe,cAAc,CAAA;AAIhF,EAAA,MAAM,qBAAA,GAAwB,eAAe,cAAA,EAAgB,YAAA;AAE7D,EAAA,MAAM,aAAA,GAAqC;AAAA,IACzC,KAAA,EAAO,SAAA;AAAA,IACP,GAAI,SAAA,GACA,EAAE,MAAA,EAAQ,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAA,EAAW,GACnE,EAAE,SAAA,EAAW,UAAA,EAAW;AAAA,IAE5B,GAAI,qBAAA,IAAyB,EAAE,WAAA,EAAa,qBAAA;AAAsB,GACpE;AAGA,EAAA,MAAM,0BAAA,GAA6B,qBAAA,IAAyB,cAAA,EAAgB,uBAAA,IAA2B,MAAA,CAAO,uBAAA;AAC9G,EAAA,MAAM,uBAAA,GAA0B,8BAA8B,cAAA,EAAgB,4BAAA;AAC9E,EAAA,MAAM,oBAAA,GAAuB,eAAA,IAAmB,cAAA,EAAgB,iBAAA,IAAqB,MAAA,CAAO,iBAAA;AAG5F,EAAA,MAAM,oBAAoB,OAAA,KAAY,SAAA;AAGtC,EAAA,MAAM,gBAAA,GAAmB,eAAe,CAAC,SAAA,IAAa,CAAC,CAAC,uBAAA,IAA2B,CAAC,CAAC,WAAA;AAGrF,EAAA,MAAM,4BAA4B,CAAC,WAAA,IAAe,qBAAqB,CAAC,SAAA,IAAa,CAAC,CAAC,WAAA;AAEvF,EAAA,MAAM,YAAA,GAAoC;AAAA,IACxC,GAAI,SAAA,IAAa;AAAA,MACf,eAAA,EAAiB,cAAA;AAAA,MACjB,UAAA,EAAY,QAAA;AAAA,MACZ,aAAA,EAAe,QAAA;AAAA,MACf,WAAA,EAAa,QAAA;AAAA,MACb,YAAA,EAAc;AAAA,KAChB;AAAA,IACA,GAAI,CAAC,gBAAA,IAAoB,0BAAA,IAA8B,CAAC,SAAA,IAAa,EAAE,iBAAiB,0BAAA,EAA2B;AAAA,IACnH,GAAI,CAAC,gBAAA,IAAoB,oBAAA,IAAwB,EAAE,OAAO,oBAAA;AAAqB,GACjF;AAGA,EAAA,MAAM,cAAA,GAAiB,EAAA;AAAA,IACrB,kBAAA;AAAA,IACA,SAAA,IAAa;AAAA,GACf;AAGA,EAAA,MAAM,oBAAA,GAAuB,EAAA;AAAA,IAC3B,wBAAA;AAAA,IACA,SAAA,IAAa;AAAA,GACf;AAEA,EAAA,MAAM,UAAA,GAAkC;AAAA,IACtC,GAAI,mBAAA,IAAuB,EAAE,eAAA,EAAiB,mBAAA;AAAoB,GACpE;AAEA,EAAA,MAAM,YAAA,GAAoC;AAAA,IACxC,GAAI,qBAAA,IAAyB,EAAE,eAAA,EAAiB,qBAAA;AAAsB,GACxE;AAGA,EAAA,MAAM,kBAAA,GAAqB,WAAA,IAAe,cAAA,EAAgB,YAAA,IAAgB,MAAA,CAAO,8BAAA;AACjF,EAAA,MAAM,uBAAuB,MAAA,CAAO,wBAAA;AACpC,EAAA,MAAM,qBAAqB,MAAA,CAAO,8BAAA;AAClC,EAAA,MAAM,uBAAuB,MAAA,CAAO,wBAAA;AACpC,EAAA,MAAM,yBAAyB,MAAA,CAAO,0BAAA;AAEtC,EAAA,MAAM,kBAAA,GAA0C;AAAA,IAC9C,GAAI,kBAAA,IAAsB,8BAAA,KAAmC,SAAA,IAAa;AAAA,MACxE,eAAA,EAAiB,kBAAA;AAAA,MACjB,WAAA,EAAa;AAAA,KACf;AAAA,IACA,GAAI,oBAAA,IAAwB,8BAAA,KAAmC,SAAA,IAAa;AAAA,MAC1E,KAAA,EAAO;AAAA;AACT,GACF;AAEA,EAAA,MAAM,kBAAA,GAA0C;AAAA,IAC9C,GAAI,kBAAA,IAAsB,EAAE,eAAA,EAAiB,kBAAA,EAAmB;AAAA,IAChE,GAAI,oBAAA,IAAwB,EAAE,KAAA,EAAO,oBAAA,EAAqB;AAAA,IAC1D,GAAI,sBAAA,IAA0B,EAAE,WAAA,EAAa,sBAAA;AAAuB,GACtE;AAEA,EAAA,uBACEA,cAAAA,CAAC,MAAA,EAAA,EAAO,MAAY,YAAA,EAClB,QAAA,kBAAAG,gBAAC,YAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAH,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,gBAAA,IAAoB,gBAAgB,kBAAkB;AAAA;AAAA,KACjG;AAAA,oBAGAG,eAAAA;AAAA,MAAiBuJ,0BAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,yBAAA;AAAA,UACA,+CAAA;AAAA,UACA,uCAAA;AAAA,UACA,sCAAA;AAAA,UACA,cAAA;AAAA,UACA,gBAAA;AAAA,UACA,eAAA;AAAA,UACA,iBAAA;AAAA,UACA,oBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QAGN,QAAA,EAAA;AAAA,UAAA,gBAAA;AAAA;AAAA,4BAECvJ,eAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,0CAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBAGA,QAAA,EAAA;AAAA,kCAAAH,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA,CAAG,wCAAA,EAA0C,eAAA,IAAmB,OAAO,CAAA;AAAA,sBAClF,KAAA,EAAO;AAAA,wBACL,GAAI,0BAAA,IAA8B,EAAE,eAAA,EAAiB,0BAAA,EAA2B;AAAA,wBAChF,GAAI,oBAAA,IAAwB,EAAE,KAAA,EAAO,oBAAA;AAAqB,uBAC5D;AAAA,sBAEA,QAAA,kBAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,gBACrB,QAAA,EAAA,KAAA,EACH;AAAA;AAAA,mBACF;AAAA,kCAEAA,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,2CAAA;AAAA,sBACV,KAAA,EAAO;AAAA,wBACL,eAAA,EAAiB,uBAAA;AAAA,wBACjB,GAAI,oBAAA,IAAwB,EAAE,KAAA,EAAO,oBAAA;AAAqB,uBAC5D;AAAA,sBAEA,QAAA,kBAAAA,eAAC,iBAAA,EAAA,EAAkB,SAAA,EAAW,GAAG,oBAAA,EAAsB,gBAAgB,GACpE,QAAA,EAAA,WAAA,EACH;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA;AAAA,4BAGAG,eAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,4BAAA;AAAA,kBACA,CAAC,SAAA,IAAa,UAAA;AAAA,kBACd,yBAAA,IAA6B,MAAA;AAAA,kBAC7B,eAAA,IAAmB,OAAA;AAAA,kBACnB;AAAA,iBACF;AAAA,gBACA,KAAA,EAAO,YAAA;AAAA,gBAEP,QAAA,EAAA;AAAA,kCAAAH,cAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,cAAA,EACrB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,kBACC,WAAA,oBACCA,cAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAW,EAAA;AAAA,oBAC5B,oBAAA;AAAA,oBACA,yBAAA,IAA6B;AAAA,qBAE5B,QAAA,EAAA,WAAA,EACH;AAAA;AAAA;AAAA;AAEJ,WAAA;AAAA,0BAIFA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,iBAAA;AAAA,gBACA,0CAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,KAAA,EAAO,UAAA;AAAA,cAEN;AAAA;AAAA,WACH;AAAA,0BAGAA,cAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,eAAe,CAAA;AAAA,cACpE,KAAA,EAAO,YAAA;AAAA,cAEN,QAAA,EAAA,aAAA;AAAA;AAAA,gBAEC;AAAA;AAAA;AAAA,gCAGAG,eAAAA,CAAAuE,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,kBAAA,gBAAA,oBACC1E,cAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,SAAA,EAAU,mBAAA;AAAA,sBACV,OAAA,EAAQ,SAAA;AAAA,sBACR,OAAA,EAAS,YAAA;AAAA,sBACT,KAAA,EAAO,kBAAA;AAAA,sBAEN,QAAA,EAAA;AAAA;AAAA,mBACH;AAAA,kCAEFG,eAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,SAAA,EAAU,oBAAA;AAAA,sBACV,OAAA,EAAS,8BAAA;AAAA,sBACT,OAAA,EAAS,aAAA;AAAA,sBACT,KAAA,EAAO,kBAAA;AAAA,sBACP,UAAU,mBAAA,IAAuB,oBAAA;AAAA,sBAEhC,QAAA,EAAA;AAAA,wBAAA,mBAAA,mBACCH,cAAAA,CAAC2J,mBAAA,EAAA,EAAQ,SAAA,EAAU,6BAA4B,CAAA,GAE/C,gBAAA;AAAA,wBAED;AAAA;AAAA;AAAA;AACH,iBAAA,EACF;AAAA;AAAA;AAAA,WAEJ;AAAA,UAGC,mCACCxJ,eAAAA;AAAA,YAAiBuJ,0BAAA,CAAA,KAAA;AAAA,YAAhB;AAAA,cACC,SAAA,EAAU,+QAAA;AAAA,cACV,KAAA,EACE,SAAA,GACI,EAAE,KAAA,EAAO,OAAA,KACT,oBAAA,GACA,EAAE,KAAA,EAAO,oBAAA,EAAqB,GAC9B,MAAA;AAAA,cAGN,QAAA,EAAA;AAAA,gCAAA1J,cAAAA,CAACI,aAAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,gCACvBJ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA;AACjC;AAAA;AAAA;AAEJ,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AC7bA,IAAM,uBAAA,GAAkG;AAAA,EACtG,WAAA,EAAa;AAAA,IACX,YAAA,EAAc,kBAAA;AAAA,IACd,oBAAA,EAAsB,kBAAA;AAAA,IACtB,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,YAAA,EAAc,mBAAA;AAAA,IACd,oBAAA,EAAsB,mBAAA;AAAA,IACtB,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,YAAA,EAAc,kBAAA;AAAA,IACd,oBAAA,EAAsB,kBAAA;AAAA,IACtB,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,YAAA,EAAc,kBAAA;AAAA,IACd,oBAAA,EAAsB,kBAAA;AAAA,IACtB,kBAAA,EAAoB;AAAA;AAExB,CAAA;AAgDO,SAAS,mBAAA,CAAoB;AAAA,EAClC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,YAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,gBAAA,GAAmB,IAAA;AAAA,EACnB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,EAAS,gBAAA;AAAA,EACT,QAAA,GAAW,KAAA;AAAA,EACX,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA,GAAgB,MAAA;AAAA,EAChB,cAAA,GAAiB;AACnB,CAAA,EAA6B;AAC3B,EAAA,MAAM,CAAC,gBAAA,EAAkB,oBAAoB,CAAA,GAAU4J,4BAAS,KAAK,CAAA;AACrE,EAAA,MAAM,SAAS,kBAAA,EAAmB;AAGlC,EAAA,MAAM,cAAA,GAAiB,OAAA,KAAY,SAAA,GAAY,uBAAA,CAAwB,OAAO,CAAA,GAAI,MAAA;AAGlF,EAAA,MAAM,aAAa,gBAAA,IAAoB,gBAAA;AAGvC,EAAA,MAAM,sBAAA,GAAyB,YAAA,KAAiB,gBAAA,GAAmB,SAAA,GAAY,IAAA,CAAA;AAG/E,EAAA,MAAM,qBAAA,GAAwB,WAAA,IAAe,cAAA,EAAgB,YAAA,IAAgB,oBAAA;AAC7E,EAAA,MAAM,6BAAA,GAAgC,kBAAA,IAAsB,cAAA,EAAgB,oBAAA,IAAwB,MAAA,CAAO,8BAAA;AAG3G,EAAA,MAAM,oBAAA,GAA4C;AAAA,IAChD,GAAI,MAAA,CAAO,8BAAA,IAAkC,EAAE,eAAA,EAAiB,OAAO,8BAAA,EAA+B;AAAA,IACtG,GAAI,MAAA,CAAO,wBAAA,IAA4B,EAAE,KAAA,EAAO,OAAO,wBAAA,EAAyB;AAAA,IAChF,GAAI,MAAA,CAAO,0BAAA,IAA8B,EAAE,WAAA,EAAa,OAAO,0BAAA;AAA2B,GAC5F;AAGA,EAAA,MAAM,qBAAA,GAA6C;AAAA,IACjD,GAAI,6BAAA,IAAiC;AAAA,MACnC,eAAA,EAAiB,6BAAA;AAAA,MACjB,WAAA,EAAa,6BAAA;AAAA,MACb,KAAA,EAAO;AAAA;AACT,GACF;AAGA,EAAA,MAAM,iBAAA,GAAoB,yBAAA,CAA0B,aAAA,EAAe,cAAc,CAAA;AAGjF,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,SAAA,EAAU;AACzB,MAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,QAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,QAAA,MAAM,MAAA;AAAA,MACR;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,CAAA,CAAA,MAAQ;AAAA,IAER,CAAA,SAAE;AACA,MAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,QAAA,IAAW;AACX,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAGA,EAAA,MAAM,UAAA,GAAmBA,0BAA0B,IAAI,CAAA;AAEvD,EAAA,uBACE5J,cAAAA,CAAC,MAAA,EAAA,EAAO,MAAY,YAAA,EAClB,QAAA,kBAAAG,gBAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAH,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,4BAAA;AAAA,UACA,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA,KAAA,EAAO,EAAE,cAAA,EAAgB,WAAA;AAAY;AAAA,KACvC;AAAA,oBAEAG,eAAAA;AAAA,MAAiB0J,0BAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,4BAAA;AAAA,UACA,iCAAA;AAAA,UACA,uCAAA;AAAA,UACA,yBAAA;AAAA,UACA,cAAA;AAAA,UACA,iBAAA;AAAA,UACA,iBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,kBAAA;AAAA,UACP,YAAA,EAAc,MAAA;AAAA,UACd,SAAA,EAAW,aAAa,qBAAqB,CAAA,CAAA;AAAA,UAC7C,SAAA,EAAW;AAAA,SACb;AAAA,QACA,eAAA,EAAiB,CAAC,CAAA,KAAM;AACtB,UAAA,IAAA,CAAK,YAAY,aAAA,IAAiB,OAAA,KAAY,SAAA,KAAc,gBAAA,IAAoB,WAAW,OAAA,EAAS;AAClG,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,UAAA,CAAW,QAAQ,KAAA,EAAM;AAAA,UAC3B;AAAA,QACF,CAAA;AAAA,QAGA,QAAA,EAAA;AAAA,0BAAA1J,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAAiB6J,0BAAA,CAAA,KAAA,EAAhB,EAAsB,SAAA,EAAU,6EAC9B,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,YAEC,QAAA,mBACC7J,cAAAA,CAAiB6J,0BAAA,CAAA,WAAA,EAAhB,EAA4B,OAAA,EAAO,IAAA,EAClC,QAAA,kBAAA7J,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EACZ,QAAA,EACH,CAAA,EACF,CAAA,GACE,WAAA,mBACFA,cAAAA,CAAiB6J,wCAAhB,EAA4B,SAAA,EAAU,8EAAA,EACpC,QAAA,EAAA,WAAA,EACH,CAAA,GACE;AAAA,WAAA,EACN,CAAA;AAAA,0BAGA7J,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EAAsD,CAAA;AAAA,0BAGrEG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EACZ,QAAA,EAAA;AAAA,YAAA,gBAAA,oBACCH,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,UAAA;AAAA,gBACL,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,2BAAA;AAAA,gBACV,OAAA,EAAQ,SAAA;AAAA,gBACR,OAAA,EAAS,aAAA;AAAA,gBACT,QAAA,EAAU,UAAA;AAAA,gBACV,KAAA,EAAO,oBAAA;AAAA,gBAEN,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,4BAEFG,eAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,2BAAA;AAAA,gBACV,OAAA,EAAS,cAAA;AAAA,gBACT,UAAU,UAAA,IAAc,QAAA;AAAA,gBACxB,KAAA,EAAO,qBAAA;AAAA,gBAEN,QAAA,EAAA;AAAA,kBAAA,UAAA,oBAAcH,cAAAA,CAAC2J,mBAAAA,EAAA,EAAQ,WAAU,2BAAA,EAA4B,CAAA;AAAA,kBAC7D;AAAA;AAAA;AAAA;AACH,WAAA,EACF;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACxQA,IAAM,SAAS,CAAC;AAAA,EACd,qBAAA,GAAwB,IAAA;AAAA,EACxB,GAAG;AACL,CAAA,qBACE3J,cAAAA,CAAC8J,WAAA,CAAgB,MAAhB,EAAqB,qBAAA,EAA+C,GAAG,KAAA,EAAO;AAEjF,MAAA,CAAO,WAAA,GAAc,QAAA;AAErB,IAAM,gBAAgBA,WAAA,CAAgB;AACtC,IAAM,eAAeA,WAAA,CAAgB;AACrC,IAAM,cAAcA,WAAA,CAAgB;AAEpC,IAAM,aAAA,GAAsBC,8BAG1B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B/J,cAAAA;AAAA,EAAC8J,WAAA,CAAgB,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,wJAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,aAAA,GAAsBC,kBAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpC5J,eAAAA,CAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAAH,eAAC,aAAA,EAAA,EAAc,CAAA;AAAA,kBACfG,eAAAA;AAAA,IAAC2J,WAAA,CAAgB,OAAA;AAAA,IAAhB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA9J,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EAAmD,CAAA;AAAA,QACjE;AAAA;AAAA;AAAA;AACH,CAAA,EACF,CACD;AACD,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,eAAe,CAAC;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEA,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA;AAAA,IACnE,GAAG;AAAA;AACN;AAEF,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,eAAe,CAAC;AAAA,EACpB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEA,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,IACzD,GAAG;AAAA;AACN;AAEF,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,IAAM,WAAA,GAAoB+J,8BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B/J,cAAAA;AAAA,EAAC8J,WAAA,CAAgB,KAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,mDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAE1B,IAAM,iBAAA,GAA0BC,8BAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B/J,cAAAA;AAAA,EAAC8J,WAAA,CAAgB,WAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,iBAAA,CAAkB,WAAA,GAAc,mBAAA;ACzFzB,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,MAAM,SAAA,GAAkBE,+BAAY,MAAM;AACxC,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,MAAA,CAAO,eAAe,UAAA,EAAY;AAC5E,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA;AAAA,EAClC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,CAAC,OAAA,EAAS,WAAW,CAAA,GAAUA,4BAAkB,KAAK,CAAA;AAE5D,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,MAAA,CAAO,eAAe,UAAA,EAAY;AAC5E,MAAA;AAAA,IACF;AACA,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AAChD,IAAA,WAAA,CAAY,iBAAiB,OAAO,CAAA;AAEpC,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA+B,WAAA,CAAY,MAAM,OAAO,CAAA;AAG/E,IAAA,IAAI,OAAO,gBAAA,CAAiB,gBAAA,KAAqB,UAAA,EAAY;AAC3D,MAAA,gBAAA,CAAiB,gBAAA,CAAiB,UAAU,aAAa,CAAA;AACzD,MAAA,OAAO,MAAM,gBAAA,CAAiB,mBAAA,CAAoB,QAAA,EAAU,aAAa,CAAA;AAAA,IAC3E;AACA,IAAA,gBAAA,CAAiB,YAAY,aAAa,CAAA;AAC1C,IAAA,OAAO,MAAM,gBAAA,CAAiB,cAAA,CAAe,aAAa,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,KAAA,EAAO,SAAS,CAAC,CAAA;AAErB,EAAA,OAAO,OAAA;AACT;ACvCA,IAAM,SAAA,GAA+BC,6BAAA,CAAA;AAErC,IAAM,aAAA,GAAsBC,8BAG1B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BlK,cAAAA;AAAA,EAAoBiK,6BAAA,CAAA,IAAA;AAAA,EAAnB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,IAClC,GAAG;AAAA;AACN,CACD;AACD,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,mBAAyBC,kBAAA,CAAA,UAAA,CAG7B,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpClK,cAAAA,CAAoBiK,6BAAA,CAAA,MAAA,EAAnB,EAA0B,SAAA,EAAU,QACnC,QAAA,kBAAA9J,eAAAA;AAAA,EAAoB8J,6BAAA,CAAA,OAAA;AAAA,EAAnB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,8HAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACDjK,cAAAA,CAACW,uBAAAA,EAAA,EAAY,WAAU,oDAAA,EAAqD;AAAA;AAAA;AAC9E,CAAA,EACF,CACD;AACD,gBAAA,CAAiB,cAAiCsJ,6BAAA,CAAA,OAAA,CAAQ,WAAA;AAE1D,IAAM,gBAAA,GAAyBC,kBAAA,CAAA,UAAA,CAG7B,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpClK,cAAAA;AAAA,EAAoBiK,6BAAA,CAAA,OAAA;AAAA,EAAnB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAU,0HAAA;AAAA,IACT,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAjK,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,WAAA,EAAa,SAAS,GAAI,QAAA,EAAS;AAAA;AACxD,CACD;AACD,gBAAA,CAAiB,cAAiCiK,6BAAA,CAAA,OAAA,CAAQ,WAAA;AC9C1D,IAAM,QAAA,GAAiBE,8BAGrB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BnK,cAAAA;AAAA,EAAmBoK,4BAAA,CAAA,IAAA;AAAA,EAAlB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,gTAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAApK,cAAAA;AAAA,MAAmBoK,4BAAA,CAAA,SAAA;AAAA,MAAlB;AAAA,QACC,SAAA,EAAW,GAAG,+CAA+C,CAAA;AAAA,QAE7D,QAAA,kBAAApK,cAAAA,CAACa,iBAAAA,EAAA,EAAM,WAAU,SAAA,EAAU;AAAA;AAAA;AAC7B;AACF,CACD;AACD,QAAA,CAAS,cAAgCuJ,4BAAA,CAAA,IAAA,CAAK,WAAA;ACnB9C,IAAM,YAAA,GAAqCC,gCAAA,CAAA;AAC3C,IAAM,mBAAA,GAA4CA,gCAAA,CAAA;AAClD,IAAM,iBAAA,GAA0CA,gCAAA,CAAA;AAChD,IAAM,kBAAA,GAA2CA,gCAAA,CAAA;AACjD,IAAM,eAAA,GAAwCA,gCAAA,CAAA;AAC9C,IAAM,sBAAA,GAA+CA,gCAAA,CAAA;AAErD,IAAM,sBAAA,GAA+BC,kBAAA,CAAA,UAAA,CAKnC,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC3CnK,eAAAA;AAAA,EAAuBkK,gCAAA,CAAA,UAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,sIAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACDrK,cAAAA,CAACkB,wBAAAA,EAAA,EAAa,WAAU,iBAAA,EAAkB;AAAA;AAAA;AAC5C,CACD;AACD,sBAAA,CAAuB,cAAoCmJ,gCAAA,CAAA,UAAA,CAAW,WAAA;AAEtE,IAAM,sBAAA,GAA+BC,8BAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BtK,cAAAA;AAAA,EAAuBqK,gCAAA,CAAA,UAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,ubAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,sBAAA,CAAuB,cAAoCA,gCAAA,CAAA,UAAA,CAAW,WAAA;AAEtE,IAAM,mBAAA,GAA4BC,kBAAA,CAAA,UAAA,CAGhC,CAAC,EAAE,WAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,IAAS,GAAA,qBAC1CtK,cAAAA,CAAuBqK,gCAAA,CAAA,MAAA,EAAtB,EACC,QAAA,kBAAArK,cAAAA;AAAA,EAAuBqK,gCAAA,CAAA,OAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,ubAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,mBAAA,CAAoB,cAAoCA,gCAAA,CAAA,OAAA,CAAQ,WAAA;AAEhE,IAAM,gBAAA,GAAyBC,kBAAA,CAAA,UAAA,CAK7B,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBACjCtK,cAAAA;AAAA,EAAuBqK,gCAAA,CAAA,IAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,iOAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,gBAAA,CAAiB,cAAoCA,gCAAA,CAAA,IAAA,CAAK,WAAA;AAE1D,IAAM,wBAAA,GAAiCC,kBAAA,CAAA,UAAA,CAGrC,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC7CnK,eAAAA;AAAA,EAAuBkK,gCAAA,CAAA,YAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,sOAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAArK,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EACd,0BAAAA,cAAAA,CAAuBqK,gCAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAArK,eAACa,iBAAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,GAC7B,CAAA,EACF,CAAA;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,wBAAA,CAAyB,cAAoCwJ,gCAAA,CAAA,YAAA,CAAa,WAAA;AAE1E,IAAM,qBAAA,GAA8BC,kBAAA,CAAA,UAAA,CAGlC,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCnK,eAAAA;AAAA,EAAuBkK,gCAAA,CAAA,SAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,sOAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAArK,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EACd,0BAAAA,cAAAA,CAAuBqK,gCAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAArK,eAAC2C,kBAAAA,EAAA,EAAO,SAAA,EAAU,sBAAA,EAAuB,GAC3C,CAAA,EACF,CAAA;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,qBAAA,CAAsB,cAAoC0H,gCAAA,CAAA,SAAA,CAAU,WAAA;AAEpE,IAAM,iBAAA,GAA0BC,kBAAA,CAAA,UAAA,CAK9B,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBACjCtK,cAAAA;AAAA,EAAuBqK,gCAAA,CAAA,KAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,mCAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,iBAAA,CAAkB,cAAoCA,gCAAA,CAAA,KAAA,CAAM,WAAA;AAE5D,IAAM,qBAAA,GAA8BC,8BAGlC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BtK,cAAAA;AAAA,EAAuBqK,gCAAA,CAAA,SAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,IAClD,GAAG;AAAA;AACN,CACD;AACD,qBAAA,CAAsB,cAAoCA,gCAAA,CAAA,SAAA,CAAU,WAAA;AAEpE,IAAM,uBAAuB,CAAC;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA6C;AAC3C,EAAA,uBACErK,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,4CAAA,EAA8C,SAAS,CAAA;AAAA,MACpE,GAAG;AAAA;AAAA,GACN;AAEJ;AACA,oBAAA,CAAqB,WAAA,GAAc,sBAAA;ACtKnC,IAAM,SAAA,GAA+BuK,6BAAA,CAAA;AACrC,IAAM,gBAAA,GAAsCA,6BAAA,CAAA;AAE5C,IAAM,gBAAA,GAAyBC,kBAAA,CAAA,UAAA,CAG7B,CAAC,EAAE,SAAA,EAAW,KAAA,GAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,EAAM,EAAG,wBAC5DxK,cAAAA;AAAA,EAAoBuK,6BAAA,CAAA,OAAA;AAAA,EAAnB;AAAA,IACC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,4aAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,gBAAA,CAAiB,cAAiCA,6BAAA,CAAA,OAAA,CAAQ,WAAA;AChB1D,IAAME,MAAAA,GAAcC,kBAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,uBACE1K,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,4FAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACAyK,MAAAA,CAAM,WAAA,GAAc,OAAA;AChBpB,IAAM,MAAA,GAAeE,8BAGnB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B3K,cAAAA;AAAA,EAAkB4K,2BAAA,CAAA,IAAA;AAAA,EAAjB;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,oXAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IACJ,GAAA;AAAA,IAEA,QAAA,kBAAA5K,cAAAA;AAAA,MAAkB4K,2BAAA,CAAA,KAAA;AAAA,MAAjB;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT;AAAA;AACF;AAAA;AACF;AACF,CACD;AACD,MAAA,CAAO,cAA+BA,2BAAA,CAAA,IAAA,CAAK,WAAA;ACjB3C,IAAM,QAAA,GAAiBC,kBAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,uBACE7K,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,iFAAA;AAAA,UACA,gCAAA;AAAA,UACA,mCAAA;AAAA,UACA,qGAAA;AAAA,UACA,iDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;ACrBvB,IAAM8K,UAAAA,GAAkBC,kBAAA,CAAA,UAAA,CAGtB,CAAC,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,UAAA,GAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,wBACzE/K,cAAAA;AAAA,EAAoBgL,6BAAA,CAAA,IAAA;AAAA,EAAnB;AAAA,IACC,GAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,oBAAA;AAAA,MACA,WAAA,KAAgB,eAAe,gBAAA,GAAmB,gBAAA;AAAA,MAClD;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACDF,UAAAA,CAAU,cAAiCE,6BAAA,CAAA,IAAA,CAAK,WAAA;AClBhD,IAAM,WAAA,GAAmCC,+BAAA,CAAA;AACzC,IAAMC,mBAAAA,GAA0CD,+BAAA,CAAA;AAChD,IAAME,mBAAAA,GAA0CF,+BAAA,CAAA;ACAhD,IAAM,UAAA,GAAmBG,kBAAA,CAAA,UAAA,CAGvB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCjL,eAAAA;AAAA,EAAqBkL,8BAAA,CAAA,IAAA;AAAA,EAApB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,IAClD,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAArL,cAAAA,CAAqBqL,8BAAA,CAAA,QAAA,EAApB,EAA6B,SAAA,EAAU,mCACrC,QAAA,EACH,CAAA;AAAA,sBACArL,eAAC,SAAA,EAAA,EAAU,CAAA;AAAA,sBACXA,cAAAA,CAAqBqL,8BAAA,CAAA,MAAA,EAApB,EAA2B;AAAA;AAAA;AAC9B,CACD;AACD,UAAA,CAAW,cAAkCA,8BAAA,CAAA,IAAA,CAAK,WAAA;AAElD,IAAM,SAAA,GAAkBD,kBAAA,CAAA,UAAA,CAGtB,CAAC,EAAE,SAAA,EAAW,WAAA,GAAc,UAAA,EAAY,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpDpL,cAAAA;AAAA,EAAqBqL,8BAAA,CAAA,mBAAA;AAAA,EAApB;AAAA,IACC,GAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,+CAAA;AAAA,MACA,gBAAgB,UAAA,IAAc,oDAAA;AAAA,MAC9B,gBAAgB,YAAA,IAAgB,sDAAA;AAAA,MAChC;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAArL,cAAAA,CAAqBqL,8BAAA,CAAA,eAAA,EAApB,EAAoC,WAAU,wCAAA,EAAyC;AAAA;AAC1F,CACD;AACD,SAAA,CAAU,cAAkCA,8BAAA,CAAA,mBAAA,CAAoB,WAAA;ACtChE,IAAM,IAAA,GAAaC,kBAAA,CAAA,UAAA;AAAA,EACjB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBtL,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,4DAA4D,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEpH;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAEnB,IAAM,UAAA,GAAmBsL,kBAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBtL,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,iCAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEzF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAEzB,IAAM,SAAA,GAAkBsL,kBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBtL,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAU,SAAA,EAAW,EAAA,CAAG,sDAAsD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE7G;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAExB,IAAM,eAAA,GAAwBsL,kBAAA,CAAA,UAAA;AAAA,EAC5B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBtL,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAU,SAAA,EAAW,EAAA,CAAG,iCAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEvF;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAE9B,IAAM,WAAA,GAAoBsL,kBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBtL,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,YAAY,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEpE;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAE1B,IAAM,UAAA,GAAmBsL,kBAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBtL,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,8BAA8B,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEtF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;ACpClB,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAW,IAAA,GAAO,MAAK,EAAiB;AAChE,EAAA,MAAM,cAAc,EAAE,EAAA,EAAI,WAAW,EAAA,EAAI,SAAA,EAAW,IAAI,WAAA,EAAY;AACpE,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,qFAAA,EAAuF,WAAA,CAAY,IAAI,GAAG,SAAS,CAAA;AAAA,MACjI,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MAEX,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA,GACtC;AAEJ;ACZA,IAAM,cAAA,GAAiBH,0BAAAA;AAAA,EACrB,obAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,oBAAA;AAAA,QACT,EAAA,EAAI,oBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,OAAA,EAAS,SAAA,EAAW,MAAM,SAAA;AAAU;AAE3D;AAEA,IAAM,MAAA,GAAe0L,kBAAA,CAAA,UAAA,CAGnB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,qBACzCvL,cAAAA,CAAiBwL,0BAAA,CAAA,IAAA,EAAhB,EAAqB,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,cAAA,CAAe,EAAE,OAAA,EAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA,EAAI,GAAG,KAAA,EAAO,CACzG;AACD,MAAA,CAAO,cAA8BA,0BAAA,CAAA,IAAA,CAAK,WAAA;ACvB1C,IAAM,qBAA2BC,kBAAA,CAAA,aAAA,CAAmD;AAAA,EAClF,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAC,CAAA;AAED,IAAM,cAAoBA,kBAAA,CAAA,UAAA,CAGxB,CAAC,EAAE,SAAA,EAAW,SAAS,IAAA,EAAM,QAAA,EAAU,GAAG,KAAA,IAAS,GAAA,qBACnDzL,cAAAA,CAAsB0L,+BAAA,CAAA,IAAA,EAArB,EAA0B,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,wCAAA,EAA0C,SAAS,CAAA,EAAI,GAAG,KAAA,EAC3G,QAAA,kBAAA1L,eAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAK,EACjD,QAAA,EACH,GACF,CACD;AACD,WAAA,CAAY,cAAmC0L,+BAAA,CAAA,IAAA,CAAK,WAAA;AAEpD,IAAM,eAAA,GAAwBD,kBAAA,CAAA,UAAA,CAG5B,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,EAAA,MAAM,OAAA,GAAgBA,8BAAW,kBAAkB,CAAA;AACnD,EAAA,uBACEzL,cAAAA;AAAA,IAAsB0L,+BAAA,CAAA,IAAA;AAAA,IAArB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,cAAA,CAAe,EAAE,SAAS,OAAA,CAAQ,OAAA,IAAW,OAAA,EAAS,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC3G,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAC;AACD,eAAA,CAAgB,cAAmCA,+BAAA,CAAA,IAAA,CAAK,WAAA;ACjCxD,IAAM,WAAA,GAAmCC,+BAAA,CAAA;AACzC,IAAM,kBAAA,GAA0CA,+BAAA,CAAA;AAChD,IAAM,iBAAA,GAAyCA,+BAAA,CAAA;AAE/C,IAAM,kBAAA,GAA2BC,8BAG/B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B5L,cAAAA;AAAA,EAAsB2L,+BAAA,CAAA,OAAA;AAAA,EAArB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,wJAAA,EAA0J,SAAS,CAAA;AAAA,IAChL,GAAG;AAAA;AACN,CACD;AACD,kBAAA,CAAmB,cAAmCA,+BAAA,CAAA,OAAA,CAAQ,WAAA;AAE9D,IAAM,kBAAA,GAA2BC,kBAAA,CAAA,UAAA,CAG/B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BzL,eAAAA,CAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAAH,eAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,kBACpBA,cAAAA;AAAA,IAAsB2L,+BAAA,CAAA,OAAA;AAAA,IAArB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,6fAAA,EAA+f,SAAS,CAAA;AAAA,MACrhB,GAAG;AAAA;AAAA;AACN,CAAA,EACF,CACD;AACD,kBAAA,CAAmB,cAAmCA,+BAAA,CAAA,OAAA,CAAQ,WAAA;AAE9D,IAAM,oBAAoB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBAC/C3L,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,kDAAA,EAAoD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEhG,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAEhC,IAAM,oBAAoB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBAC/CA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,+DAAA,EAAiE,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE7G,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAEhC,IAAM,gBAAA,GAAyB4L,8BAG7B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B5L,eAAsB2L,+BAAA,CAAA,KAAA,EAArB,EAA2B,KAAU,SAAA,EAAW,EAAA,CAAG,yBAAyB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CACrG;AACD,gBAAA,CAAiB,cAAmCA,+BAAA,CAAA,KAAA,CAAM,WAAA;AAE1D,IAAM,sBAAA,GAA+BC,8BAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B5L,eAAsB2L,+BAAA,CAAA,WAAA,EAArB,EAAiC,KAAU,SAAA,EAAW,EAAA,CAAG,iCAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CACnH;AACD,sBAAA,CAAuB,cAAmCA,+BAAA,CAAA,WAAA,CAAY,WAAA;AAEtE,IAAM,iBAAA,GAA0BC,8BAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B5L,cAAAA,CAAsB2L,wCAArB,EAA4B,GAAA,EAAU,WAAW,EAAA,CAAG,cAAA,IAAkB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAC/F;AACD,iBAAA,CAAkB,cAAmCA,+BAAA,CAAA,MAAA,CAAO,WAAA;AAE5D,IAAM,iBAAA,GAA0BC,kBAAA,CAAA,UAAA,CAG9B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B5L,cAAAA,CAAsB2L,+BAAA,CAAA,MAAA,EAArB,EAA4B,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,cAAA,CAAe,EAAE,OAAA,EAAS,SAAA,EAAW,CAAA,EAAG,cAAA,EAAgB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CACrI;AACD,iBAAA,CAAkB,cAAmCA,+BAAA,CAAA,MAAA,CAAO,WAAA;ACvE5D,IAAM,mBAAA,GAAsB9L,0BAAAA;AAAA,EAC1B,gFAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,UAAA,EAAY,iHAAA;AAAA,QACZ,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,WAAA,EAAa,YAAA;AAAa;AAEjD;AAEA,SAAS,WAAA,CAAY;AAAA,EACnB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2E;AACzE,EAAA,uBACEG,cAAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,OAAA,EAAQ,aAAU,cAAA,EAAe,SAAA,EAAW,EAAA,CAAG,mBAAA,CAAoB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAE1H;AAEA,SAAS,gBAAgB,EAAE,SAAA,EAAW,UAAU,KAAA,EAAO,GAAG,OAAM,EAAwD;AACtH,EAAA,MAAM,IAAA,GAAO,UAAUD,cAAAA,GAAO,KAAA;AAC9B,EAAA,uBACEC,eAAC,IAAA,EAAA,EAAK,SAAA,EAAW,GAAG,8IAAA,EAAgJ,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAE/L;AAEA,SAAS,qBAAqB,EAAE,SAAA,EAAW,cAAc,UAAA,EAAY,GAAG,OAAM,EAA2C;AACvH,EAAA,uBAAOA,cAAAA,CAAC8K,UAAAA,EAAA,EAAU,WAAA,EAA0B,SAAA,EAAW,EAAA,CAAG,wEAAA,EAA0E,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC7J;AC7BA,IAAM,YAAA,GAAqBe,kBAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,wBACvB7L,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,oBAAA,EAAmB,EAAA;AAAA,MACnB,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA;AAGV,CAAA;AACA,YAAA,CAAa,WAAA,GAAc,UAAA;AAEpB,IAAM,QAAA,GAAW;AAUjB,SAAS,cAAA,CAAe,EAAE,IAAA,GAAO,EAAA,EAAI,WAAU,EAAwB;AAC5E,EAAA,uBACEA,cAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA;AAAA,MACvC,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA;AAAK;AAAA,GACrC;AAEJ;AAYO,SAAS,YAAY,EAAE,KAAA,GAAQ,QAAQ,MAAA,GAAS,EAAA,EAAI,WAAU,EAAqB;AACxF,EAAA,uBACEA,cAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA;AAAO;AAAA,GACzB;AAEJ;AAYO,SAAS,YAAA,CAAa,EAAE,KAAA,GAAQ,MAAA,EAAQ,SAAS,EAAA,EAAI,MAAA,GAAS,CAAA,EAAG,SAAA,EAAU,EAAsB;AACtG,EAAA,uBACEA,cAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,cAAc,MAAA;AAAO;AAAA,GAC/C;AAEJ;AAUO,SAAS,aAAA,CAAc,EAAE,KAAA,GAAQ,iBAAA,EAAmB,UAAU,SAAA,EAAW,GAAG,MAAK,EAAuB;AAC7G,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,WAAA,EAAU,MAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,SAAS,CAAA;AAAA,MACnC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACDH,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,GACnC;AAEJ;ACjFO,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,EAAA,EAAI,EAAE,IAAA,EAAM,YAAA,EAAc,MAAM,cAAA,EAAgB,KAAA,EAAO,qBAAA,EAAuB,IAAA,EAAM,SAAA,EAAU;AAAA,IAC9F,EAAA,EAAI,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,gBAAA,EAAkB,KAAA,EAAO,yBAAA,EAA2B,IAAA,EAAM,SAAA,EAAU;AAAA,IACrG,EAAA,EAAI,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,gBAAA,EAAkB,KAAA,EAAO,uBAAA,EAAyB,IAAA,EAAM,WAAA;AAAY,IACrG,IAAI,CAAA;AAEN,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,6EAAA;AAAA,QACA,MAAA,CAAO,IAAA;AAAA,QACP;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,mBACCH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,4BAA4B,MAAA,CAAO,IAAI,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK,CAAA,GACjE,IAAA;AAAA,wBACJA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,iBAAA,EAAmB,MAAA,CAAO,KAAK,CAAA,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAC3D,WAAA,mBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,MAAA,CAAO,IAAI,CAAA,EAAI,QAAA,EAAA,WAAA,EAAY,CAAA,GAC9E,IAAA;AAAA,QACH,yBAASA,cAAAA,CAAC,SAAI,SAAA,EAAU,8BAAA,EAAgC,kBAAO,CAAA,GAAS;AAAA;AAAA;AAAA,GAC3E;AAEJ;AC3BO,SAAS,WAAA,CAAY;AAAA,EAC1B,QAAA,GAAW,OAAA;AAAA,EACX,KAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,OAAA,GACJ,QAAA,KAAa,SAAA,GACT,yGAAA,GACA,qEAAA;AAEN,EAAA,MAAM,SAAA,GAAY,QAAA,KAAa,SAAA,GAAY,gBAAA,GAAmB,kBAAA;AAE9D,EAAA,MAAM,YAAA,GACJ,IAAA,KACC,QAAA,KAAa,SAAA,mBACZA,eAAC8L,yBAAA,EAAA,EAAc,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,SAAS,CAAA,EAAG,eAAY,MAAA,EAAO,CAAA,mBAEvE9L,cAAAA,CAAC+L,wBAAA,EAAA,EAAa,SAAA,EAAW,GAAG,SAAA,EAAW,SAAS,CAAA,EAAG,aAAA,EAAY,MAAA,EAAO,CAAA,CAAA;AAG1E,EAAA,uBACE5L,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAW,QAAA,KAAa,OAAA,GAAU,WAAA,GAAc,QAAA;AAAA,MAChD,SAAA,EAAW,EAAA;AAAA,QACT,4DAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAwB,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,wBACpDG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,mBAAQH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA+B,iBAAM,CAAA,GAAS,IAAA;AAAA,0BACtEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,gBAAgB,KAAA,GAAQ,MAAA,GAAS,EAAE,CAAA,EAAI,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,UACjE,yBAASA,cAAAA,CAAC,SAAI,SAAA,EAAU,8BAAA,EAAgC,kBAAO,CAAA,GAAS;AAAA,SAAA,EAC3E,CAAA;AAAA,QACC,4BACCA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,SAAA;AAAA,YACT,YAAA,EAAW,SAAA;AAAA,YACX,SAAA,EAAU,sHAAA;AAAA,YAEV,0BAAAA,cAAAA,CAACI,aAAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,eAAY,MAAA,EAAO;AAAA;AAAA,SAC5C,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;ACtDO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA,GAAQ,sBAAA;AAAA,EACR,WAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,uBACED,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,yFAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACZ,QAAA,EAAA,YAAA,oBAAgBA,cAAAA,CAAC+L,wBAAAA,EAAA,EAAa,SAAA,EAAU,WAAA,EAAY,aAAA,EAAY,QAAO,CAAA,EAC1E,CAAA;AAAA,QACC,4BACC/L,cAAAA,CAAC,SAAI,SAAA,EAAU,kGAAA,EACZ,qBACH,CAAA,GACE,IAAA;AAAA,wBACJA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,0CAA0C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAC7D,8BACCA,cAAAA,CAAC,SAAI,SAAA,EAAU,+BAAA,EAAiC,uBAAY,CAAA,GAC1D,IAAA;AAAA,QACH,aAAA,mBACCG,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0DAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EAA6D,QAAA,EAAA,gBAAA,EAE5E,CAAA;AAAA,0BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAqB,QAAA,EAAA,aAAA,EAAc;AAAA,SAAA,EACrD,CAAA,GACE,IAAA;AAAA,QACH,0BAAUA,cAAAA,CAAC,SAAI,SAAA,EAAU,uDAAA,EAAyD,mBAAQ,CAAA,GAAS;AAAA;AAAA;AAAA,GACtG;AAEJ;ACxCO,SAAS,cAAA,CAAe;AAAA,EAC7B,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAA,GAAI;AAAA,IACR,MAAA,EAAQ,YAAY,MAAA,IAAU,GAAA;AAAA,IAC9B,IAAA,EAAM,YAAY,IAAA,IAAQ,IAAA;AAAA,IAC1B,OAAA,EAAS,YAAY,OAAA,IAAW;AAAA,GAClC;AAEA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAUgM,kBAAA,CAAA,QAAA,CAAgB,MAAA,GAAS,WAAW,MAAM,CAAA;AAE1E,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,QAAA,CAAS,MAAM,CAAA;AACf,MAAA;AAAA,IACF;AACA,IAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,IAAA,MAAM,WAAA,GAAc,OAAO,UAAA,CAAW,MAAM,SAAS,QAAQ,CAAA,EAAG,EAAE,MAAM,CAAA;AACxE,IAAA,MAAM,SAAA,GAAY,OAAO,UAAA,CAAW,MAAM,SAAS,MAAM,CAAA,EAAG,EAAE,IAAI,CAAA;AAClE,IAAA,MAAM,YAAA,GAAe,OAAO,UAAA,CAAW,MAAM,SAAS,SAAS,CAAA,EAAG,EAAE,OAAO,CAAA;AAC3E,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,aAAa,WAAW,CAAA;AAC/B,MAAA,MAAA,CAAO,aAAa,SAAS,CAAA;AAC7B,MAAA,MAAA,CAAO,aAAa,YAAY,CAAA;AAAA,IAClC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAExC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,uBAAOhM,cAAAA,CAAA0E,mBAAAA,EAAA,EAAG,QAAA,EAAS,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,UAAU,SAAA,EAAW;AACvB,IAAA,uBACE1E,eAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,MAAK,OAAA,EAAQ,WAAA,EAAU,SAChD,QAAA,kBAAAA,cAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,OAAA;AAAA,QACT,KAAA,EAAM,qCAAA;AAAA,QACN,OAAA,EAAS,kCAAkC,KAAK,CAAA,6BAAA,CAAA;AAAA,QAChD,MAAA,EACE,0BACEA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,OAAA;AAAA,YACT,SAAA,EAAU,iFAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA,SAED,GACE;AAAA;AAAA,KAER,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEG,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,MAAK,QAAA,EAAS,WAAA,EAAU,MAAA,EAAO,WAAA,EAAU,QAAA,EACjE,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,UAAU,QAAA,mBACTA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gDAAA,EAAiD,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MAAS,KAAA;AAAA,MAAM;AAAA,KAAA,EAAC,CAAA,GAC9E,IAAA;AAAA,IACH,KAAA,KAAU,yBACTH,cAAAA,CAAC,SAAI,SAAA,EAAU,gDAAA,EAAiD,sDAEhE,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;ACvEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,GAAA,GAAM,OAAA;AAAA,EACN,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUiM,4BAAS,KAAK,CAAA;AAEhD,EAAA,uBACE9L,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,SAAS,CAAA;AAAA,MAC5D,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO;AAAA,MAEtB,QAAA,EAAA;AAAA,QAAA,IAAA,mBACCH,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,IAAA;AAAA,YACL,GAAA,EAAI,EAAA;AAAA,YACJ,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAW,EAAA;AAAA,cACT,+FAAA;AAAA,cACA,SAAS,WAAA,GAAc;AAAA;AACzB;AAAA,SACF,GACE,IAAA;AAAA,wBACJA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,GAAA;AAAA,YACA,OAAA;AAAA,YACA,QAAQ,MAAM;AACZ,cAAA,SAAA,CAAU,IAAI,CAAA;AACd,cAAA,MAAA,IAAS;AAAA,YACX,CAAA;AAAA,YACA,OAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACT,gEAAA;AAAA,cACA,UAAU,GAAG,CAAA,CAAA;AAAA,cACb,SAAS,aAAA,GAAgB;AAAA;AAC3B;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AC1DO,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA,GAAW,cAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,aAAA,GAAgB;AAClB,CAAA,GAAwB,EAAC,EAAG;AAC1B,EAAA,uBACEA,cAAAA;AAAA,IAACkM,cAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA;AAAA,MACA,KAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAU,IAAA;AAAA,MACV,YAAA,EAAc;AAAA,QACZ,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,iEAAA;AAAA,UACP,KAAA,EAAO,aAAA;AAAA,UACP,WAAA,EAAa;AAAA;AACf;AACF;AAAA,GACF;AAEJ;AAWO,SAAS,aAAa,EAAE,KAAA,EAAO,aAAa,QAAA,GAAW,GAAA,EAAM,QAAO,EAAiB;AAC1F,EAAA,OAAOC,YAAA,CAAM,QAAQ,KAAA,EAAO;AAAA,IAC1B,WAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA,kBAAMnM,cAAAA,CAACoM,wBAAA,EAAA,EAAa,WAAU,0BAAA,EAA2B,CAAA;AAAA,IACzD,MAAA,EAAQ,SAAS,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,OAAA,EAAS,MAAA,CAAO,OAAA,EAAQ,GAAI;AAAA,GACrE,CAAA;AACH;AAEO,SAAS,WAAW,EAAE,KAAA,EAAO,aAAa,QAAA,GAAW,GAAA,EAAM,QAAO,EAAiB;AACxF,EAAA,OAAOD,YAAA,CAAM,MAAM,KAAA,EAAO;AAAA,IACxB,WAAA;AAAA,IACA,QAAA;AAAA,IACA,sBAAMnM,cAAAA,CAAC+L,wBAAAA,EAAA,EAAa,WAAU,0BAAA,EAA2B,CAAA;AAAA,IACzD,MAAA,EAAQ,SAAS,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,OAAA,EAAS,MAAA,CAAO,OAAA,EAAQ,GAAI;AAAA,GACrE,CAAA;AACH;AC7CO,SAAS,eAAA,CAAgB,UAAU,KAAA,EAA8B;AACtE,EAAA,MAAM,CAAC,SAAA,EAAW,UAAU,CAAA,GAAI5K,iBAAkB,OAAO,CAAA;AAEzD,EAAA,MAAM,WAAA,GAAc6C,mBAAAA,CAAY,OAAU,EAAA,KAAqC;AAC7E,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,SAAA,EAAW,UAAA,EAAY,WAAA,EAAY;AAC9C;ACdO,SAAS,eAAA,GAAyC;AACvD,EAAA,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,GAAI7C,iBAAwB,IAAI,CAAA;AAEpD,EAAA,MAAM,QAAA,GAAW6C,mBAAAA,CAAY,CAAC,KAAA,KAAmB;AAC/C,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,MAAA,CAAO,IAAI,CAAA;AACX,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAA,CAAO,KAAK,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,MAAA,CAAO,MAAM,OAAO,CAAA;AACpB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAaA,mBAAAA,CAAY,MAAM,OAAO,IAAI,CAAA,EAAG,EAAE,CAAA;AAErD,EAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAW;AACvC;AClBO,SAAS,WAAA,CAAe,OAAU,OAAA,EAAoB;AAC3D,EAAA,MAAM,CAAC,eAAA,EAAiB,mBAAmB,CAAA,GAAI7C,iBAAY,KAAK,CAAA;AAEhE,EAAAG,kBAAU,MAAM;AACd,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,IAC3B,GAAG,OAAO,CAAA;AAEV,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,KAAA,EAAO,OAAO,CAAC,CAAA;AAEnB,EAAA,OAAO,eAAA;AACT;ACLO,SAAS,kBAAA,GAA+C;AAC7D,EAAA,MAAM,CAAC,MAAA,EAAQ,UAAU,CAAA,GAAIH,iBAAS,KAAK,CAAA;AAE3C,EAAA,MAAM,IAAA,GAAO6C,mBAAAA,CAAY,OAAO,IAAA,KAAgC;AAC9D,IAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,CAAC,UAAU,SAAA,EAAW;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,UAAA,CAAW,MAAM,UAAA,CAAW,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AACxB;;;ACrCA,IAAM,qBAAA,GAAwB,GAAA;AAYvB,SAAS,WAAA,CAAY,eAAuB,qBAAA,EAAgC;AACjF,EAAA,OAAO,aAAA,CAAc,CAAA,YAAA,EAAe,YAAA,GAAe,CAAC,CAAA,GAAA,CAAK,CAAA;AAC3D;AAQO,SAAS,WAAA,CAAY,aAAqB,qBAAA,EAAgC;AAC/E,EAAA,OAAO,YAAY,UAAU,CAAA;AAC/B;ACZO,SAAS,eAAA,CACd,KACA,YAAA,EAC4C;AAC5C,EAAA,MAAM,cAAc,MAAS;AAC3B,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,YAAA;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AAC3C,MAAA,OAAO,GAAA,KAAQ,IAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAU,YAAA;AAAA,IACjD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,CAAC,YAAA,EAAc,gBAAgB,CAAA,GAAI7C,iBAAY,WAAW,CAAA;AAEhE,EAAA,MAAM,SAAA,GAAY6C,mBAAAA;AAAA,IAChB,CAAC,KAAA,KAAgC;AAC/B,MAAA,gBAAA,CAAiB,CAAC,IAAA,KAAS;AACzB,QAAA,MAAM,OAAO,OAAO,KAAA,KAAU,UAAA,GAAc,KAAA,CAAyB,IAAI,CAAA,GAAI,KAAA;AAC7E,QAAA,IAAI;AACF,UAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,YAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,UACvD;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,GAAG;AAAA,GACN;AAEA,EAAA,OAAO,CAAC,cAAc,SAAS,CAAA;AACjC;AClCO,SAAS,iBAAA,CACd,KACA,YAAA,EAC4C;AAC5C,EAAA,MAAM,cAAc,MAAS;AAC3B,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,YAAA;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,GAAG,CAAA;AAC7C,MAAA,OAAO,GAAA,KAAQ,IAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAU,YAAA;AAAA,IACjD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,CAAC,YAAA,EAAc,gBAAgB,CAAA,GAAI7C,iBAAY,WAAW,CAAA;AAEhE,EAAA,MAAM,SAAA,GAAY6C,mBAAAA;AAAA,IAChB,CAAC,KAAA,KAAgC;AAC/B,MAAA,gBAAA,CAAiB,CAAC,IAAA,KAAS;AACzB,QAAA,MAAM,OAAO,OAAO,KAAA,KAAU,UAAA,GAAc,KAAA,CAAyB,IAAI,CAAA,GAAI,KAAA;AAC7E,QAAA,IAAI;AACF,UAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,YAAA,MAAA,CAAO,eAAe,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,UACzD;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,GAAG;AAAA,GACN;AAEA,EAAA,OAAO,CAAC,cAAc,SAAS,CAAA;AACjC;AClCO,SAAS,eAAA,CACd,KACA,OAAA,EACM;AACN,EAAA1C,kBAAU,MAAM;AACd,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAmC;AACvD,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,IAAI,CAAC,GAAA,CAAI,OAAA,IAAW,CAAC,MAAA,EAAQ;AAC7B,MAAA,IAAI,CAAC,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AACjC,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,YAAY,CAAA;AACnD,IAAA,QAAA,CAAS,gBAAA,CAAiB,cAAc,YAAY,CAAA;AAEpD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,YAAY,CAAA;AACtD,MAAA,QAAA,CAAS,mBAAA,CAAoB,cAAc,YAAY,CAAA;AAAA,IACzD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,GAAA,EAAK,OAAO,CAAC,CAAA;AACnB;ACTO,SAAS,WAAA,GAAiC;AAC/C,EAAA,MAAM,SAAA,GACJ,OAAO,SAAA,KAAc,WAAA,IAAe,UAAA,IAAc,SAAA;AAEpD,EAAA,MAAM,YAAA,GAAeyC,eAAgC,IAAI,CAAA;AACzD,EAAA,MAAM,CAAC,QAAA,EAAU,YAAY,CAAA,GAAI5C,iBAAS,KAAK,CAAA;AAE/C,EAAA,MAAM,OAAA,GAAU6C,oBAAY,YAA2B;AACrD,IAAA,IAAI,CAAC,SAAA,IAAa,YAAA,CAAa,OAAA,EAAS;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAO,SAAA,CAAiD,QAAA,CAAS,QAAQ,QAAQ,CAAA;AAClG,MAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,MAAM;AACzC,QAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB,CAAC,CAAA;AACD,MAAA,YAAA,CAAa,OAAA,GAAU,QAAA;AACvB,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,OAAA,GAAUA,oBAAY,YAA2B;AACrD,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,CAAa,QAAQ,OAAA,EAAQ;AAAA,IACrC,CAAA,CAAA,MAAQ;AAAA,IAER,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA1C,kBAAU,MAAM;AACd,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAA,IAAI,SAAS,eAAA,KAAoB,SAAA,IAAa,QAAA,IAAY,CAAC,aAAa,OAAA,EAAS;AAC/E,QAAA,KAAK,OAAA,EAAQ;AAAA,MACf;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,iBAAiB,CAAA;AAC/D,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,kBAAA,EAAoB,iBAAiB,CAAA;AAAA,EACjF,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAGtB,EAAAA,kBAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,KAAK,aAAa,OAAA,CAAQ,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACzD,QAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,OAAA,EAAQ;AACjD;AC9DO,SAAS,cACd,UAAA,EACqB;AACrB,EAAA,MAAM,CAAC,aAAA,EAAe,iBAAiB,CAAA,GAAIH,iBAAS,KAAK,CAAA;AAGzD,EAAAG,kBAAU,MAAM;AACd,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,iBAAA,CAAkB,CAAC,CAAC,QAAA,CAAS,iBAAiB,CAAA;AAAA,IAChD,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,aAAa,CAAA;AAE3D,IAAA,iBAAA,CAAkB,CAAC,CAAC,QAAA,CAAS,iBAAiB,CAAA;AAE9C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,kBAAA,EAAoB,aAAa,CAAA;AAAA,EAC7E,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAa0C,oBAAY,MAAe;AAC5C,IAAA,OAAQ,UAAA,EAAY,WAAW,QAAA,CAAS,eAAA;AAAA,EAC1C,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,KAAA,GAAQA,oBAAY,YAA2B;AACnD,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,IAAe,CAAC,QAAA,CAAS,gBAAgB,iBAAA,EAAmB;AACpF,IAAA,IAAI,SAAS,iBAAA,EAAmB;AAChC,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,iBAAA,EAAkB;AAAA,IACvC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,IAAA,GAAOA,oBAAY,YAA2B;AAClD,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,IAAA,IAAI,CAAC,SAAS,iBAAA,EAAmB;AACjC,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,cAAA,EAAe;AAAA,IAChC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASA,oBAAY,YAA2B;AACpD,IAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,MAAA,MAAM,IAAA,EAAK;AAAA,IACb,CAAA,MAAO;AACL,MAAA,MAAM,KAAA,EAAM;AAAA,IACd;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,IAAI,CAAC,CAAA;AAEhB,EAAA,OAAO,EAAE,YAAA,EAAc,aAAA,EAAe,KAAA,EAAO,MAAM,MAAA,EAAO;AAC5D;ACpDO,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,aAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,GAAIvC,oBAAAA,CAAY,EAAE,EAAA,EAAI,IAAA,CAAK,EAAA,EAAI,IAAA,EAAM,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA,EAAU,EAAG,CAAA;AAEpE,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,GACtB,CAAA,uBAAA,EAA0B,MAAA,CAAO,KAAK,QAAQ,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,GAC7D,IAAA;AAEJ,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,SAAA,EAAWC,aAAAA,CAAI,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA;AAAA,IAC3C,UAAA;AAAA,IACA,eAAA,EAAiB,iCAAA;AAAA,IACjB,MAAA,EAAQ,CAAA,6CAAA,CAAA;AAAA,IACR,UAAA,EAAY,YAAA,GACR,CAAA,kBAAA,EAAqB,YAAY,CAAA,EAAA,CAAA,GACjC,CAAA,6CAAA,CAAA;AAAA,IACJ,OAAA,EAAS,UAAA,IAAc,CAAC,QAAA,GAAW,GAAA,GAAM,CAAA;AAAA,IACzC,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,uBACEvB,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,KAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,qEAAA;AAAA,QACA,yEAAA;AAAA,QACA,QAAA,IAAY,wCAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACC,GAAG,UAAA;AAAA,MACH,GAAG,SAAA;AAAA,MACJ,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,sBAAA,EAAqB,gBAAA;AAAA,MACrB,cAAA,EAAc,UAAA;AAAA,MAEb,QAAA,EAAA;AAAA,QAAA,QAAA,IAAY,aAAA,IAAiB,CAAC,QAAA,oBAC7BH,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,aAAA,EAAe,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YACxC,WAAA,EAAa,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YACtC,SAAA,EAAW,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YACpC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,cAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,cAAA,aAAA,CAAc,IAAI,CAAA;AAAA,YACpB,CAAA;AAAA,YACA,YAAA,EAAY,CAAA,KAAA,EAAQ,IAAA,CAAK,EAAE,CAAA,CAAA;AAAA,YAC3B,SAAA,EAAW,EAAA;AAAA,cACT,sDAAA;AAAA,cACA,4EAAA;AAAA,cACA,kEAAA;AAAA,cACA,mGAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,QAAA,EAAU,CAAA;AAAA,YAEV,QAAA,kBAAAA,cAAAA,CAACqM,kBAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA,SAClC;AAAA,QAED,WAAW,IAAI;AAAA;AAAA;AAAA,GAClB;AAEJ;AC7EO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM,EAAE,UAAA,EAAY,MAAA,EAAO,GAAIC,mBAAA,CAAa;AAAA,IAC1C,EAAA,EAAI,CAAA,OAAA,EAAU,MAAA,CAAO,GAAG,CAAA,CAAA;AAAA,IACxB,MAAM,EAAE,SAAA,EAAW,MAAA,CAAO,GAAA,EAAK,UAAU,IAAA;AAAK,GAC/C,CAAA;AAED,EAAA,uBACEnM,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,qDAAA;AAAA,QACA,MAAA,IAAU;AAAA,OACZ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gIAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAAgC,iBAAO,KAAA,EAAM,CAAA;AAAA,0BAC7DA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gFAAA,EACb,gBAAM,MAAA,EACT;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAACuC,wBAAAA;AAAA,UAAA;AAAA,YACC,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,YAC5B,QAAA,EAAUC,oCAAAA;AAAA,YAEV,0BAAAxC,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iDAAA,EACZ,QAAA,EAAA,KAAA,CAAM,WAAW,CAAA,mBAChBA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEACZ,QAAA,EAAA,WAAA,EACH,CAAA,GAEA,MAAM,GAAA,CAAI,CAAC,yBACTA,cAAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBAEC,IAAA;AAAA,gBACA,UAAA;AAAA,gBACA,aAAA;AAAA,gBACA,QAAA;AAAA,gBACA;AAAA,eAAA;AAAA,cALK,IAAA,CAAK;AAAA,aAOb,CAAA,EAEL;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;ACpCA,IAAM,kBAAA,GAAuC,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAKpE,SAAS,SAAS,GAAA,EAAqB;AACrC,EAAA,OAAO,GAAA,CACJ,OAAA,CAAQ,SAAA,EAAW,GAAG,EACtB,OAAA,CAAQ,iBAAA,EAAmB,OAAO,CAAA,CAClC,QAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,IAAA,GACA,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,CAAA,CAAE,MAAM,CAAC,CAAA,GAAI,CAAE,CAAA,CACpD,KAAK,GAAG,CAAA;AACb;AAUA,SAAS,kBAAA,CACP,MACA,OAAA,EACqB;AACrB,EAAA,MAAM,uBAAO,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,WAAA,EAAa,UAAU,CAAC,CAAA;AACpD,EAAA,MAAM,MAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC/C,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,GAAA,EAAK,IAAA,EAAM,QAAQ,CAAA;AAAA,IAChC;AAAA,EACF;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,GAAA,EAAK,WAAA,EAAa,MAAM,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,GAAA;AACT;AAuBO,SAAS,YAAA,CAAgD;AAAA,EAC9D,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,MAAA;AAAA,EACA;AACF,CAAA,EAAyB;AAGvB,EAAA,MAAM,CAAC,KAAA,EAAO,SAAS,CAAA,GAAUuM,4BAAmB,IAAI,CAAA;AACxD,EAAA,MAAM,CAAC,MAAA,EAAQ,UAAU,CAAA,GAAUA,4BAAS,KAAK,CAAA;AACjD,EAAA,MAAM,CAAC,KAAA,EAAO,SAAS,CAAA,GAAUA,4BAAwB,IAAI,CAAA;AAK7D,EAAA,MAAM,OAAA,GAAU,MAAM,EAAA,IAAM,IAAA;AAC5B,EAAMA,6BAAU,MAAM;AACpB,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,UAAA,CAAW,KAAK,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,gBAAA,GAAmB,WAAW,EAAC;AACrC,EAAA,MAAM,sBAAsB,UAAA,IAAc,kBAAA;AAG1C,EAAA,MAAM,eAAA,GAAwBA,2BAA6B,MAAM;AAC/D,IAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,IAAA,OAAO,kBAAA,CAAmB,MAAM,gBAAgB,CAAA;AAAA,EAClD,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAA,EAAM,gBAAgB,CAAC,CAAA;AAGnC,EAAA,MAAM,aAAA,GAAsBA,kBAAA,CAAA,OAAA;AAAA,IAC1B,MACE,eAAA,CACG,MAAA;AAAA,MACC,CAAC,CAAA,KACC,CAAA,CAAE,QAAA,KACD,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,IAAA,KAAS,QAAA;AAAA,KAC9D,CACC,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,IACrB,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,MAAM,mBAAA,GAA4BA,2BAAQ,MAAM;AAC9C,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,IAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,MAAA,MAAM,CAAA,GAAK,MAA6C,GAAG,CAAA;AAC3D,MAAA,IAAI,MAAM,MAAA,IAAa,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,IAAI,OAAO,KAAA;AACtD,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,EAAE,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AAAA,IACvD;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAA,EAAO,aAAa,CAAC,CAAA;AAEzB,EAAA,MAAM,QAAA,GAAiBA,2BAAQ,MAAM;AACnC,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,IAAA,EAAM,OAAO,KAAA;AAC5B,IAAA,IAAI;AACF,MAAA,OAAO,KAAK,SAAA,CAAU,KAAK,CAAA,KAAM,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IACtD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA,KAAU,IAAA;AAAA,IACnB;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,IAAI,CAAC,CAAA;AAEhB,EAAA,MAAM,WAAA,GAAoBA,+BAAY,YAAY;AAChD,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,IAAA,EAAM;AACrB,IAAA,IAAI,MAAA,EAAQ;AACZ,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,EAAQ;AACR,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,EAAE,MAAA,EAAQ,KAAK,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,CAAA;AAC5D,IAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAAyB,IAAA,KAAS,UAAA,EAAY;AAClE,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI;AACF,QAAA,MAAM,MAAA;AACN,QAAA,UAAA,CAAW,KAAK,CAAA;AAChB,QAAA,OAAA,EAAQ;AAAA,MACV,SAAS,GAAA,EAAK;AACZ,QAAA,UAAA,CAAW,KAAK,CAAA;AAChB,QAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,QAAA,SAAA,CAAU,OAAO,CAAA;AAAA,MACnB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,MAAM,MAAA,EAAQ,OAAA,EAAS,MAAM,CAAC,CAAA;AAEzC,EAAA,MAAM,GAAA,GAA0B;AAAA,IAC9B,OAAQ,KAAA,IAAS,IAAA;AAAA,IACjB,QAAA,EAAU,CAAC,IAAA,KAAS;AAClB,MAAA,SAAA,CAAU,CAAC,IAAA,KAAS;AAClB,QAAA,MAAM,OAAO,IAAA,IAAQ,IAAA;AACrB,QAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,QAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,UAAA,OAAQ,KAAqB,IAAS,CAAA;AAAA,QACxC;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,OAAO,IAAA,KAAS,IAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,IAAA,IAAQ,OAAA,GAAU,OAAA,CAAQ,IAAI,IAAI,IAAA,GAAO,CAAA,KAAA,EAAQ,IAAA,CAAK,EAAE,CAAA,CAAA,GAAK,EAAA;AAG3E,EAAA,MAAM,YAAA,GAAe,IAAA,EAAM,QAAA,GACvB,CAAA,uBAAA,EAA0B,MAAA,CAAO,KAAK,QAAQ,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,GAC7D,IAAA;AACJ,EAAA,MAAM,gBAAA,GAAmB,YAAA,GACrB,CAAA,QAAA,EAAW,YAAY,CAAA,EAAA,CAAA,GACvB,MAAA;AAOJ,EAAA,MAAM,kBAAA,GAAqB,EAAE,UAAA,IAAc,UAAA,CAAA;AAE3C,EAAA,uBACEvM,cAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,IAAI,CAAC,CAAA,IAAK,CAAC,MAAA,EAAQ,OAAA,EAAQ;AAAA,MAC7B,CAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA,EAAY,4BAAA;AAAA,MACZ,SAAA,EAAU,kBAAA;AAAA,MACV,aAAA,EAAc,MAAA;AAAA,MACd,cAAA,EAAe,MAAA;AAAA,MACf,SAAA,EAAW,CAAC,CAAC,YAAA;AAAA,MACb,cAAA,EAAgB,gBAAA;AAAA,MAChB,gBAAA,EAAkB,EAAA,CAAG,wBAAA,EAA0B,YAAA,IAAgB,MAAM,CAAA;AAAA,MACrE,gBAAA,EAAkB,SAAS,cAAA,GAAY,MAAA;AAAA,MACvC,gBAAA,EAAkB,SAAS,MAAA,mBAAYA,eAACa,iBAAAA,EAAA,EAAM,WAAU,cAAA,EAAe,CAAA;AAAA,MACvE,mBAAA,EAAqB,MAAA;AAAA,MACrB,oBAAA,EAAsB,CAAC,QAAA,IAAY,CAAC,mBAAA,IAAuB,MAAA;AAAA,MAC3D,gBAAA,EAAiB,QAAA;AAAA,MACjB,gBAAA,EAAkB,IAAA;AAAA,MAClB,SAAA,EAAW,WAAA;AAAA,MACX,QAAA,EAAU,OAAA;AAAA,MACV,aAAA,EAAe,kBAAA,GAAqB,MAAA,mBAAYb,eAAC,MAAA,EAAA,EAAK,CAAA;AAAA,MAEtD,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACZ,QAAA,EAAA;AAAA,QAAA,IAAA,IAAQ,KAAA,IAAS,UAAA,GAChB,UAAA,CAAW,IAAA,EAAM,GAAG,CAAA,GAClB,KAAA,GACF,eAAA,CAAgB,GAAA,CAAI,CAAC,KAAA,qBACnBH,cAAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YAEC,KAAA;AAAA,YACA,KAAA;AAAA,YACA,QAAA,EAAU,CAAC,OAAA,KACT,SAAA;AAAA,cAAU,CAAC,IAAA,KACT,IAAA,GACK,OAAA,CAAQ,IAA6B,CAAA,GACtC;AAAA,aACN;AAAA,YAEF,UAAA,EAAY,mBAAA;AAAA,YACZ,OAAA,EAAS;AAAA,WAAA;AAAA,UAXJ,KAAA,CAAM;AAAA,SAad,CAAA,GACC,IAAA;AAAA,QAEH,yBACCA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,gIAAA;AAAA,YACV,IAAA,EAAK,OAAA;AAAA,YAEJ,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EAEJ;AAAA;AAAA,GACF;AAEJ;AAYA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,EAAA,GAAK,CAAA,cAAA,EAAiB,KAAA,CAAM,GAAG,CAAA,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS,QAAA,CAAS,MAAM,GAAG,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAS,KAAA,CAA6C,KAAA,CAAM,GAAG,CAAA;AAErE,EAAA,MAAM,SAAA,GAAY,CAAC,UAAA,KAAwB;AACzC,IAAA,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,CAAC,KAAA,CAAM,GAAG,GAAG,UAAA,EAAW,CAAgB,CAAA;AAAA,EACzE,CAAA;AAEA,EAAA,MAAM,qBAAA,GACJ,KAAA,CAAM,QAAA,KACL,KAAA,CAAM,IAAA,KAAS,UACd,KAAA,CAAM,IAAA,KAAS,UAAA,IACf,KAAA,CAAM,IAAA,KAAS,QAAA,CAAA;AAEnB,EAAA,uBACEG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,oDAAoD,CAAA,EACrE,QAAA,EAAA;AAAA,oBAAAA,gBAACsK,MAAAA,EAAA,EAAM,OAAA,EAAS,EAAA,EAAI,WAAU,2CAAA,EAC3B,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,MACA,yCACCzK,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAA0B,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EAE/C,CAAA;AAAA,IACC,KAAA,CAAM,IAAA,KAAS,MAAA,oBACdA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,QAC3C,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,KAC3C;AAAA,IAED,KAAA,CAAM,IAAA,KAAS,UAAA,oBACdA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,QAC3C,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,IAAA,EAAM,CAAA;AAAA,QACN,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK;AAAA;AAAA,KAC3C;AAAA,IAED,KAAA,CAAM,IAAA,KAAS,QAAA,oBACdA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,KAAA,EACE,OAAO,KAAA,KAAU,QAAA,GACb,KAAA,GACA,KAAA,KAAU,EAAA,IAAM,KAAA,IAAS,IAAA,GACvB,EAAA,GACA,MAAA,CAAO,KAAK,CAAA,IAAK,CAAA;AAAA,QAEzB,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,QAAA,EAAU,CAAC,CAAA,KACT,SAAA,CAAU,CAAA,CAAE,MAAA,CAAO,KAAA,KAAU,EAAA,GAAK,MAAA,GAAY,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC;AAAA;AAAA,KAExE;AAAA,IAED,KAAA,CAAM,IAAA,KAAS,UAAA,oBACdA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,QACX,eAAA,EAAiB,CAAC,OAAA,KAAY,SAAA,CAAU,YAAY,IAAI;AAAA;AAAA,KAC1D;AAAA,IAED,KAAA,CAAM,IAAA,KAAS,QAAA,oBACdG,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,QAC3C,aAAA,EAAe,SAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,aAAA,EAAA,EAAc,EAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,CAAA,OAAA,EAAU,KAAK,CAAA,MAAA;AAAA;AAAA,WACnD,EACF,CAAA;AAAA,0BACAA,cAAAA,CAAC,aAAA,EAAA,EACG,iBAAM,OAAA,IAAW,IAAI,GAAA,CAAI,CAAC,GAAA,qBAC1BA,eAAC,UAAA,EAAA,EAAqB,KAAA,EAAO,KAC1B,QAAA,EAAA,GAAA,EAAA,EADc,GAEjB,CACD,CAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,IAED,KAAA,CAAM,IAAA,KAAS,UAAA,oBACdG,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,QAC3C,aAAA,EAAe,SAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,aAAA,EAAA,EAAc,EAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAa,MAAM,WAAA,IAAe;AAAA;AAAA,WACpC,EACF,CAAA;AAAA,0BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,UAAA,CAAW,IAAI,CAAC,CAAA,qBACfA,cAAAA,CAAC,cAAmB,KAAA,EAAO,CAAA,EACxB,QAAA,EAAA,CAAA,EAAA,EADc,CAEjB,CACD,CAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,IAED,KAAA,CAAM,IAAA,KAAS,QAAA,oBACdG,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAAA,QAC3C,aAAA,EAAe,SAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,aAAA,EAAA,EAAc,EAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAa,MAAM,WAAA,IAAe;AAAA;AAAA,WACpC,EACF,CAAA;AAAA,0BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,kBAAQ,GAAA,CAAI,CAAC,wBACZA,cAAAA,CAAC,UAAA,EAAA,EAAyB,KAAA,EAAO,IAAI,GAAA,EAClC,QAAA,EAAA,GAAA,CAAI,SADU,GAAA,CAAI,GAErB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;ACjaA,IAAM,YAAA,GAAkC;AAAA,EACtC,MAAA,EAAQ,EAAA;AAAA,EACR,YAAY,EAAC;AAAA,EACb,QAAA,EAAU;AACZ,CAAA;AAEO,SAAS,kBAAA,CAAmB;AAAA,EACjC,MAAA,GAAS,IAAA;AAAA,EACT,iBAAA,GAAoB,WAAA;AAAA,EACpB,UAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,gBAAgB,KAAA,KAAU,MAAA;AAChC,EAAA,MAAM,CAAC,QAAA,EAAU,YAAY,CAAA,GAAUwM,kBAAA,CAAA,QAAA;AAAA,IACrC,YAAA,IAAgB;AAAA,GAClB;AACA,EAAA,MAAM,OAAA,GAAU,gBAAiB,KAAA,GAA8B,QAAA;AAE/D,EAAA,MAAM,MAAA,GAAeA,kBAAA,CAAA,WAAA;AAAA,IACnB,CAAC,IAAA,KAA4B;AAC3B,MAAA,IAAI,CAAC,aAAA,EAAe,YAAA,CAAa,IAAI,CAAA;AACrC,MAAA,QAAA,GAAW,IAAI,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,eAAe,QAAQ;AAAA,GAC1B;AAEA,EAAA,MAAM,UAAA,GACJ,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,IACxB,QAAQ,UAAA,CAAW,MAAA,GAAS,CAAA,IAC5B,OAAA,CAAQ,QAAA,KAAa,IAAA;AAEvB,EAAA,uBACErM,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,8DAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA,oBACCH,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,OAAO,OAAA,CAAQ,MAAA;AAAA,YACf,QAAA,EAAU,CAAC,CAAA,KACT,MAAA,CAAO,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,YAE/C,WAAA,EAAa,iBAAA;AAAA,YACb,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QAGD,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,oBACjCA,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,UAAA;AAAA,YACL,OAAO,OAAA,CAAQ,UAAA;AAAA,YACf,aAAA,EAAe,CAAC,IAAA,KACd,MAAA,CAAO,EAAE,GAAG,OAAA,EAAS,UAAA,EAAY,IAAA,EAAM,CAAA;AAAA,YAEzC,SAAA,EAAU,wDAAA;AAAA,YAET,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,qBACfA,cAAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBAEC,KAAA,EAAO,GAAA;AAAA,gBACP,IAAA,EAAK,IAAA;AAAA,gBACL,SAAA,EAAU,sCAAA;AAAA,gBAET,QAAA,EAAA;AAAA,eAAA;AAAA,cALI;AAAA,aAOR;AAAA;AAAA,SACH;AAAA,QAGD,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,oBACjCA,cAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,KAAA,EAAO,QAAQ,QAAA,IAAY,EAAA;AAAA,YAC3B,aAAA,EAAe,CAAC,CAAA,KACd,MAAA,CAAO;AAAA,cACL,GAAG,OAAA;AAAA,cACH,QAAA,EAAU,IAAK,CAAA,GAAuB;AAAA,aACvC,CAAA;AAAA,YAEH,SAAA,EAAU,4CAAA;AAAA,YAET,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,qBACfA,cAAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBAEC,KAAA,EAAO,CAAA;AAAA,gBACP,IAAA,EAAK,IAAA;AAAA,gBACL,SAAA,EAAU,sCAAA;AAAA,gBAET,QAAA,EAAA;AAAA,eAAA;AAAA,cALI;AAAA,aAOR;AAAA;AAAA,SACH;AAAA,QAGD,8BACCG,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,OAAA,EAAS,MAAM,MAAA,CAAO,YAAY,CAAA;AAAA,YAClC,SAAA,EAAU,8BAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAH,cAAAA,CAACI,aAAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAe,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA;AAEhC;AAAA;AAAA,GAEJ;AAEJ;;;AC1HO,SAAS,iBAAA,CACd,OACA,MAAA,EACK;AACL,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,IAAA,GAAO,WAAA,EAAY;AAEhD,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS;AAC5B,IAAA,IAAI,MAAA,CAAO,QAAA,IAAY,IAAA,CAAK,QAAA,KAAa,OAAO,QAAA,EAAU;AACxD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAChC,MAAA,MAAM,MAAO,IAAA,CAA2C,QAAA;AACxD,MAAA,IAAI,OAAO,QAAQ,QAAA,IAAY,CAAC,OAAO,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,EAAG;AAC/D,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,IAA0C,EACtE,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAO,MAAM,QAAQ,CAAA,CAChD,IAAA,CAAK,GAAG,EACR,WAAA,EAAY;AACf,MAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AAC9B,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH;ACoCA,SAAS,sBACP,SAAA,EACqB;AACrB,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,CAAC,EAAE,IAAA,EAAM,UAAA,EAAW,KAC/B,CAAA,UAAA,EAAa,SAAA,CAAU,IAAS,CAAC,CAAA,eAAA,EAAkB,UAAU,CAAA,qFAAA,CAAA;AAAA,IAC/D,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,UAAA,EAAW,KAC9B,UAAA,GAAa,CAAA,EAAG,SAAA,CAAU,IAAS,CAAC,CAAA,MAAA,EAAS,UAAU,CAAA,CAAA,CAAA,GAAM,EAAA;AAAA,IAC/D,SAAA,EAAW,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,QAAA,EAAS,KACjD,UAAA,KAAe,QAAA,GACX,CAAA,EAAG,SAAA,CAAU,IAAS,CAAC,CAAA,uBAAA,EAA0B,QAAA,GAAW,CAAC,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAA,CAAA,GAC5E,CAAA,EAAG,SAAA,CAAU,IAAS,CAAC,CAAA,YAAA,EAAe,QAAQ,CAAA,WAAA,EAAc,QAAA,GAAW,CAAC,CAAA,CAAA,CAAA;AAAA,IAC9E,YAAA,EAAc,CAAC,EAAE,IAAA,EAAM,UAAA,EAAW,KAChC,CAAA,oBAAA,EAAuB,SAAA,CAAU,IAAS,CAAC,CAAA,aAAA,EAAgB,UAAU,CAAA,CAAA;AAAA,GACzE;AACF;AAIA,SAAS,qBAAA,CACP,KAAA,EACA,OAAA,EACA,OAAA,EACkB;AAClB,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAiB;AACjC,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS,GAAA,CAAI,IAAI,GAAA,CAAI,GAAA,EAAK,EAAE,CAAA;AAI9C,EAAA,MAAM,eAAA,uBAAiE,GAAA,EAAI;AAC3E,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS,eAAA,CAAgB,IAAI,GAAA,CAAI,GAAA,EAAK,EAAE,CAAA;AAE1D,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AAC9B,IAAA,IAAI,EAAA,EAAI;AACN,MAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,GAAA,CAAI,EAAA,CAAG,SAAS,CAAA;AAC/C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,CAAG,OAAO,CAAA;AAAA,MACvC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA;AACrC,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,IAC9B;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,MAAM,UAAU,eAAA,CAAgB,GAAA,CAAI,GAAA,CAAI,GAAG,KAAK,EAAC;AACjD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AACxC,IAAA,MAAM,MAAM,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,GAAG,KAAK,EAAC;AACjC,IAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,OAAA,EAAS;AACrC,MAAA,MAAM,EAAA,GAAK,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,MAAM,CAAC,CAAA;AAClD,MAAA,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA;AAAA,IACxB;AACA,IAAA,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,GAAG,CAAA;AAAA,EACtB;AAEA,EAAA,OAAO,GAAA;AACT;AAIO,SAAS,YAAA,CAAgD;AAAA,EAC9D,OAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA,GAAmB,GAAA;AAAA,EACnB,aAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,SAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAAyB;AACvB,EAAA,MAAM,QAAA,GAAiBqM,kBAAA,CAAA,WAAA;AAAA,IACrB,CAAC,IAAA,KAAa,SAAA,GAAY,SAAA,CAAU,IAAI,IAAI,IAAA,CAAK,EAAA;AAAA,IACjD,CAAC,SAAS;AAAA,GACZ;AAMA,EAAA,MAAM,iBAAuBA,kBAAA,CAAA,KAAA,EAAM;AAEnC,EAAA,MAAM,CAAC,OAAA,EAAS,WAAW,CAAA,GAAUA,kBAAA,CAAA,QAAA;AAAA,wBAC/B,GAAA;AAAI,GACV;AACA,EAAA,MAAM,CAAC,SAAA,EAAW,aAAa,CAAA,GAAUA,4BAAwB,IAAI,CAAA;AACrE,EAAA,MAAM,CAAC,YAAY,cAAc,CAAA,GAAUA,4BAAiB,OAAA,CAAQ,CAAC,CAAA,EAAG,GAAA,IAAO,EAAE,CAAA;AAMjF,EAAA,MAAM,CAAC,YAAA,EAAc,gBAAgB,CAAA,GAAUA,4BAAmB,IAAI,CAAA;AAEtE,EAAA,MAAM,SAAA,GAAY,CAAC,WAAA,IAAe,OAAO,UAAA,KAAe,UAAA;AAExD,EAAA,MAAM,mBAAA,GAA4BA,kBAAA,CAAA,WAAA;AAAA,IAChC,CAAC,EAAA,KAAmB;AAClB,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,GAAG,EAAE,CAAA;AAC9C,MAAA,IAAI,KAAA,mBAAwB,KAAK,CAAA;AAAA,IACnC,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,mBAAA,GAA4BA,+BAAY,MAAM;AAClD,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACxB,IAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACpB,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,MAAA,KAAA,MAAW,CAAC,OAAA,EAAS,GAAG,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AAC3C,QAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAC/C,QAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,SAAA,KAAc,GAAA,CAAI,SAAA,EAAW;AAC5C,UAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AACnB,UAAA,OAAA,GAAU,IAAA;AAAA,QACZ;AAAA,MACF;AACA,MAAA,OAAO,UAAU,IAAA,GAAO,IAAA;AAAA,IAC1B,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,KAAA,EAAO,OAAO,CAAC,CAAA;AAGnB,EAAA,MAAM,OAAA,GAAgBA,kBAAA,CAAA,OAAA;AAAA,IACpB,MAAM,qBAAA,CAAsB,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AAAA,IACnD,CAAC,KAAA,EAAO,OAAA,EAAS,OAAO;AAAA,GAC1B;AAEA,EAAA,MAAM,SAAA,GAAkBA,kBAAA,CAAA,WAAA;AAAA,IACtB,CAAC,OAA8B,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAAA,IAC5D,CAAC,KAAK;AAAA,GACR;AAIA,EAAA,MAAM,OAAA,GAAU3K,iBAAAA;AAAA,IACdC,gBAAAA,CAAUC,sBAAe,EAAE,oBAAA,EAAsB,EAAE,QAAA,EAAU,CAAA,IAAK,CAAA;AAAA,IAClED,gBAAAA,CAAUE,qBAAAA,EAAgB,EAAE,gBAAA,EAAkBC,sCAA6B;AAAA,GAC7E;AAIA,EAAA,MAAM,oBAAA,GAA6BuK,2BAA6B,MAAM;AACpE,IAAA,MAAM,QAAA,GAAW,sBAAyB,QAAQ,CAAA;AAClD,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,aAAA,EAAe,WAAA,IAAe,QAAA,CAAS,WAAA;AAAA,MACpD,UAAA,EAAY,aAAA,EAAe,UAAA,IAAc,QAAA,CAAS,UAAA;AAAA,MAClD,SAAA,EAAW,aAAA,EAAe,SAAA,IAAa,QAAA,CAAS,SAAA;AAAA,MAChD,YAAA,EAAc,aAAA,EAAe,YAAA,IAAgB,QAAA,CAAS;AAAA,KACxD;AAAA,EACF,CAAA,EAAG,CAAC,aAAA,EAAe,QAAQ,CAAC,CAAA;AAE5B,EAAA,MAAM,iBAAA,GAA0BA,kBAAA,CAAA,OAAA;AAAA,IAC9B,OAAO;AAAA,MACL,WAAA,CAAY,EAAE,MAAA,EAAO,EAAwC;AAC3D,QAAA,MAAM,EAAA,GAAK,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAC3B,QAAA,MAAM,IAAA,GAAO,UAAU,EAAE,CAAA;AACzB,QAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,QAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,KAAK,SAAS,CAAA;AACxD,QAAA,OAAO,qBAAqB,WAAA,CAAY;AAAA,UACtC,IAAA;AAAA,UACA,UAAA,EAAY,GAAA,EAAK,KAAA,IAAS,IAAA,CAAK;AAAA,SAChC,CAAA;AAAA,MACH,CAAA;AAAA,MACA,UAAA,CAAW;AAAA,QACT,MAAA;AAAA,QACA;AAAA,OACF,EAGG;AACD,QAAA,MAAM,EAAA,GAAK,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAC3B,QAAA,MAAM,IAAA,GAAO,UAAU,EAAE,CAAA;AACzB,QAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,QAAA,MAAM,YAAA,GAAe,IAAA,GAChB,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,SAAA,IACrB,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,GACtC,IAAA;AACJ,QAAA,MAAM,GAAA,GAAM,eACR,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,KAAQ,YAAY,CAAA,GAC1C,IAAA;AACJ,QAAA,OAAO,qBAAqB,UAAA,CAAW;AAAA,UACrC,IAAA;AAAA,UACA,UAAA,EAAY,KAAK,KAAA,IAAS;AAAA,SAC3B,CAAA;AAAA,MACH,CAAA;AAAA,MACA,SAAA,CAAU;AAAA,QACR,MAAA;AAAA,QACA;AAAA,OACF,EAGG;AACD,QAAA,MAAM,EAAA,GAAK,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAC3B,QAAA,MAAM,IAAA,GAAO,UAAU,EAAE,CAAA;AACzB,QAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,QAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,KAAK,SAAS,CAAA;AAC7D,QAAA,MAAM,YAAA,GAAe,IAAA,GAChB,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,SAAA,IACrB,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,GACtC,IAAA;AACJ,QAAA,MAAM,MAAA,GAAS,YAAA,GACX,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,YAAY,CAAA,IAAK,QAAA,GAC/C,QAAA;AACJ,QAAA,MAAM,MAAA,GAAS,YAAA,GACX,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA,IAAK,EAAC,GAC9B,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAS,KAAK,EAAC;AACpC,QAAA,MAAM,SAAA,GACJ,QAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,KAAM,CAAA,OAAA,EAAU,YAAY,CAAA,CAAA,GAC9C,MAAA,CAAO,UAAU,CAAC,EAAA,KAAO,GAAG,EAAA,KAAO,MAAA,CAAO,KAAK,EAAE,CAAC,IAClD,MAAA,CAAO,MAAA;AACb,QAAA,OAAO,qBAAqB,SAAA,CAAU;AAAA,UACpC,IAAA;AAAA,UACA,UAAA,EAAY,QAAA,EAAU,KAAA,IAAS,IAAA,CAAK,SAAA;AAAA,UACpC,QAAA,EAAU,MAAA,EAAQ,KAAA,IAAS,IAAA,CAAK,SAAA;AAAA,UAChC,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAS;AAAA,SAChC,CAAA;AAAA,MACH,CAAA;AAAA,MACA,YAAA,CAAa,EAAE,MAAA,EAAO,EAAwC;AAC5D,QAAA,MAAM,EAAA,GAAK,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAC3B,QAAA,MAAM,IAAA,GAAO,UAAU,EAAE,CAAA;AACzB,QAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,QAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,KAAK,SAAS,CAAA;AACxD,QAAA,OAAO,qBAAqB,YAAA,CAAa;AAAA,UACvC,IAAA;AAAA,UACA,UAAA,EAAY,GAAA,EAAK,KAAA,IAAS,IAAA,CAAK;AAAA,SAChC,CAAA;AAAA,MACH;AAAA,KACF,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,oBAAoB;AAAA,GACpD;AAIA,EAAA,MAAM,iBAAA,GAA0BA,kBAAA,CAAA,WAAA,CAAY,CAAC,KAAA,KAA0B;AACrE,IAAA,aAAA,CAAc,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,EACvC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,kBAAA,GAA2BA,kBAAA,CAAA,WAAA;AAAA,IAC/B,CAAC,OAAA,MAAuC;AAAA,MACtC,QAAQ,MAAM;AACZ,QAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACpB,UAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,OAAO,GAAG,OAAO,IAAA;AAC/B,UAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,UAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AACnB,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,KACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,eAAA,GAAwBA,kBAAA,CAAA,WAAA;AAAA,IAC5B,CAAC,KAAA,KAAwB;AACvB,MAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,EAAE,CAAA;AAC5C,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,MAAM,IAAA,GAAO,UAAU,aAAa,CAAA;AACpC,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,IAAI,CAAC,MAAM,IAAA,EAAM;AAEjB,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA;AACpC,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,OAAA;AAGnC,MAAA,MAAM,kBACJ,SAAA,EAAW,SAAA,IAAa,OAAA,CAAQ,OAAA,CAAQ,YAAY,EAAE,CAAA;AACxD,MAAA,MAAM,cAAc,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,eAAe,CAAA;AACjE,MAAA,IAAI,CAAC,WAAA,EAAa;AAGlB,MAAA,IAAI,YAAY,OAAA,IAAW,CAAC,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA,EAAG;AAIvD,MAAA,MAAM,sBAAA,GAAyB,OAAA,CAAQ,GAAA,CAAI,eAAe,KAAK,EAAC;AAChE,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI,WAAW,QAAA,EAAU;AACvB,QAAA,SAAA,GAAY,sBAAA,CAAuB,MAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,MAAM,MAAM,sBAAA,CAAuB,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AACpE,QAAA,SAAA,GAAY,GAAA,KAAQ,EAAA,GAAK,sBAAA,CAAuB,MAAA,GAAS,GAAA;AAAA,MAC3D;AAEA,MAAA,MAAM,MAAA,GAAS,mBAAmB,aAAa,CAAA;AAE/C,MAAA,IAAI,IAAA,CAAK,cAAc,eAAA,EAAiB;AAEtC,QAAA,IAAI,kBAAkB,OAAA,EAAS;AAC/B,QAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACpB,UAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,UAAA,IAAA,CAAK,IAAI,aAAA,EAAe;AAAA,YACtB,SAAA,EAAW,eAAA;AAAA,YACX,KAAA,EAAO;AAAA,WACR,CAAA;AACD,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AACD,QAAA,MAAM,aAAA,GAAuC;AAAA,UAC3C,MAAA,EAAQ,aAAA;AAAA,UACR,IAAA;AAAA,UACA,SAAA,EAAW,eAAA;AAAA,UACX,QAAA,EAAU,SAAA;AAAA,UACV,QAAQ,MAAA,CAAO;AAAA,SACjB;AACA,QAAA,SAAA,GAAY,aAAa,CAAA;AACzB,QAAA;AAAA,MACF;AAGA,MAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACpB,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,IAAA,CAAK,IAAI,aAAA,EAAe;AAAA,UACtB,SAAA,EAAW,eAAA;AAAA,UACX,KAAA,EAAO;AAAA,SACR,CAAA;AACD,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,MAAM,UAAA,GAAiC;AAAA,QACrC,MAAA,EAAQ,aAAA;AAAA,QACR,IAAA;AAAA,QACA,YAAY,IAAA,CAAK,SAAA;AAAA,QACjB,QAAA,EAAU,eAAA;AAAA,QACV,QAAA,EAAU,SAAA;AAAA,QACV,QAAQ,MAAA,CAAO;AAAA,OACjB;AACA,MAAA,MAAA,GAAS,UAAU,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,WAAW,kBAAkB;AAAA,GACrE;AAEA,EAAA,MAAM,kBAAA,GAA2BA,+BAAY,MAAM;AACjD,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAIL,EAAA,MAAM,WAAA,GAAc,SAAA,GAAY,SAAA,CAAU,SAAS,CAAA,GAAI,IAAA;AAQvD,EAAA,MAAM,uBAAuB,gBAAA,KAAqB,GAAA;AAClD,EAAA,MAAM,mBAAA,GAAsB,aAAA;AAAA,IAC1B,eAAe,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,gBAAA,GAAmB,CAAC,CAAC,CAAA,GAAA;AAAA,GAClD;AAEA,EAAA,MAAM,cAAA,GAAiB,oBAAA,GACnB,mBAAA,GACE,OAAA,GACA,QAAA,GACF,WAAA;AAEJ,EAAA,MAAM,eAAA,GAAkB,oBAAA,GACpB,mBAAA,GACE,QAAA,GACA,MAAA,GACF,gBAAA;AAEJ,EAAA,uBACEtM,eAAAA;AAAA,IAACkC,iBAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,cAAA;AAAA,MACJ,OAAA;AAAA,MACA,kBAAA,EAAoBqK,qBAAA;AAAA,MACpB,WAAA,EAAa,iBAAA;AAAA,MACb,SAAA,EAAW,eAAA;AAAA,MACX,YAAA,EAAc,kBAAA;AAAA,MACd,aAAA,EAAe,EAAE,aAAA,EAAe,iBAAA,EAAkB;AAAA,MAElD,QAAA,EAAA;AAAA,wBAAAvM,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA,EAEpD,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,cAAc,CAAA,EACzD,QAAA,kBAAAG,eAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,UAAA,EAAY,eAAe,cAAA,EACtC,QAAA,EAAA;AAAA,4BAAAH,cAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,OAAO,EAAE,mBAAA,EAAqB,CAAA,OAAA,EAAU,OAAA,CAAQ,MAAM,CAAA,MAAA,CAAA,EAAS,EAC9F,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACpB,cAAA,MAAM,SAAS,OAAA,CAAQ,GAAA,CAAI,IAAI,GAAG,CAAA,IAAK,EAAC,EAAG,MAAA;AAC3C,cAAA,uBACEG,eAAAA,CAAC,WAAA,EAAA,EAA0B,OAAO,GAAA,CAAI,GAAA,EAAK,WAAU,uBAAA,EACnD,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,cAAI,KAAA,EAAM,CAAA;AAAA,gCACrCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAqC,QAAA,EAAA,KAAA,EAAM;AAAA,eAAA,EAAA,EAF3C,IAAI,GAGtB,CAAA;AAAA,YAEJ,CAAC,CAAA,EACH,CAAA;AAAA,YACC,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,cAAAA,CAAC,WAAA,EAAA,EAA0B,KAAA,EAAO,GAAA,CAAI,GAAA,EAAK,SAAA,EAAU,MAAA,EACnD,QAAA,kBAAAA,cAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,MAAA,EAAQ,GAAA;AAAA,gBACR,OAAO,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,GAAG,KAAK,EAAC;AAAA,gBAChC,UAAA;AAAA,gBACA,WAAA;AAAA,gBACA,aAAA;AAAA,gBACA,QAAA,EAAU,SAAA;AAAA,gBACV,aAAA,EAAe;AAAA;AAAA,aACjB,EAAA,EATgB,GAAA,CAAI,GAUtB,CACD;AAAA,WAAA,EACH,CAAA,EACF,CAAA;AAAA,0BAGAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,eAAe,CAAA;AAAA,cAC9D,OAAO,EAAE,mBAAA,EAAqB,CAAA,OAAA,EAAU,OAAA,CAAQ,MAAM,CAAA,iBAAA,CAAA,EAAoB;AAAA,cAEzE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,cAAAA;AAAA,gBAAC,YAAA;AAAA,gBAAA;AAAA,kBAEC,MAAA,EAAQ,GAAA;AAAA,kBACR,OAAO,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,GAAG,KAAK,EAAC;AAAA,kBAChC,UAAA;AAAA,kBACA,WAAA;AAAA,kBACA,aAAA;AAAA,kBACA,QAAA,EAAU,SAAA;AAAA,kBACV,aAAA,EAAe;AAAA,iBAAA;AAAA,gBAPV,GAAA,CAAI;AAAA,eASZ;AAAA;AAAA,WACH;AAAA,0BAEAA,cAAAA,CAAC2M,kBAAA,EAAA,EACE,QAAA,EAAA,WAAA,mBACC3M,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,WAAA;AAAA,cACN,UAAA;AAAA,cACA,QAAA,EAAQ,IAAA;AAAA,cACR;AAAA;AAAA,cAEA,IAAA,EACN;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,YAAA;AAAA,YACN,OAAA;AAAA,YACA,MAAA,EAAQ,YAAA;AAAA,YACR,UAAA,EAAY,gBAAA;AAAA,YACZ,OAAA,EAAS,WAAA;AAAA,YACT,UAAA,EAAY,gBAAA;AAAA,YACZ,UAAA,EAAY,gBAAA;AAAA,YACZ,MAAA,EAAQ,UAAA;AAAA,YACR,OAAA,EAAS;AAAA;AAAA;AACX;AAAA;AAAA,GACF;AAEJ;ACphBA,IAAMuI,MAAAA,GAAcqE,kBAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxB5M,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN,EACF;AAEJ;AACAuI,MAAAA,CAAM,WAAA,GAAc,OAAA;AAEpB,IAAMG,YAAAA,GAAoBkE,kBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB5M,cAAAA,CAAC,OAAA,EAAA,EAAM,KAAU,SAAA,EAAW,EAAA,CAAG,mBAAmB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE7E;AACA0I,YAAAA,CAAY,WAAA,GAAc,aAAA;AAE1B,IAAM,SAAA,GAAkBkE,kBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxB5M,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,MACpD,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAExB,IAAM,WAAA,GAAoB4M,kBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxB5M,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,gDAAA,EAAkD,SAAS,CAAA;AAAA,MACxE,GAAG;AAAA;AAAA;AAGV;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAE1B,IAAMwI,SAAAA,GAAiBoE,kBAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxB5M,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,6EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACAwI,SAAAA,CAAS,WAAA,GAAc,UAAA;AAEvB,IAAM,SAAA,GAAkBoE,kBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxB5M,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,kGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAExB,IAAMyI,UAAAA,GAAkBmE,kBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxB5M,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,gDAAA,EAAkD,SAAS,CAAA;AAAA,MACxE,GAAG;AAAA;AAAA;AAGV;AACAyI,UAAAA,CAAU,WAAA,GAAc,WAAA;AAExB,IAAM,YAAA,GAAqBmE,kBAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxB5M,cAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA;AAGV;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;AC1EpB,SAAS,iBACd,KAAA,EACA;AACA,EAAA,MAAM,EAAE,OAAA,EAAS,IAAA,EAAM,WAAW,UAAA,EAAY,UAAA,EAAA6M,aAAW,GAAI,KAAA;AAC7D,EAAA,MAAM,CAAC,QAAA,EAAU,GAAG,QAAQ,CAAA,GAAI,OAAA;AAChC,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,uBACE7M,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDACZ,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM;AACpB,IAAA,MAAM,mBAAmB,UAAA,GACrB;AAAA,MACE,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAW,wDAAA;AAAA,MACX,OAAA,EAAS,MAAM,UAAA,CAAW,GAAA,EAAK,CAAC,CAAA;AAAA,MAChC,SAAA,EAAW,CAAC,CAAA,KAA2C;AACrD,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,QACnB;AAAA,MACF;AAAA,QAEF,EAAC;AAEL,IAAA,uBACEG,eAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEE,GAAG,gBAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,MAAA,EACpB,0BAAAA,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAA,EAClB,UAAA6M,WAAAA,CAAW,QAAA,EAAU,GAAA,EAAK,CAAC,GAC9B,CAAA,EACF,CAAA;AAAA,0BACA7M,eAAC,WAAA,EAAA,EAAY,SAAA,EAAU,oBACpB,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,qBACbG,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,EAAA;AAAA,gBACT;AAAA,eACF;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sDAAA,EACb,YAAE,KAAA,EACL,CAAA;AAAA,gCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,gCAAA,EAAkC,CAAA,CAAE,SAAS,CAAA,EAC9D,QAAA,EAAA6M,WAAAA,CAAW,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EACvB;AAAA;AAAA,aAAA;AAAA,YAVK,CAAA,CAAE;AAAA,WAYV,CAAA,EACH;AAAA;AAAA,OAAA;AAAA,MAxBK,SAAA,GAAY,SAAA,CAAU,GAAA,EAAK,CAAC,CAAA,GAAI;AAAA,KAyBvC;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AClEA,IAAM,mBAAA,GAAsB,GAAA;AAyBrB,SAAS,cACd,KAAA,EAC2B;AAE3B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI1L,gBAAAA;AAAA,IAAoB,MAC1D,iBAAA,CAAkB,KAAA,CAAM,WAAW;AAAA,GACrC;AACA,EAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,KAAS,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,gBAAA,GACT,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA,GAC5B,YAAA;AAEJ,EAAA,MAAM,OAAA,GAAU6C,mBAAAA;AAAA,IACd,CAAC,IAAA,KAAoB;AACnB,MAAA,IAAI,CAAC,gBAAA,EAAkB,eAAA,CAAgB,IAAI,CAAA;AAC3C,MAAA,KAAA,CAAM,eAAe,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,CAAC,gBAAA,EAAkB,KAAA,CAAM,YAAY;AAAA,GACvC;AAEA,EAAA,MAAM,eAAA,GAAkBA,mBAAAA;AAAA,IACtB,CAAC,KAAa,MAAA,KAAqB;AACjC,MAAA,MAAM,IAAA,GAAO,SACT,iBAAA,CAAkB,IAAA,EAAM,GAAG,CAAA,GAC3B,iBAAA,CAAkB,MAAM,GAAG,CAAA;AAC/B,MAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,IACd,CAAA;AAAA,IACA,CAAC,MAAM,OAAO;AAAA,GAChB;AAGA,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI7C,gBAAAA;AAAA,IAC1C,MAAM,KAAA,CAAM,aAAA,IAAiB;AAAC,GAChC;AACA,EAAA,MAAM,kBAAA,GAAqB,MAAM,MAAA,KAAW,MAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,kBAAA,GAAqB,KAAA,CAAM,MAAA,GAAU,cAAA;AAEpD,EAAA,MAAM,SAAA,GAAY6C,mBAAAA;AAAA,IAChB,CAAC,IAAA,KAAsB;AACrB,MAAA,IAAI,CAAC,kBAAA,EAAoB,iBAAA,CAAkB,IAAI,CAAA;AAC/C,MAAA,KAAA,CAAM,iBAAiB,IAAI,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,CAAC,kBAAA,EAAoB,KAAA,CAAM,cAAc;AAAA,GAC3C;AAIA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI7C,gBAAAA;AAAA,IACpC,OAAO,MAAA,IAAU;AAAA,GACnB;AACA,EAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,IAAoB,mBAAA;AAC7C,EAAAG,kBAAU,MAAM;AACd,IAAA,MAAM,MAAA,GAAS,WAAW,MAAM;AAC9B,MAAA,IAAI,WAAA,MAAiB,MAAA,CAAO,MAAA,IAAU,EAAA,CAAA,EAAK;AAC3C,MAAA,SAAA,CAAU,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,WAAA,IAAe,QAAW,CAAA;AAAA,IAC3D,GAAG,UAAU,CAAA;AACb,IAAA,OAAO,MAAM,aAAa,MAAM,CAAA;AAAA,EAIlC,CAAA,EAAG,CAAC,WAAA,EAAa,UAAU,CAAC,CAAA;AAC5B,EAAA,MAAM,SAAA,GAAY0C,oBAAY,CAAC,CAAA,KAAc,eAAe,CAAC,CAAA,EAAG,EAAE,CAAA;AAGlE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI7C,gBAAAA;AAAA,IACtC,MAAM,MAAM,WAAA,IAAe;AAAA,GAC7B;AACA,EAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,KAAS,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,gBAAA,GAAmB,KAAA,CAAM,IAAA,GAAQ,YAAA;AAC9C,EAAA,MAAM,OAAA,GAAU6C,mBAAAA;AAAA,IACd,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,CAAC,gBAAA,EAAkB,eAAA,CAAgB,IAAI,CAAA;AAC3C,MAAA,KAAA,CAAM,eAAe,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,CAAC,gBAAA,EAAkB,KAAA,CAAM,YAAY;AAAA,GACvC;AAGA,EAAA,MAAM,WAAA,GAAcD,cAAAA,CAAO,aAAA,CAAc,IAAI,CAAC,CAAA;AAC9C,EAAA,MAAM,aAAA,GAAgBA,cAAAA,CAAO,eAAA,CAAgB,MAAM,CAAC,CAAA;AACpD,EAAAzC,kBAAU,MAAM;AACd,IAAA,MAAM,EAAA,GAAK,cAAc,IAAI,CAAA;AAC7B,IAAA,MAAM,EAAA,GAAK,gBAAgB,MAAM,CAAA;AACjC,IAAA,IAAI,EAAA,KAAO,WAAA,CAAY,OAAA,IAAW,EAAA,KAAO,cAAc,OAAA,EAAS;AAC9D,MAAA,IAAI,CAAC,gBAAA,EAAkB,eAAA,CAAgB,CAAC,CAAA;AACxC,MAAA,WAAA,CAAY,OAAA,GAAU,EAAA;AACtB,MAAA,aAAA,CAAc,OAAA,GAAU,EAAA;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,MAAA,EAAQ,gBAAgB,CAAC,CAAA;AAGnC,EAAA,MAAM,QAAA,GACJ,MAAM,UAAA,IAAc,OAAO,MAAM,UAAA,KAAe,QAAA,GAC5C,KAAA,CAAM,UAAA,CAAW,QAAA,GACjB,CAAA;AAEN,EAAA,MAAM,YAAA,GAAe,OAAO,KAAA,CAAM,MAAA,KAAW,UAAA;AAG7C,EAAA,MAAM,QAAA,GAAW4C,eAAAA;AAAA,IACf,MAAO,eAAe,KAAA,CAAM,IAAA,GAAO,YAAY,KAAA,CAAM,IAAA,EAAM,MAAA,EAAQ,KAAA,CAAM,OAAO,CAAA;AAAA,IAChF,CAAC,KAAA,CAAM,IAAA,EAAM,MAAA,EAAQ,KAAA,CAAM,SAAS,YAAY;AAAA,GAClD;AACA,EAAA,MAAM,MAAA,GAASA,eAAAA;AAAA,IACb,MAAO,YAAA,GAAe,QAAA,GAAW,SAAA,CAAU,UAAU,IAAI,CAAA;AAAA,IACzD,CAAC,QAAA,EAAU,IAAA,EAAM,YAAY;AAAA,GAC/B;AACA,EAAA,MAAM,aAAA,GAAgBA,gBAAQ,MAAM;AAClC,IAAA,IAAI,YAAA,IAAgB,QAAA,IAAY,CAAA,EAAG,OAAO,MAAA;AAC1C,IAAA,MAAM,QAAQ,IAAA,GAAO,QAAA;AACrB,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,QAAQ,CAAA;AAAA,EAC7C,GAAG,CAAC,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,YAAY,CAAC,CAAA;AAGzC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI/C,gBAAAA,CAAiB,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,iBAAiB,CAAC,CAAA;AACxD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,iBAAyB,IAAI,CAAA;AACnE,EAAA,MAAM,QAAA,GAAW4C,eAAO,CAAC,CAAA;AAEzB,EAAAzC,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,MAAM,IAAA,GAAO,EAAE,QAAA,CAAS,OAAA;AACxB,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,OAAA,CAAQ,OAAA;AAAA,MACN,MAAM,MAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM,QAAQ;AAAA,KACtC,CACG,IAAA,CAAK,CAAC,GAAA,KAAQ;AACb,MAAA,IAAI,SAAA,IAAa,IAAA,KAAS,QAAA,CAAS,OAAA,EAAS;AAC5C,MAAA,aAAA,CAAc,IAAI,IAAI,CAAA;AACtB,MAAA,cAAA,CAAe,IAAI,KAAK,CAAA;AAAA,IAC1B,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,MAAA,IAAI,SAAA,IAAa,IAAA,KAAS,QAAA,CAAS,OAAA,EAAS;AAC5C,MAAA,OAAA,CAAQ,IAAA,CAAK,kCAAkC,GAAG,CAAA;AAClD,MAAA,aAAA,CAAc,EAAE,CAAA;AAChB,MAAA,cAAA,CAAe,CAAC,CAAA;AAChB,MAAA,cAAA,CAAe,GAAA,IAAO,IAAI,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAAA,IACpD,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,IAAA,EAAM,MAAM,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AAEnD,EAAA,MAAM,SAAA,GAAY,eAAe,UAAA,GAAa,aAAA;AAC9C,EAAA,MAAM,gBAAA,GAAmB,YAAA,GAAe,WAAA,GAAc,QAAA,CAAS,MAAA;AAE/D,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA,EAAa,eAAe,WAAA,GAAc;AAAA,GAC5C;AACF;AAMO,SAAS,kBAAkB,CAAA,EAAyC;AACzE,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAC;AAChB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,CAAA;AAC7B,EAAA,OAAO,CAAC,CAAC,CAAA;AACX;AAEO,SAAS,iBAAA,CACd,SACA,GAAA,EACW;AAEX,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG,OAAO,CAAC,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,CAAA;AACrD,EAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,EAAA,IAAI,IAAA,CAAK,QAAQ,GAAA,EAAK,OAAO,CAAC,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,CAAA;AACjD,EAAA,IAAI,IAAA,CAAK,QAAQ,KAAA,EAAO,OAAO,CAAC,EAAE,GAAA,EAAK,GAAA,EAAK,MAAA,EAAQ,CAAA;AACpD,EAAA,OAAO,EAAC;AACV;AAOO,SAAS,iBAAA,CACd,SACA,GAAA,EACW;AACX,EAAA,MAAM,MAAM,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,GAAG,CAAA;AAClD,EAAA,IAAI,GAAA,KAAQ,EAAA,EAAI,OAAO,CAAC,GAAG,SAAS,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAO,CAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,EAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,EAAO;AACvB,IAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,GAAG,CAAA,GAAI,EAAE,GAAA,EAAK,KAAK,MAAA,EAAO;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,QAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,MAAM,GAAG,CAAA;AAC3C;AAEO,SAAS,WAAA,CACd,IAAA,EACA,MAAA,EACA,OAAA,EACQ;AACR,EAAA,IAAI,MAAA,GAAS,IAAA;AAEb,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,MAAO,CAAC,GAAA,KACtB,MAAA,CAAO,MAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,KAAM,kBAAA,CAAmB,GAAA,EAAK,CAAA,EAAG,OAAO,CAAC;AAAA,KACjE;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,MAAA,CAAO,MAAA,IAAU,EAAA,EAAI,IAAA,GAAO,WAAA,EAAY;AACxD,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,CAAO,YAAY,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAA;AAChE,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,QAAO,CAAC,QACtB,UAAA,CAAW,IAAA;AAAA,UAAK,CAAC,CAAA,KACf,MAAA,CAAQ,GAAA,CAAY,CAAC,CAAA,IAAK,EAAE,CAAA,CACzB,WAAA,EAAY,CACZ,QAAA,CAAS,MAAM;AAAA;AACpB,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAkC,CAAA,EAA+B;AAC/E,EAAA,IAAI,CAAA,CAAE,UAAA,KAAe,MAAA,EAAW,OAAO,CAAA,CAAE,UAAA;AACzC,EAAA,QAAQ,EAAE,SAAA;AAAW,IACnB,KAAK,QAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEA,SAAS,kBAAA,CACP,GAAA,EACA,CAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,EAAE,KAAK,CAAA;AACjD,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,CAAI,YAAY,OAAO,IAAA;AACpC,EAAA,MAAM,KAAA,GAAS,GAAA,CAAY,CAAA,CAAE,KAAK,CAAA;AAClC,EAAA,MAAM,EAAA,GAAK,EAAE,QAAA,IAAY,QAAA;AAEzB,EAAA,QAAQ,IAAI,UAAA;AAAY,IACtB,KAAK,MAAA,EAAQ;AACX,MAAA,IAAI,EAAE,KAAA,KAAU,MAAA,IAAa,CAAA,CAAE,KAAA,KAAU,IAAI,OAAO,IAAA;AACpD,MAAA,OAAO,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,CACtB,WAAA,EAAY,CACZ,QAAA,CAAS,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,CAAE,WAAA,EAAa,CAAA;AAAA,IAC3C;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACtB,MAAA,MAAM,EAAA,GAAK,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA;AACzB,MAAA,IAAI,MAAA,CAAO,MAAM,CAAC,CAAA,IAAK,OAAO,KAAA,CAAM,EAAE,GAAG,OAAO,KAAA;AAChD,MAAA,OAAO,QAAA,CAAS,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,IAC3B;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA,YAAiB,IAAA,GAAO,KAAA,GAAQ,IAAI,KAAK,KAAK,CAAA;AACxD,MAAA,MAAM,EAAA,GAAK,EAAE,KAAA,YAAiB,IAAA,GAAO,EAAE,KAAA,GAAQ,IAAI,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA;AAC/D,MAAA,IAAI,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAA,EAAG,OAAO,KAAA;AACpE,MAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,CAAC,EAAE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC1C,MAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC3C,MAAA,OAAO,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA;AAAA,IAC5B;AAAA,IACA,KAAK,UAAA;AACH,MAAA,OAAO,MAAA,CAAO,KAAK,CAAA,KAAM,MAAA,CAAO,EAAE,KAAK,CAAA;AAAA,IACzC,KAAK,SAAA;AACH,MAAA,OAAO,OAAA,CAAQ,KAAK,CAAA,KAAM,OAAA,CAAQ,EAAE,KAAK,CAAA;AAAA,IAC3C;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEA,SAAS,QAAA,CAAS,CAAA,EAAW,CAAA,EAAW,EAAA,EAAqB;AAC3D,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,KAAM,CAAA;AAAA,IACf,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,KAAM,CAAA;AAAA,IACf,KAAK,cAAA;AACH,MAAA,OAAO,CAAA,GAAI,CAAA;AAAA,IACb,KAAK,WAAA;AACH,MAAA,OAAO,CAAA,GAAI,CAAA;AAAA,IACb,KAAK,eAAA;AACH,MAAA,OAAO,CAAA,IAAK,CAAA;AAAA,IACd,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,IAAK,CAAA;AAAA,IACd;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEO,SAAS,SAAA,CACd,MACA,IAAA,EACQ;AACR,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC9B,EAAA,OAAO,CAAC,GAAG,IAAI,CAAA,CACZ,GAAA,CAAI,CAAC,GAAA,EAAK,GAAA,MAAS,EAAE,GAAA,EAAK,KAAI,CAAE,CAAA,CAChC,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACd,IAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,MAAA,MAAM,EAAA,GAAM,CAAA,CAAE,GAAA,CAAY,KAAA,CAAM,GAAG,CAAA;AACnC,MAAA,MAAM,EAAA,GAAM,CAAA,CAAE,GAAA,CAAY,KAAA,CAAM,GAAG,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,aAAA,CAAc,EAAA,EAAI,EAAE,CAAA;AAChC,MAAA,IAAI,QAAQ,CAAA,EAAG,OAAO,MAAM,GAAA,KAAQ,KAAA,GAAQ,MAAM,CAAC,GAAA;AAAA,IACrD;AACA,IAAA,OAAO,CAAA,CAAE,MAAM,CAAA,CAAE,GAAA;AAAA,EACnB,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AACrB;AAEA,SAAS,aAAA,CAAc,GAAQ,CAAA,EAAgB;AAC7C,EAAA,IAAI,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,IAAA,EAAM,OAAO,CAAA;AACnC,EAAA,IAAI,CAAA,IAAK,MAAM,OAAO,CAAA;AACtB,EAAA,IAAI,CAAA,IAAK,MAAM,OAAO,EAAA;AACtB,EAAA,IAAI,CAAA,YAAa,QAAQ,CAAA,YAAa,IAAA;AACpC,IAAA,OAAO,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA,CAAE,OAAA,EAAQ;AACjC,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,SAAiB,CAAA,GAAI,CAAA;AAC/D,EAAA,OAAO,OAAO,CAAC,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA;AAC1C;AAEA,SAAS,cAAc,IAAA,EAAyB;AAC9C,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,CAAA,EAAI,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA,CAAE,KAAK,GAAG,CAAA;AACtD;AAEA,SAAS,gBAAgB,MAAA,EAA6B;AACpD,EAAA,MAAM,MAAA,GAAA,CAAU,OAAO,MAAA,IAAU,IAC9B,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,KAAK,IAAI,CAAA,CAAE,QAAA,IAAY,EAAE,CAAA,CAAA,EAAI,MAAA,CAAO,CAAA,CAAE,KAAK,CAAC,CAAA,CAAE,CAAA,CAC9D,IAAA,CAAK,GAAG,CAAA;AACX,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,MAAA,IAAU,EAAE,IAAI,MAAM,CAAA,CAAA;AACzC;AC9TO,SAAS,YACd,KAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAQ,cAAoB,KAAK,CAAA;AACvC,EAAA,MAAM,EAAE,OAAA,EAAS,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,SAAQ,GAAI,KAAA;AAEzD,EAAA,MAAM,gBAAA,GAAmB,MAAM,gBAAA,IAAoB,GAAA;AACnD,EAAA,MAAM,aAAA,GAAgB,MAAM,kBAAA,KAAuB,KAAA;AACnD,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,CAAA,YAAA,EAAe,gBAAA,GAAmB,CAAC,CAAA,GAAA,CAAK,CAAA;AACvE,EAAA,MAAM,gBAAgB,aAAA,IAAiB,QAAA;AAEvC,EAAA,uBACEnB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA,EAC5D,QAAA,EAAA;AAAA,IAAA,CAAA,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,gBAAA,IAAoB,KAAA,CAAM,uCACtDH,cAAAA;AAAA,MAAC8M,QAAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,cAAc,KAAA,CAAM,OAAA;AAAA,QACpB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,gBAAgB,KAAA,CAAM,SAAA;AAAA,QACtB,oBAAA,EAAsB,CAAC,MAAA,KACrB,KAAA,CAAM,SAAA,CAAU,EAAE,GAAG,KAAA,CAAM,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,QAE7C,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,QACxB,oBAAoB,KAAA,CAAM,kBAAA;AAAA,QAC1B,mBAAmB,KAAA,CAAM;AAAA;AAAA,KAC3B;AAAA,IAED,aAAA,GACC,MAAM,OAAA,mBACJ9M,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDACZ,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,IAAI,KAAA,CAAM,QAAA,IAAY,GAAG,CAAC,CAAA,EAAG,CAAA,CAAE,GAAA;AAAA,MACxD,CAAC,CAAA,EAAG,CAAA,qBACFG,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAH,cAAAA,CAAC,cAAW,SAAA,EAAU,MAAA,EACpB,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,OAAA,EAAQ,CAAA,EACjC,CAAA;AAAA,wBACAG,eAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,gBAAA,EACrB,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,0BAChCA,cAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,OAAA,EAAQ;AAAA,SAAA,EACjC;AAAA,OAAA,EAAA,EAPS,CAAA,QAAA,EAAW,CAAC,CAAA,CAQvB;AAAA,OAGN,CAAA,GACE,KAAA,CAAM,eAAe,IAAA,mBACvBA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,QAAA,EAAA,gBAAA,CAAiB,MAAM,KAAA,EAAO,KAAA,CAAM,WAAW,CAAA,EAClD,CAAA,GACE,MAAM,SAAA,CAAU,MAAA,KAAW,CAAA,mBAC7BA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCACZ,QAAA,EAAA,eAAA,CAAgB,KAAA,CAAM,MAAM,CAAA,IAAK,IAAA,CAAK,MAAA,KAAW,CAAA,GAChD,OAAO,KAAA,CAAM,KAAA,KAAU,YAAY,KAAA,CAAM,KAAA,KAAU,yBACjDA,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OACG,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,IAAY,MAAM,KAAA,IAC1C;AAAA;AAAA,KAEJ,GAEA,KAAA,CAAM,KAAA,GAEN,OAAO,KAAA,CAAM,cAAc,QAAA,IAC7B,KAAA,CAAM,SAAA,KAAc,MAAA,mBACpBA,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OACG,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,IAAY,MAAM,SAAA,IAC9C;AAAA;AAAA,KAEJ,GAEA,KAAA,CAAM,SAAA,EAEV,CAAA,mBAEAA,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,MAAM,KAAA,CAAM,SAAA;AAAA,QACZ,SAAA;AAAA,QACA,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB;AAAA;AAAA,KACF,mBAGFG,eAAAA,CAACoI,MAAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,OAAA,oBAAWvI,cAAAA,CAAC,YAAA,EAAA,EAAc,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,sBACnCA,cAAAA,CAAC0I,YAAAA,EAAA,EACC,QAAA,kBAAA1I,cAAAA,CAACwI,SAAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZxI,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UAEC,WAAW,EAAA,CAAG,gBAAA,CAAiB,CAAC,CAAA,EAAG,EAAE,eAAe,CAAA;AAAA,UACpD,WAAA,EAAW,WAAA,CAAY,KAAA,CAAM,IAAA,EAAM,EAAE,GAAG,CAAA;AAAA,UAEvC,QAAA,EAAA,CAAA,CAAE,2BACDG,eAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,CAAC,CAAA,KACR,KAAA,CAAM,gBAAgB,CAAA,CAAE,GAAA,EAAK,EAAE,QAAQ,CAAA;AAAA,cAEzC,KAAA,EAAM,uDAAA;AAAA,cACN,SAAA,EAAU,iFAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,gCACfA,eAAC,aAAA,EAAA,EAAc,IAAA,EAAM,MAAM,IAAA,EAAM,SAAA,EAAW,EAAE,GAAA,EAAK;AAAA;AAAA;AAAA,cAGrD,CAAA,CAAE;AAAA,SAAA;AAAA,QAjBC,CAAA,CAAE;AAAA,OAoBV,GACH,CAAA,EACF,CAAA;AAAA,sBACAA,cAAAA,CAAC,SAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,0BACLA,cAAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,QAAA,IAAY,GAAG,CAAC;AAAA;AAAA,OACxC,GACE,MAAM,WAAA,IAAe,IAAA,mBACvBA,cAAAA,CAACwI,SAAAA,EAAA,EACC,QAAA,kBAAAxI,cAAAA;AAAA,QAACyI,UAAAA;AAAA,QAAA;AAAA,UACC,SAAS,OAAA,CAAQ,MAAA;AAAA,UACjB,SAAA,EAAU,kCAAA;AAAA,UAEV,QAAA,kBAAAzI,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,2BAAiB,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,WAAW,CAAA,EAClD;AAAA;AAAA,OACF,EACF,CAAA,GACE,KAAA,CAAM,SAAA,CAAU,MAAA,KAAW,oBAC7BA,cAAAA,CAACwI,SAAAA,EAAA,EACC,QAAA,kBAAAxI,cAAAA;AAAA,QAACyI,UAAAA;AAAA,QAAA;AAAA,UACC,SAAS,OAAA,CAAQ,MAAA;AAAA,UACjB,SAAA,EAAU,kCAAA;AAAA,UAET,0BAAgB,KAAA,CAAM,MAAM,KAAK,IAAA,CAAK,MAAA,KAAW,oBAChDzI,cAAAA,CAAC,SAAI,SAAA,EAAU,mCAAA,EACZ,iBAAO,KAAA,CAAM,KAAA,KAAU,YAAY,KAAA,CAAM,KAAA,KAAU,yBAClDA,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,OACG,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,IAAY,MAAM,KAAA,IAC1C;AAAA;AAAA,cAIJ,KAAA,CAAM,KAAA,EAEV,CAAA,mBAEAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACZ,QAAA,EAAA,OAAO,MAAM,SAAA,KAAc,QAAA,IAC5B,KAAA,CAAM,SAAA,KAAc,yBAClBA,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,OACG,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,IAAY,MAAM,SAAA,IAC9C;AAAA;AAAA,WAEJ,GAEA,MAAM,SAAA,EAEV;AAAA;AAAA,OAEJ,EACF,IAEA,KAAA,CAAM,SAAA,CAAU,IAAI,CAAC,GAAA,EAAK,sBACxBA,cAAAA;AAAA,QAACwI,SAAAA;AAAA,QAAA;AAAA,UAEE,GAAG,aAAA,CAAc,GAAA,EAAK,CAAA,EAAG,MAAM,UAAU,CAAA;AAAA,UAEzC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZxI,cAAAA;AAAA,YAACyI,UAAAA;AAAA,YAAA;AAAA,cAEC,WAAW,EAAA,CAAG,cAAA,CAAe,CAAC,CAAA,EAAG,EAAE,SAAS,CAAA;AAAA,cAE3C,QAAA,EAAA,UAAA,CAAW,CAAA,EAAG,GAAA,EAAK,CAAC;AAAA,aAAA;AAAA,YAHhB,CAAA,CAAE;AAAA,WAKV;AAAA,SAAA;AAAA,QAVI,SAAA,GAAY,SAAA,CAAU,GAAA,EAAK,CAAC,CAAA,GAAI;AAAA,OAYxC,CAAA,EAEL;AAAA,KAAA,EACF,CAAA;AAAA,IAED,KAAA,CAAM,QAAA,GAAW,CAAA,oBAChBzI,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,OAAO,KAAA,CAAM,gBAAA;AAAA,QACb,cAAc,KAAA,CAAM;AAAA;AAAA;AACtB,GAAA,EAEJ,CAAA;AAEJ;AAMA,SAAS,UAAA,CACP,CAAA,EACA,GAAA,EACA,CAAA,EACiB;AACjB,EAAA,IAAI,EAAE,IAAA,EAAM,OAAO,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC,CAAA;AAChC,EAAA,MAAM,GAAA,GAAO,GAAA,CAAY,CAAA,CAAE,GAAG,CAAA;AAC9B,EAAA,OAAO,YAAY,GAAA,EAAK,CAAA,CAAE,WAAW,CAAA,CAAE,QAAA,EAAU,EAAE,MAAM,CAAA;AAC3D;AAMA,IAAM,qBAAA,GAAwB,OAAA;AAE9B,SAAS,WAAA,CACP,KAAA,EACA,SAAA,EACA,QAAA,EACA,MAAA,EACiB;AACjB,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAI,OAAO,QAAA;AAClE,EAAA,MAAM,KAAK,MAAA,IAAU,qBAAA;AACrB,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA,YAAiB,IAAA,GAAO,KAAA,GAAQ,IAAI,KAAK,KAAK,CAAA;AACxD,MAAA,IAAI,MAAA,CAAO,MAAM,CAAA,CAAE,OAAA,EAAS,CAAA,EAAG,OAAO,OAAO,KAAK,CAAA;AAClD,MAAA,OAAOqB,cAAAA,CAAO,GAAG,aAAa,CAAA;AAAA,IAChC;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,KAAK,YAAA,CAAa,EAAE,EAAE,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACvD,KAAK,UAAA;AACH,MAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,EAAA,EAAI;AAAA,QAC/B,KAAA,EAAO,UAAA;AAAA,QACP,UAAU,QAAA,IAAY;AAAA,OACvB,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACzB,KAAK,SAAA;AACH,MAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,EAAA,EAAI;AAAA,QAC/B,KAAA,EAAO,SAAA;AAAA,QACP,qBAAA,EAAuB;AAAA,OACxB,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACzB;AACE,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA;AAEzB;AAEA,SAAS,iBAAsC,CAAA,EAA8B;AAC3E,EAAA,QAAQ,EAAE,KAAA;AAAO,IACf,KAAK,OAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT;AACE,MAAA,OAAO,WAAA;AAAA;AAEb;AAEA,SAAS,eAAoC,CAAA,EAA8B;AACzE,EAAA,QAAQ,EAAE,KAAA;AAAO,IACf,KAAK,OAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT;AACE,MAAA,OAAO,EAAA;AAAA;AAEb;AAEA,SAAS,WAAA,CACP,MACA,GAAA,EACqC;AACrC,EAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,GAAG,CAAA;AAC5C,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,OAAO,KAAA,CAAM,GAAA,KAAQ,KAAA,GAAQ,WAAA,GAAc,YAAA;AAC7C;AAEA,SAAS,iBACP,OAAA,EACa;AACb,EAAA,OAAO,QACJ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA,CACxB,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAE,KAAK,KAAA,EAAO,CAAA,CAAE,OAAM,CAAE,CAAA;AAClD;AAEA,SAAS,mBACP,OAAA,EACe;AACf,EAAA,OAAO,OAAA,CACJ,OAAO,CAAC,CAAA,KAAM,EAAE,UAAU,CAAA,CAC1B,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACX,OAAO,CAAA,CAAE,GAAA;AAAA,IACT,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,MAAM,CAAA,CAAE,UAAA;AAAA,IACR,GAAI,CAAA,CAAE,YAAA,IAAgB;AAAC,GACzB,CAAE,CAAA;AACN;AAEA,SAAS,mBAAmB,IAAA,EAA+B;AACzD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAE,GAAA,EAAK,SAAA,EAAW,CAAA,CAAE,GAAA,EAAI,CAAE,CAAA;AAC7D;AAEA,SAAS,mBAAmB,OAAA,EAAkC;AAC5D,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,CAAE,KAAA,EAAO,GAAA,EAAK,CAAA,CAAE,SAAA,EAAU,CAAE,CAAA;AAChE;AASA,SAAS,gBAAA,CAAiB;AAAA,EACxB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,KAAA,GAAQ,KAAA,KAAU,CAAA,GAAI,CAAA,GAAI,OAAO,QAAA,GAAW,CAAA;AAClD,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAA,CAAK,IAAA,GAAO,CAAA,IAAK,UAAU,KAAK,CAAA;AACjD,EAAA,MAAM,QAAA,GAAW,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,KAAA,GAAQ,QAAQ,CAAA,GAAI,CAAC,CAAA;AAE5D,EAAA,uBACElB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mFAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sDAAA,EAAuD,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MAC5D,KAAA;AAAA,MAAM,QAAA;AAAA,MAAE,GAAA;AAAA,MAAI,MAAA;AAAA,MAAK;AAAA,KAAA,EAC5B,CAAA;AAAA,oBACAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACb,QAAA,EAAA;AAAA,sBAAAH,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,GAAO,CAAC,CAAC,CAAA;AAAA,UACjD,UAAU,IAAA,KAAS,CAAA;AAAA,UACnB,YAAA,EAAW,eAAA;AAAA,UACZ,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,CAAK,IAAI,QAAA,EAAU,IAAA,GAAO,CAAC,CAAC,CAAA;AAAA,UACxD,UAAU,IAAA,IAAQ,QAAA;AAAA,UAClB,YAAA,EAAW,WAAA;AAAA,UACZ,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAeA,SAAS8M,SAA6B,KAAA,EAA2B;AAC/D,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,UAAA,GAAmBC,kBAAA,CAAA,OAAA;AAAA,IACvB,MAAM,iBAAiB,OAAO,CAAA;AAAA,IAC9B,CAAC,OAAO;AAAA,GACV;AACA,EAAA,MAAM,YAAA,GAAqBA,kBAAA,CAAA,OAAA;AAAA,IACzB,MAAM,mBAAmB,OAAO,CAAA;AAAA,IAChC,CAAC,OAAO;AAAA,GACV;AAIA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUA,kBAAA,CAAA,QAAA;AAAA,IAC1C,OAAO,MAAA,IAAU;AAAA,GACnB;AACA,EAAMA,6BAAU,MAAM;AACpB,IAAA,cAAA,CAAe,MAAA,CAAO,UAAU,EAAE,CAAA;AAAA,EACpC,CAAA,EAAG,CAAC,MAAA,CAAO,MAAM,CAAC,CAAA;AAElB,EAAA,uBACE5M,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8FAAA,EACZ,QAAA,EAAA;AAAA,IAAA,YAAA,mBACCH,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,MAAA;AAAA,QACL,KAAA,EAAO,WAAA;AAAA,QACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,UAAA,MAAM,CAAA,GAAI,EAAE,MAAA,CAAO,KAAA;AACnB,UAAA,cAAA,CAAe,CAAC,CAAA;AAChB,UAAA,cAAA,CAAe,CAAC,CAAA;AAAA,QAClB,CAAA;AAAA,QACA,aAAa,iBAAA,IAAqB,WAAA;AAAA,QAClC,SAAA,EAAU;AAAA;AAAA,KACZ,mBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,CAAA;AAAA,oBAGPG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EACZ,QAAA,EAAA;AAAA,MAAA,kBAAA,IAAsB,YAAA,CAAa,MAAA,GAAS,CAAA,oBAC3CH,cAAAA;AAAA,QAAC,uBAAA;AAAA,QAAA;AAAA,UACC,eAAA,EAAiB,YAAA;AAAA,UACjB,cAAA,EAAgB,MAAA,CAAO,MAAA,IAAU,EAAC;AAAA,UAClC,cAAA,EAAgB;AAAA;AAAA,OAClB;AAAA,MAED,gBAAA,IAAoB,UAAA,CAAW,MAAA,GAAS,CAAA,oBACvCA,cAAAA;AAAA,QAAC,qBAAA;AAAA,QAAA;AAAA,UACC,eAAA,EAAiB,UAAA;AAAA,UACjB,iBAAA,EAAmB,mBAAmB,IAAI,CAAA;AAAA,UAC1C,cAAc,CAAC,OAAA,KAAY,YAAA,CAAa,kBAAA,CAAmB,OAAO,CAAC;AAAA;AAAA;AACrE,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAiC;AAAA,EACxC,OAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,uBACEA,cAAAA,CAAA0E,mBAAAA,EAAA,EACG,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,MAAA,qBACrC1E,cAAAA,CAACwI,SAAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACZxI,cAAAA,CAACyI,UAAAA,EAAA,EAAsB,SAAA,EAAW,cAAA,CAAe,CAAC,GAChD,QAAA,kBAAAzI,cAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,4BAAA;AAAA,QACA,CAAA,CAAE,KAAA,KAAU,OAAA,GAAU,cAAA,GAAiB;AAAA;AACzC;AAAA,GACF,EAAA,EANc,EAAE,GAOlB,CACD,KAVY,CAAA,SAAA,EAAY,MAAM,CAAA,CAWjC,CACD,CAAA,EACH,CAAA;AAEJ;AAEA,SAAS,gBAAgB,MAAA,EAGb;AACV,EAAA,OAAO,CAAC,OAAO,MAAA,KAAW,CAAC,OAAO,MAAA,IAAU,MAAA,CAAO,OAAO,MAAA,KAAW,CAAA,CAAA;AACvE;AAEA,SAAS,gBAAA,CACP,OACA,WAAA,EACiB;AACjB,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,MAAM,WAAW,CAAA;AACzD,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,KAAA;AAClD,EAAA,MAAM,MAAM,WAAA,YAAuB,KAAA,GAAQ,WAAA,CAAY,OAAA,GAAU,OAAO,WAAW,CAAA;AACnF,EAAA,uBACEA,cAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,oBAAA;AAAA,MACN,aAAa,GAAA,IAAO;AAAA;AAAA,GACtB;AAEJ;AAEA,SAAS,aAAA,CACP,GAAA,EACA,KAAA,EACA,UAAA,EACoE;AACpE,EAAA,IAAI,CAAC,UAAA,EAAY,OAAO,EAAC;AACzB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,CAAA;AAAA,IACV,SAAA,EAAW,gDAAA;AAAA,IACX,OAAA,EAAS,MAAM,UAAA,CAAW,GAAA,EAAK,KAAK,CAAA;AAAA,IACpC,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,MACvB;AAAA,IACF;AAAA,GACF;AACF;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,IAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,MAAM,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,SAAS,CAAA;AACrD,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,uBACEA,cAAAA,CAACgN,0BAAA,EAAA,EAAe,SAAA,EAAU,oDAAA,EAAqD,CAAA;AAAA,EAEnF;AACA,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAG,CAAA;AACtB,EAAA,uBACE7M,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gEAAA,EACb,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,GAAA,KAAQ,KAAA,mBACbH,cAAAA,CAACY,uBAAA,EAAU,SAAA,EAAU,aAAA,EAAc,CAAA,mBAEnCZ,cAAAA,CAACW,uBAAAA,EAAA,EAAY,WAAU,aAAA,EAAc,CAAA;AAAA,IAEtC,IAAA,CAAK,SAAS,CAAA,oBACbX,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,QAAA,EAAA,GAAA,GAAM,CAAA,EAAE;AAAA,GAAA,EAEvD,CAAA;AAEJ;AC3jBA,IAAM,MAAA,GAAS,GAAA;AACf,IAAM,GAAA,GAAM,CAAA;AAEL,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,KAAA,EAAAwD,MAAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA,GAAS;AACX,CAAA,EAAuC;AACrC,EAAA,MAAM,MAAA,GAAS,MAAA;AAEf,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAmB,CAAA,KAAM,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AACtF,EAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,IAAA,uBACExD,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,CAAA,IAAA,EAAO,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,QAChC,mBAAA,EAAoB,MAAA;AAAA,QACpB,SAAA;AAAA,QACA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,EAAM,OAAA,EAAS,OAAA;AAAQ;AAAA,KAClE;AAAA,EAEJ;AAEA,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,eAAe,CAAA;AACtC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,eAAe,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,KAAK,EAAA,IAAM,CAAA;AAEvB,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,KACV,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA,GAAS,CAAA,GAAI,GAAA,GAAO,CAAA,IAAK,MAAA,GAAS,CAAA,GAAI,GAAA,CAAA,IAAS,KAAK,MAAA,GAAS,CAAA,CAAA;AAClF,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,KAAsB,MAAA,GAAS,OAAQ,CAAA,GAAI,EAAA,KAAO,MAAA,GAAS,CAAA,GAAI,GAAA,CAAA,GAAQ,GAAA;AAEnF,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,IAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;AACnC,IAAA,MAAA,IAAU,GAAG,MAAA,GAAS,IAAA,GAAO,GAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,EAAA,CAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,EACzE,CAAC,CAAA;AAED,EAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,KAAM,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,CAAW,CAAC,CAAA;AACzF,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,GAAS,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,KAAK,QAAQ,CAAA;AAC5B,EAAA,MAAM,MAAA,GACJ,UACA,CAAA,EAAG,MAAM,KAAK,EAAA,CAAG,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,IAAI,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK,EAAA,CAAG,kBAAkB,CAAA,CAAE,QAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,GAAS,GAAG,CAAA,EAAA,CAAA;AAE7G,EAAA,MAAM,QAAA,GAAW,WAAW,IAAA,IAAQ,MAAA,KAAW,UAAa,CAAC,MAAA,CAAO,MAAM,MAAM,CAAA;AAEhF,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,CAAA,IAAA,EAAO,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAChC,mBAAA,EAAoB,MAAA;AAAA,MACpB,SAAA;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,EAAM,OAAA,EAAS,OAAA,EAAQ;AAAA,MAE/D,QAAA,EAAA;AAAA,QAAA,MAAA,oBAAUH,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,MAAA,EAAQ,MAAMwD,MAAAA,EAAO,WAAA,EAAa,GAAA,EAAK,MAAA,EAAO,MAAA,EAAO,CAAA;AAAA,QACxE,MAAA,oBAAUxD,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQwD,MAAAA,EAAO,WAAA,EAAa,GAAA,EAAK,IAAA,EAAK,MAAA,EAAO,CAAA;AAAA,QACxE,QAAA,oBACCxD,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAI,EAAA,CAAG,QAAQ,CAAA,EAAG,EAAA,EAAI,GAAG,MAAgB,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,MAAMwD,MAAAA,EAAO;AAAA;AAAA;AAAA,GAE3E;AAEJ;AC7DA,IAAMyJ,IAAAA,GAAM,CAAA;AAEL,SAAS,gBAAA,CAAiB;AAAA,EAC/B,IAAA;AAAA,EACA,KAAA,EAAAzJ,MAAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,EAAA;AAAA,EACR,MAAA,GAAS;AACX,CAAA,EAA8C;AAC5C,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAmB,CAAA,KAAM,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AACtF,EAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,IAAA,uBACExD,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,QAC/B,mBAAA,EAAoB,MAAA;AAAA,QACpB,SAAA;AAAA,QACA,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,EAAM,OAAA,EAAS,OAAA;AAAQ;AAAA,KACxE;AAAA,EAEJ;AAEA,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,eAAe,CAAA;AACtC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,eAAe,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,KAAK,EAAA,IAAM,CAAA;AAEvB,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,KACV,IAAA,CAAK,UAAU,CAAA,GAAI,KAAA,GAAQ,CAAA,GAAIiN,IAAAA,GAAO,CAAA,IAAK,KAAA,GAAQ,CAAA,GAAIA,IAAAA,CAAAA,IAAS,KAAK,MAAA,GAAS,CAAA,CAAA;AAEhF,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,KAAsBA,IAAAA,GAAAA,CAAQ,IAAI,EAAA,KAAO,MAAA,GAAS,IAAIA,IAAAA,CAAAA,GAAQ,GAAA;AAE1E,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,IAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;AACnC,IAAA,MAAA,IAAU,GAAG,MAAA,GAAS,IAAA,GAAO,GAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,EAAA,CAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,EACzE,CAAC,CAAA;AAED,EAAA,uBACEjN,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,mBAAA,EAAoB,MAAA;AAAA,MACpB,SAAA;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,EAAM,OAAA,EAAS,OAAA,EAAQ;AAAA,MAErE,QAAA,EAAA,MAAA,oBAAUA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQwD,MAAAA,EAAO,WAAA,EAAa,GAAA,EAAK,IAAA,EAAK,MAAA,EAAO;AAAA;AAAA,GAC3E;AAEJ;;;ACvDO,SAAS,WAAW,CAAA,EAA+C;AACxE,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW,OAAO,EAAA;AAC1C,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA;AAClC,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG,OAAO,EAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACtB,EAAA,IAAI,GAAA,IAAO,KAAW,OAAO,CAAA,EAAA,CAAI,IAAI,GAAA,EAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAC1D,EAAA,IAAI,GAAA,IAAO,KAAO,OAAO,CAAA,EAAA,CAAI,IAAI,GAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAClD,EAAA,IAAI,OAAO,SAAA,CAAU,CAAC,CAAA,EAAG,OAAO,EAAE,QAAA,EAAS;AAC3C,EAAA,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAA;AACpB;AAMO,SAAS,qBAAqB,MAAA,EAA0C;AAC7E,EAAA,IAAI,UAAU,CAAA,EAAG,OAAO,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AAChC,EAAA,IAAI,WAAW,CAAA,EAAG,OAAO,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AACjC,EAAA,IAAI,WAAW,CAAA,EAAG,OAAO,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA;AACjC,EAAA,OAAO,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA,EAAG,SAAS,CAAC,CAAA;AAC/C;ACIA,IAAM,QAAA,GAAW,EAAA;AACjB,IAAM,SAAA,GAAY,EAAA;AAClB,IAAM,OAAA,GAAU,EAAA;AAChB,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,gBAAA,GAAmB,SAAA;AACzB,IAAM,cAAA,GAAiB,SAAA;AAWvB,SAAS,gBAAA,CACP,IAAA,EACA,KAAA,EACA,MAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAmB,CAAA,KAAM,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AAC3E,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE9B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAC3B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAC3B,EAAA,MAAM,GAAA,GAAM,EAAA,GAAK,EAAA,IAAM,EAAA,GAAK,GAAA,GAAM,CAAA;AAClC,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,EAAA,GAAK,MAAM,GAAG,CAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,GAAM,GAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,CAAA;AAE/B,EAAA,MAAM,MAAA,GAAS,QAAQ,QAAA,GAAW,SAAA;AAClC,EAAA,MAAM,MAAA,GAAS,SAAS,OAAA,GAAU,UAAA;AAElC,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,KAAA;AAAA,IACR,MAAA,EAAQ,MAAA;AAAA,IACR,KAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAA,EAAI,CAAC,CAAA,KAAO,IAAA,CAAK,MAAA,IAAU,CAAA,GAAI,QAAA,GAAW,MAAA,GAAS,CAAA,GAAI,QAAA,GAAY,CAAA,GAAI,MAAA,IAAW,KAAK,MAAA,GAAS,CAAA,CAAA;AAAA,IAChG,IAAI,CAAC,CAAA,KAAM,WAAW,CAAA,GAAA,CAAK,CAAA,GAAI,SAAS,KAAA,IAAS;AAAA,GACnD;AACF;AAEA,SAAS,WAAA,CACP,MACA,CAAA,EACoC;AACpC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,SAAA,GAAY,EAAA;AAChB,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,IAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;AACnC,IAAA,IAAI,SAAA,KAAc,IAAI,SAAA,GAAY,CAAA;AAClC,IAAA,MAAA,IAAU,GAAG,MAAA,GAAS,IAAA,GAAO,GAAG,CAAA,EAAG,CAAA,CAAE,GAAG,CAAC,CAAA,CAAE,QAAQ,CAAC,CAAC,IAAI,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,EAC7E,CAAC,CAAA;AACD,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,GAAS,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,KAAK,QAAQ,CAAA;AAC5B,EAAA,MAAM,SACJ,MAAA,IAAU,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,UAAa,CAAC,MAAA,CAAO,KAAA,CAAM,MAAM,IACrE,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,GAAG,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,MAAA,GAAS,UAAU,KAAK,CAAA,CAAE,EAAA,CAAG,SAAS,CAAA,CAAE,QAAQ,CAAC,CAAC,IAAI,CAAA,CAAE,MAAA,GAAS,UAAU,CAAA,EAAA,CAAA,GACxH,EAAA;AACN,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;AAEO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,EAAAA,MAAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR,MAAA,GAAS,GAAA;AAAA,EACT,IAAA,GAAO,EAAA;AAAA,EACP,WAAA,GAAc,IAAA;AAAA,EACd;AACF,CAAA,EAAuC;AACrC,EAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAChD,EAAA,MAAM,OAAA,GAAgB0J,0BAA6B,IAAI,CAAA;AACvD,EAAA,MAAM,CAAC,SAAA,EAAW,aAAa,CAAA,GAAUA,4BAAwB,IAAI,CAAA;AAErE,EAAA,MAAM,iBAAA,GAA0BA,kBAAA,CAAA,WAAA;AAAA,IAC9B,CAAC,CAAA,KAAuC;AACtC,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB;AACnD,MAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AAEtB,MAAA,MAAM,UAAW,CAAA,CAAE,OAAA,GAAU,KAAK,IAAA,IAAQ,IAAA,CAAK,QAAS,GAAA,CAAI,MAAA;AAC5D,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,GAAS,QAAA,GAAW,SAAA;AACvC,MAAA,IAAI,MAAA,GAAS,QAAA,IAAY,MAAA,GAAS,GAAA,CAAI,SAAS,SAAA,EAAW;AACxD,QAAA,aAAA,CAAc,IAAI,CAAA;AAClB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAA,CAAS,SAAS,QAAA,IAAY,MAAA;AACpC,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA;AAChD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,GAAG,CAAC,CAAA;AAE1D,MAAA,IAAI,QAAA,GAAW,OAAA;AACf,MAAA,IAAI,IAAA,CAAK,QAAQ,CAAA,KAAM,IAAA,IAAQ,OAAO,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAW,CAAA,EAAG;AACrE,QAAA,KAAA,IAAS,OAAO,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA,EAAG;AAChD,UAAA,MAAM,SAAS,OAAA,GAAU,IAAA;AACzB,UAAA,MAAM,UAAU,OAAA,GAAU,IAAA;AAC1B,UAAA,IAAI,MAAA,IAAU,CAAA,IAAK,IAAA,CAAK,MAAM,CAAA,KAAM,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAW,CAAA,EAAG;AACjF,YAAA,QAAA,GAAW,MAAA;AACX,YAAA;AAAA,UACF;AACA,UAAA,IAAI,OAAA,GAAU,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,OAAO,CAAA,KAAM,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAO,CAAW,CAAA,EAAG;AAC7F,YAAA,QAAA,GAAW,OAAA;AACX,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,KAAK,IAAI;AAAA,GACZ;AAEA,EAAA,MAAM,qBAA2BA,kBAAA,CAAA,WAAA,CAAY,MAAM,cAAc,IAAI,CAAA,EAAG,EAAE,CAAA;AAE1E,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,uBACElN,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,QAC/B,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,QAC9D,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,CAAA,EAAG,MAAA,GAAS,EAAE,CAAA,EAAA,CAAA;AAAK;AAAA,KAC1F;AAAA,EAEJ;AAEA,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,WAAA,CAAY,MAAM,GAAG,CAAA;AAChD,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,IAAA,CAAK,MAAM,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,GAAS,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,KAAK,QAAQ,CAAA;AAC5B,EAAA,MAAM,QAAA,GAAW,WAAW,IAAA,IAAQ,MAAA,KAAW,UAAa,CAAC,MAAA,CAAO,MAAM,MAAM,CAAA;AAEhF,EAAA,MAAM,OAAA,GAAU,SAAA,KAAc,IAAA,GAAO,IAAA,CAAK,SAAS,CAAA,GAAI,IAAA;AACvD,EAAA,MAAM,WAAA,GAAc,YAAY,IAAA,IAAQ,OAAA,KAAY,UAAa,CAAC,MAAA,CAAO,MAAM,OAAO,CAAA;AAEtF,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,WAAA,EAAa,cAAc,iBAAA,GAAoB,MAAA;AAAA,MAC/C,YAAA,EAAc,cAAc,kBAAA,GAAqB,MAAA;AAAA,MACjD,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACzC,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,OAAA;AAAA,QACT,SAAA,EAAW,CAAA,EAAG,MAAA,GAAS,EAAE,CAAA,EAAA,CAAA;AAAA,QACzB,MAAA,EAAQ,cAAc,WAAA,GAAc;AAAA,OACtC;AAAA,MAGC,QAAA,EAAA;AAAA,QAAA,CAAC,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,UAAA,MAAM,IAAI,OAAA,GAAW,CAAA,GAAI,CAAA,IAAM,GAAA,CAAI,SAAS,OAAA,GAAU,UAAA,CAAA;AACtD,UAAA,uBACEH,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,EAAA,EAAI,QAAA;AAAA,cACJ,EAAA,EAAI,IAAI,MAAA,GAAS,SAAA;AAAA,cACjB,EAAA,EAAI,CAAA;AAAA,cACJ,EAAA,EAAI,CAAA;AAAA,cACJ,MAAA,EAAQ,cAAA;AAAA,cACR,WAAA,EAAa,GAAA;AAAA,cACb,eAAA,EAAgB;AAAA,aAAA;AAAA,YAPX;AAAA,WAQP;AAAA,QAEJ,CAAC,CAAA;AAAA,QAGA,MAAA,oBAAUA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAMwD,MAAAA,EAAO,WAAA,EAAa,IAAA,EAAM,MAAA,EAAO,MAAA,EAAO,CAAA;AAAA,QACzE,MAAA,oBAAUxD,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQwD,MAAAA,EAAO,WAAA,EAAa,GAAA,EAAK,IAAA,EAAK,MAAA,EAAO,CAAA;AAAA,wBAGzExD,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAG,QAAA,GAAW,CAAA,EAAG,GAAG,OAAA,GAAU,CAAA,EAAG,UAAA,EAAW,KAAA,EAAM,MAAM,gBAAA,EAAkB,QAAA,EAAU,GACvF,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EACvB,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAG,QAAA,GAAW,CAAA;AAAA,YACd,GAAG,OAAA,GAAA,CAAW,GAAA,CAAI,MAAA,GAAS,OAAA,GAAU,cAAc,CAAA,GAAI,CAAA;AAAA,YACvD,UAAA,EAAW,KAAA;AAAA,YACX,IAAA,EAAM,gBAAA;AAAA,YACN,QAAA,EAAU,CAAA;AAAA,YAET,QAAA,EAAA,UAAA,CAAA,CAAY,GAAA,CAAI,KAAA,GAAQ,GAAA,CAAI,SAAS,CAAC;AAAA;AAAA,SACzC;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAG,QAAA,GAAW,CAAA;AAAA,YACd,CAAA,EAAG,GAAA,CAAI,MAAA,GAAS,UAAA,GAAa,CAAA;AAAA,YAC7B,UAAA,EAAW,KAAA;AAAA,YACX,IAAA,EAAM,gBAAA;AAAA,YACN,QAAA,EAAU,CAAA;AAAA,YAET,QAAA,EAAA,UAAA,CAAW,IAAI,KAAK;AAAA;AAAA,SACvB;AAAA,QAGC,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM;AAC3B,UAAA,MAAM,SAAS,CAAA,KAAM,CAAA,GAAI,OAAA,GAAU,CAAA,KAAM,IAAI,QAAA,GAAW,KAAA;AACxD,UAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,EAAA,CAAG,GAAG,CAAA;AACxB,UAAA,uBACEA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,CAAA,EAAG,KAAA;AAAA,cACH,CAAA,EAAG,IAAI,MAAA,GAAS,CAAA;AAAA,cAChB,UAAA,EAAY,MAAA;AAAA,cACZ,IAAA,EAAM,gBAAA;AAAA,cACN,QAAA,EAAU,CAAA;AAAA,cAET,QAAA,EAAA,KAAA,CAAM,GAAG,CAAA,IAAK;AAAA,aAAA;AAAA,YAPV,KAAK,CAAC,CAAA;AAAA,WAQb;AAAA,QAEJ,CAAC,CAAA;AAAA,QAGA,QAAA,IAAY,SAAA,KAAc,IAAA,IAAA,CAAS,MAAM;AACxC,UAAA,MAAM,CAAA,GAAI,GAAA,CAAI,EAAA,CAAG,QAAQ,CAAA;AACzB,UAAA,MAAM,CAAA,GAAI,GAAA,CAAI,EAAA,CAAG,MAAgB,CAAA;AACjC,UAAA,uBACEG,eAAAA,CAAAuE,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAA1E,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,CAAA;AAAA,gBACJ,EAAA,EAAI,QAAA;AAAA,gBACJ,EAAA,EAAI,CAAA;AAAA,gBACJ,EAAA,EAAI,CAAA;AAAA,gBACJ,MAAA,EAAQwD,MAAAA;AAAA,gBACR,WAAA,EAAa,GAAA;AAAA,gBACb,eAAA,EAAgB,KAAA;AAAA,gBAChB,OAAA,EAAS;AAAA;AAAA,aACX;AAAA,4BACAxD,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,IAAA,EAAMwD,QAAO,MAAA,EAAQA,MAAAA,EAAO,WAAA,EAAa,CAAA,EAAG,aAAa,GAAA,EAAK,CAAA;AAAA,4BAC5FxD,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,IAAA,EAAMwD,MAAAA,EAAO,CAAA;AAAA,4BACzCrD,eAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,UAAA,EAAW,OAAM,IAAA,EAAMqD,MAAAA,EAAO,QAAA,EAAU,EAAA,EAAI,YAAY,GAAA,EAC/E,QAAA,EAAA;AAAA,cAAA,UAAA,CAAW,MAAgB,CAAA;AAAA,cAC3B;AAAA,aAAA,EACH;AAAA,WAAA,EACF,CAAA;AAAA,QAEJ,CAAA,GAAG;AAAA,QAGF,WAAA,IAAe,SAAA,KAAc,IAAA,IAAQ,WAAA,IAAA,CAAgB,MAAM;AAC1D,UAAA,MAAM,CAAA,GAAI,GAAA,CAAI,EAAA,CAAG,SAAS,CAAA;AAC1B,UAAA,MAAM,CAAA,GAAI,GAAA,CAAI,EAAA,CAAG,OAAiB,CAAA;AAClC,UAAA,MAAM,QAAQ,CAAA,EAAG,UAAA,CAAW,OAAiB,CAAC,GAAG,IAAI,CAAA,CAAA;AACrD,UAAA,MAAM,IAAA,GAAO,KAAA,CAAM,SAAS,CAAA,IAAK,EAAA;AAEjC,UAAA,MAAM,aAAA,GAAgB,KAAK,GAAA,CAAI,KAAA,CAAM,QAAQ,IAAA,CAAK,MAAM,IAAI,GAAA,GAAM,EAAA;AAClE,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,EAAE,CAAA;AAC3C,UAAA,MAAM,QAAA,GAAW,EAAA;AAEjB,UAAA,MAAM,IAAA,GAAO,CAAA,GAAI,QAAA,GAAW,CAAA,GAAI,IAAI,MAAA,GAAS,SAAA;AAC7C,UAAA,MAAM,QAAA,GAAW,IAAA,GAAO,CAAA,GAAI,QAAA,GAAW,IAAI,CAAA,GAAI,CAAA;AAC/C,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,QAAA,GAAW,CAAA,EAAG,GAAA,CAAI,MAAA,GAAS,UAAA,GAAa,QAAQ,CAAC,CAAA;AACjG,UAAA,uBACErD,eAAAA,CAAAuE,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAA1E,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,CAAA;AAAA,gBACJ,EAAA,EAAI,CAAA;AAAA,gBACJ,EAAA,EAAI,OAAA;AAAA,gBACJ,EAAA,EAAI,IAAI,MAAA,GAAS,UAAA;AAAA,gBACjB,MAAA,EAAQwD,MAAAA;AAAA,gBACR,WAAA,EAAa,GAAA;AAAA,gBACb,eAAA,EAAgB,KAAA;AAAA,gBAChB,OAAA,EAAS;AAAA;AAAA,aACX;AAAA,4BACAxD,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,IAAA,EAAMwD,MAAAA,EAAO,CAAA;AAAA,4BACzCxD,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,CAAA,EAAG,QAAA;AAAA,gBACH,CAAA,EAAG,QAAA;AAAA,gBACH,KAAA,EAAO,QAAA;AAAA,gBACP,MAAA,EAAQ,QAAA;AAAA,gBACR,EAAA,EAAI,CAAA;AAAA,gBACJ,IAAA,EAAK,SAAA;AAAA,gBACL,MAAA,EAAQwD,MAAAA;AAAA,gBACR,WAAA,EAAa,GAAA;AAAA,gBACb,WAAA,EAAa;AAAA;AAAA,aACf;AAAA,4BACAxD,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,CAAA,EAAG,WAAW,QAAA,GAAW,CAAA;AAAA,gBACzB,GAAG,QAAA,GAAW,EAAA;AAAA,gBACd,UAAA,EAAW,QAAA;AAAA,gBACX,IAAA,EAAMwD,MAAAA;AAAA,gBACN,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBAEX,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,4BACAxD,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,CAAA,EAAG,WAAW,QAAA,GAAW,CAAA;AAAA,gBACzB,GAAG,QAAA,GAAW,EAAA;AAAA,gBACd,UAAA,EAAW,QAAA;AAAA,gBACX,IAAA,EAAM,gBAAA;AAAA,gBACN,QAAA,EAAU,CAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA;AACH,WAAA,EACF,CAAA;AAAA,QAEJ,CAAA;AAAG;AAAA;AAAA,GACL;AAEJ;AC5TA,IAAMmN,SAAAA,GAAW,EAAA;AACjB,IAAMC,UAAAA,GAAY,EAAA;AAClB,IAAMC,QAAAA,GAAU,EAAA;AAChB,IAAMC,WAAAA,GAAa,EAAA;AACnB,IAAMC,iBAAAA,GAAmB,SAAA;AACzB,IAAMC,eAAAA,GAAiB,SAAA;AAYvB,SAASC,iBAAAA,CACP,MAAA,EACA,KAAA,EACA,MAAA,EACiB;AACjB,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,KAAK,MAAM,CAAA;AAC7B,IAAA,KAAA,MAAW,CAAA,IAAK,CAAA,CAAE,IAAA,EAAM,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,EAC7E;AACA,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,CAAA,KAAM,GAAG,OAAO,IAAA;AAE7C,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,QAAQ,CAAA;AAC/B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,GAAG,QAAQ,CAAA;AAC/B,EAAA,MAAM,GAAA,GAAM,EAAA,GAAK,EAAA,IAAM,EAAA,GAAK,GAAA,GAAM,CAAA;AAClC,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,EAAA,GAAK,MAAM,IAAI,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,GAAM,IAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,CAAA;AAE/B,EAAA,MAAM,MAAA,GAAS,QAAQN,SAAAA,GAAWC,UAAAA;AAClC,EAAA,MAAM,MAAA,GAAS,SAASC,QAAAA,GAAUC,WAAAA;AAElC,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,KAAA;AAAA,IACR,MAAA,EAAQ,MAAA;AAAA,IACR,KAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA,EAAa,CAAA;AAAA,IACb,EAAA,EAAI,CAAC,CAAA,KAAO,CAAA,IAAK,CAAA,GAAIH,SAAAA,GAAW,MAAA,GAAS,CAAA,GAAIA,SAAAA,GAAY,CAAA,GAAI,MAAA,IAAW,CAAA,GAAI,CAAA,CAAA;AAAA,IAC5E,IAAI,CAAC,CAAA,KAAME,YAAW,CAAA,GAAA,CAAK,CAAA,GAAI,SAAS,KAAA,IAAS;AAAA,GACnD;AACF;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR,MAAA,GAAS,GAAA;AAAA,EACT,WAAA,GAAc,IAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb;AACF,CAAA,EAA4C;AAC1C,EAAA,MAAM,GAAA,GAAMI,iBAAAA,CAAiB,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAClD,EAAA,MAAM,CAAC,SAAA,EAAW,aAAa,CAAA,GAAUC,4BAAwB,IAAI,CAAA;AAErE,EAAA,MAAM,iBAAA,GAA0BA,kBAAA,CAAA,WAAA;AAAA,IAC9B,CAAC,CAAA,KAAuC;AACtC,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB;AACnD,MAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AACtB,MAAA,MAAM,UAAW,CAAA,CAAE,OAAA,GAAU,KAAK,IAAA,IAAQ,IAAA,CAAK,QAAS,GAAA,CAAI,MAAA;AAC5D,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,GAASP,SAAAA,GAAWC,UAAAA;AACvC,MAAA,IAAI,MAAA,GAASD,SAAAA,IAAY,MAAA,GAAS,GAAA,CAAI,SAASC,UAAAA,EAAW;AACxD,QAAA,aAAA,CAAc,IAAI,CAAA;AAClB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAA,CAAS,SAASD,SAAAA,IAAY,MAAA;AACpC,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,IAAS,GAAA,CAAI,cAAc,CAAA,CAAE,CAAA;AACpD,MAAA,aAAA,CAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,IAAI,WAAA,GAAc,CAAA,EAAG,GAAG,CAAC,CAAC,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,GAAG;AAAA,GACN;AAEA,EAAA,MAAM,qBAA2BO,kBAAA,CAAA,WAAA,CAAY,MAAM,cAAc,IAAI,CAAA,EAAG,EAAE,CAAA;AAE1E,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,uBACE1N,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,QAC/B,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,QAC9D,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,CAAA,EAAG,MAAA,GAAS,EAAE,CAAA,EAAA,CAAA;AAAK;AAAA,KAC1F;AAAA,EAEJ;AAEA,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,GAAA,CAAI,WAAW,CAAA;AAExD,EAAA,uBACEG,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA,EACpD,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,QAC/B,WAAA,EAAa,cAAc,iBAAA,GAAoB,MAAA;AAAA,QAC/C,YAAA,EAAc,cAAc,kBAAA,GAAqB,MAAA;AAAA,QACjD,SAAA,EAAU,qCAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,MAAA;AAAA,UACP,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,OAAA;AAAA,UACT,SAAA,EAAW,CAAA,EAAG,MAAA,GAAS,EAAE,CAAA,EAAA,CAAA;AAAA,UACzB,MAAA,EAAQ,cAAc,WAAA,GAAc;AAAA,SACtC;AAAA,QAGC,QAAA,EAAA;AAAA,UAAA,CAAC,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,YAAA,MAAM,IAAIkN,QAAAA,GAAW,CAAA,GAAI,CAAA,IAAM,GAAA,CAAI,SAASA,QAAAA,GAAUC,WAAAA,CAAAA;AACtD,YAAA,uBACEtN,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,EAAA,EAAImN,SAAAA;AAAA,gBACJ,EAAA,EAAI,IAAI,MAAA,GAASC,UAAAA;AAAA,gBACjB,EAAA,EAAI,CAAA;AAAA,gBACJ,EAAA,EAAI,CAAA;AAAA,gBACJ,MAAA,EAAQI,eAAAA;AAAA,gBACR,WAAA,EAAa,GAAA;AAAA,gBACb,eAAA,EAAgB;AAAA,eAAA;AAAA,cAPX;AAAA,aAQP;AAAA,UAEJ,CAAC,CAAA;AAAA,0BAGDxN,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAGmN,SAAAA,GAAW,CAAA,EAAG,GAAGE,QAAAA,GAAU,CAAA,EAAG,UAAA,EAAW,KAAA,EAAM,MAAME,iBAAAA,EAAkB,QAAA,EAAU,GACvF,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EACvB,CAAA;AAAA,0BACAvN,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,GAAGmN,SAAAA,GAAW,CAAA;AAAA,cACd,GAAGE,QAAAA,GAAAA,CAAW,GAAA,CAAI,MAAA,GAASA,QAAAA,GAAUC,eAAc,CAAA,GAAI,CAAA;AAAA,cACvD,UAAA,EAAW,KAAA;AAAA,cACX,IAAA,EAAMC,iBAAAA;AAAA,cACN,QAAA,EAAU,CAAA;AAAA,cAET,QAAA,EAAA,UAAA,CAAA,CAAY,GAAA,CAAI,KAAA,GAAQ,GAAA,CAAI,SAAS,CAAC;AAAA;AAAA,WACzC;AAAA,0BACAvN,eAAC,MAAA,EAAA,EAAK,CAAA,EAAGmN,YAAW,CAAA,EAAG,CAAA,EAAG,IAAI,MAAA,GAASG,WAAAA,GAAa,GAAG,UAAA,EAAW,KAAA,EAAM,MAAMC,iBAAAA,EAAkB,QAAA,EAAU,GACvG,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EACvB,CAAA;AAAA,UAGC,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM;AAC3B,YAAA,MAAM,SAAS,CAAA,KAAM,CAAA,GAAI,OAAA,GAAU,CAAA,KAAM,IAAI,QAAA,GAAW,KAAA;AACxD,YAAA,uBACEvN,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,GAAG,CAAA;AAAA,gBACb,CAAA,EAAG,IAAI,MAAA,GAAS,CAAA;AAAA,gBAChB,UAAA,EAAY,MAAA;AAAA,gBACZ,IAAA,EAAMuN,iBAAAA;AAAA,gBACN,QAAA,EAAU,CAAA;AAAA,gBAET,QAAA,EAAA,KAAA,CAAM,GAAG,CAAA,IAAK;AAAA,eAAA;AAAA,cAPV,KAAK,CAAC,CAAA;AAAA,aAQb;AAAA,UAEJ,CAAC,CAAA;AAAA,UAGA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,KAAU;AACxB,YAAA,IAAI,CAAA,GAAI,EAAA;AACR,YAAA,CAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACvB,cAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;AACnC,cAAA,CAAA,IAAK,GAAG,CAAA,GAAI,IAAA,GAAO,GAAG,CAAA,EAAG,GAAA,CAAI,GAAG,CAAC,CAAA,CAAE,QAAQ,CAAC,CAAC,IAAI,GAAA,CAAI,EAAA,CAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,YACvE,CAAC,CAAA;AACD,YAAA,MAAM,QAAA,GAAW,CAAA,CAAE,IAAA,CAAK,MAAA,GAAS,CAAA;AACjC,YAAA,MAAM,MAAA,GAAS,CAAA,CAAE,IAAA,CAAK,QAAQ,CAAA;AAC9B,YAAA,MAAM,QAAA,GAAW,WAAW,IAAA,IAAQ,MAAA,KAAW,UAAa,CAAC,MAAA,CAAO,MAAM,MAAM,CAAA;AAChF,YAAA,uBACEpN,gBAAC,GAAA,EAAA,EACE,QAAA,EAAA;AAAA,cAAA,CAAA,oBAAKH,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAM,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAA,EAAa,GAAA,EAAK,IAAA,EAAK,MAAA,EAAO,CAAA;AAAA,cAChE,YAAY,SAAA,KAAc,IAAA,oBACzBG,eAAAA,CAAAuE,qBAAA,EACE,QAAA,EAAA;AAAA,gCAAA1E,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI,GAAA,CAAI,EAAA,CAAG,QAAQ,CAAA;AAAA,oBACnB,EAAA,EAAI,GAAA,CAAI,EAAA,CAAG,MAAgB,CAAA;AAAA,oBAC3B,CAAA,EAAG,CAAA;AAAA,oBACH,MAAM,CAAA,CAAE,KAAA;AAAA,oBACR,WAAA,EAAa,GAAA;AAAA,oBACb,QAAQ,CAAA,CAAE,KAAA;AAAA,oBACV,WAAA,EAAa;AAAA;AAAA,iBACf;AAAA,gCACAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,QAAQ,CAAA,GAAI,CAAA;AAAA,oBACtB,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,MAAgB,CAAA,GAAI,CAAA;AAAA,oBAC9B,UAAA,EAAW,KAAA;AAAA,oBACX,MAAM,CAAA,CAAE,KAAA;AAAA,oBACR,QAAA,EAAU,CAAA;AAAA,oBACV,UAAA,EAAY,GAAA;AAAA,oBAEX,qBAAW,MAAgB;AAAA;AAAA;AAC9B,eAAA,EACF;AAAA,aAAA,EAAA,EAvBI,CAAA,OAAA,EAAU,KAAK,CAAA,CAyBvB,CAAA;AAAA,UAEJ,CAAC,CAAA;AAAA,UAGA,WAAA,IAAe,SAAA,KAAc,IAAA,IAAA,CAAS,MAAM;AAC3C,YAAA,MAAM,CAAA,GAAI,GAAA,CAAI,EAAA,CAAG,SAAS,CAAA;AAC1B,YAAA,MAAM,KAAA,GAAQ,MAAA,CACX,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,cACX,OAAO,CAAA,CAAE,KAAA;AAAA,cACT,OAAO,CAAA,CAAE,KAAA;AAAA,cACT,KAAA,EAAO,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA,IAAK;AAAA,aAC9B,CAAE,CAAA,CACD,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,KAAA,KAAU,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,EAAA,CAAG,KAAe,CAAC,CAAA;AACxE,YAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,YAAA,MAAM,QAAA,GAAW,EAAA;AACjB,YAAA,MAAM,KAAA,GAAQ,EAAA;AACd,YAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,GAAS,KAAA,GAAQ,EAAA;AACxC,YAAA,MAAM,IAAA,GAAO,CAAA,GAAI,QAAA,GAAW,CAAA,GAAI,IAAI,MAAA,GAASoN,UAAAA;AAC7C,YAAA,MAAM,QAAA,GAAW,IAAA,GAAO,CAAA,GAAI,QAAA,GAAW,IAAI,CAAA,GAAI,CAAA;AAC/C,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAIC,QAAAA,EAAS,IAAA,CAAK,GAAA,CAAIA,QAAAA,GAAU,CAAA,EAAG,GAAA,CAAI,MAAA,GAASC,WAAAA,GAAa,QAAQ,CAAC,CAAA;AAE5F,YAAA,uBACEnN,eAAAA,CAAAuE,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAA1E,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAI,CAAA;AAAA,kBACJ,EAAA,EAAI,CAAA;AAAA,kBACJ,EAAA,EAAIqN,QAAAA;AAAA,kBACJ,EAAA,EAAI,IAAI,MAAA,GAASC,WAAAA;AAAA,kBACjB,MAAA,EAAQC,iBAAAA;AAAA,kBACR,WAAA,EAAa,GAAA;AAAA,kBACb,eAAA,EAAgB,KAAA;AAAA,kBAChB,OAAA,EAAS;AAAA;AAAA,eACX;AAAA,cACC,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,qBACVvN,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBAEC,EAAA,EAAI,CAAA;AAAA,kBACJ,EAAA,EAAI,GAAA,CAAI,EAAA,CAAG,EAAA,CAAG,KAAe,CAAA;AAAA,kBAC7B,CAAA,EAAG,CAAA;AAAA,kBACH,MAAM,EAAA,CAAG;AAAA,iBAAA;AAAA,gBAJJ,CAAA,GAAA,EAAM,GAAG,KAAK,CAAA;AAAA,eAMtB,CAAA;AAAA,8BACDA,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,CAAA,EAAG,QAAA;AAAA,kBACH,CAAA,EAAG,QAAA;AAAA,kBACH,KAAA,EAAO,QAAA;AAAA,kBACP,MAAA,EAAQ,QAAA;AAAA,kBACR,EAAA,EAAI,CAAA;AAAA,kBACJ,IAAA,EAAK,SAAA;AAAA,kBACL,MAAA,EAAQuN,iBAAAA;AAAA,kBACR,WAAA,EAAa,GAAA;AAAA,kBACb,WAAA,EAAa;AAAA;AAAA,eACf;AAAA,8BACAvN,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,QAAA,GAAW,GAAG,CAAA,EAAG,QAAA,GAAW,EAAA,EAAI,IAAA,EAAMuN,mBAAkB,QAAA,EAAU,CAAA,EACxE,QAAA,EAAA,KAAA,CAAM,SAAS,KAAK,EAAA,EACvB,CAAA;AAAA,cACC,MAAM,GAAA,CAAI,CAAC,IAAI,CAAA,qBACdpN,gBAAC,GAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAH,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,GAAG,QAAA,GAAW,CAAA;AAAA,oBACd,CAAA,EAAG,QAAA,GAAW,EAAA,GAAK,CAAA,GAAI,KAAA;AAAA,oBACvB,KAAA,EAAO,CAAA;AAAA,oBACP,MAAA,EAAQ,CAAA;AAAA,oBACR,MAAM,EAAA,CAAG;AAAA;AAAA,iBACX;AAAA,gCACAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,GAAG,QAAA,GAAW,EAAA;AAAA,oBACd,CAAA,EAAG,QAAA,GAAW,EAAA,GAAK,CAAA,GAAI,KAAA;AAAA,oBACvB,MAAM,EAAA,CAAG,KAAA;AAAA,oBACT,QAAA,EAAU,CAAA;AAAA,oBACV,UAAA,EAAY,GAAA;AAAA,oBAEX,QAAA,EAAA,UAAA,CAAW,GAAG,KAAe;AAAA;AAAA;AAChC,eAAA,EAAA,EAhBM,CAAA,IAAA,EAAO,CAAC,CAAA,CAiBhB,CACD;AAAA,aAAA,EACH,CAAA;AAAA,UAEJ,CAAA;AAAG;AAAA;AAAA,KACL;AAAA,IACC,8BACCA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,uBAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,GAAA,EAAK,MAAA;AAAA,UACL,cAAA,EAAgB,QAAA;AAAA,UAChB,SAAA,EAAW,KAAA;AAAA,UACX,QAAA,EAAU,MAAA;AAAA,UACV,KAAA,EAAOuN,iBAAAA;AAAA,UACP,QAAA,EAAU;AAAA,SACZ;AAAA,QAEC,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,qBACXpN,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEC,OAAO,EAAE,OAAA,EAAS,eAAe,UAAA,EAAY,QAAA,EAAU,KAAK,KAAA,EAAM;AAAA,YAElE,QAAA,EAAA;AAAA,8BAAAH,cAAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO;AAAA,oBACL,OAAA,EAAS,cAAA;AAAA,oBACT,KAAA,EAAO,KAAA;AAAA,oBACP,MAAA,EAAQ,KAAA;AAAA,oBACR,YAAY,CAAA,CAAE,KAAA;AAAA,oBACd,YAAA,EAAc;AAAA;AAChB;AAAA,eACF;AAAA,cACC,CAAA,CAAE;AAAA;AAAA,WAAA;AAAA,UAZE,CAAA,CAAE;AAAA,SAcV;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;ACzTA,IAAMmN,SAAAA,GAAW,EAAA;AACjB,IAAMC,UAAAA,GAAY,CAAA;AAClB,IAAMC,QAAAA,GAAU,EAAA;AAChB,IAAMC,WAAAA,GAAa,EAAA;AACnB,IAAM,aAAA,GAAgB,IAAA;AACtB,IAAMC,iBAAAA,GAAmB,SAAA;AAElB,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR,MAAA,GAAS,GAAA;AAAA,EACT,SAAA,GAAY,IAAA;AAAA,EACZ;AACF,CAAA,EAAyC;AACvC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,KAAA,EAAO,CAAC,CAAC,CAAA;AAC9E,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,MAAM,CAAA,IAAK,CAAA;AAExC,EAAA,MAAM,MAAA,GAAS,QAAQJ,SAAAA,GAAWC,UAAAA;AAClC,EAAA,MAAM,MAAA,GAAS,SAASC,QAAAA,GAAUC,WAAAA;AAClC,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,KAAK,MAAA,GAAS,CAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,UAAU,CAAA,GAAI,aAAA,CAAA;AAE5B,EAAA,MAAM,QAAQ,CAAC,CAAA,KAAsBH,YAAW,CAAA,GAAI,MAAA,GAAA,CAAU,SAAS,KAAA,IAAS,CAAA;AAChF,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,IAAA,CAAK,MAAM,CAAA;AAEpD,EAAA,uBACEhN,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,SAAA,EAAW,EAAA,CAAG,4CAAA,EAA8C,SAAS,CAAA;AAAA,MACrE,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,CAAA,EAAG,MAAA,GAAS,EAAE,CAAA,EAAA,CAAA,EAAK;AAAA,MAGvF,QAAA,EAAA;AAAA,QAAA,SAAA,oBACCA,eAAAA,CAAAuE,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA1E,eAAC,MAAA,EAAA,EAAK,CAAA,EAAGmN,SAAAA,GAAW,CAAA,EAAG,GAAGE,QAAAA,GAAU,CAAA,EAAG,UAAA,EAAW,KAAA,EAAM,MAAME,iBAAAA,EAAkB,QAAA,EAAU,CAAA,EACvF,QAAA,EAAA,UAAA,CAAW,KAAK,CAAA,EACnB,CAAA;AAAA,0BACAvN,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,GAAGmN,SAAAA,GAAW,CAAA;AAAA,cACd,CAAA,EAAGE,QAAAA,GAAU,MAAA,GAAS,CAAA,GAAI,CAAA;AAAA,cAC1B,UAAA,EAAW,KAAA;AAAA,cACX,IAAA,EAAME,iBAAAA;AAAA,cACN,QAAA,EAAU,CAAA;AAAA,cAET,QAAA,EAAA,UAAA,CAAW,QAAQ,CAAC;AAAA;AAAA,WACvB;AAAA,0BACAvN,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,GAAGmN,SAAAA,GAAW,CAAA;AAAA,cACd,CAAA,EAAG,SAASG,WAAAA,GAAa,CAAA;AAAA,cACzB,UAAA,EAAW,KAAA;AAAA,cACX,IAAA,EAAMC,iBAAAA;AAAA,cACN,QAAA,EAAU,CAAA;AAAA,cACX,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF,CAAA;AAAA,QAID,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM;AACpB,UAAA,IAAI,WAAW,MAAA,GAASD,WAAAA;AACxB,UAAA,uBACEtN,eAAC,GAAA,EAAA,EACE,QAAA,EAAA,GAAA,CAAI,SAAS,GAAA,CAAI,CAAC,KAAK,KAAA,KAAU;AAChC,YAAA,IAAI,GAAA,CAAI,KAAA,IAAS,CAAA,EAAG,OAAO,IAAA;AAC3B,YAAA,MAAM,KAAA,GAAS,GAAA,CAAI,KAAA,GAAQ,KAAA,GAAS,MAAA;AACpC,YAAA,MAAM,IAAI,QAAA,GAAW,KAAA;AACrB,YAAA,QAAA,GAAW,CAAA;AACX,YAAA,uBACEA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,gBACV,CAAA;AAAA,gBACA,KAAA,EAAO,KAAA;AAAA,gBACP,MAAA,EAAQ,KAAA;AAAA,gBACR,MAAM,GAAA,CAAI;AAAA,eAAA;AAAA,cALL,OAAO,KAAK,CAAA;AAAA,aAMnB;AAAA,UAEJ,CAAC,CAAA,EAAA,EAhBK,CAAA,IAAA,EAAO,CAAC,CAAA,CAiBhB,CAAA;AAAA,QAEJ,CAAC,CAAA;AAAA,QAGA,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM;AAC3B,UAAA,MAAM,SAAS,CAAA,KAAM,CAAA,GAAI,OAAA,GAAU,CAAA,KAAM,IAAI,QAAA,GAAW,KAAA;AACxD,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA,GAAQ,CAAA;AACnC,UAAA,uBACEA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,CAAA,EAAG,KAAA;AAAA,cACH,GAAG,MAAA,GAAS,CAAA;AAAA,cACZ,UAAA,EAAY,MAAA;AAAA,cACZ,IAAA,EAAMuN,iBAAAA;AAAA,cACN,QAAA,EAAU,CAAA;AAAA,cAET,QAAA,EAAA,IAAA,CAAK,GAAG,CAAA,EAAG,KAAA,IAAS;AAAA,aAAA;AAAA,YAPhB,KAAK,CAAC,CAAA;AAAA,WAQb;AAAA,QAEJ,CAAC;AAAA;AAAA;AAAA,GACH;AAEJ;ACrGO,SAAS,iBAAA,CAAkB;AAAA,EAChC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAA+C;AAC7C,EAAA,uBACEvN,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,mGAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACpB,QAAA,MAAM,SAAA,GAAY,IAAI,KAAA,KAAU,KAAA;AAChC,QAAA,uBACEA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,cAAA,EAAc,SAAA;AAAA,YACd,SAAS,MAAM;AACb,cAAA,IAAI,CAAC,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AAAA,YACpC,CAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACT,yFAAA;AAAA,cACA,YACI,oCAAA,GACA;AAAA,aACN;AAAA,YAEC,QAAA,EAAA,GAAA,CAAI;AAAA,WAAA;AAAA,UAbA,GAAA,CAAI;AAAA,SAcX;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;;;;AC1CO,IAAM,oBAAA,GACX;AAEF,IAAM,SAAA,GAAY,IAAA;AAClB,IAAM,YAAA,GAAe,GAAA;AACrB,IAAM,aAAa,YAAA,GAAe,SAAA;AAyClC,IAAI,QAAA,GAA2D,IAAA;AAOxD,SAAS,UAAU,OAAA,EAAmC;AAC3D,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OACF;AAAA,IACF;AACA,IAAA;AAAA,EACF;AACA,EAAA,QAAA,CAAS,OAAO,CAAA;AAClB;AAYO,SAAS,mBAAA,CAAoB,EAAE,QAAA,EAAS,EAA6B;AAC1E,EAAA,MAAM,CAAC,KAAA,EAAO,SAAS,CAAA,GAAU2N,kBAAA,CAAA,QAAA,CAA+B,EAAE,CAAA;AAElE,EAAA,MAAM,OAAA,GAAgBA,kBAAA,CAAA,WAAA,CAAY,CAAC,OAAA,KAAgC;AAEjE,IAAA,MAAM,WAAA,GAAc,CAAA,oBAAA,EAAuB,OAAA,CAAQ,EAAE,CAAA,CAAA;AACrD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,cAAA,CAAe,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxE,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,CAAC,CAAA,KAAM,CAAC,GAAG,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,EAClC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAMA,6BAAU,MAAM;AACpB,IAAA,QAAA,GAAW,OAAA;AACX,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,GAAW,IAAA;AAAA,IACb,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,YAAA,GAAqBA,+BAAY,MAAM;AAC3C,IAAA,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,CAAC,CAAA,IAAK,IAAA;AAE5B,EAAA,uBACExN,eAAAA,CAAAuE,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,2BACC1E,cAAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QAEC,OAAA,EAAS,OAAA;AAAA,QACT,OAAA,EAAS;AAAA,OAAA;AAAA,MAFJ,OAAA,CAAQ;AAAA;AAGf,GAAA,EAEJ,CAAA;AAEJ;AASA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,OAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM;AAAA,IACJ,EAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA,GAAc,IAAA;AAAA,IACd,gBAAA,GAAmB,GAAA;AAAA,IACnB,UAAA,GAAa;AAAA,GACf,GAAI,OAAA;AAEJ,EAAA,MAAM,CAAC,OAAA,EAAS,WAAW,CAAA,GAAU2N,4BAAS,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,cAAA,EAAgB,kBAAkB,CAAA,GAAUA,4BAAS,KAAK,CAAA;AACjE,EAAA,MAAM,UAAA,GAAmBA,0BAA0B,IAAI,CAAA;AACvD,EAAA,MAAM,QAAA,GAAiBA,0BAAuB,IAAI,CAAA;AAIlD,EAAMA,6BAAU,MAAM;AACpB,IAAA,cAAA,CAAe,OAAA,CAAQ,CAAA,oBAAA,EAAuB,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA;AAAA,EACzD,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAGP,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AAEzB,IAAA,IAAI,iBAAA,GAAyB,IAAA;AAE7B,IAAA,OAAO,iBAAiB,CAAA,CAAE,IAAA,CAAK,CAAC,EAAE,OAAA,EAAS,UAAS,KAAM;AACxD,MAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACzB,MAAA,iBAAA,GAAoB,SAAS,MAAA,CAAO,UAAA,CAAW,SAAS,EAAE,MAAA,EAAQ,MAAM,CAAA;AACxE,MAAA,iBAAA,CAAkB;AAAA,QAChB,aAAA,EAAe,GAAA;AAAA,QACf,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ,EAAE,CAAA,EAAG,GAAA,EAAI;AAAA,QACjB,QAAQ,CAAC,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS;AAAA,OAC/D,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,iBAAA,EAAmB,KAAA,EAAM;AAAA,IAC3B,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,yBAAS,CAAA;AACjC,IAAA,KAAA,CAAM,IAAA,EAAK,CAAE,KAAA,CAAM,MAAM;AAAA,IAEzB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,WAAA,EAAa,gBAAgB,CAAA;AAC7D,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,KAAK,CAAA;AAAA,EAGxC,CAAA,EAAG,CAAC,WAAA,EAAa,gBAAgB,CAAC,CAAA;AAGlC,EAAMA,6BAAU,MAAM;AACpB,IAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAqB;AACnC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,WAAA,EAAY;AAAA,IACtC,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,MAAM,CAAA;AAC3C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,MAAM,CAAA;AAAA,EAE7D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAS,WAAA,GAAc;AACrB,IAAA,WAAA,CAAY,KAAK,CAAA;AAEjB,IAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,EACzB;AAEA,EAAA,eAAe,eAAA,GAAkB;AAC/B,IAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,IAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,OAAO,eAAe,CAAA;AAC9C,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAA,CAAS,OAAA,EAAS;AAAA,QAC7C,KAAA,EAAO,SAAA;AAAA,QACP,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,MAAM,CAAA,GAAI,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACpC,MAAA,CAAA,CAAE,QAAA,GAAW,GAAG,EAAE,CAAA,IAAA,CAAA;AAClB,MAAA,CAAA,CAAE,IAAA,GAAO,QAAA;AACT,MAAA,CAAA,CAAE,KAAA,EAAM;AAAA,IACV,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,+CAA+C,GAAG,CAAA;AAAA,IAClE,CAAA,SAAE;AACA,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,eAAe,YAAA,GAAe;AAC5B,IAAA,IAAI,CAAC,QAAA,CAAS,OAAA,IAAW,CAAC,UAAU,KAAA,EAAO;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,OAAO,eAAe,CAAA;AAC9C,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAA,CAAS,OAAA,EAAS;AAAA,QAC7C,KAAA,EAAO,SAAA;AAAA,QACP,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,QAAQ,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AACvD,MAAA,MAAM,UAAU,KAAA,CAAM;AAAA,QACpB,KAAA,EAAO,CAAC,IAAI,IAAA,CAAK,CAAC,IAAI,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,IAAA,CAAA,EAAQ,EAAE,IAAA,EAAM,WAAA,EAAa,CAAC;AAAA,OAC7D,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,GAAG,CAAA;AAAA,IAC/D;AAAA,EACF;AAEA,EAAA,eAAe,WAAA,GAAc;AAC3B,IAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,OAAO,eAAe,CAAA;AAC9C,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAA,CAAS,OAAA,EAAS;AAAA,QAC7C,KAAA,EAAO,SAAA;AAAA,QACP,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,QAAQ,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AACvD,MAAA,MAAM,SAAA,CAAU,UAAU,KAAA,CAAM;AAAA,QAC9B,IAAI,aAAA,CAAc,EAAE,WAAA,EAAa,MAAM;AAAA,OACxC,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,2CAA2C,GAAG,CAAA;AAAA,IAC9D;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,eAAe,OAAA,IAAW,QAAA;AACnD,EAAA,MAAM,OAAA,GAAU,eAAe,UAAA,IAAc,oBAAA;AAC7C,EAAA,MAAM,SAAA,GACJ,OAAO,SAAA,KAAc,WAAA,IAAe,OAAA,IAAW,SAAA;AAEjD,EAAA,uBACExN,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,+BAAA;AAAA,QACA,qDAAA;AAAA,QACA,8BAAA;AAAA,QACA,iCAAA;AAAA,QACA,UAAU,aAAA,GAAgB;AAAA,OAC5B;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MAGT,QAAA,EAAA;AAAA,wBAAAH,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,UAAA;AAAA,YACL,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBAGAG,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,4BAAA;AAAA,cACA,0CAAA;AAAA,cACA,4CAAA;AAAA,cACA,mCAAA;AAAA,cACA,UAAU,WAAA,GAAc;AAAA,aAC1B;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,GAAA,EAAK,UAAU,MAAA,EAAO;AAAA,YACtC,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAGlC,QAAA,EAAA;AAAA,8BAAAH,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,8GAAA;AAAA,kBACV,OAAA,EAAS,WAAA;AAAA,kBACT,YAAA,EAAW,mBAAA;AAAA,kBAEX,QAAA,kBAAAA,cAAAA,CAACI,aAAAA,EAAA,EAAE,WAAU,uBAAA,EAAwB;AAAA;AAAA,eACvC;AAAA,8BAGAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACb,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wDAAA,EACX,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,gBACC,4BACCA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yEACV,QAAA,EAAA,QAAA,EACH;AAAA,eAAA,EAEJ,CAAA;AAAA,cAGC,aAAA,oBACCG,eAAAA,CAAAuE,mBAAAA,EAAA,EAME,QAAA,EAAA;AAAA,gCAAA1E,cAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,sEAAA;AAAA,oBACV,KAAA,EAAO,EAAE,KAAA,EAAO,YAAA,EAAc,QAAQ,YAAA,EAAa;AAAA,oBAEnD,QAAA,kBAAAG,eAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,GAAA,EAAK,QAAA;AAAA,wBACL,SAAA,EAAU,4BAAA;AAAA,wBACV,KAAA,EAAO;AAAA,0BACL,KAAA,EAAO,SAAA;AAAA,0BACP,MAAA,EAAQ,SAAA;AAAA,0BACR,SAAA,EAAW,SAAS,UAAU,CAAA,CAAA,CAAA;AAAA,0BAC9B,eAAA,EAAiB,UAAA;AAAA,0BACjB,UAAA,EAAY,OAAA;AAAA,0BACZ,OAAA,EAAS,MAAA;AAAA,0BACT,aAAA,EAAe,QAAA;AAAA,0BACf,UAAA,EAAY,QAAA;AAAA,0BACZ,cAAA,EAAgB,QAAA;AAAA,0BAChB,OAAA,EAAS,EAAA;AAAA,0BACT,SAAA,EAAW;AAAA,yBACb;AAAA,wBAEC,QAAA,EAAA;AAAA,0BAAA,aAAA,CAAc,UAAA;AAAA,0BACd,oCACCH,cAAAA;AAAA,4BAAC,GAAA;AAAA,4BAAA;AAAA,8BACC,KAAA,EAAO;AAAA,gCACL,SAAA,EAAW,EAAA;AAAA,gCACX,QAAA,EAAU,EAAA;AAAA,gCACV,KAAA,EAAO,OAAA;AAAA,gCACP,SAAA,EAAW,QAAA;AAAA,gCACX,UAAA,EAAY,GAAA;AAAA,gCACZ,UAAA,EAAY;AAAA,+BACd;AAAA,8BAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA;AAEJ;AAAA,iBACF;AAAA,gCAGAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EACb,QAAA,EAAA;AAAA,kCAAAA,eAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,8BAAA;AAAA,sBACV,IAAA,EAAK,IAAA;AAAA,sBACL,OAAA,EAAS,eAAA;AAAA,sBACT,QAAA,EAAU,cAAA;AAAA,sBAET,QAAA,EAAA;AAAA,wBAAA,cAAA,mBACCH,cAAAA,CAAC2J,mBAAAA,EAAA,EAAQ,SAAA,EAAU,iCAAA,EAAkC,CAAA,mBAErD3J,cAAAA,CAAC4N,oBAAA,EAAA,EAAS,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,wBACzC;AAAA;AAAA;AAAA,mBAEJ;AAAA,kBACC,SAAA,oBACCzN,eAAAA,CAAC,MAAA,EAAA,EAAO,SAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,YAAA,EAC3C,QAAA,EAAA;AAAA,oCAAAH,cAAAA,CAAC6N,kBAAA,EAAA,EAAO,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,oBAAE;AAAA,mBAAA,EAE3C,CAAA;AAAA,kCAEF1N,gBAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,IAAA,EAAK,SAAS,WAAA,EAC3C,QAAA,EAAA;AAAA,oCAAAH,cAAAA,CAAC8N,gBAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,oBAAE;AAAA,mBAAA,EAEzC;AAAA,iBAAA,EACF;AAAA,eAAA,EACF,CAAA;AAAA,cAID,CAAC,aAAA,oBACA9N,cAAAA,CAAC,SAAI,SAAA,EAAU,6BAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,UAAO,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,WAAA,EAAa,qBAExC,CAAA,EACF;AAAA;AAAA;AAAA;AAEJ;AAAA;AAAA,GACF;AAEJ","file":"index.cjs","sourcesContent":["function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// Utility functions for hazo_ui component library\n// Provides className merging utility (cn function)\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges class names using clsx and tailwind-merge\n * @param inputs - Class values to merge\n * @returns Merged class string\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n","/**\n * hazo_context_provider/index.tsx\n *\n * <HazoContextProvider> — browser-side correlation-ID provider.\n *\n * Mounts hazo_core's browser context ref with a stable correlation ID for the\n * current tab. Once mounted, every downstream consumer that calls\n * `getCorrelationId()` / `getContext()` / `fetchWithRequestId()` from\n * `hazo_core` (or any hazo_* package that does) sees the same ID.\n *\n * Per PRD §7: the browser uses a single module-level ref (vs the server's\n * AsyncLocalStorage) — appropriate for the one-tab-one-context reality.\n *\n * Usage — wrap once at the app root, typically in app/layout.tsx:\n *\n * import { HazoContextProvider } from 'hazo_ui';\n *\n * <HazoContextProvider>\n * <App />\n * </HazoContextProvider>\n *\n * Props:\n * - correlationId (optional): explicit ID to install. When omitted, a fresh\n * `req_<uuid>` is generated on mount via `generateRequestId()`.\n * - userId (optional): additional context field forwarded into the ref.\n *\n * The provider clears the context on unmount so server-side rendering or\n * test harnesses that mount/unmount repeatedly do not leak IDs between runs.\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { generateRequestId } from \"hazo_core\";\nimport { setBrowserCorrelationId, withContext } from \"hazo_core/client\";\n\nexport interface HazoContextProviderProps {\n /**\n * Explicit correlation ID. Omit to auto-generate one on mount.\n * Useful when the server passed an `X-Request-Id` header that the client\n * should preserve for end-to-end traceability.\n */\n correlationId?: string;\n /**\n * Optional userId to surface on the browser context. Re-mounts when the\n * value changes.\n */\n userId?: string;\n children: React.ReactNode;\n}\n\nexport function HazoContextProvider({\n correlationId,\n userId,\n children,\n}: HazoContextProviderProps): React.ReactElement {\n // Resolve the ID once per mount. Re-mounts when correlationId prop changes.\n const id = React.useMemo(\n () => correlationId ?? generateRequestId(),\n [correlationId],\n );\n\n React.useEffect(() => {\n // Install the correlation ID. withContext on the client is synchronous\n // and merges userId in atomically alongside the ID.\n withContext({ correlationId: id, userId }, () => {\n setBrowserCorrelationId(id);\n });\n\n return () => {\n // Clear on unmount so harness / SSR re-mounts do not leak IDs.\n setBrowserCorrelationId(undefined);\n };\n }, [id, userId]);\n\n return <>{children}</>;\n}\n","/**\n * Logger utility for hazo_ui.\n *\n * Default: delegates to hazo_core's createLogger('hazo_ui'), which\n * auto-injects correlationId, env, and writes structured JSON via hazo_logs.\n * Consumers can still override with set_logger() — useful for tests, or for\n * apps that want to route hazo_ui logs through their own sink.\n *\n * hazo_ui is primarily a client-side library; logger sites in src/ are rare.\n * The factory exists so when a component does need to log (e.g. a server-side\n * helper or a debug aid in a hook), it can do so consistently with the rest\n * of the workspace rather than reaching for `console`.\n */\n\nimport { createLogger } from \"hazo_core\";\n\nexport interface Logger {\n info: (message: string, data?: Record<string, unknown>) => void;\n debug: (message: string, data?: Record<string, unknown>) => void;\n warn: (message: string, data?: Record<string, unknown>) => void;\n error: (message: string, data?: Record<string, unknown>) => void;\n}\n\nconst console_logger: Logger = {\n info: (m, d) => (d ? console.log(`[hazo_ui] ${m}`, d) : console.log(`[hazo_ui] ${m}`)),\n debug: (m, d) => (d ? console.debug(`[hazo_ui] ${m}`, d) : console.debug(`[hazo_ui] ${m}`)),\n warn: (m, d) => (d ? console.warn(`[hazo_ui] ${m}`, d) : console.warn(`[hazo_ui] ${m}`)),\n error: (m, d) => (d ? console.error(`[hazo_ui] ${m}`, d) : console.error(`[hazo_ui] ${m}`)),\n};\n\nfunction build_default_logger(): Logger {\n try {\n return createLogger(\"hazo_ui\") as unknown as Logger;\n } catch {\n return console_logger;\n }\n}\n\nlet current_logger: Logger | null = null;\n\n/**\n * Set the logger instance used throughout hazo_ui.\n * Pass `undefined` to reset to the hazo_core default.\n */\nexport function set_logger(logger: Logger | undefined): void {\n current_logger = logger ?? null;\n}\n\n/**\n * Get the current logger instance — defaults to hazo_core's createLogger\n * on first access if no consumer override has been set.\n */\nexport function get_logger(): Logger {\n if (!current_logger) {\n current_logger = build_default_logger();\n }\n return current_logger;\n}\n","/**\n * UUID helper for hazo_ui.\n *\n * Uses hazo_core's `generateRequestId()` and strips the `req_` prefix so the\n * resulting value fits a v4-shaped UUID slot. The `req_<uuid>` form is\n * preserved for correlation IDs that flow through logs and HTTP headers via\n * hazo_core's withContext / fetchWithRequestId.\n *\n * Per the workspace convention (Wave 2, D-015): never introduce new\n * randomUUID call sites — route everything through hazo_core so IDs stay\n * traceable and tests can stub IDs deterministically.\n */\n\nimport { generateRequestId } from \"hazo_core\";\n\n/**\n * Generate a bare UUID — same shape as a v4 UUID, but routed through hazo_core\n * so the generator stays consistent across the workspace.\n */\nexport function generateUUID(): string {\n return generateRequestId().slice(4);\n}\n","/**\n * hazo_ui_config.ts\n *\n * Purpose: Centralized configuration for hazo_ui component library\n * Provides default colors and styling for buttons, headers, and dialogs\n * Can be overridden globally via set_hazo_ui_config or per-component via props\n */\n\nexport interface HazoUiConfig {\n // Dialog Header Colors\n header_background_color?: string;\n header_text_color?: string;\n\n // Submit/Action Button Colors\n submit_button_background_color?: string;\n submit_button_text_color?: string;\n submit_button_hover_color?: string;\n\n // Cancel Button Colors\n cancel_button_background_color?: string;\n cancel_button_text_color?: string;\n cancel_button_border_color?: string;\n cancel_button_hover_color?: string;\n\n // Clear/Delete Button Colors\n clear_button_background_color?: string;\n clear_button_text_color?: string;\n clear_button_border_color?: string;\n clear_button_hover_color?: string;\n}\n\n// Default configuration\nconst default_config: HazoUiConfig = {\n // Headers use default theme colors by default (no override)\n header_background_color: undefined,\n header_text_color: undefined,\n\n // Submit buttons use primary/default variant (no override needed for default styling)\n submit_button_background_color: undefined,\n submit_button_text_color: undefined,\n submit_button_hover_color: undefined,\n\n // Cancel buttons use outline variant (no override needed for default styling)\n cancel_button_background_color: undefined,\n cancel_button_text_color: undefined,\n cancel_button_border_color: undefined,\n cancel_button_hover_color: undefined,\n\n // Clear buttons use outline variant (no override needed for default styling)\n clear_button_background_color: undefined,\n clear_button_text_color: undefined,\n clear_button_border_color: undefined,\n clear_button_hover_color: undefined,\n};\n\n// Global config instance\nlet global_config: HazoUiConfig = { ...default_config };\n\n/**\n * Get the current global hazo_ui configuration\n */\nexport function get_hazo_ui_config(): Readonly<HazoUiConfig> {\n return { ...global_config };\n}\n\n/**\n * Set global hazo_ui configuration\n * Merges provided config with existing config (partial update)\n *\n * @param config - Partial configuration to merge with current config\n *\n * @example\n * ```typescript\n * // Set custom submit button color globally\n * set_hazo_ui_config({\n * submit_button_background_color: '#3b82f6',\n * header_background_color: '#1e293b',\n * header_text_color: '#ffffff',\n * });\n * ```\n */\nexport function set_hazo_ui_config(config: Partial<HazoUiConfig>): void {\n global_config = { ...global_config, ...config };\n}\n\n/**\n * Reset hazo_ui configuration to defaults\n */\nexport function reset_hazo_ui_config(): void {\n global_config = { ...default_config };\n}\n","// Button component for hazo_ui library\n// Based on shadcn/ui button component\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background 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 variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground 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-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"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\n// Inline style fallbacks keyed by variant.\n// These bypass Tailwind's color utility compilation so buttons render correctly\n// when the consumer's Tailwind hasn't scanned hazo_ui's output. Values are wrapped\n// in hsl() to match the shadcn convention of storing raw HSL channels in CSS vars\n// (`--primary: 222.2 47.4% 11.2%`). A consumer using full color values (hex/rgb)\n// for the CSS vars should override these via the `style` prop.\nconst variant_styles: Record<string, React.CSSProperties> = {\n default: {\n backgroundColor: \"hsl(var(--primary))\",\n color: \"hsl(var(--primary-foreground))\",\n border: \"1px solid hsl(var(--primary))\",\n },\n destructive: {\n backgroundColor: \"hsl(var(--destructive))\",\n color: \"hsl(var(--destructive-foreground))\",\n border: \"1px solid hsl(var(--destructive))\",\n },\n outline: {\n backgroundColor: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n border: \"1px solid hsl(var(--border))\",\n },\n secondary: {\n backgroundColor: \"hsl(var(--secondary))\",\n color: \"hsl(var(--secondary-foreground))\",\n },\n};\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, style, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n const fallback_styles = variant_styles[variant ?? \"default\"] ?? {};\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n style={{ ...fallback_styles, ...style }}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n\n","// Dialog component for hazo_ui library\n// Based on shadcn/ui dialog component\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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 sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n \"break-words [overflow-wrap:anywhere]\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n\n","// Command component for hazo_ui library\n// Based on shadcn/ui command component (simplified version)\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Command = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = \"Command\";\n\nconst CommandInput = React.forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement> & {\n onValueChange?: (value: string) => void;\n }\n>(({ className, onValueChange, onChange, ...props }, ref) => (\n <input\n ref={ref}\n className={cn(\n \"flex h-11 w-full rounded-md border border-input bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 px-3\",\n className\n )}\n onChange={(e) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n }}\n {...props}\n />\n));\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n {...props}\n />\n));\nCommandList.displayName = \"CommandList\";\n\nconst CommandEmpty = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>((props, ref) => (\n <div\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n));\nCommandEmpty.displayName = \"CommandEmpty\";\n\nconst CommandGroup = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n heading?: string;\n }\n>(({ className, heading, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground\",\n className\n )}\n {...props}\n >\n {heading && (\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground\">\n {heading}\n </div>\n )}\n {children}\n </div>\n));\nCommandGroup.displayName = \"CommandGroup\";\n\nconst CommandItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n onSelect?: (value: string) => void;\n value?: string;\n selected?: boolean;\n }\n>(({ className, onSelect, value, selected, style, ...props }, ref) => {\n const handleClick = () => {\n if (onSelect && value) {\n onSelect(value);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"cls_command_item\",\n \"relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n // When selected, apply accent background and ensure all text is visible\n selected && \"bg-accent text-accent-foreground [&_.text-muted-foreground]:text-accent-foreground/70\",\n className\n )}\n style={selected ? {\n // Explicit inline styles as fallback for consumers with non-HSL CSS variables\n backgroundColor: \"var(--accent, #f1f5f9)\",\n color: \"var(--accent-foreground, #0f172a)\",\n ...style,\n } : style}\n onClick={handleClick}\n {...props}\n />\n );\n});\nCommandItem.displayName = \"CommandItem\";\n\nexport {\n Command,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n};\n\n","// Popover component for hazo_ui library\n// Based on shadcn/ui popover component\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\n\n","// Input component for hazo_ui library\n// Based on shadcn/ui input component\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n\n","// Select component for hazo_ui library\n// Based on shadcn/ui select component\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Select = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md 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\",\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 {...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)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n\n","// Tooltip component for hazo_ui library\n// Based on shadcn/ui tooltip component\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md 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\",\n className\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n\n","// Calendar component for hazo_ui library\n// Based on shadcn/ui calendar component\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { cn } from \"../../lib/utils\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n }}\n {...props}\n />\n );\n}\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n\n","\"use client\";\n\n/**\n * Hazo UI Multi Filter Dialog Component\n *\n * Reusable component for multi-field filtering with different input types.\n * Allows users to select multiple fields for filtering with appropriate input controls.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { Input } from \"../ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { Calendar as CalendarComponent } from \"../ui/calendar\";\nimport { Filter, X, Plus, Calendar as CalendarIcon } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { format } from \"date-fns\";\nimport { get_hazo_ui_config } from \"../../lib/hazo_ui_config\";\n\nexport interface FilterField {\n value: string;\n label: string;\n type: 'text' | 'number' | 'combobox' | 'boolean' | 'date';\n textConfig?: {\n minLength?: number;\n maxLength?: number;\n };\n numberConfig?: {\n min?: number;\n max?: number;\n allowDecimal?: boolean;\n decimalLength?: number;\n };\n comboboxOptions?: Array<{ label: string; value: string }>;\n booleanLabels?: {\n trueLabel?: string;\n falseLabel?: string;\n };\n}\n\nexport interface FilterConfig {\n field: string;\n operator?: string;\n value: any;\n}\n\ninterface HazoUiMultiFilterDialogProps {\n availableFields: FilterField[];\n onFilterChange: (filterConfig: FilterConfig[]) => void;\n initialFilters?: FilterConfig[];\n title?: string;\n description?: string;\n\n // Color overrides (falls back to hazo_ui_config)\n headerBackgroundColor?: string;\n headerTextColor?: string;\n submitButtonBackgroundColor?: string;\n submitButtonTextColor?: string;\n cancelButtonBackgroundColor?: string;\n cancelButtonTextColor?: string;\n cancelButtonBorderColor?: string;\n clearButtonBackgroundColor?: string;\n clearButtonTextColor?: string;\n clearButtonBorderColor?: string;\n}\n\ninterface FilterFieldItemProps {\n filterConfig: FilterConfig;\n fieldConfig: FilterField;\n onValueChange: (value: any) => void;\n onOperatorChange?: (operator: string) => void;\n onDelete: () => void;\n}\n\nfunction FilterFieldItem({\n filterConfig,\n fieldConfig,\n onValueChange,\n onOperatorChange,\n onDelete,\n}: FilterFieldItemProps) {\n const [isCalendarOpen, setIsCalendarOpen] = useState(false);\n\n const renderInput = () => {\n switch (fieldConfig.type) {\n case 'text':\n return (\n <Input\n type=\"text\"\n value={filterConfig.value || ''}\n onChange={(e) => {\n const value = e.target.value;\n if (fieldConfig.textConfig?.maxLength && value.length > fieldConfig.textConfig.maxLength) {\n return;\n }\n onValueChange(value);\n }}\n placeholder=\"Enter text...\"\n minLength={fieldConfig.textConfig?.minLength}\n maxLength={fieldConfig.textConfig?.maxLength}\n className=\"cls_filter_text_input h-8 w-full min-w-0 text-sm\"\n />\n );\n\n case 'number': {\n const numberOperators = [\n { value: 'equals', label: '=' },\n { value: 'not_equals', label: '≠' },\n { value: 'greater_than', label: '>' },\n { value: 'less_than', label: '<' },\n { value: 'greater_equal', label: '≥' },\n { value: 'less_equal', label: '≤' },\n ];\n\n return (\n <div className=\"cls_number_filter_container flex w-full items-center gap-1.5\">\n <Select\n value={filterConfig.operator || 'equals'}\n onValueChange={(value) => onOperatorChange?.(value)}\n >\n <SelectTrigger className=\"cls_operator_select h-8 w-[60px] shrink-0 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {numberOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n <span className=\"font-mono\">{op.label}</span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n type=\"number\"\n value={filterConfig.value !== undefined && filterConfig.value !== null ? filterConfig.value : ''}\n onChange={(e) => {\n const value = e.target.value;\n if (value === '') {\n onValueChange('');\n return;\n }\n let numValue = fieldConfig.numberConfig?.allowDecimal\n ? parseFloat(value)\n : parseInt(value, 10);\n\n if (isNaN(numValue)) return;\n\n if (fieldConfig.numberConfig?.allowDecimal && fieldConfig.numberConfig?.decimalLength) {\n const decimalPlaces = value.split('.')[1]?.length || 0;\n if (decimalPlaces > fieldConfig.numberConfig.decimalLength) return;\n }\n\n if (fieldConfig.numberConfig?.min !== undefined && numValue < fieldConfig.numberConfig.min) {\n numValue = fieldConfig.numberConfig.min;\n }\n if (fieldConfig.numberConfig?.max !== undefined && numValue > fieldConfig.numberConfig.max) {\n numValue = fieldConfig.numberConfig.max;\n }\n\n onValueChange(numValue);\n }}\n placeholder=\"Value\"\n min={fieldConfig.numberConfig?.min}\n max={fieldConfig.numberConfig?.max}\n step={fieldConfig.numberConfig?.allowDecimal ? 0.01 : 1}\n className=\"cls_filter_number_input h-8 flex-1 min-w-0 text-sm tabular-nums\"\n />\n </div>\n );\n }\n\n case 'combobox':\n return (\n <Select\n value={filterConfig.value || ''}\n onValueChange={(value) => onValueChange(value)}\n >\n <SelectTrigger className=\"cls_filter_combobox_select h-8 w-full min-w-0 text-sm\">\n <SelectValue placeholder=\"Select option...\" />\n </SelectTrigger>\n <SelectContent>\n {fieldConfig.comboboxOptions?.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n\n case 'boolean': {\n const trueLabel = fieldConfig.booleanLabels?.trueLabel || 'On';\n const falseLabel = fieldConfig.booleanLabels?.falseLabel || 'Off';\n\n return (\n <Select\n value={filterConfig.value !== undefined && filterConfig.value !== null ? String(filterConfig.value) : ''}\n onValueChange={(value) => onValueChange(value === 'true')}\n >\n <SelectTrigger className=\"cls_filter_boolean_select h-8 w-full min-w-0 text-sm\">\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">{trueLabel}</SelectItem>\n <SelectItem value=\"false\">{falseLabel}</SelectItem>\n </SelectContent>\n </Select>\n );\n }\n\n case 'date': {\n const dateOperators = [\n { value: 'equals', label: '=' },\n { value: 'not_equals', label: '≠' },\n { value: 'greater_than', label: '>' },\n { value: 'less_than', label: '<' },\n { value: 'greater_equal', label: '≥' },\n { value: 'less_equal', label: '≤' },\n ];\n\n const selectedDate = filterConfig.value\n ? (typeof filterConfig.value === 'string' ? new Date(filterConfig.value) : filterConfig.value)\n : undefined;\n\n return (\n <div className=\"cls_date_filter_container flex w-full items-center gap-1.5\">\n <Select\n value={filterConfig.operator || 'equals'}\n onValueChange={(value) => onOperatorChange?.(value)}\n >\n <SelectTrigger className=\"cls_operator_select h-8 w-[60px] shrink-0 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {dateOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n <span className=\"font-mono\">{op.label}</span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Popover open={isCalendarOpen} onOpenChange={setIsCalendarOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n \"cls_date_picker_trigger h-8 flex-1 justify-start gap-2 px-2.5 text-left text-sm font-normal min-w-0\",\n !selectedDate && \"text-muted-foreground\"\n )}\n >\n <CalendarIcon className=\"cls_calendar_icon h-3.5 w-3.5 shrink-0\" />\n <span className=\"cls_date_text truncate\">\n {selectedDate ? format(selectedDate, \"MMM d, yyyy\") : \"Pick a date\"}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_calendar_popover w-auto p-0\" align=\"start\">\n <CalendarComponent\n mode=\"single\"\n selected={selectedDate}\n onSelect={(date) => {\n onValueChange(date);\n setIsCalendarOpen(false);\n }}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n }\n\n default:\n return null;\n }\n };\n\n return (\n <div className=\"cls_filter_field_item group flex flex-col gap-2 rounded-lg border border-border/70 bg-card px-3 py-2.5 transition-colors hover:border-border sm:flex-row sm:items-center sm:gap-3\">\n <span className=\"cls_field_label w-full shrink-0 truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground sm:w-[110px] sm:text-sm sm:normal-case sm:font-medium sm:text-foreground sm:tracking-normal\">\n {fieldConfig.label}\n </span>\n <div className=\"cls_field_input_container flex min-w-0 flex-1 items-center gap-2\">\n <div className=\"min-w-0 flex-1\">{renderInput()}</div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDelete}\n className=\"cls_delete_btn h-7 w-7 shrink-0 p-0 text-muted-foreground/60 hover:bg-destructive/10 hover:text-destructive\"\n aria-label={`Remove ${fieldConfig.label} filter`}\n >\n <X className=\"cls_delete_icon h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n );\n}\n\nexport function HazoUiMultiFilterDialog({\n availableFields,\n onFilterChange,\n initialFilters = [],\n title = \"Filter\",\n description = \"Add fields to filter by. Select a field and set its value.\",\n headerBackgroundColor,\n headerTextColor,\n submitButtonBackgroundColor,\n submitButtonTextColor,\n cancelButtonBackgroundColor,\n cancelButtonTextColor,\n cancelButtonBorderColor,\n clearButtonBackgroundColor,\n clearButtonTextColor,\n clearButtonBorderColor,\n}: HazoUiMultiFilterDialogProps) {\n const config = get_hazo_ui_config();\n\n const finalSubmitBgColor = submitButtonBackgroundColor ?? config.submit_button_background_color;\n const finalSubmitTextColor = submitButtonTextColor ?? config.submit_button_text_color;\n const finalCancelBgColor = cancelButtonBackgroundColor ?? config.cancel_button_background_color;\n const finalCancelTextColor = cancelButtonTextColor ?? config.cancel_button_text_color;\n const finalCancelBorderColor = cancelButtonBorderColor ?? config.cancel_button_border_color;\n const finalClearBgColor = clearButtonBackgroundColor ?? config.clear_button_background_color;\n const finalClearTextColor = clearButtonTextColor ?? config.clear_button_text_color;\n const finalClearBorderColor = clearButtonBorderColor ?? config.clear_button_border_color;\n\n const submitButtonStyles: React.CSSProperties = {\n ...(finalSubmitBgColor && { backgroundColor: finalSubmitBgColor, borderColor: finalSubmitBgColor }),\n ...(finalSubmitTextColor && { color: finalSubmitTextColor }),\n };\n\n const cancelButtonStyles: React.CSSProperties = {\n ...(finalCancelBgColor && { backgroundColor: finalCancelBgColor }),\n ...(finalCancelTextColor && { color: finalCancelTextColor }),\n ...(finalCancelBorderColor && { borderColor: finalCancelBorderColor }),\n };\n\n const clearButtonStyles: React.CSSProperties = {\n ...(finalClearBgColor && { backgroundColor: finalClearBgColor }),\n ...(finalClearTextColor && { color: finalClearTextColor }),\n ...(finalClearBorderColor && { borderColor: finalClearBorderColor }),\n };\n\n const finalHeaderBgColor = headerBackgroundColor ?? config.header_background_color;\n const finalHeaderTextColor = headerTextColor ?? config.header_text_color;\n\n const headerStyles: React.CSSProperties = {\n ...(finalHeaderBgColor && { backgroundColor: finalHeaderBgColor }),\n ...(finalHeaderTextColor && { color: finalHeaderTextColor }),\n };\n\n const [isOpen, setIsOpen] = useState(false);\n const [filterFields, setFilterFields] = useState<FilterConfig[]>(initialFilters);\n const [isComboboxOpen, setIsComboboxOpen] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setFilterFields(initialFilters);\n }\n }, [isOpen, initialFilters]);\n\n const handleAddField = (fieldValue: string) => {\n if (filterFields.some(ff => ff.field === fieldValue)) return;\n\n const fieldConfig = availableFields.find(af => af.value === fieldValue);\n if (!fieldConfig) return;\n\n let defaultValue: any = '';\n if (fieldConfig.type === 'boolean') {\n defaultValue = false;\n } else if (fieldConfig.type === 'number') {\n defaultValue = fieldConfig.numberConfig?.min || 0;\n } else if (fieldConfig.type === 'date') {\n defaultValue = new Date();\n }\n\n const newFilter: FilterConfig = {\n field: fieldValue,\n operator: (fieldConfig.type === 'number' || fieldConfig.type === 'date') ? 'equals' : undefined,\n value: defaultValue,\n };\n setFilterFields([...filterFields, newFilter]);\n setIsComboboxOpen(false);\n };\n\n const handleDeleteField = (fieldValue: string) => {\n setFilterFields(filterFields.filter(ff => ff.field !== fieldValue));\n };\n\n const handleValueChange = (fieldValue: string, value: any) => {\n setFilterFields(\n filterFields.map(ff =>\n ff.field === fieldValue ? { ...ff, value } : ff\n )\n );\n };\n\n const handleOperatorChange = (fieldValue: string, operator: string) => {\n setFilterFields(\n filterFields.map(ff =>\n ff.field === fieldValue ? { ...ff, operator } : ff\n )\n );\n };\n\n const handleApply = () => {\n onFilterChange([...filterFields]);\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setFilterFields(initialFilters);\n setIsOpen(false);\n };\n\n const handleClearAll = () => {\n setFilterFields([]);\n };\n\n const availableFieldsToAdd = availableFields.filter(\n af => !filterFields.some(ff => ff.field === af.value)\n );\n\n const getFieldConfig = (fieldValue: string): FilterField | undefined => {\n return availableFields.find(af => af.value === fieldValue);\n };\n\n const hasActiveFilters = initialFilters.length > 0;\n\n const tooltipContent = hasActiveFilters ? (\n <div className=\"cls_filter_tooltip_content space-y-1\">\n <div className=\"cls_tooltip_title text-xs font-semibold mb-1\">Active filters</div>\n {initialFilters.map((filterConfig) => {\n const fieldConfig = getFieldConfig(filterConfig.field);\n if (!fieldConfig) return null;\n\n let displayValue = String(filterConfig.value);\n if (fieldConfig.type === 'boolean') {\n displayValue = filterConfig.value\n ? (fieldConfig.booleanLabels?.trueLabel || 'On')\n : (fieldConfig.booleanLabels?.falseLabel || 'Off');\n } else if (fieldConfig.type === 'combobox') {\n const option = fieldConfig.comboboxOptions?.find(opt => opt.value === filterConfig.value);\n displayValue = option?.label || displayValue;\n } else if (fieldConfig.type === 'date') {\n const dateValue = filterConfig.value instanceof Date\n ? filterConfig.value\n : new Date(filterConfig.value);\n if (!isNaN(dateValue.getTime())) {\n displayValue = format(dateValue, \"MMM d, yyyy\");\n }\n }\n\n const operatorLabel = filterConfig.operator\n ? filterConfig.operator.replace('_', ' ').replace(/\\b\\w/g, l => l.toUpperCase()) + ' '\n : '';\n\n return (\n <div key={filterConfig.field} className=\"cls_tooltip_item text-xs\">\n {fieldConfig.label}: {operatorLabel}{displayValue}\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"cls_filter_tooltip_content text-xs\">No active filters</div>\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cls_filter_button\"\n aria-label=\"Open filter dialog\"\n >\n <Filter\n className={cn(\n \"cls_filter_icon h-4 w-4 mr-2\",\n hasActiveFilters && \"text-blue-600\"\n )}\n />\n Filter\n {hasActiveFilters && (\n <span className=\"cls_filter_count ml-2 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-blue-600 px-1 text-[10px] font-semibold text-white\">\n {initialFilters.length}\n </span>\n )}\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DialogContent className=\"cls_filter_dialog_content max-w-lg gap-0 p-0 sm:rounded-xl max-h-[90vh]\">\n <DialogHeader\n className=\"cls_filter_dialog_header space-y-1 border-b px-5 py-4 text-left\"\n style={headerStyles}\n >\n <DialogTitle className=\"text-base font-semibold\">{title}</DialogTitle>\n <DialogDescription className=\"text-xs leading-relaxed text-muted-foreground\">\n {description}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"cls_filter_dialog_body space-y-3 overflow-y-auto px-5 py-4\">\n {filterFields.length > 0 ? (\n <div className=\"cls_filter_fields_list space-y-1.5\">\n {filterFields.map((filterConfig) => {\n const fieldConfig = getFieldConfig(filterConfig.field);\n if (!fieldConfig) return null;\n\n return (\n <FilterFieldItem\n key={filterConfig.field}\n filterConfig={filterConfig}\n fieldConfig={fieldConfig}\n onValueChange={(value) => handleValueChange(filterConfig.field, value)}\n onOperatorChange={(operator) => handleOperatorChange(filterConfig.field, operator)}\n onDelete={() => handleDeleteField(filterConfig.field)}\n />\n );\n })}\n </div>\n ) : (\n <div className=\"cls_empty_filter_fields rounded-lg border border-dashed border-border/70 bg-muted/20 px-4 py-6 text-center text-xs text-muted-foreground\">\n No filters yet. Add one below to narrow down the results.\n </div>\n )}\n\n <div className=\"cls_add_field_section\">\n <Popover open={isComboboxOpen} onOpenChange={setIsComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n role=\"combobox\"\n aria-expanded={isComboboxOpen}\n disabled={availableFieldsToAdd.length === 0}\n className=\"cls_add_field_combobox w-full justify-start gap-2 border border-dashed border-border/70 text-sm font-medium text-muted-foreground hover:border-border hover:bg-muted/40 hover:text-foreground\"\n >\n <Plus className=\"cls_plus_icon h-4 w-4\" />\n <span>\n {availableFieldsToAdd.length === 0 ? 'All fields added' : 'Add filter field'}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_combobox_popover w-[var(--radix-popover-trigger-width)] p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder=\"Search fields...\" className=\"cls_command_input\" />\n <CommandList>\n {availableFieldsToAdd.length === 0 ? (\n <CommandEmpty>No fields available.</CommandEmpty>\n ) : (\n <CommandGroup>\n {availableFieldsToAdd.map((field) => (\n <CommandItem\n key={field.value}\n value={field.label}\n onSelect={() => handleAddField(field.value)}\n className=\"cls_command_item\"\n >\n {field.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n </div>\n\n <DialogFooter className=\"cls_filter_dialog_footer flex flex-row items-center justify-between gap-2 border-t bg-muted/20 px-5 py-3 sm:justify-between sm:space-x-0\">\n <div className=\"cls_footer_left\">\n {filterFields.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClearAll}\n className=\"cls_clear_all_btn text-muted-foreground hover:text-foreground\"\n style={clearButtonStyles}\n >\n Clear all\n </Button>\n )}\n </div>\n <div className=\"cls_footer_right flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleCancel}\n className=\"cls_cancel_btn\"\n style={cancelButtonStyles}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleApply}\n className=\"cls_apply_btn\"\n style={submitButtonStyles}\n >\n Apply\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","\"use client\";\n\n/**\n * Hazo UI Multi Sort Dialog Component\n *\n * Reusable component for multi-field sorting with drag-and-drop reordering.\n * Allows users to select multiple fields for sorting, reorder them, and set\n * ascending/descending direction.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { ArrowUpDown, GripVertical, X, Plus, ArrowUp, ArrowDown } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { get_hazo_ui_config } from \"../../lib/hazo_ui_config\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nexport interface SortField {\n value: string;\n label: string;\n}\n\nexport interface SortConfig {\n field: string;\n direction: 'asc' | 'desc';\n}\n\ninterface HazoUiMultiSortDialogProps {\n availableFields: SortField[];\n onSortChange: (sortConfig: SortConfig[]) => void;\n initialSortFields?: SortConfig[];\n title?: string;\n description?: string;\n\n // Color overrides (falls back to hazo_ui_config)\n headerBackgroundColor?: string;\n headerTextColor?: string;\n submitButtonBackgroundColor?: string;\n submitButtonTextColor?: string;\n cancelButtonBackgroundColor?: string;\n cancelButtonTextColor?: string;\n cancelButtonBorderColor?: string;\n clearButtonBackgroundColor?: string;\n clearButtonTextColor?: string;\n clearButtonBorderColor?: string;\n}\n\ninterface SortableSortFieldItemProps {\n sortConfig: SortConfig;\n fieldLabel: string;\n priority: number;\n onDirectionChange: (direction: 'asc' | 'desc') => void;\n onDelete: () => void;\n}\n\nfunction SortableSortFieldItem({\n sortConfig,\n fieldLabel,\n priority,\n onDirectionChange,\n onDelete,\n}: SortableSortFieldItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: sortConfig.field });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.6 : 1,\n zIndex: isDragging ? 10 : undefined,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n \"cls_sortable_sort_field_item group flex items-center gap-2.5 rounded-lg border border-border/70 bg-card pl-1.5 pr-2 py-2 transition-shadow\",\n isDragging ? \"shadow-md\" : \"hover:border-border\"\n )}\n >\n <button\n type=\"button\"\n {...attributes}\n {...listeners}\n className=\"cls_drag_handle flex h-7 w-5 shrink-0 cursor-grab items-center justify-center rounded text-muted-foreground/60 hover:text-foreground active:cursor-grabbing\"\n aria-label={`Reorder ${fieldLabel}`}\n >\n <GripVertical className=\"cls_drag_icon h-4 w-4\" />\n </button>\n <span\n className=\"cls_priority_badge inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-muted text-[10px] font-semibold tabular-nums text-muted-foreground\"\n aria-label={`Sort priority ${priority}`}\n >\n {priority}\n </span>\n <span className=\"cls_field_label flex-1 truncate text-sm font-medium text-foreground\">\n {fieldLabel}\n </span>\n <div\n role=\"radiogroup\"\n aria-label={`Sort direction for ${fieldLabel}`}\n className=\"cls_direction_control inline-flex shrink-0 items-center rounded-md border border-border/70 bg-muted/40 p-0.5\"\n >\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={sortConfig.direction === 'asc'}\n data-active={sortConfig.direction === 'asc'}\n onClick={() => onDirectionChange('asc')}\n className=\"cls_dir_asc inline-flex items-center gap-1 rounded px-2 py-1 text-xs font-medium text-muted-foreground transition-colors data-[active=true]:bg-background data-[active=true]:text-foreground data-[active=true]:shadow-sm hover:text-foreground\"\n >\n <ArrowUp className=\"h-3 w-3\" />\n Asc\n </button>\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={sortConfig.direction === 'desc'}\n data-active={sortConfig.direction === 'desc'}\n onClick={() => onDirectionChange('desc')}\n className=\"cls_dir_desc inline-flex items-center gap-1 rounded px-2 py-1 text-xs font-medium text-muted-foreground transition-colors data-[active=true]:bg-background data-[active=true]:text-foreground data-[active=true]:shadow-sm hover:text-foreground\"\n >\n <ArrowDown className=\"h-3 w-3\" />\n Desc\n </button>\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDelete}\n className=\"cls_delete_btn h-7 w-7 shrink-0 p-0 text-muted-foreground/60 hover:bg-destructive/10 hover:text-destructive\"\n aria-label={`Remove ${fieldLabel} from sort`}\n >\n <X className=\"cls_delete_icon h-3.5 w-3.5\" />\n </Button>\n </div>\n );\n}\n\nexport function HazoUiMultiSortDialog({\n availableFields,\n onSortChange,\n initialSortFields = [],\n title = \"Sort\",\n description = \"Add fields to sort by, drag to reorder, toggle ascending or descending.\",\n headerBackgroundColor,\n headerTextColor,\n submitButtonBackgroundColor,\n submitButtonTextColor,\n cancelButtonBackgroundColor,\n cancelButtonTextColor,\n cancelButtonBorderColor,\n clearButtonBackgroundColor,\n clearButtonTextColor,\n clearButtonBorderColor,\n}: HazoUiMultiSortDialogProps) {\n // Get global config as defaults\n const config = get_hazo_ui_config();\n\n // Build button styles using config with prop overrides\n const finalSubmitBgColor = submitButtonBackgroundColor ?? config.submit_button_background_color;\n const finalSubmitTextColor = submitButtonTextColor ?? config.submit_button_text_color;\n const finalCancelBgColor = cancelButtonBackgroundColor ?? config.cancel_button_background_color;\n const finalCancelTextColor = cancelButtonTextColor ?? config.cancel_button_text_color;\n const finalCancelBorderColor = cancelButtonBorderColor ?? config.cancel_button_border_color;\n const finalClearBgColor = clearButtonBackgroundColor ?? config.clear_button_background_color;\n const finalClearTextColor = clearButtonTextColor ?? config.clear_button_text_color;\n const finalClearBorderColor = clearButtonBorderColor ?? config.clear_button_border_color;\n\n const submitButtonStyles: React.CSSProperties = {\n ...(finalSubmitBgColor && { backgroundColor: finalSubmitBgColor, borderColor: finalSubmitBgColor }),\n ...(finalSubmitTextColor && { color: finalSubmitTextColor }),\n };\n\n const cancelButtonStyles: React.CSSProperties = {\n ...(finalCancelBgColor && { backgroundColor: finalCancelBgColor }),\n ...(finalCancelTextColor && { color: finalCancelTextColor }),\n ...(finalCancelBorderColor && { borderColor: finalCancelBorderColor }),\n };\n\n const clearButtonStyles: React.CSSProperties = {\n ...(finalClearBgColor && { backgroundColor: finalClearBgColor }),\n ...(finalClearTextColor && { color: finalClearTextColor }),\n ...(finalClearBorderColor && { borderColor: finalClearBorderColor }),\n };\n\n // Header styles\n const finalHeaderBgColor = headerBackgroundColor ?? config.header_background_color;\n const finalHeaderTextColor = headerTextColor ?? config.header_text_color;\n\n const headerStyles: React.CSSProperties = {\n ...(finalHeaderBgColor && { backgroundColor: finalHeaderBgColor }),\n ...(finalHeaderTextColor && { color: finalHeaderTextColor }),\n };\n\n const [isOpen, setIsOpen] = useState(false);\n const [sortFields, setSortFields] = useState<SortConfig[]>(initialSortFields);\n const [isComboboxOpen, setIsComboboxOpen] = useState(false);\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n // Sync local state with initialSortFields when dialog opens\n useEffect(() => {\n if (isOpen) {\n setSortFields(initialSortFields);\n }\n }, [isOpen, initialSortFields]);\n\n const handleAddField = (fieldValue: string) => {\n if (sortFields.some(sf => sf.field === fieldValue)) {\n return;\n }\n setSortFields([...sortFields, { field: fieldValue, direction: 'asc' }]);\n setIsComboboxOpen(false);\n };\n\n const handleDeleteField = (fieldValue: string) => {\n setSortFields(sortFields.filter(sf => sf.field !== fieldValue));\n };\n\n const handleDirectionChange = (fieldValue: string, direction: 'asc' | 'desc') => {\n setSortFields(\n sortFields.map(sf =>\n sf.field === fieldValue ? { ...sf, direction } : sf\n )\n );\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = sortFields.findIndex(sf => sf.field === active.id);\n const newIndex = sortFields.findIndex(sf => sf.field === over.id);\n if (oldIndex !== -1 && newIndex !== -1) {\n setSortFields(arrayMove(sortFields, oldIndex, newIndex));\n }\n };\n\n const handleApply = () => {\n onSortChange([...sortFields]);\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setSortFields(initialSortFields);\n setIsOpen(false);\n };\n\n const handleClearAll = () => {\n setSortFields([]);\n };\n\n const availableFieldsToAdd = availableFields.filter(\n af => !sortFields.some(sf => sf.field === af.value)\n );\n\n const getFieldLabel = (fieldValue: string): string => {\n return availableFields.find(af => af.value === fieldValue)?.label || fieldValue;\n };\n\n const hasActiveSorts = initialSortFields.length > 0;\n\n const tooltipContent = hasActiveSorts ? (\n <div className=\"cls_sort_tooltip_content space-y-1\">\n <div className=\"cls_tooltip_title text-xs font-semibold mb-1\">Active sorts</div>\n {initialSortFields.map((sortConfig, index) => (\n <div key={sortConfig.field} className=\"cls_tooltip_item text-xs\">\n {index + 1}. {getFieldLabel(sortConfig.field)} ({sortConfig.direction === 'asc' ? 'Asc' : 'Desc'})\n </div>\n ))}\n </div>\n ) : (\n <div className=\"cls_sort_tooltip_content text-xs\">No active sorts</div>\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cls_sort_button\"\n aria-label=\"Open sort dialog\"\n >\n <ArrowUpDown\n className={cn(\n \"cls_sort_icon h-4 w-4 mr-2\",\n hasActiveSorts && \"text-blue-600\"\n )}\n />\n Sort\n {hasActiveSorts && (\n <span className=\"cls_sort_count ml-2 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-blue-600 px-1 text-[10px] font-semibold text-white\">\n {initialSortFields.length}\n </span>\n )}\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DialogContent className=\"cls_sort_dialog_content max-w-lg gap-0 p-0 sm:rounded-xl\">\n <DialogHeader\n className=\"cls_sort_dialog_header space-y-1 border-b px-5 py-4 text-left\"\n style={headerStyles}\n >\n <DialogTitle className=\"text-base font-semibold\">{title}</DialogTitle>\n <DialogDescription className=\"text-xs leading-relaxed text-muted-foreground\">\n {description}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"cls_sort_dialog_body space-y-3 px-5 py-4\">\n {sortFields.length > 0 ? (\n <div className=\"cls_sort_fields_list space-y-1.5\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={sortFields.map(sf => sf.field)}\n strategy={verticalListSortingStrategy}\n >\n {sortFields.map((sortConfig, idx) => (\n <SortableSortFieldItem\n key={sortConfig.field}\n sortConfig={sortConfig}\n fieldLabel={getFieldLabel(sortConfig.field)}\n priority={idx + 1}\n onDirectionChange={(direction) =>\n handleDirectionChange(sortConfig.field, direction)\n }\n onDelete={() => handleDeleteField(sortConfig.field)}\n />\n ))}\n </SortableContext>\n </DndContext>\n </div>\n ) : (\n <div className=\"cls_empty_sort_fields rounded-lg border border-dashed border-border/70 bg-muted/20 px-4 py-6 text-center text-xs text-muted-foreground\">\n No sort fields yet. Add one below to start ordering rows.\n </div>\n )}\n\n <div className=\"cls_add_field_section\">\n <Popover open={isComboboxOpen} onOpenChange={setIsComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n role=\"combobox\"\n aria-expanded={isComboboxOpen}\n disabled={availableFieldsToAdd.length === 0}\n className=\"cls_add_field_combobox w-full justify-start gap-2 border border-dashed border-border/70 text-sm font-medium text-muted-foreground hover:border-border hover:bg-muted/40 hover:text-foreground\"\n >\n <Plus className=\"cls_plus_icon h-4 w-4\" />\n <span>\n {availableFieldsToAdd.length === 0 ? 'All fields added' : 'Add sort field'}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_combobox_popover w-[var(--radix-popover-trigger-width)] p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder=\"Search fields...\" className=\"cls_command_input\" />\n <CommandList>\n {availableFieldsToAdd.length === 0 ? (\n <CommandEmpty>No fields available.</CommandEmpty>\n ) : (\n <CommandGroup>\n {availableFieldsToAdd.map((field) => (\n <CommandItem\n key={field.value}\n value={field.label}\n onSelect={() => handleAddField(field.value)}\n className=\"cls_command_item\"\n >\n {field.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n </div>\n\n <DialogFooter className=\"cls_sort_dialog_footer flex flex-row items-center justify-between gap-2 border-t bg-muted/20 px-5 py-3 sm:justify-between sm:space-x-0\">\n <div className=\"cls_footer_left\">\n {sortFields.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClearAll}\n className=\"cls_clear_all_btn text-muted-foreground hover:text-foreground\"\n style={clearButtonStyles}\n >\n Clear all\n </Button>\n )}\n </div>\n <div className=\"cls_footer_right flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleCancel}\n className=\"cls_cancel_btn\"\n style={cancelButtonStyles}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleApply}\n className=\"cls_apply_btn\"\n style={submitButtonStyles}\n >\n Apply\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","// Radio group component for hazo_ui library\n// Based on shadcn/ui radio group component\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n );\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n\n\n","\"use client\";\n\n/**\n * Hazo UI Flex Radio Component\n * \n * Flexible radio button/icon selection component with support for single and multi-selection modes,\n * customizable layouts, and react-icons integration.\n */\n\nimport { RadioGroup, RadioGroupItem } from \"../ui/radio-group\";\nimport { Button } from \"../ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { cn } from \"../../lib/utils\";\n// Import icon sets - tree-shaking will remove unused ones\nimport * as FaIcons from \"react-icons/fa\";\nimport * as MdIcons from \"react-icons/md\";\nimport * as HiIcons from \"react-icons/hi\";\nimport * as BiIcons from \"react-icons/bi\";\nimport * as AiIcons from \"react-icons/ai\";\nimport * as BsIcons from \"react-icons/bs\";\nimport * as FiIcons from \"react-icons/fi\";\nimport * as IoIcons from \"react-icons/io5\";\nimport * as RiIcons from \"react-icons/ri\";\nimport * as TbIcons from \"react-icons/tb\";\nimport * as CiIcons from \"react-icons/ci\";\n\n// Icon set mapping\nconst iconSetMap: Record<string, any> = {\n fa: FaIcons,\n md: MdIcons,\n hi: HiIcons,\n bi: BiIcons,\n ai: AiIcons,\n bs: BsIcons,\n fi: FiIcons,\n io: IoIcons,\n io5: IoIcons,\n ri: RiIcons,\n tb: TbIcons,\n ci: CiIcons,\n};\n\n/**\n * Get icon library for a given icon set\n */\nfunction getIconLibrary(iconSet: string): any {\n if (!iconSet) return null;\n const normalizedSet = iconSet.toLowerCase();\n return iconSetMap[normalizedSet] || null;\n}\n\nexport interface HazoUiFlexRadioItem {\n label: string;\n value: string;\n icon_selected?: string;\n icon_unselected?: string;\n fgcolor?: string; // Foreground color for the icon (text/icon color)\n bgcolor?: string; // Background color for the icon button\n}\n\nexport interface HazoUiFlexRadioProps {\n layout?: \"horizontal\" | \"vertical\";\n style?: \"radio\" | \"icons\";\n display_label?: boolean;\n icon_set?: string; // Package name like 'fa', 'md', etc.\n data: HazoUiFlexRadioItem[];\n selection: \"single\" | \"multi\";\n value: string | string[];\n onChange: (value: string | string[]) => void;\n className?: string;\n compressed?: boolean; // When true, removes padding and spacing between elements\n}\n\n/**\n * Get icon component from react-icons based on icon set and icon name\n */\nfunction getIconComponent(iconSet: string | undefined, iconName: string | undefined): React.ComponentType<any> | null {\n if (!iconSet || !iconName) return null;\n \n const iconLibrary = getIconLibrary(iconSet);\n if (!iconLibrary) return null;\n \n const IconComponent = iconLibrary[iconName];\n return IconComponent || null;\n}\n\n/**\n * Hazo UI Flex Radio Component\n * Supports single and multi-selection with radio buttons or icons\n */\nexport function HazoUiFlexRadio({\n layout = \"horizontal\",\n style = \"radio\",\n display_label = true,\n icon_set,\n data,\n selection = \"single\",\n value,\n onChange,\n className,\n compressed = false,\n}: HazoUiFlexRadioProps) {\n // Icon library is loaded lazily when needed\n\n /**\n * Handle single selection change\n */\n const handleSingleSelection = (selectedValue: string) => {\n onChange(selectedValue);\n };\n\n /**\n * Handle multi selection change\n */\n const handleMultiSelection = (selectedValue: string) => {\n const currentValues = Array.isArray(value) ? value : [];\n const isSelected = currentValues.includes(selectedValue);\n \n if (isSelected) {\n // Remove from selection\n onChange(currentValues.filter((v) => v !== selectedValue));\n } else {\n // Add to selection\n onChange([...currentValues, selectedValue]);\n }\n };\n\n /**\n * Check if an item is selected\n */\n const isSelected = (itemValue: string): boolean => {\n if (selection === \"single\") {\n return value === itemValue;\n } else {\n const currentValues = Array.isArray(value) ? value : [];\n return currentValues.includes(itemValue);\n }\n };\n\n /**\n * Render radio style option\n */\n const renderRadioOption = (item: HazoUiFlexRadioItem) => {\n const selected = isSelected(item.value);\n \n if (selection === \"single\") {\n const optionContent = (\n <div\n className={cn(\n \"cls_radio_option flex items-center gap-2\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n compressed ? \"\" : \"p-2 rounded-md\",\n \"hover:bg-accent transition-colors\",\n selected && \"bg-accent\"\n )}\n >\n <RadioGroupItem\n value={item.value}\n id={`radio-${item.value}`}\n className=\"cls_radio_item shrink-0\"\n />\n {display_label && (\n <label\n htmlFor={`radio-${item.value}`}\n className=\"cls_radio_label text-sm font-medium cursor-pointer flex-1\"\n >\n {item.label}\n </label>\n )}\n </div>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {optionContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n } else {\n // Multi-selection with checkbox-like behavior\n const optionContent = (\n <div\n className={cn(\n \"cls_radio_option flex items-center gap-2 cursor-pointer\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n compressed ? \"\" : \"p-2 rounded-md\",\n \"hover:bg-accent transition-colors\",\n selected && \"bg-accent\"\n )}\n onClick={() => handleMultiSelection(item.value)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleMultiSelection(item.value);\n }\n }}\n >\n <div\n className={cn(\n \"cls_checkbox_indicator h-4 w-4 rounded-sm border-2 border-primary flex items-center justify-center transition-colors shrink-0\",\n selected ? \"bg-primary\" : \"bg-background\"\n )}\n >\n {selected && (\n <svg\n className=\"cls_checkmark h-3 w-3 text-primary-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {display_label && (\n <span className=\"cls_checkbox_label text-sm font-medium flex-1\">\n {item.label}\n </span>\n )}\n </div>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {optionContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n }\n };\n\n /**\n * Render icon style option\n */\n const renderIconOption = (item: HazoUiFlexRadioItem) => {\n const selected = isSelected(item.value);\n \n // Get icon components\n const SelectedIcon = icon_set && item.icon_selected\n ? getIconComponent(icon_set, item.icon_selected)\n : null;\n const UnselectedIcon = icon_set && item.icon_unselected\n ? getIconComponent(icon_set, item.icon_unselected)\n : null;\n \n const IconComponent = selected && SelectedIcon ? SelectedIcon : (UnselectedIcon || SelectedIcon);\n \n // Apply custom colors if provided\n const buttonStyles: React.CSSProperties = {};\n if (item.bgcolor) {\n buttonStyles.backgroundColor = item.bgcolor;\n }\n \n const buttonContent = (\n <Button\n variant={selected ? \"default\" : \"ghost\"}\n size=\"default\"\n className={cn(\n \"cls_icon_option border-0\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n \"gap-2 h-auto\",\n compressed ? \"py-0 px-0\" : \"py-2 px-3 sm:py-3 sm:px-4\",\n // Only apply default colors if custom colors are not provided\n !item.bgcolor && selected && \"bg-primary text-primary-foreground\",\n !item.bgcolor && !selected && \"hover:bg-accent\"\n )}\n style={Object.keys(buttonStyles).length > 0 ? buttonStyles : undefined}\n onClick={() => {\n if (selection === \"single\") {\n handleSingleSelection(item.value);\n } else {\n handleMultiSelection(item.value);\n }\n }}\n aria-label={item.label}\n aria-pressed={selected}\n >\n {IconComponent && (\n <IconComponent \n className=\"cls_icon h-4 w-4 sm:h-5 sm:w-5\" \n style={item.fgcolor ? { color: item.fgcolor } : undefined}\n />\n )}\n {display_label && (\n <span \n className=\"cls_icon_label text-sm font-medium\"\n style={item.fgcolor ? { color: item.fgcolor } : undefined}\n >\n {item.label}\n </span>\n )}\n </Button>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {buttonContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n };\n\n // Container classes with single outline\n const containerClasses = cn(\n \"cls_hazo_ui_flex_radio border border-input rounded-md\",\n compressed ? \"\" : \"p-2 sm:p-3\",\n layout === \"horizontal\"\n ? cn(\n \"flex flex-row flex-wrap\",\n compressed ? \"gap-0\" : \"gap-2 sm:gap-3\"\n )\n : cn(\n \"flex flex-col\",\n compressed ? \"gap-0\" : \"gap-2 sm:gap-3\"\n ),\n className\n );\n \n // RadioGroup needs grid override for flex layout\n const radioGroupClasses = cn(\n containerClasses,\n \"!flex !flex-row !flex-wrap\" // Override RadioGroup's default grid\n );\n\n if (style === \"icons\") {\n // Icon style - use buttons\n return (\n <TooltipProvider delayDuration={1000}>\n <div className={containerClasses} role={selection === \"single\" ? \"radiogroup\" : \"group\"}>\n {data.map((item) => renderIconOption(item))}\n </div>\n </TooltipProvider>\n );\n } else {\n // Radio style - use RadioGroup for single, custom for multi\n if (selection === \"single\") {\n return (\n <TooltipProvider delayDuration={1000}>\n <RadioGroup\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={handleSingleSelection}\n className={layout === \"horizontal\" \n ? cn(radioGroupClasses, \"!flex-row\")\n : cn(radioGroupClasses, \"!flex-col\")\n }\n >\n {data.map((item) => renderRadioOption(item))}\n </RadioGroup>\n </TooltipProvider>\n );\n } else {\n return (\n <TooltipProvider delayDuration={1000}>\n <div className={containerClasses} role=\"group\">\n {data.map((item) => renderRadioOption(item))}\n </div>\n </TooltipProvider>\n );\n }\n }\n}\n\n","\"use client\";\n\n/**\n * Hazo UI Pill Radio Component\n *\n * Pill-shaped radio selection buttons with optional icons, customizable colors,\n * and horizontal/vertical layout support. Single-select only.\n */\n\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\n\n// Import icon sets - tree-shaking will remove unused ones\nimport * as FaIcons from \"react-icons/fa\";\nimport * as MdIcons from \"react-icons/md\";\nimport * as HiIcons from \"react-icons/hi\";\nimport * as BiIcons from \"react-icons/bi\";\nimport * as AiIcons from \"react-icons/ai\";\nimport * as BsIcons from \"react-icons/bs\";\nimport * as FiIcons from \"react-icons/fi\";\nimport * as IoIcons from \"react-icons/io5\";\nimport * as RiIcons from \"react-icons/ri\";\nimport * as TbIcons from \"react-icons/tb\";\nimport * as CiIcons from \"react-icons/ci\";\n\n// Icon set mapping\nconst icon_set_map: Record<string, any> = {\n fa: FaIcons,\n md: MdIcons,\n hi: HiIcons,\n bi: BiIcons,\n ai: AiIcons,\n bs: BsIcons,\n fi: FiIcons,\n io: IoIcons,\n io5: IoIcons,\n ri: RiIcons,\n tb: TbIcons,\n ci: CiIcons,\n};\n\n/**\n * Get icon component from react-icons based on icon set and icon name\n */\nfunction get_icon_component(icon_set: string | undefined, icon_name: string | undefined): React.ComponentType<any> | null {\n if (!icon_set || !icon_name) return null;\n const library = icon_set_map[icon_set.toLowerCase()];\n if (!library) return null;\n return library[icon_name] || null;\n}\n\nexport interface HazoUiPillRadioItem {\n label: string;\n value: string;\n icon?: string;\n color?: string;\n}\n\nexport interface HazoUiPillRadioProps {\n layout?: \"horizontal\" | \"vertical\";\n icon_set?: string;\n data: HazoUiPillRadioItem[];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n pill_size?: \"sm\" | \"md\" | \"lg\";\n equal_width?: boolean;\n}\n\n// Default accent color (blue matching the screenshot)\nconst DEFAULT_COLOR = \"#3b82f6\";\n\n/**\n * Convert a hex or named color to an rgba string with given opacity\n */\nfunction color_with_opacity(color: string, opacity: number): string {\n // Handle hex colors\n if (color.startsWith(\"#\")) {\n const hex = color.replace(\"#\", \"\");\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n return color;\n}\n\n/**\n * Size configuration for pill variants\n */\nconst size_classes: Record<string, string> = {\n sm: \"px-3 py-1.5 text-xs gap-1.5\",\n md: \"px-4 py-2 text-sm gap-2\",\n lg: \"px-5 py-2.5 text-base gap-2.5\",\n};\n\nconst icon_size_classes: Record<string, string> = {\n sm: \"h-3.5 w-3.5\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n};\n\nexport function HazoUiPillRadio({\n layout = \"horizontal\",\n icon_set = \"fa\",\n data,\n value,\n onChange,\n className,\n pill_size = \"md\",\n equal_width = false,\n}: HazoUiPillRadioProps) {\n return (\n <TooltipProvider delayDuration={1000}>\n <div\n className={cn(\n \"cls_hazo_ui_pill_radio\",\n layout === \"horizontal\"\n ? \"flex flex-row flex-wrap gap-3\"\n : \"inline-flex flex-col gap-3\",\n className\n )}\n role=\"radiogroup\"\n >\n {data.map((item) => {\n const is_selected = value === item.value;\n const accent = item.color || DEFAULT_COLOR;\n const IconComponent = get_icon_component(icon_set, item.icon);\n\n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={is_selected}\n onClick={() => onChange(item.value)}\n className={cn(\n \"cls_pill_radio_item\",\n \"inline-flex items-center rounded-full border cursor-pointer\",\n \"transition-all duration-200 font-medium whitespace-nowrap\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n size_classes[pill_size],\n equal_width && \"justify-center flex-1\",\n !is_selected && \"border-border bg-card text-muted-foreground hover:bg-accent/50\"\n )}\n style={\n is_selected\n ? {\n borderColor: accent,\n backgroundColor: color_with_opacity(accent, 0.08),\n color: accent,\n }\n : undefined\n }\n >\n {IconComponent && (\n <IconComponent\n className={cn(\"cls_pill_radio_icon shrink-0\", icon_size_classes[pill_size])}\n />\n )}\n <span className=\"cls_pill_radio_label\">{item.label}</span>\n </button>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n })}\n </div>\n </TooltipProvider>\n );\n}\n","\"use client\";\n\n/**\n * Hazo UI Flex Input Component\n * \n * Enhanced input component with type validation, character restrictions, and error messaging.\n * Extends shadcn Input component with additional validation props.\n */\n\nimport * as React from \"react\";\nimport { Input, type InputProps } from \"../ui/input\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface HazoUiFlexInputProps extends Omit<InputProps, \"type\"> {\n input_type?: \"mixed\" | \"numeric\" | \"email\" | \"alpha\";\n text_len_min?: number;\n text_len_max?: number;\n num_min?: number;\n num_max?: number;\n regex?: string | RegExp;\n num_decimals?: number;\n format_guide?: string;\n format_guide_info?: boolean;\n}\n\n/**\n * Validate input value based on input_type and constraints\n */\nfunction validateInput(\n value: string,\n input_type: \"mixed\" | \"numeric\" | \"email\" | \"alpha\",\n text_len_min?: number,\n text_len_max?: number,\n num_min?: number,\n num_max?: number,\n regex?: string | RegExp,\n num_decimals?: number\n): { isValid: boolean; errorMessage?: string } {\n // Empty value validation\n if (value === \"\") {\n return { isValid: true };\n }\n\n // Type-specific validation\n switch (input_type) {\n case \"numeric\": {\n // Check if value is a valid number\n const numValue = parseFloat(value);\n if (isNaN(numValue)) {\n return { isValid: false, errorMessage: \"Must be a valid number\" };\n }\n\n // Check decimal places\n if (num_decimals !== undefined) {\n const decimalPlaces = value.split(\".\")[1]?.length || 0;\n if (decimalPlaces > num_decimals) {\n return {\n isValid: false,\n errorMessage: `Maximum ${num_decimals} decimal place${num_decimals !== 1 ? \"s\" : \"\"} allowed`,\n };\n }\n }\n\n // Check min/max\n if (num_min !== undefined && numValue < num_min) {\n return { isValid: false, errorMessage: `Must be at least ${num_min}` };\n }\n if (num_max !== undefined && numValue > num_max) {\n return { isValid: false, errorMessage: `Must be at most ${num_max}` };\n }\n break;\n }\n\n case \"alpha\": {\n // Check if value contains only letters, numbers, and spaces\n const alphaRegex = /^[A-Za-z0-9\\s]*$/;\n if (!alphaRegex.test(value)) {\n return { isValid: false, errorMessage: \"Only letters, numbers, and spaces are allowed\" };\n }\n break;\n }\n\n case \"email\": {\n // Basic email validation\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return { isValid: false, errorMessage: \"Must be a valid email address\" };\n }\n break;\n }\n\n case \"mixed\": {\n // Check length constraints\n if (text_len_min !== undefined && value.length < text_len_min) {\n return {\n isValid: false,\n errorMessage: `Must be at least ${text_len_min} character${text_len_min !== 1 ? \"s\" : \"\"}`,\n };\n }\n if (text_len_max !== undefined && value.length > text_len_max) {\n return {\n isValid: false,\n errorMessage: `Must be at most ${text_len_max} character${text_len_max !== 1 ? \"s\" : \"\"}`,\n };\n }\n break;\n }\n }\n\n // Regex validation (applies to all types if provided)\n if (regex) {\n const regexPattern = typeof regex === \"string\" ? new RegExp(regex) : regex;\n if (!regexPattern.test(value)) {\n return { isValid: false, errorMessage: \"Invalid format\" };\n }\n }\n\n return { isValid: true };\n}\n\n/**\n * Filter input value based on input_type to prevent invalid characters\n */\nfunction filterInputValue(\n value: string,\n input_type: \"mixed\" | \"numeric\" | \"email\" | \"alpha\",\n num_decimals?: number\n): string {\n switch (input_type) {\n case \"numeric\": {\n // Allow digits, decimal point, and minus sign\n let filtered = value.replace(/[^\\d.-]/g, \"\");\n\n // Handle decimal point - only allow one\n const parts = filtered.split(\".\");\n if (parts.length > 2) {\n filtered = parts[0] + \".\" + parts.slice(1).join(\"\");\n }\n\n // If num_decimals is 0, don't allow decimal point\n if (num_decimals === 0 && filtered.includes(\".\")) {\n filtered = filtered.replace(\".\", \"\");\n }\n\n // Limit decimal places\n if (num_decimals !== undefined && num_decimals > 0) {\n const parts = filtered.split(\".\");\n if (parts.length === 2 && parts[1].length > num_decimals) {\n filtered = parts[0] + \".\" + parts[1].substring(0, num_decimals);\n }\n }\n\n return filtered;\n }\n\n case \"alpha\": {\n // Allow letters, numbers, and spaces\n return value.replace(/[^A-Za-z0-9\\s]/g, \"\");\n }\n\n case \"email\":\n case \"mixed\":\n default: {\n // Allow all characters for email and mixed\n return value;\n }\n }\n}\n\nexport const HazoUiFlexInput = React.forwardRef<\n HTMLInputElement,\n HazoUiFlexInputProps\n>(\n (\n {\n className,\n input_type = \"mixed\",\n text_len_min,\n text_len_max,\n num_min,\n num_max,\n regex,\n num_decimals,\n format_guide,\n format_guide_info = false,\n value: controlledValue,\n onChange,\n onBlur,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState<string>(\n typeof controlledValue === \"string\" ? controlledValue : (typeof controlledValue === \"number\" ? String(controlledValue) : \"\")\n );\n const [errorMessage, setErrorMessage] = React.useState<string | undefined>();\n\n // Use controlled value if provided, otherwise use internal state\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled\n ? (typeof controlledValue === \"string\" ? controlledValue : String(controlledValue || \"\"))\n : internalValue;\n\n // Sync internal state when controlled value changes externally\n React.useEffect(() => {\n if (isControlled) {\n const newValue = typeof controlledValue === \"string\" ? controlledValue : String(controlledValue || \"\");\n if (newValue !== internalValue) {\n setInternalValue(newValue);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlledValue, isControlled]);\n\n /**\n * Handle input change with character filtering\n */\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let newValue = e.target.value;\n\n // Apply character filtering for numeric and alpha types\n if (input_type === \"numeric\" || input_type === \"alpha\") {\n newValue = filterInputValue(newValue, input_type, num_decimals);\n }\n\n // Update internal state if uncontrolled\n if (!isControlled) {\n setInternalValue(newValue);\n }\n\n // Clear error on change\n if (errorMessage) {\n setErrorMessage(undefined);\n }\n\n // Call original onChange if provided\n if (onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, value: newValue },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n /**\n * Handle blur event with validation\n */\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const validation = validateInput(\n currentValue,\n input_type,\n text_len_min,\n text_len_max,\n num_min,\n num_max,\n regex,\n num_decimals\n );\n\n if (!validation.isValid) {\n setErrorMessage(validation.errorMessage || format_guide || \"Invalid input\");\n } else {\n setErrorMessage(undefined);\n }\n\n // Call original onBlur if provided\n if (onBlur) {\n onBlur(e);\n }\n };\n\n // Determine input type for HTML input element\n const htmlInputType =\n input_type === \"email\" ? \"email\" : input_type === \"numeric\" ? \"text\" : \"text\";\n\n // Determine if input has error\n const hasError = errorMessage !== undefined;\n\n return (\n <div className=\"cls_hazo_ui_flex_input_container w-full\">\n <Input\n ref={ref}\n type={htmlInputType}\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n className={cn(\n hasError && \"border-destructive focus-visible:ring-destructive\",\n className\n )}\n {...props}\n />\n {hasError && errorMessage && (\n <p className=\"cls_error_message mt-1 text-sm text-destructive\">\n {errorMessage}\n </p>\n )}\n {format_guide_info && format_guide && (\n <p\n className={cn(\n \"cls_format_guide_info mt-1 text-xs italic text-muted-foreground\",\n hasError && \"mt-0\"\n )}\n >\n {format_guide}\n </p>\n )}\n </div>\n );\n }\n);\n\nHazoUiFlexInput.displayName = \"HazoUiFlexInput\";\n\n","\"use client\";\n\n/**\n * Toolbar Button Component\n *\n * Reusable button component for the RTE toolbar with active/disabled states\n * and tooltip support.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../ui/tooltip\";\n\nexport interface ToolbarButtonProps {\n onClick?: () => void;\n is_active?: boolean;\n disabled?: boolean;\n tooltip?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const ToolbarButton = React.forwardRef<\n HTMLButtonElement,\n ToolbarButtonProps\n>(\n (\n { onClick, is_active = false, disabled = false, tooltip, className, children },\n ref\n ) => {\n const button = (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cn(\n \"cls_rte_toolbar_button\",\n \"inline-flex items-center justify-center\",\n \"h-8 w-8 rounded-md\",\n \"text-sm font-medium\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n // Default state\n \"bg-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n // Active state\n is_active && \"bg-accent text-accent-foreground\",\n // Disabled state\n disabled && \"opacity-50 cursor-not-allowed hover:bg-transparent hover:text-muted-foreground\",\n className\n )}\n >\n {children}\n </button>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n }\n);\n\nToolbarButton.displayName = \"ToolbarButton\";\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"onChange\", \"width\", \"presetColors\", \"color\", \"editableDisable\", \"disableAlpha\", \"style\"];\nimport React, { useState, Fragment } from 'react';\nimport Saturation from '@uiw/react-color-saturation';\nimport Alpha from '@uiw/react-color-alpha';\nimport EditableInput from '@uiw/react-color-editable-input';\nimport RGBA from '@uiw/react-color-editable-input-rgba';\nimport Hue from '@uiw/react-color-hue';\nimport { validHex, hsvaToHex, hsvaToRgbaString, hexToHsva, color as handleColor } from '@uiw/color-convert';\nimport Swatch from '@uiw/react-color-swatch';\nimport { useEffect } from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar PRESET_COLORS = ['#D0021B', '#F5A623', '#f8e61b', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF'];\nvar Bar = props => /*#__PURE__*/_jsx(\"div\", {\n style: {\n boxShadow: 'rgb(0 0 0 / 60%) 0px 0px 2px',\n width: 4,\n top: 1,\n bottom: 1,\n left: props.left,\n borderRadius: 1,\n position: 'absolute',\n backgroundColor: '#fff'\n }\n});\nvar Sketch = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-sketch' : _props$prefixCls,\n className = props.className,\n onChange = props.onChange,\n _props$width = props.width,\n width = _props$width === void 0 ? 218 : _props$width,\n _props$presetColors = props.presetColors,\n presetColors = _props$presetColors === void 0 ? PRESET_COLORS : _props$presetColors,\n color = props.color,\n _props$editableDisabl = props.editableDisable,\n editableDisable = _props$editableDisabl === void 0 ? true : _props$editableDisabl,\n _props$disableAlpha = props.disableAlpha,\n disableAlpha = _props$disableAlpha === void 0 ? false : _props$disableAlpha,\n style = props.style,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var _useState = useState({\n h: 209,\n s: 36,\n v: 90,\n a: 1\n }),\n hsva = _useState[0],\n setHsva = _useState[1];\n useEffect(() => {\n if (typeof color === 'string' && validHex(color)) {\n setHsva(hexToHsva(color));\n }\n if (typeof color === 'object') {\n setHsva(color);\n }\n }, [color]);\n var handleChange = hsv => {\n setHsva(hsv);\n onChange && onChange(handleColor(hsv));\n };\n var handleHex = (value, evn) => {\n if (typeof value === 'string' && validHex(value) && /(3|6)/.test(String(value.length))) {\n handleChange(hexToHsva(value));\n }\n };\n var handleAlphaChange = newAlpha => handleChange(_extends({}, hsva, {\n a: newAlpha.a\n }));\n var handleSaturationChange = newColor => handleChange(_extends({}, hsva, newColor, {\n a: hsva.a\n }));\n var styleMain = _extends({\n '--sketch-background': 'rgb(255, 255, 255)',\n '--sketch-box-shadow': 'rgb(0 0 0 / 15%) 0px 0px 0px 1px, rgb(0 0 0 / 15%) 0px 8px 16px',\n '--sketch-swatch-box-shadow': 'rgb(0 0 0 / 15%) 0px 0px 0px 1px inset',\n '--sketch-alpha-box-shadow': 'rgb(0 0 0 / 15%) 0px 0px 0px 1px inset, rgb(0 0 0 / 25%) 0px 0px 4px inset',\n '--sketch-swatch-border-top': '1px solid rgb(238, 238, 238)',\n background: 'var(--sketch-background)',\n borderRadius: 4,\n boxShadow: 'var(--sketch-box-shadow)',\n width\n }, style);\n var styleAlpha = {\n borderRadius: 2,\n background: hsvaToRgbaString(hsva),\n boxShadow: 'var(--sketch-alpha-box-shadow)'\n };\n var styleSwatch = {\n borderTop: 'var(--sketch-swatch-border-top)',\n paddingTop: 10,\n paddingLeft: 10\n };\n var styleSwatchRect = {\n marginRight: 10,\n marginBottom: 10,\n borderRadius: 3,\n boxShadow: 'var(--sketch-swatch-box-shadow)'\n };\n return /*#__PURE__*/_jsxs(\"div\", _extends({}, other, {\n className: prefixCls + \" \" + (className || ''),\n ref: ref,\n style: styleMain,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n style: {\n padding: '10px 10px 8px'\n },\n children: [/*#__PURE__*/_jsx(Saturation, {\n hsva: hsva,\n style: {\n width: 'auto',\n height: 150\n },\n onChange: handleSaturationChange\n }), /*#__PURE__*/_jsxs(\"div\", {\n style: {\n display: 'flex',\n marginTop: 4\n },\n children: [/*#__PURE__*/_jsxs(\"div\", {\n style: {\n flex: 1\n },\n children: [/*#__PURE__*/_jsx(Hue, {\n width: \"auto\",\n height: 10,\n hue: hsva.h,\n pointer: Bar,\n innerProps: {\n style: {\n marginLeft: 1,\n marginRight: 5\n }\n },\n onChange: newHue => handleChange(_extends({}, hsva, newHue))\n }), !disableAlpha && /*#__PURE__*/_jsx(Alpha, {\n width: \"auto\",\n height: 10,\n hsva: hsva,\n pointer: Bar,\n style: {\n marginTop: 4\n },\n innerProps: {\n style: {\n marginLeft: 1,\n marginRight: 5\n }\n },\n onChange: handleAlphaChange\n })]\n }), !disableAlpha && /*#__PURE__*/_jsx(Alpha, {\n width: 24,\n height: 24,\n hsva: hsva,\n radius: 2,\n style: {\n marginLeft: 4\n },\n bgProps: {\n style: {\n background: 'transparent'\n }\n },\n innerProps: {\n style: styleAlpha\n },\n pointer: () => /*#__PURE__*/_jsx(Fragment, {})\n })]\n })]\n }), editableDisable && /*#__PURE__*/_jsxs(\"div\", {\n style: {\n display: 'flex',\n margin: '0 10px 3px 10px'\n },\n children: [/*#__PURE__*/_jsx(EditableInput, {\n label: \"Hex\",\n value: hsvaToHex(hsva).replace(/^#/, '').toLocaleUpperCase(),\n onChange: (evn, val) => handleHex(val, evn),\n style: {\n minWidth: 58\n }\n }), /*#__PURE__*/_jsx(RGBA, {\n hsva: hsva,\n style: {\n marginLeft: 6\n },\n aProps: !disableAlpha ? {} : false,\n onChange: result => handleChange(result.hsva)\n })]\n }), presetColors && presetColors.length > 0 && /*#__PURE__*/_jsx(Swatch, {\n style: styleSwatch,\n colors: presetColors,\n color: hsvaToHex(hsva),\n onChange: hsvColor => handleChange(hsvColor),\n rectProps: {\n style: styleSwatchRect\n }\n })]\n }));\n});\nSketch.displayName = 'Sketch';\nexport default Sketch;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"radius\", \"pointer\", \"className\", \"hue\", \"style\", \"hsva\", \"onChange\"];\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { hsvaToHslaString } from '@uiw/color-convert';\nimport Interactive from '@uiw/react-drag-event-interactive';\nimport { Pointer } from \"./Pointer.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar Saturation = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _hsva$h;\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-saturation' : _props$prefixCls,\n _props$radius = props.radius,\n radius = _props$radius === void 0 ? 0 : _props$radius,\n pointer = props.pointer,\n className = props.className,\n _props$hue = props.hue,\n hue = _props$hue === void 0 ? 0 : _props$hue,\n style = props.style,\n hsva = props.hsva,\n onChange = props.onChange,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var containerStyle = _extends({\n width: 200,\n height: 200,\n borderRadius: radius\n }, style, {\n position: 'relative'\n });\n var containerRef = useRef(null);\n\n // Combine external ref with internal ref\n var combinedRef = useCallback(node => {\n containerRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref && 'current' in ref) {\n ref.current = node;\n }\n }, [ref]);\n var handleChange = useCallback((interaction, event) => {\n onChange && hsva && onChange({\n h: hsva.h,\n s: interaction.left * 100,\n v: (1 - interaction.top) * 100,\n a: hsva.a\n // source: 'hsv',\n });\n // Ensure the component maintains focus after drag interaction\n var element = containerRef.current;\n if (element) {\n element.focus();\n }\n }, [hsva, onChange]);\n var handleKeyDown = useCallback(event => {\n if (!hsva || !onChange) return;\n var step = 1; // 1% step for saturation and value\n var newS = hsva.s;\n var newV = hsva.v;\n var changed = false;\n switch (event.key) {\n case 'ArrowLeft':\n newS = Math.max(0, hsva.s - step);\n changed = true;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newS = Math.min(100, hsva.s + step);\n changed = true;\n event.preventDefault();\n break;\n case 'ArrowUp':\n newV = Math.min(100, hsva.v + step);\n changed = true;\n event.preventDefault();\n break;\n case 'ArrowDown':\n newV = Math.max(0, hsva.v - step);\n changed = true;\n event.preventDefault();\n break;\n default:\n return;\n }\n if (changed) {\n onChange({\n h: hsva.h,\n s: newS,\n v: newV,\n a: hsva.a\n });\n }\n }, [hsva, onChange]);\n var pointerElement = useMemo(() => {\n if (!hsva) return null;\n var comProps = {\n top: 100 - hsva.v + \"%\",\n left: hsva.s + \"%\",\n color: hsvaToHslaString(hsva)\n };\n if (pointer && typeof pointer === 'function') {\n return pointer(_extends({\n prefixCls\n }, comProps));\n }\n return /*#__PURE__*/_jsx(Pointer, _extends({\n prefixCls: prefixCls\n }, comProps));\n }, [hsva, pointer, prefixCls]);\n var handleClick = useCallback(event => {\n event.target.focus();\n }, []);\n return /*#__PURE__*/_jsx(Interactive, _extends({\n className: [prefixCls, className || ''].filter(Boolean).join(' ')\n }, other, {\n style: _extends({\n position: 'absolute',\n inset: 0,\n cursor: 'crosshair',\n backgroundImage: \"linear-gradient(0deg, #000, transparent), linear-gradient(90deg, #fff, hsl(\" + ((_hsva$h = hsva == null ? void 0 : hsva.h) != null ? _hsva$h : hue) + \", 100%, 50%))\"\n }, containerStyle, {\n outline: 'none'\n }),\n ref: combinedRef,\n onMove: handleChange,\n onDown: handleChange,\n onKeyDown: handleKeyDown,\n onClick: handleClick,\n children: pointerElement\n }));\n});\nSaturation.displayName = 'Saturation';\nexport default Saturation;","import _extends from \"@babel/runtime/helpers/extends\";\nvar RGB_MAX = 255;\nvar HUE_MAX = 360;\nvar SV_MAX = 100;\n/**\n * ```js\n * rgbaToHsva({ r: 255, g: 255, b: 255, a: 1 }) //=> { h: 0, s: 0, v: 100, a: 1 }\n * ```\n */\nexport var rgbaToHsva = _ref => {\n var r = _ref.r,\n g = _ref.g,\n b = _ref.b,\n a = _ref.a;\n var max = Math.max(r, g, b);\n var delta = max - Math.min(r, g, b);\n\n // prettier-ignore\n var hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;\n return {\n h: 60 * (hh < 0 ? hh + 6 : hh),\n s: max ? delta / max * SV_MAX : 0,\n v: max / RGB_MAX * SV_MAX,\n a\n };\n};\nexport var hsvaToHslString = hsva => {\n var _hsvaToHsla = hsvaToHsla(hsva),\n h = _hsvaToHsla.h,\n s = _hsvaToHsla.s,\n l = _hsvaToHsla.l;\n // return `hsl(${h}, ${s}%, ${l}%)`;\n return \"hsl(\" + h + \", \" + Math.round(s) + \"%, \" + Math.round(l) + \"%)\";\n};\nexport var hsvaToHsvString = _ref2 => {\n var h = _ref2.h,\n s = _ref2.s,\n v = _ref2.v;\n return \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\";\n};\nexport var hsvaToHsvaString = _ref3 => {\n var h = _ref3.h,\n s = _ref3.s,\n v = _ref3.v,\n a = _ref3.a;\n return \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + a + \")\";\n};\nexport var hsvaToHslaString = hsva => {\n var _hsvaToHsla2 = hsvaToHsla(hsva),\n h = _hsvaToHsla2.h,\n s = _hsvaToHsla2.s,\n l = _hsvaToHsla2.l,\n a = _hsvaToHsla2.a;\n return \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + a + \")\";\n};\nexport var hslStringToHsla = str => {\n var _map = (str.match(/\\d+/g) || []).map(Number),\n h = _map[0],\n s = _map[1],\n l = _map[2],\n a = _map[3];\n return {\n h,\n s,\n l,\n a\n };\n};\nexport var hslaStringToHsva = hslString => {\n var matcher = /hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n var match = matcher.exec(hslString);\n if (!match) return {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n return hslaToHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n l: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1)\n });\n};\nexport var hslStringToHsva = hslaStringToHsva;\nexport var hslaToHsva = _ref4 => {\n var h = _ref4.h,\n s = _ref4.s,\n l = _ref4.l,\n a = _ref4.a;\n s *= (l < 50 ? l : SV_MAX - l) / SV_MAX;\n return {\n h: h,\n s: s > 0 ? 2 * s / (l + s) * SV_MAX : 0,\n v: l + s,\n a\n };\n};\nexport var hsvaToHsla = _ref5 => {\n var h = _ref5.h,\n s = _ref5.s,\n v = _ref5.v,\n a = _ref5.a;\n var hh = (200 - s) * v / SV_MAX;\n return {\n h,\n s: hh > 0 && hh < 200 ? s * v / SV_MAX / (hh <= SV_MAX ? hh : 200 - hh) * SV_MAX : 0,\n l: hh / 2,\n a\n };\n};\nexport var hsvaStringToHsva = hsvString => {\n var matcher = /hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n var match = matcher.exec(hsvString);\n if (!match) return {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n return {\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n v: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? SV_MAX : 1)\n };\n};\n\n/**\n * Valid CSS <angle> units.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/angle\n */\nvar angleUnits = {\n grad: HUE_MAX / 400,\n turn: HUE_MAX,\n rad: HUE_MAX / (Math.PI * 2)\n};\nexport var parseHue = function parseHue(value, unit) {\n if (unit === void 0) {\n unit = 'deg';\n }\n return Number(value) * (angleUnits[unit] || 1);\n};\nexport var hsvStringToHsva = hsvaStringToHsva;\nexport var rgbaStringToHsva = rgbaString => {\n var matcher = /rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n var match = matcher.exec(rgbaString);\n if (!match) return {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n return rgbaToHsva({\n r: Number(match[1]) / (match[2] ? SV_MAX / RGB_MAX : 1),\n g: Number(match[3]) / (match[4] ? SV_MAX / RGB_MAX : 1),\n b: Number(match[5]) / (match[6] ? SV_MAX / RGB_MAX : 1),\n a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? SV_MAX : 1)\n });\n};\nexport var rgbStringToHsva = rgbaStringToHsva;\n\n/** Converts an RGBA color plus alpha transparency to hex */\nexport var rgbaToHex = _ref6 => {\n var r = _ref6.r,\n g = _ref6.g,\n b = _ref6.b;\n return rgbToHex({\n r,\n g,\n b\n });\n};\nexport var rgbToHex = _ref7 => {\n var r = _ref7.r,\n g = _ref7.g,\n b = _ref7.b;\n var bin = r << 16 | g << 8 | b;\n return \"#\" + (h => new Array(7 - h.length).join('0') + h)(bin.toString(16));\n};\nexport var rgbaToHexa = _ref8 => {\n var r = _ref8.r,\n g = _ref8.g,\n b = _ref8.b,\n a = _ref8.a;\n var alpha = typeof a === 'number' && (a * 255 | 1 << 8).toString(16).slice(1);\n return \"\" + rgbToHex({\n r,\n g,\n b\n }) + (alpha ? alpha : '');\n};\nexport var hexToHsva = hex => rgbaToHsva(hexToRgba(hex));\nexport var hexToRgba = hex => {\n var htemp = hex.replace('#', '');\n if (/^#?/.test(hex) && htemp.length === 3) {\n hex = \"#\" + htemp.charAt(0) + htemp.charAt(0) + htemp.charAt(1) + htemp.charAt(1) + htemp.charAt(2) + htemp.charAt(2);\n }\n var reg = new RegExp(\"[A-Za-z0-9]{2}\", 'g');\n var _map2 = hex.match(reg).map(v => parseInt(v, 16)),\n r = _map2[0],\n g = _map2[1],\n _map2$ = _map2[2],\n b = _map2$ === void 0 ? 0 : _map2$,\n a = _map2[3];\n return {\n r,\n g,\n b,\n a: (a != null ? a : 255) / RGB_MAX\n };\n};\n\n/**\n * Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n * @param color HSVA color as an array [0-360, 0-1, 0-1, 0-1]\n */\nexport var hsvaToRgba = _ref9 => {\n var h = _ref9.h,\n s = _ref9.s,\n v = _ref9.v,\n a = _ref9.a;\n var _h = h / 60,\n _s = s / SV_MAX,\n _v = v / SV_MAX,\n hi = Math.floor(_h) % 6;\n var f = _h - Math.floor(_h),\n _p = RGB_MAX * _v * (1 - _s),\n _q = RGB_MAX * _v * (1 - _s * f),\n _t = RGB_MAX * _v * (1 - _s * (1 - f));\n _v *= RGB_MAX;\n var rgba = {};\n switch (hi) {\n case 0:\n rgba.r = _v;\n rgba.g = _t;\n rgba.b = _p;\n break;\n case 1:\n rgba.r = _q;\n rgba.g = _v;\n rgba.b = _p;\n break;\n case 2:\n rgba.r = _p;\n rgba.g = _v;\n rgba.b = _t;\n break;\n case 3:\n rgba.r = _p;\n rgba.g = _q;\n rgba.b = _v;\n break;\n case 4:\n rgba.r = _t;\n rgba.g = _p;\n rgba.b = _v;\n break;\n case 5:\n rgba.r = _v;\n rgba.g = _p;\n rgba.b = _q;\n break;\n }\n rgba.r = Math.round(rgba.r);\n rgba.g = Math.round(rgba.g);\n rgba.b = Math.round(rgba.b);\n return _extends({}, rgba, {\n a\n });\n};\nexport var hsvaToRgbString = hsva => {\n var _hsvaToRgba = hsvaToRgba(hsva),\n r = _hsvaToRgba.r,\n g = _hsvaToRgba.g,\n b = _hsvaToRgba.b;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n};\nexport var hsvaToRgbaString = hsva => {\n var _hsvaToRgba2 = hsvaToRgba(hsva),\n r = _hsvaToRgba2.r,\n g = _hsvaToRgba2.g,\n b = _hsvaToRgba2.b,\n a = _hsvaToRgba2.a;\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + a + \")\";\n};\nexport var rgbaToRgb = _ref0 => {\n var r = _ref0.r,\n g = _ref0.g,\n b = _ref0.b;\n return {\n r,\n g,\n b\n };\n};\nexport var hslaToHsl = _ref1 => {\n var h = _ref1.h,\n s = _ref1.s,\n l = _ref1.l;\n return {\n h,\n s,\n l\n };\n};\nexport var hsvaToHex = hsva => rgbToHex(hsvaToRgba(hsva));\nexport var hsvaToHexa = hsva => rgbaToHexa(hsvaToRgba(hsva));\nexport var hsvaToHsv = _ref10 => {\n var h = _ref10.h,\n s = _ref10.s,\n v = _ref10.v;\n return {\n h,\n s,\n v\n };\n};\nexport var hexToXY = hex => rgbToXY(rgbaToRgb(hexToRgba(hex)));\nexport var xyToHex = xy => rgbToHex(_extends({}, xyToRgb(xy)));\n\n/**\n * Converts XY to RGB. Based on formula from https://developers.meethue.com/develop/application-design-guidance/color-conversion-formulas-rgb-to-xy-and-back/\n * @param color XY color and brightness as an array [0-1, 0-1, 0-1]\n */\nexport var xyToRgb = _ref11 => {\n var x = _ref11.x,\n y = _ref11.y,\n _ref11$bri = _ref11.bri,\n bri = _ref11$bri === void 0 ? 255 : _ref11$bri;\n var red = x * 3.2406255 + y * -1.537208 + bri * -0.4986286;\n var green = x * -0.9689307 + y * 1.8757561 + bri * 0.0415175;\n var blue = x * 0.0557101 + y * -0.2040211 + bri * 1.0569959;\n var translate = function translate(color) {\n return color <= 0.0031308 ? 12.92 * color : 1.055 * Math.pow(color, 1 / 2.4) - 0.055;\n };\n return {\n r: Math.round(255 * translate(red)),\n g: Math.round(255 * translate(green)),\n b: Math.round(255 * translate(blue))\n };\n};\n\n/**\n * Converts RGB to XY. Based on formula from https://developers.meethue.com/develop/application-design-guidance/color-conversion-formulas-rgb-to-xy-and-back/\n * @param color RGB color as an array [0-255, 0-255, 0-255]\n */\nexport var rgbToXY = _ref12 => {\n var r = _ref12.r,\n g = _ref12.g,\n b = _ref12.b;\n var translateColor = function translateColor(color) {\n return color <= 0.04045 ? color / 12.92 : Math.pow((color + 0.055) / 1.055, 2.4);\n };\n var red = translateColor(r / 255);\n var green = translateColor(g / 255);\n var blue = translateColor(b / 255);\n var xyz = {};\n xyz.x = red * 0.4124 + green * 0.3576 + blue * 0.1805;\n xyz.y = red * 0.2126 + green * 0.7152 + blue * 0.0722;\n xyz.bri = red * 0.0193 + green * 0.1192 + blue * 0.9505;\n return xyz;\n};\nexport var color = str => {\n var rgb;\n var hsl;\n var hsv;\n var rgba;\n var hsla;\n var hsva;\n var xy;\n var hex;\n var hexa;\n if (typeof str === 'string' && validHex(str)) {\n hsva = hexToHsva(str);\n hex = str;\n } else if (typeof str !== 'string') {\n hsva = str;\n }\n if (hsva) {\n hsv = hsvaToHsv(hsva);\n hsla = hsvaToHsla(hsva);\n rgba = hsvaToRgba(hsva);\n hexa = rgbaToHexa(rgba);\n hex = hsvaToHex(hsva);\n hsl = hslaToHsl(hsla);\n rgb = rgbaToRgb(rgba);\n xy = rgbToXY(rgb);\n }\n return {\n rgb,\n hsl,\n hsv,\n rgba,\n hsla,\n hsva,\n hex,\n hexa,\n xy\n };\n};\nexport var getContrastingColor = str => {\n if (!str) {\n return '#ffffff';\n }\n var col = color(str);\n var yiq = (col.rgb.r * 299 + col.rgb.g * 587 + col.rgb.b * 114) / 1000;\n return yiq >= 128 ? '#000000' : '#ffffff';\n};\nexport var equalColorObjects = (first, second) => {\n if (first === second) return true;\n for (var prop in first) {\n // The following allows for a type-safe calling of this function (first & second have to be HSL, HSV, or RGB)\n // with type-unsafe iterating over object keys. TS does not allow this without an index (`[key: string]: number`)\n // on an object to define how iteration is normally done. To ensure extra keys are not allowed on our types,\n // we must cast our object to unknown (as RGB demands `r` be a key, while `Record<string, x>` does not care if\n // there is or not), and then as a type TS can iterate over.\n if (first[prop] !== second[prop]) return false;\n }\n return true;\n};\nexport var equalColorString = (first, second) => {\n return first.replace(/\\s/g, '') === second.replace(/\\s/g, '');\n};\nexport var equalHex = (first, second) => {\n if (first.toLowerCase() === second.toLowerCase()) return true;\n\n // To compare colors like `#FFF` and `ffffff` we convert them into RGB objects\n return equalColorObjects(hexToRgba(first), hexToRgba(second));\n};\nexport var validHex = hex => /^#?([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"onMove\", \"onDown\"];\nimport React, { useRef, useState, useCallback, useEffect } from 'react';\nimport { isTouch, preventDefaultMove, getRelativePosition, useEventCallback } from \"./utils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport * from \"./utils.js\";\nvar Interactive = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-interactive' : _props$prefixCls,\n className = props.className,\n onMove = props.onMove,\n onDown = props.onDown,\n reset = _objectWithoutPropertiesLoose(props, _excluded);\n var container = useRef(null);\n var hasTouched = useRef(false);\n var _useState = useState(false),\n isDragging = _useState[0],\n setDragging = _useState[1];\n var onMoveCallback = useEventCallback(onMove);\n var onKeyCallback = useEventCallback(onDown);\n\n // Prevent mobile browsers from handling mouse events (conflicting with touch ones).\n // If we detected a touch interaction before, we prefer reacting to touch events only.\n var isValid = event => {\n if (hasTouched.current && !isTouch(event)) return false;\n hasTouched.current = isTouch(event);\n return true;\n };\n var handleMove = useCallback(event => {\n preventDefaultMove(event);\n if (!container.current) return;\n var isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0;\n if (!isDown) {\n setDragging(false);\n return;\n }\n onMoveCallback == null || onMoveCallback(getRelativePosition(container.current, event), event);\n }, [onMoveCallback]);\n var handleMoveEnd = useCallback(() => setDragging(false), []);\n var toggleDocumentEvents = useCallback(state => {\n if (state) {\n window.addEventListener(hasTouched.current ? 'touchmove' : 'mousemove', handleMove);\n window.addEventListener(hasTouched.current ? 'touchend' : 'mouseup', handleMoveEnd);\n } else {\n window.removeEventListener('mousemove', handleMove);\n window.removeEventListener('mouseup', handleMoveEnd);\n window.removeEventListener('touchmove', handleMove);\n window.removeEventListener('touchend', handleMoveEnd);\n }\n }, [handleMove, handleMoveEnd]);\n useEffect(() => {\n toggleDocumentEvents(isDragging);\n return () => {\n toggleDocumentEvents(false);\n };\n }, [isDragging, handleMove, handleMoveEnd, toggleDocumentEvents]);\n var handleMoveStart = useCallback(event => {\n var activeEl = document.activeElement;\n activeEl == null || activeEl.blur();\n preventDefaultMove(event.nativeEvent);\n if (!isValid(event.nativeEvent)) return;\n if (!container.current) return;\n onKeyCallback == null || onKeyCallback(getRelativePosition(container.current, event.nativeEvent), event.nativeEvent);\n setDragging(true);\n }, [onKeyCallback]);\n return /*#__PURE__*/_jsx(\"div\", _extends({}, reset, {\n className: [prefixCls, className || ''].filter(Boolean).join(' '),\n style: _extends({}, reset.style, {\n touchAction: 'none'\n }),\n ref: container,\n tabIndex: 0,\n onMouseDown: handleMoveStart,\n onTouchStart: handleMoveStart\n }));\n});\nInteractive.displayName = 'Interactive';\nexport default Interactive;","import { useRef, useEffect, useCallback } from 'react';\n\n// Saves incoming handler to the ref in order to avoid \"useCallback hell\"\nexport function useEventCallback(handler) {\n var callbackRef = useRef(handler);\n useEffect(() => {\n callbackRef.current = handler;\n });\n return useCallback((value, event) => callbackRef.current && callbackRef.current(value, event), []);\n}\n\n// Check if an event was triggered by touch\nexport var isTouch = event => 'touches' in event;\n\n// Browsers introduced an intervention, making touch events passive by default.\n// This workaround removes `preventDefault` call from the touch handlers.\n// https://github.com/facebook/react/issues/19651\nexport var preventDefaultMove = event => {\n !isTouch(event) && event.preventDefault && event.preventDefault();\n};\n// Clamps a value between an upper and lower bound.\n// We use ternary operators because it makes the minified code\n// 2 times shorter then `Math.min(Math.max(a,b),c)`\nexport var clamp = function clamp(number, min, max) {\n if (min === void 0) {\n min = 0;\n }\n if (max === void 0) {\n max = 1;\n }\n return number > max ? max : number < min ? min : number;\n};\n// Returns a relative position of the pointer inside the node's bounding box\nexport var getRelativePosition = (node, event) => {\n var rect = node.getBoundingClientRect();\n\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\n var pointer = isTouch(event) ? event.touches[0] : event;\n return {\n left: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\n top: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height),\n width: rect.width,\n height: rect.height,\n x: pointer.pageX - (rect.left + window.pageXOffset),\n y: pointer.pageY - (rect.top + window.pageYOffset)\n };\n};","import React, { useMemo } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Pointer = _ref => {\n var className = _ref.className,\n color = _ref.color,\n left = _ref.left,\n top = _ref.top,\n prefixCls = _ref.prefixCls;\n var style = {\n position: 'absolute',\n top,\n left\n };\n var stylePointer = {\n '--saturation-pointer-box-shadow': 'rgb(255 255 255) 0px 0px 0px 1.5px, rgb(0 0 0 / 30%) 0px 0px 1px 1px inset, rgb(0 0 0 / 40%) 0px 0px 1px 2px',\n width: 6,\n height: 6,\n transform: 'translate(-3px, -3px)',\n boxShadow: 'var(--saturation-pointer-box-shadow)',\n borderRadius: '50%',\n backgroundColor: color\n };\n return useMemo(() => /*#__PURE__*/_jsx(\"div\", {\n className: prefixCls + \"-pointer \" + (className || ''),\n style: style,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: prefixCls + \"-fill\",\n style: stylePointer\n })\n }), [top, left, color, className, prefixCls]);\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"hsva\", \"background\", \"bgProps\", \"innerProps\", \"pointerProps\", \"radius\", \"width\", \"height\", \"direction\", \"reverse\", \"style\", \"onChange\", \"pointer\"];\nimport React, { useCallback } from 'react';\nimport { hsvaToHslaString } from '@uiw/color-convert';\nimport Interactive from '@uiw/react-drag-event-interactive';\nimport { Pointer } from \"./Pointer.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport * from \"./Pointer.js\";\nexport var BACKGROUND_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==';\nvar Alpha = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-alpha' : _props$prefixCls,\n className = props.className,\n hsva = props.hsva,\n background = props.background,\n _props$bgProps = props.bgProps,\n bgProps = _props$bgProps === void 0 ? {} : _props$bgProps,\n _props$innerProps = props.innerProps,\n innerProps = _props$innerProps === void 0 ? {} : _props$innerProps,\n _props$pointerProps = props.pointerProps,\n pointerProps = _props$pointerProps === void 0 ? {} : _props$pointerProps,\n _props$radius = props.radius,\n radius = _props$radius === void 0 ? 0 : _props$radius,\n width = props.width,\n _props$height = props.height,\n height = _props$height === void 0 ? 16 : _props$height,\n _props$direction = props.direction,\n direction = _props$direction === void 0 ? 'horizontal' : _props$direction,\n _props$reverse = props.reverse,\n reverse = _props$reverse === void 0 ? false : _props$reverse,\n style = props.style,\n onChange = props.onChange,\n pointer = props.pointer,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var offsetToAlpha = useCallback(offset => {\n var value = direction === 'horizontal' ? offset.left : offset.top;\n if (direction === 'horizontal') {\n return reverse ? 1 - value : value;\n }\n return reverse ? value : 1 - value;\n }, [direction, reverse]);\n var alphaToOffset = useCallback(alpha => {\n if (direction === 'horizontal') {\n return reverse ? 1 - alpha : alpha;\n }\n return reverse ? alpha : 1 - alpha;\n }, [direction, reverse]);\n var handleChange = offset => {\n var alpha = offsetToAlpha(offset);\n onChange && onChange(_extends({}, hsva, {\n a: alpha\n }), offset);\n };\n var colorTo = hsvaToHslaString(Object.assign({}, hsva, {\n a: 1\n }));\n var horizontalGradient = reverse ? \"linear-gradient(to right, \" + colorTo + \" 0%, rgba(244, 67, 54, 0) 100%)\" : \"linear-gradient(to right, rgba(244, 67, 54, 0) 0%, \" + colorTo + \" 100%)\";\n var verticalGradient = reverse ? \"linear-gradient(to bottom, rgba(244, 67, 54, 0) 0%, \" + colorTo + \" 100%)\" : \"linear-gradient(to bottom, \" + colorTo + \" 0%, rgba(244, 67, 54, 0) 100%)\";\n var innerBackground = direction === 'horizontal' ? horizontalGradient : verticalGradient;\n var comProps = {};\n if (direction === 'horizontal') {\n comProps.left = alphaToOffset(hsva.a) * 100 + \"%\";\n } else {\n comProps.top = alphaToOffset(hsva.a) * 100 + \"%\";\n }\n var styleWrapper = _extends({\n '--alpha-background-color': '#fff',\n '--alpha-pointer-background-color': 'rgb(248, 248, 248)',\n '--alpha-pointer-box-shadow': 'rgb(0 0 0 / 37%) 0px 1px 4px 0px',\n borderRadius: radius,\n background: \"url(\" + BACKGROUND_IMG + \") left center\",\n backgroundColor: 'var(--alpha-background-color)'\n }, {\n width,\n height\n }, style, {\n position: 'relative'\n });\n var handleKeyDown = useCallback(event => {\n var step = 0.01; // 1% step\n var currentAlpha = hsva.a;\n var newAlpha = currentAlpha;\n switch (event.key) {\n case 'ArrowLeft':\n if (direction === 'horizontal') {\n newAlpha = reverse ? Math.min(1, currentAlpha + step) : Math.max(0, currentAlpha - step);\n event.preventDefault();\n }\n break;\n case 'ArrowRight':\n if (direction === 'horizontal') {\n newAlpha = reverse ? Math.max(0, currentAlpha - step) : Math.min(1, currentAlpha + step);\n event.preventDefault();\n }\n break;\n case 'ArrowUp':\n if (direction === 'vertical') {\n newAlpha = reverse ? Math.max(0, currentAlpha - step) : Math.min(1, currentAlpha + step);\n event.preventDefault();\n }\n break;\n case 'ArrowDown':\n if (direction === 'vertical') {\n newAlpha = reverse ? Math.min(1, currentAlpha + step) : Math.max(0, currentAlpha - step);\n event.preventDefault();\n }\n break;\n default:\n return;\n }\n if (newAlpha !== currentAlpha) {\n var syntheticAxisOffset = alphaToOffset(newAlpha);\n var syntheticOffset = {\n left: direction === 'horizontal' ? syntheticAxisOffset : hsva.a,\n top: direction === 'vertical' ? syntheticAxisOffset : hsva.a,\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n onChange && onChange(_extends({}, hsva, {\n a: newAlpha\n }), syntheticOffset);\n }\n }, [alphaToOffset, hsva, direction, onChange, reverse]);\n var handleClick = useCallback(event => {\n event.target.focus();\n }, []);\n var pointerElement = pointer && typeof pointer === 'function' ? pointer(_extends({\n prefixCls\n }, pointerProps, comProps)) : /*#__PURE__*/_jsx(Pointer, _extends({}, pointerProps, {\n prefixCls: prefixCls\n }, comProps));\n return /*#__PURE__*/_jsxs(\"div\", _extends({}, other, {\n className: [prefixCls, prefixCls + \"-\" + direction, className || ''].filter(Boolean).join(' '),\n style: styleWrapper,\n ref: ref,\n children: [/*#__PURE__*/_jsx(\"div\", _extends({}, bgProps, {\n style: _extends({\n inset: 0,\n position: 'absolute',\n background: background || innerBackground,\n borderRadius: radius\n }, bgProps.style)\n })), /*#__PURE__*/_jsx(Interactive, _extends({}, innerProps, {\n style: _extends({}, innerProps.style, {\n inset: 0,\n zIndex: 1,\n position: 'absolute',\n outline: 'none'\n }),\n onMove: handleChange,\n onDown: handleChange,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n children: pointerElement\n }))]\n }));\n});\nAlpha.displayName = 'Alpha';\nexport default Alpha;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"className\", \"prefixCls\", \"left\", \"top\", \"style\", \"fillProps\"];\nimport React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Pointer = _ref => {\n var className = _ref.className,\n prefixCls = _ref.prefixCls,\n left = _ref.left,\n top = _ref.top,\n style = _ref.style,\n fillProps = _ref.fillProps,\n reset = _objectWithoutPropertiesLoose(_ref, _excluded);\n var styleWrapper = _extends({}, style, {\n position: 'absolute',\n left,\n top\n });\n var stylePointer = _extends({\n width: 18,\n height: 18,\n boxShadow: 'var(--alpha-pointer-box-shadow)',\n borderRadius: '50%',\n backgroundColor: 'var(--alpha-pointer-background-color)'\n }, fillProps == null ? void 0 : fillProps.style, {\n transform: left ? 'translate(-9px, -1px)' : 'translate(-1px, -9px)'\n });\n return /*#__PURE__*/_jsx(\"div\", _extends({\n className: prefixCls + \"-pointer \" + (className || ''),\n style: styleWrapper\n }, reset, {\n children: /*#__PURE__*/_jsx(\"div\", _extends({\n className: prefixCls + \"-fill\"\n }, fillProps, {\n style: stylePointer\n }))\n }));\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"placement\", \"label\", \"value\", \"className\", \"style\", \"labelStyle\", \"inputStyle\", \"onChange\", \"onBlur\", \"renderInput\"];\nimport React from 'react';\nimport { useRef, useEffect, useState } from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar validHex = hex => /^#?([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);\nvar getNumberValue = value => Number(String(value).replace(/%/g, ''));\nvar EditableInput = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-editable-input' : _props$prefixCls,\n _props$placement = props.placement,\n placement = _props$placement === void 0 ? 'bottom' : _props$placement,\n label = props.label,\n initValue = props.value,\n className = props.className,\n style = props.style,\n labelStyle = props.labelStyle,\n inputStyle = props.inputStyle,\n onChange = props.onChange,\n onBlur = props.onBlur,\n renderInput = props.renderInput,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var _useState = useState(initValue),\n value = _useState[0],\n setValue = _useState[1];\n var isFocus = useRef(false);\n var inputIdRef = useRef(other.id || prefixCls + \"-\" + Math.random().toString(36).slice(2, 11));\n var inputId = other.id || inputIdRef.current;\n useEffect(() => {\n if (props.value !== value) {\n if (!isFocus.current) {\n setValue(props.value);\n }\n }\n }, [props.value]);\n function handleChange(evn, valInit) {\n var value = (valInit || evn.target.value).trim().replace(/^#/, '');\n if (validHex(value)) {\n onChange && onChange(evn, value);\n }\n var val = getNumberValue(value);\n if (!isNaN(val)) {\n onChange && onChange(evn, val);\n }\n setValue(value);\n }\n function handleBlur(evn) {\n isFocus.current = false;\n setValue(props.value);\n onBlur && onBlur(evn);\n }\n var placementStyle = {};\n if (placement === 'bottom') {\n placementStyle['flexDirection'] = 'column';\n }\n if (placement === 'top') {\n placementStyle['flexDirection'] = 'column-reverse';\n }\n if (placement === 'left') {\n placementStyle['flexDirection'] = 'row-reverse';\n }\n var wrapperStyle = _extends({\n '--editable-input-label-color': 'rgb(153, 153, 153)',\n '--editable-input-box-shadow': 'rgb(204 204 204) 0px 0px 0px 1px inset',\n '--editable-input-color': '#666',\n position: 'relative',\n alignItems: 'center',\n display: 'flex',\n fontSize: 11\n }, placementStyle, style);\n var editableStyle = _extends({\n width: '100%',\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: 3,\n paddingRight: 3,\n fontSize: 11,\n background: 'transparent',\n boxSizing: 'border-box',\n border: 'none',\n color: 'var(--editable-input-color)',\n boxShadow: 'var(--editable-input-box-shadow)'\n }, inputStyle);\n var inputProps = _extends({\n value,\n onChange: handleChange,\n onBlur: handleBlur,\n autoComplete: 'off',\n onFocus: () => isFocus.current = true\n }, other, {\n id: inputId,\n style: editableStyle,\n onFocusCapture: e => {\n var elm = e.target;\n elm.setSelectionRange(elm.value.length, elm.value.length);\n }\n });\n return /*#__PURE__*/_jsxs(\"div\", {\n className: [prefixCls, className || ''].filter(Boolean).join(' '),\n style: wrapperStyle,\n children: [renderInput ? renderInput(inputProps, ref) : /*#__PURE__*/_jsx(\"input\", _extends({\n ref: ref\n }, inputProps)), label && /*#__PURE__*/_jsx(\"label\", {\n htmlFor: inputId,\n style: _extends({\n color: 'var(--editable-input-label-color)',\n textTransform: 'capitalize'\n }, labelStyle),\n children: label\n })]\n });\n});\nEditableInput.displayName = 'EditableInput';\nexport default EditableInput;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"hsva\", \"placement\", \"rProps\", \"gProps\", \"bProps\", \"aProps\", \"className\", \"style\", \"onChange\"];\nimport React from 'react';\nimport EditableInput from '@uiw/react-color-editable-input';\nimport { color as handleColor, hsvaToRgba, rgbaToHsva } from '@uiw/color-convert';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar EditableInputRGBA = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-editable-input-rgba' : _props$prefixCls,\n hsva = props.hsva,\n _props$placement = props.placement,\n placement = _props$placement === void 0 ? 'bottom' : _props$placement,\n _props$rProps = props.rProps,\n rProps = _props$rProps === void 0 ? {} : _props$rProps,\n _props$gProps = props.gProps,\n gProps = _props$gProps === void 0 ? {} : _props$gProps,\n _props$bProps = props.bProps,\n bProps = _props$bProps === void 0 ? {} : _props$bProps,\n _props$aProps = props.aProps,\n aProps = _props$aProps === void 0 ? {} : _props$aProps,\n className = props.className,\n style = props.style,\n onChange = props.onChange,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var rgba = hsva ? hsvaToRgba(hsva) : {};\n function handleBlur(evn) {\n var value = Number(evn.target.value);\n if (value && value > 255) {\n evn.target.value = '255';\n }\n if (value && value < 0) {\n evn.target.value = '0';\n }\n }\n var handleAlphaBlur = evn => {\n var value = Number(evn.target.value);\n if (value && value > 100) {\n evn.target.value = '100';\n }\n if (value && value < 0) {\n evn.target.value = '0';\n }\n };\n var handleChange = (value, type, evn) => {\n if (typeof value === 'number') {\n if (type === 'a') {\n if (value < 0) value = 0;\n if (value > 100) value = 100;\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n a: value / 100\n }))));\n }\n if (value > 255) {\n value = 255;\n evn.target.value = '255';\n }\n if (value < 0) {\n value = 0;\n evn.target.value = '0';\n }\n if (type === 'r') {\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n r: value\n }))));\n }\n if (type === 'g') {\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n g: value\n }))));\n }\n if (type === 'b') {\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n b: value\n }))));\n }\n }\n };\n var roundedAlpha = rgba.a ? Math.round(rgba.a * 100) / 100 : 0;\n return /*#__PURE__*/_jsxs(\"div\", _extends({\n ref: ref,\n className: [prefixCls, className || ''].filter(Boolean).join(' ')\n }, other, {\n style: _extends({\n fontSize: 11,\n display: 'flex'\n }, style),\n children: [/*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"R\",\n value: rgba.r || 0,\n onBlur: handleBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'r', evn)\n }, rProps, {\n style: _extends({}, rProps.style)\n })), /*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"G\",\n value: rgba.g || 0,\n onBlur: handleBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'g', evn)\n }, gProps, {\n style: _extends({\n marginLeft: 5\n }, gProps.style)\n })), /*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"B\",\n value: rgba.b || 0,\n onBlur: handleBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'b', evn)\n }, bProps, {\n style: _extends({\n marginLeft: 5\n }, bProps.style)\n })), aProps && /*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"A\",\n value: parseInt(String(roundedAlpha * 100), 10),\n onBlur: handleAlphaBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'a', evn)\n }, aProps, {\n style: _extends({\n marginLeft: 5\n }, aProps.style)\n }))]\n }));\n});\nEditableInputRGBA.displayName = 'EditableInputRGBA';\nexport default EditableInputRGBA;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"hue\", \"onChange\", \"direction\", \"reverse\"];\nimport React, { useCallback, useMemo } from 'react';\nimport Alpha from '@uiw/react-color-alpha';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar NORMAL_COLORS = 'rgb(255, 0, 0) 0%, rgb(255, 255, 0) 17%, rgb(0, 255, 0) 33%, rgb(0, 255, 255) 50%, rgb(0, 0, 255) 67%, rgb(255, 0, 255) 83%, rgb(255, 0, 0) 100%';\nvar REVERSED_COLORS = 'rgb(255, 0, 0) 0%, rgb(255, 0, 255) 17%, rgb(0, 0, 255) 33%, rgb(0, 255, 255) 50%, rgb(0, 255, 0) 67%, rgb(255, 255, 0) 83%, rgb(255, 0, 0) 100%';\nvar Hue = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-hue' : _props$prefixCls,\n className = props.className,\n _props$hue = props.hue,\n hue = _props$hue === void 0 ? 0 : _props$hue,\n _onChange = props.onChange,\n _props$direction = props.direction,\n direction = _props$direction === void 0 ? 'horizontal' : _props$direction,\n _props$reverse = props.reverse,\n reverse = _props$reverse === void 0 ? false : _props$reverse,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var getGradientBackground = useCallback(() => {\n if (direction === 'horizontal') {\n var colors = reverse ? REVERSED_COLORS : NORMAL_COLORS;\n var gradientDirection = 'right';\n return \"linear-gradient(to \" + gradientDirection + \", \" + colors + \")\";\n } else {\n // 垂直模式下,由于交互逻辑使用了 1-value,所以渐变颜色也要反转\n var _colors = reverse ? NORMAL_COLORS : REVERSED_COLORS;\n var _gradientDirection = 'bottom';\n return \"linear-gradient(to \" + _gradientDirection + \", \" + _colors + \")\";\n }\n }, [direction, reverse]);\n var getHueFromInteraction = useCallback(interaction => {\n var value = direction === 'horizontal' ? interaction.left : interaction.top;\n var normalizedValue;\n if (direction === 'horizontal') {\n normalizedValue = reverse ? 1 - value : value;\n } else {\n // 垂直模式下,正常情况下顶部应该是0,底部是360,所以需要反转\n normalizedValue = reverse ? value : 1 - value;\n }\n return 360 * normalizedValue;\n }, [direction, reverse]);\n var gradientBackground = useMemo(() => getGradientBackground(), [getGradientBackground]);\n return /*#__PURE__*/_jsx(Alpha, _extends({\n ref: ref,\n className: prefixCls + \" \" + (className || '')\n }, other, {\n direction: direction,\n reverse: reverse,\n background: gradientBackground,\n hsva: {\n h: hue,\n s: 100,\n v: 100,\n a: hue / 360\n },\n onChange: (_, interaction) => {\n _onChange && _onChange({\n h: getHueFromInteraction(interaction)\n });\n }\n }));\n});\nHue.displayName = 'Hue';\nexport default Hue;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"color\", \"colors\", \"style\", \"rectProps\", \"onChange\", \"addonAfter\", \"addonBefore\", \"rectRender\"];\nimport React, { Fragment } from 'react';\nimport { hexToHsva, color as handleColor } from '@uiw/color-convert';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar Swatch = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-swatch' : _props$prefixCls,\n className = props.className,\n color = props.color,\n _props$colors = props.colors,\n colors = _props$colors === void 0 ? [] : _props$colors,\n style = props.style,\n _props$rectProps = props.rectProps,\n rectProps = _props$rectProps === void 0 ? {} : _props$rectProps,\n onChange = props.onChange,\n addonAfter = props.addonAfter,\n addonBefore = props.addonBefore,\n rectRender = props.rectRender,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var rectStyle = _extends({\n '--swatch-background-color': 'rgb(144, 19, 254)',\n background: 'var(--swatch-background-color)',\n height: 15,\n width: 15,\n marginRight: 5,\n marginBottom: 5,\n cursor: 'pointer',\n position: 'relative',\n outline: 'none',\n borderRadius: 2\n }, rectProps.style);\n var handleClick = (hex, evn) => {\n onChange && onChange(hexToHsva(hex), handleColor(hexToHsva(hex)), evn);\n };\n return /*#__PURE__*/_jsxs(\"div\", _extends({\n ref: ref\n }, other, {\n className: [prefixCls, className || ''].filter(Boolean).join(' '),\n style: _extends({\n display: 'flex',\n flexWrap: 'wrap',\n position: 'relative'\n }, style),\n children: [addonBefore && /*#__PURE__*/React.isValidElement(addonBefore) && addonBefore, colors && Array.isArray(colors) && colors.map((item, idx) => {\n var title = '';\n var background = '';\n if (typeof item === 'string') {\n title = item;\n background = item;\n }\n if (typeof item === 'object' && item.color) {\n title = item.title || item.color;\n background = item.color;\n }\n var checked = color && color.toLocaleLowerCase() === background.toLocaleLowerCase();\n var render = rectRender && rectRender({\n title,\n color: background,\n checked: !!checked,\n style: _extends({}, rectStyle, {\n background\n }),\n onClick: evn => handleClick(background, evn)\n });\n if (render) {\n return /*#__PURE__*/_jsx(Fragment, {\n children: render\n }, idx);\n }\n var child = rectProps.children && /*#__PURE__*/React.isValidElement(rectProps.children) ? /*#__PURE__*/React.cloneElement(rectProps.children, {\n color: background,\n checked\n }) : null;\n return /*#__PURE__*/_jsx(\"div\", _extends({\n tabIndex: 0,\n title: title,\n onClick: evn => handleClick(background, evn)\n }, rectProps, {\n children: child,\n style: _extends({}, rectStyle, {\n background\n })\n }), idx);\n }), addonAfter && /*#__PURE__*/React.isValidElement(addonAfter) && addonAfter]\n }));\n});\nSwatch.displayName = 'Swatch';\nexport default Swatch;","/**\n * Hazo UI Rich Text Editor - Type Definitions\n *\n * Type definitions for the rich text editor component including\n * attachments, variables, and editor output interfaces.\n */\n\n/**\n * Represents a file attachment stored as base64\n */\nexport interface RteAttachment {\n filename: string;\n mime_type: string;\n data: string; // base64 encoded content\n}\n\n/**\n * Represents a template variable that can be inserted into the editor\n */\nexport interface RteVariable {\n name: string;\n description: string;\n}\n\n/**\n * Output structure returned by the editor on change\n */\nexport interface RteOutput {\n html: string;\n plain_text: string;\n attachments: RteAttachment[];\n}\n\n/**\n * Props for the HazoUiRte component\n */\nexport interface HazoUiRteProps {\n // Content (all optional)\n html?: string;\n plain_text?: string;\n attachments?: RteAttachment[];\n\n // Variables for email templates\n variables?: RteVariable[];\n\n // Callback fired when content changes\n on_change?: (output: RteOutput) => void;\n\n // Customization\n placeholder?: string;\n min_height?: string;\n max_height?: string;\n disabled?: boolean;\n className?: string;\n\n // Show output viewer tabs (HTML, Plain Text, Raw HTML)\n show_output_viewer?: boolean;\n}\n\n/**\n * Font family options available in the editor\n */\nexport const FONT_FAMILIES = [\n { label: \"Arial\", value: \"Arial, sans-serif\" },\n { label: \"Verdana\", value: \"Verdana, sans-serif\" },\n { label: \"Times New Roman\", value: \"Times New Roman, serif\" },\n { label: \"Georgia\", value: \"Georgia, serif\" },\n { label: \"Courier New\", value: \"Courier New, monospace\" },\n { label: \"Trebuchet MS\", value: \"Trebuchet MS, sans-serif\" },\n] as const;\n\n/**\n * Font size configuration\n */\nexport const FONT_SIZE_CONFIG = {\n default: 16,\n min: 8,\n max: 72,\n step: 2,\n} as const;\n\n/**\n * Block type options for the paragraph dropdown\n */\nexport const BLOCK_TYPES = [\n { label: \"Paragraph\", value: \"paragraph\", icon: \"paragraph\" },\n { label: \"Heading 1\", value: \"heading-1\", icon: \"h1\" },\n { label: \"Heading 2\", value: \"heading-2\", icon: \"h2\" },\n { label: \"Heading 3\", value: \"heading-3\", icon: \"h3\" },\n { label: \"Numbered List\", value: \"ordered-list\", icon: \"list-ordered\" },\n { label: \"Bulleted List\", value: \"bullet-list\", icon: \"list\" },\n { label: \"Check List\", value: \"task-list\", icon: \"list-checks\" },\n { label: \"Code Block\", value: \"code-block\", icon: \"code\" },\n { label: \"Quote\", value: \"blockquote\", icon: \"quote\" },\n] as const;\n\n/**\n * Text alignment options\n */\nexport const TEXT_ALIGNMENTS = [\n { label: \"Left\", value: \"left\", icon: \"align-left\" },\n { label: \"Center\", value: \"center\", icon: \"align-center\" },\n { label: \"Right\", value: \"right\", icon: \"align-right\" },\n { label: \"Justify\", value: \"justify\", icon: \"align-justify\" },\n] as const;\n","/**\n * Hazo UI Rich Text Editor - Utility Functions\n *\n * Helper functions for file handling, text extraction, and other utilities.\n */\n\nimport type { RteAttachment } from \"./types\";\n\n/**\n * Convert a File object to a base64 encoded string\n */\nexport function file_to_base64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix to get just the base64 content\n const base64 = result.split(\",\")[1];\n resolve(base64);\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Convert a File object to an RteAttachment\n */\nexport async function file_to_attachment(file: File): Promise<RteAttachment> {\n const data = await file_to_base64(file);\n return {\n filename: file.name,\n mime_type: file.type || \"application/octet-stream\",\n data,\n };\n}\n\n/**\n * Convert a File object to a base64 data URL for inline embedding\n */\nexport function file_to_data_url(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Extract plain text from HTML content\n */\nexport function extract_plain_text(html: string): string {\n if (typeof document === \"undefined\") {\n // Server-side fallback - basic tag stripping\n return html\n .replace(/<[^>]*>/g, \"\")\n .replace(/ /g, \" \")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .trim();\n }\n\n // Client-side - use DOM parser\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n return doc.body.textContent || \"\";\n}\n\n/**\n * Generate a unique ID for internal use\n */\nexport function generate_unique_id(): string {\n return `rte_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Debounce function for rate-limiting callbacks\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout_id: ReturnType<typeof setTimeout> | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout_id) {\n clearTimeout(timeout_id);\n }\n timeout_id = setTimeout(() => {\n func(...args);\n }, wait);\n };\n}\n\n/**\n * Format file size for display\n */\nexport function format_file_size(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n}\n\n/**\n * Get file extension from filename\n */\nexport function get_file_extension(filename: string): string {\n const parts = filename.split(\".\");\n return parts.length > 1 ? parts.pop()?.toLowerCase() || \"\" : \"\";\n}\n\n/**\n * Check if a file is an image based on MIME type\n */\nexport function is_image_file(mime_type: string): boolean {\n return mime_type.startsWith(\"image/\");\n}\n\n/**\n * Parse variable syntax {{variable_name}} from text\n */\nexport function parse_variables_from_text(text: string): string[] {\n const regex = /\\{\\{([^}]+)\\}\\}/g;\n const variables: string[] = [];\n let match;\n while ((match = regex.exec(text)) !== null) {\n variables.push(match[1]);\n }\n return variables;\n}\n","\"use client\";\n\n/**\n * RTE Toolbar Component\n *\n * Main toolbar container that orchestrates all formatting controls.\n */\n\nimport * as React from \"react\";\nimport { type Editor } from \"@tiptap/react\";\nimport { cn } from \"../../../lib/utils\";\nimport { TooltipProvider } from \"../../ui/tooltip\";\nimport { ToolbarButton } from \"./toolbar_button\";\nimport {\n LuUndo2,\n LuRedo2,\n LuBold,\n LuItalic,\n LuUnderline,\n LuStrikethrough,\n LuSubscript,\n LuSuperscript,\n LuLink,\n LuRemoveFormatting,\n LuAlignLeft,\n LuAlignCenter,\n LuAlignRight,\n LuAlignJustify,\n LuIndentIncrease,\n LuIndentDecrease,\n LuPalette,\n LuHighlighter,\n LuPlus,\n LuVariable,\n LuPaperclip,\n LuMinus,\n LuImage,\n LuTable,\n LuList,\n LuListOrdered,\n LuListChecks,\n LuTableRowsSplit,\n LuTableColumnsSplit,\n LuTrash2,\n LuGrid3X3,\n} from \"react-icons/lu\";\nimport { RxDividerHorizontal } from \"react-icons/rx\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../ui/select\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../ui/popover\";\nimport { Input } from \"../../ui/input\";\nimport { Button } from \"../../ui/button\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../../ui/command\";\nimport Sketch from \"@uiw/react-color-sketch\";\nimport {\n FONT_FAMILIES,\n FONT_SIZE_CONFIG,\n BLOCK_TYPES,\n type RteVariable,\n type RteAttachment,\n} from \"../types\";\nimport { file_to_attachment, file_to_data_url } from \"../utils\";\n\ninterface ToolbarProps {\n editor: Editor | null;\n variables?: RteVariable[];\n attachments: RteAttachment[];\n on_attachments_change: (attachments: RteAttachment[]) => void;\n disabled?: boolean;\n}\n\n/**\n * Toolbar separator component\n */\nconst ToolbarSeparator = () => (\n <div className=\"cls_rte_toolbar_separator mx-1 h-6 w-px bg-border\" />\n);\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n editor,\n variables = [],\n attachments,\n on_attachments_change,\n disabled = false,\n}) => {\n const [link_url, set_link_url] = React.useState(\"https://\");\n const [link_popover_open, set_link_popover_open] = React.useState(false);\n const [text_color_open, set_text_color_open] = React.useState(false);\n const [highlight_color_open, set_highlight_color_open] = React.useState(false);\n const [variables_menu_open, set_variables_menu_open] = React.useState(false);\n const [table_menu_open, set_table_menu_open] = React.useState(false);\n const [text_color, set_text_color] = React.useState(\"#000000\");\n const [highlight_color, set_highlight_color] = React.useState(\"#ffff00\");\n const [table_rows, set_table_rows] = React.useState(3);\n const [table_cols, set_table_cols] = React.useState(3);\n const [hovered_cell, set_hovered_cell] = React.useState<{ row: number; col: number } | null>(null);\n\n const file_input_ref = React.useRef<HTMLInputElement>(null);\n const image_input_ref = React.useRef<HTMLInputElement>(null);\n\n if (!editor) {\n return null;\n }\n\n // Get current font size\n const get_current_font_size = (): number => {\n const attrs = editor.getAttributes(\"textStyle\");\n return attrs.fontSize || FONT_SIZE_CONFIG.default;\n };\n\n // Get current font family\n const get_current_font_family = (): string => {\n const attrs = editor.getAttributes(\"textStyle\");\n return attrs.fontFamily || FONT_FAMILIES[0].value;\n };\n\n // Get current block type\n const get_current_block_type = (): string => {\n if (editor.isActive(\"heading\", { level: 1 })) return \"heading-1\";\n if (editor.isActive(\"heading\", { level: 2 })) return \"heading-2\";\n if (editor.isActive(\"heading\", { level: 3 })) return \"heading-3\";\n if (editor.isActive(\"bulletList\")) return \"bullet-list\";\n if (editor.isActive(\"orderedList\")) return \"ordered-list\";\n if (editor.isActive(\"taskList\")) return \"task-list\";\n if (editor.isActive(\"codeBlock\")) return \"code-block\";\n if (editor.isActive(\"blockquote\")) return \"blockquote\";\n return \"paragraph\";\n };\n\n // Handle block type change\n const handle_block_type_change = (value: string) => {\n switch (value) {\n case \"paragraph\":\n editor.chain().focus().setParagraph().run();\n break;\n case \"heading-1\":\n editor.chain().focus().toggleHeading({ level: 1 }).run();\n break;\n case \"heading-2\":\n editor.chain().focus().toggleHeading({ level: 2 }).run();\n break;\n case \"heading-3\":\n editor.chain().focus().toggleHeading({ level: 3 }).run();\n break;\n case \"bullet-list\":\n editor.chain().focus().toggleBulletList().run();\n break;\n case \"ordered-list\":\n editor.chain().focus().toggleOrderedList().run();\n break;\n case \"task-list\":\n editor.chain().focus().toggleTaskList().run();\n break;\n case \"code-block\":\n editor.chain().focus().toggleCodeBlock().run();\n break;\n case \"blockquote\":\n editor.chain().focus().toggleBlockquote().run();\n break;\n }\n };\n\n // Handle font family change\n const handle_font_family_change = (value: string) => {\n editor.chain().focus().setFontFamily(value).run();\n };\n\n // Handle font size change\n const handle_font_size_change = (delta: number) => {\n const current = get_current_font_size();\n const new_size = Math.min(\n FONT_SIZE_CONFIG.max,\n Math.max(FONT_SIZE_CONFIG.min, current + delta)\n );\n editor.chain().focus().setFontSizeNum(new_size).run();\n };\n\n // Handle link\n const handle_set_link = () => {\n if (link_url && link_url !== \"https://\") {\n editor.chain().focus().setLink({ href: link_url }).run();\n set_link_url(\"https://\");\n set_link_popover_open(false);\n }\n };\n\n const handle_remove_link = () => {\n editor.chain().focus().unsetLink().run();\n set_link_popover_open(false);\n };\n\n // Handle text color\n const handle_text_color_change = (color: { hex: string }) => {\n set_text_color(color.hex);\n editor.chain().focus().setColor(color.hex).run();\n };\n\n // Handle highlight color\n const handle_highlight_color_change = (color: { hex: string }) => {\n set_highlight_color(color.hex);\n editor.chain().focus().setHighlight({ color: color.hex }).run();\n };\n\n // Handle image insert\n const handle_image_insert = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file && file.type.startsWith(\"image/\")) {\n const data_url = await file_to_data_url(file);\n editor.chain().focus().setImage({ src: data_url }).run();\n }\n if (image_input_ref.current) {\n image_input_ref.current.value = \"\";\n }\n };\n\n // Handle file attach\n const handle_file_attach = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const attachment = await file_to_attachment(file);\n on_attachments_change([...attachments, attachment]);\n }\n if (file_input_ref.current) {\n file_input_ref.current.value = \"\";\n }\n };\n\n // Handle table insert with custom size\n const handle_table_insert = (rows: number, cols: number) => {\n editor\n .chain()\n .focus()\n .insertTable({ rows, cols, withHeaderRow: true })\n .run();\n set_table_menu_open(false);\n set_table_rows(3);\n set_table_cols(3);\n set_hovered_cell(null);\n };\n\n // Handle table row/column operations\n const handle_add_row_before = () => {\n editor.chain().focus().addRowBefore().run();\n };\n\n const handle_add_row_after = () => {\n editor.chain().focus().addRowAfter().run();\n };\n\n const handle_delete_row = () => {\n editor.chain().focus().deleteRow().run();\n };\n\n const handle_add_col_before = () => {\n editor.chain().focus().addColumnBefore().run();\n };\n\n const handle_add_col_after = () => {\n editor.chain().focus().addColumnAfter().run();\n };\n\n const handle_delete_col = () => {\n editor.chain().focus().deleteColumn().run();\n };\n\n const handle_delete_table = () => {\n editor.chain().focus().deleteTable().run();\n };\n\n // Handle horizontal rule\n const handle_hr_insert = () => {\n editor.chain().focus().setHorizontalRule().run();\n };\n\n // Handle variable insert\n const handle_variable_insert = (variable_name: string) => {\n editor.chain().focus().insertVariable(variable_name).run();\n set_variables_menu_open(false);\n };\n\n return (\n <TooltipProvider delayDuration={300}>\n <div\n className={cn(\n \"cls_rte_toolbar\",\n \"flex flex-wrap items-center gap-0.5\",\n \"p-1.5 rounded-t-md\",\n \"bg-muted border-b border-border\",\n disabled && \"opacity-50 pointer-events-none\"\n )}\n >\n {/* Undo/Redo */}\n <ToolbarButton\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().undo()}\n tooltip=\"Undo\"\n >\n <LuUndo2 className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().redo()}\n tooltip=\"Redo\"\n >\n <LuRedo2 className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Block Type Dropdown */}\n <Select value={get_current_block_type()} onValueChange={handle_block_type_change}>\n <SelectTrigger className=\"h-8 w-[130px] text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {BLOCK_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value} className=\"text-xs\">\n {type.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <ToolbarSeparator />\n\n {/* Font Family */}\n <Select value={get_current_font_family()} onValueChange={handle_font_family_change}>\n <SelectTrigger className=\"h-8 w-[120px] text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {FONT_FAMILIES.map((font) => (\n <SelectItem\n key={font.value}\n value={font.value}\n className=\"text-xs\"\n style={{ fontFamily: font.value }}\n >\n {font.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {/* Font Size */}\n <div className=\"flex items-center\">\n <ToolbarButton\n onClick={() => handle_font_size_change(-FONT_SIZE_CONFIG.step)}\n tooltip=\"Decrease font size\"\n >\n <LuMinus className=\"h-3 w-3\" />\n </ToolbarButton>\n <span className=\"w-8 text-center text-xs tabular-nums\">\n {get_current_font_size()}\n </span>\n <ToolbarButton\n onClick={() => handle_font_size_change(FONT_SIZE_CONFIG.step)}\n tooltip=\"Increase font size\"\n >\n <LuPlus className=\"h-3 w-3\" />\n </ToolbarButton>\n </div>\n\n <ToolbarSeparator />\n\n {/* Text Formatting */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n is_active={editor.isActive(\"bold\")}\n tooltip=\"Bold\"\n >\n <LuBold className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n is_active={editor.isActive(\"italic\")}\n tooltip=\"Italic\"\n >\n <LuItalic className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n is_active={editor.isActive(\"underline\")}\n tooltip=\"Underline\"\n >\n <LuUnderline className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n is_active={editor.isActive(\"strike\")}\n tooltip=\"Strikethrough\"\n >\n <LuStrikethrough className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n is_active={editor.isActive(\"subscript\")}\n tooltip=\"Subscript\"\n >\n <LuSubscript className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n is_active={editor.isActive(\"superscript\")}\n tooltip=\"Superscript\"\n >\n <LuSuperscript className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Link */}\n <Popover open={link_popover_open} onOpenChange={set_link_popover_open}>\n <PopoverTrigger asChild>\n <ToolbarButton is_active={editor.isActive(\"link\")} tooltip=\"Link\">\n <LuLink className=\"h-4 w-4\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-80 p-3\">\n <div className=\"flex flex-col gap-2\">\n <Input\n value={link_url}\n onChange={(e) => set_link_url(e.target.value)}\n placeholder=\"https://example.com\"\n className=\"h-8 text-sm\"\n />\n <div className=\"flex gap-2\">\n <Button size=\"sm\" onClick={handle_set_link} className=\"flex-1\">\n {editor.isActive(\"link\") ? \"Update\" : \"Add\"} Link\n </Button>\n {editor.isActive(\"link\") && (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n onClick={handle_remove_link}\n >\n Remove\n </Button>\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n\n {/* Clear Formatting */}\n <ToolbarButton\n onClick={() => editor.chain().focus().unsetAllMarks().clearNodes().run()}\n tooltip=\"Clear formatting\"\n >\n <LuRemoveFormatting className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Text Color */}\n <Popover open={text_color_open} onOpenChange={set_text_color_open}>\n <PopoverTrigger asChild>\n <ToolbarButton tooltip=\"Text color\">\n <div className=\"flex flex-col items-center\">\n <LuPalette className=\"h-4 w-4\" />\n <div\n className=\"h-0.5 w-4 mt-0.5 rounded-full\"\n style={{ backgroundColor: text_color }}\n />\n </div>\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Sketch\n color={text_color}\n onChange={handle_text_color_change}\n presetColors={[\n \"#000000\", \"#434343\", \"#666666\", \"#999999\", \"#cccccc\", \"#ffffff\",\n \"#ff0000\", \"#ff9900\", \"#ffff00\", \"#00ff00\", \"#00ffff\", \"#0000ff\",\n \"#9900ff\", \"#ff00ff\", \"#f4cccc\", \"#fce5cd\", \"#fff2cc\", \"#d9ead3\",\n ]}\n />\n </PopoverContent>\n </Popover>\n\n {/* Highlight Color */}\n <Popover open={highlight_color_open} onOpenChange={set_highlight_color_open}>\n <PopoverTrigger asChild>\n <ToolbarButton tooltip=\"Highlight color\">\n <div className=\"flex flex-col items-center\">\n <LuHighlighter className=\"h-4 w-4\" />\n <div\n className=\"h-0.5 w-4 mt-0.5 rounded-full\"\n style={{ backgroundColor: highlight_color }}\n />\n </div>\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Sketch\n color={highlight_color}\n onChange={handle_highlight_color_change}\n presetColors={[\n \"#ffff00\", \"#00ff00\", \"#00ffff\", \"#ff00ff\", \"#ff0000\", \"#0000ff\",\n \"#fff2cc\", \"#d9ead3\", \"#cfe2f3\", \"#ead1dc\", \"#fce5cd\", \"#d0e0e3\",\n ]}\n />\n </PopoverContent>\n </Popover>\n\n <ToolbarSeparator />\n\n {/* Alignment */}\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"left\").run()}\n is_active={editor.isActive({ textAlign: \"left\" })}\n tooltip=\"Align left\"\n >\n <LuAlignLeft className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"center\").run()}\n is_active={editor.isActive({ textAlign: \"center\" })}\n tooltip=\"Align center\"\n >\n <LuAlignCenter className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"right\").run()}\n is_active={editor.isActive({ textAlign: \"right\" })}\n tooltip=\"Align right\"\n >\n <LuAlignRight className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"justify\").run()}\n is_active={editor.isActive({ textAlign: \"justify\" })}\n tooltip=\"Justify\"\n >\n <LuAlignJustify className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* List Types */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n is_active={editor.isActive(\"bulletList\")}\n tooltip=\"Bullet list\"\n >\n <LuList className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n is_active={editor.isActive(\"orderedList\")}\n tooltip=\"Numbered list\"\n >\n <LuListOrdered className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleTaskList().run()}\n is_active={editor.isActive(\"taskList\")}\n tooltip=\"Checklist\"\n >\n <LuListChecks className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Indent/Outdent */}\n <ToolbarButton\n onClick={() => {\n if (editor.isActive(\"listItem\")) {\n editor.chain().focus().liftListItem(\"listItem\").run();\n } else if (editor.isActive(\"taskItem\")) {\n editor.chain().focus().liftListItem(\"taskItem\").run();\n }\n }}\n disabled={!editor.can().liftListItem(\"listItem\") && !editor.can().liftListItem(\"taskItem\")}\n tooltip=\"Decrease indent\"\n >\n <LuIndentDecrease className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => {\n if (editor.isActive(\"listItem\")) {\n editor.chain().focus().sinkListItem(\"listItem\").run();\n } else if (editor.isActive(\"taskItem\")) {\n editor.chain().focus().sinkListItem(\"taskItem\").run();\n }\n }}\n disabled={!editor.can().sinkListItem(\"listItem\") && !editor.can().sinkListItem(\"taskItem\")}\n tooltip=\"Increase indent\"\n >\n <LuIndentIncrease className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Horizontal Rule */}\n <ToolbarButton\n onClick={handle_hr_insert}\n tooltip=\"Horizontal rule\"\n >\n <RxDividerHorizontal className=\"h-4 w-4\" />\n </ToolbarButton>\n\n {/* Image */}\n <ToolbarButton\n onClick={() => image_input_ref.current?.click()}\n tooltip=\"Insert image\"\n >\n <LuImage className=\"h-4 w-4\" />\n </ToolbarButton>\n\n {/* Table Menu */}\n <Popover open={table_menu_open} onOpenChange={set_table_menu_open}>\n <PopoverTrigger asChild>\n <ToolbarButton\n is_active={editor.isActive(\"table\")}\n tooltip=\"Table\"\n >\n <LuTable className=\"h-4 w-4\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-3\" align=\"start\">\n {editor.isActive(\"table\") ? (\n // Table editing controls when inside a table\n <div className=\"flex flex-col gap-2\">\n <div className=\"text-xs font-medium mb-1\">Table Operations</div>\n <div className=\"grid grid-cols-2 gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_row_before}\n >\n <LuTableRowsSplit className=\"h-3 w-3 mr-1\" />\n Add row above\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_row_after}\n >\n <LuTableRowsSplit className=\"h-3 w-3 mr-1\" />\n Add row below\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_col_before}\n >\n <LuTableColumnsSplit className=\"h-3 w-3 mr-1\" />\n Add col left\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_col_after}\n >\n <LuTableColumnsSplit className=\"h-3 w-3 mr-1\" />\n Add col right\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7 text-destructive hover:text-destructive\"\n onClick={handle_delete_row}\n >\n <LuTrash2 className=\"h-3 w-3 mr-1\" />\n Delete row\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7 text-destructive hover:text-destructive\"\n onClick={handle_delete_col}\n >\n <LuTrash2 className=\"h-3 w-3 mr-1\" />\n Delete col\n </Button>\n </div>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"justify-center text-xs h-7 mt-1\"\n onClick={handle_delete_table}\n >\n <LuTrash2 className=\"h-3 w-3 mr-1\" />\n Delete table\n </Button>\n </div>\n ) : (\n // Table size picker when not in a table\n <div className=\"flex flex-col gap-2\">\n <div className=\"text-xs font-medium mb-1\">Insert Table</div>\n {/* Grid size picker */}\n <div className=\"grid gap-0.5\">\n {Array.from({ length: 6 }).map((_, row_idx) => (\n <div key={row_idx} className=\"flex gap-0.5\">\n {Array.from({ length: 6 }).map((_, col_idx) => (\n <div\n key={col_idx}\n className={cn(\n \"w-5 h-5 border rounded-sm cursor-pointer transition-colors\",\n hovered_cell && row_idx < hovered_cell.row && col_idx < hovered_cell.col\n ? \"bg-primary border-primary\"\n : \"border-border hover:border-primary/50\"\n )}\n onMouseEnter={() => set_hovered_cell({ row: row_idx + 1, col: col_idx + 1 })}\n onMouseLeave={() => set_hovered_cell(null)}\n onClick={() => handle_table_insert(row_idx + 1, col_idx + 1)}\n />\n ))}\n </div>\n ))}\n </div>\n <div className=\"text-xs text-center text-muted-foreground\">\n {hovered_cell ? `${hovered_cell.col} x ${hovered_cell.row}` : \"Select size\"}\n </div>\n <div className=\"border-t pt-2 mt-1\">\n <div className=\"text-xs text-muted-foreground mb-2\">Custom size</div>\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"number\"\n min={1}\n max={20}\n value={table_cols}\n onChange={(e) => set_table_cols(Math.max(1, Math.min(20, parseInt(e.target.value) || 1)))}\n className=\"h-7 w-14 text-xs\"\n />\n <span className=\"text-xs\">x</span>\n <Input\n type=\"number\"\n min={1}\n max={20}\n value={table_rows}\n onChange={(e) => set_table_rows(Math.max(1, Math.min(20, parseInt(e.target.value) || 1)))}\n className=\"h-7 w-14 text-xs\"\n />\n <Button\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => handle_table_insert(table_rows, table_cols)}\n >\n <LuGrid3X3 className=\"h-3 w-3 mr-1\" />\n Insert\n </Button>\n </div>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n\n <ToolbarSeparator />\n\n {/* Variables Menu */}\n {variables.length > 0 && (\n <Popover open={variables_menu_open} onOpenChange={set_variables_menu_open}>\n <PopoverTrigger asChild>\n <ToolbarButton tooltip=\"Insert variable\">\n <LuVariable className=\"h-4 w-4\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-64 p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder=\"Search variables...\" className=\"h-8 text-xs\" />\n <CommandList>\n <CommandEmpty>No variables found.</CommandEmpty>\n <CommandGroup>\n {variables.map((variable) => (\n <CommandItem\n key={variable.name}\n value={variable.name}\n onSelect={() => handle_variable_insert(variable.name)}\n className=\"text-xs\"\n >\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">{`{{${variable.name}}}`}</span>\n {variable.description && (\n <span className=\"text-muted-foreground text-[10px]\">\n {variable.description}\n </span>\n )}\n </div>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )}\n\n {/* File Attach */}\n <ToolbarButton\n onClick={() => file_input_ref.current?.click()}\n tooltip=\"Attach file\"\n >\n <LuPaperclip className=\"h-4 w-4\" />\n </ToolbarButton>\n\n {/* Hidden file inputs */}\n <input\n ref={file_input_ref}\n type=\"file\"\n className=\"hidden\"\n onChange={handle_file_attach}\n />\n <input\n ref={image_input_ref}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handle_image_insert}\n />\n </div>\n </TooltipProvider>\n );\n};\n","\"use client\";\n\n/**\n * Attachments List Component\n *\n * Displays attached files with preview and remove functionality.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"../../ui/button\";\nimport { LuX, LuFile, LuImage, LuFileText, LuFileCode } from \"react-icons/lu\";\nimport type { RteAttachment } from \"../types\";\nimport { format_file_size, get_file_extension, is_image_file } from \"../utils\";\n\ninterface AttachmentsListProps {\n attachments: RteAttachment[];\n on_remove: (index: number) => void;\n disabled?: boolean;\n}\n\n/**\n * Get icon for file type\n */\nconst get_file_icon = (mime_type: string, filename: string) => {\n if (is_image_file(mime_type)) {\n return <LuImage className=\"h-4 w-4\" />;\n }\n\n const ext = get_file_extension(filename);\n if ([\"txt\", \"md\", \"doc\", \"docx\", \"pdf\"].includes(ext)) {\n return <LuFileText className=\"h-4 w-4\" />;\n }\n if ([\"js\", \"ts\", \"jsx\", \"tsx\", \"json\", \"html\", \"css\"].includes(ext)) {\n return <LuFileCode className=\"h-4 w-4\" />;\n }\n\n return <LuFile className=\"h-4 w-4\" />;\n};\n\n/**\n * Calculate base64 file size in bytes\n */\nconst get_base64_size = (base64: string): number => {\n // Remove padding and calculate\n const padding = (base64.match(/=+$/) || [\"\"])[0].length;\n return Math.floor((base64.length * 3) / 4) - padding;\n};\n\nexport const AttachmentsList: React.FC<AttachmentsListProps> = ({\n attachments,\n on_remove,\n disabled = false,\n}) => {\n if (attachments.length === 0) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"cls_rte_attachments\",\n \"flex flex-wrap gap-2 p-2\",\n \"border-t border-border bg-muted/50 rounded-b-md\"\n )}\n >\n {attachments.map((attachment, index) => {\n const size = get_base64_size(attachment.data);\n const is_image = is_image_file(attachment.mime_type);\n\n return (\n <div\n key={`${attachment.filename}-${index}`}\n className={cn(\n \"cls_rte_attachment_item\",\n \"flex items-center gap-2\",\n \"px-2 py-1.5 rounded-md\",\n \"bg-background border border-border\",\n \"text-xs\"\n )}\n >\n {/* Preview thumbnail for images */}\n {is_image ? (\n <img\n src={`data:${attachment.mime_type};base64,${attachment.data}`}\n alt={attachment.filename}\n className=\"h-8 w-8 rounded object-cover\"\n />\n ) : (\n <div className=\"flex h-8 w-8 items-center justify-center rounded bg-muted\">\n {get_file_icon(attachment.mime_type, attachment.filename)}\n </div>\n )}\n\n {/* File info */}\n <div className=\"flex flex-col min-w-0\">\n <span className=\"truncate max-w-[120px] font-medium\">\n {attachment.filename}\n </span>\n <span className=\"text-muted-foreground text-[10px]\">\n {format_file_size(size)}\n </span>\n </div>\n\n {/* Remove button */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5 ml-1\"\n onClick={() => on_remove(index)}\n disabled={disabled}\n >\n <LuX className=\"h-3 w-3\" />\n </Button>\n </div>\n );\n })}\n </div>\n );\n};\n","/**\n * Font Size Extension for Tiptap\n *\n * Custom extension that adds font-size support through the TextStyle mark.\n * Uses setFontSizeNum to avoid conflicts with other font size extensions.\n */\n\nimport { Extension } from \"@tiptap/core\";\nimport \"@tiptap/extension-text-style\";\n\nexport interface FontSizeOptions {\n types: string[];\n default_size: number;\n min_size: number;\n max_size: number;\n step: number;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n fontSizeCustom: {\n /**\n * Set the font size (numeric)\n */\n setFontSizeNum: (size: number) => ReturnType;\n /**\n * Unset the font size\n */\n unsetFontSizeNum: () => ReturnType;\n };\n }\n}\n\nexport const FontSizeExtension = Extension.create<FontSizeOptions>({\n name: \"fontSizeCustom\",\n\n addOptions() {\n return {\n types: [\"textStyle\"],\n default_size: 16,\n min_size: 8,\n max_size: 72,\n step: 2,\n };\n },\n\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n fontSize: {\n default: null,\n parseHTML: (element) => {\n const size = element.style.fontSize?.replace(/['\"px]/g, \"\");\n return size ? parseInt(size, 10) : null;\n },\n renderHTML: (attributes) => {\n if (!attributes.fontSize) {\n return {};\n }\n return {\n style: `font-size: ${attributes.fontSize}px`,\n };\n },\n },\n },\n },\n ];\n },\n\n addCommands() {\n return {\n setFontSizeNum:\n (size: number) =>\n ({ chain }) => {\n const clampedSize = Math.min(\n this.options.max_size,\n Math.max(this.options.min_size, size)\n );\n return chain().setMark(\"textStyle\", { fontSize: clampedSize }).run();\n },\n unsetFontSizeNum:\n () =>\n ({ chain }) => {\n return chain()\n .setMark(\"textStyle\", { fontSize: null })\n .removeEmptyTextStyle()\n .run();\n },\n };\n },\n});\n","/**\n * Variable Extension for Tiptap\n *\n * Custom atomic node extension for template variables.\n * Variables are rendered as non-editable pills and serialize to {{variable_name}}.\n */\n\nimport { Node, mergeAttributes } from \"@tiptap/core\";\nimport { ReactNodeViewRenderer, NodeViewWrapper, type NodeViewProps } from \"@tiptap/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\n\n/**\n * React component for rendering variable pills in the editor\n */\nconst VariablePill: React.FC<NodeViewProps> = ({ node, selected }) => {\n return (\n <NodeViewWrapper as=\"span\" className=\"inline\">\n <span\n className={cn(\n \"cls_rte_variable_pill\",\n \"inline-flex items-center\",\n \"px-2 py-0.5 mx-0.5\",\n \"rounded-full\",\n \"text-sm font-medium\",\n \"bg-primary/10 text-primary\",\n \"border border-primary/20\",\n \"cursor-default select-none\",\n selected && \"ring-2 ring-primary ring-offset-1\"\n )}\n contentEditable={false}\n data-variable={node.attrs.name}\n >\n {`{{${node.attrs.name}}}`}\n </span>\n </NodeViewWrapper>\n );\n};\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n variable: {\n /**\n * Insert a variable node\n */\n insertVariable: (name: string) => ReturnType;\n };\n }\n}\n\nexport const VariableExtension = Node.create({\n name: \"variable\",\n\n group: \"inline\",\n\n inline: true,\n\n // Atomic means the node cannot be split or merged\n atom: true,\n\n // Draggable in the editor\n draggable: true,\n\n // Selectable as a whole unit\n selectable: true,\n\n addAttributes() {\n return {\n name: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-variable\"),\n renderHTML: (attributes) => ({\n \"data-variable\": attributes.name,\n }),\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"span[data-variable]\",\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"span\",\n mergeAttributes(HTMLAttributes, {\n class: \"cls_rte_variable_pill\",\n contenteditable: \"false\",\n }),\n `{{${HTMLAttributes[\"data-variable\"]}}}`,\n ];\n },\n\n renderText({ node }) {\n return `{{${node.attrs.name}}}`;\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(VariablePill);\n },\n\n addCommands() {\n return {\n insertVariable:\n (name: string) =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: { name },\n });\n },\n };\n },\n\n // Keyboard behavior - delete entire node on backspace\n addKeyboardShortcuts() {\n return {\n Backspace: () =>\n this.editor.commands.command(({ tr, state }) => {\n let is_variable = false;\n const { selection } = state;\n const { empty, anchor } = selection;\n\n if (!empty) {\n return false;\n }\n\n state.doc.nodesBetween(anchor - 1, anchor, (node, pos) => {\n if (node.type.name === this.name) {\n is_variable = true;\n tr.insertText(\"\", pos, pos + node.nodeSize);\n return false;\n }\n });\n\n return is_variable;\n }),\n };\n },\n});\n","\"use client\";\n\n/**\n * Tabs component based on Radix UI\n * Provides tabbed interface for content switching\n */\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../../lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","\"use client\";\n\n/**\n * Hazo UI Rich Text Editor Component\n *\n * A comprehensive rich text editor for email template generation with\n * variable insertion support, file attachments, and full formatting controls.\n */\n\nimport * as React from \"react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { TextStyle } from \"@tiptap/extension-text-style\";\nimport FontFamily from \"@tiptap/extension-font-family\";\nimport Underline from \"@tiptap/extension-underline\";\nimport Subscript from \"@tiptap/extension-subscript\";\nimport Superscript from \"@tiptap/extension-superscript\";\nimport Link from \"@tiptap/extension-link\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport Color from \"@tiptap/extension-color\";\nimport Image from \"@tiptap/extension-image\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport HorizontalRule from \"@tiptap/extension-horizontal-rule\";\nimport { Table } from \"@tiptap/extension-table\";\nimport TableRow from \"@tiptap/extension-table-row\";\nimport TableCell from \"@tiptap/extension-table-cell\";\nimport TableHeader from \"@tiptap/extension-table-header\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Toolbar } from \"./toolbar/toolbar\";\nimport { AttachmentsList } from \"./attachments/attachments_list\";\nimport { FontSizeExtension } from \"./extensions/font_size_extension\";\nimport { VariableExtension } from \"./extensions/variable_extension\";\nimport { Tabs, TabsList, TabsTrigger } from \"../ui/tabs\";\nimport type {\n HazoUiRteProps,\n RteOutput,\n RteAttachment,\n RteVariable,\n} from \"./types\";\n\n// Re-export types for external use\nexport type { HazoUiRteProps, RteOutput, RteAttachment, RteVariable };\n\n/**\n * Debounce utility for rate-limiting callbacks\n */\nfunction debounce_fn<T extends RteOutput>(\n func: (output: T) => void,\n wait: number\n): (output: T) => void {\n let timeout_id: ReturnType<typeof setTimeout> | null = null;\n\n return (output: T) => {\n if (timeout_id) {\n clearTimeout(timeout_id);\n }\n timeout_id = setTimeout(() => {\n func(output);\n }, wait);\n };\n}\n\n/**\n * HazoUiRte - Rich Text Editor Component\n */\nexport const HazoUiRte: React.FC<HazoUiRteProps> = ({\n html = \"\",\n attachments: initial_attachments = [],\n variables = [],\n on_change,\n placeholder = \"Start typing...\",\n min_height = \"200px\",\n max_height = \"400px\",\n disabled = false,\n className,\n show_output_viewer = false,\n}) => {\n const [attachments, set_attachments] = React.useState<RteAttachment[]>(\n initial_attachments\n );\n const [active_tab, set_active_tab] = React.useState<\"html\" | \"plain_text\" | \"raw_html\">(\"html\");\n\n // Determine if toolbar should be disabled (view-only modes)\n const is_view_only = active_tab !== \"html\";\n\n // Store latest attachments in a ref for the debounced callback\n const attachments_ref = React.useRef(attachments);\n attachments_ref.current = attachments;\n\n // Create debounced change handler\n const debounced_on_change = React.useMemo(\n () =>\n debounce_fn<RteOutput>((output: RteOutput) => {\n if (on_change) {\n on_change(output);\n }\n }, 300),\n [on_change]\n );\n\n // Initialize the editor\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: {\n levels: [1, 2, 3],\n },\n }),\n TextStyle,\n FontFamily,\n FontSizeExtension,\n Underline,\n Subscript,\n Superscript,\n Link.configure({\n openOnClick: false,\n HTMLAttributes: {\n class: \"cls_rte_link text-primary underline cursor-pointer\",\n },\n }),\n TextAlign.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Highlight.configure({\n multicolor: true,\n }),\n Color,\n Image.configure({\n inline: true,\n allowBase64: true,\n HTMLAttributes: {\n class: \"cls_rte_image max-w-full h-auto rounded\",\n },\n }),\n Placeholder.configure({\n placeholder,\n }),\n HorizontalRule,\n Table.configure({\n resizable: true,\n HTMLAttributes: {\n class: \"cls_rte_table border-collapse w-full\",\n },\n }),\n TableRow,\n TableCell.configure({\n HTMLAttributes: {\n class: \"border border-border p-2\",\n },\n }),\n TableHeader.configure({\n HTMLAttributes: {\n class: \"border border-border p-2 bg-muted font-semibold\",\n },\n }),\n TaskList.configure({\n HTMLAttributes: {\n class: \"cls_rte_task_list list-none pl-0\",\n },\n }),\n TaskItem.configure({\n nested: true,\n HTMLAttributes: {\n class: \"cls_rte_task_item flex items-start gap-2\",\n },\n }),\n VariableExtension,\n ],\n content: html,\n editable: !disabled,\n immediatelyRender: false, // Prevent SSR hydration mismatch in Next.js\n editorProps: {\n attributes: {\n class: cn(\n \"cls_rte_editor\",\n \"prose prose-sm dark:prose-invert max-w-none\",\n \"p-4 focus:outline-none\",\n \"min-h-[inherit] overflow-auto\"\n ),\n style: `min-height: ${min_height}; max-height: ${max_height}`,\n },\n },\n onUpdate: ({ editor }) => {\n const output: RteOutput = {\n html: editor.getHTML(),\n plain_text: editor.getText(),\n attachments: attachments_ref.current,\n };\n debounced_on_change(output);\n },\n });\n\n // Update editor content when html prop changes externally\n React.useEffect(() => {\n if (editor && html !== undefined) {\n const current_html = editor.getHTML();\n // Only update if content is actually different to avoid cursor jumps\n if (html !== current_html && !editor.isFocused) {\n editor.commands.setContent(html, { emitUpdate: false });\n }\n }\n }, [html, editor]);\n\n // Update editor editable state when disabled changes\n React.useEffect(() => {\n if (editor) {\n editor.setEditable(!disabled);\n }\n }, [disabled, editor]);\n\n // Track if attachments were set from props to avoid circular updates\n const attachments_from_props_ref = React.useRef(false);\n const prev_initial_attachments_ref = React.useRef(initial_attachments);\n\n // Sync attachments with initial prop (only if changed externally)\n React.useEffect(() => {\n // Only update if initial_attachments actually changed (not from our own on_change)\n if (JSON.stringify(initial_attachments) !== JSON.stringify(prev_initial_attachments_ref.current)) {\n prev_initial_attachments_ref.current = initial_attachments;\n attachments_from_props_ref.current = true;\n set_attachments(initial_attachments);\n }\n }, [initial_attachments]);\n\n // Notify parent when attachments change (but not if set from props)\n React.useEffect(() => {\n if (attachments_from_props_ref.current) {\n attachments_from_props_ref.current = false;\n return;\n }\n if (editor && on_change) {\n const output: RteOutput = {\n html: editor.getHTML(),\n plain_text: editor.getText(),\n attachments,\n };\n on_change(output);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [attachments]);\n\n // Handle attachment removal\n const handle_remove_attachment = (index: number) => {\n set_attachments((prev) => prev.filter((_, i) => i !== index));\n };\n\n // Handle attachments change from toolbar\n const handle_attachments_change = (new_attachments: RteAttachment[]) => {\n set_attachments(new_attachments);\n };\n\n // Format HTML with indentation for raw view\n const format_html = (html_str: string): string => {\n let formatted = \"\";\n let indent = 0;\n const tags = html_str.split(/(<[^>]+>)/g).filter(Boolean);\n\n for (const tag of tags) {\n if (tag.startsWith(\"</\")) {\n indent = Math.max(0, indent - 1);\n formatted += \" \".repeat(indent) + tag + \"\\n\";\n } else if (tag.startsWith(\"<\") && !tag.startsWith(\"<!\") && !tag.endsWith(\"/>\")) {\n formatted += \" \".repeat(indent) + tag + \"\\n\";\n if (!tag.includes(\"br\") && !tag.includes(\"hr\") && !tag.includes(\"img\")) {\n indent++;\n }\n } else if (tag.startsWith(\"<\")) {\n formatted += \" \".repeat(indent) + tag + \"\\n\";\n } else if (tag.trim()) {\n formatted += \" \".repeat(indent) + tag.trim() + \"\\n\";\n }\n }\n return formatted.trim();\n };\n\n return (\n <div\n className={cn(\n \"cls_rte_container\",\n \"rounded-md border border-input bg-background\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n {/* Toolbar - always visible, disabled in view-only modes */}\n <Toolbar\n editor={editor}\n variables={variables}\n attachments={attachments}\n on_attachments_change={handle_attachments_change}\n disabled={disabled || is_view_only}\n />\n\n {/* View Mode Tabs */}\n {show_output_viewer && editor && (\n <div className=\"cls_rte_tabs border-b border-border px-2 pt-2\">\n <Tabs value={active_tab} onValueChange={(v) => set_active_tab(v as typeof active_tab)}>\n <TabsList className=\"h-9\">\n <TabsTrigger value=\"html\" className=\"text-sm\">HTML</TabsTrigger>\n <TabsTrigger value=\"plain_text\" className=\"text-sm\">Plain Text</TabsTrigger>\n <TabsTrigger value=\"raw_html\" className=\"text-sm\">Raw HTML</TabsTrigger>\n </TabsList>\n </Tabs>\n </div>\n )}\n\n {/* Content Area */}\n <div style={{ minHeight: min_height, maxHeight: max_height }} className=\"overflow-auto\">\n {/* HTML Edit Mode */}\n {active_tab === \"html\" && (\n <EditorContent\n editor={editor}\n className={cn(\n \"cls_rte_content\",\n disabled && \"pointer-events-none\"\n )}\n />\n )}\n\n {/* Plain Text View */}\n {active_tab === \"plain_text\" && (\n <pre className=\"cls_rte_plain_text p-4 text-sm whitespace-pre-wrap font-mono h-full\">\n {editor?.getText() || \"(empty)\"}\n </pre>\n )}\n\n {/* Raw HTML View */}\n {active_tab === \"raw_html\" && (\n <pre className=\"cls_rte_raw_html p-4 text-xs whitespace-pre-wrap font-mono text-muted-foreground h-full\">\n {format_html(editor?.getHTML() || \"\") || \"(empty)\"}\n </pre>\n )}\n </div>\n\n {/* Attachments List */}\n <AttachmentsList\n attachments={attachments}\n on_remove={handle_remove_attachment}\n disabled={disabled}\n />\n </div>\n );\n};\n\nHazoUiRte.displayName = \"HazoUiRte\";\n","/**\n * Command Node Extension for TipTap\n *\n * Custom atomic node extension for command pills (mentions, slash commands, etc.).\n * Commands are rendered as non-editable pills and serialize to prefix + action format.\n */\n\nimport { Node, mergeAttributes } from \"@tiptap/core\";\nimport { ReactNodeViewRenderer, NodeViewWrapper, type NodeViewProps } from \"@tiptap/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { CommandPillProps, PrefixColor } from \"../types\";\n\n/**\n * Generate unique ID for command nodes\n */\nconst generate_command_id = (): string => {\n return `cmd_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n};\n\n/**\n * Get pill variant classes\n */\nconst get_variant_classes = (variant: CommandPillProps[\"variant\"] = \"default\"): string => {\n switch (variant) {\n case \"outline\":\n return \"bg-transparent border-primary/40 text-primary\";\n case \"subtle\":\n return \"bg-muted border-transparent text-muted-foreground\";\n case \"default\":\n default:\n return \"bg-primary/10 text-primary border-primary/20\";\n }\n};\n\n/**\n * Build custom inline styles from PrefixColor\n */\nconst get_custom_color_styles = (\n color_bg?: string,\n color_fg?: string,\n color_border?: string\n): React.CSSProperties => {\n if (!color_bg && !color_fg && !color_border) {\n return {};\n }\n return {\n ...(color_bg && { backgroundColor: color_bg }),\n ...(color_fg && { color: color_fg }),\n ...(color_border && { borderColor: color_border }),\n };\n};\n\n/**\n * Check if custom colors are provided\n */\nconst has_custom_colors = (\n color_bg?: string,\n color_fg?: string,\n color_border?: string\n): boolean => {\n return Boolean(color_bg || color_fg || color_border);\n};\n\n/**\n * React component for rendering command pills in the editor\n */\nconst CommandPillView: React.FC<NodeViewProps> = ({ node, selected, editor }) => {\n const { prefix, action, action_label, id, variant, color_bg, color_fg, color_border } = node.attrs;\n\n const handle_click = () => {\n // Dispatch a custom event that the parent component can listen to\n const event = new CustomEvent(\"command-pill-click\", {\n detail: {\n id,\n prefix,\n action,\n action_label,\n node_pos: editor.state.selection.from - 1,\n },\n bubbles: true,\n });\n document.dispatchEvent(event);\n };\n\n const use_custom_colors = has_custom_colors(color_bg, color_fg, color_border);\n const custom_styles = get_custom_color_styles(color_bg, color_fg, color_border);\n\n return (\n <NodeViewWrapper as=\"span\" className=\"inline\">\n <span\n className={cn(\n \"cls_command_pill\",\n \"inline-flex items-center\",\n \"px-1.5 py-0.5 mx-0.5\",\n \"rounded-md\",\n \"text-sm font-medium\",\n \"border\",\n \"cursor-pointer select-none\",\n \"transition-all duration-150\",\n // Only apply variant classes if no custom colors\n !use_custom_colors && get_variant_classes(variant),\n selected && \"ring-2 ring-ring ring-offset-1\",\n \"hover:opacity-80\"\n )}\n style={custom_styles}\n contentEditable={false}\n data-command-id={id}\n data-command-prefix={prefix}\n data-command-action={action}\n onClick={handle_click}\n >\n <span className={cn(!use_custom_colors && \"text-muted-foreground opacity-70\")} style={use_custom_colors ? { opacity: 0.7 } : undefined}>{prefix}</span>\n <span>{action_label}</span>\n </span>\n </NodeViewWrapper>\n );\n};\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n commandNode: {\n /**\n * Insert a command node\n */\n insertCommand: (attrs: {\n prefix: string;\n action: string;\n action_label: string;\n variant?: \"default\" | \"outline\" | \"subtle\";\n color?: PrefixColor;\n }) => ReturnType;\n /**\n * Update an existing command node by ID\n */\n updateCommand: (\n id: string,\n attrs: { action: string; action_label: string }\n ) => ReturnType;\n };\n }\n}\n\nexport const CommandNodeExtension = Node.create({\n name: \"commandNode\",\n\n group: \"inline\",\n\n inline: true,\n\n // Atomic means the node cannot be split or merged\n atom: true,\n\n // Draggable in the editor\n draggable: true,\n\n // Selectable as a whole unit\n selectable: true,\n\n addAttributes() {\n return {\n id: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-command-id\"),\n renderHTML: (attributes) => ({\n \"data-command-id\": attributes.id,\n }),\n },\n prefix: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"data-command-prefix\"),\n renderHTML: (attributes) => ({\n \"data-command-prefix\": attributes.prefix,\n }),\n },\n action: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"data-command-action\"),\n renderHTML: (attributes) => ({\n \"data-command-action\": attributes.action,\n }),\n },\n action_label: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"data-command-label\"),\n renderHTML: (attributes) => ({\n \"data-command-label\": attributes.action_label,\n }),\n },\n variant: {\n default: \"default\",\n parseHTML: (element) =>\n element.getAttribute(\"data-command-variant\") || \"default\",\n renderHTML: (attributes) => ({\n \"data-command-variant\": attributes.variant,\n }),\n },\n color_bg: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-command-color-bg\"),\n renderHTML: (attributes) => ({\n \"data-command-color-bg\": attributes.color_bg,\n }),\n },\n color_fg: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-command-color-fg\"),\n renderHTML: (attributes) => ({\n \"data-command-color-fg\": attributes.color_fg,\n }),\n },\n color_border: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-command-color-border\"),\n renderHTML: (attributes) => ({\n \"data-command-color-border\": attributes.color_border,\n }),\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"span[data-command-id]\",\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"span\",\n mergeAttributes(HTMLAttributes, {\n class: \"cls_command_pill\",\n contenteditable: \"false\",\n }),\n `${HTMLAttributes[\"data-command-prefix\"]}${HTMLAttributes[\"data-command-label\"]}`,\n ];\n },\n\n // Output format: prefix + action (e.g., \"@user_123\", \"/due_date\")\n renderText({ node }) {\n return `${node.attrs.prefix}${node.attrs.action}`;\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CommandPillView);\n },\n\n addCommands() {\n return {\n insertCommand:\n (attrs) =>\n ({ commands }) => {\n // Extract color from attrs and flatten to individual attributes\n const { color, ...rest_attrs } = attrs;\n return commands.insertContent({\n type: this.name,\n attrs: {\n ...rest_attrs,\n id: generate_command_id(),\n ...(color?.bg && { color_bg: color.bg }),\n ...(color?.fg && { color_fg: color.fg }),\n ...(color?.border && { color_border: color.border }),\n },\n });\n },\n updateCommand:\n (id, attrs) =>\n ({ tr, state }) => {\n let updated = false;\n state.doc.descendants((node, pos) => {\n if (node.type.name === this.name && node.attrs.id === id) {\n tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n ...attrs,\n });\n updated = true;\n return false;\n }\n });\n return updated;\n },\n };\n },\n\n // Keyboard behavior - delete entire node on backspace\n addKeyboardShortcuts() {\n return {\n Backspace: () =>\n this.editor.commands.command(({ tr, state }) => {\n let is_command = false;\n const { selection } = state;\n const { empty, anchor } = selection;\n\n if (!empty) {\n return false;\n }\n\n state.doc.nodesBetween(anchor - 1, anchor, (node, pos) => {\n if (node.type.name === this.name) {\n is_command = true;\n tr.insertText(\"\", pos, pos + node.nodeSize);\n return false;\n }\n });\n\n return is_command;\n }),\n };\n },\n});\n\nexport { generate_command_id };\n","/**\n * Command Suggestion Extension for TipTap\n *\n * Detects prefix characters and triggers the command popover for selection.\n * Works with multiple configurable prefixes (e.g., @, /, #).\n *\n * Each instance uses unique plugin keys to prevent conflicts when multiple\n * editor instances coexist (e.g., in lists during React transitions).\n */\n\nimport { Extension } from \"@tiptap/core\";\nimport Suggestion, { type SuggestionOptions } from \"@tiptap/suggestion\";\nimport { PluginKey } from \"@tiptap/pm/state\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { PrefixConfig, CommandItem, SuggestionState, PrefixColor } from \"../types\";\n\n/**\n * Props for creating the suggestion extension\n */\nexport interface CommandSuggestionConfig {\n /** Prefix configurations */\n prefixes: PrefixConfig[];\n /** Callback when suggestion state changes */\n on_suggestion_change: (state: SuggestionState | null) => void;\n /** Callback to insert a command */\n on_insert_command: (\n command: CommandItem,\n prefix: string,\n range: { from: number; to: number }\n ) => void;\n /**\n * Unique instance identifier for plugin key generation.\n * Prevents \"Adding different instances of a keyed plugin (suggestion$)\" errors\n * when multiple editor instances exist simultaneously.\n */\n instance_id: string;\n}\n\n/**\n * Create a suggestion configuration for a specific prefix\n */\nconst create_suggestion_config = (\n prefix_config: PrefixConfig,\n on_suggestion_change: CommandSuggestionConfig[\"on_suggestion_change\"],\n on_insert_command: CommandSuggestionConfig[\"on_insert_command\"]\n): Partial<SuggestionOptions> => {\n return {\n char: prefix_config.char,\n allowSpaces: false,\n startOfLine: false,\n\n items: ({ query }) => {\n if (!query) return prefix_config.commands;\n\n const lower_query = query.toLowerCase();\n return prefix_config.commands.filter(\n (cmd) =>\n cmd.action_label.toLowerCase().includes(lower_query) ||\n cmd.action.toLowerCase().includes(lower_query) ||\n cmd.action_description?.toLowerCase().includes(lower_query)\n );\n },\n\n render: () => {\n return {\n onStart: (props) => {\n // Defer React state update to avoid flushSync error during TipTap's render cycle\n queueMicrotask(() => {\n on_suggestion_change({\n is_active: true,\n query: props.query,\n prefix: prefix_config.char,\n client_rect: props.clientRect as () => DOMRect | null,\n commands: prefix_config.commands,\n range: props.range,\n });\n });\n },\n\n onUpdate: (props) => {\n // Defer React state update to avoid flushSync error during TipTap's render cycle\n queueMicrotask(() => {\n on_suggestion_change({\n is_active: true,\n query: props.query,\n prefix: prefix_config.char,\n client_rect: props.clientRect as () => DOMRect | null,\n commands: prefix_config.commands,\n range: props.range,\n });\n });\n },\n\n onKeyDown: (props) => {\n if (props.event.key === \"Escape\") {\n queueMicrotask(() => {\n on_suggestion_change(null);\n });\n return true;\n }\n // Let the popover handle arrow keys and enter\n if (\n props.event.key === \"ArrowUp\" ||\n props.event.key === \"ArrowDown\" ||\n props.event.key === \"Enter\"\n ) {\n return true;\n }\n return false;\n },\n\n onExit: () => {\n // Defer React state update to avoid flushSync error during TipTap's render cycle\n queueMicrotask(() => {\n on_suggestion_change(null);\n });\n },\n };\n },\n\n command: ({ range, props }) => {\n const command = props as unknown as CommandItem;\n on_insert_command(command, prefix_config.char, range);\n },\n };\n};\n\n/**\n * Create a combined suggestion extension for all configured prefixes\n *\n * Each suggestion plugin receives a unique key based on the instance_id\n * to prevent conflicts when multiple editor instances exist.\n */\nexport const create_command_suggestion_extension = (\n config: CommandSuggestionConfig\n): Extension[] => {\n const { prefixes, on_suggestion_change, on_insert_command, instance_id } = config;\n\n // Create an extension for each prefix with unique plugin keys\n return prefixes.map((prefix_config, index) => {\n // Generate a unique plugin key for this specific instance and prefix\n const plugin_key = new PluginKey(`suggestion_${instance_id}_${prefix_config.char}_${index}`);\n\n return Extension.create({\n name: `commandSuggestion_${instance_id}_${prefix_config.char}_${index}`,\n\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n pluginKey: plugin_key,\n ...create_suggestion_config(\n prefix_config,\n on_suggestion_change,\n on_insert_command\n ),\n }),\n ];\n },\n });\n });\n};\n\n/**\n * Utility to get current suggestion range and delete trigger text\n */\nexport const delete_suggestion_range = (\n editor: Editor,\n range: { from: number; to: number }\n): void => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .run();\n};\n\n/**\n * Utility to insert command at current position\n */\nexport const insert_command_at_position = (\n editor: Editor,\n command: CommandItem,\n prefix: string,\n range: { from: number; to: number },\n variant: \"default\" | \"outline\" | \"subtle\" = \"default\",\n color?: PrefixColor\n): void => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .insertCommand({\n prefix,\n action: command.action,\n action_label: command.action_label,\n variant,\n color,\n })\n .run();\n};\n","/**\n * Command Pill Component\n *\n * Standalone pill component for displaying commands outside the editor.\n * Used in edit popovers and previews.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { CommandPillProps } from \"../types\";\n\n/**\n * Get variant-specific classes for the pill\n */\nconst get_variant_classes = (variant: CommandPillProps[\"variant\"] = \"default\"): string => {\n switch (variant) {\n case \"outline\":\n return \"bg-transparent border-primary/40 text-primary hover:bg-primary/5\";\n case \"subtle\":\n return \"bg-muted border-transparent text-muted-foreground hover:bg-muted/80\";\n case \"default\":\n default:\n return \"bg-primary/10 text-primary border-primary/20 hover:bg-primary/15\";\n }\n};\n\n/**\n * Build custom inline styles from PrefixColor\n */\nconst get_custom_color_styles = (\n color?: CommandPillProps[\"color\"]\n): React.CSSProperties => {\n if (!color) {\n return {};\n }\n return {\n ...(color.bg && { backgroundColor: color.bg }),\n ...(color.fg && { color: color.fg }),\n ...(color.border && { borderColor: color.border }),\n };\n};\n\n/**\n * CommandPill - Displays a command as a styled badge/pill\n */\nexport const CommandPill: React.FC<CommandPillProps> = ({\n prefix,\n action,\n action_label,\n id,\n selected = false,\n variant = \"default\",\n color,\n on_click,\n}) => {\n const use_custom_colors = Boolean(color?.bg || color?.fg || color?.border);\n const custom_styles = get_custom_color_styles(color);\n\n return (\n <span\n className={cn(\n \"cls_command_pill_standalone\",\n \"inline-flex items-center\",\n \"px-1.5 py-0.5\",\n \"rounded-md\",\n \"text-sm font-medium\",\n \"border\",\n \"transition-all duration-150\",\n // Only apply variant classes if no custom colors\n !use_custom_colors && get_variant_classes(variant),\n selected && \"ring-2 ring-ring ring-offset-1\",\n on_click && \"cursor-pointer\"\n )}\n style={custom_styles}\n data-command-id={id}\n data-command-prefix={prefix}\n data-command-action={action}\n onClick={on_click}\n role={on_click ? \"button\" : undefined}\n tabIndex={on_click ? 0 : undefined}\n onKeyDown={(e) => {\n if (on_click && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n on_click();\n }\n }}\n >\n <span className={cn(!use_custom_colors && \"text-muted-foreground opacity-70\")} style={use_custom_colors ? { opacity: 0.7 } : undefined}>{prefix}</span>\n <span>{action_label}</span>\n </span>\n );\n};\n\nCommandPill.displayName = \"CommandPill\";\n\nexport default CommandPill;\n","/**\n * Command Popover Component\n *\n * Dropdown menu for searching and selecting commands.\n * Supports keyboard navigation and command grouping.\n *\n * Rendered via React Portal to document.body to escape parent stacking\n * contexts and ensure the dropdown floats above all page content.\n *\n * Note: The query filtering is handled by TipTap's suggestion extension,\n * so typing continues in the editor and filters the list automatically.\n */\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n Command,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n} from \"../../ui/command\";\nimport type { CommandItem as CommandItemType, CommandPopoverProps } from \"../types\";\n\n/**\n * Group commands by their group property\n */\nconst group_commands = (commands: CommandItemType[]): Map<string, CommandItemType[]> => {\n const groups = new Map<string, CommandItemType[]>();\n\n for (const cmd of commands) {\n const group_name = cmd.group || \"\";\n if (!groups.has(group_name)) {\n groups.set(group_name, []);\n }\n groups.get(group_name)!.push(cmd);\n }\n\n return groups;\n};\n\n/**\n * CommandPopover - Dropdown for command selection\n */\nexport const CommandPopover: React.FC<CommandPopoverProps> = ({\n is_open,\n commands,\n prefix,\n query,\n selected_index,\n position,\n on_select,\n on_close,\n on_selection_change: _on_selection_change,\n prefix_color,\n}) => {\n const container_ref = React.useRef<HTMLDivElement>(null);\n\n // Grouped commands for display\n const grouped_commands = React.useMemo(\n () => group_commands(commands),\n [commands]\n );\n\n // Close on click outside\n React.useEffect(() => {\n const handle_click_outside = (e: MouseEvent) => {\n if (\n container_ref.current &&\n !container_ref.current.contains(e.target as Node)\n ) {\n on_close();\n }\n };\n\n if (is_open) {\n document.addEventListener(\"mousedown\", handle_click_outside);\n return () => {\n document.removeEventListener(\"mousedown\", handle_click_outside);\n };\n }\n }, [is_open, on_close]);\n\n // Track if we're in a browser environment for SSR compatibility\n const [mounted, set_mounted] = React.useState(false);\n\n React.useEffect(() => {\n set_mounted(true);\n }, []);\n\n if (!is_open || !mounted) return null;\n\n const popover_content = (\n <div\n ref={container_ref}\n className={cn(\n \"cls_command_popover\",\n \"fixed\",\n \"w-64 min-w-[200px] max-w-[300px]\",\n \"rounded-md border bg-popover text-popover-foreground shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\"\n )}\n style={{\n position: \"fixed\",\n top: position.top,\n left: position.left,\n zIndex: 9999,\n // Fallback background for consuming apps that may use hex CSS variables\n // (Tailwind's bg-popover generates hsl(var(--popover)) which fails with hex values)\n backgroundColor: \"var(--popover, hsl(0 0% 100%))\",\n color: \"var(--popover-foreground, hsl(222.2 84% 4.9%))\",\n }}\n >\n <Command className=\"rounded-md\">\n {/* Show query hint if user is typing */}\n {query && (\n <div className=\"px-3 py-2 text-xs text-muted-foreground border-b\">\n Searching: <span className=\"font-medium\">{prefix}{query}</span>\n </div>\n )}\n <CommandList className=\"max-h-[200px]\">\n {commands.length === 0 && (\n <CommandEmpty>No commands found.</CommandEmpty>\n )}\n {Array.from(grouped_commands.entries()).map(([group_name, group_commands]) => (\n <CommandGroup\n key={group_name || \"default\"}\n heading={group_name || undefined}\n >\n {group_commands.map((cmd, idx) => {\n // Calculate flat index for this command\n let flat_idx = 0;\n for (const [g, cmds] of grouped_commands.entries()) {\n if (g === group_name) {\n flat_idx += idx;\n break;\n }\n flat_idx += cmds.length;\n }\n\n return (\n <CommandItem\n key={cmd.action}\n value={cmd.action}\n onSelect={() => on_select(cmd)}\n selected={flat_idx === selected_index}\n >\n <div className=\"flex items-center gap-2 w-full\">\n {/* Color indicator dot when prefix has custom color */}\n {prefix_color && (prefix_color.bg || prefix_color.fg) && (\n <span\n className=\"flex-shrink-0 w-2 h-2 rounded-full\"\n style={{\n backgroundColor: prefix_color.bg || prefix_color.fg,\n border: prefix_color.border ? `1px solid ${prefix_color.border}` : undefined,\n }}\n />\n )}\n {cmd.icon && (\n <span className=\"flex-shrink-0 text-muted-foreground\">\n {cmd.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">\n {prefix}\n {cmd.action_label}\n </div>\n {cmd.action_description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {cmd.action_description}\n </div>\n )}\n </div>\n </div>\n </CommandItem>\n );\n })}\n </CommandGroup>\n ))}\n </CommandList>\n </Command>\n </div>\n );\n\n // Render via portal to escape parent stacking contexts\n return createPortal(popover_content, document.body);\n};\n\nCommandPopover.displayName = \"CommandPopover\";\n\nexport default CommandPopover;\n","/**\n * HazoUiCommand - Headless Command/Mention System\n *\n * Provides TipTap extensions and UI components for implementing\n * command pills with prefix triggers (e.g., @mentions, /commands, #tags).\n *\n * This module exports:\n * - CommandNodeExtension: TipTap node for rendering command pills\n * - CommandPill: Standalone pill component\n * - CommandPopover: Dropdown menu for command selection\n * - create_command_suggestion_extension: Factory for prefix detection\n * - Types for building custom command UIs\n */\n\n// Types\nexport type {\n CommandItem,\n PrefixConfig,\n PrefixColor,\n InsertedCommand,\n CommandTextOutput,\n CommandPopoverProps,\n CommandPillProps,\n SuggestionState,\n BaseCommandInputProps,\n HazoUiTextboxProps,\n HazoUiTextareaProps,\n CommandEditContext,\n} from \"./types\";\n\n// TipTap Extensions\nexport {\n CommandNodeExtension,\n generate_command_id,\n} from \"./extensions/command_node_extension\";\n\nexport {\n create_command_suggestion_extension,\n delete_suggestion_range,\n insert_command_at_position,\n type CommandSuggestionConfig,\n} from \"./extensions/command_suggestion\";\n\n// UI Components\nexport { CommandPill } from \"./components/command_pill\";\nexport { CommandPopover } from \"./components/command_popover\";\n\nimport type { PrefixColor } from \"./types\";\n\n/**\n * Extended prefix configuration type for internal parsing\n */\ntype PrefixConfigForParsing = {\n char: string;\n commands: { action: string; action_label: string }[];\n color?: PrefixColor;\n};\n\n/**\n * Utility to parse plain text with commands into structured format\n *\n * @param text - Plain text with prefix + action format (e.g., \"Hello @user_123\")\n * @param prefixes - Prefix configurations to detect\n * @returns Parsed commands with positions\n */\nexport const parse_commands_from_text = (\n text: string,\n prefixes: PrefixConfigForParsing[]\n): { action: string; action_label: string; prefix: string; position: number; length: number; color?: PrefixColor }[] => {\n const result: {\n action: string;\n action_label: string;\n prefix: string;\n position: number;\n length: number;\n color?: PrefixColor;\n }[] = [];\n\n // Build a map of action -> label for quick lookup\n const action_to_label = new Map<string, { label: string; prefix: string; color?: PrefixColor }>();\n for (const prefix_config of prefixes) {\n for (const cmd of prefix_config.commands) {\n action_to_label.set(`${prefix_config.char}${cmd.action}`, {\n label: cmd.action_label,\n prefix: prefix_config.char,\n color: prefix_config.color,\n });\n }\n }\n\n // Build regex pattern for all prefixes\n const prefix_chars = prefixes.map((p) => escape_regex(p.char)).join(\"|\");\n // Match prefix followed by word characters (action)\n const pattern = new RegExp(`(${prefix_chars})(\\\\w+)`, \"g\");\n\n let match;\n while ((match = pattern.exec(text)) !== null) {\n const full_match = match[0];\n const prefix = match[1];\n const action = match[2];\n const lookup_key = `${prefix}${action}`;\n\n const info = action_to_label.get(lookup_key);\n if (info) {\n result.push({\n action,\n action_label: info.label,\n prefix,\n position: match.index,\n length: full_match.length,\n color: info.color,\n });\n }\n }\n\n return result;\n};\n\n/**\n * Escape special regex characters in a string\n */\nconst escape_regex = (str: string): string => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n};\n\n/**\n * Convert parsed commands to TipTap content structure\n *\n * @param text - Plain text with prefix + action format\n * @param prefixes - Prefix configurations\n * @param variant - Pill variant style\n * @returns TipTap JSON content structure\n */\nexport const text_to_tiptap_content = (\n text: string,\n prefixes: PrefixConfigForParsing[],\n variant: \"default\" | \"outline\" | \"subtle\" = \"default\"\n): Record<string, unknown> => {\n const commands = parse_commands_from_text(text, prefixes);\n\n if (commands.length === 0) {\n return {\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n content: text ? [{ type: \"text\", text }] : [],\n },\n ],\n };\n }\n\n // Sort commands by position\n commands.sort((a, b) => a.position - b.position);\n\n // Build content array with text nodes and command nodes\n const content: Record<string, unknown>[] = [];\n let last_end = 0;\n\n for (const cmd of commands) {\n // Add text before this command\n if (cmd.position > last_end) {\n content.push({\n type: \"text\",\n text: text.slice(last_end, cmd.position),\n });\n }\n\n // Add command node with optional color attributes\n content.push({\n type: \"commandNode\",\n attrs: {\n id: `cmd_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n prefix: cmd.prefix,\n action: cmd.action,\n action_label: cmd.action_label,\n variant,\n ...(cmd.color?.bg && { color_bg: cmd.color.bg }),\n ...(cmd.color?.fg && { color_fg: cmd.color.fg }),\n ...(cmd.color?.border && { color_border: cmd.color.border }),\n },\n });\n\n last_end = cmd.position + cmd.length;\n }\n\n // Add remaining text after last command\n if (last_end < text.length) {\n content.push({\n type: \"text\",\n text: text.slice(last_end),\n });\n }\n\n return {\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n content,\n },\n ],\n };\n};\n","import { Node } from '@tiptap/core'\n\n/**\n * The default document node which represents the top level node of the editor.\n * @see https://tiptap.dev/api/nodes/document\n */\nexport const Document = Node.create({\n name: 'doc',\n topNode: true,\n content: 'block+',\n\n renderMarkdown: (node, h) => {\n if (!node.content) {\n return ''\n }\n\n return h.renderChildren(node.content, '\\n\\n')\n },\n})\n","import { Document } from './document.js'\n\nexport * from './document.js'\n\nexport default Document\n","import { mergeAttributes, Node } from '@tiptap/core'\n\nexport interface ParagraphOptions {\n /**\n * The HTML attributes for a paragraph node.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n paragraph: {\n /**\n * Toggle a paragraph\n * @example editor.commands.toggleParagraph()\n */\n setParagraph: () => ReturnType\n }\n }\n}\n\n/**\n * Markdown marker for empty paragraphs to preserve blank lines.\n * Using (non-breaking space HTML entity) ensures the paragraph\n * is not collapsed by markdown parsers while remaining human-readable.\n */\nconst EMPTY_PARAGRAPH_MARKDOWN = ' '\n\n/**\n * Unicode character for non-breaking space (U+00A0).\n * Some markdown parsers may convert entities to this literal character.\n */\nconst NBSP_CHAR = '\\u00A0'\n\n/**\n * This extension allows you to create paragraphs.\n * @see https://www.tiptap.dev/api/nodes/paragraph\n */\nexport const Paragraph = Node.create<ParagraphOptions>({\n name: 'paragraph',\n\n priority: 1000,\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n group: 'block',\n\n content: 'inline*',\n\n parseHTML() {\n return [{ tag: 'p' }]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['p', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n parseMarkdown: (token, helpers) => {\n const tokens = token.tokens || []\n\n // Special case: if paragraph contains only a single image token,\n // unwrap it to avoid nesting block elements incorrectly\n if (tokens.length === 1 && tokens[0].type === 'image') {\n // Parse the image token directly as a block element\n return helpers.parseChildren([tokens[0]])\n }\n\n // Parse the inline tokens\n const content = helpers.parseInline(tokens)\n\n // Special case: if paragraph contains only (non-breaking space),\n // treat it as an empty paragraph to preserve blank lines\n const hasExplicitEmptyParagraphMarker =\n tokens.length === 1 &&\n tokens[0].type === 'text' &&\n (tokens[0].raw === EMPTY_PARAGRAPH_MARKDOWN ||\n tokens[0].text === EMPTY_PARAGRAPH_MARKDOWN ||\n tokens[0].raw === NBSP_CHAR ||\n tokens[0].text === NBSP_CHAR)\n\n if (\n hasExplicitEmptyParagraphMarker &&\n content.length === 1 &&\n content[0].type === 'text' &&\n (content[0].text === EMPTY_PARAGRAPH_MARKDOWN || content[0].text === NBSP_CHAR)\n ) {\n return helpers.createNode('paragraph', undefined, [])\n }\n\n // Convert 'paragraph' token to paragraph node\n return helpers.createNode('paragraph', undefined, content)\n },\n\n renderMarkdown: (node, h, ctx) => {\n if (!node) {\n return ''\n }\n\n // Normalize content: treat undefined/null as empty array\n const content = Array.isArray(node.content) ? node.content : []\n\n if (content.length === 0) {\n // Emit for the second and later empty paragraphs in a consecutive\n // run at the current nesting level. The first empty paragraph stays empty\n // so markdown spacing is preserved naturally.\n const previousContent = Array.isArray(ctx?.previousNode?.content) ? ctx.previousNode.content : []\n const previousNodeIsEmptyParagraph = ctx?.previousNode?.type === 'paragraph' && previousContent.length === 0\n\n return previousNodeIsEmptyParagraph ? EMPTY_PARAGRAPH_MARKDOWN : ''\n }\n\n return h.renderChildren(content)\n },\n\n addCommands() {\n return {\n setParagraph:\n () =>\n ({ commands }) => {\n return commands.setNode(this.name)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-0': () => this.editor.commands.setParagraph(),\n }\n },\n})\n","import { Paragraph } from './paragraph.js'\n\nexport * from './paragraph.js'\n\nexport default Paragraph\n","import { Node } from '@tiptap/core'\n\n/**\n * This extension allows you to create text nodes.\n * @see https://www.tiptap.dev/api/nodes/text\n */\nexport const Text = Node.create({\n name: 'text',\n group: 'inline',\n\n parseMarkdown: token => {\n // Convert 'text' token to text node - text nodes are special as they store text directly\n return {\n type: 'text',\n text: token.text || '',\n }\n },\n\n renderMarkdown: node => node.text || '',\n})\n","import { Text } from './text.js'\n\nexport * from './text.js'\n\nexport default Text\n","\"use client\";\n\n/**\n * HazoUiTextbox - Single-line Input with Command Support\n *\n * A TipTap-based single-line text input that supports prefix-triggered\n * command pills (e.g., @mentions, /commands, #tags).\n */\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport Document from \"@tiptap/extension-document\";\nimport Paragraph from \"@tiptap/extension-paragraph\";\nimport Text from \"@tiptap/extension-text\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n CommandNodeExtension,\n create_command_suggestion_extension,\n insert_command_at_position,\n text_to_tiptap_content,\n} from \"../hazo_ui_command\";\nimport { CommandPopover } from \"../hazo_ui_command/components/command_popover\";\nimport type {\n HazoUiTextboxProps,\n CommandTextOutput,\n SuggestionState,\n CommandItem,\n InsertedCommand,\n CommandEditContext,\n} from \"../hazo_ui_command/types\";\n\n// Re-export types\nexport type { HazoUiTextboxProps, CommandTextOutput } from \"./types\";\n\n/**\n * Custom Document that only allows a single paragraph (single-line)\n */\nconst SingleLineDocument = Document.extend({\n content: \"paragraph\",\n});\n\n/**\n * Extract output from editor\n */\nconst get_editor_output = (\n editor: ReturnType<typeof useEditor>\n): CommandTextOutput => {\n if (!editor) {\n return { plain_text: \"\", display_text: \"\", commands: [] };\n }\n\n const plain_text = editor.getText();\n const commands: InsertedCommand[] = [];\n let display_text = \"\";\n let position = 0;\n\n // Walk through the document to build output\n editor.state.doc.descendants((node, _pos) => {\n if (node.type.name === \"text\") {\n display_text += node.text || \"\";\n position += (node.text || \"\").length;\n } else if (node.type.name === \"commandNode\") {\n const { id, prefix, action, action_label } = node.attrs;\n const cmd_plain_text = `${prefix}${action}`;\n const cmd_display_text = `${prefix}${action_label}`;\n\n commands.push({\n id,\n prefix,\n action,\n action_label,\n position,\n length: cmd_plain_text.length,\n });\n\n display_text += cmd_display_text;\n position += cmd_plain_text.length;\n }\n });\n\n return { plain_text, display_text, commands };\n};\n\n/**\n * HazoUiTextbox Component\n */\nexport const HazoUiTextbox: React.FC<HazoUiTextboxProps> = ({\n value,\n default_value,\n prefixes,\n placeholder = \"Type here...\",\n disabled = false,\n className,\n pill_variant = \"default\",\n instance_id: provided_instance_id,\n on_change,\n on_submit,\n on_command_insert,\n on_command_change,\n on_command_remove,\n}) => {\n // Generate unique instance ID for TipTap plugin keys\n // This prevents \"Adding different instances of a keyed plugin (suggestion$)\" errors\n const generated_instance_id = React.useId();\n const instance_id = provided_instance_id || generated_instance_id;\n\n // Suggestion state for popover\n const [suggestion_state, set_suggestion_state] =\n React.useState<SuggestionState | null>(null);\n const [selected_index, set_selected_index] = React.useState(0);\n const [popover_position, set_popover_position] = React.useState<{ top: number; left: number }>({ top: 0, left: 0 });\n\n // Edit context for pill editing\n const [edit_context, set_edit_context] = React.useState<CommandEditContext | null>(null);\n const [edit_selected_index, set_edit_selected_index] = React.useState(0);\n\n // Refs for tracking state\n const is_controlled = value !== undefined;\n const editor_container_ref = React.useRef<HTMLDivElement>(null);\n const edit_popover_ref = React.useRef<HTMLDivElement>(null);\n\n // Track if we're in a browser environment for SSR compatibility\n const [mounted, set_mounted] = React.useState(false);\n\n React.useEffect(() => {\n set_mounted(true);\n }, []);\n\n // Create suggestion extensions with unique plugin keys per instance\n const suggestion_extensions = React.useMemo(() => {\n return create_command_suggestion_extension({\n prefixes,\n instance_id,\n on_suggestion_change: (state) => {\n set_suggestion_state(state);\n set_selected_index(0);\n },\n on_insert_command: (_command, _prefix, _range) => {\n // This is handled by the popover selection\n },\n });\n }, [prefixes, instance_id]);\n\n // Initialize editor\n const editor = useEditor({\n extensions: [\n SingleLineDocument,\n Paragraph,\n Text,\n Placeholder.configure({\n placeholder,\n }),\n CommandNodeExtension.configure({}),\n ...suggestion_extensions,\n ],\n content: is_controlled\n ? text_to_tiptap_content(value || \"\", prefixes, pill_variant)\n : text_to_tiptap_content(default_value || \"\", prefixes, pill_variant),\n editable: !disabled,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: cn(\n \"cls_textbox_editor\",\n \"w-full outline-none\",\n \"whitespace-nowrap overflow-x-auto\"\n ),\n },\n handleKeyDown: (_view, event) => {\n // Prevent Enter from creating new lines (single-line input)\n if (event.key === \"Enter\" && !suggestion_state?.is_active) {\n event.preventDefault();\n if (on_submit && editor) {\n on_submit(get_editor_output(editor));\n }\n return true;\n }\n return false;\n },\n },\n onUpdate: ({ editor }) => {\n if (on_change) {\n on_change(get_editor_output(editor));\n }\n },\n });\n\n // Update popover position when suggestion state changes\n // Now uses viewport coordinates since popover is rendered via portal\n React.useEffect(() => {\n if (suggestion_state?.is_active && editor) {\n // Use requestAnimationFrame to ensure DOM is updated\n requestAnimationFrame(() => {\n // Get cursor position using TipTap's view.coordsAtPos\n const { from } = suggestion_state.range;\n try {\n const coords = editor.view.coordsAtPos(from);\n if (coords) {\n // Use viewport coordinates directly for fixed positioning\n set_popover_position({\n top: coords.bottom + 4,\n left: coords.left,\n });\n }\n } catch {\n // Fallback to client_rect if coordsAtPos fails\n const rect = suggestion_state.client_rect?.();\n if (rect) {\n set_popover_position({\n top: rect.bottom + 4,\n left: rect.left,\n });\n }\n }\n });\n }\n }, [suggestion_state, editor]);\n\n // Sync controlled value\n React.useEffect(() => {\n if (is_controlled && editor && !editor.isFocused) {\n const current_text = editor.getText();\n if (value !== current_text) {\n const content = text_to_tiptap_content(value || \"\", prefixes, pill_variant);\n editor.commands.setContent(content, { emitUpdate: false });\n }\n }\n }, [value, editor, is_controlled, prefixes, pill_variant]);\n\n // Update editable state\n React.useEffect(() => {\n if (editor) {\n editor.setEditable(!disabled);\n }\n }, [disabled, editor]);\n\n // Handle command selection from popover\n const handle_command_select = React.useCallback(\n (command: CommandItem) => {\n if (!editor || !suggestion_state) return;\n\n // Look up the prefix config to get the color\n const prefix_config = prefixes.find((p) => p.char === suggestion_state.prefix);\n const prefix_color = prefix_config?.color;\n\n insert_command_at_position(\n editor,\n command,\n suggestion_state.prefix,\n suggestion_state.range,\n pill_variant,\n prefix_color\n );\n\n if (on_command_insert) {\n on_command_insert(command, suggestion_state.prefix);\n }\n\n set_suggestion_state(null);\n },\n [editor, suggestion_state, pill_variant, on_command_insert, prefixes]\n );\n\n // Handle popover close\n const handle_popover_close = React.useCallback(() => {\n set_suggestion_state(null);\n editor?.commands.focus();\n }, [editor]);\n\n // Handle edit popover close\n const handle_edit_close = React.useCallback(() => {\n set_edit_context(null);\n editor?.commands.focus();\n }, [editor]);\n\n // Handle command update from edit popover\n const handle_command_update = React.useCallback(\n (new_command: CommandItem) => {\n if (!editor || !edit_context) return;\n\n const old_command = edit_context.command;\n\n // Update the node attributes\n editor.commands.updateCommand(old_command.id, {\n action: new_command.action,\n action_label: new_command.action_label,\n });\n\n // Call the change callback if provided\n if (on_command_change) {\n on_command_change(old_command, new_command);\n }\n\n set_edit_context(null);\n editor.commands.focus();\n },\n [editor, edit_context, on_command_change]\n );\n\n // Handle command removal from edit popover\n const handle_command_remove = React.useCallback(() => {\n if (!editor || !edit_context) return;\n\n const command = edit_context.command;\n\n // Find and delete the node\n editor.state.doc.descendants((node, pos) => {\n if (node.type.name === \"commandNode\" && node.attrs.id === command.id) {\n editor.chain().focus().deleteRange({ from: pos, to: pos + node.nodeSize }).run();\n return false;\n }\n });\n\n // Call the remove callback if provided\n if (on_command_remove) {\n on_command_remove(command);\n }\n\n set_edit_context(null);\n }, [editor, edit_context, on_command_remove]);\n\n // Filter commands based on query\n const filtered_commands = React.useMemo(() => {\n if (!suggestion_state) return [];\n\n const query = suggestion_state.query.toLowerCase();\n if (!query) return suggestion_state.commands;\n\n return suggestion_state.commands.filter(\n (cmd) =>\n cmd.action_label.toLowerCase().includes(query) ||\n cmd.action.toLowerCase().includes(query) ||\n cmd.action_description?.toLowerCase().includes(query)\n );\n }, [suggestion_state]);\n\n // Handle keyboard navigation in popover\n React.useEffect(() => {\n if (!suggestion_state?.is_active) return;\n\n const handle_keydown = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n set_selected_index((prev) =>\n Math.min(prev + 1, filtered_commands.length - 1)\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n set_selected_index((prev) => Math.max(prev - 1, 0));\n break;\n case \"Enter\":\n e.preventDefault();\n if (filtered_commands[selected_index]) {\n handle_command_select(filtered_commands[selected_index]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n handle_popover_close();\n break;\n }\n };\n\n window.addEventListener(\"keydown\", handle_keydown);\n return () => window.removeEventListener(\"keydown\", handle_keydown);\n }, [\n suggestion_state?.is_active,\n filtered_commands,\n selected_index,\n handle_command_select,\n handle_popover_close,\n ]);\n\n // Close edit popover on click outside\n React.useEffect(() => {\n if (!edit_context) return;\n\n const handle_click_outside = (e: MouseEvent) => {\n if (\n edit_popover_ref.current &&\n !edit_popover_ref.current.contains(e.target as Node)\n ) {\n set_edit_context(null);\n }\n };\n\n // Delay to avoid immediate close from the pill click\n const timeout = setTimeout(() => {\n document.addEventListener(\"mousedown\", handle_click_outside);\n }, 100);\n\n return () => {\n clearTimeout(timeout);\n document.removeEventListener(\"mousedown\", handle_click_outside);\n };\n }, [edit_context]);\n\n // Get commands for edit popover\n const edit_commands = React.useMemo(() => {\n if (!edit_context) return [];\n const prefix_config = prefixes.find((p) => p.char === edit_context.command.prefix);\n return prefix_config?.commands || [];\n }, [edit_context, prefixes]);\n\n // Handle keyboard navigation in edit popover\n React.useEffect(() => {\n if (!edit_context) return;\n\n const handle_keydown = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n set_edit_selected_index((prev) =>\n Math.min(prev + 1, edit_commands.length)\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n set_edit_selected_index((prev) => Math.max(prev - 1, 0));\n break;\n case \"Enter\":\n e.preventDefault();\n // Last item is \"Remove\" option\n if (edit_selected_index === edit_commands.length) {\n handle_command_remove();\n } else if (edit_commands[edit_selected_index]) {\n handle_command_update(edit_commands[edit_selected_index]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n handle_edit_close();\n break;\n }\n };\n\n window.addEventListener(\"keydown\", handle_keydown);\n return () => window.removeEventListener(\"keydown\", handle_keydown);\n }, [\n edit_context,\n edit_commands,\n edit_selected_index,\n handle_command_update,\n handle_command_remove,\n handle_edit_close,\n ]);\n\n // Listen for pill click events (for editing)\n React.useEffect(() => {\n const handle_pill_click = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n const { id, prefix, action, action_label, node_pos } = detail;\n\n // Find the pill element to get its position\n if (editor) {\n // Get the position of the clicked pill node\n try {\n const coords = editor.view.coordsAtPos(node_pos);\n if (coords) {\n // Find the current command index in the prefix commands\n const prefix_config = prefixes.find((p) => p.char === prefix);\n const current_index = prefix_config?.commands.findIndex(\n (cmd) => cmd.action === action\n ) ?? 0;\n\n // Use viewport coordinates directly for fixed positioning\n set_edit_context({\n command: {\n id,\n prefix,\n action,\n action_label,\n position: node_pos,\n length: 0,\n },\n node_pos,\n rect: new DOMRect(\n coords.left,\n coords.bottom + 4,\n 0,\n 0\n ),\n });\n set_edit_selected_index(Math.max(0, current_index));\n }\n } catch {\n // Ignore positioning errors\n }\n }\n };\n\n document.addEventListener(\"command-pill-click\", handle_pill_click);\n return () =>\n document.removeEventListener(\"command-pill-click\", handle_pill_click);\n }, [editor, prefixes]);\n\n return (\n <div\n ref={editor_container_ref}\n className={cn(\n \"cls_hazo_ui_textbox\",\n \"relative flex h-10 w-full rounded-md border border-input bg-background px-3 py-2\",\n \"text-sm ring-offset-background\",\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n >\n <EditorContent\n editor={editor}\n className={cn(\n \"cls_textbox_content\",\n \"flex-1 min-w-0\",\n \"[&_.ProseMirror]:outline-none\",\n \"[&_.ProseMirror_p]:m-0\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:text-muted-foreground\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:pointer-events-none\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:float-left\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:h-0\"\n )}\n />\n\n {/* Command Popover */}\n {suggestion_state?.is_active && (\n <CommandPopover\n is_open={true}\n commands={filtered_commands}\n prefix={suggestion_state.prefix}\n query={suggestion_state.query}\n selected_index={selected_index}\n position={popover_position}\n on_query_change={() => {}}\n on_select={handle_command_select}\n on_close={handle_popover_close}\n on_selection_change={set_selected_index}\n prefix_color={prefixes.find((p) => p.char === suggestion_state.prefix)?.color}\n />\n )}\n\n {/* Edit Popover - rendered via portal to escape stacking contexts */}\n {edit_context && mounted && createPortal(\n <div\n ref={edit_popover_ref}\n className={cn(\n \"cls_edit_popover\",\n \"fixed\",\n \"w-64 min-w-[200px] max-w-[300px]\",\n \"rounded-md border bg-popover text-popover-foreground shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\"\n )}\n style={{\n position: \"fixed\",\n top: edit_context.rect.y,\n left: edit_context.rect.x,\n zIndex: 9999,\n }}\n >\n <div className=\"py-1\">\n <div className=\"px-3 py-2 text-xs text-muted-foreground border-b\">\n Change command\n </div>\n <div className=\"max-h-[200px] overflow-y-auto\">\n {edit_commands.map((cmd, idx) => (\n <div\n key={cmd.action}\n className={cn(\n \"px-3 py-2 cursor-pointer flex items-center gap-2\",\n \"hover:bg-accent\",\n idx === edit_selected_index && \"bg-accent\",\n cmd.action === edit_context.command.action && \"font-medium\"\n )}\n onClick={() => handle_command_update(cmd)}\n >\n {cmd.icon && (\n <span className=\"flex-shrink-0 text-muted-foreground\">\n {cmd.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"truncate\">\n {edit_context.command.prefix}\n {cmd.action_label}\n </div>\n {cmd.action_description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {cmd.action_description}\n </div>\n )}\n </div>\n {cmd.action === edit_context.command.action && (\n <span className=\"text-xs text-muted-foreground\">current</span>\n )}\n </div>\n ))}\n {/* Remove option */}\n <div\n className={cn(\n \"px-3 py-2 cursor-pointer flex items-center gap-2 text-destructive border-t\",\n \"hover:bg-destructive/10\",\n edit_selected_index === edit_commands.length && \"bg-destructive/10\"\n )}\n onClick={handle_command_remove}\n >\n <span>Remove</span>\n </div>\n </div>\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n};\n\nHazoUiTextbox.displayName = \"HazoUiTextbox\";\n","import { mergeAttributes, Node } from '@tiptap/core'\n\nexport interface HardBreakOptions {\n /**\n * Controls if marks should be kept after being split by a hard break.\n * @default true\n * @example false\n */\n keepMarks: boolean\n\n /**\n * HTML attributes to add to the hard break element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n hardBreak: {\n /**\n * Add a hard break\n * @example editor.commands.setHardBreak()\n */\n setHardBreak: () => ReturnType\n }\n }\n}\n\n/**\n * This extension allows you to insert hard breaks.\n * @see https://www.tiptap.dev/api/nodes/hard-break\n */\nexport const HardBreak = Node.create<HardBreakOptions>({\n name: 'hardBreak',\n\n markdownTokenName: 'br',\n\n addOptions() {\n return {\n keepMarks: true,\n HTMLAttributes: {},\n }\n },\n\n inline: true,\n\n group: 'inline',\n\n selectable: false,\n\n linebreakReplacement: true,\n\n parseHTML() {\n return [{ tag: 'br' }]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['br', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)]\n },\n\n renderText() {\n return '\\n'\n },\n\n renderMarkdown: () => ` \\n`,\n\n parseMarkdown: () => {\n return {\n type: 'hardBreak',\n }\n },\n\n addCommands() {\n return {\n setHardBreak:\n () =>\n ({ commands, chain, state, editor }) => {\n return commands.first([\n () => commands.exitCode(),\n () =>\n commands.command(() => {\n const { selection, storedMarks } = state\n\n if (selection.$from.parent.type.spec.isolating) {\n return false\n }\n\n const { keepMarks } = this.options\n const { splittableMarks } = editor.extensionManager\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks())\n\n return chain()\n .insertContent({ type: this.name })\n .command(({ tr, dispatch }) => {\n if (dispatch && marks && keepMarks) {\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name))\n\n tr.ensureMarks(filteredMarks)\n }\n\n return true\n })\n .run()\n }),\n ])\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Enter': () => this.editor.commands.setHardBreak(),\n 'Shift-Enter': () => this.editor.commands.setHardBreak(),\n }\n },\n})\n","import { HardBreak } from './hard-break.js'\n\nexport * from './hard-break.js'\n\nexport default HardBreak\n","\"use client\";\n\n/**\n * HazoUiTextarea - Multi-line Input with Command Support\n *\n * A TipTap-based multi-line text input that supports prefix-triggered\n * command pills (e.g., @mentions, /commands, #tags).\n */\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport Document from \"@tiptap/extension-document\";\nimport Paragraph from \"@tiptap/extension-paragraph\";\nimport Text from \"@tiptap/extension-text\";\nimport HardBreak from \"@tiptap/extension-hard-break\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n CommandNodeExtension,\n create_command_suggestion_extension,\n insert_command_at_position,\n text_to_tiptap_content,\n} from \"../hazo_ui_command\";\nimport { CommandPopover } from \"../hazo_ui_command/components/command_popover\";\nimport type {\n HazoUiTextareaProps,\n CommandTextOutput,\n SuggestionState,\n CommandItem,\n InsertedCommand,\n CommandEditContext,\n} from \"../hazo_ui_command/types\";\n\n// Re-export types\nexport type { HazoUiTextareaProps, CommandTextOutput } from \"./types\";\n\n/**\n * Extract output from editor\n */\nconst get_editor_output = (\n editor: ReturnType<typeof useEditor>\n): CommandTextOutput => {\n if (!editor) {\n return { plain_text: \"\", display_text: \"\", commands: [] };\n }\n\n const plain_text = editor.getText();\n const commands: InsertedCommand[] = [];\n let display_text = \"\";\n let position = 0;\n\n // Walk through the document to build output\n editor.state.doc.descendants((node, _pos) => {\n if (node.type.name === \"text\") {\n display_text += node.text || \"\";\n position += (node.text || \"\").length;\n } else if (node.type.name === \"commandNode\") {\n const { id, prefix, action, action_label } = node.attrs;\n const cmd_plain_text = `${prefix}${action}`;\n const cmd_display_text = `${prefix}${action_label}`;\n\n commands.push({\n id,\n prefix,\n action,\n action_label,\n position,\n length: cmd_plain_text.length,\n });\n\n display_text += cmd_display_text;\n position += cmd_plain_text.length;\n } else if (node.type.name === \"hardBreak\") {\n display_text += \"\\n\";\n position += 1;\n }\n });\n\n return { plain_text, display_text, commands };\n};\n\n/**\n * Convert multi-line text to TipTap content\n */\nconst multiline_text_to_tiptap_content = (\n text: string,\n prefixes: { char: string; commands: { action: string; action_label: string }[] }[],\n variant: \"default\" | \"outline\" | \"subtle\" = \"default\"\n): Record<string, unknown> => {\n // Split by newlines and create multiple paragraphs\n const lines = text.split(\"\\n\");\n const paragraphs: Record<string, unknown>[] = [];\n\n for (const line of lines) {\n const line_content = text_to_tiptap_content(line, prefixes, variant);\n const para = (line_content as { content: Record<string, unknown>[] }).content?.[0];\n if (para) {\n paragraphs.push(para);\n } else {\n paragraphs.push({ type: \"paragraph\", content: [] });\n }\n }\n\n return {\n type: \"doc\",\n content: paragraphs.length > 0 ? paragraphs : [{ type: \"paragraph\", content: [] }],\n };\n};\n\n/**\n * HazoUiTextarea Component\n */\nexport const HazoUiTextarea: React.FC<HazoUiTextareaProps> = ({\n value,\n default_value,\n prefixes,\n placeholder = \"Type here...\",\n disabled = false,\n className,\n pill_variant = \"default\",\n min_height = \"80px\",\n max_height = \"200px\",\n rows,\n instance_id: provided_instance_id,\n on_change,\n on_submit,\n on_command_insert,\n on_command_change,\n on_command_remove,\n}) => {\n // Generate unique instance ID for TipTap plugin keys\n // This prevents \"Adding different instances of a keyed plugin (suggestion$)\" errors\n const generated_instance_id = React.useId();\n const instance_id = provided_instance_id || generated_instance_id;\n // Suggestion state for popover\n const [suggestion_state, set_suggestion_state] =\n React.useState<SuggestionState | null>(null);\n const [selected_index, set_selected_index] = React.useState(0);\n const [popover_position, set_popover_position] = React.useState<{ top: number; left: number }>({ top: 0, left: 0 });\n\n // Edit context for pill editing\n const [edit_context, set_edit_context] = React.useState<CommandEditContext | null>(null);\n const [edit_selected_index, set_edit_selected_index] = React.useState(0);\n\n // Refs for tracking state\n const is_controlled = value !== undefined;\n const editor_container_ref = React.useRef<HTMLDivElement>(null);\n const edit_popover_ref = React.useRef<HTMLDivElement>(null);\n\n // Track if we're in a browser environment for SSR compatibility\n const [mounted, set_mounted] = React.useState(false);\n\n React.useEffect(() => {\n set_mounted(true);\n }, []);\n\n // Calculate height from rows if provided\n const calculated_min_height = rows ? `${rows * 1.5}em` : min_height;\n\n // Create suggestion extensions with unique plugin keys per instance\n const suggestion_extensions = React.useMemo(() => {\n return create_command_suggestion_extension({\n prefixes,\n instance_id,\n on_suggestion_change: (state) => {\n set_suggestion_state(state);\n set_selected_index(0);\n },\n on_insert_command: (_command, _prefix, _range) => {\n // This is handled by the popover selection\n },\n });\n }, [prefixes, instance_id]);\n\n // Initialize editor\n const editor = useEditor({\n extensions: [\n Document,\n Paragraph,\n Text,\n HardBreak,\n Placeholder.configure({\n placeholder,\n }),\n CommandNodeExtension.configure({}),\n ...suggestion_extensions,\n ],\n content: is_controlled\n ? multiline_text_to_tiptap_content(value || \"\", prefixes, pill_variant)\n : multiline_text_to_tiptap_content(default_value || \"\", prefixes, pill_variant),\n editable: !disabled,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: cn(\"cls_textarea_editor\", \"w-full outline-none\"),\n style: `min-height: ${calculated_min_height}; max-height: ${max_height}`,\n },\n handleKeyDown: (_view, event) => {\n // Cmd/Ctrl + Enter to submit\n if (\n event.key === \"Enter\" &&\n (event.metaKey || event.ctrlKey) &&\n !suggestion_state?.is_active\n ) {\n event.preventDefault();\n if (on_submit && editor) {\n on_submit(get_editor_output(editor));\n }\n return true;\n }\n return false;\n },\n },\n onUpdate: ({ editor }) => {\n if (on_change) {\n on_change(get_editor_output(editor));\n }\n },\n });\n\n // Update popover position when suggestion state changes\n // Now uses viewport coordinates since popover is rendered via portal\n React.useEffect(() => {\n if (suggestion_state?.is_active && editor) {\n // Use requestAnimationFrame to ensure DOM is updated\n requestAnimationFrame(() => {\n // Get cursor position using TipTap's view.coordsAtPos\n const { from } = suggestion_state.range;\n try {\n const coords = editor.view.coordsAtPos(from);\n if (coords) {\n // Use viewport coordinates directly for fixed positioning\n set_popover_position({\n top: coords.bottom + 4,\n left: coords.left,\n });\n }\n } catch {\n // Fallback to client_rect if coordsAtPos fails\n const rect = suggestion_state.client_rect?.();\n if (rect) {\n set_popover_position({\n top: rect.bottom + 4,\n left: rect.left,\n });\n }\n }\n });\n }\n }, [suggestion_state, editor]);\n\n // Sync controlled value\n React.useEffect(() => {\n if (is_controlled && editor && !editor.isFocused) {\n const current_text = editor.getText();\n if (value !== current_text) {\n const content = multiline_text_to_tiptap_content(\n value || \"\",\n prefixes,\n pill_variant\n );\n editor.commands.setContent(content, { emitUpdate: false });\n }\n }\n }, [value, editor, is_controlled, prefixes, pill_variant]);\n\n // Update editable state\n React.useEffect(() => {\n if (editor) {\n editor.setEditable(!disabled);\n }\n }, [disabled, editor]);\n\n // Handle command selection from popover\n const handle_command_select = React.useCallback(\n (command: CommandItem) => {\n if (!editor || !suggestion_state) return;\n\n // Look up the prefix config to get the color\n const prefix_config = prefixes.find((p) => p.char === suggestion_state.prefix);\n const prefix_color = prefix_config?.color;\n\n insert_command_at_position(\n editor,\n command,\n suggestion_state.prefix,\n suggestion_state.range,\n pill_variant,\n prefix_color\n );\n\n if (on_command_insert) {\n on_command_insert(command, suggestion_state.prefix);\n }\n\n set_suggestion_state(null);\n },\n [editor, suggestion_state, pill_variant, on_command_insert, prefixes]\n );\n\n // Handle popover close\n const handle_popover_close = React.useCallback(() => {\n set_suggestion_state(null);\n editor?.commands.focus();\n }, [editor]);\n\n // Handle edit popover close\n const handle_edit_close = React.useCallback(() => {\n set_edit_context(null);\n editor?.commands.focus();\n }, [editor]);\n\n // Handle command update from edit popover\n const handle_command_update = React.useCallback(\n (new_command: CommandItem) => {\n if (!editor || !edit_context) return;\n\n const old_command = edit_context.command;\n\n // Update the node attributes\n editor.commands.updateCommand(old_command.id, {\n action: new_command.action,\n action_label: new_command.action_label,\n });\n\n // Call the change callback if provided\n if (on_command_change) {\n on_command_change(old_command, new_command);\n }\n\n set_edit_context(null);\n editor.commands.focus();\n },\n [editor, edit_context, on_command_change]\n );\n\n // Handle command removal from edit popover\n const handle_command_remove = React.useCallback(() => {\n if (!editor || !edit_context) return;\n\n const command = edit_context.command;\n\n // Find and delete the node\n editor.state.doc.descendants((node, pos) => {\n if (node.type.name === \"commandNode\" && node.attrs.id === command.id) {\n editor.chain().focus().deleteRange({ from: pos, to: pos + node.nodeSize }).run();\n return false;\n }\n });\n\n // Call the remove callback if provided\n if (on_command_remove) {\n on_command_remove(command);\n }\n\n set_edit_context(null);\n }, [editor, edit_context, on_command_remove]);\n\n // Filter commands based on query\n const filtered_commands = React.useMemo(() => {\n if (!suggestion_state) return [];\n\n const query = suggestion_state.query.toLowerCase();\n if (!query) return suggestion_state.commands;\n\n return suggestion_state.commands.filter(\n (cmd) =>\n cmd.action_label.toLowerCase().includes(query) ||\n cmd.action.toLowerCase().includes(query) ||\n cmd.action_description?.toLowerCase().includes(query)\n );\n }, [suggestion_state]);\n\n // Handle keyboard navigation in popover\n React.useEffect(() => {\n if (!suggestion_state?.is_active) return;\n\n const handle_keydown = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n set_selected_index((prev) =>\n Math.min(prev + 1, filtered_commands.length - 1)\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n set_selected_index((prev) => Math.max(prev - 1, 0));\n break;\n case \"Enter\":\n e.preventDefault();\n if (filtered_commands[selected_index]) {\n handle_command_select(filtered_commands[selected_index]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n handle_popover_close();\n break;\n }\n };\n\n window.addEventListener(\"keydown\", handle_keydown);\n return () => window.removeEventListener(\"keydown\", handle_keydown);\n }, [\n suggestion_state?.is_active,\n filtered_commands,\n selected_index,\n handle_command_select,\n handle_popover_close,\n ]);\n\n // Close edit popover on click outside\n React.useEffect(() => {\n if (!edit_context) return;\n\n const handle_click_outside = (e: MouseEvent) => {\n if (\n edit_popover_ref.current &&\n !edit_popover_ref.current.contains(e.target as Node)\n ) {\n set_edit_context(null);\n }\n };\n\n // Delay to avoid immediate close from the pill click\n const timeout = setTimeout(() => {\n document.addEventListener(\"mousedown\", handle_click_outside);\n }, 100);\n\n return () => {\n clearTimeout(timeout);\n document.removeEventListener(\"mousedown\", handle_click_outside);\n };\n }, [edit_context]);\n\n // Get commands for edit popover\n const edit_commands = React.useMemo(() => {\n if (!edit_context) return [];\n const prefix_config = prefixes.find((p) => p.char === edit_context.command.prefix);\n return prefix_config?.commands || [];\n }, [edit_context, prefixes]);\n\n // Handle keyboard navigation in edit popover\n React.useEffect(() => {\n if (!edit_context) return;\n\n const handle_keydown = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n set_edit_selected_index((prev) =>\n Math.min(prev + 1, edit_commands.length)\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n set_edit_selected_index((prev) => Math.max(prev - 1, 0));\n break;\n case \"Enter\":\n e.preventDefault();\n // Last item is \"Remove\" option\n if (edit_selected_index === edit_commands.length) {\n handle_command_remove();\n } else if (edit_commands[edit_selected_index]) {\n handle_command_update(edit_commands[edit_selected_index]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n handle_edit_close();\n break;\n }\n };\n\n window.addEventListener(\"keydown\", handle_keydown);\n return () => window.removeEventListener(\"keydown\", handle_keydown);\n }, [\n edit_context,\n edit_commands,\n edit_selected_index,\n handle_command_update,\n handle_command_remove,\n handle_edit_close,\n ]);\n\n // Listen for pill click events (for editing)\n React.useEffect(() => {\n const handle_pill_click = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n const { id, prefix, action, action_label, node_pos } = detail;\n\n // Find the pill element to get its position\n if (editor) {\n // Get the position of the clicked pill node\n try {\n const coords = editor.view.coordsAtPos(node_pos);\n if (coords) {\n // Find the current command index in the prefix commands\n const prefix_config = prefixes.find((p) => p.char === prefix);\n const current_index = prefix_config?.commands.findIndex(\n (cmd) => cmd.action === action\n ) ?? 0;\n\n // Use viewport coordinates directly for fixed positioning\n set_edit_context({\n command: {\n id,\n prefix,\n action,\n action_label,\n position: node_pos,\n length: 0,\n },\n node_pos,\n rect: new DOMRect(\n coords.left,\n coords.bottom + 4,\n 0,\n 0\n ),\n });\n set_edit_selected_index(Math.max(0, current_index));\n }\n } catch {\n // Ignore positioning errors\n }\n }\n };\n\n document.addEventListener(\"command-pill-click\", handle_pill_click);\n return () =>\n document.removeEventListener(\"command-pill-click\", handle_pill_click);\n }, [editor, prefixes]);\n\n return (\n <div\n ref={editor_container_ref}\n className={cn(\n \"cls_hazo_ui_textarea\",\n \"relative flex w-full rounded-md border border-input bg-background px-3 py-2\",\n \"text-sm ring-offset-background\",\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n style={{\n minHeight: calculated_min_height,\n maxHeight: max_height,\n }}\n >\n <EditorContent\n editor={editor}\n className={cn(\n \"cls_textarea_content\",\n \"flex-1 min-w-0 overflow-y-auto\",\n \"[&_.ProseMirror]:outline-none\",\n \"[&_.ProseMirror_p]:m-0 [&_.ProseMirror_p]:mb-1\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:text-muted-foreground\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:pointer-events-none\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:float-left\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:h-0\"\n )}\n />\n\n {/* Command Popover */}\n {suggestion_state?.is_active && (\n <CommandPopover\n is_open={true}\n commands={filtered_commands}\n prefix={suggestion_state.prefix}\n query={suggestion_state.query}\n selected_index={selected_index}\n position={popover_position}\n on_query_change={() => {}}\n on_select={handle_command_select}\n on_close={handle_popover_close}\n on_selection_change={set_selected_index}\n prefix_color={prefixes.find((p) => p.char === suggestion_state.prefix)?.color}\n />\n )}\n\n {/* Edit Popover - rendered via portal to escape stacking contexts */}\n {edit_context && mounted && createPortal(\n <div\n ref={edit_popover_ref}\n className={cn(\n \"cls_edit_popover\",\n \"fixed\",\n \"w-64 min-w-[200px] max-w-[300px]\",\n \"rounded-md border bg-popover text-popover-foreground shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\"\n )}\n style={{\n position: \"fixed\",\n top: edit_context.rect.y,\n left: edit_context.rect.x,\n zIndex: 9999,\n // Fallback background for consuming apps that may use hex CSS variables\n backgroundColor: \"var(--popover, #ffffff)\",\n color: \"var(--popover-foreground, #0f172a)\",\n }}\n >\n <div className=\"py-1\">\n <div className=\"px-3 py-2 text-xs text-muted-foreground border-b\">\n Change command\n </div>\n <div className=\"max-h-[200px] overflow-y-auto\">\n {edit_commands.map((cmd, idx) => (\n <div\n key={cmd.action}\n className={cn(\n \"px-3 py-2 cursor-pointer flex items-center gap-2\",\n \"hover:bg-accent\",\n idx === edit_selected_index && \"bg-accent\",\n cmd.action === edit_context.command.action && \"font-medium\"\n )}\n style={{\n // Inherit background from parent, use accent color when selected\n backgroundColor: idx === edit_selected_index\n ? \"var(--accent, #f1f5f9)\"\n : \"inherit\",\n }}\n onClick={() => handle_command_update(cmd)}\n >\n {cmd.icon && (\n <span className=\"flex-shrink-0 text-muted-foreground\">\n {cmd.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"truncate\">\n {edit_context.command.prefix}\n {cmd.action_label}\n </div>\n {cmd.action_description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {cmd.action_description}\n </div>\n )}\n </div>\n {cmd.action === edit_context.command.action && (\n <span className=\"text-xs text-muted-foreground\">current</span>\n )}\n </div>\n ))}\n {/* Remove option */}\n <div\n className={cn(\n \"px-3 py-2 cursor-pointer flex items-center gap-2 text-destructive border-t\",\n \"hover:bg-destructive/10\",\n edit_selected_index === edit_commands.length && \"bg-destructive/10\"\n )}\n style={{\n // Inherit background from parent, use light destructive color when selected\n backgroundColor: edit_selected_index === edit_commands.length\n ? \"rgba(239, 68, 68, 0.1)\"\n : \"inherit\",\n }}\n onClick={handle_command_remove}\n >\n <span>Remove</span>\n </div>\n </div>\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n};\n\nHazoUiTextarea.displayName = \"HazoUiTextarea\";\n","/**\n * animations.ts\n *\n * Purpose: Shared animation preset configurations for dialog components.\n * Used by HazoUiDialog and HazoUiConfirmDialog.\n */\n\n// Animation preset types\nexport type AnimationPreset = 'zoom' | 'slide' | 'fade' | 'bounce' | 'scale-up' | 'flip' | 'slide-left' | 'slide-right' | 'slide-top' | 'none';\n\n// Animation preset configurations\nexport const ANIMATION_PRESETS: Record<AnimationPreset, { open: string; close: string }> = {\n zoom: {\n open: \"animate-dialog-zoom\",\n close: \"animate-dialog-zoom\"\n },\n slide: {\n open: \"animate-dialog-slide-bottom\",\n close: \"animate-dialog-slide-bottom\"\n },\n fade: {\n open: \"animate-dialog-fade\",\n close: \"animate-dialog-fade\"\n },\n bounce: {\n open: \"animate-dialog-bounce\",\n close: \"animate-dialog-bounce\"\n },\n \"scale-up\": {\n open: \"animate-dialog-scale\",\n close: \"animate-dialog-scale\"\n },\n flip: {\n open: \"animate-dialog-flip\",\n close: \"animate-dialog-flip\"\n },\n \"slide-left\": {\n open: \"animate-dialog-slide-left\",\n close: \"animate-dialog-slide-left\"\n },\n \"slide-right\": {\n open: \"animate-dialog-slide-right\",\n close: \"animate-dialog-slide-right\"\n },\n \"slide-top\": {\n open: \"animate-dialog-slide-top\",\n close: \"animate-dialog-slide-top\"\n },\n none: { open: \"\", close: \"\" }\n};\n\n/**\n * Resolve animation classes from preset name or custom class string.\n * Supports both preset names and arbitrary Tailwind class strings.\n */\nexport function resolve_animation_classes(\n open_anim: AnimationPreset | string = \"zoom\",\n close_anim: AnimationPreset | string = \"zoom\"\n): string {\n const open_classes = (open_anim in ANIMATION_PRESETS)\n ? ANIMATION_PRESETS[open_anim as AnimationPreset].open\n : open_anim;\n const close_classes = (close_anim in ANIMATION_PRESETS)\n ? ANIMATION_PRESETS[close_anim as AnimationPreset].close\n : close_anim;\n return `${open_classes} ${close_classes}`;\n}\n","/**\n * hazo_ui_dialog/index.tsx\n *\n * Purpose: Standardized, reusable dialog component built on shadcn's Dialog primitive\n * Features:\n * - Standardized header and footer layout\n * - Customizable content area\n * - Flexible animation system (presets + custom)\n * - Responsive sizing (viewport-relative up to limits)\n * - Background overlay customization\n * - CSS variable-based theming\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X, Loader2 } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n DialogOverlay,\n DialogPortal,\n} from \"../ui/dialog\";\nimport { get_hazo_ui_config } from \"../../lib/hazo_ui_config\";\nimport { resolve_animation_classes } from \"../../lib/animations\";\nimport type { AnimationPreset } from \"../../lib/animations\";\nexport type { AnimationPreset } from \"../../lib/animations\";\n\ntype ButtonVariant = \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\n\n// Dialog variant types for preset color themes\nexport type DialogVariant = 'default' | 'info' | 'success' | 'warning' | 'destructive';\n\n// Variant preset color configurations\ninterface VariantPreset {\n header_background_color: string;\n description_background_color: string;\n header_text_color: string;\n border_color: string;\n accent_color: string;\n overlay_class_name: string;\n action_button_variant?: ButtonVariant;\n}\n\nconst VARIANT_PRESETS: Record<Exclude<DialogVariant, 'default'>, VariantPreset> = {\n info: {\n header_background_color: \"rgb(191, 219, 254)\",\n description_background_color: \"rgb(219, 234, 254)\",\n header_text_color: \"rgb(30, 58, 138)\",\n border_color: \"rgb(59, 130, 246)\",\n accent_color: \"rgb(59, 130, 246)\",\n overlay_class_name: \"bg-blue-950/50\",\n },\n success: {\n header_background_color: \"rgb(187, 247, 208)\",\n description_background_color: \"rgb(220, 252, 231)\",\n header_text_color: \"rgb(22, 101, 52)\",\n border_color: \"rgb(34, 197, 94)\",\n accent_color: \"rgb(34, 197, 94)\",\n overlay_class_name: \"bg-green-950/50\",\n },\n warning: {\n header_background_color: \"rgb(253, 230, 138)\",\n description_background_color: \"rgb(254, 249, 195)\",\n header_text_color: \"rgb(113, 63, 18)\",\n border_color: \"rgb(234, 179, 8)\",\n accent_color: \"rgb(234, 179, 8)\",\n overlay_class_name: \"bg-yellow-950/50\",\n },\n destructive: {\n header_background_color: \"rgb(254, 202, 202)\",\n description_background_color: \"rgb(254, 226, 226)\",\n header_text_color: \"rgb(127, 29, 29)\",\n border_color: \"rgb(239, 68, 68)\",\n accent_color: \"rgb(239, 68, 68)\",\n overlay_class_name: \"bg-red-950/50\",\n action_button_variant: \"destructive\",\n },\n};\n\n// Props interface\nexport interface HazoUiDialogProps {\n // Dialog State Control\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n\n // Content & Callbacks\n children: React.ReactNode;\n onConfirm?: () => void;\n onCancel?: () => void;\n\n // Header Configuration\n title?: string;\n description?: string;\n\n // Button Configuration\n actionButtonText?: string;\n actionButtonVariant?: ButtonVariant;\n cancelButtonText?: string;\n showCancelButton?: boolean;\n\n /**\n * Shows a loading spinner and disables the action button.\n * When true, renders a spinner icon before the action button text.\n * Does not affect cancel button.\n * Ignored if footerContent is provided.\n */\n actionButtonLoading?: boolean;\n\n /**\n * Disables the action button.\n * Ignored if footerContent is provided.\n */\n actionButtonDisabled?: boolean;\n\n /**\n * Icon element rendered before the action button text.\n * Typically a Lucide icon like <Send className=\"h-4 w-4 mr-2\" />\n * When actionButtonLoading is true, this is replaced with a spinner.\n * Ignored if footerContent is provided.\n */\n actionButtonIcon?: React.ReactNode;\n\n /**\n * Custom footer content that completely replaces the default footer.\n * When provided, actionButtonText, onConfirm, onCancel, showCancelButton,\n * actionButtonLoading, actionButtonIcon are all ignored.\n * Use this for complex layouts like stats + buttons, multiple actions,\n * or conditional button rendering.\n */\n footerContent?: React.ReactNode;\n\n // Size Configuration (responsive)\n sizeWidth?: string;\n sizeHeight?: string;\n fixedSize?: boolean; // When true, sizeHeight becomes a fixed height instead of maxHeight\n\n // Animation Configuration\n openAnimation?: AnimationPreset | string;\n closeAnimation?: AnimationPreset | string;\n\n // Variant (preset color theme)\n variant?: DialogVariant;\n\n /**\n * Controls header layout when a variant is active.\n * - true (default): title and description get separate background rows\n * - false: single header background, description rendered as italic subtext\n */\n splitHeader?: boolean;\n\n // Color Customization (overrides variant preset if both provided)\n headerBackgroundColor?: string;\n descriptionBackgroundColor?: string;\n headerTextColor?: string;\n bodyBackgroundColor?: string;\n footerBackgroundColor?: string;\n borderColor?: string;\n accentColor?: string;\n\n // Header Bar (full-width colored bar)\n headerBar?: boolean; // Enable full-width colored header bar\n headerBarColor?: string; // Color for the header bar (e.g., \"#1e293b\", \"rgb(30, 41, 59)\")\n\n // Styling Customization\n className?: string;\n contentClassName?: string;\n overlayClassName?: string;\n headerClassName?: string;\n footerClassName?: string;\n showCloseButton?: boolean;\n}\n\n/**\n * HazoUiDialog Component\n *\n * A flexible dialog component with standardized layout and customizable behavior\n */\nexport function HazoUiDialog({\n open,\n onOpenChange,\n children,\n onConfirm,\n onCancel,\n title = \"Action required\",\n description,\n actionButtonText = \"Confirm\",\n actionButtonVariant,\n cancelButtonText = \"Cancel\",\n showCancelButton = true,\n actionButtonLoading = false,\n actionButtonDisabled = false,\n actionButtonIcon,\n footerContent,\n sizeWidth = \"min(90vw, 600px)\",\n sizeHeight = \"min(80vh, 800px)\",\n fixedSize = false,\n openAnimation = \"zoom\",\n closeAnimation = \"zoom\",\n variant = \"default\",\n splitHeader = true,\n headerBackgroundColor,\n descriptionBackgroundColor,\n headerTextColor,\n bodyBackgroundColor,\n footerBackgroundColor,\n borderColor,\n accentColor,\n headerBar = false,\n headerBarColor = \"#1e293b\",\n className,\n contentClassName,\n overlayClassName,\n headerClassName,\n footerClassName,\n showCloseButton = true,\n}: HazoUiDialogProps) {\n // Get global config as defaults\n const config = get_hazo_ui_config();\n\n // Resolve variant preset (undefined for 'default' variant)\n const variant_preset = variant !== \"default\" ? VARIANT_PRESETS[variant] : undefined;\n\n // Resolve action button variant: prop > variant preset > \"default\"\n const resolved_action_button_variant = actionButtonVariant ?? variant_preset?.action_button_variant ?? \"default\";\n\n // Button click handlers\n const handleConfirm = () => {\n onConfirm?.();\n // Don't auto-close - let consumer control via onConfirm callback\n };\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange?.(false); // Auto-close on cancel\n };\n\n // Resolve animation classes\n const animationClasses = resolve_animation_classes(openAnimation, closeAnimation);\n\n // Build inline styles for color customization\n // Three-tier resolution: prop > variant preset > config\n const resolved_border_color = borderColor ?? variant_preset?.border_color;\n\n const contentStyles: React.CSSProperties = {\n width: sizeWidth,\n ...(fixedSize\n ? { height: sizeHeight, minHeight: sizeHeight, maxHeight: sizeHeight }\n : { maxHeight: sizeHeight }\n ),\n ...(resolved_border_color && { borderColor: resolved_border_color }),\n };\n\n // Header styles - combine headerBar with custom colors, using variant then config as fallback\n const finalHeaderBackgroundColor = headerBackgroundColor ?? variant_preset?.header_background_color ?? config.header_background_color;\n const finalDescriptionBgColor = descriptionBackgroundColor ?? variant_preset?.description_background_color;\n const finalHeaderTextColor = headerTextColor ?? variant_preset?.header_text_color ?? config.header_text_color;\n\n // Variant is active when not 'default'\n const is_variant_active = variant !== \"default\";\n\n // When splitHeader is true with a description bg, render two separate background rows\n const has_split_header = splitHeader && !headerBar && !!finalDescriptionBgColor && !!description;\n\n // When splitHeader is false but variant is active, use single bg with italic description\n const has_merged_variant_header = !splitHeader && is_variant_active && !headerBar && !!description;\n\n const headerStyles: React.CSSProperties = {\n ...(headerBar && {\n backgroundColor: headerBarColor,\n paddingTop: \"1.5rem\",\n paddingBottom: \"1.5rem\",\n paddingLeft: \"1.5rem\",\n paddingRight: \"1.5rem\",\n }),\n ...(!has_split_header && finalHeaderBackgroundColor && !headerBar && { backgroundColor: finalHeaderBackgroundColor }),\n ...(!has_split_header && finalHeaderTextColor && { color: finalHeaderTextColor }),\n };\n\n // Title styles - white text for header bar with !important to override inherited colors\n const titleClassName = cn(\n \"cls_dialog_title\",\n headerBar && \"!text-white\"\n );\n\n // Description styles - lighter white for header bar with !important to override inherited colors\n const descriptionClassName = cn(\n \"cls_dialog_description\",\n headerBar && \"!text-white/80\"\n );\n\n const bodyStyles: React.CSSProperties = {\n ...(bodyBackgroundColor && { backgroundColor: bodyBackgroundColor }),\n };\n\n const footerStyles: React.CSSProperties = {\n ...(footerBackgroundColor && { backgroundColor: footerBackgroundColor }),\n };\n\n // Build button styles for accent color and config colors\n const finalSubmitBgColor = accentColor ?? variant_preset?.accent_color ?? config.submit_button_background_color;\n const finalSubmitTextColor = config.submit_button_text_color;\n const finalCancelBgColor = config.cancel_button_background_color;\n const finalCancelTextColor = config.cancel_button_text_color;\n const finalCancelBorderColor = config.cancel_button_border_color;\n\n const actionButtonStyles: React.CSSProperties = {\n ...(finalSubmitBgColor && resolved_action_button_variant === \"default\" && {\n backgroundColor: finalSubmitBgColor,\n borderColor: finalSubmitBgColor,\n }),\n ...(finalSubmitTextColor && resolved_action_button_variant === \"default\" && {\n color: finalSubmitTextColor,\n }),\n };\n\n const cancelButtonStyles: React.CSSProperties = {\n ...(finalCancelBgColor && { backgroundColor: finalCancelBgColor }),\n ...(finalCancelTextColor && { color: finalCancelTextColor }),\n ...(finalCancelBorderColor && { borderColor: finalCancelBorderColor }),\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogPortal>\n {/* Custom DialogOverlay for background customization */}\n <DialogOverlay\n className={cn(\"cls_hazo_dialog_overlay\", overlayClassName ?? variant_preset?.overlay_class_name)}\n />\n\n {/* DialogContent - manually rendered to support overlay customization */}\n <DialogPrimitive.Content\n className={cn(\n \"cls_hazo_dialog_content\",\n \"fixed left-[50%] top-[50%] z-50 flex flex-col\",\n \"translate-x-[-50%] translate-y-[-50%]\",\n \"gap-0 border bg-background shadow-lg\",\n \"duration-200\",\n animationClasses,\n \"sm:rounded-lg\",\n \"overflow-hidden\",\n \"focus:outline-none\",\n className\n )}\n style={contentStyles}\n >\n {/* Header - Fixed */}\n {has_split_header ? (\n /* Split header: two rows with different backgrounds */\n <DialogHeader\n className={cn(\n \"cls_dialog_header shrink-0 p-0 space-y-0\",\n headerClassName\n )}\n >\n {/* Title row - main header background */}\n <div\n className={cn(\"cls_dialog_header_title px-6 pt-6 pb-3\", showCloseButton && \"pr-10\")}\n style={{\n ...(finalHeaderBackgroundColor && { backgroundColor: finalHeaderBackgroundColor }),\n ...(finalHeaderTextColor && { color: finalHeaderTextColor }),\n }}\n >\n <DialogTitle className={titleClassName}>\n {title}\n </DialogTitle>\n </div>\n {/* Description row - lighter sub-header background */}\n <div\n className=\"cls_dialog_header_description px-6 py-1.5\"\n style={{\n backgroundColor: finalDescriptionBgColor,\n ...(finalHeaderTextColor && { color: finalHeaderTextColor }),\n }}\n >\n <DialogDescription className={cn(descriptionClassName, \"italic text-xs\")}>\n {description}\n </DialogDescription>\n </div>\n </DialogHeader>\n ) : (\n /* Single header: one background, italic description when variant is active */\n <DialogHeader\n className={cn(\n \"cls_dialog_header shrink-0\",\n !headerBar && \"p-6 pb-4\",\n has_merged_variant_header && \"pb-3\",\n showCloseButton && \"pr-10\",\n headerClassName\n )}\n style={headerStyles}\n >\n <DialogTitle className={titleClassName}>\n {title}\n </DialogTitle>\n {description && (\n <DialogDescription className={cn(\n descriptionClassName,\n has_merged_variant_header && \"italic text-xs mt-1\"\n )}>\n {description}\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n\n {/* Body - Scrollable */}\n <div\n className={cn(\n \"cls_dialog_body\",\n \"px-6 py-4 overflow-y-auto flex-1 min-h-0\",\n contentClassName\n )}\n style={bodyStyles}\n >\n {children}\n </div>\n\n {/* Footer - Fixed, Right-aligned buttons */}\n <DialogFooter\n className={cn(\"cls_dialog_footer shrink-0 p-6 pt-4\", footerClassName)}\n style={footerStyles}\n >\n {footerContent ? (\n // Custom footer content replaces default buttons\n footerContent\n ) : (\n // Default footer with action and cancel buttons\n <>\n {showCancelButton && (\n <Button\n type=\"button\"\n className=\"cls_cancel_button\"\n variant=\"outline\"\n onClick={handleCancel}\n style={cancelButtonStyles}\n >\n {cancelButtonText}\n </Button>\n )}\n <Button\n type=\"button\"\n className=\"cls_confirm_button\"\n variant={resolved_action_button_variant}\n onClick={handleConfirm}\n style={actionButtonStyles}\n disabled={actionButtonLoading || actionButtonDisabled}\n >\n {actionButtonLoading ? (\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n ) : (\n actionButtonIcon\n )}\n {actionButtonText}\n </Button>\n </>\n )}\n </DialogFooter>\n\n {/* Close button */}\n {showCloseButton && (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\"\n style={\n headerBar\n ? { color: \"white\" }\n : finalHeaderTextColor\n ? { color: finalHeaderTextColor }\n : undefined\n }\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n </Dialog>\n );\n}\n","/**\n * hazo_ui_confirm_dialog/index.tsx\n *\n * Purpose: Compact, opinionated confirmation dialog for confirmations,\n * acknowledgments, and destructive action prompts.\n * Features:\n * - Accent top border colored by variant\n * - Variant system (default, destructive, warning, info, success)\n * - Async onConfirm with auto-loading state\n * - Configurable buttons (confirm + optional cancel)\n * - ReactNode children or simple description string\n * - Integrates with hazo_ui_config for theming\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogOverlay,\n DialogPortal,\n} from \"../ui/dialog\";\nimport { get_hazo_ui_config } from \"../../lib/hazo_ui_config\";\nimport { resolve_animation_classes } from \"../../lib/animations\";\nimport type { AnimationPreset } from \"../../lib/animations\";\n\n// Variant type\nexport type ConfirmDialogVariant = 'default' | 'destructive' | 'warning' | 'info' | 'success';\n\n// Variant preset color configurations\ninterface ConfirmVariantPreset {\n accent_color: string;\n confirm_button_color: string;\n overlay_class_name: string;\n}\n\nconst CONFIRM_VARIANT_PRESETS: Record<Exclude<ConfirmDialogVariant, 'default'>, ConfirmVariantPreset> = {\n destructive: {\n accent_color: \"rgb(220, 38, 38)\",\n confirm_button_color: \"rgb(220, 38, 38)\",\n overlay_class_name: \"bg-red-950/50\",\n },\n warning: {\n accent_color: \"rgb(245, 158, 11)\",\n confirm_button_color: \"rgb(245, 158, 11)\",\n overlay_class_name: \"bg-yellow-950/50\",\n },\n info: {\n accent_color: \"rgb(37, 99, 235)\",\n confirm_button_color: \"rgb(37, 99, 235)\",\n overlay_class_name: \"bg-blue-950/50\",\n },\n success: {\n accent_color: \"rgb(22, 163, 74)\",\n confirm_button_color: \"rgb(22, 163, 74)\",\n overlay_class_name: \"bg-green-950/50\",\n },\n};\n\n\n// Props interface\nexport interface HazoUiConfirmDialogProps {\n // Dialog state\n open: boolean;\n onOpenChange: (open: boolean) => void;\n\n // Header\n title: string;\n\n // Content — description for simple text, children for ReactNode\n // If both provided, children takes precedence\n description?: string;\n children?: React.ReactNode;\n\n // Variant — controls accent color, button color automatically\n variant?: ConfirmDialogVariant;\n\n // Button configuration\n confirmLabel?: string;\n cancelLabel?: string;\n showCancelButton?: boolean;\n\n // Callbacks\n onConfirm: () => void | Promise<void>;\n onCancel?: () => void;\n\n // State overrides\n loading?: boolean;\n disabled?: boolean;\n\n // Color overrides (override variant presets)\n accentColor?: string;\n confirmButtonColor?: string;\n\n // Animation\n openAnimation?: AnimationPreset | string;\n closeAnimation?: AnimationPreset | string;\n}\n\n/**\n * HazoUiConfirmDialog Component\n *\n * A compact, opinionated confirmation dialog with variant-driven styling,\n * accent top border, and async loading support.\n */\nexport function HazoUiConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n children,\n variant = \"default\",\n confirmLabel,\n cancelLabel = \"Cancel\",\n showCancelButton = true,\n onConfirm,\n onCancel,\n loading: external_loading,\n disabled = false,\n accentColor,\n confirmButtonColor,\n openAnimation = \"zoom\",\n closeAnimation = \"zoom\",\n}: HazoUiConfirmDialogProps) {\n const [internal_loading, set_internal_loading] = React.useState(false);\n const config = get_hazo_ui_config();\n\n // Resolve variant preset\n const variant_preset = variant !== \"default\" ? CONFIRM_VARIANT_PRESETS[variant] : undefined;\n\n // Loading state: external prop overrides internal async state\n const is_loading = external_loading ?? internal_loading;\n\n // Resolve default confirm label based on cancel button visibility\n const resolved_confirm_label = confirmLabel ?? (showCancelButton ? \"Confirm\" : \"OK\");\n\n // Resolve colors: variant preset > prop > config\n const resolved_accent_color = accentColor ?? variant_preset?.accent_color ?? \"rgb(148, 163, 184)\";\n const resolved_confirm_button_color = confirmButtonColor ?? variant_preset?.confirm_button_color ?? config.submit_button_background_color;\n\n // Cancel button styles from config\n const cancel_button_styles: React.CSSProperties = {\n ...(config.cancel_button_background_color && { backgroundColor: config.cancel_button_background_color }),\n ...(config.cancel_button_text_color && { color: config.cancel_button_text_color }),\n ...(config.cancel_button_border_color && { borderColor: config.cancel_button_border_color }),\n };\n\n // Confirm button styles\n const confirm_button_styles: React.CSSProperties = {\n ...(resolved_confirm_button_color && {\n backgroundColor: resolved_confirm_button_color,\n borderColor: resolved_confirm_button_color,\n color: \"white\",\n }),\n };\n\n // Animation classes\n const animation_classes = resolve_animation_classes(openAnimation, closeAnimation);\n\n // Handle confirm click with async support\n const handle_confirm = async () => {\n try {\n const result = onConfirm();\n if (result instanceof Promise) {\n set_internal_loading(true);\n await result;\n }\n onOpenChange(false);\n } catch {\n // Consumer handles errors in their onConfirm; we just restore UI state\n } finally {\n set_internal_loading(false);\n }\n };\n\n // Handle cancel click\n const handle_cancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n // Ref for cancel button to receive initial focus on destructive/warning variants\n const cancel_ref = React.useRef<HTMLButtonElement>(null);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogPortal>\n <DialogOverlay\n className={cn(\n \"cls_confirm_dialog_overlay\",\n variant_preset?.overlay_class_name\n )}\n style={{ backdropFilter: \"blur(4px)\" }}\n />\n\n <DialogPrimitive.Content\n className={cn(\n \"cls_confirm_dialog_content\",\n \"fixed left-[50%] top-[50%] z-50\",\n \"translate-x-[-50%] translate-y-[-50%]\",\n \"bg-background shadow-lg\",\n \"duration-200\",\n animation_classes,\n \"overflow-hidden\",\n \"focus:outline-none\"\n )}\n style={{\n width: \"min(90vw, 420px)\",\n borderRadius: \"12px\",\n borderTop: `4px solid ${resolved_accent_color}`,\n boxShadow: \"0 20px 60px rgba(0,0,0,0.15)\",\n }}\n onOpenAutoFocus={(e) => {\n if ((variant === \"destructive\" || variant === \"warning\") && showCancelButton && cancel_ref.current) {\n e.preventDefault();\n cancel_ref.current.focus();\n }\n }}\n >\n {/* Content area */}\n <div className=\"cls_confirm_dialog_body px-6 pt-7 pb-5\">\n <DialogPrimitive.Title className=\"cls_confirm_dialog_title text-[17px] font-semibold text-foreground mb-2.5\">\n {title}\n </DialogPrimitive.Title>\n\n {children ? (\n <DialogPrimitive.Description asChild>\n <div className=\"cls_confirm_dialog_children text-sm text-muted-foreground leading-relaxed\">\n {children}\n </div>\n </DialogPrimitive.Description>\n ) : description ? (\n <DialogPrimitive.Description className=\"cls_confirm_dialog_description text-sm text-muted-foreground leading-relaxed\">\n {description}\n </DialogPrimitive.Description>\n ) : null}\n </div>\n\n {/* Separator */}\n <div className=\"cls_confirm_dialog_separator border-t border-border\" />\n\n {/* Action area */}\n <div className=\"cls_confirm_dialog_actions px-6 py-4 flex justify-end gap-3\">\n {showCancelButton && (\n <Button\n ref={cancel_ref}\n type=\"button\"\n className=\"cls_confirm_cancel_button\"\n variant=\"outline\"\n onClick={handle_cancel}\n disabled={is_loading}\n style={cancel_button_styles}\n >\n {cancelLabel}\n </Button>\n )}\n <Button\n type=\"button\"\n className=\"cls_confirm_action_button\"\n onClick={handle_confirm}\n disabled={is_loading || disabled}\n style={confirm_button_styles}\n >\n {is_loading && <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />}\n {resolved_confirm_label}\n </Button>\n </div>\n </DialogPrimitive.Content>\n </DialogPortal>\n </Dialog>\n );\n}\n","// Drawer component for hazo_ui library\n// Based on shadcn/ui drawer component (vaul-backed).\n//\n// Intended for mobile bottom sheets. On desktop, consumers typically render a Dialog instead.\n// The component itself does not enforce this — pair with `useMediaQuery(\"(max-width: 640px)\")`\n// to swap Dialog ↔ Drawer, or render both shells with the same content.\n\nimport * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\nimport { cn } from \"../../lib/utils\";\n\nconst Drawer = ({\n shouldScaleBackground = true,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) => (\n <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />\n);\nDrawer.displayName = \"Drawer\";\n\nconst DrawerTrigger = DrawerPrimitive.Trigger;\nconst DrawerPortal = DrawerPrimitive.Portal;\nconst DrawerClose = DrawerPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDrawerOverlay.displayName = \"DrawerOverlay\";\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto max-h-[96dvh] flex-col rounded-t-[10px] border bg-background\",\n className\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"grid gap-1.5 p-4 text-center sm:text-left\", className)}\n {...props}\n />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDrawerTitle.displayName = \"DrawerTitle\";\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = \"DrawerDescription\";\n\nexport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerOverlay,\n DrawerPortal,\n DrawerTitle,\n DrawerTrigger,\n};\n","// useMediaQuery hook for hazo_ui library\n// SSR-safe React hook that returns whether the given media query matches.\n// Defaults to `false` during SSR so consumers can branch on `isMobile` without hydration mismatch.\n\nimport * as React from \"react\";\n\n/**\n * Returns whether the given media query currently matches.\n * Re-renders the consumer when the match state changes.\n *\n * @param query - A CSS media query string, e.g. \"(max-width: 640px)\"\n * @returns boolean — `true` when the query matches, `false` during SSR or before mount\n *\n * @example\n * const isMobile = useMediaQuery(\"(max-width: 640px)\");\n * const Shell = isMobile ? Drawer : Dialog;\n */\nexport function useMediaQuery(query: string): boolean {\n const get_match = React.useCallback(() => {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return false;\n }\n return window.matchMedia(query).matches;\n }, [query]);\n\n const [matches, set_matches] = React.useState<boolean>(false);\n\n React.useEffect(() => {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return;\n }\n const media_query_list = window.matchMedia(query);\n set_matches(media_query_list.matches);\n\n const handle_change = (event: MediaQueryListEvent) => set_matches(event.matches);\n\n // addEventListener is the modern API; addListener is the legacy fallback for older Safari\n if (typeof media_query_list.addEventListener === \"function\") {\n media_query_list.addEventListener(\"change\", handle_change);\n return () => media_query_list.removeEventListener(\"change\", handle_change);\n }\n media_query_list.addListener(handle_change);\n return () => media_query_list.removeListener(handle_change);\n }, [query, get_match]);\n\n return matches;\n}\n","// Accordion component for hazo_ui library\n// Based on shadcn/ui accordion component\nimport * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","// Checkbox component for hazo_ui library\n// Based on shadcn/ui checkbox component\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","// DropdownMenu component for hazo_ui library\n// Based on shadcn/ui dropdown-menu component\nimport * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n","// HoverCard component for hazo_ui library\n// Based on shadcn/ui hover-card component\nimport * as React from \"react\";\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\nimport { cn } from \"../../lib/utils\";\n\nconst HoverCard = HoverCardPrimitive.Root;\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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\",\n className\n )}\n {...props}\n />\n));\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","// Label component for hazo_ui library\n// Based on shadcn/ui label component (placeholder - not used in HazoUiMultiFilterDialog but included for completeness)\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, ...props }, ref) => {\n return (\n <label\n ref={ref}\n className={cn(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className\n )}\n {...props}\n />\n );\n }\n);\nLabel.displayName = \"Label\";\n\nexport { Label };\n\n","// Switch component for hazo_ui library\n// Based on shadcn/ui switch component\nimport * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n\n","// Textarea component for hazo_ui library\n// Based on shadcn/ui textarea component\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2\",\n \"text-sm ring-offset-background\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\"\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../../lib/utils\";\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","\"use client\"\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nconst Collapsible = CollapsiblePrimitive.Root;\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","\"use client\"\nimport * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport { cn } from \"../../lib/utils\";\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"rounded-lg border bg-card text-card-foreground shadow-sm\", className)} {...props} />\n )\n);\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props} />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import { cn } from \"../../lib/utils\";\n\ninterface SpinnerProps {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport function Spinner({ className, size = \"md\" }: SpinnerProps) {\n const sizeClasses = { sm: \"h-4 w-4\", md: \"h-8 w-8\", lg: \"h-12 w-12\" };\n return (\n <div\n className={cn(\"animate-spin rounded-full border-2 border-current border-t-transparent text-primary\", sizeClasses[size], className)}\n role=\"status\"\n aria-label=\"Loading\"\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n}\n","\"use client\"\nimport * as React from \"react\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 gap-2\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-10 px-3 min-w-10\",\n sm: \"h-9 px-2.5 min-w-9\",\n lg: \"h-11 px-5 min-w-11\",\n },\n },\n defaultVariants: { variant: \"default\", size: \"default\" },\n }\n);\n\nconst Toggle = React.forwardRef<\n React.ElementRef<typeof TogglePrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n <TogglePrimitive.Root ref={ref} className={cn(toggleVariants({ variant, size, className }))} {...props} />\n));\nToggle.displayName = TogglePrimitive.Root.displayName;\n\nexport { Toggle, toggleVariants };\n","\"use client\"\nimport * as React from \"react\";\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { toggleVariants } from \"./toggle\";\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n size: \"default\",\n variant: \"default\",\n});\n\nconst ToggleGroup = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => (\n <ToggleGroupPrimitive.Root ref={ref} className={cn(\"flex items-center justify-center gap-1\", className)} {...props}>\n <ToggleGroupContext.Provider value={{ variant, size }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n));\nToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;\n\nconst ToggleGroupItem = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>\n>(({ className, children, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext);\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(toggleVariants({ variant: context.variant || variant, size: context.size || size }), className)}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n );\n});\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;\n\nexport { ToggleGroup, ToggleGroupItem };\n","\"use client\"\nimport * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\nimport { cn } from \"../../lib/utils\";\nimport { buttonVariants } from \"./button\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className)}\n {...props}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\", className)}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title ref={ref} className={cn(\"text-lg font-semibold\", className)} {...props} />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel ref={ref} className={cn(buttonVariants({ variant: \"outline\" }), \"mt-2 sm:mt-0\", className)} {...props} />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { Separator } from \"./separator\";\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch [&>*]:focus-visible:relative [&>*]:focus-visible:z-10\",\n {\n variants: {\n orientation: {\n horizontal: \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\",\n vertical: \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\n },\n },\n defaultVariants: { orientation: \"horizontal\" },\n }\n);\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <div role=\"group\" data-slot=\"button-group\" className={cn(buttonGroupVariants({ orientation }), className)} {...props} />\n );\n}\n\nfunction ButtonGroupText({ className, asChild = false, ...props }: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp className={cn(\"bg-muted flex items-center gap-2 rounded-md border px-4 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\", className)} {...props} />\n );\n}\n\nfunction ButtonGroupSeparator({ className, orientation = \"vertical\", ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator orientation={orientation} className={cn(\"bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto\", className)} {...props} />;\n}\n\nexport { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\ninterface SkeletonBaseProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n}\n\nconst SkeletonBase = React.forwardRef<HTMLDivElement, SkeletonBaseProps>(\n ({ className, ...rest }, ref) => (\n <div\n ref={ref}\n data-hazo-skeleton=\"\"\n aria-hidden=\"true\"\n className={cn(\"hazo-shimmer rounded-md\", className)}\n {...rest}\n />\n )\n);\nSkeletonBase.displayName = \"Skeleton\";\n\nexport const Skeleton = SkeletonBase;\n\n/* ------------------------------ Circle ------------------------------ */\n\nexport interface SkeletonCircleProps {\n /** Diameter in px. Default 40. */\n size?: number;\n className?: string;\n}\n\nexport function SkeletonCircle({ size = 40, className }: SkeletonCircleProps) {\n return (\n <SkeletonBase\n className={cn(\"rounded-full\", className)}\n style={{ width: size, height: size }}\n />\n );\n}\n\n/* ------------------------------- Bar -------------------------------- */\n\nexport interface SkeletonBarProps {\n /** CSS width — accepts px (number) or any CSS length string. Default \"100%\". */\n width?: number | string;\n /** Height in px. Default 12. */\n height?: number;\n className?: string;\n}\n\nexport function SkeletonBar({ width = \"100%\", height = 12, className }: SkeletonBarProps) {\n return (\n <SkeletonBase\n className={className}\n style={{ width, height }}\n />\n );\n}\n\n/* ------------------------------- Rect ------------------------------- */\n\nexport interface SkeletonRectProps {\n width?: number | string;\n height?: number | string;\n /** CSS border-radius. Default 6 (matches rounded-md). */\n radius?: number | string;\n className?: string;\n}\n\nexport function SkeletonRect({ width = \"100%\", height = 96, radius = 6, className }: SkeletonRectProps) {\n return (\n <SkeletonBase\n className={className}\n style={{ width, height, borderRadius: radius }}\n />\n );\n}\n\n/* ------------------------------ Group ------------------------------- */\n\nexport interface SkeletonGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Optional `aria-label` for the loading region. Default \"Loading content\". */\n label?: string;\n children: React.ReactNode;\n}\n\nexport function SkeletonGroup({ label = \"Loading content\", children, className, ...rest }: SkeletonGroupProps) {\n return (\n <div\n role=\"status\"\n aria-busy=\"true\"\n aria-label={label}\n className={cn(\"space-y-2\", className)}\n {...rest}\n >\n {children}\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface EmptyStateProps {\n /** Icon element. Recommended size 48x48. Wrap a lucide icon in a div if you want background styling. */\n icon?: React.ReactNode;\n /** Required main heading. */\n title: string;\n /** Optional secondary description. */\n description?: React.ReactNode;\n /** Optional CTA region — typically one or two <Button> elements. */\n action?: React.ReactNode;\n /** Visual size. \"sm\" for inline use (cards, panels), \"md\" default, \"lg\" for full-page emptiness. */\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n size = \"md\",\n className,\n}: EmptyStateProps) {\n const sizing = {\n sm: { wrap: \"py-6 gap-2\", icon: \"w-8 h-8 mb-1\", title: \"text-sm font-medium\", desc: \"text-xs\" },\n md: { wrap: \"py-10 gap-3\", icon: \"w-12 h-12 mb-2\", title: \"text-base font-semibold\", desc: \"text-sm\" },\n lg: { wrap: \"py-16 gap-4\", icon: \"w-16 h-16 mb-3\", title: \"text-lg font-semibold\", desc: \"text-base\" },\n }[size];\n\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center text-center text-muted-foreground\",\n sizing.wrap,\n className\n )}\n >\n {icon ? (\n <div className={cn(\"text-muted-foreground/60\", sizing.icon)}>{icon}</div>\n ) : null}\n <div className={cn(\"text-foreground\", sizing.title)}>{title}</div>\n {description ? (\n <div className={cn(\"max-w-md text-muted-foreground\", sizing.desc)}>{description}</div>\n ) : null}\n {action ? <div className=\"mt-2 flex items-center gap-2\">{action}</div> : null}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AlertTriangle, OctagonAlert, X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type ErrorBannerSeverity = \"warning\" | \"error\";\n\nexport interface ErrorBannerProps {\n /** Defaults to \"error\". */\n severity?: ErrorBannerSeverity;\n /** Optional bold heading shown above the message. */\n title?: string;\n /** Required body text or node. */\n message: React.ReactNode;\n /** Override the auto-selected icon. */\n icon?: React.ReactNode;\n /** Optional CTA region — typically one <Button>. */\n action?: React.ReactNode;\n /** When provided, renders a dismiss \"X\" button that calls this on click. */\n onDismiss?: () => void;\n className?: string;\n}\n\nexport function ErrorBanner({\n severity = \"error\",\n title,\n message,\n icon,\n action,\n onDismiss,\n className,\n}: ErrorBannerProps) {\n const palette =\n severity === \"warning\"\n ? \"border-amber-300 bg-amber-50 text-amber-900 dark:border-amber-700 dark:bg-amber-950 dark:text-amber-100\"\n : \"border-destructive/40 bg-destructive/10 text-destructive-foreground\";\n\n const iconColor = severity === \"warning\" ? \"text-amber-600\" : \"text-destructive\";\n\n const resolvedIcon =\n icon ??\n (severity === \"warning\" ? (\n <AlertTriangle className={cn(\"h-5 w-5\", iconColor)} aria-hidden=\"true\" />\n ) : (\n <OctagonAlert className={cn(\"h-5 w-5\", iconColor)} aria-hidden=\"true\" />\n ));\n\n return (\n <div\n role=\"alert\"\n aria-live={severity === \"error\" ? \"assertive\" : \"polite\"}\n className={cn(\n \"flex items-start gap-3 rounded-md border px-4 py-3 text-sm\",\n palette,\n className\n )}\n >\n <div className=\"flex-shrink-0 mt-0.5\">{resolvedIcon}</div>\n <div className=\"flex-1 min-w-0\">\n {title ? <div className=\"font-semibold leading-tight\">{title}</div> : null}\n <div className={cn(\"leading-snug\", title ? \"mt-1\" : \"\")}>{message}</div>\n {action ? <div className=\"mt-2 flex items-center gap-2\">{action}</div> : null}\n </div>\n {onDismiss ? (\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n className=\"flex-shrink-0 rounded p-1 hover:bg-black/5 focus:outline-none focus:ring-2 focus:ring-offset-2 dark:hover:bg-white/5\"\n >\n <X className=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n ) : null}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { OctagonAlert } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ErrorPageProps {\n /** Defaults to \"Something went wrong\". */\n title?: string;\n /** Optional explanation paragraph(s). */\n description?: React.ReactNode;\n /** Short symbolic code (e.g., \"500\", \"NOT_FOUND\") rendered as a tag. */\n errorCode?: string;\n /** Correlation id from hazo_logs — rendered in a copyable mono block when present. */\n correlationId?: string;\n /** CTA region — typically one or two <Button> elements (\"Try again\", \"Go home\"). */\n actions?: React.ReactNode;\n /** Override the default OctagonAlert icon. */\n illustration?: React.ReactNode;\n className?: string;\n}\n\nexport function ErrorPage({\n title = \"Something went wrong\",\n description,\n errorCode,\n correlationId,\n actions,\n illustration,\n className,\n}: ErrorPageProps) {\n return (\n <div\n role=\"alert\"\n aria-live=\"assertive\"\n className={cn(\n \"mx-auto flex max-w-md flex-col items-center justify-center gap-4 px-6 py-16 text-center\",\n className\n )}\n >\n <div className=\"text-destructive\">\n {illustration ?? <OctagonAlert className=\"h-16 w-16\" aria-hidden=\"true\" />}\n </div>\n {errorCode ? (\n <div className=\"rounded-full bg-muted px-3 py-1 text-xs font-mono uppercase tracking-wider text-muted-foreground\">\n {errorCode}\n </div>\n ) : null}\n <h1 className=\"text-2xl font-semibold text-foreground\">{title}</h1>\n {description ? (\n <div className=\"text-sm text-muted-foreground\">{description}</div>\n ) : null}\n {correlationId ? (\n <div className=\"w-full rounded-md border bg-muted/40 px-3 py-2 text-left\">\n <div className=\"text-[10px] uppercase tracking-wider text-muted-foreground\">\n Correlation ID\n </div>\n <code className=\"break-all text-xs\">{correlationId}</code>\n </div>\n ) : null}\n {actions ? <div className=\"mt-2 flex flex-wrap items-center justify-center gap-2\">{actions}</div> : null}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ErrorBanner } from \"../error_banner\";\n\ntype Phase = \"idle\" | \"silent\" | \"gentle\" | \"firm\" | \"expired\";\n\nexport interface LoadingTimeoutProps {\n /** When true, the timeout runs and escalation states render. When false, renders children. */\n active: boolean;\n /** Children shown when not loading. */\n children?: React.ReactNode;\n /** Optional skeleton rendered during the \"silent\" phase (0–5s). */\n skeleton?: React.ReactNode;\n /** Called when the user clicks the retry button in the \"expired\" phase. */\n onRetry?: () => void;\n /** Customise the timeout thresholds in ms. Defaults: 5000/15000/30000. */\n thresholds?: { gentle?: number; firm?: number; expired?: number };\n /** Optional label used in the gentle/firm messages. Default \"content\". */\n label?: string;\n className?: string;\n}\n\nexport function LoadingTimeout({\n active,\n children,\n skeleton,\n onRetry,\n thresholds,\n label = \"content\",\n className,\n}: LoadingTimeoutProps) {\n const t = {\n gentle: thresholds?.gentle ?? 5_000,\n firm: thresholds?.firm ?? 15_000,\n expired: thresholds?.expired ?? 30_000,\n };\n\n const [phase, setPhase] = React.useState<Phase>(active ? \"silent\" : \"idle\");\n\n React.useEffect(() => {\n if (!active) {\n setPhase(\"idle\");\n return;\n }\n setPhase(\"silent\");\n const gentleTimer = window.setTimeout(() => setPhase(\"gentle\"), t.gentle);\n const firmTimer = window.setTimeout(() => setPhase(\"firm\"), t.firm);\n const expiredTimer = window.setTimeout(() => setPhase(\"expired\"), t.expired);\n return () => {\n window.clearTimeout(gentleTimer);\n window.clearTimeout(firmTimer);\n window.clearTimeout(expiredTimer);\n };\n }, [active, t.gentle, t.firm, t.expired]);\n\n if (!active) {\n return <>{children}</>;\n }\n\n if (phase === \"expired\") {\n return (\n <div className={className} role=\"alert\" aria-busy=\"false\">\n <ErrorBanner\n severity=\"error\"\n title=\"This is taking longer than expected\"\n message={`We're still trying to load the ${label}. The connection may be slow.`}\n action={\n onRetry ? (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"rounded bg-foreground/10 px-3 py-1.5 text-sm font-medium hover:bg-foreground/15\"\n >\n Try again\n </button>\n ) : null\n }\n />\n </div>\n );\n }\n\n return (\n <div className={className} role=\"status\" aria-busy=\"true\" aria-live=\"polite\">\n {skeleton}\n {phase === \"gentle\" ? (\n <div className=\"mt-3 text-center text-sm text-muted-foreground\">Loading {label}…</div>\n ) : null}\n {phase === \"firm\" ? (\n <div className=\"mt-3 text-center text-sm text-muted-foreground\">\n Still working on it — almost there.\n </div>\n ) : null}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ProgressiveImageProps {\n /** Required final image src. */\n src: string;\n /** Required alt text. Empty string is allowed for decorative images. */\n alt: string;\n /** Low-quality placeholder data URL or tiny image url. Renders blurred under the main image. */\n lqip?: string;\n /** Width in px or CSS length. Required for stable aspect ratio. */\n width: number | string;\n /** Height in px or CSS length. Required for stable aspect ratio. */\n height: number | string;\n /** Native loading attribute. Default \"lazy\". */\n loading?: \"eager\" | \"lazy\";\n /** Object fit for the final image. Default \"cover\". */\n fit?: \"cover\" | \"contain\" | \"fill\" | \"none\" | \"scale-down\";\n className?: string;\n onLoad?: () => void;\n onError?: () => void;\n}\n\nexport function ProgressiveImage({\n src,\n alt,\n lqip,\n width,\n height,\n loading = \"lazy\",\n fit = \"cover\",\n className,\n onLoad,\n onError,\n}: ProgressiveImageProps) {\n const [loaded, setLoaded] = React.useState(false);\n\n return (\n <div\n className={cn(\"relative overflow-hidden bg-muted\", className)}\n style={{ width, height }}\n >\n {lqip ? (\n <img\n src={lqip}\n alt=\"\"\n aria-hidden=\"true\"\n className={cn(\n \"absolute inset-0 h-full w-full object-cover blur-md scale-110 transition-opacity duration-300\",\n loaded ? \"opacity-0\" : \"opacity-100\"\n )}\n />\n ) : null}\n <img\n src={src}\n alt={alt}\n loading={loading}\n onLoad={() => {\n setLoaded(true);\n onLoad?.();\n }}\n onError={onError}\n className={cn(\n \"absolute inset-0 h-full w-full transition-opacity duration-300\",\n `object-${fit}`,\n loaded ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { Toaster as SonnerToaster, toast } from \"sonner\";\nimport { CheckCircle2, OctagonAlert } from \"lucide-react\";\n\nexport interface HazoUiToasterProps {\n /** Position of the toast stack. Default \"bottom-right\". */\n position?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"top-center\" | \"bottom-center\";\n /** Whether toasts include a close (X) button. Default true. */\n closeButton?: boolean;\n /** Max number of toasts visible at once. Default 5. */\n visibleToasts?: number;\n}\n\nexport function HazoUiToaster({\n position = \"bottom-right\",\n closeButton = true,\n visibleToasts = 5,\n}: HazoUiToasterProps = {}) {\n return (\n <SonnerToaster\n position={position}\n closeButton={closeButton}\n visibleToasts={visibleToasts}\n theme=\"system\"\n richColors\n toastOptions={{\n classNames: {\n toast: \"group rounded-md border bg-background text-foreground shadow-lg\",\n title: \"font-medium\",\n description: \"text-muted-foreground text-sm\",\n },\n }}\n />\n );\n}\n\nexport interface ToastOptions {\n title: string;\n description?: string;\n /** Auto-dismiss duration in ms. Default 3000 for success, 5000 for error. */\n duration?: number;\n /** Optional action button rendered inside the toast. */\n action?: { label: string; onClick: () => void };\n}\n\nexport function successToast({ title, description, duration = 3000, action }: ToastOptions) {\n return toast.success(title, {\n description,\n duration,\n icon: <CheckCircle2 className=\"h-4 w-4 text-emerald-600\" />,\n action: action ? { label: action.label, onClick: action.onClick } : undefined,\n });\n}\n\nexport function errorToast({ title, description, duration = 5000, action }: ToastOptions) {\n return toast.error(title, {\n description,\n duration,\n icon: <OctagonAlert className=\"h-4 w-4 text-destructive\" />,\n action: action ? { label: action.label, onClick: action.onClick } : undefined,\n });\n}\n\n/** Re-export sonner's raw toast for advanced use cases. */\nexport { toast as rawToast } from \"sonner\";\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\nexport interface UseLoadingStateResult {\n /** Current loading flag. */\n isLoading: boolean;\n /** Set the loading flag manually. */\n setLoading: (value: boolean) => void;\n /**\n * Wraps an async function: sets loading=true, awaits the function,\n * sets loading=false in a finally block. Returns the function's result\n * (or throws its error).\n */\n withLoading: <T>(fn: () => Promise<T>) => Promise<T>;\n}\n\nexport function useLoadingState(initial = false): UseLoadingStateResult {\n const [isLoading, setLoading] = useState<boolean>(initial);\n\n const withLoading = useCallback(async <T>(fn: () => Promise<T>): Promise<T> => {\n setLoading(true);\n try {\n return await fn();\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { isLoading, setLoading, withLoading };\n}\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\nexport interface UseErrorDisplayResult {\n /** Current error message, or null when cleared. */\n error: string | null;\n /**\n * Set the error. Accepts a string, an Error instance (uses .message),\n * or null to clear. Anything else is coerced via String().\n */\n setError: (value: unknown) => void;\n /** Clear the error. Same as `setError(null)`. */\n clearError: () => void;\n}\n\nexport function useErrorDisplay(): UseErrorDisplayResult {\n const [error, setRaw] = useState<string | null>(null);\n\n const setError = useCallback((value: unknown) => {\n if (value == null) {\n setRaw(null);\n return;\n }\n if (typeof value === \"string\") {\n setRaw(value);\n return;\n }\n if (value instanceof Error) {\n setRaw(value.message);\n return;\n }\n setRaw(String(value));\n }, []);\n\n const clearError = useCallback(() => setRaw(null), []);\n\n return { error, setError, clearError };\n}\n","// use_debounce.ts — Returns a debounced copy of `value` that only updates\n// after `delayMs` milliseconds of silence. SSR-safe (uses useEffect).\n\nimport { useEffect, useState } from \"react\";\n\n/**\n * Returns a debounced copy of `value`.\n * The returned value only updates after `delayMs` milliseconds have elapsed\n * with no new value. Useful for search inputs or any expensive effect that\n * should not run on every keystroke.\n *\n * @param value - The current value to debounce.\n * @param delayMs - Delay in milliseconds before the debounced value updates.\n * @returns The debounced value (same type as the input).\n *\n * @example\n * const [query, setQuery] = useState(\"\");\n * const debouncedQuery = useDebounce(query, 300);\n * useEffect(() => { fetchResults(debouncedQuery); }, [debouncedQuery]);\n */\nexport function useDebounce<T>(value: T, delayMs: number): T {\n const [debounced_value, set_debounced_value] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n set_debounced_value(value);\n }, delayMs);\n\n return () => clearTimeout(timer);\n }, [value, delayMs]);\n\n return debounced_value;\n}\n","// use_copy_to_clipboard.ts — Clipboard write wrapper with a transient `copied`\n// flag that auto-resets after 2 seconds. SSR-safe.\n\n\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\nexport interface UseCopyToClipboardResult {\n /** True for ~2 s after a successful copy; false otherwise. */\n copied: boolean;\n /**\n * Write `text` to the clipboard. Resolves silently on success.\n * In unsupported environments the promise resolves without throwing.\n */\n copy: (text: string) => Promise<void>;\n}\n\n/**\n * Clipboard write wrapper with a transient `copied` flag.\n *\n * @returns `{ copied, copy }` — call `copy(text)` to write to the clipboard.\n * `copied` is `true` for 2 seconds after a successful write.\n *\n * @example\n * const { copied, copy } = useCopyToClipboard();\n * <button onClick={() => copy(\"hello\")}>{copied ? \"Copied!\" : \"Copy\"}</button>\n */\nexport function useCopyToClipboard(): UseCopyToClipboardResult {\n const [copied, set_copied] = useState(false);\n\n const copy = useCallback(async (text: string): Promise<void> => {\n if (typeof navigator === \"undefined\" || !navigator.clipboard) {\n return;\n }\n try {\n await navigator.clipboard.writeText(text);\n set_copied(true);\n setTimeout(() => set_copied(false), 2000);\n } catch {\n // Silently swallow — clipboard access may be denied in some contexts\n }\n }, []);\n\n return { copied, copy };\n}\n","// use_is_mobile.ts — Breakpoint-based mobile detection built on useMediaQuery.\n// D-018: useIsMobile and useViewport are unified — same implementation,\n// both exported from this file. useViewport is an alias.\n\nimport { useMediaQuery } from \"./use_media_query\";\n\n/** Default breakpoint in pixels (768 px = Tailwind `md`). */\nconst DEFAULT_BREAKPOINT_PX = 768;\n\n/**\n * Returns `true` when the viewport width is narrower than `breakpointPx`.\n * Re-renders when the match state changes. SSR-safe (returns `false` on server).\n *\n * @param breakpointPx - Pixel threshold for \"mobile\". Defaults to 768 px.\n *\n * @example\n * const isMobile = useIsMobile();\n * const isTablet = useIsMobile(1024);\n */\nexport function useIsMobile(breakpointPx: number = DEFAULT_BREAKPOINT_PX): boolean {\n return useMediaQuery(`(max-width: ${breakpointPx - 1}px)`);\n}\n\n/**\n * Alias for `useIsMobile` — accepts a breakpoint in pixels.\n * Provided for consumers who prefer the `useViewport` name.\n *\n * @param breakpoint - Pixel threshold (same semantics as `useIsMobile`). Defaults to 768 px.\n */\nexport function useViewport(breakpoint: number = DEFAULT_BREAKPOINT_PX): boolean {\n return useIsMobile(breakpoint);\n}\n","// use_local_storage.ts — localStorage-backed state hook.\n// Behaves like useState but persists the value across page reloads.\n// Falls back gracefully when localStorage is unavailable (SSR, private mode).\n\n\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\n/**\n * localStorage-backed state hook.\n * The stored value is JSON-serialised; parse errors fall back to `initialValue`.\n *\n * @param key - localStorage key.\n * @param initialValue - Value used when no stored entry exists or on SSR.\n * @returns `[storedValue, setValue]` — same API as `useState`.\n *\n * @example\n * const [theme, setTheme] = useLocalStorage<\"light\" | \"dark\">(\"theme\", \"light\");\n */\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n): [T, (value: T | ((prev: T) => T)) => void] {\n const read_stored = (): T => {\n if (typeof window === \"undefined\") return initialValue;\n try {\n const raw = window.localStorage.getItem(key);\n return raw !== null ? (JSON.parse(raw) as T) : initialValue;\n } catch {\n return initialValue;\n }\n };\n\n const [stored_value, set_stored_value] = useState<T>(read_stored);\n\n const set_value = useCallback(\n (value: T | ((prev: T) => T)) => {\n set_stored_value((prev) => {\n const next = typeof value === \"function\" ? (value as (prev: T) => T)(prev) : value;\n try {\n if (typeof window !== \"undefined\") {\n window.localStorage.setItem(key, JSON.stringify(next));\n }\n } catch {\n // Quota exceeded or storage unavailable — state still updates in memory\n }\n return next;\n });\n },\n [key],\n );\n\n return [stored_value, set_value];\n}\n","// use_session_storage.ts — sessionStorage-backed state hook.\n// Same API as useLocalStorage but data is cleared when the browser tab closes.\n// Falls back gracefully when sessionStorage is unavailable (SSR, private mode).\n\n\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\n/**\n * sessionStorage-backed state hook.\n * The stored value is JSON-serialised; parse errors fall back to `initialValue`.\n *\n * @param key - sessionStorage key.\n * @param initialValue - Value used when no stored entry exists or on SSR.\n * @returns `[storedValue, setValue]` — same API as `useState`.\n *\n * @example\n * const [draft, setDraft] = useSessionStorage(\"form_draft\", \"\");\n */\nexport function useSessionStorage<T>(\n key: string,\n initialValue: T,\n): [T, (value: T | ((prev: T) => T)) => void] {\n const read_stored = (): T => {\n if (typeof window === \"undefined\") return initialValue;\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw !== null ? (JSON.parse(raw) as T) : initialValue;\n } catch {\n return initialValue;\n }\n };\n\n const [stored_value, set_stored_value] = useState<T>(read_stored);\n\n const set_value = useCallback(\n (value: T | ((prev: T) => T)) => {\n set_stored_value((prev) => {\n const next = typeof value === \"function\" ? (value as (prev: T) => T)(prev) : value;\n try {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.setItem(key, JSON.stringify(next));\n }\n } catch {\n // Quota exceeded or storage unavailable — state still updates in memory\n }\n return next;\n });\n },\n [key],\n );\n\n return [stored_value, set_value];\n}\n","// use_click_outside.ts — Fires `handler` when a pointer event lands outside\n// the element referenced by `ref`. Useful for closing dropdowns, popovers, etc.\n\n\"use client\";\n\nimport { type RefObject, useEffect } from \"react\";\n\n/**\n * Fires `handler` when the user clicks (or taps) outside the element bound to `ref`.\n * Attaches a `mousedown` listener on `document`; cleans up on unmount or dependency change.\n *\n * @param ref - React ref pointing to the element to watch.\n * @param handler - Callback invoked when a click outside is detected.\n *\n * @example\n * const panel_ref = useRef<HTMLDivElement>(null);\n * useClickOutside(panel_ref, () => setOpen(false));\n * return <div ref={panel_ref}>...</div>;\n */\nexport function useClickOutside<T extends HTMLElement>(\n ref: RefObject<T | null>,\n handler: () => void,\n): void {\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const handle_event = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node | null;\n if (!ref.current || !target) return;\n if (!ref.current.contains(target)) {\n handler();\n }\n };\n\n document.addEventListener(\"mousedown\", handle_event);\n document.addEventListener(\"touchstart\", handle_event);\n\n return () => {\n document.removeEventListener(\"mousedown\", handle_event);\n document.removeEventListener(\"touchstart\", handle_event);\n };\n }, [ref, handler]);\n}\n","// use_wake_lock.ts — Web Wake Lock API wrapper.\n// Prevents the screen from dimming or locking while the lock is held.\n// Returns null-safe helpers; `supported` is false in unsupported environments.\n\n\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface UseWakeLockResult {\n /** True when the Wake Lock API is available in this environment. */\n supported: boolean;\n /** True when a wake lock is currently held. */\n acquired: boolean;\n /** Request the screen wake lock. No-op if unsupported or already acquired. */\n request: () => Promise<void>;\n /** Release the currently held wake lock. No-op if not acquired. */\n release: () => Promise<void>;\n}\n\n/**\n * Web Wake Lock API wrapper. Prevents screen sleep while the lock is held.\n * Automatically reacquires the lock when the page becomes visible again\n * (e.g. after switching tabs), because the browser releases it on visibility change.\n *\n * Returns `supported: false` in environments that don't implement the API\n * (SSR, older browsers) — all other operations are no-ops in that case.\n *\n * @example\n * const { supported, acquired, request, release } = useWakeLock();\n * <button onClick={acquired ? release : request}>\n * {acquired ? \"Release lock\" : \"Keep screen on\"}\n * </button>\n */\nexport function useWakeLock(): UseWakeLockResult {\n const supported =\n typeof navigator !== \"undefined\" && \"wakeLock\" in navigator;\n\n const sentinel_ref = useRef<WakeLockSentinel | null>(null);\n const [acquired, set_acquired] = useState(false);\n\n const request = useCallback(async (): Promise<void> => {\n if (!supported || sentinel_ref.current) return;\n try {\n const sentinel = await (navigator as Navigator & { wakeLock: WakeLock }).wakeLock.request(\"screen\");\n sentinel.addEventListener(\"release\", () => {\n sentinel_ref.current = null;\n set_acquired(false);\n });\n sentinel_ref.current = sentinel;\n set_acquired(true);\n } catch {\n // AbortError if the page is not visible; NotAllowedError in some contexts\n }\n }, [supported]);\n\n const release = useCallback(async (): Promise<void> => {\n if (!sentinel_ref.current) return;\n try {\n await sentinel_ref.current.release();\n } catch {\n // Ignore — sentinel may already be released\n } finally {\n sentinel_ref.current = null;\n set_acquired(false);\n }\n }, []);\n\n // Reacquire when the tab becomes visible again (browser releases on hide)\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const handle_visibility = () => {\n if (document.visibilityState === \"visible\" && acquired && !sentinel_ref.current) {\n void request();\n }\n };\n\n document.addEventListener(\"visibilitychange\", handle_visibility);\n return () => document.removeEventListener(\"visibilitychange\", handle_visibility);\n }, [acquired, request]);\n\n // Release on unmount\n useEffect(() => {\n return () => {\n if (sentinel_ref.current) {\n void sentinel_ref.current.release().catch(() => undefined);\n sentinel_ref.current = null;\n }\n };\n }, []);\n\n return { supported, acquired, request, release };\n}\n","// use_fullscreen.ts — Fullscreen API wrapper.\n// Targets an optional element ref, or document.documentElement by default.\n// SSR-safe; no-ops when the API is unavailable.\n\n\"use client\";\n\nimport { type RefObject, useCallback, useEffect, useState } from \"react\";\n\nexport interface UseFullscreenResult {\n /** True when the targeted element (or document) is currently fullscreen. */\n isFullscreen: boolean;\n /** Request fullscreen. No-op if already fullscreen or unsupported. */\n enter: () => Promise<void>;\n /** Exit fullscreen. No-op if not fullscreen or unsupported. */\n exit: () => Promise<void>;\n /** Toggle between fullscreen and normal. */\n toggle: () => Promise<void>;\n}\n\n/**\n * Fullscreen API wrapper.\n *\n * @param elementRef - Optional ref to the element to fullscreen.\n * Defaults to `document.documentElement` when omitted.\n *\n * @example\n * const container_ref = useRef<HTMLDivElement>(null);\n * const { isFullscreen, toggle } = useFullscreen(container_ref);\n * return <div ref={container_ref}><button onClick={toggle}>Fullscreen</button></div>;\n */\nexport function useFullscreen(\n elementRef?: RefObject<HTMLElement | null>,\n): UseFullscreenResult {\n const [is_fullscreen, set_is_fullscreen] = useState(false);\n\n // Sync state with actual fullscreen changes (e.g. user pressed Escape)\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const handle_change = () => {\n set_is_fullscreen(!!document.fullscreenElement);\n };\n\n document.addEventListener(\"fullscreenchange\", handle_change);\n // Initial sync in case the element was already fullscreen at mount\n set_is_fullscreen(!!document.fullscreenElement);\n\n return () => document.removeEventListener(\"fullscreenchange\", handle_change);\n }, []);\n\n const get_target = useCallback((): Element => {\n return (elementRef?.current ?? document.documentElement) as Element;\n }, [elementRef]);\n\n const enter = useCallback(async (): Promise<void> => {\n if (typeof document === \"undefined\" || !document.documentElement.requestFullscreen) return;\n if (document.fullscreenElement) return;\n try {\n await get_target().requestFullscreen();\n } catch {\n // SecurityError or user gesture requirement not met\n }\n }, [get_target]);\n\n const exit = useCallback(async (): Promise<void> => {\n if (typeof document === \"undefined\") return;\n if (!document.fullscreenElement) return;\n try {\n await document.exitFullscreen();\n } catch {\n // Silently ignore\n }\n }, []);\n\n const toggle = useCallback(async (): Promise<void> => {\n if (document.fullscreenElement) {\n await exit();\n } else {\n await enter();\n }\n }, [enter, exit]);\n\n return { isFullscreen: is_fullscreen, enter, exit, toggle };\n}\n","\"use client\";\n\n/**\n * Internal kanban card shell. Wraps the consumer's renderCard output with:\n * - useSortable attributes/listeners (whole card is the drag handle)\n * - Priority-tinted left border via CSS custom property\n * - Keyboard-focusable + ARIA hints for screen readers\n *\n * Not exported from src/index.ts — consumers compose via HazoUiKanban's\n * `renderCard` prop, not by mounting this component directly.\n */\n\nimport * as React from \"react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Pencil } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport type { KanbanItem } from \"./types\";\n\ninterface KanbanCardProps {\n item: KanbanItem;\n renderCard: (item: KanbanItem) => React.ReactNode;\n /** Visual hint when this card is the active drag (rendered into DragOverlay). */\n dragging?: boolean;\n cardClassName?: string;\n /** When true and onEditRequest is provided, show the pencil overlay. */\n showEdit?: boolean;\n /** Called when the user clicks the pencil. */\n onEditRequest?: (item: KanbanItem) => void;\n}\n\nexport function KanbanCard({\n item,\n renderCard,\n dragging = false,\n cardClassName,\n showEdit = false,\n onEditRequest,\n}: KanbanCardProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: item.id, data: { columnKey: item.columnKey } });\n\n const priority_var = item.priority\n ? `--hazo-kanban-priority-${String(item.priority).toLowerCase()}`\n : null;\n\n const style: React.CSSProperties = {\n transform: CSS.Transform.toString(transform),\n transition,\n backgroundColor: \"hsl(var(--hazo-kanban-card-bg))\",\n border: `1px solid hsl(var(--hazo-kanban-card-border))`,\n borderLeft: priority_var\n ? `4px solid hsl(var(${priority_var}))`\n : `1px solid hsl(var(--hazo-kanban-card-border))`,\n opacity: isDragging && !dragging ? 0.4 : 1,\n cursor: \"grab\",\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n \"cls_hazo_kanban_card group relative rounded-md p-3 mb-2 select-none\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n dragging && \"cls_hazo_kanban_card_overlay shadow-lg\",\n cardClassName,\n )}\n {...attributes}\n {...listeners}\n role=\"button\"\n tabIndex={0}\n aria-roledescription=\"draggable card\"\n aria-grabbed={isDragging}\n >\n {showEdit && onEditRequest && !dragging && (\n <button\n type=\"button\"\n onPointerDown={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation();\n onEditRequest(item);\n }}\n aria-label={`Edit ${item.id}`}\n className={cn(\n \"cls_hazo_kanban_card_edit absolute top-1.5 right-1.5\",\n \"p-1 rounded-md text-muted-foreground hover:text-foreground hover:bg-accent\",\n \"opacity-0 group-hover:opacity-100 group-focus-within:opacity-100\",\n \"focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"transition-opacity duration-150\",\n )}\n tabIndex={0}\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </button>\n )}\n {renderCard(item)}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * Internal kanban column shell. Renders the column header (title + count\n * badge), wraps cards in a SortableContext, and acts as a useDroppable\n * target so empty columns still accept drops.\n *\n * Not exported from src/index.ts.\n */\n\nimport * as React from \"react\";\nimport { useDroppable } from \"@dnd-kit/core\";\nimport {\n SortableContext,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { cn } from \"../../lib/utils\";\nimport { KanbanCard } from \"./kanban_card\";\nimport type { KanbanColumn as KanbanColumnType, KanbanItem } from \"./types\";\n\ninterface KanbanColumnComponentProps {\n column: KanbanColumnType;\n items: KanbanItem[];\n renderCard: (item: KanbanItem) => React.ReactNode;\n emptyColumn: React.ReactNode;\n cardClassName?: string;\n showEdit?: boolean;\n onEditRequest?: (item: KanbanItem) => void;\n}\n\nexport function KanbanColumn({\n column,\n items,\n renderCard,\n emptyColumn,\n cardClassName,\n showEdit,\n onEditRequest,\n}: KanbanColumnComponentProps) {\n const { setNodeRef, isOver } = useDroppable({\n id: `column:${column.key}`,\n data: { columnKey: column.key, isColumn: true },\n });\n\n return (\n <div\n ref={setNodeRef}\n className={cn(\n \"cls_hazo_kanban_column flex flex-col rounded-md p-2\",\n isOver && \"cls_hazo_kanban_column_over bg-accent/30 ring-2 ring-ring/40\",\n )}\n >\n <div className=\"cls_hazo_kanban_column_head flex items-center justify-between mb-2 px-1 text-xs uppercase tracking-wider text-muted-foreground\">\n <span className=\"cls_hazo_kanban_column_title\">{column.title}</span>\n <span className=\"cls_hazo_kanban_column_count rounded-full bg-muted px-2 py-0.5 text-foreground\">\n {items.length}\n </span>\n </div>\n <SortableContext\n items={items.map((i) => i.id)}\n strategy={verticalListSortingStrategy}\n >\n <div className=\"cls_hazo_kanban_column_body flex-1 min-h-[40px]\">\n {items.length === 0 ? (\n <div className=\"cls_hazo_kanban_column_empty text-xs text-muted-foreground py-2 px-1\">\n {emptyColumn}\n </div>\n ) : (\n items.map((item) => (\n <KanbanCard\n key={item.id}\n item={item}\n renderCard={renderCard}\n cardClassName={cardClassName}\n showEdit={showEdit}\n onEditRequest={onEditRequest}\n />\n ))\n )}\n </div>\n </SortableContext>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * KanbanEditor — internal Dialog + form component invoked when the user\n * clicks the pencil icon on a card.\n *\n * Three rendering modes:\n * 1. renderBody provided → consumer's render-prop fills the body\n * 2. fields provided → library renders one row per field declaration\n * 3. neither → library auto-detects string fields on the item\n * and appends a Status row at the end\n *\n * Built on HazoUiDialog so we inherit the standardized header/footer,\n * accessibility (DialogTitle + DialogDescription pair), and the priority-\n * tinted header bar option.\n *\n * The orchestrator owns the \"which item is being edited\" state and the\n * onSave callback. This component owns the draft, saving, and error state\n * so keystrokes don't re-render the orchestrator.\n *\n * Not exported from src/index.ts — consumers interact via HazoUiKanban props.\n */\n\nimport * as React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { Input } from \"../ui/input\";\nimport { Textarea } from \"../ui/textarea\";\nimport { Checkbox } from \"../ui/checkbox\";\nimport { Label } from \"../ui/label\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport { HazoUiDialog } from \"../hazo_ui_dialog\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n KanbanColumn,\n KanbanEditorCtx,\n KanbanEditorField,\n KanbanItem,\n KanbanPriority,\n KanbanSaveEvent,\n} from \"./types\";\n\nconst DEFAULT_PRIORITIES: KanbanPriority[] = [\"P0\", \"P1\", \"P2\", \"P3\"];\n\n/**\n * \"dueDate\" -> \"Due Date\"; \"due_date\" -> \"Due Date\"; \"title\" -> \"Title\".\n */\nfunction humanize(key: string): string {\n return key\n .replace(/[_\\-]+/g, \" \")\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/\\s+/g, \" \")\n .trim()\n .split(\" \")\n .map((w) => (w ? w[0].toUpperCase() + w.slice(1) : w))\n .join(\" \");\n}\n\n/**\n * Auto-detect string fields on an item, skipping kanban-internal keys\n * (id, columnKey, priority). Numbers, booleans, arrays, and objects are\n * intentionally skipped — consumers can opt-in via the editorFields prop.\n *\n * If `columns` is provided, a Status field bound to `columnKey` is appended\n * at the end so users can move the card between columns from the editor.\n */\nfunction auto_detect_fields(\n item: KanbanItem,\n columns: KanbanColumn[],\n): KanbanEditorField[] {\n const skip = new Set([\"id\", \"columnKey\", \"priority\"]);\n const out: KanbanEditorField[] = [];\n for (const [key, value] of Object.entries(item)) {\n if (skip.has(key)) continue;\n if (typeof value === \"string\") {\n out.push({ key, type: \"text\" });\n }\n }\n if (columns.length > 0) {\n out.push({ key: \"columnKey\", type: \"status\", label: \"Status\" });\n }\n return out;\n}\n\ninterface KanbanEditorProps<T extends KanbanItem = KanbanItem> {\n /** The item being edited. Null means dialog closed. */\n item: T | null;\n /** All columns the kanban knows about — used by `type: 'status'`. */\n columns?: KanbanColumn[];\n /** Declarative field schema. If undefined, auto-detect. */\n fields?: KanbanEditorField[];\n /** Priority pool for type:'priority'. */\n priorities?: KanbanPriority[];\n /** Dialog title function. */\n titleFn?: (item: T) => string;\n /** Body override. */\n renderBody?: (item: T, ctx: KanbanEditorCtx<T>) => React.ReactNode;\n /** Hide the library's Save/Cancel footer (only honored with renderBody). */\n hideFooter?: boolean;\n /** Save handler. */\n onSave?: (event: KanbanSaveEvent<T>) => void | Promise<void>;\n /** Close handler — orchestrator clears editing_item_id. */\n onClose: () => void;\n}\n\nexport function KanbanEditor<T extends KanbanItem = KanbanItem>({\n item,\n columns,\n fields,\n priorities,\n titleFn,\n renderBody,\n hideFooter = false,\n onSave,\n onClose,\n}: KanbanEditorProps<T>) {\n // Draft is editor-local — orchestrator only knows which item is being\n // edited, not the keystroke-by-keystroke draft state.\n const [draft, set_draft] = React.useState<T | null>(item);\n const [saving, set_saving] = React.useState(false);\n const [error, set_error] = React.useState<string | null>(null);\n\n // Re-seed draft when a different item starts editing. Compare on id\n // (not reference) so the consumer can pass a fresh object each render\n // without re-seeding.\n const item_id = item?.id ?? null;\n React.useEffect(() => {\n set_draft(item);\n set_error(null);\n set_saving(false);\n }, [item_id]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const resolved_columns = columns ?? [];\n const resolved_priorities = priorities ?? DEFAULT_PRIORITIES;\n\n // Resolve which fields to render.\n const resolved_fields = React.useMemo<KanbanEditorField[]>(() => {\n if (fields) return fields;\n if (!item) return [];\n return auto_detect_fields(item, resolved_columns);\n }, [fields, item, resolved_columns]);\n\n // Required-field gating (only meaningful for text/textarea/number).\n const required_keys = React.useMemo(\n () =>\n resolved_fields\n .filter(\n (f) =>\n f.required &&\n (f.type === \"text\" || f.type === \"textarea\" || f.type === \"number\"),\n )\n .map((f) => f.key),\n [resolved_fields],\n );\n\n const all_required_filled = React.useMemo(() => {\n if (!draft) return false;\n for (const key of required_keys) {\n const v = (draft as unknown as Record<string, unknown>)[key];\n if (v === undefined || v === null || v === \"\") return false;\n if (typeof v === \"string\" && v.trim() === \"\") return false;\n }\n return true;\n }, [draft, required_keys]);\n\n const is_dirty = React.useMemo(() => {\n if (!draft || !item) return false;\n try {\n return JSON.stringify(draft) !== JSON.stringify(item);\n } catch {\n return draft !== item;\n }\n }, [draft, item]);\n\n const handle_save = React.useCallback(async () => {\n if (!draft || !item) return;\n if (saving) return;\n set_error(null);\n if (!onSave) {\n onClose();\n return;\n }\n const result = onSave({ itemId: item.id, item, next: draft });\n if (result && typeof (result as Promise<void>).then === \"function\") {\n set_saving(true);\n try {\n await result;\n set_saving(false);\n onClose();\n } catch (err) {\n set_saving(false);\n const message = err instanceof Error ? err.message : String(err);\n set_error(message);\n }\n } else {\n onClose();\n }\n }, [draft, item, onSave, onClose, saving]);\n\n const ctx: KanbanEditorCtx<T> = {\n draft: (draft ?? item) as T,\n setDraft: (next) => {\n set_draft((prev) => {\n const base = prev ?? item;\n if (!base) return prev;\n if (typeof next === \"function\") {\n return (next as (p: T) => T)(base as T);\n }\n return next as T;\n });\n },\n save: handle_save,\n close: onClose,\n saving,\n error,\n isDirty: is_dirty,\n };\n\n const open = item !== null;\n const title = item && titleFn ? titleFn(item) : item ? `Edit ${item.id}` : \"\";\n\n // Priority-tinted header bar for visual continuity with the kanban grid.\n const priority_var = item?.priority\n ? `--hazo-kanban-priority-${String(item.priority).toLowerCase()}`\n : null;\n const header_bar_color = priority_var\n ? `hsl(var(${priority_var}))`\n : undefined;\n\n // Footer wiring: HazoUiDialog renders Save/Cancel by default. When the\n // consumer supplies a renderBody AND requests hideFooter, we pass an\n // empty footer slot so their custom buttons (via ctx.save/ctx.close) are\n // the only controls. In all other cases, HazoUiDialog's default footer\n // is correct.\n const use_default_footer = !(renderBody && hideFooter);\n\n return (\n <HazoUiDialog\n open={open}\n onOpenChange={(o) => {\n if (!o && !saving) onClose();\n }}\n title={title}\n description=\"Update card details below.\"\n sizeWidth=\"min(90vw, 480px)\"\n openAnimation=\"none\"\n closeAnimation=\"none\"\n headerBar={!!priority_var}\n headerBarColor={header_bar_color}\n contentClassName={cn(\"cls_hazo_kanban_editor\", priority_var && \"pt-0\")}\n actionButtonText={saving ? \"Saving…\" : \"Save\"}\n actionButtonIcon={saving ? undefined : <Check className=\"h-4 w-4 mr-2\" />}\n actionButtonLoading={saving}\n actionButtonDisabled={!is_dirty || !all_required_filled || saving}\n cancelButtonText=\"Cancel\"\n showCancelButton={true}\n onConfirm={handle_save}\n onCancel={onClose}\n footerContent={use_default_footer ? undefined : <span />}\n >\n <div className=\"cls_hazo_kanban_editor_body flex flex-col gap-4\">\n {item && draft && renderBody ? (\n renderBody(item, ctx)\n ) : draft ? (\n resolved_fields.map((field) => (\n <KanbanEditorFieldRow\n key={field.key}\n field={field}\n draft={draft as unknown as KanbanItem}\n setDraft={(updater) =>\n set_draft((prev) =>\n prev\n ? (updater(prev as unknown as KanbanItem) as unknown as T)\n : prev,\n )\n }\n priorities={resolved_priorities}\n columns={resolved_columns}\n />\n ))\n ) : null}\n\n {error && (\n <div\n className=\"cls_hazo_kanban_editor_error mt-1 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive\"\n role=\"alert\"\n >\n {error}\n </div>\n )}\n </div>\n </HazoUiDialog>\n );\n}\n\n/* ---------- Internal field row ---------- */\n\ninterface KanbanEditorFieldRowProps {\n field: KanbanEditorField;\n draft: KanbanItem;\n setDraft: (updater: (prev: KanbanItem) => KanbanItem) => void;\n priorities: KanbanPriority[];\n columns: KanbanColumn[];\n}\n\nfunction KanbanEditorFieldRow({\n field,\n draft,\n setDraft,\n priorities,\n columns,\n}: KanbanEditorFieldRowProps) {\n const id = `kanban-editor-${field.key}`;\n const label = field.label ?? humanize(field.key);\n const value = (draft as unknown as Record<string, unknown>)[field.key];\n\n const set_value = (next_value: unknown) => {\n setDraft((prev) => ({ ...prev, [field.key]: next_value }) as KanbanItem);\n };\n\n const required_marker_shown =\n field.required &&\n (field.type === \"text\" ||\n field.type === \"textarea\" ||\n field.type === \"number\");\n\n return (\n <div className={cn(\"cls_hazo_kanban_editor_field flex flex-col gap-1.5\")}>\n <Label htmlFor={id} className=\"text-xs font-medium text-muted-foreground\">\n {label}\n {required_marker_shown && (\n <span className=\"text-destructive ml-0.5\">*</span>\n )}\n </Label>\n {field.type === \"text\" && (\n <Input\n id={id}\n value={typeof value === \"string\" ? value : \"\"}\n placeholder={field.placeholder}\n onChange={(e) => set_value(e.target.value)}\n />\n )}\n {field.type === \"textarea\" && (\n <Textarea\n id={id}\n value={typeof value === \"string\" ? value : \"\"}\n placeholder={field.placeholder}\n rows={3}\n onChange={(e) => set_value(e.target.value)}\n />\n )}\n {field.type === \"number\" && (\n <Input\n id={id}\n type=\"number\"\n value={\n typeof value === \"number\"\n ? value\n : value === \"\" || value == null\n ? \"\"\n : Number(value) || 0\n }\n placeholder={field.placeholder}\n onChange={(e) =>\n set_value(e.target.value === \"\" ? undefined : Number(e.target.value))\n }\n />\n )}\n {field.type === \"checkbox\" && (\n <Checkbox\n id={id}\n checked={!!value}\n onCheckedChange={(checked) => set_value(checked === true)}\n />\n )}\n {field.type === \"select\" && (\n <Select\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={set_value}\n >\n <SelectTrigger id={id}>\n <SelectValue\n placeholder={field.placeholder ?? `Select ${label}…`}\n />\n </SelectTrigger>\n <SelectContent>\n {(field.options ?? []).map((opt) => (\n <SelectItem key={opt} value={opt}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {field.type === \"priority\" && (\n <Select\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={set_value}\n >\n <SelectTrigger id={id}>\n <SelectValue\n placeholder={field.placeholder ?? \"Select priority…\"}\n />\n </SelectTrigger>\n <SelectContent>\n {priorities.map((p) => (\n <SelectItem key={p} value={p}>\n {p}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {field.type === \"status\" && (\n <Select\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={set_value}\n >\n <SelectTrigger id={id}>\n <SelectValue\n placeholder={field.placeholder ?? \"Select status…\"}\n />\n </SelectTrigger>\n <SelectContent>\n {columns.map((col) => (\n <SelectItem key={col.key} value={col.key}>\n {col.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * HazoUiKanbanFilter - controlled-or-uncontrolled filter bar\n *\n * Decoupled from HazoUiKanban. Emits KanbanFilterValue via onChange; consumer\n * applies it to their items (typically via applyKanbanFilter) before passing\n * to the board.\n */\n\nimport * as React from \"react\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { ToggleGroup, ToggleGroupItem } from \"../ui/toggle-group\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n KanbanFilterValue,\n KanbanPriority,\n HazoUiKanbanFilterProps,\n} from \"./types\";\n\nconst EMPTY_FILTER: KanbanFilterValue = {\n search: \"\",\n categories: [],\n priority: null,\n};\n\nexport function HazoUiKanbanFilter({\n search = true,\n searchPlaceholder = \"Search...\",\n categories,\n priorities,\n value,\n defaultValue,\n onChange,\n className,\n}: HazoUiKanbanFilterProps) {\n const is_controlled = value !== undefined;\n const [internal, set_internal] = React.useState<KanbanFilterValue>(\n defaultValue ?? EMPTY_FILTER,\n );\n const current = is_controlled ? (value as KanbanFilterValue) : internal;\n\n const update = React.useCallback(\n (next: KanbanFilterValue) => {\n if (!is_controlled) set_internal(next);\n onChange?.(next);\n },\n [is_controlled, onChange],\n );\n\n const has_active =\n current.search.length > 0 ||\n current.categories.length > 0 ||\n current.priority !== null;\n\n return (\n <div\n className={cn(\n \"cls_hazo_kanban_filter flex flex-wrap items-center gap-3 p-2\",\n className,\n )}\n >\n {search && (\n <Input\n value={current.search}\n onChange={(e) =>\n update({ ...current, search: e.target.value })\n }\n placeholder={searchPlaceholder}\n className=\"cls_hazo_kanban_filter_search w-full sm:w-64\"\n />\n )}\n\n {categories && categories.length > 0 && (\n <ToggleGroup\n type=\"multiple\"\n value={current.categories}\n onValueChange={(cats: string[]) =>\n update({ ...current, categories: cats })\n }\n className=\"cls_hazo_kanban_filter_categories flex flex-wrap gap-1\"\n >\n {categories.map((cat) => (\n <ToggleGroupItem\n key={cat}\n value={cat}\n size=\"sm\"\n className=\"cls_hazo_kanban_filter_category_chip\"\n >\n {cat}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )}\n\n {priorities && priorities.length > 0 && (\n <ToggleGroup\n type=\"single\"\n value={current.priority ?? \"\"}\n onValueChange={(p: string) =>\n update({\n ...current,\n priority: p ? (p as KanbanPriority) : null,\n })\n }\n className=\"cls_hazo_kanban_filter_priority flex gap-1\"\n >\n {priorities.map((p) => (\n <ToggleGroupItem\n key={p}\n value={p}\n size=\"sm\"\n className=\"cls_hazo_kanban_filter_priority_chip\"\n >\n {p}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )}\n\n {has_active && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => update(EMPTY_FILTER)}\n className=\"cls_hazo_kanban_filter_clear\"\n >\n <X className=\"h-4 w-4 mr-1\" />\n Clear\n </Button>\n )}\n </div>\n );\n}\n","/**\n * Pure helper: filters KanbanItem[] by search / categories / priority.\n *\n * - search: case-insensitive substring against any string-typed field of the item.\n * - categories: keep items whose item.category (string) is in the list.\n * - priority: exact equality on item.priority.\n *\n * Consumers needing different filter logic should write their own — this is\n * a convenience export, not the public contract for filtering.\n */\n\nimport type { KanbanFilterValue, KanbanItem } from \"./types\";\n\nexport function applyKanbanFilter<T extends KanbanItem>(\n items: T[],\n filter: KanbanFilterValue,\n): T[] {\n const search = filter.search.trim().toLowerCase();\n\n return items.filter((item) => {\n if (filter.priority && item.priority !== filter.priority) {\n return false;\n }\n\n if (filter.categories.length > 0) {\n const cat = (item as unknown as { category?: unknown }).category;\n if (typeof cat !== \"string\" || !filter.categories.includes(cat)) {\n return false;\n }\n }\n\n if (search) {\n const haystack = Object.values(item as unknown as Record<string, unknown>)\n .filter((v): v is string => typeof v === \"string\")\n .join(\" \")\n .toLowerCase();\n if (!haystack.includes(search)) {\n return false;\n }\n }\n\n return true;\n });\n}\n","\"use client\";\n\n/**\n * HazoUiKanban - drag-drop kanban primitive\n *\n * Wraps @dnd-kit/core + @dnd-kit/sortable. Consumers see only HazoUi*\n * types — no @dnd-kit types leak through the public surface.\n *\n * State model: controlled `items` + library overlay. The consumer owns\n * the `items` array. While a drag is being committed (e.g. an async\n * PATCH), the library tracks an \"overlay\" position internally so the\n * card moves immediately. On commit, the consumer updates `items` and\n * the overlay clears naturally. On failure, the consumer calls\n * event.revert() and the overlay entry is dropped.\n */\n\nimport * as React from \"react\";\nimport {\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n closestCorners,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n} from \"@dnd-kit/core\";\nimport { sortableKeyboardCoordinates } from \"@dnd-kit/sortable\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../ui/tabs\";\nimport { useMediaQuery } from \"../../hooks/use_media_query\";\nimport { cn } from \"../../lib/utils\";\nimport { KanbanCard } from \"./kanban_card\";\nimport { KanbanColumn as KanbanColumnView } from \"./kanban_column\";\nimport { KanbanEditor } from \"./kanban_editor\";\nimport type {\n KanbanAnnouncements,\n KanbanItem,\n KanbanMoveEvent,\n KanbanMoveHandle,\n KanbanReorderEvent,\n HazoUiKanbanProps,\n} from \"./types\";\n\n/* ---------- Re-exports for convenience (consumers also import from hazo_ui) ---------- */\nexport { HazoUiKanbanFilter } from \"./kanban_filter\";\nexport { applyKanbanFilter } from \"./apply_kanban_filter\";\nexport type {\n KanbanAnnouncements,\n KanbanColumn,\n KanbanEditorCtx,\n KanbanEditorField,\n KanbanEditorFieldType,\n KanbanFilterValue,\n KanbanItem,\n KanbanMoveEvent,\n KanbanMoveHandle,\n KanbanPriority,\n KanbanReorderEvent,\n KanbanSaveEvent,\n HazoUiKanbanFilterProps,\n HazoUiKanbanProps,\n} from \"./types\";\n\n/* ---------- Internal overlay state ---------- */\n\ninterface OverlayPosition {\n columnKey: string;\n /** Absolute index within the destination column, computed at drop time. */\n index: number;\n}\n\n/* ---------- Default announcements ---------- */\n\nfunction default_announcements<T extends KanbanItem>(\n itemLabel: (item: T) => string,\n): KanbanAnnouncements {\n return {\n onDragStart: ({ item, fromColumn }) =>\n `Picked up ${itemLabel(item as T)}. Currently in ${fromColumn}. Use arrow keys to choose a different column. Press space to drop, escape to cancel.`,\n onDragOver: ({ item, overColumn }) =>\n overColumn ? `${itemLabel(item as T)} over ${overColumn}.` : \"\",\n onDragEnd: ({ item, fromColumn, toColumn, newIndex }) =>\n fromColumn === toColumn\n ? `${itemLabel(item as T)} reordered to position ${newIndex + 1} in ${toColumn}.`\n : `${itemLabel(item as T)} dropped in ${toColumn}, position ${newIndex + 1}.`,\n onDragCancel: ({ item, fromColumn }) =>\n `Movement cancelled. ${itemLabel(item as T)} returned to ${fromColumn}.`,\n };\n}\n\n/* ---------- Helpers ---------- */\n\nfunction group_items_by_column<T extends KanbanItem>(\n items: T[],\n overlay: Map<string, OverlayPosition>,\n columns: { key: string }[],\n): Map<string, T[]> {\n const out = new Map<string, T[]>();\n for (const col of columns) out.set(col.key, []);\n\n // Apply overlay: re-route items whose id is in the overlay to the overlay's\n // columnKey, but remember the index for ordering.\n const overlay_inserts: Map<string, { item: T; index: number }[]> = new Map();\n for (const col of columns) overlay_inserts.set(col.key, []);\n\n for (const item of items) {\n const ov = overlay.get(item.id);\n if (ov) {\n const bucket = overlay_inserts.get(ov.columnKey);\n if (bucket) {\n bucket.push({ item, index: ov.index });\n }\n } else {\n const bucket = out.get(item.columnKey);\n if (bucket) bucket.push(item);\n }\n }\n\n // Splice overlay items into their target column at the recorded index.\n for (const col of columns) {\n const inserts = overlay_inserts.get(col.key) ?? [];\n inserts.sort((a, b) => a.index - b.index);\n const arr = out.get(col.key) ?? [];\n for (const { item, index } of inserts) {\n const at = Math.max(0, Math.min(index, arr.length));\n arr.splice(at, 0, item);\n }\n out.set(col.key, arr);\n }\n\n return out;\n}\n\n/* ---------- HazoUiKanban ---------- */\n\nexport function HazoUiKanban<T extends KanbanItem = KanbanItem>({\n columns,\n items,\n renderCard,\n onMove,\n onReorder,\n mobileBreakpoint = 640,\n announcements,\n emptyColumn = \"—\",\n className,\n cardClassName,\n itemLabel,\n editorFields,\n editorPriorities,\n editorTitle,\n renderCardEditor,\n hideEditorFooter,\n onCardSave,\n disableEdit = false,\n}: HazoUiKanbanProps<T>) {\n const label_fn = React.useCallback(\n (item: T) => (itemLabel ? itemLabel(item) : item.id),\n [itemLabel],\n );\n\n // Stable per-instance ID so dnd-kit's internal aria-describedby IDs are\n // deterministic across SSR/CSR. Without this, multiple boards on one page\n // hydrate with mismatched \"DndDescribedBy-N\" counters between server and\n // client. React.useId() produces a stable, SSR-safe identifier.\n const dnd_context_id = React.useId();\n\n const [overlay, set_overlay] = React.useState<Map<string, OverlayPosition>>(\n new Map(),\n );\n const [active_id, set_active_id] = React.useState<string | null>(null);\n const [active_tab, set_active_tab] = React.useState<string>(columns[0]?.key ?? \"\");\n\n // Editor state. editing_item drives the dialog: non-null = open. We re-\n // resolve from items so the editor sees the freshest typed item on each\n // request (cards pass us a KanbanItem because the sub-component doesn't\n // carry T).\n const [editing_item, set_editing_item] = React.useState<T | null>(null);\n\n const show_edit = !disableEdit && typeof onCardSave === \"function\";\n\n const handle_edit_request = React.useCallback(\n (it: KanbanItem) => {\n const typed = items.find((x) => x.id === it.id);\n if (typed) set_editing_item(typed);\n },\n [items],\n );\n\n const handle_editor_close = React.useCallback(() => {\n set_editing_item(null);\n }, []);\n\n // Clear overlay entries that the consumer has now committed in `items`.\n React.useEffect(() => {\n if (overlay.size === 0) return;\n set_overlay((prev) => {\n let changed = false;\n const next = new Map(prev);\n for (const [item_id, pos] of prev.entries()) {\n const item = items.find((i) => i.id === item_id);\n if (item && item.columnKey === pos.columnKey) {\n next.delete(item_id);\n changed = true;\n }\n }\n return changed ? next : prev;\n });\n }, [items, overlay]);\n\n // Group items per column (with overlay applied) — recomputed on every render.\n const grouped = React.useMemo(\n () => group_items_by_column(items, overlay, columns),\n [items, overlay, columns],\n );\n\n const find_item = React.useCallback(\n (id: string): T | undefined => items.find((i) => i.id === id),\n [items],\n );\n\n // dnd-kit sensors. PointerSensor with 5px activation distance; KeyboardSensor\n // wired through sortableKeyboardCoordinates (per @dnd-kit/accessibility).\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n\n /* ----- Announcements: merge consumer overrides over defaults ----- */\n\n const merged_announcements = React.useMemo<KanbanAnnouncements>(() => {\n const defaults = default_announcements<T>(label_fn);\n return {\n onDragStart: announcements?.onDragStart ?? defaults.onDragStart,\n onDragOver: announcements?.onDragOver ?? defaults.onDragOver,\n onDragEnd: announcements?.onDragEnd ?? defaults.onDragEnd,\n onDragCancel: announcements?.onDragCancel ?? defaults.onDragCancel,\n };\n }, [announcements, label_fn]);\n\n const dnd_announcements = React.useMemo(\n () => ({\n onDragStart({ active }: { active: { id: string | number } }) {\n const id = String(active.id);\n const item = find_item(id);\n if (!item) return \"\";\n const col = columns.find((c) => c.key === item.columnKey);\n return merged_announcements.onDragStart({\n item,\n fromColumn: col?.title ?? item.columnKey,\n });\n },\n onDragOver({\n active,\n over,\n }: {\n active: { id: string | number };\n over: { id: string | number; data?: { current?: { columnKey?: string } } } | null;\n }) {\n const id = String(active.id);\n const item = find_item(id);\n if (!item) return \"\";\n const over_col_key = over\n ? (over.data?.current?.columnKey as string | undefined) ??\n String(over.id).replace(/^column:/, \"\")\n : null;\n const col = over_col_key\n ? columns.find((c) => c.key === over_col_key)\n : null;\n return merged_announcements.onDragOver({\n item,\n overColumn: col?.title ?? null,\n });\n },\n onDragEnd({\n active,\n over,\n }: {\n active: { id: string | number };\n over: { id: string | number; data?: { current?: { columnKey?: string } } } | null;\n }) {\n const id = String(active.id);\n const item = find_item(id);\n if (!item) return \"\";\n const from_col = columns.find((c) => c.key === item.columnKey);\n const over_col_key = over\n ? (over.data?.current?.columnKey as string | undefined) ??\n String(over.id).replace(/^column:/, \"\")\n : null;\n const to_col = over_col_key\n ? columns.find((c) => c.key === over_col_key) ?? from_col\n : from_col;\n const target = over_col_key\n ? grouped.get(over_col_key) ?? []\n : grouped.get(item.columnKey) ?? [];\n const new_index =\n over && String(over.id) !== `column:${over_col_key}`\n ? target.findIndex((it) => it.id === String(over.id))\n : target.length;\n return merged_announcements.onDragEnd({\n item,\n fromColumn: from_col?.title ?? item.columnKey,\n toColumn: to_col?.title ?? item.columnKey,\n newIndex: Math.max(0, new_index),\n });\n },\n onDragCancel({ active }: { active: { id: string | number } }) {\n const id = String(active.id);\n const item = find_item(id);\n if (!item) return \"\";\n const col = columns.find((c) => c.key === item.columnKey);\n return merged_announcements.onDragCancel({\n item,\n fromColumn: col?.title ?? item.columnKey,\n });\n },\n }),\n [find_item, columns, grouped, merged_announcements],\n );\n\n /* ----- Drag handlers ----- */\n\n const handle_drag_start = React.useCallback((event: DragStartEvent) => {\n set_active_id(String(event.active.id));\n }, []);\n\n const make_revert_handle = React.useCallback(\n (item_id: string): KanbanMoveHandle => ({\n revert: () => {\n set_overlay((prev) => {\n if (!prev.has(item_id)) return prev;\n const next = new Map(prev);\n next.delete(item_id);\n return next;\n });\n },\n }),\n [],\n );\n\n const handle_drag_end = React.useCallback(\n (event: DragEndEvent) => {\n const active_id_str = String(event.active.id);\n set_active_id(null);\n const item = find_item(active_id_str);\n if (!item) return;\n if (!event.over) return;\n\n const over_id = String(event.over.id);\n const over_data = event.over.data?.current as\n | { columnKey?: string; isColumn?: boolean }\n | undefined;\n const dest_column_key =\n over_data?.columnKey ?? over_id.replace(/^column:/, \"\");\n const dest_column = columns.find((c) => c.key === dest_column_key);\n if (!dest_column) return;\n\n // accepts() gate\n if (dest_column.accepts && !dest_column.accepts(item)) return;\n\n // Compute destination index. If dropped on a card, use its index in dest;\n // if dropped on the column shell (empty), append.\n const dest_items_pre_overlay = grouped.get(dest_column_key) ?? [];\n let new_index: number;\n if (over_data?.isColumn) {\n new_index = dest_items_pre_overlay.length;\n } else {\n const idx = dest_items_pre_overlay.findIndex((i) => i.id === over_id);\n new_index = idx === -1 ? dest_items_pre_overlay.length : idx;\n }\n\n const handle = make_revert_handle(active_id_str);\n\n if (item.columnKey === dest_column_key) {\n // Same-column reorder\n if (active_id_str === over_id) return;\n set_overlay((prev) => {\n const next = new Map(prev);\n next.set(active_id_str, {\n columnKey: dest_column_key,\n index: new_index,\n });\n return next;\n });\n const reorder_event: KanbanReorderEvent<T> = {\n itemId: active_id_str,\n item: item,\n columnKey: dest_column_key,\n newIndex: new_index,\n revert: handle.revert,\n };\n onReorder?.(reorder_event);\n return;\n }\n\n // Cross-column move\n set_overlay((prev) => {\n const next = new Map(prev);\n next.set(active_id_str, {\n columnKey: dest_column_key,\n index: new_index,\n });\n return next;\n });\n const move_event: KanbanMoveEvent<T> = {\n itemId: active_id_str,\n item: item,\n fromColumn: item.columnKey,\n toColumn: dest_column_key,\n newIndex: new_index,\n revert: handle.revert,\n };\n onMove?.(move_event);\n },\n [find_item, columns, grouped, onMove, onReorder, make_revert_handle],\n );\n\n const handle_drag_cancel = React.useCallback(() => {\n set_active_id(null);\n }, []);\n\n /* ----- Render ----- */\n\n const active_item = active_id ? find_item(active_id) : null;\n\n // Layout switch:\n // - Default mobileBreakpoint (640): pure CSS via Tailwind sm:* utilities.\n // Both trees render server-side; CSS hides one. No hydration mismatch.\n // - Custom mobileBreakpoint: useMediaQuery drives a runtime branch.\n // SSR returns false → desktop renders first, may flip to mobile after\n // hydration. Both trees still render so the DndContext sees them.\n const is_custom_breakpoint = mobileBreakpoint !== 640;\n const is_mobile_via_query = useMediaQuery(\n `(max-width: ${Math.max(0, mobileBreakpoint - 1)}px)`,\n );\n\n const mobile_classes = is_custom_breakpoint\n ? is_mobile_via_query\n ? \"block\"\n : \"hidden\"\n : \"sm:hidden\";\n\n const desktop_classes = is_custom_breakpoint\n ? is_mobile_via_query\n ? \"hidden\"\n : \"grid\"\n : \"hidden sm:grid\";\n\n return (\n <DndContext\n id={dnd_context_id}\n sensors={sensors}\n collisionDetection={closestCorners}\n onDragStart={handle_drag_start}\n onDragEnd={handle_drag_end}\n onDragCancel={handle_drag_cancel}\n accessibility={{ announcements: dnd_announcements }}\n >\n <div className={cn(\"cls_hazo_kanban w-full\", className)}>\n {/* Mobile: tab strip */}\n <div className={cn(\"cls_hazo_kanban_mobile\", mobile_classes)}>\n <Tabs value={active_tab} onValueChange={set_active_tab}>\n <TabsList className=\"grid w-full\" style={{ gridTemplateColumns: `repeat(${columns.length}, 1fr)` }}>\n {columns.map((col) => {\n const count = (grouped.get(col.key) ?? []).length;\n return (\n <TabsTrigger key={col.key} value={col.key} className=\"flex flex-col gap-0.5\">\n <span className=\"text-xs\">{col.title}</span>\n <span className=\"text-[10px] text-muted-foreground\">{count}</span>\n </TabsTrigger>\n );\n })}\n </TabsList>\n {columns.map((col) => (\n <TabsContent key={col.key} value={col.key} className=\"mt-3\">\n <KanbanColumnView\n column={col}\n items={grouped.get(col.key) ?? []}\n renderCard={renderCard as (i: KanbanItem) => React.ReactNode}\n emptyColumn={emptyColumn}\n cardClassName={cardClassName}\n showEdit={show_edit}\n onEditRequest={handle_edit_request}\n />\n </TabsContent>\n ))}\n </Tabs>\n </div>\n\n {/* Desktop: column grid */}\n <div\n className={cn(\"cls_hazo_kanban_desktop gap-3\", desktop_classes)}\n style={{ gridTemplateColumns: `repeat(${columns.length}, minmax(0, 1fr))` }}\n >\n {columns.map((col) => (\n <KanbanColumnView\n key={col.key}\n column={col}\n items={grouped.get(col.key) ?? []}\n renderCard={renderCard as (i: KanbanItem) => React.ReactNode}\n emptyColumn={emptyColumn}\n cardClassName={cardClassName}\n showEdit={show_edit}\n onEditRequest={handle_edit_request}\n />\n ))}\n </div>\n\n <DragOverlay>\n {active_item ? (\n <KanbanCard\n item={active_item}\n renderCard={renderCard as (i: KanbanItem) => React.ReactNode}\n dragging\n cardClassName={cardClassName}\n />\n ) : null}\n </DragOverlay>\n </div>\n <KanbanEditor<T>\n item={editing_item}\n columns={columns}\n fields={editorFields}\n priorities={editorPriorities}\n titleFn={editorTitle}\n renderBody={renderCardEditor}\n hideFooter={hideEditorFooter}\n onSave={onCardSave}\n onClose={handle_editor_close}\n />\n </DndContext>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"cls_table_wrap relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n);\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n )\n);\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n);\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\"bg-muted/50 font-medium [&>tr]:last:border-b-0\", className)}\n {...props}\n />\n )\n);\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n )\n);\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n);\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n )\n);\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n);\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","\"use client\";\n\n/**\n * Mobile fallback for HazoUiTable. Renders a Card per row with the\n * first column as the title and the remaining columns as label/value\n * rows. Toolbar and pagination are rendered by the parent component.\n */\n\nimport * as React from \"react\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../ui/card\";\nimport { cn } from \"../../lib/utils\";\nimport type { TableColumn } from \"./types\";\n\ninterface TableMobileCardsProps<TRow extends object> {\n columns: TableColumn<TRow>[];\n rows: TRow[];\n getRowKey?: (row: TRow, index: number) => string | number;\n onRowClick?: (row: TRow, index: number) => void;\n renderCell: (column: TableColumn<TRow>, row: TRow, index: number) => React.ReactNode;\n}\n\nexport function TableMobileCards<TRow extends object>(\n props: TableMobileCardsProps<TRow>\n) {\n const { columns, rows, getRowKey, onRowClick, renderCell } = props;\n const [titleCol, ...restCols] = columns;\n if (!titleCol) return null;\n\n return (\n <div className=\"cls_hazo_ui_table_mobile_cards flex flex-col gap-3\">\n {rows.map((row, i) => {\n const interactionProps = onRowClick\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n className: \"cls_hazo_ui_table_mobile_card_clickable cursor-pointer\",\n onClick: () => onRowClick(row, i),\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(row, i);\n }\n },\n }\n : {};\n\n return (\n <Card\n key={getRowKey ? getRowKey(row, i) : i}\n {...interactionProps}\n >\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-base\">\n {renderCell(titleCol, row, i)}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"pt-0 space-y-1.5\">\n {restCols.map((c) => (\n <div\n key={c.key}\n className={cn(\n \"cls_hazo_ui_table_mobile_row flex items-center justify-between gap-3 text-sm\"\n )}\n >\n <span className=\"cls_hazo_ui_table_mobile_label text-muted-foreground\">\n {c.label}\n </span>\n <span className={cn(\"cls_hazo_ui_table_mobile_value\", c.className)}>\n {renderCell(c, row, i)}\n </span>\n </div>\n ))}\n </CardContent>\n </Card>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n TableColumn,\n TableFilter,\n TableSort,\n TableSortProp,\n HazoUiTableProps,\n} from \"./types\";\nimport type { FilterConfig } from \"../hazo_ui_multi_filter_dialog\";\n\nconst DEFAULT_DEBOUNCE_MS = 200;\n\n/* ============================================================\n * Public hook\n * ============================================================ */\n\nexport interface UseTableStateResult<TRow> {\n sort: TableSort;\n setSort: (sort: TableSort) => void;\n cycleHeaderSort: (key: string, append?: boolean) => void;\n\n filter: TableFilter;\n setFilter: (filter: TableFilter) => void;\n setSearch: (search: string) => void;\n\n page: number;\n setPage: (page: number) => void;\n\n displayed: TRow[];\n totalAfterFilter: number;\n pageSize: number;\n /** Set when an `onLoad` promise rejects; cleared by the next request. Always `null` in in-memory mode. */\n serverError: unknown | null;\n}\n\nexport function useTableState<TRow extends object>(\n props: HazoUiTableProps<TRow>\n): UseTableStateResult<TRow> {\n // Sort — controlled or uncontrolled\n const [sortInternal, setSortInternal] = useState<TableSort>(() =>\n normalizeSortProp(props.defaultSort)\n );\n const isSortControlled = props.sort !== undefined;\n const sort = isSortControlled\n ? normalizeSortProp(props.sort)\n : sortInternal;\n\n const setSort = useCallback(\n (next: TableSort) => {\n if (!isSortControlled) setSortInternal(next);\n props.onSortChange?.(next);\n },\n [isSortControlled, props.onSortChange]\n );\n\n const cycleHeaderSort = useCallback(\n (key: string, append?: boolean) => {\n const next = append\n ? cycleAppendColumn(sort, key)\n : cycleSingleColumn(sort, key);\n setSort(next);\n },\n [sort, setSort]\n );\n\n // Filter — controlled or uncontrolled\n const [filterInternal, setFilterInternal] = useState<TableFilter>(\n () => props.defaultFilter ?? {}\n );\n const isFilterControlled = props.filter !== undefined;\n const filter = isFilterControlled ? props.filter! : filterInternal;\n\n const setFilter = useCallback(\n (next: TableFilter) => {\n if (!isFilterControlled) setFilterInternal(next);\n props.onFilterChange?.(next);\n },\n [isFilterControlled, props.onFilterChange]\n );\n\n // Debounced search separate from filter.search so that typing doesn't\n // re-run the pipeline on every keystroke.\n const [searchDraft, setSearchDraft] = useState<string>(\n filter.search ?? \"\"\n );\n const debounceMs = props.searchDebounceMs ?? DEFAULT_DEBOUNCE_MS;\n useEffect(() => {\n const handle = setTimeout(() => {\n if (searchDraft === (filter.search ?? \"\")) return;\n setFilter({ ...filter, search: searchDraft || undefined });\n }, debounceMs);\n return () => clearTimeout(handle);\n // We deliberately omit `filter` to avoid resetting the debounce on\n // every filter-fields change; only searchDraft drives the timer.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchDraft, debounceMs]);\n const setSearch = useCallback((s: string) => setSearchDraft(s), []);\n\n // Page — controlled or uncontrolled\n const [pageInternal, setPageInternal] = useState<number>(\n () => props.defaultPage ?? 0\n );\n const isPageControlled = props.page !== undefined;\n const page = isPageControlled ? props.page! : pageInternal;\n const setPage = useCallback(\n (next: number) => {\n if (!isPageControlled) setPageInternal(next);\n props.onPageChange?.(next);\n },\n [isPageControlled, props.onPageChange]\n );\n\n // Reset page to 0 when filter or sort changes (uncontrolled only).\n const prevSortKey = useRef(serializeSort(sort));\n const prevFilterKey = useRef(serializeFilter(filter));\n useEffect(() => {\n const sk = serializeSort(sort);\n const fk = serializeFilter(filter);\n if (sk !== prevSortKey.current || fk !== prevFilterKey.current) {\n if (!isPageControlled) setPageInternal(0);\n prevSortKey.current = sk;\n prevFilterKey.current = fk;\n }\n }, [sort, filter, isPageControlled]);\n\n // ───── Pipeline ─────\n const pageSize =\n props.pagination && typeof props.pagination === \"object\"\n ? props.pagination.pageSize\n : 0;\n\n const isServerMode = typeof props.onLoad === \"function\";\n\n // In-memory pipeline (only used when no onLoad)\n const filtered = useMemo(\n () => (isServerMode ? props.rows : applyFilter(props.rows, filter, props.columns)),\n [props.rows, filter, props.columns, isServerMode]\n );\n const sorted = useMemo(\n () => (isServerMode ? filtered : applySort(filtered, sort)),\n [filtered, sort, isServerMode]\n );\n const pagedInMemory = useMemo(() => {\n if (isServerMode || pageSize <= 0) return sorted;\n const start = page * pageSize;\n return sorted.slice(start, start + pageSize);\n }, [sorted, page, pageSize, isServerMode]);\n\n // Server-mode result state\n const [serverRows, setServerRows] = useState<TRow[]>([]);\n const [serverTotal, setServerTotal] = useState<number>(0);\n const [serverError, setServerError] = useState<unknown | null>(null);\n const reqIdRef = useRef(0);\n\n useEffect(() => {\n if (!isServerMode) return;\n const myId = ++reqIdRef.current;\n let cancelled = false;\n setServerError(null);\n Promise.resolve(\n props.onLoad!({ page, sort, filter })\n )\n .then((res) => {\n if (cancelled || myId !== reqIdRef.current) return;\n setServerRows(res.rows);\n setServerTotal(res.total);\n })\n .catch((err) => {\n if (cancelled || myId !== reqIdRef.current) return;\n console.warn(\"[HazoUiTable] onLoad rejected:\", err);\n setServerRows([]);\n setServerTotal(0);\n setServerError(err ?? new Error(\"onLoad rejected\"));\n });\n return () => {\n cancelled = true;\n };\n }, [isServerMode, page, sort, filter, props.onLoad]);\n\n const displayed = isServerMode ? serverRows : pagedInMemory;\n const totalAfterFilter = isServerMode ? serverTotal : filtered.length;\n\n return {\n sort,\n setSort,\n cycleHeaderSort,\n filter,\n setFilter,\n setSearch,\n page,\n setPage,\n displayed,\n totalAfterFilter,\n pageSize,\n serverError: isServerMode ? serverError : null,\n };\n}\n\n/* ============================================================\n * Helpers — exported for use_table_state but also for tests/inspection\n * ============================================================ */\n\nexport function normalizeSortProp(p: TableSortProp | undefined): TableSort {\n if (!p) return [];\n if (Array.isArray(p)) return p;\n return [p];\n}\n\nexport function cycleSingleColumn(\n current: TableSort,\n key: string\n): TableSort {\n // Multi-column sort active → header click replaces with single-column asc.\n if (current.length !== 1) return [{ key, dir: \"asc\" }];\n const only = current[0];\n if (only.key !== key) return [{ key, dir: \"asc\" }];\n if (only.dir === \"asc\") return [{ key, dir: \"desc\" }];\n return []; // desc → none\n}\n\n/**\n * Shift-click semantics: append the column to the current sort\n * (preserving previously-sorted columns). Cycle the appended column\n * asc → desc → removed.\n */\nexport function cycleAppendColumn(\n current: TableSort,\n key: string\n): TableSort {\n const idx = current.findIndex((s) => s.key === key);\n if (idx === -1) return [...current, { key, dir: \"asc\" }];\n const entry = current[idx];\n if (entry.dir === \"asc\") {\n const next = current.slice();\n next[idx] = { key, dir: \"desc\" };\n return next;\n }\n // desc → remove (preserving order of remaining entries)\n return current.filter((_, i) => i !== idx);\n}\n\nexport function applyFilter<TRow extends object>(\n rows: TRow[],\n filter: TableFilter,\n columns: TableColumn<TRow>[]\n): TRow[] {\n let result = rows;\n\n if (filter.fields && filter.fields.length > 0) {\n result = result.filter((row) =>\n filter.fields!.every((f) => matchesFieldFilter(row, f, columns))\n );\n }\n\n const needle = (filter.search ?? \"\").trim().toLowerCase();\n if (needle.length > 0) {\n const searchKeys = columns.filter(isSearchable).map((c) => c.key);\n if (searchKeys.length > 0) {\n result = result.filter((row) =>\n searchKeys.some((k) =>\n String((row as any)[k] ?? \"\")\n .toLowerCase()\n .includes(needle)\n )\n );\n }\n }\n\n return result;\n}\n\nexport function isSearchable<TRow extends object>(c: TableColumn<TRow>): boolean {\n if (c.searchable !== undefined) return c.searchable;\n switch (c.formatter) {\n case \"number\":\n case \"currency\":\n case \"percent\":\n case \"date\":\n return false;\n default:\n return true;\n }\n}\n\nfunction matchesFieldFilter<TRow extends object>(\n row: TRow,\n f: FilterConfig,\n columns: TableColumn<TRow>[]\n): boolean {\n const col = columns.find((c) => c.key === f.field);\n if (!col || !col.filterType) return true;\n const value = (row as any)[f.field];\n const op = f.operator || \"equals\";\n\n switch (col.filterType) {\n case \"text\": {\n if (f.value === undefined || f.value === \"\") return true;\n return String(value ?? \"\")\n .toLowerCase()\n .includes(String(f.value).toLowerCase());\n }\n case \"number\": {\n const v = Number(value);\n const fv = Number(f.value);\n if (Number.isNaN(v) || Number.isNaN(fv)) return false;\n return numberOp(v, fv, op);\n }\n case \"date\": {\n const v = value instanceof Date ? value : new Date(value);\n const fv = f.value instanceof Date ? f.value : new Date(f.value);\n if (Number.isNaN(v.getTime()) || Number.isNaN(fv.getTime())) return false;\n const ta = new Date(v).setHours(0, 0, 0, 0);\n const tb = new Date(fv).setHours(0, 0, 0, 0);\n return numberOp(ta, tb, op);\n }\n case \"combobox\":\n return String(value) === String(f.value);\n case \"boolean\":\n return Boolean(value) === Boolean(f.value);\n default:\n return true;\n }\n}\n\nfunction numberOp(a: number, b: number, op: string): boolean {\n switch (op) {\n case \"equals\":\n return a === b;\n case \"not_equals\":\n return a !== b;\n case \"greater_than\":\n return a > b;\n case \"less_than\":\n return a < b;\n case \"greater_equal\":\n return a >= b;\n case \"less_equal\":\n return a <= b;\n default:\n return true;\n }\n}\n\nexport function applySort<TRow extends object>(\n rows: TRow[],\n sort: TableSort\n): TRow[] {\n if (sort.length === 0) return rows;\n return [...rows]\n .map((row, idx) => ({ row, idx }))\n .sort((a, b) => {\n for (const entry of sort) {\n const va = (a.row as any)[entry.key];\n const vb = (b.row as any)[entry.key];\n const cmp = compareValues(va, vb);\n if (cmp !== 0) return entry.dir === \"asc\" ? cmp : -cmp;\n }\n return a.idx - b.idx;\n })\n .map((x) => x.row);\n}\n\nfunction compareValues(a: any, b: any): number {\n if (a == null && b == null) return 0;\n if (a == null) return 1;\n if (b == null) return -1;\n if (a instanceof Date && b instanceof Date)\n return a.getTime() - b.getTime();\n if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n return String(a).localeCompare(String(b));\n}\n\nfunction serializeSort(sort: TableSort): string {\n return sort.map((s) => `${s.key}:${s.dir}`).join(\",\");\n}\n\nfunction serializeFilter(filter: TableFilter): string {\n const fields = (filter.fields ?? [])\n .map((f) => `${f.field}:${f.operator ?? \"\"}:${String(f.value)}`)\n .join(\",\");\n return `${filter.search ?? \"\"}|${fields}`;\n}\n","\"use client\";\n\n/**\n * HazoUiTable — column-config-driven data table.\n *\n * Composes the shadcn Table primitive family with the in-memory\n * filter/sort/paginate pipeline from use_table_state, and (in later\n * tasks) the existing HazoUiMultiSortDialog / HazoUiMultiFilterDialog.\n */\n\nimport * as React from \"react\";\nimport { format } from \"date-fns\";\nimport {\n ChevronDown,\n ChevronUp,\n ChevronsUpDown,\n} from \"lucide-react\";\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../ui/table\";\nimport { Input } from \"../ui/input\";\nimport { Button } from \"../ui/button\";\nimport {\n HazoUiMultiSortDialog,\n type SortConfig,\n type SortField,\n} from \"../hazo_ui_multi_sort_dialog\";\nimport {\n HazoUiMultiFilterDialog,\n type FilterField,\n type FilterConfig,\n} from \"../hazo_ui_multi_filter_dialog\";\nimport { cn } from \"../../lib/utils\";\nimport { EmptyState } from \"../empty_state\";\nimport { SkeletonBar } from \"../skeleton\";\nimport { useMediaQuery } from \"../../hooks/use_media_query\";\nimport { Card, CardContent, CardHeader } from \"../ui/card\";\nimport { TableMobileCards } from \"./table_mobile_cards\";\nimport { useTableState } from \"./use_table_state\";\nimport type {\n HazoUiTableProps,\n TableColumn,\n TableFormatter,\n TableSort,\n} from \"./types\";\n\nexport type {\n TableColumn,\n TableSort,\n TableSortEntry,\n TableSortProp,\n TableFilter,\n TableFormatter,\n HazoUiTableProps,\n HazoUiTablePagination,\n HazoUiTableServerLoadArgs,\n HazoUiTableServerLoadResult,\n} from \"./types\";\n\nexport function HazoUiTable<TRow extends object = any>(\n props: HazoUiTableProps<TRow>\n) {\n const state = useTableState<TRow>(props);\n const { columns, rows, getRowKey, className, caption } = props;\n\n const mobileBreakpoint = props.mobileBreakpoint ?? 768;\n const mobileEnabled = props.mobileCardFallback !== false;\n const isNarrow = useMediaQuery(`(max-width: ${mobileBreakpoint - 1}px)`);\n const renderAsCards = mobileEnabled && isNarrow;\n\n return (\n <div className={cn(\"cls_hazo_ui_table_root space-y-3\", className)}>\n {(props.enableSearch || props.enableSortDialog || props.enableFilterDialog) && (\n <Toolbar<TRow>\n columns={columns}\n sort={state.sort}\n onSortChange={state.setSort}\n filter={state.filter}\n onSearchChange={state.setSearch}\n onFilterFieldsChange={(fields) =>\n state.setFilter({ ...state.filter, fields })\n }\n enableSearch={props.enableSearch}\n enableSortDialog={props.enableSortDialog}\n enableFilterDialog={props.enableFilterDialog}\n searchPlaceholder={props.searchPlaceholder}\n />\n )}\n {renderAsCards ? (\n props.loading ? (\n <div className=\"cls_hazo_ui_table_mobile_loading flex flex-col gap-3\">\n {Array.from({ length: Math.max(state.pageSize || 5, 3) }).map(\n (_, i) => (\n <Card key={`mloader-${i}`}>\n <CardHeader className=\"pb-2\">\n <SkeletonBar className=\"w-2/3\" />\n </CardHeader>\n <CardContent className=\"pt-0 space-y-2\">\n <SkeletonBar className=\"w-full\" />\n <SkeletonBar className=\"w-1/2\" />\n </CardContent>\n </Card>\n )\n )}\n </div>\n ) : state.serverError != null ? (\n <div className=\"cls_hazo_ui_table_mobile_error py-6\">\n {renderErrorState(props.error, state.serverError)}\n </div>\n ) : state.displayed.length === 0 ? (\n <div className=\"cls_hazo_ui_table_mobile_empty py-6\">\n {noActiveFilters(state.filter) && rows.length === 0 ? (\n typeof props.empty === \"string\" || props.empty === undefined ? (\n <EmptyState\n title={\n (typeof props.empty === \"string\" && props.empty) ||\n \"No items\"\n }\n />\n ) : (\n props.empty\n )\n ) : typeof props.noResults === \"string\" ||\n props.noResults === undefined ? (\n <EmptyState\n title={\n (typeof props.noResults === \"string\" && props.noResults) ||\n \"No matches — adjust your filters\"\n }\n />\n ) : (\n props.noResults\n )}\n </div>\n ) : (\n <TableMobileCards\n columns={columns}\n rows={state.displayed}\n getRowKey={getRowKey}\n onRowClick={props.onRowClick}\n renderCell={renderCell}\n />\n )\n ) : (\n <Table>\n {caption && <TableCaption>{caption}</TableCaption>}\n <TableHeader>\n <TableRow>\n {columns.map((c) => (\n <TableHead\n key={c.key}\n className={cn(headerAlignClass(c), c.headerClassName)}\n aria-sort={ariaSortFor(state.sort, c.key)}\n >\n {c.sortable ? (\n <button\n type=\"button\"\n onClick={(e) =>\n state.cycleHeaderSort(c.key, e.shiftKey)\n }\n title=\"Click to sort; shift-click to append a secondary sort\"\n className=\"cls_hazo_ui_table_sort_btn inline-flex items-center gap-1 hover:text-foreground\"\n >\n <span>{c.label}</span>\n <SortIndicator sort={state.sort} columnKey={c.key} />\n </button>\n ) : (\n c.label\n )}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {props.loading ? (\n <LoadingRows\n columns={columns}\n count={Math.max(state.pageSize || 5, 3)}\n />\n ) : state.serverError != null ? (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"cls_hazo_ui_table_error_cell p-0\"\n >\n <div className=\"cls_hazo_ui_table_error_wrap py-6\">\n {renderErrorState(props.error, state.serverError)}\n </div>\n </TableCell>\n </TableRow>\n ) : state.displayed.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"cls_hazo_ui_table_empty_cell p-0\"\n >\n {noActiveFilters(state.filter) && rows.length === 0 ? (\n <div className=\"cls_hazo_ui_table_empty_wrap py-6\">\n {typeof props.empty === \"string\" || props.empty === undefined ? (\n <EmptyState\n title={\n (typeof props.empty === \"string\" && props.empty) ||\n \"No items\"\n }\n />\n ) : (\n props.empty\n )}\n </div>\n ) : (\n <div className=\"cls_hazo_ui_table_no_results_wrap py-6\">\n {typeof props.noResults === \"string\" ||\n props.noResults === undefined ? (\n <EmptyState\n title={\n (typeof props.noResults === \"string\" && props.noResults) ||\n \"No matches — adjust your filters\"\n }\n />\n ) : (\n props.noResults\n )}\n </div>\n )}\n </TableCell>\n </TableRow>\n ) : (\n state.displayed.map((row, i) => (\n <TableRow\n key={getRowKey ? getRowKey(row, i) : i}\n {...buildRowProps(row, i, props.onRowClick)}\n >\n {columns.map((c) => (\n <TableCell\n key={c.key}\n className={cn(cellAlignClass(c), c.className)}\n >\n {renderCell(c, row, i)}\n </TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n )}\n {state.pageSize > 0 && (\n <PaginationFooter\n page={state.page}\n pageSize={state.pageSize}\n total={state.totalAfterFilter}\n onPageChange={state.setPage}\n />\n )}\n </div>\n );\n}\n\n/* ============================================================\n * Internal render helpers\n * ============================================================ */\n\nfunction renderCell<TRow extends object>(\n c: TableColumn<TRow>,\n row: TRow,\n i: number\n): React.ReactNode {\n if (c.cell) return c.cell(row, i);\n const raw = (row as any)[c.key];\n return formatValue(raw, c.formatter, c.currency, c.locale);\n}\n\n// Pinned default so SSR (Node) and CSR (browser) agree on number /\n// currency / percent output. `Intl.NumberFormat(undefined, ...)` resolves\n// to the runtime's host locale, which differs between server and client\n// and triggers React hydration text-content errors.\nconst DEFAULT_NUMBER_LOCALE = \"en-US\";\n\nfunction formatValue(\n value: any,\n formatter?: TableFormatter,\n currency?: string,\n locale?: string\n): React.ReactNode {\n if (value === null || value === undefined || value === \"\") return \"—\";\n const lc = locale ?? DEFAULT_NUMBER_LOCALE;\n switch (formatter) {\n case \"date\": {\n const d = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(d.getTime())) return String(value);\n return format(d, \"MMM d, yyyy\");\n }\n case \"number\":\n return new Intl.NumberFormat(lc).format(Number(value));\n case \"currency\":\n return new Intl.NumberFormat(lc, {\n style: \"currency\",\n currency: currency ?? \"USD\",\n }).format(Number(value));\n case \"percent\":\n return new Intl.NumberFormat(lc, {\n style: \"percent\",\n maximumFractionDigits: 2,\n }).format(Number(value));\n default:\n return String(value);\n }\n}\n\nfunction headerAlignClass<TRow extends object>(c: TableColumn<TRow>): string {\n switch (c.align) {\n case \"right\":\n return \"text-right\";\n case \"center\":\n return \"text-center\";\n default:\n return \"text-left\";\n }\n}\n\nfunction cellAlignClass<TRow extends object>(c: TableColumn<TRow>): string {\n switch (c.align) {\n case \"right\":\n return \"text-right\";\n case \"center\":\n return \"text-center\";\n default:\n return \"\";\n }\n}\n\nfunction ariaSortFor(\n sort: TableSort,\n key: string\n): \"ascending\" | \"descending\" | \"none\" {\n const entry = sort.find((s) => s.key === key);\n if (!entry) return \"none\";\n return entry.dir === \"asc\" ? \"ascending\" : \"descending\";\n}\n\nfunction deriveSortFields<TRow extends object>(\n columns: TableColumn<TRow>[]\n): SortField[] {\n return columns\n .filter((c) => c.sortable)\n .map((c) => ({ value: c.key, label: c.label }));\n}\n\nfunction deriveFilterFields<TRow extends object>(\n columns: TableColumn<TRow>[]\n): FilterField[] {\n return columns\n .filter((c) => c.filterType)\n .map((c) => ({\n value: c.key,\n label: c.label,\n type: c.filterType!,\n ...(c.filterConfig ?? {}),\n }));\n}\n\nfunction sortToDialogConfig(sort: TableSort): SortConfig[] {\n return sort.map((s) => ({ field: s.key, direction: s.dir }));\n}\n\nfunction dialogConfigToSort(configs: SortConfig[]): TableSort {\n return configs.map((c) => ({ key: c.field, dir: c.direction }));\n}\n\ninterface PaginationFooterProps {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n}\n\nfunction PaginationFooter({\n page,\n pageSize,\n total,\n onPageChange,\n}: PaginationFooterProps) {\n const start = total === 0 ? 0 : page * pageSize + 1;\n const end = Math.min((page + 1) * pageSize, total);\n const lastPage = Math.max(0, Math.ceil(total / pageSize) - 1);\n\n return (\n <div className=\"cls_hazo_ui_table_pagination flex items-center justify-between gap-3 pt-2 text-sm\">\n <span className=\"cls_hazo_ui_table_page_counter text-muted-foreground\">\n Showing {start}–{end} of {total}\n </span>\n <div className=\"cls_hazo_ui_table_page_buttons flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(Math.max(0, page - 1))}\n disabled={page === 0}\n aria-label=\"Previous page\"\n >\n ‹ Prev\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(Math.min(lastPage, page + 1))}\n disabled={page >= lastPage}\n aria-label=\"Next page\"\n >\n Next ›\n </Button>\n </div>\n </div>\n );\n}\n\ninterface ToolbarProps<TRow extends object> {\n columns: TableColumn<TRow>[];\n sort: TableSort;\n onSortChange: (sort: TableSort) => void;\n filter: { search?: string; fields?: FilterConfig[] };\n onSearchChange: (search: string) => void;\n onFilterFieldsChange: (fields: FilterConfig[]) => void;\n enableSearch?: boolean;\n enableSortDialog?: boolean;\n enableFilterDialog?: boolean;\n searchPlaceholder?: string;\n}\n\nfunction Toolbar<TRow extends object>(props: ToolbarProps<TRow>) {\n const {\n columns,\n sort,\n onSortChange,\n filter,\n onSearchChange,\n onFilterFieldsChange,\n enableSearch,\n enableSortDialog,\n enableFilterDialog,\n searchPlaceholder,\n } = props;\n\n const sortFields = React.useMemo(\n () => deriveSortFields(columns),\n [columns]\n );\n const filterFields = React.useMemo(\n () => deriveFilterFields(columns),\n [columns]\n );\n\n // Local state for the search input — controlled here so typing updates\n // visibly even though the debounced value lives in use_table_state.\n const [searchValue, setSearchValue] = React.useState<string>(\n filter.search ?? \"\"\n );\n React.useEffect(() => {\n setSearchValue(filter.search ?? \"\");\n }, [filter.search]);\n\n return (\n <div className=\"cls_hazo_ui_table_toolbar flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n {enableSearch ? (\n <Input\n type=\"text\"\n value={searchValue}\n onChange={(e) => {\n const v = e.target.value;\n setSearchValue(v);\n onSearchChange(v);\n }}\n placeholder={searchPlaceholder ?? \"Search...\"}\n className=\"cls_hazo_ui_table_search w-full sm:max-w-xs\"\n />\n ) : (\n <div />\n )}\n\n <div className=\"cls_hazo_ui_table_toolbar_right flex items-center gap-2\">\n {enableFilterDialog && filterFields.length > 0 && (\n <HazoUiMultiFilterDialog\n availableFields={filterFields}\n initialFilters={filter.fields ?? []}\n onFilterChange={onFilterFieldsChange}\n />\n )}\n {enableSortDialog && sortFields.length > 0 && (\n <HazoUiMultiSortDialog\n availableFields={sortFields}\n initialSortFields={sortToDialogConfig(sort)}\n onSortChange={(configs) => onSortChange(dialogConfigToSort(configs))}\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction LoadingRows<TRow extends object>({\n columns,\n count,\n}: {\n columns: TableColumn<TRow>[];\n count: number;\n}) {\n return (\n <>\n {Array.from({ length: count }).map((_, rowIdx) => (\n <TableRow key={`skeleton-${rowIdx}`}>\n {columns.map((c) => (\n <TableCell key={c.key} className={cellAlignClass(c)}>\n <SkeletonBar\n className={cn(\n \"cls_hazo_ui_table_skeleton\",\n c.align === \"right\" ? \"w-16 ml-auto\" : \"w-full\"\n )}\n />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </>\n );\n}\n\nfunction noActiveFilters(filter: {\n search?: string;\n fields?: any[];\n}): boolean {\n return !filter.search && (!filter.fields || filter.fields.length === 0);\n}\n\nfunction renderErrorState(\n error: HazoUiTableProps<any>[\"error\"],\n serverError: unknown\n): React.ReactNode {\n if (typeof error === \"function\") return error(serverError);\n if (error !== undefined && error !== null) return error;\n const msg = serverError instanceof Error ? serverError.message : String(serverError);\n return (\n <EmptyState\n title=\"Couldn't load data\"\n description={msg || \"The data source rejected the request.\"}\n />\n );\n}\n\nfunction buildRowProps<TRow extends object>(\n row: TRow,\n index: number,\n onRowClick: ((row: TRow, index: number) => void) | undefined\n): React.HTMLAttributes<HTMLTableRowElement> & { className?: string } {\n if (!onRowClick) return {};\n return {\n role: \"button\",\n tabIndex: 0,\n className: \"cls_hazo_ui_table_row_clickable cursor-pointer\",\n onClick: () => onRowClick(row, index),\n onKeyDown: (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(row, index);\n }\n },\n };\n}\n\nfunction SortIndicator({\n sort,\n columnKey,\n}: {\n sort: TableSort;\n columnKey: string;\n}) {\n const idx = sort.findIndex((s) => s.key === columnKey);\n if (idx === -1) {\n return (\n <ChevronsUpDown className=\"cls_hazo_ui_table_sort_idle h-3.5 w-3.5 opacity-30\" />\n );\n }\n const entry = sort[idx];\n return (\n <span className=\"cls_hazo_ui_table_sort_active inline-flex items-center gap-0.5\">\n {entry.dir === \"asc\" ? (\n <ChevronUp className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronDown className=\"h-3.5 w-3.5\" />\n )}\n {sort.length > 1 && (\n <span className=\"text-[10px] font-medium\">{idx + 1}</span>\n )}\n </span>\n );\n}\n","\"use client\";\n\n/**\n * Sparkline — tiny single-series line for KPI cards.\n *\n * Intentionally axisless (per PRD §6b — sparklines are for trend *shape*,\n * the value is shown above them in the card itself). 12% area fill makes\n * the trajectory readable even at 40px high; a 2px dot marks the latest\n * non-null point so \"now\" is obvious.\n *\n * SVG renders edge-to-edge with `preserveAspectRatio=\"none\"` so the line\n * stretches across whatever width the parent gives it.\n */\n\nimport * as React from \"react\";\nimport type { ChartDataSeries } from \"./types\";\n\nexport interface SparklineProps {\n /** Time-series. `null` entries are skipped. */\n data: ChartDataSeries;\n /** Stroke / dot / area-fill color. */\n color: string;\n /** Container className passthrough. */\n className?: string;\n /** Override the default 40px height. */\n height?: number;\n}\n\nconst VBOX_W = 200;\nconst PAD = 2;\n\nexport function Sparkline({\n data,\n color,\n className,\n height = 40,\n}: SparklineProps): React.ReactElement {\n const vbox_h = height;\n\n const non_null_values = data.filter((v): v is number => v !== null && !Number.isNaN(v));\n if (non_null_values.length === 0) {\n return (\n <svg\n viewBox={`0 0 ${VBOX_W} ${vbox_h}`}\n preserveAspectRatio=\"none\"\n className={className}\n style={{ width: \"100%\", height: `${height}px`, display: \"block\" }}\n />\n );\n }\n\n const mn = Math.min(...non_null_values);\n const mx = Math.max(...non_null_values);\n const rng = mx - mn || 1;\n\n const cx = (i: number): number =>\n data.length <= 1 ? VBOX_W / 2 : PAD + (i * (VBOX_W - 2 * PAD)) / (data.length - 1);\n const cy = (v: number): number => vbox_h - PAD - ((v - mn) * (vbox_h - 2 * PAD)) / rng;\n\n let line_d = \"\";\n data.forEach((v, i) => {\n if (v === null || Number.isNaN(v)) return;\n line_d += `${line_d ? \" L\" : \"M\"}${cx(i).toFixed(1)},${cy(v).toFixed(1)}`;\n });\n\n const first_non_null_idx = data.findIndex((v) => v !== null && !Number.isNaN(v as number));\n const last_idx = data.length - 1;\n const last_v = data[last_idx];\n const area_d =\n line_d &&\n `${line_d} L${cx(last_idx).toFixed(1)},${vbox_h - PAD} L${cx(first_non_null_idx).toFixed(1)},${vbox_h - PAD} Z`;\n\n const has_last = last_v !== null && last_v !== undefined && !Number.isNaN(last_v);\n\n return (\n <svg\n viewBox={`0 0 ${VBOX_W} ${vbox_h}`}\n preserveAspectRatio=\"none\"\n className={className}\n style={{ width: \"100%\", height: `${height}px`, display: \"block\" }}\n >\n {area_d && <path d={area_d} fill={color} fillOpacity={0.1} stroke=\"none\" />}\n {line_d && <path d={line_d} stroke={color} strokeWidth={1.5} fill=\"none\" />}\n {has_last && (\n <circle cx={cx(last_idx)} cy={cy(last_v as number)} r={2} fill={color} />\n )}\n </svg>\n );\n}\n","\"use client\";\n\n/**\n * InverseSparkline — tiny axisless line where lower = better.\n *\n * Used for GSC position trends: rank 1 is best, rank 50 is bad, so the Y\n * axis is flipped relative to a regular sparkline. No area fill, no dot —\n * the only signal is the line's direction. 62×18 by default matches the\n * \"scrollable list of queries\" layout in the GSC deep-dive mockup.\n */\n\nimport * as React from \"react\";\nimport type { ChartDataSeries } from \"./types\";\n\nexport interface InverseSparklineProps {\n /** Time-series (e.g. GSC avg-position values). `null` is skipped. */\n data: ChartDataSeries;\n /** Stroke color. */\n color: string;\n /** Container className passthrough. */\n className?: string;\n /** Override default 62px width. */\n width?: number;\n /** Override default 18px height. */\n height?: number;\n}\n\nconst PAD = 2;\n\nexport function InverseSparkline({\n data,\n color,\n className,\n width = 62,\n height = 18,\n}: InverseSparklineProps): React.ReactElement {\n const non_null_values = data.filter((v): v is number => v !== null && !Number.isNaN(v));\n if (non_null_values.length === 0) {\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className={className}\n style={{ width: `${width}px`, height: `${height}px`, display: \"block\" }}\n />\n );\n }\n\n const mn = Math.min(...non_null_values);\n const mx = Math.max(...non_null_values);\n const rng = mx - mn || 1;\n\n const cx = (i: number): number =>\n data.length <= 1 ? width / 2 : PAD + (i * (width - 2 * PAD)) / (data.length - 1);\n // Inverted: higher value → lower position on screen\n const cy = (v: number): number => PAD + ((v - mn) * (height - 2 * PAD)) / rng;\n\n let line_d = \"\";\n data.forEach((v, i) => {\n if (v === null || Number.isNaN(v)) return;\n line_d += `${line_d ? \" L\" : \"M\"}${cx(i).toFixed(1)},${cy(v).toFixed(1)}`;\n });\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className={className}\n style={{ width: `${width}px`, height: `${height}px`, display: \"block\" }}\n >\n {line_d && <path d={line_d} stroke={color} strokeWidth={1.4} fill=\"none\" />}\n </svg>\n );\n}\n","/**\n * Number/date formatters shared across hazo_ui_charts.\n *\n * Kept as pure, zero-dependency helpers so the chart primitives stay\n * deterministic across SSR/CSR. Locale is intentionally pinned (the same\n * lesson as v2.15.1's Intl fix on HazoUiTable).\n */\n\n/**\n * Compact number formatter used on Y-axis ticks, marker labels, and legends.\n *\n * null / undefined / NaN → empty string\n * ≥ 1,000 → `1.0k`, `12.3k`, `1.0M`\n * integer → no decimals (`14`, `0`)\n * fractional → one decimal (`5.7`)\n *\n * Strings pass through unchanged so callers can pre-format if needed.\n */\nexport function format_num(n: number | null | undefined | string): string {\n if (n === null || n === undefined) return \"\";\n if (typeof n === \"string\") return n;\n if (Number.isNaN(n)) return \"\";\n const abs = Math.abs(n);\n if (abs >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (abs >= 1_000) return `${(n / 1_000).toFixed(1)}k`;\n if (Number.isInteger(n)) return n.toString();\n return n.toFixed(1);\n}\n\n/**\n * Pick three index positions for X-axis labels: start, middle, end.\n * Returns `[0, mid, last]` for length ≥ 3; falls back gracefully below that.\n */\nexport function pick_x_label_indices(length: number): [number, number, number] {\n if (length <= 0) return [0, 0, 0];\n if (length === 1) return [0, 0, 0];\n if (length === 2) return [0, 0, 1];\n return [0, Math.floor(length / 2), length - 1];\n}\n","\"use client\";\n\n/**\n * LineChart — full-anatomy single-series chart (PRD §6b spec).\n *\n * ┌─────────────────────────────────────────────┐\n * │ Y-max ─ - - - - - - - - - - - - - - - - - │ ← three dashed gridlines\n * │ Y-mid ─ - - - - - - - - - - ╭──•value │ ← marker dot + label\n * │ Y-min ─ - - - - - - -╭──────╯ │ + dashed guide to Y-axis\n * │ └───────────────────────────────── │\n * │ Mar 4 Mar 10 Mar 17 │ ← three X labels\n * └─────────────────────────────────────────────┘\n *\n * Hover anywhere over the plot area to surface a cursor line + value\n * bubble at the nearest data point. Set `showTooltip={false}` to disable\n * — useful when the chart is small or non-interactive (print export).\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { format_num, pick_x_label_indices } from \"./format\";\nimport type { ChartDataSeries } from \"./types\";\n\nexport interface LineChartProps {\n /** Time-series. `null` entries are gaps in the line. */\n data: ChartDataSeries;\n /** Labels for the X-axis. Length should match `data`. */\n dates: string[];\n /** Stroke / area / marker color. */\n color: string;\n /** Override default 360-wide viewBox. */\n width?: number;\n /** Override default 130-tall viewBox. */\n height?: number;\n /** Optional suffix shown next to the current-value label (e.g. \"%\"). */\n unit?: string;\n /** Disable hover tooltip. Defaults to enabled. */\n showTooltip?: boolean;\n /** Container className passthrough. */\n className?: string;\n}\n\nconst PAD_LEFT = 38;\nconst PAD_RIGHT = 14;\nconst PAD_TOP = 12;\nconst PAD_BOTTOM = 22;\nconst AXIS_LABEL_COLOR = \"#8b949e\";\nconst GRIDLINE_COLOR = \"#2a3441\";\n\ninterface Geometry {\n vbox_w: number;\n vbox_h: number;\n y_min: number;\n y_max: number;\n cx: (i: number) => number;\n cy: (v: number) => number;\n}\n\nfunction compute_geometry(\n data: ChartDataSeries,\n width: number,\n height: number,\n): Geometry | null {\n const vals = data.filter((v): v is number => v !== null && !Number.isNaN(v));\n if (vals.length === 0) return null;\n\n const mn = Math.min(...vals);\n const mx = Math.max(...vals);\n const rng = mx - mn || mx * 0.1 + 1;\n const y_min = Math.max(0, mn - rng * 0.1);\n const y_max = mx + rng * 0.1;\n const y_rng = y_max - y_min || 1;\n\n const plot_w = width - PAD_LEFT - PAD_RIGHT;\n const plot_h = height - PAD_TOP - PAD_BOTTOM;\n\n return {\n vbox_w: width,\n vbox_h: height,\n y_min,\n y_max,\n cx: (i) => (data.length <= 1 ? PAD_LEFT + plot_w / 2 : PAD_LEFT + (i * plot_w) / (data.length - 1)),\n cy: (v) => PAD_TOP + (1 - (v - y_min) / y_rng) * plot_h,\n };\n}\n\nfunction build_paths(\n data: ChartDataSeries,\n g: Geometry,\n): { line_d: string; area_d: string } {\n let line_d = \"\";\n let first_idx = -1;\n data.forEach((v, i) => {\n if (v === null || Number.isNaN(v)) return;\n if (first_idx === -1) first_idx = i;\n line_d += `${line_d ? \" L\" : \"M\"}${g.cx(i).toFixed(1)},${g.cy(v).toFixed(1)}`;\n });\n const last_idx = data.length - 1;\n const last_v = data[last_idx];\n const area_d =\n line_d && last_v !== null && last_v !== undefined && !Number.isNaN(last_v)\n ? `${line_d} L${g.cx(last_idx).toFixed(1)},${g.vbox_h - PAD_BOTTOM} L${g.cx(first_idx).toFixed(1)},${g.vbox_h - PAD_BOTTOM} Z`\n : \"\";\n return { line_d, area_d };\n}\n\nexport function LineChart({\n data,\n dates,\n color,\n width = 360,\n height = 130,\n unit = \"\",\n showTooltip = true,\n className,\n}: LineChartProps): React.ReactElement {\n const geo = compute_geometry(data, width, height);\n const svg_ref = React.useRef<SVGSVGElement | null>(null);\n const [hover_idx, set_hover_idx] = React.useState<number | null>(null);\n\n const handle_mouse_move = React.useCallback(\n (e: React.MouseEvent<SVGSVGElement>) => {\n if (!geo) return;\n const rect = e.currentTarget.getBoundingClientRect();\n if (rect.width === 0) return;\n // Map client X → viewBox X (preserveAspectRatio default keeps aspect, so width-relative ratio works).\n const vbox_x = ((e.clientX - rect.left) / rect.width) * geo.vbox_w;\n const plot_w = geo.vbox_w - PAD_LEFT - PAD_RIGHT;\n if (vbox_x < PAD_LEFT || vbox_x > geo.vbox_w - PAD_RIGHT) {\n set_hover_idx(null);\n return;\n }\n const ratio = (vbox_x - PAD_LEFT) / plot_w;\n const idx = Math.round(ratio * (data.length - 1));\n const clamped = Math.max(0, Math.min(data.length - 1, idx));\n // Walk to the nearest non-null point if the exact bucket is missing.\n let resolved = clamped;\n if (data[resolved] === null || Number.isNaN(data[resolved] as number)) {\n for (let step = 1; step < data.length; step += 1) {\n const left_i = clamped - step;\n const right_i = clamped + step;\n if (left_i >= 0 && data[left_i] !== null && !Number.isNaN(data[left_i] as number)) {\n resolved = left_i;\n break;\n }\n if (right_i < data.length && data[right_i] !== null && !Number.isNaN(data[right_i] as number)) {\n resolved = right_i;\n break;\n }\n }\n }\n set_hover_idx(resolved);\n },\n [geo, data],\n );\n\n const handle_mouse_leave = React.useCallback(() => set_hover_idx(null), []);\n\n if (!geo) {\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={cn(\"cls_hazo_chart cls_hazo_chart_empty\", className)}\n style={{ width: \"100%\", height: \"auto\", display: \"block\", maxHeight: `${height + 10}px` }}\n />\n );\n }\n\n const { line_d, area_d } = build_paths(data, geo);\n const x_label_idx = pick_x_label_indices(data.length);\n const last_idx = data.length - 1;\n const last_v = data[last_idx];\n const has_last = last_v !== null && last_v !== undefined && !Number.isNaN(last_v);\n\n const hover_v = hover_idx !== null ? data[hover_idx] : null;\n const hover_has_v = hover_v !== null && hover_v !== undefined && !Number.isNaN(hover_v);\n\n return (\n <svg\n ref={svg_ref}\n viewBox={`0 0 ${width} ${height}`}\n onMouseMove={showTooltip ? handle_mouse_move : undefined}\n onMouseLeave={showTooltip ? handle_mouse_leave : undefined}\n className={cn(\"cls_hazo_chart\", className)}\n style={{\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n maxHeight: `${height + 10}px`,\n cursor: showTooltip ? \"crosshair\" : \"default\",\n }}\n >\n {/* Gridlines */}\n {[0, 1, 2].map((i) => {\n const y = PAD_TOP + (i / 2) * (geo.vbox_h - PAD_TOP - PAD_BOTTOM);\n return (\n <line\n key={i}\n x1={PAD_LEFT}\n x2={geo.vbox_w - PAD_RIGHT}\n y1={y}\n y2={y}\n stroke={GRIDLINE_COLOR}\n strokeWidth={0.5}\n strokeDasharray=\"2,3\"\n />\n );\n })}\n\n {/* Area + line */}\n {area_d && <path d={area_d} fill={color} fillOpacity={0.12} stroke=\"none\" />}\n {line_d && <path d={line_d} stroke={color} strokeWidth={1.8} fill=\"none\" />}\n\n {/* Y-axis labels */}\n <text x={PAD_LEFT - 4} y={PAD_TOP + 3} textAnchor=\"end\" fill={AXIS_LABEL_COLOR} fontSize={9}>\n {format_num(geo.y_max)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={PAD_TOP + (geo.vbox_h - PAD_TOP - PAD_BOTTOM) / 2 + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {format_num((geo.y_max + geo.y_min) / 2)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={geo.vbox_h - PAD_BOTTOM + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {format_num(geo.y_min)}\n </text>\n\n {/* X-axis labels (start / mid / end) */}\n {x_label_idx.map((idx, k) => {\n const anchor = k === 0 ? \"start\" : k === 1 ? \"middle\" : \"end\";\n const x_pos = geo.cx(idx);\n return (\n <text\n key={`x_${k}`}\n x={x_pos}\n y={geo.vbox_h - 6}\n textAnchor={anchor}\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {dates[idx] ?? \"\"}\n </text>\n );\n })}\n\n {/* Current-value marker (only on last data point — not the hover one) */}\n {has_last && hover_idx === null && (() => {\n const x = geo.cx(last_idx);\n const y = geo.cy(last_v as number);\n return (\n <>\n <line\n x1={x}\n x2={PAD_LEFT}\n y1={y}\n y2={y}\n stroke={color}\n strokeWidth={0.5}\n strokeDasharray=\"2,2\"\n opacity={0.4}\n />\n <circle cx={x} cy={y} r={3.5} fill={color} stroke={color} strokeWidth={2} fillOpacity={0.3} />\n <circle cx={x} cy={y} r={2} fill={color} />\n <text x={x - 6} y={y - 6} textAnchor=\"end\" fill={color} fontSize={10} fontWeight={700}>\n {format_num(last_v as number)}\n {unit}\n </text>\n </>\n );\n })()}\n\n {/* Hover cursor + bubble */}\n {showTooltip && hover_idx !== null && hover_has_v && (() => {\n const x = geo.cx(hover_idx);\n const y = geo.cy(hover_v as number);\n const label = `${format_num(hover_v as number)}${unit}`;\n const date = dates[hover_idx] ?? \"\";\n // Bubble dimensions sized to the longer of label vs date.\n const bubble_text_w = Math.max(label.length, date.length) * 5.5 + 12;\n const bubble_w = Math.max(bubble_text_w, 40);\n const bubble_h = 26;\n // Flip the bubble to the left of the cursor if it would overflow the right edge.\n const flip = x + bubble_w + 6 > geo.vbox_w - PAD_RIGHT;\n const bubble_x = flip ? x - bubble_w - 6 : x + 6;\n const bubble_y = Math.max(PAD_TOP, Math.min(y - bubble_h / 2, geo.vbox_h - PAD_BOTTOM - bubble_h));\n return (\n <>\n <line\n x1={x}\n x2={x}\n y1={PAD_TOP}\n y2={geo.vbox_h - PAD_BOTTOM}\n stroke={color}\n strokeWidth={0.5}\n strokeDasharray=\"2,2\"\n opacity={0.6}\n />\n <circle cx={x} cy={y} r={3} fill={color} />\n <rect\n x={bubble_x}\n y={bubble_y}\n width={bubble_w}\n height={bubble_h}\n rx={3}\n fill=\"#0d1117\"\n stroke={color}\n strokeWidth={0.5}\n fillOpacity={0.92}\n />\n <text\n x={bubble_x + bubble_w / 2}\n y={bubble_y + 11}\n textAnchor=\"middle\"\n fill={color}\n fontSize={10}\n fontWeight={700}\n >\n {label}\n </text>\n <text\n x={bubble_x + bubble_w / 2}\n y={bubble_y + 22}\n textAnchor=\"middle\"\n fill={AXIS_LABEL_COLOR}\n fontSize={8}\n >\n {date}\n </text>\n </>\n );\n })()}\n </svg>\n );\n}\n","\"use client\";\n\n/**\n * MultiLineChart — multi-series chart with shared Y-axis.\n *\n * No area fill (PRD §6b — \"multi-series uses lines only to avoid color\n * collisions\"). Each series gets a per-endpoint marker + value label so\n * the latest value is readable without hovering. Hover surfaces a single\n * cursor line with one bubble per series stacked vertically.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { format_num, pick_x_label_indices } from \"./format\";\nimport type { MultiSeries } from \"./types\";\n\nexport interface MultiLineChartProps {\n series: MultiSeries[];\n dates: string[];\n width?: number;\n height?: number;\n showTooltip?: boolean;\n showLegend?: boolean;\n className?: string;\n}\n\nconst PAD_LEFT = 38;\nconst PAD_RIGHT = 14;\nconst PAD_TOP = 12;\nconst PAD_BOTTOM = 22;\nconst AXIS_LABEL_COLOR = \"#8b949e\";\nconst GRIDLINE_COLOR = \"#2a3441\";\n\ninterface Geometry {\n vbox_w: number;\n vbox_h: number;\n y_min: number;\n y_max: number;\n point_count: number;\n cx: (i: number) => number;\n cy: (v: number) => number;\n}\n\nfunction compute_geometry(\n series: MultiSeries[],\n width: number,\n height: number,\n): Geometry | null {\n const all_vals: number[] = [];\n let n = 0;\n for (const s of series) {\n n = Math.max(n, s.data.length);\n for (const v of s.data) if (v !== null && !Number.isNaN(v)) all_vals.push(v);\n }\n if (all_vals.length === 0 || n === 0) return null;\n\n const mn = Math.min(...all_vals);\n const mx = Math.max(...all_vals);\n const rng = mx - mn || mx * 0.1 + 1;\n const y_min = Math.max(0, mn - rng * 0.05);\n const y_max = mx + rng * 0.05;\n const y_rng = y_max - y_min || 1;\n\n const plot_w = width - PAD_LEFT - PAD_RIGHT;\n const plot_h = height - PAD_TOP - PAD_BOTTOM;\n\n return {\n vbox_w: width,\n vbox_h: height,\n y_min,\n y_max,\n point_count: n,\n cx: (i) => (n <= 1 ? PAD_LEFT + plot_w / 2 : PAD_LEFT + (i * plot_w) / (n - 1)),\n cy: (v) => PAD_TOP + (1 - (v - y_min) / y_rng) * plot_h,\n };\n}\n\nexport function MultiLineChart({\n series,\n dates,\n width = 360,\n height = 140,\n showTooltip = true,\n showLegend = true,\n className,\n}: MultiLineChartProps): React.ReactElement {\n const geo = compute_geometry(series, width, height);\n const [hover_idx, set_hover_idx] = React.useState<number | null>(null);\n\n const handle_mouse_move = React.useCallback(\n (e: React.MouseEvent<SVGSVGElement>) => {\n if (!geo) return;\n const rect = e.currentTarget.getBoundingClientRect();\n if (rect.width === 0) return;\n const vbox_x = ((e.clientX - rect.left) / rect.width) * geo.vbox_w;\n const plot_w = geo.vbox_w - PAD_LEFT - PAD_RIGHT;\n if (vbox_x < PAD_LEFT || vbox_x > geo.vbox_w - PAD_RIGHT) {\n set_hover_idx(null);\n return;\n }\n const ratio = (vbox_x - PAD_LEFT) / plot_w;\n const idx = Math.round(ratio * (geo.point_count - 1));\n set_hover_idx(Math.max(0, Math.min(geo.point_count - 1, idx)));\n },\n [geo],\n );\n\n const handle_mouse_leave = React.useCallback(() => set_hover_idx(null), []);\n\n if (!geo) {\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={cn(\"cls_hazo_chart cls_hazo_chart_empty\", className)}\n style={{ width: \"100%\", height: \"auto\", display: \"block\", maxHeight: `${height + 10}px` }}\n />\n );\n }\n\n const x_label_idx = pick_x_label_indices(geo.point_count);\n\n return (\n <div className={cn(\"cls_hazo_chart_wrapper\", className)}>\n <svg\n viewBox={`0 0 ${width} ${height}`}\n onMouseMove={showTooltip ? handle_mouse_move : undefined}\n onMouseLeave={showTooltip ? handle_mouse_leave : undefined}\n className=\"cls_hazo_chart cls_hazo_chart_multi\"\n style={{\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n maxHeight: `${height + 10}px`,\n cursor: showTooltip ? \"crosshair\" : \"default\",\n }}\n >\n {/* Gridlines */}\n {[0, 1, 2].map((i) => {\n const y = PAD_TOP + (i / 2) * (geo.vbox_h - PAD_TOP - PAD_BOTTOM);\n return (\n <line\n key={i}\n x1={PAD_LEFT}\n x2={geo.vbox_w - PAD_RIGHT}\n y1={y}\n y2={y}\n stroke={GRIDLINE_COLOR}\n strokeWidth={0.5}\n strokeDasharray=\"2,3\"\n />\n );\n })}\n\n {/* Y labels */}\n <text x={PAD_LEFT - 4} y={PAD_TOP + 3} textAnchor=\"end\" fill={AXIS_LABEL_COLOR} fontSize={9}>\n {format_num(geo.y_max)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={PAD_TOP + (geo.vbox_h - PAD_TOP - PAD_BOTTOM) / 2 + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {format_num((geo.y_max + geo.y_min) / 2)}\n </text>\n <text x={PAD_LEFT - 4} y={geo.vbox_h - PAD_BOTTOM + 3} textAnchor=\"end\" fill={AXIS_LABEL_COLOR} fontSize={9}>\n {format_num(geo.y_min)}\n </text>\n\n {/* X labels */}\n {x_label_idx.map((idx, k) => {\n const anchor = k === 0 ? \"start\" : k === 1 ? \"middle\" : \"end\";\n return (\n <text\n key={`x_${k}`}\n x={geo.cx(idx)}\n y={geo.vbox_h - 6}\n textAnchor={anchor}\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {dates[idx] ?? \"\"}\n </text>\n );\n })}\n\n {/* Series lines + endpoint markers */}\n {series.map((s, s_idx) => {\n let d = \"\";\n s.data.forEach((v, i) => {\n if (v === null || Number.isNaN(v)) return;\n d += `${d ? \" L\" : \"M\"}${geo.cx(i).toFixed(1)},${geo.cy(v).toFixed(1)}`;\n });\n const last_idx = s.data.length - 1;\n const last_v = s.data[last_idx];\n const has_last = last_v !== null && last_v !== undefined && !Number.isNaN(last_v);\n return (\n <g key={`series_${s_idx}`}>\n {d && <path d={d} stroke={s.color} strokeWidth={1.7} fill=\"none\" />}\n {has_last && hover_idx === null && (\n <>\n <circle\n cx={geo.cx(last_idx)}\n cy={geo.cy(last_v as number)}\n r={3}\n fill={s.color}\n fillOpacity={0.3}\n stroke={s.color}\n strokeWidth={1.5}\n />\n <text\n x={geo.cx(last_idx) - 5}\n y={geo.cy(last_v as number) - 5}\n textAnchor=\"end\"\n fill={s.color}\n fontSize={9}\n fontWeight={700}\n >\n {format_num(last_v as number)}\n </text>\n </>\n )}\n </g>\n );\n })}\n\n {/* Hover cursor + per-series bubbles */}\n {showTooltip && hover_idx !== null && (() => {\n const x = geo.cx(hover_idx);\n const items = series\n .map((s) => ({\n label: s.label,\n color: s.color,\n value: s.data[hover_idx] ?? null,\n }))\n .filter((it) => it.value !== null && !Number.isNaN(it.value as number));\n if (items.length === 0) return null;\n\n const bubble_w = 70;\n const row_h = 12;\n const bubble_h = items.length * row_h + 18;\n const flip = x + bubble_w + 6 > geo.vbox_w - PAD_RIGHT;\n const bubble_x = flip ? x - bubble_w - 6 : x + 6;\n const bubble_y = Math.max(PAD_TOP, Math.min(PAD_TOP + 5, geo.vbox_h - PAD_BOTTOM - bubble_h));\n\n return (\n <>\n <line\n x1={x}\n x2={x}\n y1={PAD_TOP}\n y2={geo.vbox_h - PAD_BOTTOM}\n stroke={AXIS_LABEL_COLOR}\n strokeWidth={0.5}\n strokeDasharray=\"2,2\"\n opacity={0.6}\n />\n {items.map((it) => (\n <circle\n key={`hd_${it.label}`}\n cx={x}\n cy={geo.cy(it.value as number)}\n r={3}\n fill={it.color}\n />\n ))}\n <rect\n x={bubble_x}\n y={bubble_y}\n width={bubble_w}\n height={bubble_h}\n rx={3}\n fill=\"#0d1117\"\n stroke={AXIS_LABEL_COLOR}\n strokeWidth={0.5}\n fillOpacity={0.92}\n />\n <text x={bubble_x + 6} y={bubble_y + 10} fill={AXIS_LABEL_COLOR} fontSize={8}>\n {dates[hover_idx] ?? \"\"}\n </text>\n {items.map((it, i) => (\n <g key={`row_${i}`}>\n <rect\n x={bubble_x + 6}\n y={bubble_y + 14 + i * row_h}\n width={6}\n height={6}\n fill={it.color}\n />\n <text\n x={bubble_x + 16}\n y={bubble_y + 20 + i * row_h}\n fill={it.color}\n fontSize={9}\n fontWeight={600}\n >\n {format_num(it.value as number)}\n </text>\n </g>\n ))}\n </>\n );\n })()}\n </svg>\n {showLegend && (\n <div\n className=\"cls_hazo_chart_legend\"\n style={{\n display: \"flex\",\n gap: \"12px\",\n justifyContent: \"center\",\n marginTop: \"4px\",\n fontSize: \"10px\",\n color: AXIS_LABEL_COLOR,\n flexWrap: \"wrap\",\n }}\n >\n {series.map((s) => (\n <span\n key={s.label}\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: \"4px\" }}\n >\n <i\n style={{\n display: \"inline-block\",\n width: \"8px\",\n height: \"8px\",\n background: s.color,\n borderRadius: \"1px\",\n }}\n />\n {s.label}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * StackedBars — one vertical bar per X position, each split into top-to-bottom\n * colored bands.\n *\n * Generic enough for any distribution-over-time visual: GSC position buckets\n * (Top 3 / 4-10 / 11-20 / 20+), traffic source mix (organic / direct / referral),\n * etc. The component is data-driven via `bars: StackedBar[]` — the consumer\n * picks the segment colors, the labels, and the band order.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { format_num, pick_x_label_indices } from \"./format\";\nimport type { StackedBar } from \"./types\";\n\nexport interface StackedBarsProps {\n bars: StackedBar[];\n width?: number;\n height?: number;\n /** Show Y-axis ticks (max, mid, 0). Defaults to true. */\n showYAxis?: boolean;\n className?: string;\n}\n\nconst PAD_LEFT = 32;\nconst PAD_RIGHT = 8;\nconst PAD_TOP = 10;\nconst PAD_BOTTOM = 22;\nconst BAR_GAP_RATIO = 0.25;\nconst AXIS_LABEL_COLOR = \"#8b949e\";\n\nexport function StackedBars({\n bars,\n width = 360,\n height = 140,\n showYAxis = true,\n className,\n}: StackedBarsProps): React.ReactElement {\n const totals = bars.map((b) => b.segments.reduce((sum, s) => sum + s.value, 0));\n const y_max = Math.max(0, ...totals) || 1;\n\n const plot_w = width - PAD_LEFT - PAD_RIGHT;\n const plot_h = height - PAD_TOP - PAD_BOTTOM;\n const slot_w = bars.length > 0 ? plot_w / bars.length : 0;\n const bar_w = slot_w * (1 - BAR_GAP_RATIO);\n\n const x_for = (i: number): number => PAD_LEFT + i * slot_w + (slot_w - bar_w) / 2;\n const x_label_idx = pick_x_label_indices(bars.length);\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={cn(\"cls_hazo_chart cls_hazo_chart_stacked_bars\", className)}\n style={{ width: \"100%\", height: \"auto\", display: \"block\", maxHeight: `${height + 10}px` }}\n >\n {/* Y-axis labels */}\n {showYAxis && (\n <>\n <text x={PAD_LEFT - 4} y={PAD_TOP + 3} textAnchor=\"end\" fill={AXIS_LABEL_COLOR} fontSize={9}>\n {format_num(y_max)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={PAD_TOP + plot_h / 2 + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {format_num(y_max / 2)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={height - PAD_BOTTOM + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n 0\n </text>\n </>\n )}\n\n {/* Bars */}\n {bars.map((bar, i) => {\n let cursor_y = height - PAD_BOTTOM;\n return (\n <g key={`bar_${i}`}>\n {bar.segments.map((seg, s_idx) => {\n if (seg.value <= 0) return null;\n const seg_h = (seg.value / y_max) * plot_h;\n const y = cursor_y - seg_h;\n cursor_y = y;\n return (\n <rect\n key={`seg_${s_idx}`}\n x={x_for(i)}\n y={y}\n width={bar_w}\n height={seg_h}\n fill={seg.color}\n />\n );\n })}\n </g>\n );\n })}\n\n {/* X-axis labels (start / mid / end) */}\n {x_label_idx.map((idx, k) => {\n const anchor = k === 0 ? \"start\" : k === 1 ? \"middle\" : \"end\";\n const x_pos = x_for(idx) + bar_w / 2;\n return (\n <text\n key={`x_${k}`}\n x={x_pos}\n y={height - 6}\n textAnchor={anchor}\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {bars[idx]?.label ?? \"\"}\n </text>\n );\n })}\n </svg>\n );\n}\n","\"use client\";\n\n/**\n * DateRangeSelector — segmented control for picking a chart's time window.\n *\n * Framework-agnostic: emits the new value via `onChange`. The consumer\n * decides whether to write it to a URL query param (Next.js router), a\n * local state, or a global store — hazo_ui has no opinion on routing.\n *\n * Visually a row of pills, the active one tinted with the primary color.\n * Designed to sit immediately above a chart on the Trends / Bing / GA4\n * pages where users need to flip between \"14d\", \"30d\", and \"since launch\".\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { DateRangeOption } from \"./types\";\n\nexport interface DateRangeSelectorProps {\n value: string;\n onChange: (value: string) => void;\n options: DateRangeOption[];\n className?: string;\n /** Aria label for the whole group. Defaults to \"Date range\". */\n ariaLabel?: string;\n}\n\nexport function DateRangeSelector({\n value,\n onChange,\n options,\n className,\n ariaLabel = \"Date range\",\n}: DateRangeSelectorProps): React.ReactElement {\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n className={cn(\n \"cls_hazo_date_range_selector inline-flex items-center gap-0 rounded-md border bg-background p-0.5\",\n className,\n )}\n >\n {options.map((opt) => {\n const is_active = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n aria-pressed={is_active}\n onClick={() => {\n if (!is_active) onChange(opt.value);\n }}\n className={cn(\n \"cls_hazo_date_range_option px-2.5 py-1 text-xs font-medium rounded-sm transition-colors\",\n is_active\n ? \"bg-primary text-primary-foreground\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\",\n )}\n >\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","/**\n * hazo_ui_celebration/index.tsx\n *\n * CelebrationModal: imperative confetti + modal overlay with optional shareable card.\n * Mount <CelebrationProvider /> once at root, then call celebrate({ ... }) from anywhere.\n *\n * Session gating: each id is written to sessionStorage (hazo_ui_celebration_<id>) when\n * shown. Duplicate calls with the same id within the session are no-ops.\n * Cross-session gating is the consumer's responsibility.\n *\n * Queue policy: FIFO. Gating runs at call time (before enqueue), not at display time.\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { X, Download, Share2, Copy, Loader2 } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport chime_url from \"../../assets/celebration-chime.mp3\";\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\n/** Default gradient for the shareable card background. Override via shareableCard.background. */\nexport const CELEBRATION_GRADIENT =\n \"linear-gradient(135deg, #667eea 0%, #764ba2 100%)\";\n\nconst CARD_SIZE = 1080;\nconst PREVIEW_SIZE = 400;\nconst CARD_SCALE = PREVIEW_SIZE / CARD_SIZE;\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface CelebrationShareableCard {\n /**\n * CSS background value applied to the 1080×1080 card.\n * Default: CELEBRATION_GRADIENT.\n */\n background?: string;\n /** ReactNode rendered at full 1080×1080 size (scaled down for preview). */\n foreground: React.ReactNode;\n /**\n * Caption at the bottom of the card.\n * Falls back to the top-level subtitle when omitted.\n */\n caption?: string;\n}\n\nexport interface CelebrationPayload {\n /**\n * Unique identifier. Also the sessionStorage dedup key:\n * hazo_ui_celebration_<id> = \"1\" once shown.\n */\n id: string;\n title: string;\n subtitle?: string;\n shareableCard?: CelebrationShareableCard;\n /** Auto-dismiss the modal after autoDismissDelay ms. Default true. */\n autoDismiss?: boolean;\n /**\n * Duration in ms before auto-dismiss. Default 8000.\n * Set to a short value (e.g. 100) in tests.\n */\n autoDismissDelay?: number;\n /** Play the bundled success chime when the modal opens. Default false. */\n audioChime?: boolean;\n}\n\n// ─── Module-level imperative handle ──────────────────────────────────────────\n\nlet _enqueue: ((payload: CelebrationPayload) => void) | null = null;\n\n/**\n * Fire a celebration modal from anywhere in the tree.\n * No-ops when <CelebrationProvider /> is not mounted or the id was already\n * shown this session.\n */\nexport function celebrate(payload: CelebrationPayload): void {\n if (!_enqueue) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"[hazo_ui] celebrate() called before <CelebrationProvider /> was mounted\"\n );\n }\n return;\n }\n _enqueue(payload);\n}\n\n// ─── Provider ─────────────────────────────────────────────────────────────────\n\nexport interface CelebrationProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Mount once near the root of your app (e.g. (app)/layout.tsx).\n * Renders the current celebration modal and manages the FIFO queue.\n */\nexport function CelebrationProvider({ children }: CelebrationProviderProps) {\n const [queue, set_queue] = React.useState<CelebrationPayload[]>([]);\n\n const enqueue = React.useCallback((payload: CelebrationPayload) => {\n // Gating runs at call time — before the item enters the queue\n const storage_key = `hazo_ui_celebration_${payload.id}`;\n if (typeof window !== \"undefined\" && sessionStorage.getItem(storage_key)) {\n return;\n }\n set_queue((q) => [...q, payload]);\n }, []);\n\n React.useEffect(() => {\n _enqueue = enqueue;\n return () => {\n _enqueue = null;\n };\n }, [enqueue]);\n\n const handle_close = React.useCallback(() => {\n set_queue((q) => q.slice(1));\n }, []);\n\n const current = queue[0] ?? null;\n\n return (\n <>\n {children}\n {current && (\n <CelebrationModalInner\n key={current.id}\n payload={current}\n onClose={handle_close}\n />\n )}\n </>\n );\n}\n\n// ─── Internal modal ───────────────────────────────────────────────────────────\n\ninterface CelebrationModalInnerProps {\n payload: CelebrationPayload;\n onClose: () => void;\n}\n\nfunction CelebrationModalInner({\n payload,\n onClose,\n}: CelebrationModalInnerProps) {\n const {\n id,\n title,\n subtitle,\n shareableCard,\n autoDismiss = true,\n autoDismissDelay = 8000,\n audioChime = false,\n } = payload;\n\n const [visible, set_visible] = React.useState(true);\n const [is_downloading, set_is_downloading] = React.useState(false);\n const canvas_ref = React.useRef<HTMLCanvasElement>(null);\n const card_ref = React.useRef<HTMLDivElement>(null);\n\n // Mark seen immediately on mount — gating check already ran at call time,\n // but we write here so browser-refresh within a session also deduplicates.\n React.useEffect(() => {\n sessionStorage.setItem(`hazo_ui_celebration_${id}`, \"1\");\n }, [id]);\n\n // Confetti burst\n React.useEffect(() => {\n if (!canvas_ref.current) return;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let confetti_instance: any = null;\n\n import(\"canvas-confetti\").then(({ default: confetti }) => {\n if (!canvas_ref.current) return;\n confetti_instance = confetti.create(canvas_ref.current, { resize: true });\n confetti_instance({\n particleCount: 120,\n spread: 70,\n origin: { y: 0.5 },\n colors: [\"#667eea\", \"#764ba2\", \"#f6d365\", \"#fda085\", \"#84fab0\"],\n });\n });\n\n return () => {\n confetti_instance?.reset();\n };\n }, []);\n\n // Audio chime\n React.useEffect(() => {\n if (!audioChime) return;\n const audio = new Audio(chime_url);\n audio.play().catch(() => {\n // Ignore autoplay policy errors (mobile requires prior user gesture)\n });\n }, [audioChime]);\n\n // Auto-dismiss timer\n React.useEffect(() => {\n if (!autoDismiss) return;\n const timer = window.setTimeout(close_modal, autoDismissDelay);\n return () => window.clearTimeout(timer);\n // close_modal is stable (defined below via function declaration, captured by closure)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [autoDismiss, autoDismissDelay]);\n\n // ESC key\n React.useEffect(() => {\n const on_key = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") close_modal();\n };\n document.addEventListener(\"keydown\", on_key);\n return () => document.removeEventListener(\"keydown\", on_key);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n function close_modal() {\n set_visible(false);\n // Allow CSS transition before removing from queue\n setTimeout(onClose, 150);\n }\n\n async function handle_download() {\n if (!card_ref.current) return;\n set_is_downloading(true);\n try {\n const { toPng } = await import(\"html-to-image\");\n const data_url = await toPng(card_ref.current, {\n width: CARD_SIZE,\n height: CARD_SIZE,\n });\n const a = document.createElement(\"a\");\n a.download = `${id}.png`;\n a.href = data_url;\n a.click();\n } catch (err) {\n console.error(\"[hazo_ui] CelebrationModal: download failed\", err);\n } finally {\n set_is_downloading(false);\n }\n }\n\n async function handle_share() {\n if (!card_ref.current || !navigator.share) return;\n try {\n const { toPng } = await import(\"html-to-image\");\n const data_url = await toPng(card_ref.current, {\n width: CARD_SIZE,\n height: CARD_SIZE,\n });\n const blob = await fetch(data_url).then((r) => r.blob());\n await navigator.share({\n files: [new File([blob], `${id}.png`, { type: \"image/png\" })],\n });\n } catch (err) {\n console.error(\"[hazo_ui] CelebrationModal: share failed\", err);\n }\n }\n\n async function handle_copy() {\n if (!card_ref.current) return;\n try {\n const { toPng } = await import(\"html-to-image\");\n const data_url = await toPng(card_ref.current, {\n width: CARD_SIZE,\n height: CARD_SIZE,\n });\n const blob = await fetch(data_url).then((r) => r.blob());\n await navigator.clipboard.write([\n new ClipboardItem({ \"image/png\": blob }),\n ]);\n } catch (err) {\n console.error(\"[hazo_ui] CelebrationModal: copy failed\", err);\n }\n }\n\n const resolved_caption = shareableCard?.caption ?? subtitle;\n const card_bg = shareableCard?.background ?? CELEBRATION_GRADIENT;\n const can_share =\n typeof navigator !== \"undefined\" && \"share\" in navigator;\n\n return (\n <div\n className={cn(\n \"cls_celebration_modal_overlay\",\n \"fixed inset-0 z-50 flex items-center justify-center\",\n \"bg-black/30 backdrop-blur-sm\",\n \"transition-opacity duration-150\",\n visible ? \"opacity-100\" : \"opacity-0 pointer-events-none\"\n )}\n onClick={close_modal}\n >\n {/* Confetti canvas — covers full overlay, no pointer events */}\n <canvas\n ref={canvas_ref}\n className=\"cls_celebration_confetti_canvas absolute inset-0 w-full h-full pointer-events-none\"\n />\n\n {/* Modal card */}\n <div\n className={cn(\n \"cls_celebration_modal_card\",\n \"relative bg-white rounded-2xl shadow-2xl\",\n \"flex flex-col items-center overflow-hidden\",\n \"transition-transform duration-150\",\n visible ? \"scale-100\" : \"scale-95\"\n )}\n style={{ width: 480, maxWidth: \"95vw\" }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Close button */}\n <button\n className=\"cls_celebration_close_btn absolute top-3 right-3 z-10 p-1.5 rounded-full hover:bg-black/10 transition-colors\"\n onClick={close_modal}\n aria-label=\"Close celebration\"\n >\n <X className=\"h-4 w-4 text-gray-600\" />\n </button>\n\n {/* Header */}\n <div className=\"cls_celebration_header px-8 pt-8 pb-5 text-center\">\n <h2 className=\"cls_celebration_title text-2xl font-bold text-gray-900\">\n {title}\n </h2>\n {subtitle && (\n <p className=\"cls_celebration_subtitle mt-1.5 text-sm text-gray-500 leading-relaxed\">\n {subtitle}\n </p>\n )}\n </div>\n\n {/* Shareable card preview */}\n {shareableCard && (\n <>\n {/*\n * The inner div is the actual 1080×1080 html-to-image capture target.\n * CSS scale() brings it down to 400×400 for the preview.\n * overflow-hidden on the wrapper clips the overflow.\n */}\n <div\n className=\"cls_celebration_card_preview_wrapper overflow-hidden rounded-lg mx-8\"\n style={{ width: PREVIEW_SIZE, height: PREVIEW_SIZE }}\n >\n <div\n ref={card_ref}\n className=\"cls_celebration_card_inner\"\n style={{\n width: CARD_SIZE,\n height: CARD_SIZE,\n transform: `scale(${CARD_SCALE})`,\n transformOrigin: \"top left\",\n background: card_bg,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 80,\n boxSizing: \"border-box\",\n }}\n >\n {shareableCard.foreground}\n {resolved_caption && (\n <p\n style={{\n marginTop: 32,\n fontSize: 36,\n color: \"white\",\n textAlign: \"center\",\n fontWeight: 600,\n lineHeight: 1.3,\n }}\n >\n {resolved_caption}\n </p>\n )}\n </div>\n </div>\n\n {/* Card action buttons */}\n <div className=\"cls_celebration_card_actions flex flex-wrap gap-2 px-8 py-5\">\n <Button\n className=\"cls_celebration_download_btn\"\n size=\"sm\"\n onClick={handle_download}\n disabled={is_downloading}\n >\n {is_downloading ? (\n <Loader2 className=\"h-3.5 w-3.5 mr-1.5 animate-spin\" />\n ) : (\n <Download className=\"h-3.5 w-3.5 mr-1.5\" />\n )}\n Download PNG\n </Button>\n {can_share && (\n <Button variant=\"outline\" size=\"sm\" onClick={handle_share}>\n <Share2 className=\"h-3.5 w-3.5 mr-1.5\" />\n Share\n </Button>\n )}\n <Button variant=\"outline\" size=\"sm\" onClick={handle_copy}>\n <Copy className=\"h-3.5 w-3.5 mr-1.5\" />\n Copy image\n </Button>\n </div>\n </>\n )}\n\n {/* Footer dismiss (no card) */}\n {!shareableCard && (\n <div className=\"cls_celebration_footer pb-8\">\n <Button size=\"sm\" onClick={close_modal}>\n Dismiss\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../node_modules/@babel/runtime/helpers/extends.js","../../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../src/lib/utils.ts","../src/components/hazo_context_provider/index.tsx","../src/utils/logger.ts","../src/utils/uuid.ts","../src/lib/hazo_ui_config.ts","../src/components/ui/button.tsx","../src/components/ui/dialog.tsx","../src/components/ui/command.tsx","../src/components/ui/popover.tsx","../src/components/ui/input.tsx","../src/components/ui/select.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/calendar.tsx","../src/components/hazo_ui_multi_filter_dialog/index.tsx","../src/components/hazo_ui_multi_sort_dialog/index.tsx","../src/components/ui/radio-group.tsx","../src/components/hazo_ui_flex_radio/index.tsx","../src/components/hazo_ui_pill_radio/index.tsx","../src/components/hazo_ui_flex_input/index.tsx","../src/components/hazo_ui_rte/toolbar/toolbar_button.tsx","../../node_modules/@uiw/react-color-sketch/esm/index.js","../../node_modules/@uiw/react-color-saturation/esm/index.js","../../node_modules/@uiw/color-convert/esm/index.js","../../node_modules/@uiw/react-drag-event-interactive/esm/index.js","../../node_modules/@uiw/react-drag-event-interactive/esm/utils.js","../../node_modules/@uiw/react-color-saturation/esm/Pointer.js","../../node_modules/@uiw/react-color-alpha/esm/index.js","../../node_modules/@uiw/react-color-alpha/esm/Pointer.js","../../node_modules/@uiw/react-color-editable-input/esm/index.js","../../node_modules/@uiw/react-color-editable-input-rgba/esm/index.js","../../node_modules/@uiw/react-color-hue/esm/index.js","../../node_modules/@uiw/react-color-swatch/esm/index.js","../src/components/hazo_ui_rte/types.ts","../src/components/hazo_ui_rte/utils.ts","../src/components/hazo_ui_rte/toolbar/toolbar.tsx","../src/components/hazo_ui_rte/attachments/attachments_list.tsx","../src/components/hazo_ui_rte/extensions/font_size_extension.tsx","../src/components/hazo_ui_rte/extensions/variable_extension.tsx","../src/components/ui/tabs.tsx","../src/components/hazo_ui_rte/index.tsx","../src/components/hazo_ui_command/extensions/command_node_extension.tsx","../src/components/hazo_ui_command/extensions/command_suggestion.tsx","../src/components/hazo_ui_command/components/command_pill.tsx","../src/components/hazo_ui_command/components/command_popover.tsx","../src/components/hazo_ui_command/index.tsx","../../node_modules/@tiptap/extension-document/src/document.ts","../../node_modules/@tiptap/extension-document/src/index.ts","../../node_modules/@tiptap/extension-paragraph/src/paragraph.ts","../../node_modules/@tiptap/extension-paragraph/src/index.ts","../../node_modules/@tiptap/extension-text/src/text.ts","../../node_modules/@tiptap/extension-text/src/index.ts","../src/components/hazo_ui_textbox/index.tsx","../../node_modules/@tiptap/extension-hard-break/src/hard-break.ts","../../node_modules/@tiptap/extension-hard-break/src/index.ts","../src/components/hazo_ui_textarea/index.tsx","../src/lib/animations.ts","../src/components/hazo_ui_dialog/index.tsx","../src/components/hazo_ui_confirm_dialog/index.tsx","../src/components/ui/drawer.tsx","../src/hooks/use_media_query.ts","../src/components/ui/accordion.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/hover-card.tsx","../src/components/ui/label.tsx","../src/components/ui/switch.tsx","../src/components/ui/textarea.tsx","../src/components/ui/separator.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/card.tsx","../src/components/ui/spinner.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/button-group.tsx","../src/components/skeleton/index.tsx","../src/components/empty_state/index.tsx","../src/components/error_banner/index.tsx","../src/components/error_page/index.tsx","../src/components/loading_timeout/index.tsx","../src/components/progressive_image/index.tsx","../src/components/toaster/index.tsx","../src/hooks/use_loading_state.ts","../src/hooks/use_error_display.ts","../src/hooks/use_debounce.ts","../src/hooks/use_copy_to_clipboard.ts","../src/hooks/use_is_mobile.ts","../src/hooks/use_local_storage.ts","../src/hooks/use_session_storage.ts","../src/hooks/use_click_outside.ts","../src/hooks/use_wake_lock.ts","../src/hooks/use_fullscreen.ts","../src/components/hazo_ui_kanban/kanban_card.tsx","../src/components/hazo_ui_kanban/kanban_column.tsx","../src/components/hazo_ui_kanban/kanban_editor.tsx","../src/components/hazo_ui_kanban/kanban_filter.tsx","../src/components/hazo_ui_kanban/apply_kanban_filter.ts","../src/components/hazo_ui_kanban/index.tsx","../src/components/ui/table.tsx","../src/components/hazo_ui_table/table_mobile_cards.tsx","../src/components/hazo_ui_table/use_table_state.ts","../src/components/hazo_ui_table/index.tsx","../src/components/hazo_ui_charts/sparkline.tsx","../src/components/hazo_ui_charts/inverse_sparkline.tsx","../src/components/hazo_ui_charts/format.ts","../src/components/hazo_ui_charts/line_chart.tsx","../src/components/hazo_ui_charts/multi_line_chart.tsx","../src/components/hazo_ui_charts/stacked_bars.tsx","../src/components/hazo_ui_charts/date_range_selector.tsx","../src/components/hazo_ui_celebration/index.tsx"],"names":["_extends","_objectWithoutPropertiesLoose","twMerge","clsx","React","generateRequestId","withContext","setBrowserCorrelationId","cva","React2","Slot","jsx","DialogPrimitive","React3","jsxs","X","React4","PopoverPrimitive","React5","React6","SelectPrimitive","React7","ChevronDown","ChevronUp","Check","TooltipPrimitive","React8","DayPicker","ChevronLeft","ChevronRight","useState","CalendarIcon","format","useEffect","Filter","Plus","useSortable","CSS","GripVertical","ArrowUp","ArrowDown","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","arrayMove","ArrowUpDown","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","React9","RadioGroupPrimitive","Circle","FaIcons","MdIcons","HiIcons","BiIcons","AiIcons","BsIcons","FiIcons","IoIcons","RiIcons","TbIcons","CiIcons","isSelected","color","parts","React10","React11","import_extends","import_objectWithoutPropertiesLoose","translateColor","useRef","useCallback","clamp","useMemo","_jsx","_excluded","esm_default","Pointer","validHex","value","_jsxs","Fragment","React22","LuUndo2","LuRedo2","LuMinus","LuPlus","LuBold","LuItalic","LuUnderline","LuStrikethrough","LuSubscript","LuSuperscript","LuLink","LuRemoveFormatting","LuPalette","LuHighlighter","LuAlignLeft","LuAlignCenter","LuAlignRight","LuAlignJustify","LuList","LuListOrdered","LuListChecks","LuIndentDecrease","LuIndentIncrease","RxDividerHorizontal","LuImage","LuTable","LuTableRowsSplit","LuTableColumnsSplit","LuTrash2","_","LuGrid3X3","LuVariable","LuPaperclip","LuFileText","LuFileCode","LuFile","LuX","Extension","NodeViewWrapper","Node","mergeAttributes","ReactNodeViewRenderer","TabsPrimitive","React23","React24","useEditor","StarterKit","TextStyle","FontFamily","Underline","Subscript","Superscript","Link","TextAlign","Highlight","Color","Image","Placeholder","HorizontalRule","Table","TableRow","TableCell","TableHeader","TaskList","TaskItem","editor","EditorContent","PluginKey","Suggestion","get_variant_classes","get_custom_color_styles","React25","group_commands","createPortal","index_default","React26","get_editor_output","React27","DialogPrimitive2","Loader2","React28","DialogPrimitive3","DrawerPrimitive","React29","React30","AccordionPrimitive","React31","React32","CheckboxPrimitive","DropdownMenuPrimitive","React33","HoverCardPrimitive","React34","Label","React35","React36","SwitchPrimitives","React37","Separator","React38","SeparatorPrimitive","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","React39","ScrollAreaPrimitive","React40","React41","TogglePrimitive","React42","ToggleGroupPrimitive","AlertDialogPrimitive","React43","React44","AlertTriangle","OctagonAlert","React45","React46","SonnerToaster","toast","CheckCircle2","Pencil","useDroppable","React47","React48","React49","closestCorners","DragOverlay","React50","renderCell","Toolbar","React51","ChevronsUpDown","PAD","React52","PAD_LEFT","PAD_RIGHT","PAD_TOP","PAD_BOTTOM","AXIS_LABEL_COLOR","GRIDLINE_COLOR","compute_geometry","React53","React54","Download","Share2","Copy"],"mappings":"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","file":"index.cjs","sourcesContent":["function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// Utility functions for hazo_ui component library\n// Provides className merging utility (cn function)\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges class names using clsx and tailwind-merge\n * @param inputs - Class values to merge\n * @returns Merged class string\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n","/**\n * hazo_context_provider/index.tsx\n *\n * <HazoContextProvider> — browser-side correlation-ID provider.\n *\n * Mounts hazo_core's browser context ref with a stable correlation ID for the\n * current tab. Once mounted, every downstream consumer that calls\n * `getCorrelationId()` / `getContext()` / `fetchWithRequestId()` from\n * `hazo_core` (or any hazo_* package that does) sees the same ID.\n *\n * Per PRD §7: the browser uses a single module-level ref (vs the server's\n * AsyncLocalStorage) — appropriate for the one-tab-one-context reality.\n *\n * Usage — wrap once at the app root, typically in app/layout.tsx:\n *\n * import { HazoContextProvider } from 'hazo_ui';\n *\n * <HazoContextProvider>\n * <App />\n * </HazoContextProvider>\n *\n * Props:\n * - correlationId (optional): explicit ID to install. When omitted, a fresh\n * `req_<uuid>` is generated on mount via `generateRequestId()`.\n * - userId (optional): additional context field forwarded into the ref.\n *\n * The provider clears the context on unmount so server-side rendering or\n * test harnesses that mount/unmount repeatedly do not leak IDs between runs.\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { generateRequestId } from \"hazo_core\";\nimport { setBrowserCorrelationId, withContext } from \"hazo_core/client\";\n\nexport interface HazoContextProviderProps {\n /**\n * Explicit correlation ID. Omit to auto-generate one on mount.\n * Useful when the server passed an `X-Request-Id` header that the client\n * should preserve for end-to-end traceability.\n */\n correlationId?: string;\n /**\n * Optional userId to surface on the browser context. Re-mounts when the\n * value changes.\n */\n userId?: string;\n children: React.ReactNode;\n}\n\nexport function HazoContextProvider({\n correlationId,\n userId,\n children,\n}: HazoContextProviderProps): React.ReactElement {\n // Resolve the ID once per mount. Re-mounts when correlationId prop changes.\n const id = React.useMemo(\n () => correlationId ?? generateRequestId(),\n [correlationId],\n );\n\n React.useEffect(() => {\n // Install the correlation ID. withContext on the client is synchronous\n // and merges userId in atomically alongside the ID.\n withContext({ correlationId: id, userId }, () => {\n setBrowserCorrelationId(id);\n });\n\n return () => {\n // Clear on unmount so harness / SSR re-mounts do not leak IDs.\n setBrowserCorrelationId(undefined);\n };\n }, [id, userId]);\n\n return <>{children}</>;\n}\n","/**\n * Logger utility for hazo_ui.\n *\n * hazo_ui ships as a \"use client\" bundle, so we cannot statically import\n * hazo_core's `createLogger` here. hazo_core's browser entry deliberately\n * omits `createLogger` (it loads hazo_logs dynamically, a Node-only\n * package), and Turbopack flags namespace-member access against\n * statically-known missing exports — even property reads — as a bundle\n * error. So the default logger writes to console.\n *\n * Server-side consumers that want structured logs through hazo_core +\n * hazo_logs should call `set_logger(createLogger(\"hazo_ui\"))` from a server\n * boot path. The override mechanism is unchanged.\n */\n\nexport interface Logger {\n info: (message: string, data?: Record<string, unknown>) => void;\n debug: (message: string, data?: Record<string, unknown>) => void;\n warn: (message: string, data?: Record<string, unknown>) => void;\n error: (message: string, data?: Record<string, unknown>) => void;\n}\n\nconst console_logger: Logger = {\n info: (m, d) => (d ? console.log(`[hazo_ui] ${m}`, d) : console.log(`[hazo_ui] ${m}`)),\n debug: (m, d) => (d ? console.debug(`[hazo_ui] ${m}`, d) : console.debug(`[hazo_ui] ${m}`)),\n warn: (m, d) => (d ? console.warn(`[hazo_ui] ${m}`, d) : console.warn(`[hazo_ui] ${m}`)),\n error: (m, d) => (d ? console.error(`[hazo_ui] ${m}`, d) : console.error(`[hazo_ui] ${m}`)),\n};\n\nlet current_logger: Logger = console_logger;\n\n/**\n * Set the logger instance used throughout hazo_ui. Pass `undefined` to\n * reset to the console fallback.\n */\nexport function set_logger(logger: Logger | undefined): void {\n current_logger = logger ?? console_logger;\n}\n\n/**\n * Get the current logger instance. Defaults to a console writer; override\n * with `set_logger(...)` to plug in hazo_core's structured logger.\n */\nexport function get_logger(): Logger {\n return current_logger;\n}\n","/**\n * UUID helper for hazo_ui.\n *\n * Uses hazo_core's `generateRequestId()` and strips the `req_` prefix so the\n * resulting value fits a v4-shaped UUID slot. The `req_<uuid>` form is\n * preserved for correlation IDs that flow through logs and HTTP headers via\n * hazo_core's withContext / fetchWithRequestId.\n *\n * Per the workspace convention (Wave 2, D-015): never introduce new\n * randomUUID call sites — route everything through hazo_core so IDs stay\n * traceable and tests can stub IDs deterministically.\n */\n\nimport { generateRequestId } from \"hazo_core\";\n\n/**\n * Generate a bare UUID — same shape as a v4 UUID, but routed through hazo_core\n * so the generator stays consistent across the workspace.\n */\nexport function generateUUID(): string {\n return generateRequestId().slice(4);\n}\n","/**\n * hazo_ui_config.ts\n *\n * Purpose: Centralized configuration for hazo_ui component library\n * Provides default colors and styling for buttons, headers, and dialogs\n * Can be overridden globally via set_hazo_ui_config or per-component via props\n */\n\nexport interface HazoUiConfig {\n // Dialog Header Colors\n header_background_color?: string;\n header_text_color?: string;\n\n // Submit/Action Button Colors\n submit_button_background_color?: string;\n submit_button_text_color?: string;\n submit_button_hover_color?: string;\n\n // Cancel Button Colors\n cancel_button_background_color?: string;\n cancel_button_text_color?: string;\n cancel_button_border_color?: string;\n cancel_button_hover_color?: string;\n\n // Clear/Delete Button Colors\n clear_button_background_color?: string;\n clear_button_text_color?: string;\n clear_button_border_color?: string;\n clear_button_hover_color?: string;\n}\n\n// Default configuration\nconst default_config: HazoUiConfig = {\n // Headers use default theme colors by default (no override)\n header_background_color: undefined,\n header_text_color: undefined,\n\n // Submit buttons use primary/default variant (no override needed for default styling)\n submit_button_background_color: undefined,\n submit_button_text_color: undefined,\n submit_button_hover_color: undefined,\n\n // Cancel buttons use outline variant (no override needed for default styling)\n cancel_button_background_color: undefined,\n cancel_button_text_color: undefined,\n cancel_button_border_color: undefined,\n cancel_button_hover_color: undefined,\n\n // Clear buttons use outline variant (no override needed for default styling)\n clear_button_background_color: undefined,\n clear_button_text_color: undefined,\n clear_button_border_color: undefined,\n clear_button_hover_color: undefined,\n};\n\n// Global config instance\nlet global_config: HazoUiConfig = { ...default_config };\n\n/**\n * Get the current global hazo_ui configuration\n */\nexport function get_hazo_ui_config(): Readonly<HazoUiConfig> {\n return { ...global_config };\n}\n\n/**\n * Set global hazo_ui configuration\n * Merges provided config with existing config (partial update)\n *\n * @param config - Partial configuration to merge with current config\n *\n * @example\n * ```typescript\n * // Set custom submit button color globally\n * set_hazo_ui_config({\n * submit_button_background_color: '#3b82f6',\n * header_background_color: '#1e293b',\n * header_text_color: '#ffffff',\n * });\n * ```\n */\nexport function set_hazo_ui_config(config: Partial<HazoUiConfig>): void {\n global_config = { ...global_config, ...config };\n}\n\n/**\n * Reset hazo_ui configuration to defaults\n */\nexport function reset_hazo_ui_config(): void {\n global_config = { ...default_config };\n}\n","// Button component for hazo_ui library\n// Based on shadcn/ui button component\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background 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 variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground 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-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"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\n// Inline style fallbacks keyed by variant.\n// These bypass Tailwind's color utility compilation so buttons render correctly\n// when the consumer's Tailwind hasn't scanned hazo_ui's output. Values are wrapped\n// in hsl() to match the shadcn convention of storing raw HSL channels in CSS vars\n// (`--primary: 222.2 47.4% 11.2%`). A consumer using full color values (hex/rgb)\n// for the CSS vars should override these via the `style` prop.\nconst variant_styles: Record<string, React.CSSProperties> = {\n default: {\n backgroundColor: \"hsl(var(--primary))\",\n color: \"hsl(var(--primary-foreground))\",\n border: \"1px solid hsl(var(--primary))\",\n },\n destructive: {\n backgroundColor: \"hsl(var(--destructive))\",\n color: \"hsl(var(--destructive-foreground))\",\n border: \"1px solid hsl(var(--destructive))\",\n },\n outline: {\n backgroundColor: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n border: \"1px solid hsl(var(--border))\",\n },\n secondary: {\n backgroundColor: \"hsl(var(--secondary))\",\n color: \"hsl(var(--secondary-foreground))\",\n },\n};\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, style, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n const fallback_styles = variant_styles[variant ?? \"default\"] ?? {};\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n style={{ ...fallback_styles, ...style }}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n\n","// Dialog component for hazo_ui library\n// Based on shadcn/ui dialog component\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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 sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n \"break-words [overflow-wrap:anywhere]\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n\n","// Command component for hazo_ui library\n// Based on shadcn/ui command component (simplified version)\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Command = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = \"Command\";\n\nconst CommandInput = React.forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement> & {\n onValueChange?: (value: string) => void;\n }\n>(({ className, onValueChange, onChange, ...props }, ref) => (\n <input\n ref={ref}\n className={cn(\n \"flex h-11 w-full rounded-md border border-input bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 px-3\",\n className\n )}\n onChange={(e) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n }}\n {...props}\n />\n));\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n {...props}\n />\n));\nCommandList.displayName = \"CommandList\";\n\nconst CommandEmpty = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>((props, ref) => (\n <div\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n));\nCommandEmpty.displayName = \"CommandEmpty\";\n\nconst CommandGroup = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n heading?: string;\n }\n>(({ className, heading, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground\",\n className\n )}\n {...props}\n >\n {heading && (\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground\">\n {heading}\n </div>\n )}\n {children}\n </div>\n));\nCommandGroup.displayName = \"CommandGroup\";\n\nconst CommandItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n onSelect?: (value: string) => void;\n value?: string;\n selected?: boolean;\n }\n>(({ className, onSelect, value, selected, style, ...props }, ref) => {\n const handleClick = () => {\n if (onSelect && value) {\n onSelect(value);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"cls_command_item\",\n \"relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n // When selected, apply accent background and ensure all text is visible\n selected && \"bg-accent text-accent-foreground [&_.text-muted-foreground]:text-accent-foreground/70\",\n className\n )}\n style={selected ? {\n // Explicit inline styles as fallback for consumers with non-HSL CSS variables\n backgroundColor: \"var(--accent, #f1f5f9)\",\n color: \"var(--accent-foreground, #0f172a)\",\n ...style,\n } : style}\n onClick={handleClick}\n {...props}\n />\n );\n});\nCommandItem.displayName = \"CommandItem\";\n\nexport {\n Command,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n};\n\n","// Popover component for hazo_ui library\n// Based on shadcn/ui popover component\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\n\n","// Input component for hazo_ui library\n// Based on shadcn/ui input component\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n\n","// Select component for hazo_ui library\n// Based on shadcn/ui select component\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Select = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md 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\",\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 {...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)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n\n","// Tooltip component for hazo_ui library\n// Based on shadcn/ui tooltip component\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md 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\",\n className\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n\n","// Calendar component for hazo_ui library\n// Based on shadcn/ui calendar component\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { cn } from \"../../lib/utils\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n }}\n {...props}\n />\n );\n}\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n\n","\"use client\";\n\n/**\n * Hazo UI Multi Filter Dialog Component\n *\n * Reusable component for multi-field filtering with different input types.\n * Allows users to select multiple fields for filtering with appropriate input controls.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { Input } from \"../ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { Calendar as CalendarComponent } from \"../ui/calendar\";\nimport { Filter, X, Plus, Calendar as CalendarIcon } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { format } from \"date-fns\";\nimport { get_hazo_ui_config } from \"../../lib/hazo_ui_config\";\n\nexport interface FilterField {\n value: string;\n label: string;\n type: 'text' | 'number' | 'combobox' | 'boolean' | 'date';\n textConfig?: {\n minLength?: number;\n maxLength?: number;\n };\n numberConfig?: {\n min?: number;\n max?: number;\n allowDecimal?: boolean;\n decimalLength?: number;\n };\n comboboxOptions?: Array<{ label: string; value: string }>;\n booleanLabels?: {\n trueLabel?: string;\n falseLabel?: string;\n };\n}\n\nexport interface FilterConfig {\n field: string;\n operator?: string;\n value: any;\n}\n\ninterface HazoUiMultiFilterDialogProps {\n availableFields: FilterField[];\n onFilterChange: (filterConfig: FilterConfig[]) => void;\n initialFilters?: FilterConfig[];\n title?: string;\n description?: string;\n\n // Color overrides (falls back to hazo_ui_config)\n headerBackgroundColor?: string;\n headerTextColor?: string;\n submitButtonBackgroundColor?: string;\n submitButtonTextColor?: string;\n cancelButtonBackgroundColor?: string;\n cancelButtonTextColor?: string;\n cancelButtonBorderColor?: string;\n clearButtonBackgroundColor?: string;\n clearButtonTextColor?: string;\n clearButtonBorderColor?: string;\n}\n\ninterface FilterFieldItemProps {\n filterConfig: FilterConfig;\n fieldConfig: FilterField;\n onValueChange: (value: any) => void;\n onOperatorChange?: (operator: string) => void;\n onDelete: () => void;\n}\n\nfunction FilterFieldItem({\n filterConfig,\n fieldConfig,\n onValueChange,\n onOperatorChange,\n onDelete,\n}: FilterFieldItemProps) {\n const [isCalendarOpen, setIsCalendarOpen] = useState(false);\n\n const renderInput = () => {\n switch (fieldConfig.type) {\n case 'text':\n return (\n <Input\n type=\"text\"\n value={filterConfig.value || ''}\n onChange={(e) => {\n const value = e.target.value;\n if (fieldConfig.textConfig?.maxLength && value.length > fieldConfig.textConfig.maxLength) {\n return;\n }\n onValueChange(value);\n }}\n placeholder=\"Enter text...\"\n minLength={fieldConfig.textConfig?.minLength}\n maxLength={fieldConfig.textConfig?.maxLength}\n className=\"cls_filter_text_input h-8 w-full min-w-0 text-sm\"\n />\n );\n\n case 'number': {\n const numberOperators = [\n { value: 'equals', label: '=' },\n { value: 'not_equals', label: '≠' },\n { value: 'greater_than', label: '>' },\n { value: 'less_than', label: '<' },\n { value: 'greater_equal', label: '≥' },\n { value: 'less_equal', label: '≤' },\n ];\n\n return (\n <div className=\"cls_number_filter_container flex w-full items-center gap-1.5\">\n <Select\n value={filterConfig.operator || 'equals'}\n onValueChange={(value) => onOperatorChange?.(value)}\n >\n <SelectTrigger className=\"cls_operator_select h-8 w-[60px] shrink-0 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {numberOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n <span className=\"font-mono\">{op.label}</span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n type=\"number\"\n value={filterConfig.value !== undefined && filterConfig.value !== null ? filterConfig.value : ''}\n onChange={(e) => {\n const value = e.target.value;\n if (value === '') {\n onValueChange('');\n return;\n }\n let numValue = fieldConfig.numberConfig?.allowDecimal\n ? parseFloat(value)\n : parseInt(value, 10);\n\n if (isNaN(numValue)) return;\n\n if (fieldConfig.numberConfig?.allowDecimal && fieldConfig.numberConfig?.decimalLength) {\n const decimalPlaces = value.split('.')[1]?.length || 0;\n if (decimalPlaces > fieldConfig.numberConfig.decimalLength) return;\n }\n\n if (fieldConfig.numberConfig?.min !== undefined && numValue < fieldConfig.numberConfig.min) {\n numValue = fieldConfig.numberConfig.min;\n }\n if (fieldConfig.numberConfig?.max !== undefined && numValue > fieldConfig.numberConfig.max) {\n numValue = fieldConfig.numberConfig.max;\n }\n\n onValueChange(numValue);\n }}\n placeholder=\"Value\"\n min={fieldConfig.numberConfig?.min}\n max={fieldConfig.numberConfig?.max}\n step={fieldConfig.numberConfig?.allowDecimal ? 0.01 : 1}\n className=\"cls_filter_number_input h-8 flex-1 min-w-0 text-sm tabular-nums\"\n />\n </div>\n );\n }\n\n case 'combobox':\n return (\n <Select\n value={filterConfig.value || ''}\n onValueChange={(value) => onValueChange(value)}\n >\n <SelectTrigger className=\"cls_filter_combobox_select h-8 w-full min-w-0 text-sm\">\n <SelectValue placeholder=\"Select option...\" />\n </SelectTrigger>\n <SelectContent>\n {fieldConfig.comboboxOptions?.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n\n case 'boolean': {\n const trueLabel = fieldConfig.booleanLabels?.trueLabel || 'On';\n const falseLabel = fieldConfig.booleanLabels?.falseLabel || 'Off';\n\n return (\n <Select\n value={filterConfig.value !== undefined && filterConfig.value !== null ? String(filterConfig.value) : ''}\n onValueChange={(value) => onValueChange(value === 'true')}\n >\n <SelectTrigger className=\"cls_filter_boolean_select h-8 w-full min-w-0 text-sm\">\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">{trueLabel}</SelectItem>\n <SelectItem value=\"false\">{falseLabel}</SelectItem>\n </SelectContent>\n </Select>\n );\n }\n\n case 'date': {\n const dateOperators = [\n { value: 'equals', label: '=' },\n { value: 'not_equals', label: '≠' },\n { value: 'greater_than', label: '>' },\n { value: 'less_than', label: '<' },\n { value: 'greater_equal', label: '≥' },\n { value: 'less_equal', label: '≤' },\n ];\n\n const selectedDate = filterConfig.value\n ? (typeof filterConfig.value === 'string' ? new Date(filterConfig.value) : filterConfig.value)\n : undefined;\n\n return (\n <div className=\"cls_date_filter_container flex w-full items-center gap-1.5\">\n <Select\n value={filterConfig.operator || 'equals'}\n onValueChange={(value) => onOperatorChange?.(value)}\n >\n <SelectTrigger className=\"cls_operator_select h-8 w-[60px] shrink-0 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {dateOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n <span className=\"font-mono\">{op.label}</span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Popover open={isCalendarOpen} onOpenChange={setIsCalendarOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n \"cls_date_picker_trigger h-8 flex-1 justify-start gap-2 px-2.5 text-left text-sm font-normal min-w-0\",\n !selectedDate && \"text-muted-foreground\"\n )}\n >\n <CalendarIcon className=\"cls_calendar_icon h-3.5 w-3.5 shrink-0\" />\n <span className=\"cls_date_text truncate\">\n {selectedDate ? format(selectedDate, \"MMM d, yyyy\") : \"Pick a date\"}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_calendar_popover w-auto p-0\" align=\"start\">\n <CalendarComponent\n mode=\"single\"\n selected={selectedDate}\n onSelect={(date) => {\n onValueChange(date);\n setIsCalendarOpen(false);\n }}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n }\n\n default:\n return null;\n }\n };\n\n return (\n <div className=\"cls_filter_field_item group flex flex-col gap-2 rounded-lg border border-border/70 bg-card px-3 py-2.5 transition-colors hover:border-border sm:flex-row sm:items-center sm:gap-3\">\n <span className=\"cls_field_label w-full shrink-0 truncate text-xs font-semibold uppercase tracking-wide text-muted-foreground sm:w-[110px] sm:text-sm sm:normal-case sm:font-medium sm:text-foreground sm:tracking-normal\">\n {fieldConfig.label}\n </span>\n <div className=\"cls_field_input_container flex min-w-0 flex-1 items-center gap-2\">\n <div className=\"min-w-0 flex-1\">{renderInput()}</div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDelete}\n className=\"cls_delete_btn h-7 w-7 shrink-0 p-0 text-muted-foreground/60 hover:bg-destructive/10 hover:text-destructive\"\n aria-label={`Remove ${fieldConfig.label} filter`}\n >\n <X className=\"cls_delete_icon h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n );\n}\n\nexport function HazoUiMultiFilterDialog({\n availableFields,\n onFilterChange,\n initialFilters = [],\n title = \"Filter\",\n description = \"Add fields to filter by. Select a field and set its value.\",\n headerBackgroundColor,\n headerTextColor,\n submitButtonBackgroundColor,\n submitButtonTextColor,\n cancelButtonBackgroundColor,\n cancelButtonTextColor,\n cancelButtonBorderColor,\n clearButtonBackgroundColor,\n clearButtonTextColor,\n clearButtonBorderColor,\n}: HazoUiMultiFilterDialogProps) {\n const config = get_hazo_ui_config();\n\n const finalSubmitBgColor = submitButtonBackgroundColor ?? config.submit_button_background_color;\n const finalSubmitTextColor = submitButtonTextColor ?? config.submit_button_text_color;\n const finalCancelBgColor = cancelButtonBackgroundColor ?? config.cancel_button_background_color;\n const finalCancelTextColor = cancelButtonTextColor ?? config.cancel_button_text_color;\n const finalCancelBorderColor = cancelButtonBorderColor ?? config.cancel_button_border_color;\n const finalClearBgColor = clearButtonBackgroundColor ?? config.clear_button_background_color;\n const finalClearTextColor = clearButtonTextColor ?? config.clear_button_text_color;\n const finalClearBorderColor = clearButtonBorderColor ?? config.clear_button_border_color;\n\n const submitButtonStyles: React.CSSProperties = {\n ...(finalSubmitBgColor && { backgroundColor: finalSubmitBgColor, borderColor: finalSubmitBgColor }),\n ...(finalSubmitTextColor && { color: finalSubmitTextColor }),\n };\n\n const cancelButtonStyles: React.CSSProperties = {\n ...(finalCancelBgColor && { backgroundColor: finalCancelBgColor }),\n ...(finalCancelTextColor && { color: finalCancelTextColor }),\n ...(finalCancelBorderColor && { borderColor: finalCancelBorderColor }),\n };\n\n const clearButtonStyles: React.CSSProperties = {\n ...(finalClearBgColor && { backgroundColor: finalClearBgColor }),\n ...(finalClearTextColor && { color: finalClearTextColor }),\n ...(finalClearBorderColor && { borderColor: finalClearBorderColor }),\n };\n\n const finalHeaderBgColor = headerBackgroundColor ?? config.header_background_color;\n const finalHeaderTextColor = headerTextColor ?? config.header_text_color;\n\n const headerStyles: React.CSSProperties = {\n ...(finalHeaderBgColor && { backgroundColor: finalHeaderBgColor }),\n ...(finalHeaderTextColor && { color: finalHeaderTextColor }),\n };\n\n const [isOpen, setIsOpen] = useState(false);\n const [filterFields, setFilterFields] = useState<FilterConfig[]>(initialFilters);\n const [isComboboxOpen, setIsComboboxOpen] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setFilterFields(initialFilters);\n }\n }, [isOpen, initialFilters]);\n\n const handleAddField = (fieldValue: string) => {\n if (filterFields.some(ff => ff.field === fieldValue)) return;\n\n const fieldConfig = availableFields.find(af => af.value === fieldValue);\n if (!fieldConfig) return;\n\n let defaultValue: any = '';\n if (fieldConfig.type === 'boolean') {\n defaultValue = false;\n } else if (fieldConfig.type === 'number') {\n defaultValue = fieldConfig.numberConfig?.min || 0;\n } else if (fieldConfig.type === 'date') {\n defaultValue = new Date();\n }\n\n const newFilter: FilterConfig = {\n field: fieldValue,\n operator: (fieldConfig.type === 'number' || fieldConfig.type === 'date') ? 'equals' : undefined,\n value: defaultValue,\n };\n setFilterFields([...filterFields, newFilter]);\n setIsComboboxOpen(false);\n };\n\n const handleDeleteField = (fieldValue: string) => {\n setFilterFields(filterFields.filter(ff => ff.field !== fieldValue));\n };\n\n const handleValueChange = (fieldValue: string, value: any) => {\n setFilterFields(\n filterFields.map(ff =>\n ff.field === fieldValue ? { ...ff, value } : ff\n )\n );\n };\n\n const handleOperatorChange = (fieldValue: string, operator: string) => {\n setFilterFields(\n filterFields.map(ff =>\n ff.field === fieldValue ? { ...ff, operator } : ff\n )\n );\n };\n\n const handleApply = () => {\n onFilterChange([...filterFields]);\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setFilterFields(initialFilters);\n setIsOpen(false);\n };\n\n const handleClearAll = () => {\n setFilterFields([]);\n };\n\n const availableFieldsToAdd = availableFields.filter(\n af => !filterFields.some(ff => ff.field === af.value)\n );\n\n const getFieldConfig = (fieldValue: string): FilterField | undefined => {\n return availableFields.find(af => af.value === fieldValue);\n };\n\n const hasActiveFilters = initialFilters.length > 0;\n\n const tooltipContent = hasActiveFilters ? (\n <div className=\"cls_filter_tooltip_content space-y-1\">\n <div className=\"cls_tooltip_title text-xs font-semibold mb-1\">Active filters</div>\n {initialFilters.map((filterConfig) => {\n const fieldConfig = getFieldConfig(filterConfig.field);\n if (!fieldConfig) return null;\n\n let displayValue = String(filterConfig.value);\n if (fieldConfig.type === 'boolean') {\n displayValue = filterConfig.value\n ? (fieldConfig.booleanLabels?.trueLabel || 'On')\n : (fieldConfig.booleanLabels?.falseLabel || 'Off');\n } else if (fieldConfig.type === 'combobox') {\n const option = fieldConfig.comboboxOptions?.find(opt => opt.value === filterConfig.value);\n displayValue = option?.label || displayValue;\n } else if (fieldConfig.type === 'date') {\n const dateValue = filterConfig.value instanceof Date\n ? filterConfig.value\n : new Date(filterConfig.value);\n if (!isNaN(dateValue.getTime())) {\n displayValue = format(dateValue, \"MMM d, yyyy\");\n }\n }\n\n const operatorLabel = filterConfig.operator\n ? filterConfig.operator.replace('_', ' ').replace(/\\b\\w/g, l => l.toUpperCase()) + ' '\n : '';\n\n return (\n <div key={filterConfig.field} className=\"cls_tooltip_item text-xs\">\n {fieldConfig.label}: {operatorLabel}{displayValue}\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"cls_filter_tooltip_content text-xs\">No active filters</div>\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cls_filter_button\"\n aria-label=\"Open filter dialog\"\n >\n <Filter\n className={cn(\n \"cls_filter_icon h-4 w-4 mr-2\",\n hasActiveFilters && \"text-blue-600\"\n )}\n />\n Filter\n {hasActiveFilters && (\n <span className=\"cls_filter_count ml-2 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-blue-600 px-1 text-[10px] font-semibold text-white\">\n {initialFilters.length}\n </span>\n )}\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DialogContent className=\"cls_filter_dialog_content max-w-lg gap-0 p-0 sm:rounded-xl max-h-[90vh]\">\n <DialogHeader\n className=\"cls_filter_dialog_header space-y-1 border-b px-5 py-4 text-left\"\n style={headerStyles}\n >\n <DialogTitle className=\"text-base font-semibold\">{title}</DialogTitle>\n <DialogDescription className=\"text-xs leading-relaxed text-muted-foreground\">\n {description}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"cls_filter_dialog_body space-y-3 overflow-y-auto px-5 py-4\">\n {filterFields.length > 0 ? (\n <div className=\"cls_filter_fields_list space-y-1.5\">\n {filterFields.map((filterConfig) => {\n const fieldConfig = getFieldConfig(filterConfig.field);\n if (!fieldConfig) return null;\n\n return (\n <FilterFieldItem\n key={filterConfig.field}\n filterConfig={filterConfig}\n fieldConfig={fieldConfig}\n onValueChange={(value) => handleValueChange(filterConfig.field, value)}\n onOperatorChange={(operator) => handleOperatorChange(filterConfig.field, operator)}\n onDelete={() => handleDeleteField(filterConfig.field)}\n />\n );\n })}\n </div>\n ) : (\n <div className=\"cls_empty_filter_fields rounded-lg border border-dashed border-border/70 bg-muted/20 px-4 py-6 text-center text-xs text-muted-foreground\">\n No filters yet. Add one below to narrow down the results.\n </div>\n )}\n\n <div className=\"cls_add_field_section\">\n <Popover open={isComboboxOpen} onOpenChange={setIsComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n role=\"combobox\"\n aria-expanded={isComboboxOpen}\n disabled={availableFieldsToAdd.length === 0}\n className=\"cls_add_field_combobox w-full justify-start gap-2 border border-dashed border-border/70 text-sm font-medium text-muted-foreground hover:border-border hover:bg-muted/40 hover:text-foreground\"\n >\n <Plus className=\"cls_plus_icon h-4 w-4\" />\n <span>\n {availableFieldsToAdd.length === 0 ? 'All fields added' : 'Add filter field'}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_combobox_popover w-[var(--radix-popover-trigger-width)] p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder=\"Search fields...\" className=\"cls_command_input\" />\n <CommandList>\n {availableFieldsToAdd.length === 0 ? (\n <CommandEmpty>No fields available.</CommandEmpty>\n ) : (\n <CommandGroup>\n {availableFieldsToAdd.map((field) => (\n <CommandItem\n key={field.value}\n value={field.label}\n onSelect={() => handleAddField(field.value)}\n className=\"cls_command_item\"\n >\n {field.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n </div>\n\n <DialogFooter className=\"cls_filter_dialog_footer flex flex-row items-center justify-between gap-2 border-t bg-muted/20 px-5 py-3 sm:justify-between sm:space-x-0\">\n <div className=\"cls_footer_left\">\n {filterFields.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClearAll}\n className=\"cls_clear_all_btn text-muted-foreground hover:text-foreground\"\n style={clearButtonStyles}\n >\n Clear all\n </Button>\n )}\n </div>\n <div className=\"cls_footer_right flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleCancel}\n className=\"cls_cancel_btn\"\n style={cancelButtonStyles}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleApply}\n className=\"cls_apply_btn\"\n style={submitButtonStyles}\n >\n Apply\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","\"use client\";\n\n/**\n * Hazo UI Multi Sort Dialog Component\n *\n * Reusable component for multi-field sorting with drag-and-drop reordering.\n * Allows users to select multiple fields for sorting, reorder them, and set\n * ascending/descending direction.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { ArrowUpDown, GripVertical, X, Plus, ArrowUp, ArrowDown } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { get_hazo_ui_config } from \"../../lib/hazo_ui_config\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nexport interface SortField {\n value: string;\n label: string;\n}\n\nexport interface SortConfig {\n field: string;\n direction: 'asc' | 'desc';\n}\n\ninterface HazoUiMultiSortDialogProps {\n availableFields: SortField[];\n onSortChange: (sortConfig: SortConfig[]) => void;\n initialSortFields?: SortConfig[];\n title?: string;\n description?: string;\n\n // Color overrides (falls back to hazo_ui_config)\n headerBackgroundColor?: string;\n headerTextColor?: string;\n submitButtonBackgroundColor?: string;\n submitButtonTextColor?: string;\n cancelButtonBackgroundColor?: string;\n cancelButtonTextColor?: string;\n cancelButtonBorderColor?: string;\n clearButtonBackgroundColor?: string;\n clearButtonTextColor?: string;\n clearButtonBorderColor?: string;\n}\n\ninterface SortableSortFieldItemProps {\n sortConfig: SortConfig;\n fieldLabel: string;\n priority: number;\n onDirectionChange: (direction: 'asc' | 'desc') => void;\n onDelete: () => void;\n}\n\nfunction SortableSortFieldItem({\n sortConfig,\n fieldLabel,\n priority,\n onDirectionChange,\n onDelete,\n}: SortableSortFieldItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: sortConfig.field });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.6 : 1,\n zIndex: isDragging ? 10 : undefined,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n \"cls_sortable_sort_field_item group flex items-center gap-2.5 rounded-lg border border-border/70 bg-card pl-1.5 pr-2 py-2 transition-shadow\",\n isDragging ? \"shadow-md\" : \"hover:border-border\"\n )}\n >\n <button\n type=\"button\"\n {...attributes}\n {...listeners}\n className=\"cls_drag_handle flex h-7 w-5 shrink-0 cursor-grab items-center justify-center rounded text-muted-foreground/60 hover:text-foreground active:cursor-grabbing\"\n aria-label={`Reorder ${fieldLabel}`}\n >\n <GripVertical className=\"cls_drag_icon h-4 w-4\" />\n </button>\n <span\n className=\"cls_priority_badge inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-muted text-[10px] font-semibold tabular-nums text-muted-foreground\"\n aria-label={`Sort priority ${priority}`}\n >\n {priority}\n </span>\n <span className=\"cls_field_label flex-1 truncate text-sm font-medium text-foreground\">\n {fieldLabel}\n </span>\n <div\n role=\"radiogroup\"\n aria-label={`Sort direction for ${fieldLabel}`}\n className=\"cls_direction_control inline-flex shrink-0 items-center rounded-md border border-border/70 bg-muted/40 p-0.5\"\n >\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={sortConfig.direction === 'asc'}\n data-active={sortConfig.direction === 'asc'}\n onClick={() => onDirectionChange('asc')}\n className=\"cls_dir_asc inline-flex items-center gap-1 rounded px-2 py-1 text-xs font-medium text-muted-foreground transition-colors data-[active=true]:bg-background data-[active=true]:text-foreground data-[active=true]:shadow-sm hover:text-foreground\"\n >\n <ArrowUp className=\"h-3 w-3\" />\n Asc\n </button>\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={sortConfig.direction === 'desc'}\n data-active={sortConfig.direction === 'desc'}\n onClick={() => onDirectionChange('desc')}\n className=\"cls_dir_desc inline-flex items-center gap-1 rounded px-2 py-1 text-xs font-medium text-muted-foreground transition-colors data-[active=true]:bg-background data-[active=true]:text-foreground data-[active=true]:shadow-sm hover:text-foreground\"\n >\n <ArrowDown className=\"h-3 w-3\" />\n Desc\n </button>\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDelete}\n className=\"cls_delete_btn h-7 w-7 shrink-0 p-0 text-muted-foreground/60 hover:bg-destructive/10 hover:text-destructive\"\n aria-label={`Remove ${fieldLabel} from sort`}\n >\n <X className=\"cls_delete_icon h-3.5 w-3.5\" />\n </Button>\n </div>\n );\n}\n\nexport function HazoUiMultiSortDialog({\n availableFields,\n onSortChange,\n initialSortFields = [],\n title = \"Sort\",\n description = \"Add fields to sort by, drag to reorder, toggle ascending or descending.\",\n headerBackgroundColor,\n headerTextColor,\n submitButtonBackgroundColor,\n submitButtonTextColor,\n cancelButtonBackgroundColor,\n cancelButtonTextColor,\n cancelButtonBorderColor,\n clearButtonBackgroundColor,\n clearButtonTextColor,\n clearButtonBorderColor,\n}: HazoUiMultiSortDialogProps) {\n // Get global config as defaults\n const config = get_hazo_ui_config();\n\n // Build button styles using config with prop overrides\n const finalSubmitBgColor = submitButtonBackgroundColor ?? config.submit_button_background_color;\n const finalSubmitTextColor = submitButtonTextColor ?? config.submit_button_text_color;\n const finalCancelBgColor = cancelButtonBackgroundColor ?? config.cancel_button_background_color;\n const finalCancelTextColor = cancelButtonTextColor ?? config.cancel_button_text_color;\n const finalCancelBorderColor = cancelButtonBorderColor ?? config.cancel_button_border_color;\n const finalClearBgColor = clearButtonBackgroundColor ?? config.clear_button_background_color;\n const finalClearTextColor = clearButtonTextColor ?? config.clear_button_text_color;\n const finalClearBorderColor = clearButtonBorderColor ?? config.clear_button_border_color;\n\n const submitButtonStyles: React.CSSProperties = {\n ...(finalSubmitBgColor && { backgroundColor: finalSubmitBgColor, borderColor: finalSubmitBgColor }),\n ...(finalSubmitTextColor && { color: finalSubmitTextColor }),\n };\n\n const cancelButtonStyles: React.CSSProperties = {\n ...(finalCancelBgColor && { backgroundColor: finalCancelBgColor }),\n ...(finalCancelTextColor && { color: finalCancelTextColor }),\n ...(finalCancelBorderColor && { borderColor: finalCancelBorderColor }),\n };\n\n const clearButtonStyles: React.CSSProperties = {\n ...(finalClearBgColor && { backgroundColor: finalClearBgColor }),\n ...(finalClearTextColor && { color: finalClearTextColor }),\n ...(finalClearBorderColor && { borderColor: finalClearBorderColor }),\n };\n\n // Header styles\n const finalHeaderBgColor = headerBackgroundColor ?? config.header_background_color;\n const finalHeaderTextColor = headerTextColor ?? config.header_text_color;\n\n const headerStyles: React.CSSProperties = {\n ...(finalHeaderBgColor && { backgroundColor: finalHeaderBgColor }),\n ...(finalHeaderTextColor && { color: finalHeaderTextColor }),\n };\n\n const [isOpen, setIsOpen] = useState(false);\n const [sortFields, setSortFields] = useState<SortConfig[]>(initialSortFields);\n const [isComboboxOpen, setIsComboboxOpen] = useState(false);\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n // Sync local state with initialSortFields when dialog opens\n useEffect(() => {\n if (isOpen) {\n setSortFields(initialSortFields);\n }\n }, [isOpen, initialSortFields]);\n\n const handleAddField = (fieldValue: string) => {\n if (sortFields.some(sf => sf.field === fieldValue)) {\n return;\n }\n setSortFields([...sortFields, { field: fieldValue, direction: 'asc' }]);\n setIsComboboxOpen(false);\n };\n\n const handleDeleteField = (fieldValue: string) => {\n setSortFields(sortFields.filter(sf => sf.field !== fieldValue));\n };\n\n const handleDirectionChange = (fieldValue: string, direction: 'asc' | 'desc') => {\n setSortFields(\n sortFields.map(sf =>\n sf.field === fieldValue ? { ...sf, direction } : sf\n )\n );\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = sortFields.findIndex(sf => sf.field === active.id);\n const newIndex = sortFields.findIndex(sf => sf.field === over.id);\n if (oldIndex !== -1 && newIndex !== -1) {\n setSortFields(arrayMove(sortFields, oldIndex, newIndex));\n }\n };\n\n const handleApply = () => {\n onSortChange([...sortFields]);\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setSortFields(initialSortFields);\n setIsOpen(false);\n };\n\n const handleClearAll = () => {\n setSortFields([]);\n };\n\n const availableFieldsToAdd = availableFields.filter(\n af => !sortFields.some(sf => sf.field === af.value)\n );\n\n const getFieldLabel = (fieldValue: string): string => {\n return availableFields.find(af => af.value === fieldValue)?.label || fieldValue;\n };\n\n const hasActiveSorts = initialSortFields.length > 0;\n\n const tooltipContent = hasActiveSorts ? (\n <div className=\"cls_sort_tooltip_content space-y-1\">\n <div className=\"cls_tooltip_title text-xs font-semibold mb-1\">Active sorts</div>\n {initialSortFields.map((sortConfig, index) => (\n <div key={sortConfig.field} className=\"cls_tooltip_item text-xs\">\n {index + 1}. {getFieldLabel(sortConfig.field)} ({sortConfig.direction === 'asc' ? 'Asc' : 'Desc'})\n </div>\n ))}\n </div>\n ) : (\n <div className=\"cls_sort_tooltip_content text-xs\">No active sorts</div>\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cls_sort_button\"\n aria-label=\"Open sort dialog\"\n >\n <ArrowUpDown\n className={cn(\n \"cls_sort_icon h-4 w-4 mr-2\",\n hasActiveSorts && \"text-blue-600\"\n )}\n />\n Sort\n {hasActiveSorts && (\n <span className=\"cls_sort_count ml-2 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-blue-600 px-1 text-[10px] font-semibold text-white\">\n {initialSortFields.length}\n </span>\n )}\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DialogContent className=\"cls_sort_dialog_content max-w-lg gap-0 p-0 sm:rounded-xl\">\n <DialogHeader\n className=\"cls_sort_dialog_header space-y-1 border-b px-5 py-4 text-left\"\n style={headerStyles}\n >\n <DialogTitle className=\"text-base font-semibold\">{title}</DialogTitle>\n <DialogDescription className=\"text-xs leading-relaxed text-muted-foreground\">\n {description}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"cls_sort_dialog_body space-y-3 px-5 py-4\">\n {sortFields.length > 0 ? (\n <div className=\"cls_sort_fields_list space-y-1.5\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={sortFields.map(sf => sf.field)}\n strategy={verticalListSortingStrategy}\n >\n {sortFields.map((sortConfig, idx) => (\n <SortableSortFieldItem\n key={sortConfig.field}\n sortConfig={sortConfig}\n fieldLabel={getFieldLabel(sortConfig.field)}\n priority={idx + 1}\n onDirectionChange={(direction) =>\n handleDirectionChange(sortConfig.field, direction)\n }\n onDelete={() => handleDeleteField(sortConfig.field)}\n />\n ))}\n </SortableContext>\n </DndContext>\n </div>\n ) : (\n <div className=\"cls_empty_sort_fields rounded-lg border border-dashed border-border/70 bg-muted/20 px-4 py-6 text-center text-xs text-muted-foreground\">\n No sort fields yet. Add one below to start ordering rows.\n </div>\n )}\n\n <div className=\"cls_add_field_section\">\n <Popover open={isComboboxOpen} onOpenChange={setIsComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n role=\"combobox\"\n aria-expanded={isComboboxOpen}\n disabled={availableFieldsToAdd.length === 0}\n className=\"cls_add_field_combobox w-full justify-start gap-2 border border-dashed border-border/70 text-sm font-medium text-muted-foreground hover:border-border hover:bg-muted/40 hover:text-foreground\"\n >\n <Plus className=\"cls_plus_icon h-4 w-4\" />\n <span>\n {availableFieldsToAdd.length === 0 ? 'All fields added' : 'Add sort field'}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_combobox_popover w-[var(--radix-popover-trigger-width)] p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder=\"Search fields...\" className=\"cls_command_input\" />\n <CommandList>\n {availableFieldsToAdd.length === 0 ? (\n <CommandEmpty>No fields available.</CommandEmpty>\n ) : (\n <CommandGroup>\n {availableFieldsToAdd.map((field) => (\n <CommandItem\n key={field.value}\n value={field.label}\n onSelect={() => handleAddField(field.value)}\n className=\"cls_command_item\"\n >\n {field.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n </div>\n\n <DialogFooter className=\"cls_sort_dialog_footer flex flex-row items-center justify-between gap-2 border-t bg-muted/20 px-5 py-3 sm:justify-between sm:space-x-0\">\n <div className=\"cls_footer_left\">\n {sortFields.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClearAll}\n className=\"cls_clear_all_btn text-muted-foreground hover:text-foreground\"\n style={clearButtonStyles}\n >\n Clear all\n </Button>\n )}\n </div>\n <div className=\"cls_footer_right flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleCancel}\n className=\"cls_cancel_btn\"\n style={cancelButtonStyles}\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleApply}\n className=\"cls_apply_btn\"\n style={submitButtonStyles}\n >\n Apply\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","// Radio group component for hazo_ui library\n// Based on shadcn/ui radio group component\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n );\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n\n\n","\"use client\";\n\n/**\n * Hazo UI Flex Radio Component\n * \n * Flexible radio button/icon selection component with support for single and multi-selection modes,\n * customizable layouts, and react-icons integration.\n */\n\nimport { RadioGroup, RadioGroupItem } from \"../ui/radio-group\";\nimport { Button } from \"../ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { cn } from \"../../lib/utils\";\n// Import icon sets - tree-shaking will remove unused ones\nimport * as FaIcons from \"react-icons/fa\";\nimport * as MdIcons from \"react-icons/md\";\nimport * as HiIcons from \"react-icons/hi\";\nimport * as BiIcons from \"react-icons/bi\";\nimport * as AiIcons from \"react-icons/ai\";\nimport * as BsIcons from \"react-icons/bs\";\nimport * as FiIcons from \"react-icons/fi\";\nimport * as IoIcons from \"react-icons/io5\";\nimport * as RiIcons from \"react-icons/ri\";\nimport * as TbIcons from \"react-icons/tb\";\nimport * as CiIcons from \"react-icons/ci\";\n\n// Icon set mapping\nconst iconSetMap: Record<string, any> = {\n fa: FaIcons,\n md: MdIcons,\n hi: HiIcons,\n bi: BiIcons,\n ai: AiIcons,\n bs: BsIcons,\n fi: FiIcons,\n io: IoIcons,\n io5: IoIcons,\n ri: RiIcons,\n tb: TbIcons,\n ci: CiIcons,\n};\n\n/**\n * Get icon library for a given icon set\n */\nfunction getIconLibrary(iconSet: string): any {\n if (!iconSet) return null;\n const normalizedSet = iconSet.toLowerCase();\n return iconSetMap[normalizedSet] || null;\n}\n\nexport interface HazoUiFlexRadioItem {\n label: string;\n value: string;\n icon_selected?: string;\n icon_unselected?: string;\n fgcolor?: string; // Foreground color for the icon (text/icon color)\n bgcolor?: string; // Background color for the icon button\n}\n\nexport interface HazoUiFlexRadioProps {\n layout?: \"horizontal\" | \"vertical\";\n style?: \"radio\" | \"icons\";\n display_label?: boolean;\n icon_set?: string; // Package name like 'fa', 'md', etc.\n data: HazoUiFlexRadioItem[];\n selection: \"single\" | \"multi\";\n value: string | string[];\n onChange: (value: string | string[]) => void;\n className?: string;\n compressed?: boolean; // When true, removes padding and spacing between elements\n}\n\n/**\n * Get icon component from react-icons based on icon set and icon name\n */\nfunction getIconComponent(iconSet: string | undefined, iconName: string | undefined): React.ComponentType<any> | null {\n if (!iconSet || !iconName) return null;\n \n const iconLibrary = getIconLibrary(iconSet);\n if (!iconLibrary) return null;\n \n const IconComponent = iconLibrary[iconName];\n return IconComponent || null;\n}\n\n/**\n * Hazo UI Flex Radio Component\n * Supports single and multi-selection with radio buttons or icons\n */\nexport function HazoUiFlexRadio({\n layout = \"horizontal\",\n style = \"radio\",\n display_label = true,\n icon_set,\n data,\n selection = \"single\",\n value,\n onChange,\n className,\n compressed = false,\n}: HazoUiFlexRadioProps) {\n // Icon library is loaded lazily when needed\n\n /**\n * Handle single selection change\n */\n const handleSingleSelection = (selectedValue: string) => {\n onChange(selectedValue);\n };\n\n /**\n * Handle multi selection change\n */\n const handleMultiSelection = (selectedValue: string) => {\n const currentValues = Array.isArray(value) ? value : [];\n const isSelected = currentValues.includes(selectedValue);\n \n if (isSelected) {\n // Remove from selection\n onChange(currentValues.filter((v) => v !== selectedValue));\n } else {\n // Add to selection\n onChange([...currentValues, selectedValue]);\n }\n };\n\n /**\n * Check if an item is selected\n */\n const isSelected = (itemValue: string): boolean => {\n if (selection === \"single\") {\n return value === itemValue;\n } else {\n const currentValues = Array.isArray(value) ? value : [];\n return currentValues.includes(itemValue);\n }\n };\n\n /**\n * Render radio style option\n */\n const renderRadioOption = (item: HazoUiFlexRadioItem) => {\n const selected = isSelected(item.value);\n \n if (selection === \"single\") {\n const optionContent = (\n <div\n className={cn(\n \"cls_radio_option flex items-center gap-2\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n compressed ? \"\" : \"p-2 rounded-md\",\n \"hover:bg-accent transition-colors\",\n selected && \"bg-accent\"\n )}\n >\n <RadioGroupItem\n value={item.value}\n id={`radio-${item.value}`}\n className=\"cls_radio_item shrink-0\"\n />\n {display_label && (\n <label\n htmlFor={`radio-${item.value}`}\n className=\"cls_radio_label text-sm font-medium cursor-pointer flex-1\"\n >\n {item.label}\n </label>\n )}\n </div>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {optionContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n } else {\n // Multi-selection with checkbox-like behavior\n const optionContent = (\n <div\n className={cn(\n \"cls_radio_option flex items-center gap-2 cursor-pointer\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n compressed ? \"\" : \"p-2 rounded-md\",\n \"hover:bg-accent transition-colors\",\n selected && \"bg-accent\"\n )}\n onClick={() => handleMultiSelection(item.value)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleMultiSelection(item.value);\n }\n }}\n >\n <div\n className={cn(\n \"cls_checkbox_indicator h-4 w-4 rounded-sm border-2 border-primary flex items-center justify-center transition-colors shrink-0\",\n selected ? \"bg-primary\" : \"bg-background\"\n )}\n >\n {selected && (\n <svg\n className=\"cls_checkmark h-3 w-3 text-primary-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {display_label && (\n <span className=\"cls_checkbox_label text-sm font-medium flex-1\">\n {item.label}\n </span>\n )}\n </div>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {optionContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n }\n };\n\n /**\n * Render icon style option\n */\n const renderIconOption = (item: HazoUiFlexRadioItem) => {\n const selected = isSelected(item.value);\n \n // Get icon components\n const SelectedIcon = icon_set && item.icon_selected\n ? getIconComponent(icon_set, item.icon_selected)\n : null;\n const UnselectedIcon = icon_set && item.icon_unselected\n ? getIconComponent(icon_set, item.icon_unselected)\n : null;\n \n const IconComponent = selected && SelectedIcon ? SelectedIcon : (UnselectedIcon || SelectedIcon);\n \n // Apply custom colors if provided\n const buttonStyles: React.CSSProperties = {};\n if (item.bgcolor) {\n buttonStyles.backgroundColor = item.bgcolor;\n }\n \n const buttonContent = (\n <Button\n variant={selected ? \"default\" : \"ghost\"}\n size=\"default\"\n className={cn(\n \"cls_icon_option border-0\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n \"gap-2 h-auto\",\n compressed ? \"py-0 px-0\" : \"py-2 px-3 sm:py-3 sm:px-4\",\n // Only apply default colors if custom colors are not provided\n !item.bgcolor && selected && \"bg-primary text-primary-foreground\",\n !item.bgcolor && !selected && \"hover:bg-accent\"\n )}\n style={Object.keys(buttonStyles).length > 0 ? buttonStyles : undefined}\n onClick={() => {\n if (selection === \"single\") {\n handleSingleSelection(item.value);\n } else {\n handleMultiSelection(item.value);\n }\n }}\n aria-label={item.label}\n aria-pressed={selected}\n >\n {IconComponent && (\n <IconComponent \n className=\"cls_icon h-4 w-4 sm:h-5 sm:w-5\" \n style={item.fgcolor ? { color: item.fgcolor } : undefined}\n />\n )}\n {display_label && (\n <span \n className=\"cls_icon_label text-sm font-medium\"\n style={item.fgcolor ? { color: item.fgcolor } : undefined}\n >\n {item.label}\n </span>\n )}\n </Button>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {buttonContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n };\n\n // Container classes with single outline\n const containerClasses = cn(\n \"cls_hazo_ui_flex_radio border border-input rounded-md\",\n compressed ? \"\" : \"p-2 sm:p-3\",\n layout === \"horizontal\"\n ? cn(\n \"flex flex-row flex-wrap\",\n compressed ? \"gap-0\" : \"gap-2 sm:gap-3\"\n )\n : cn(\n \"flex flex-col\",\n compressed ? \"gap-0\" : \"gap-2 sm:gap-3\"\n ),\n className\n );\n \n // RadioGroup needs grid override for flex layout\n const radioGroupClasses = cn(\n containerClasses,\n \"!flex !flex-row !flex-wrap\" // Override RadioGroup's default grid\n );\n\n if (style === \"icons\") {\n // Icon style - use buttons\n return (\n <TooltipProvider delayDuration={1000}>\n <div className={containerClasses} role={selection === \"single\" ? \"radiogroup\" : \"group\"}>\n {data.map((item) => renderIconOption(item))}\n </div>\n </TooltipProvider>\n );\n } else {\n // Radio style - use RadioGroup for single, custom for multi\n if (selection === \"single\") {\n return (\n <TooltipProvider delayDuration={1000}>\n <RadioGroup\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={handleSingleSelection}\n className={layout === \"horizontal\" \n ? cn(radioGroupClasses, \"!flex-row\")\n : cn(radioGroupClasses, \"!flex-col\")\n }\n >\n {data.map((item) => renderRadioOption(item))}\n </RadioGroup>\n </TooltipProvider>\n );\n } else {\n return (\n <TooltipProvider delayDuration={1000}>\n <div className={containerClasses} role=\"group\">\n {data.map((item) => renderRadioOption(item))}\n </div>\n </TooltipProvider>\n );\n }\n }\n}\n\n","\"use client\";\n\n/**\n * Hazo UI Pill Radio Component\n *\n * Pill-shaped radio selection buttons with optional icons, customizable colors,\n * and horizontal/vertical layout support. Single-select only.\n */\n\nimport { cn } from \"../../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\n\n// Import icon sets - tree-shaking will remove unused ones\nimport * as FaIcons from \"react-icons/fa\";\nimport * as MdIcons from \"react-icons/md\";\nimport * as HiIcons from \"react-icons/hi\";\nimport * as BiIcons from \"react-icons/bi\";\nimport * as AiIcons from \"react-icons/ai\";\nimport * as BsIcons from \"react-icons/bs\";\nimport * as FiIcons from \"react-icons/fi\";\nimport * as IoIcons from \"react-icons/io5\";\nimport * as RiIcons from \"react-icons/ri\";\nimport * as TbIcons from \"react-icons/tb\";\nimport * as CiIcons from \"react-icons/ci\";\n\n// Icon set mapping\nconst icon_set_map: Record<string, any> = {\n fa: FaIcons,\n md: MdIcons,\n hi: HiIcons,\n bi: BiIcons,\n ai: AiIcons,\n bs: BsIcons,\n fi: FiIcons,\n io: IoIcons,\n io5: IoIcons,\n ri: RiIcons,\n tb: TbIcons,\n ci: CiIcons,\n};\n\n/**\n * Get icon component from react-icons based on icon set and icon name\n */\nfunction get_icon_component(icon_set: string | undefined, icon_name: string | undefined): React.ComponentType<any> | null {\n if (!icon_set || !icon_name) return null;\n const library = icon_set_map[icon_set.toLowerCase()];\n if (!library) return null;\n return library[icon_name] || null;\n}\n\nexport interface HazoUiPillRadioItem {\n label: string;\n value: string;\n icon?: string;\n color?: string;\n}\n\nexport interface HazoUiPillRadioProps {\n layout?: \"horizontal\" | \"vertical\";\n icon_set?: string;\n data: HazoUiPillRadioItem[];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n pill_size?: \"sm\" | \"md\" | \"lg\";\n equal_width?: boolean;\n}\n\n// Default accent color (blue matching the screenshot)\nconst DEFAULT_COLOR = \"#3b82f6\";\n\n/**\n * Convert a hex or named color to an rgba string with given opacity\n */\nfunction color_with_opacity(color: string, opacity: number): string {\n // Handle hex colors\n if (color.startsWith(\"#\")) {\n const hex = color.replace(\"#\", \"\");\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n return color;\n}\n\n/**\n * Size configuration for pill variants\n */\nconst size_classes: Record<string, string> = {\n sm: \"px-3 py-1.5 text-xs gap-1.5\",\n md: \"px-4 py-2 text-sm gap-2\",\n lg: \"px-5 py-2.5 text-base gap-2.5\",\n};\n\nconst icon_size_classes: Record<string, string> = {\n sm: \"h-3.5 w-3.5\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n};\n\nexport function HazoUiPillRadio({\n layout = \"horizontal\",\n icon_set = \"fa\",\n data,\n value,\n onChange,\n className,\n pill_size = \"md\",\n equal_width = false,\n}: HazoUiPillRadioProps) {\n return (\n <TooltipProvider delayDuration={1000}>\n <div\n className={cn(\n \"cls_hazo_ui_pill_radio\",\n layout === \"horizontal\"\n ? \"flex flex-row flex-wrap gap-3\"\n : \"inline-flex flex-col gap-3\",\n className\n )}\n role=\"radiogroup\"\n >\n {data.map((item) => {\n const is_selected = value === item.value;\n const accent = item.color || DEFAULT_COLOR;\n const IconComponent = get_icon_component(icon_set, item.icon);\n\n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={is_selected}\n onClick={() => onChange(item.value)}\n className={cn(\n \"cls_pill_radio_item\",\n \"inline-flex items-center rounded-full border cursor-pointer\",\n \"transition-all duration-200 font-medium whitespace-nowrap\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n size_classes[pill_size],\n equal_width && \"justify-center flex-1\",\n !is_selected && \"border-border bg-card text-muted-foreground hover:bg-accent/50\"\n )}\n style={\n is_selected\n ? {\n borderColor: accent,\n backgroundColor: color_with_opacity(accent, 0.08),\n color: accent,\n }\n : undefined\n }\n >\n {IconComponent && (\n <IconComponent\n className={cn(\"cls_pill_radio_icon shrink-0\", icon_size_classes[pill_size])}\n />\n )}\n <span className=\"cls_pill_radio_label\">{item.label}</span>\n </button>\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n })}\n </div>\n </TooltipProvider>\n );\n}\n","\"use client\";\n\n/**\n * Hazo UI Flex Input Component\n * \n * Enhanced input component with type validation, character restrictions, and error messaging.\n * Extends shadcn Input component with additional validation props.\n */\n\nimport * as React from \"react\";\nimport { Input, type InputProps } from \"../ui/input\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface HazoUiFlexInputProps extends Omit<InputProps, \"type\"> {\n input_type?: \"mixed\" | \"numeric\" | \"email\" | \"alpha\";\n text_len_min?: number;\n text_len_max?: number;\n num_min?: number;\n num_max?: number;\n regex?: string | RegExp;\n num_decimals?: number;\n format_guide?: string;\n format_guide_info?: boolean;\n}\n\n/**\n * Validate input value based on input_type and constraints\n */\nfunction validateInput(\n value: string,\n input_type: \"mixed\" | \"numeric\" | \"email\" | \"alpha\",\n text_len_min?: number,\n text_len_max?: number,\n num_min?: number,\n num_max?: number,\n regex?: string | RegExp,\n num_decimals?: number\n): { isValid: boolean; errorMessage?: string } {\n // Empty value validation\n if (value === \"\") {\n return { isValid: true };\n }\n\n // Type-specific validation\n switch (input_type) {\n case \"numeric\": {\n // Check if value is a valid number\n const numValue = parseFloat(value);\n if (isNaN(numValue)) {\n return { isValid: false, errorMessage: \"Must be a valid number\" };\n }\n\n // Check decimal places\n if (num_decimals !== undefined) {\n const decimalPlaces = value.split(\".\")[1]?.length || 0;\n if (decimalPlaces > num_decimals) {\n return {\n isValid: false,\n errorMessage: `Maximum ${num_decimals} decimal place${num_decimals !== 1 ? \"s\" : \"\"} allowed`,\n };\n }\n }\n\n // Check min/max\n if (num_min !== undefined && numValue < num_min) {\n return { isValid: false, errorMessage: `Must be at least ${num_min}` };\n }\n if (num_max !== undefined && numValue > num_max) {\n return { isValid: false, errorMessage: `Must be at most ${num_max}` };\n }\n break;\n }\n\n case \"alpha\": {\n // Check if value contains only letters, numbers, and spaces\n const alphaRegex = /^[A-Za-z0-9\\s]*$/;\n if (!alphaRegex.test(value)) {\n return { isValid: false, errorMessage: \"Only letters, numbers, and spaces are allowed\" };\n }\n break;\n }\n\n case \"email\": {\n // Basic email validation\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return { isValid: false, errorMessage: \"Must be a valid email address\" };\n }\n break;\n }\n\n case \"mixed\": {\n // Check length constraints\n if (text_len_min !== undefined && value.length < text_len_min) {\n return {\n isValid: false,\n errorMessage: `Must be at least ${text_len_min} character${text_len_min !== 1 ? \"s\" : \"\"}`,\n };\n }\n if (text_len_max !== undefined && value.length > text_len_max) {\n return {\n isValid: false,\n errorMessage: `Must be at most ${text_len_max} character${text_len_max !== 1 ? \"s\" : \"\"}`,\n };\n }\n break;\n }\n }\n\n // Regex validation (applies to all types if provided)\n if (regex) {\n const regexPattern = typeof regex === \"string\" ? new RegExp(regex) : regex;\n if (!regexPattern.test(value)) {\n return { isValid: false, errorMessage: \"Invalid format\" };\n }\n }\n\n return { isValid: true };\n}\n\n/**\n * Filter input value based on input_type to prevent invalid characters\n */\nfunction filterInputValue(\n value: string,\n input_type: \"mixed\" | \"numeric\" | \"email\" | \"alpha\",\n num_decimals?: number\n): string {\n switch (input_type) {\n case \"numeric\": {\n // Allow digits, decimal point, and minus sign\n let filtered = value.replace(/[^\\d.-]/g, \"\");\n\n // Handle decimal point - only allow one\n const parts = filtered.split(\".\");\n if (parts.length > 2) {\n filtered = parts[0] + \".\" + parts.slice(1).join(\"\");\n }\n\n // If num_decimals is 0, don't allow decimal point\n if (num_decimals === 0 && filtered.includes(\".\")) {\n filtered = filtered.replace(\".\", \"\");\n }\n\n // Limit decimal places\n if (num_decimals !== undefined && num_decimals > 0) {\n const parts = filtered.split(\".\");\n if (parts.length === 2 && parts[1].length > num_decimals) {\n filtered = parts[0] + \".\" + parts[1].substring(0, num_decimals);\n }\n }\n\n return filtered;\n }\n\n case \"alpha\": {\n // Allow letters, numbers, and spaces\n return value.replace(/[^A-Za-z0-9\\s]/g, \"\");\n }\n\n case \"email\":\n case \"mixed\":\n default: {\n // Allow all characters for email and mixed\n return value;\n }\n }\n}\n\nexport const HazoUiFlexInput = React.forwardRef<\n HTMLInputElement,\n HazoUiFlexInputProps\n>(\n (\n {\n className,\n input_type = \"mixed\",\n text_len_min,\n text_len_max,\n num_min,\n num_max,\n regex,\n num_decimals,\n format_guide,\n format_guide_info = false,\n value: controlledValue,\n onChange,\n onBlur,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState<string>(\n typeof controlledValue === \"string\" ? controlledValue : (typeof controlledValue === \"number\" ? String(controlledValue) : \"\")\n );\n const [errorMessage, setErrorMessage] = React.useState<string | undefined>();\n\n // Use controlled value if provided, otherwise use internal state\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled\n ? (typeof controlledValue === \"string\" ? controlledValue : String(controlledValue || \"\"))\n : internalValue;\n\n // Sync internal state when controlled value changes externally\n React.useEffect(() => {\n if (isControlled) {\n const newValue = typeof controlledValue === \"string\" ? controlledValue : String(controlledValue || \"\");\n if (newValue !== internalValue) {\n setInternalValue(newValue);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlledValue, isControlled]);\n\n /**\n * Handle input change with character filtering\n */\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let newValue = e.target.value;\n\n // Apply character filtering for numeric and alpha types\n if (input_type === \"numeric\" || input_type === \"alpha\") {\n newValue = filterInputValue(newValue, input_type, num_decimals);\n }\n\n // Update internal state if uncontrolled\n if (!isControlled) {\n setInternalValue(newValue);\n }\n\n // Clear error on change\n if (errorMessage) {\n setErrorMessage(undefined);\n }\n\n // Call original onChange if provided\n if (onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, value: newValue },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n /**\n * Handle blur event with validation\n */\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const validation = validateInput(\n currentValue,\n input_type,\n text_len_min,\n text_len_max,\n num_min,\n num_max,\n regex,\n num_decimals\n );\n\n if (!validation.isValid) {\n setErrorMessage(validation.errorMessage || format_guide || \"Invalid input\");\n } else {\n setErrorMessage(undefined);\n }\n\n // Call original onBlur if provided\n if (onBlur) {\n onBlur(e);\n }\n };\n\n // Determine input type for HTML input element\n const htmlInputType =\n input_type === \"email\" ? \"email\" : input_type === \"numeric\" ? \"text\" : \"text\";\n\n // Determine if input has error\n const hasError = errorMessage !== undefined;\n\n return (\n <div className=\"cls_hazo_ui_flex_input_container w-full\">\n <Input\n ref={ref}\n type={htmlInputType}\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n className={cn(\n hasError && \"border-destructive focus-visible:ring-destructive\",\n className\n )}\n {...props}\n />\n {hasError && errorMessage && (\n <p className=\"cls_error_message mt-1 text-sm text-destructive\">\n {errorMessage}\n </p>\n )}\n {format_guide_info && format_guide && (\n <p\n className={cn(\n \"cls_format_guide_info mt-1 text-xs italic text-muted-foreground\",\n hasError && \"mt-0\"\n )}\n >\n {format_guide}\n </p>\n )}\n </div>\n );\n }\n);\n\nHazoUiFlexInput.displayName = \"HazoUiFlexInput\";\n\n","\"use client\";\n\n/**\n * Toolbar Button Component\n *\n * Reusable button component for the RTE toolbar with active/disabled states\n * and tooltip support.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../ui/tooltip\";\n\nexport interface ToolbarButtonProps {\n onClick?: () => void;\n is_active?: boolean;\n disabled?: boolean;\n tooltip?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const ToolbarButton = React.forwardRef<\n HTMLButtonElement,\n ToolbarButtonProps\n>(\n (\n { onClick, is_active = false, disabled = false, tooltip, className, children },\n ref\n ) => {\n const button = (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cn(\n \"cls_rte_toolbar_button\",\n \"inline-flex items-center justify-center\",\n \"h-8 w-8 rounded-md\",\n \"text-sm font-medium\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n // Default state\n \"bg-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n // Active state\n is_active && \"bg-accent text-accent-foreground\",\n // Disabled state\n disabled && \"opacity-50 cursor-not-allowed hover:bg-transparent hover:text-muted-foreground\",\n className\n )}\n >\n {children}\n </button>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n }\n);\n\nToolbarButton.displayName = \"ToolbarButton\";\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"onChange\", \"width\", \"presetColors\", \"color\", \"editableDisable\", \"disableAlpha\", \"style\"];\nimport React, { useState, Fragment } from 'react';\nimport Saturation from '@uiw/react-color-saturation';\nimport Alpha from '@uiw/react-color-alpha';\nimport EditableInput from '@uiw/react-color-editable-input';\nimport RGBA from '@uiw/react-color-editable-input-rgba';\nimport Hue from '@uiw/react-color-hue';\nimport { validHex, hsvaToHex, hsvaToRgbaString, hexToHsva, color as handleColor } from '@uiw/color-convert';\nimport Swatch from '@uiw/react-color-swatch';\nimport { useEffect } from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar PRESET_COLORS = ['#D0021B', '#F5A623', '#f8e61b', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF'];\nvar Bar = props => /*#__PURE__*/_jsx(\"div\", {\n style: {\n boxShadow: 'rgb(0 0 0 / 60%) 0px 0px 2px',\n width: 4,\n top: 1,\n bottom: 1,\n left: props.left,\n borderRadius: 1,\n position: 'absolute',\n backgroundColor: '#fff'\n }\n});\nvar Sketch = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-sketch' : _props$prefixCls,\n className = props.className,\n onChange = props.onChange,\n _props$width = props.width,\n width = _props$width === void 0 ? 218 : _props$width,\n _props$presetColors = props.presetColors,\n presetColors = _props$presetColors === void 0 ? PRESET_COLORS : _props$presetColors,\n color = props.color,\n _props$editableDisabl = props.editableDisable,\n editableDisable = _props$editableDisabl === void 0 ? true : _props$editableDisabl,\n _props$disableAlpha = props.disableAlpha,\n disableAlpha = _props$disableAlpha === void 0 ? false : _props$disableAlpha,\n style = props.style,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var _useState = useState({\n h: 209,\n s: 36,\n v: 90,\n a: 1\n }),\n hsva = _useState[0],\n setHsva = _useState[1];\n useEffect(() => {\n if (typeof color === 'string' && validHex(color)) {\n setHsva(hexToHsva(color));\n }\n if (typeof color === 'object') {\n setHsva(color);\n }\n }, [color]);\n var handleChange = hsv => {\n setHsva(hsv);\n onChange && onChange(handleColor(hsv));\n };\n var handleHex = (value, evn) => {\n if (typeof value === 'string' && validHex(value) && /(3|6)/.test(String(value.length))) {\n handleChange(hexToHsva(value));\n }\n };\n var handleAlphaChange = newAlpha => handleChange(_extends({}, hsva, {\n a: newAlpha.a\n }));\n var handleSaturationChange = newColor => handleChange(_extends({}, hsva, newColor, {\n a: hsva.a\n }));\n var styleMain = _extends({\n '--sketch-background': 'rgb(255, 255, 255)',\n '--sketch-box-shadow': 'rgb(0 0 0 / 15%) 0px 0px 0px 1px, rgb(0 0 0 / 15%) 0px 8px 16px',\n '--sketch-swatch-box-shadow': 'rgb(0 0 0 / 15%) 0px 0px 0px 1px inset',\n '--sketch-alpha-box-shadow': 'rgb(0 0 0 / 15%) 0px 0px 0px 1px inset, rgb(0 0 0 / 25%) 0px 0px 4px inset',\n '--sketch-swatch-border-top': '1px solid rgb(238, 238, 238)',\n background: 'var(--sketch-background)',\n borderRadius: 4,\n boxShadow: 'var(--sketch-box-shadow)',\n width\n }, style);\n var styleAlpha = {\n borderRadius: 2,\n background: hsvaToRgbaString(hsva),\n boxShadow: 'var(--sketch-alpha-box-shadow)'\n };\n var styleSwatch = {\n borderTop: 'var(--sketch-swatch-border-top)',\n paddingTop: 10,\n paddingLeft: 10\n };\n var styleSwatchRect = {\n marginRight: 10,\n marginBottom: 10,\n borderRadius: 3,\n boxShadow: 'var(--sketch-swatch-box-shadow)'\n };\n return /*#__PURE__*/_jsxs(\"div\", _extends({}, other, {\n className: prefixCls + \" \" + (className || ''),\n ref: ref,\n style: styleMain,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n style: {\n padding: '10px 10px 8px'\n },\n children: [/*#__PURE__*/_jsx(Saturation, {\n hsva: hsva,\n style: {\n width: 'auto',\n height: 150\n },\n onChange: handleSaturationChange\n }), /*#__PURE__*/_jsxs(\"div\", {\n style: {\n display: 'flex',\n marginTop: 4\n },\n children: [/*#__PURE__*/_jsxs(\"div\", {\n style: {\n flex: 1\n },\n children: [/*#__PURE__*/_jsx(Hue, {\n width: \"auto\",\n height: 10,\n hue: hsva.h,\n pointer: Bar,\n innerProps: {\n style: {\n marginLeft: 1,\n marginRight: 5\n }\n },\n onChange: newHue => handleChange(_extends({}, hsva, newHue))\n }), !disableAlpha && /*#__PURE__*/_jsx(Alpha, {\n width: \"auto\",\n height: 10,\n hsva: hsva,\n pointer: Bar,\n style: {\n marginTop: 4\n },\n innerProps: {\n style: {\n marginLeft: 1,\n marginRight: 5\n }\n },\n onChange: handleAlphaChange\n })]\n }), !disableAlpha && /*#__PURE__*/_jsx(Alpha, {\n width: 24,\n height: 24,\n hsva: hsva,\n radius: 2,\n style: {\n marginLeft: 4\n },\n bgProps: {\n style: {\n background: 'transparent'\n }\n },\n innerProps: {\n style: styleAlpha\n },\n pointer: () => /*#__PURE__*/_jsx(Fragment, {})\n })]\n })]\n }), editableDisable && /*#__PURE__*/_jsxs(\"div\", {\n style: {\n display: 'flex',\n margin: '0 10px 3px 10px'\n },\n children: [/*#__PURE__*/_jsx(EditableInput, {\n label: \"Hex\",\n value: hsvaToHex(hsva).replace(/^#/, '').toLocaleUpperCase(),\n onChange: (evn, val) => handleHex(val, evn),\n style: {\n minWidth: 58\n }\n }), /*#__PURE__*/_jsx(RGBA, {\n hsva: hsva,\n style: {\n marginLeft: 6\n },\n aProps: !disableAlpha ? {} : false,\n onChange: result => handleChange(result.hsva)\n })]\n }), presetColors && presetColors.length > 0 && /*#__PURE__*/_jsx(Swatch, {\n style: styleSwatch,\n colors: presetColors,\n color: hsvaToHex(hsva),\n onChange: hsvColor => handleChange(hsvColor),\n rectProps: {\n style: styleSwatchRect\n }\n })]\n }));\n});\nSketch.displayName = 'Sketch';\nexport default Sketch;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"radius\", \"pointer\", \"className\", \"hue\", \"style\", \"hsva\", \"onChange\"];\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { hsvaToHslaString } from '@uiw/color-convert';\nimport Interactive from '@uiw/react-drag-event-interactive';\nimport { Pointer } from \"./Pointer.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar Saturation = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _hsva$h;\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-saturation' : _props$prefixCls,\n _props$radius = props.radius,\n radius = _props$radius === void 0 ? 0 : _props$radius,\n pointer = props.pointer,\n className = props.className,\n _props$hue = props.hue,\n hue = _props$hue === void 0 ? 0 : _props$hue,\n style = props.style,\n hsva = props.hsva,\n onChange = props.onChange,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var containerStyle = _extends({\n width: 200,\n height: 200,\n borderRadius: radius\n }, style, {\n position: 'relative'\n });\n var containerRef = useRef(null);\n\n // Combine external ref with internal ref\n var combinedRef = useCallback(node => {\n containerRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref && 'current' in ref) {\n ref.current = node;\n }\n }, [ref]);\n var handleChange = useCallback((interaction, event) => {\n onChange && hsva && onChange({\n h: hsva.h,\n s: interaction.left * 100,\n v: (1 - interaction.top) * 100,\n a: hsva.a\n // source: 'hsv',\n });\n // Ensure the component maintains focus after drag interaction\n var element = containerRef.current;\n if (element) {\n element.focus();\n }\n }, [hsva, onChange]);\n var handleKeyDown = useCallback(event => {\n if (!hsva || !onChange) return;\n var step = 1; // 1% step for saturation and value\n var newS = hsva.s;\n var newV = hsva.v;\n var changed = false;\n switch (event.key) {\n case 'ArrowLeft':\n newS = Math.max(0, hsva.s - step);\n changed = true;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newS = Math.min(100, hsva.s + step);\n changed = true;\n event.preventDefault();\n break;\n case 'ArrowUp':\n newV = Math.min(100, hsva.v + step);\n changed = true;\n event.preventDefault();\n break;\n case 'ArrowDown':\n newV = Math.max(0, hsva.v - step);\n changed = true;\n event.preventDefault();\n break;\n default:\n return;\n }\n if (changed) {\n onChange({\n h: hsva.h,\n s: newS,\n v: newV,\n a: hsva.a\n });\n }\n }, [hsva, onChange]);\n var pointerElement = useMemo(() => {\n if (!hsva) return null;\n var comProps = {\n top: 100 - hsva.v + \"%\",\n left: hsva.s + \"%\",\n color: hsvaToHslaString(hsva)\n };\n if (pointer && typeof pointer === 'function') {\n return pointer(_extends({\n prefixCls\n }, comProps));\n }\n return /*#__PURE__*/_jsx(Pointer, _extends({\n prefixCls: prefixCls\n }, comProps));\n }, [hsva, pointer, prefixCls]);\n var handleClick = useCallback(event => {\n event.target.focus();\n }, []);\n return /*#__PURE__*/_jsx(Interactive, _extends({\n className: [prefixCls, className || ''].filter(Boolean).join(' ')\n }, other, {\n style: _extends({\n position: 'absolute',\n inset: 0,\n cursor: 'crosshair',\n backgroundImage: \"linear-gradient(0deg, #000, transparent), linear-gradient(90deg, #fff, hsl(\" + ((_hsva$h = hsva == null ? void 0 : hsva.h) != null ? _hsva$h : hue) + \", 100%, 50%))\"\n }, containerStyle, {\n outline: 'none'\n }),\n ref: combinedRef,\n onMove: handleChange,\n onDown: handleChange,\n onKeyDown: handleKeyDown,\n onClick: handleClick,\n children: pointerElement\n }));\n});\nSaturation.displayName = 'Saturation';\nexport default Saturation;","import _extends from \"@babel/runtime/helpers/extends\";\nvar RGB_MAX = 255;\nvar HUE_MAX = 360;\nvar SV_MAX = 100;\n/**\n * ```js\n * rgbaToHsva({ r: 255, g: 255, b: 255, a: 1 }) //=> { h: 0, s: 0, v: 100, a: 1 }\n * ```\n */\nexport var rgbaToHsva = _ref => {\n var r = _ref.r,\n g = _ref.g,\n b = _ref.b,\n a = _ref.a;\n var max = Math.max(r, g, b);\n var delta = max - Math.min(r, g, b);\n\n // prettier-ignore\n var hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;\n return {\n h: 60 * (hh < 0 ? hh + 6 : hh),\n s: max ? delta / max * SV_MAX : 0,\n v: max / RGB_MAX * SV_MAX,\n a\n };\n};\nexport var hsvaToHslString = hsva => {\n var _hsvaToHsla = hsvaToHsla(hsva),\n h = _hsvaToHsla.h,\n s = _hsvaToHsla.s,\n l = _hsvaToHsla.l;\n // return `hsl(${h}, ${s}%, ${l}%)`;\n return \"hsl(\" + h + \", \" + Math.round(s) + \"%, \" + Math.round(l) + \"%)\";\n};\nexport var hsvaToHsvString = _ref2 => {\n var h = _ref2.h,\n s = _ref2.s,\n v = _ref2.v;\n return \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\";\n};\nexport var hsvaToHsvaString = _ref3 => {\n var h = _ref3.h,\n s = _ref3.s,\n v = _ref3.v,\n a = _ref3.a;\n return \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + a + \")\";\n};\nexport var hsvaToHslaString = hsva => {\n var _hsvaToHsla2 = hsvaToHsla(hsva),\n h = _hsvaToHsla2.h,\n s = _hsvaToHsla2.s,\n l = _hsvaToHsla2.l,\n a = _hsvaToHsla2.a;\n return \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + a + \")\";\n};\nexport var hslStringToHsla = str => {\n var _map = (str.match(/\\d+/g) || []).map(Number),\n h = _map[0],\n s = _map[1],\n l = _map[2],\n a = _map[3];\n return {\n h,\n s,\n l,\n a\n };\n};\nexport var hslaStringToHsva = hslString => {\n var matcher = /hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n var match = matcher.exec(hslString);\n if (!match) return {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n return hslaToHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n l: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1)\n });\n};\nexport var hslStringToHsva = hslaStringToHsva;\nexport var hslaToHsva = _ref4 => {\n var h = _ref4.h,\n s = _ref4.s,\n l = _ref4.l,\n a = _ref4.a;\n s *= (l < 50 ? l : SV_MAX - l) / SV_MAX;\n return {\n h: h,\n s: s > 0 ? 2 * s / (l + s) * SV_MAX : 0,\n v: l + s,\n a\n };\n};\nexport var hsvaToHsla = _ref5 => {\n var h = _ref5.h,\n s = _ref5.s,\n v = _ref5.v,\n a = _ref5.a;\n var hh = (200 - s) * v / SV_MAX;\n return {\n h,\n s: hh > 0 && hh < 200 ? s * v / SV_MAX / (hh <= SV_MAX ? hh : 200 - hh) * SV_MAX : 0,\n l: hh / 2,\n a\n };\n};\nexport var hsvaStringToHsva = hsvString => {\n var matcher = /hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n var match = matcher.exec(hsvString);\n if (!match) return {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n return {\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n v: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? SV_MAX : 1)\n };\n};\n\n/**\n * Valid CSS <angle> units.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/angle\n */\nvar angleUnits = {\n grad: HUE_MAX / 400,\n turn: HUE_MAX,\n rad: HUE_MAX / (Math.PI * 2)\n};\nexport var parseHue = function parseHue(value, unit) {\n if (unit === void 0) {\n unit = 'deg';\n }\n return Number(value) * (angleUnits[unit] || 1);\n};\nexport var hsvStringToHsva = hsvaStringToHsva;\nexport var rgbaStringToHsva = rgbaString => {\n var matcher = /rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n var match = matcher.exec(rgbaString);\n if (!match) return {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n return rgbaToHsva({\n r: Number(match[1]) / (match[2] ? SV_MAX / RGB_MAX : 1),\n g: Number(match[3]) / (match[4] ? SV_MAX / RGB_MAX : 1),\n b: Number(match[5]) / (match[6] ? SV_MAX / RGB_MAX : 1),\n a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? SV_MAX : 1)\n });\n};\nexport var rgbStringToHsva = rgbaStringToHsva;\n\n/** Converts an RGBA color plus alpha transparency to hex */\nexport var rgbaToHex = _ref6 => {\n var r = _ref6.r,\n g = _ref6.g,\n b = _ref6.b;\n return rgbToHex({\n r,\n g,\n b\n });\n};\nexport var rgbToHex = _ref7 => {\n var r = _ref7.r,\n g = _ref7.g,\n b = _ref7.b;\n var bin = r << 16 | g << 8 | b;\n return \"#\" + (h => new Array(7 - h.length).join('0') + h)(bin.toString(16));\n};\nexport var rgbaToHexa = _ref8 => {\n var r = _ref8.r,\n g = _ref8.g,\n b = _ref8.b,\n a = _ref8.a;\n var alpha = typeof a === 'number' && (a * 255 | 1 << 8).toString(16).slice(1);\n return \"\" + rgbToHex({\n r,\n g,\n b\n }) + (alpha ? alpha : '');\n};\nexport var hexToHsva = hex => rgbaToHsva(hexToRgba(hex));\nexport var hexToRgba = hex => {\n var htemp = hex.replace('#', '');\n if (/^#?/.test(hex) && htemp.length === 3) {\n hex = \"#\" + htemp.charAt(0) + htemp.charAt(0) + htemp.charAt(1) + htemp.charAt(1) + htemp.charAt(2) + htemp.charAt(2);\n }\n var reg = new RegExp(\"[A-Za-z0-9]{2}\", 'g');\n var _map2 = hex.match(reg).map(v => parseInt(v, 16)),\n r = _map2[0],\n g = _map2[1],\n _map2$ = _map2[2],\n b = _map2$ === void 0 ? 0 : _map2$,\n a = _map2[3];\n return {\n r,\n g,\n b,\n a: (a != null ? a : 255) / RGB_MAX\n };\n};\n\n/**\n * Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n * @param color HSVA color as an array [0-360, 0-1, 0-1, 0-1]\n */\nexport var hsvaToRgba = _ref9 => {\n var h = _ref9.h,\n s = _ref9.s,\n v = _ref9.v,\n a = _ref9.a;\n var _h = h / 60,\n _s = s / SV_MAX,\n _v = v / SV_MAX,\n hi = Math.floor(_h) % 6;\n var f = _h - Math.floor(_h),\n _p = RGB_MAX * _v * (1 - _s),\n _q = RGB_MAX * _v * (1 - _s * f),\n _t = RGB_MAX * _v * (1 - _s * (1 - f));\n _v *= RGB_MAX;\n var rgba = {};\n switch (hi) {\n case 0:\n rgba.r = _v;\n rgba.g = _t;\n rgba.b = _p;\n break;\n case 1:\n rgba.r = _q;\n rgba.g = _v;\n rgba.b = _p;\n break;\n case 2:\n rgba.r = _p;\n rgba.g = _v;\n rgba.b = _t;\n break;\n case 3:\n rgba.r = _p;\n rgba.g = _q;\n rgba.b = _v;\n break;\n case 4:\n rgba.r = _t;\n rgba.g = _p;\n rgba.b = _v;\n break;\n case 5:\n rgba.r = _v;\n rgba.g = _p;\n rgba.b = _q;\n break;\n }\n rgba.r = Math.round(rgba.r);\n rgba.g = Math.round(rgba.g);\n rgba.b = Math.round(rgba.b);\n return _extends({}, rgba, {\n a\n });\n};\nexport var hsvaToRgbString = hsva => {\n var _hsvaToRgba = hsvaToRgba(hsva),\n r = _hsvaToRgba.r,\n g = _hsvaToRgba.g,\n b = _hsvaToRgba.b;\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n};\nexport var hsvaToRgbaString = hsva => {\n var _hsvaToRgba2 = hsvaToRgba(hsva),\n r = _hsvaToRgba2.r,\n g = _hsvaToRgba2.g,\n b = _hsvaToRgba2.b,\n a = _hsvaToRgba2.a;\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + a + \")\";\n};\nexport var rgbaToRgb = _ref0 => {\n var r = _ref0.r,\n g = _ref0.g,\n b = _ref0.b;\n return {\n r,\n g,\n b\n };\n};\nexport var hslaToHsl = _ref1 => {\n var h = _ref1.h,\n s = _ref1.s,\n l = _ref1.l;\n return {\n h,\n s,\n l\n };\n};\nexport var hsvaToHex = hsva => rgbToHex(hsvaToRgba(hsva));\nexport var hsvaToHexa = hsva => rgbaToHexa(hsvaToRgba(hsva));\nexport var hsvaToHsv = _ref10 => {\n var h = _ref10.h,\n s = _ref10.s,\n v = _ref10.v;\n return {\n h,\n s,\n v\n };\n};\nexport var hexToXY = hex => rgbToXY(rgbaToRgb(hexToRgba(hex)));\nexport var xyToHex = xy => rgbToHex(_extends({}, xyToRgb(xy)));\n\n/**\n * Converts XY to RGB. Based on formula from https://developers.meethue.com/develop/application-design-guidance/color-conversion-formulas-rgb-to-xy-and-back/\n * @param color XY color and brightness as an array [0-1, 0-1, 0-1]\n */\nexport var xyToRgb = _ref11 => {\n var x = _ref11.x,\n y = _ref11.y,\n _ref11$bri = _ref11.bri,\n bri = _ref11$bri === void 0 ? 255 : _ref11$bri;\n var red = x * 3.2406255 + y * -1.537208 + bri * -0.4986286;\n var green = x * -0.9689307 + y * 1.8757561 + bri * 0.0415175;\n var blue = x * 0.0557101 + y * -0.2040211 + bri * 1.0569959;\n var translate = function translate(color) {\n return color <= 0.0031308 ? 12.92 * color : 1.055 * Math.pow(color, 1 / 2.4) - 0.055;\n };\n return {\n r: Math.round(255 * translate(red)),\n g: Math.round(255 * translate(green)),\n b: Math.round(255 * translate(blue))\n };\n};\n\n/**\n * Converts RGB to XY. Based on formula from https://developers.meethue.com/develop/application-design-guidance/color-conversion-formulas-rgb-to-xy-and-back/\n * @param color RGB color as an array [0-255, 0-255, 0-255]\n */\nexport var rgbToXY = _ref12 => {\n var r = _ref12.r,\n g = _ref12.g,\n b = _ref12.b;\n var translateColor = function translateColor(color) {\n return color <= 0.04045 ? color / 12.92 : Math.pow((color + 0.055) / 1.055, 2.4);\n };\n var red = translateColor(r / 255);\n var green = translateColor(g / 255);\n var blue = translateColor(b / 255);\n var xyz = {};\n xyz.x = red * 0.4124 + green * 0.3576 + blue * 0.1805;\n xyz.y = red * 0.2126 + green * 0.7152 + blue * 0.0722;\n xyz.bri = red * 0.0193 + green * 0.1192 + blue * 0.9505;\n return xyz;\n};\nexport var color = str => {\n var rgb;\n var hsl;\n var hsv;\n var rgba;\n var hsla;\n var hsva;\n var xy;\n var hex;\n var hexa;\n if (typeof str === 'string' && validHex(str)) {\n hsva = hexToHsva(str);\n hex = str;\n } else if (typeof str !== 'string') {\n hsva = str;\n }\n if (hsva) {\n hsv = hsvaToHsv(hsva);\n hsla = hsvaToHsla(hsva);\n rgba = hsvaToRgba(hsva);\n hexa = rgbaToHexa(rgba);\n hex = hsvaToHex(hsva);\n hsl = hslaToHsl(hsla);\n rgb = rgbaToRgb(rgba);\n xy = rgbToXY(rgb);\n }\n return {\n rgb,\n hsl,\n hsv,\n rgba,\n hsla,\n hsva,\n hex,\n hexa,\n xy\n };\n};\nexport var getContrastingColor = str => {\n if (!str) {\n return '#ffffff';\n }\n var col = color(str);\n var yiq = (col.rgb.r * 299 + col.rgb.g * 587 + col.rgb.b * 114) / 1000;\n return yiq >= 128 ? '#000000' : '#ffffff';\n};\nexport var equalColorObjects = (first, second) => {\n if (first === second) return true;\n for (var prop in first) {\n // The following allows for a type-safe calling of this function (first & second have to be HSL, HSV, or RGB)\n // with type-unsafe iterating over object keys. TS does not allow this without an index (`[key: string]: number`)\n // on an object to define how iteration is normally done. To ensure extra keys are not allowed on our types,\n // we must cast our object to unknown (as RGB demands `r` be a key, while `Record<string, x>` does not care if\n // there is or not), and then as a type TS can iterate over.\n if (first[prop] !== second[prop]) return false;\n }\n return true;\n};\nexport var equalColorString = (first, second) => {\n return first.replace(/\\s/g, '') === second.replace(/\\s/g, '');\n};\nexport var equalHex = (first, second) => {\n if (first.toLowerCase() === second.toLowerCase()) return true;\n\n // To compare colors like `#FFF` and `ffffff` we convert them into RGB objects\n return equalColorObjects(hexToRgba(first), hexToRgba(second));\n};\nexport var validHex = hex => /^#?([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"onMove\", \"onDown\"];\nimport React, { useRef, useState, useCallback, useEffect } from 'react';\nimport { isTouch, preventDefaultMove, getRelativePosition, useEventCallback } from \"./utils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport * from \"./utils.js\";\nvar Interactive = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-interactive' : _props$prefixCls,\n className = props.className,\n onMove = props.onMove,\n onDown = props.onDown,\n reset = _objectWithoutPropertiesLoose(props, _excluded);\n var container = useRef(null);\n var hasTouched = useRef(false);\n var _useState = useState(false),\n isDragging = _useState[0],\n setDragging = _useState[1];\n var onMoveCallback = useEventCallback(onMove);\n var onKeyCallback = useEventCallback(onDown);\n\n // Prevent mobile browsers from handling mouse events (conflicting with touch ones).\n // If we detected a touch interaction before, we prefer reacting to touch events only.\n var isValid = event => {\n if (hasTouched.current && !isTouch(event)) return false;\n hasTouched.current = isTouch(event);\n return true;\n };\n var handleMove = useCallback(event => {\n preventDefaultMove(event);\n if (!container.current) return;\n var isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0;\n if (!isDown) {\n setDragging(false);\n return;\n }\n onMoveCallback == null || onMoveCallback(getRelativePosition(container.current, event), event);\n }, [onMoveCallback]);\n var handleMoveEnd = useCallback(() => setDragging(false), []);\n var toggleDocumentEvents = useCallback(state => {\n if (state) {\n window.addEventListener(hasTouched.current ? 'touchmove' : 'mousemove', handleMove);\n window.addEventListener(hasTouched.current ? 'touchend' : 'mouseup', handleMoveEnd);\n } else {\n window.removeEventListener('mousemove', handleMove);\n window.removeEventListener('mouseup', handleMoveEnd);\n window.removeEventListener('touchmove', handleMove);\n window.removeEventListener('touchend', handleMoveEnd);\n }\n }, [handleMove, handleMoveEnd]);\n useEffect(() => {\n toggleDocumentEvents(isDragging);\n return () => {\n toggleDocumentEvents(false);\n };\n }, [isDragging, handleMove, handleMoveEnd, toggleDocumentEvents]);\n var handleMoveStart = useCallback(event => {\n var activeEl = document.activeElement;\n activeEl == null || activeEl.blur();\n preventDefaultMove(event.nativeEvent);\n if (!isValid(event.nativeEvent)) return;\n if (!container.current) return;\n onKeyCallback == null || onKeyCallback(getRelativePosition(container.current, event.nativeEvent), event.nativeEvent);\n setDragging(true);\n }, [onKeyCallback]);\n return /*#__PURE__*/_jsx(\"div\", _extends({}, reset, {\n className: [prefixCls, className || ''].filter(Boolean).join(' '),\n style: _extends({}, reset.style, {\n touchAction: 'none'\n }),\n ref: container,\n tabIndex: 0,\n onMouseDown: handleMoveStart,\n onTouchStart: handleMoveStart\n }));\n});\nInteractive.displayName = 'Interactive';\nexport default Interactive;","import { useRef, useEffect, useCallback } from 'react';\n\n// Saves incoming handler to the ref in order to avoid \"useCallback hell\"\nexport function useEventCallback(handler) {\n var callbackRef = useRef(handler);\n useEffect(() => {\n callbackRef.current = handler;\n });\n return useCallback((value, event) => callbackRef.current && callbackRef.current(value, event), []);\n}\n\n// Check if an event was triggered by touch\nexport var isTouch = event => 'touches' in event;\n\n// Browsers introduced an intervention, making touch events passive by default.\n// This workaround removes `preventDefault` call from the touch handlers.\n// https://github.com/facebook/react/issues/19651\nexport var preventDefaultMove = event => {\n !isTouch(event) && event.preventDefault && event.preventDefault();\n};\n// Clamps a value between an upper and lower bound.\n// We use ternary operators because it makes the minified code\n// 2 times shorter then `Math.min(Math.max(a,b),c)`\nexport var clamp = function clamp(number, min, max) {\n if (min === void 0) {\n min = 0;\n }\n if (max === void 0) {\n max = 1;\n }\n return number > max ? max : number < min ? min : number;\n};\n// Returns a relative position of the pointer inside the node's bounding box\nexport var getRelativePosition = (node, event) => {\n var rect = node.getBoundingClientRect();\n\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\n var pointer = isTouch(event) ? event.touches[0] : event;\n return {\n left: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\n top: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height),\n width: rect.width,\n height: rect.height,\n x: pointer.pageX - (rect.left + window.pageXOffset),\n y: pointer.pageY - (rect.top + window.pageYOffset)\n };\n};","import React, { useMemo } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Pointer = _ref => {\n var className = _ref.className,\n color = _ref.color,\n left = _ref.left,\n top = _ref.top,\n prefixCls = _ref.prefixCls;\n var style = {\n position: 'absolute',\n top,\n left\n };\n var stylePointer = {\n '--saturation-pointer-box-shadow': 'rgb(255 255 255) 0px 0px 0px 1.5px, rgb(0 0 0 / 30%) 0px 0px 1px 1px inset, rgb(0 0 0 / 40%) 0px 0px 1px 2px',\n width: 6,\n height: 6,\n transform: 'translate(-3px, -3px)',\n boxShadow: 'var(--saturation-pointer-box-shadow)',\n borderRadius: '50%',\n backgroundColor: color\n };\n return useMemo(() => /*#__PURE__*/_jsx(\"div\", {\n className: prefixCls + \"-pointer \" + (className || ''),\n style: style,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: prefixCls + \"-fill\",\n style: stylePointer\n })\n }), [top, left, color, className, prefixCls]);\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"hsva\", \"background\", \"bgProps\", \"innerProps\", \"pointerProps\", \"radius\", \"width\", \"height\", \"direction\", \"reverse\", \"style\", \"onChange\", \"pointer\"];\nimport React, { useCallback } from 'react';\nimport { hsvaToHslaString } from '@uiw/color-convert';\nimport Interactive from '@uiw/react-drag-event-interactive';\nimport { Pointer } from \"./Pointer.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport * from \"./Pointer.js\";\nexport var BACKGROUND_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==';\nvar Alpha = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-alpha' : _props$prefixCls,\n className = props.className,\n hsva = props.hsva,\n background = props.background,\n _props$bgProps = props.bgProps,\n bgProps = _props$bgProps === void 0 ? {} : _props$bgProps,\n _props$innerProps = props.innerProps,\n innerProps = _props$innerProps === void 0 ? {} : _props$innerProps,\n _props$pointerProps = props.pointerProps,\n pointerProps = _props$pointerProps === void 0 ? {} : _props$pointerProps,\n _props$radius = props.radius,\n radius = _props$radius === void 0 ? 0 : _props$radius,\n width = props.width,\n _props$height = props.height,\n height = _props$height === void 0 ? 16 : _props$height,\n _props$direction = props.direction,\n direction = _props$direction === void 0 ? 'horizontal' : _props$direction,\n _props$reverse = props.reverse,\n reverse = _props$reverse === void 0 ? false : _props$reverse,\n style = props.style,\n onChange = props.onChange,\n pointer = props.pointer,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var offsetToAlpha = useCallback(offset => {\n var value = direction === 'horizontal' ? offset.left : offset.top;\n if (direction === 'horizontal') {\n return reverse ? 1 - value : value;\n }\n return reverse ? value : 1 - value;\n }, [direction, reverse]);\n var alphaToOffset = useCallback(alpha => {\n if (direction === 'horizontal') {\n return reverse ? 1 - alpha : alpha;\n }\n return reverse ? alpha : 1 - alpha;\n }, [direction, reverse]);\n var handleChange = offset => {\n var alpha = offsetToAlpha(offset);\n onChange && onChange(_extends({}, hsva, {\n a: alpha\n }), offset);\n };\n var colorTo = hsvaToHslaString(Object.assign({}, hsva, {\n a: 1\n }));\n var horizontalGradient = reverse ? \"linear-gradient(to right, \" + colorTo + \" 0%, rgba(244, 67, 54, 0) 100%)\" : \"linear-gradient(to right, rgba(244, 67, 54, 0) 0%, \" + colorTo + \" 100%)\";\n var verticalGradient = reverse ? \"linear-gradient(to bottom, rgba(244, 67, 54, 0) 0%, \" + colorTo + \" 100%)\" : \"linear-gradient(to bottom, \" + colorTo + \" 0%, rgba(244, 67, 54, 0) 100%)\";\n var innerBackground = direction === 'horizontal' ? horizontalGradient : verticalGradient;\n var comProps = {};\n if (direction === 'horizontal') {\n comProps.left = alphaToOffset(hsva.a) * 100 + \"%\";\n } else {\n comProps.top = alphaToOffset(hsva.a) * 100 + \"%\";\n }\n var styleWrapper = _extends({\n '--alpha-background-color': '#fff',\n '--alpha-pointer-background-color': 'rgb(248, 248, 248)',\n '--alpha-pointer-box-shadow': 'rgb(0 0 0 / 37%) 0px 1px 4px 0px',\n borderRadius: radius,\n background: \"url(\" + BACKGROUND_IMG + \") left center\",\n backgroundColor: 'var(--alpha-background-color)'\n }, {\n width,\n height\n }, style, {\n position: 'relative'\n });\n var handleKeyDown = useCallback(event => {\n var step = 0.01; // 1% step\n var currentAlpha = hsva.a;\n var newAlpha = currentAlpha;\n switch (event.key) {\n case 'ArrowLeft':\n if (direction === 'horizontal') {\n newAlpha = reverse ? Math.min(1, currentAlpha + step) : Math.max(0, currentAlpha - step);\n event.preventDefault();\n }\n break;\n case 'ArrowRight':\n if (direction === 'horizontal') {\n newAlpha = reverse ? Math.max(0, currentAlpha - step) : Math.min(1, currentAlpha + step);\n event.preventDefault();\n }\n break;\n case 'ArrowUp':\n if (direction === 'vertical') {\n newAlpha = reverse ? Math.max(0, currentAlpha - step) : Math.min(1, currentAlpha + step);\n event.preventDefault();\n }\n break;\n case 'ArrowDown':\n if (direction === 'vertical') {\n newAlpha = reverse ? Math.min(1, currentAlpha + step) : Math.max(0, currentAlpha - step);\n event.preventDefault();\n }\n break;\n default:\n return;\n }\n if (newAlpha !== currentAlpha) {\n var syntheticAxisOffset = alphaToOffset(newAlpha);\n var syntheticOffset = {\n left: direction === 'horizontal' ? syntheticAxisOffset : hsva.a,\n top: direction === 'vertical' ? syntheticAxisOffset : hsva.a,\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n onChange && onChange(_extends({}, hsva, {\n a: newAlpha\n }), syntheticOffset);\n }\n }, [alphaToOffset, hsva, direction, onChange, reverse]);\n var handleClick = useCallback(event => {\n event.target.focus();\n }, []);\n var pointerElement = pointer && typeof pointer === 'function' ? pointer(_extends({\n prefixCls\n }, pointerProps, comProps)) : /*#__PURE__*/_jsx(Pointer, _extends({}, pointerProps, {\n prefixCls: prefixCls\n }, comProps));\n return /*#__PURE__*/_jsxs(\"div\", _extends({}, other, {\n className: [prefixCls, prefixCls + \"-\" + direction, className || ''].filter(Boolean).join(' '),\n style: styleWrapper,\n ref: ref,\n children: [/*#__PURE__*/_jsx(\"div\", _extends({}, bgProps, {\n style: _extends({\n inset: 0,\n position: 'absolute',\n background: background || innerBackground,\n borderRadius: radius\n }, bgProps.style)\n })), /*#__PURE__*/_jsx(Interactive, _extends({}, innerProps, {\n style: _extends({}, innerProps.style, {\n inset: 0,\n zIndex: 1,\n position: 'absolute',\n outline: 'none'\n }),\n onMove: handleChange,\n onDown: handleChange,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n children: pointerElement\n }))]\n }));\n});\nAlpha.displayName = 'Alpha';\nexport default Alpha;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"className\", \"prefixCls\", \"left\", \"top\", \"style\", \"fillProps\"];\nimport React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Pointer = _ref => {\n var className = _ref.className,\n prefixCls = _ref.prefixCls,\n left = _ref.left,\n top = _ref.top,\n style = _ref.style,\n fillProps = _ref.fillProps,\n reset = _objectWithoutPropertiesLoose(_ref, _excluded);\n var styleWrapper = _extends({}, style, {\n position: 'absolute',\n left,\n top\n });\n var stylePointer = _extends({\n width: 18,\n height: 18,\n boxShadow: 'var(--alpha-pointer-box-shadow)',\n borderRadius: '50%',\n backgroundColor: 'var(--alpha-pointer-background-color)'\n }, fillProps == null ? void 0 : fillProps.style, {\n transform: left ? 'translate(-9px, -1px)' : 'translate(-1px, -9px)'\n });\n return /*#__PURE__*/_jsx(\"div\", _extends({\n className: prefixCls + \"-pointer \" + (className || ''),\n style: styleWrapper\n }, reset, {\n children: /*#__PURE__*/_jsx(\"div\", _extends({\n className: prefixCls + \"-fill\"\n }, fillProps, {\n style: stylePointer\n }))\n }));\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"placement\", \"label\", \"value\", \"className\", \"style\", \"labelStyle\", \"inputStyle\", \"onChange\", \"onBlur\", \"renderInput\"];\nimport React from 'react';\nimport { useRef, useEffect, useState } from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar validHex = hex => /^#?([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);\nvar getNumberValue = value => Number(String(value).replace(/%/g, ''));\nvar EditableInput = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-editable-input' : _props$prefixCls,\n _props$placement = props.placement,\n placement = _props$placement === void 0 ? 'bottom' : _props$placement,\n label = props.label,\n initValue = props.value,\n className = props.className,\n style = props.style,\n labelStyle = props.labelStyle,\n inputStyle = props.inputStyle,\n onChange = props.onChange,\n onBlur = props.onBlur,\n renderInput = props.renderInput,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var _useState = useState(initValue),\n value = _useState[0],\n setValue = _useState[1];\n var isFocus = useRef(false);\n var inputIdRef = useRef(other.id || prefixCls + \"-\" + Math.random().toString(36).slice(2, 11));\n var inputId = other.id || inputIdRef.current;\n useEffect(() => {\n if (props.value !== value) {\n if (!isFocus.current) {\n setValue(props.value);\n }\n }\n }, [props.value]);\n function handleChange(evn, valInit) {\n var value = (valInit || evn.target.value).trim().replace(/^#/, '');\n if (validHex(value)) {\n onChange && onChange(evn, value);\n }\n var val = getNumberValue(value);\n if (!isNaN(val)) {\n onChange && onChange(evn, val);\n }\n setValue(value);\n }\n function handleBlur(evn) {\n isFocus.current = false;\n setValue(props.value);\n onBlur && onBlur(evn);\n }\n var placementStyle = {};\n if (placement === 'bottom') {\n placementStyle['flexDirection'] = 'column';\n }\n if (placement === 'top') {\n placementStyle['flexDirection'] = 'column-reverse';\n }\n if (placement === 'left') {\n placementStyle['flexDirection'] = 'row-reverse';\n }\n var wrapperStyle = _extends({\n '--editable-input-label-color': 'rgb(153, 153, 153)',\n '--editable-input-box-shadow': 'rgb(204 204 204) 0px 0px 0px 1px inset',\n '--editable-input-color': '#666',\n position: 'relative',\n alignItems: 'center',\n display: 'flex',\n fontSize: 11\n }, placementStyle, style);\n var editableStyle = _extends({\n width: '100%',\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: 3,\n paddingRight: 3,\n fontSize: 11,\n background: 'transparent',\n boxSizing: 'border-box',\n border: 'none',\n color: 'var(--editable-input-color)',\n boxShadow: 'var(--editable-input-box-shadow)'\n }, inputStyle);\n var inputProps = _extends({\n value,\n onChange: handleChange,\n onBlur: handleBlur,\n autoComplete: 'off',\n onFocus: () => isFocus.current = true\n }, other, {\n id: inputId,\n style: editableStyle,\n onFocusCapture: e => {\n var elm = e.target;\n elm.setSelectionRange(elm.value.length, elm.value.length);\n }\n });\n return /*#__PURE__*/_jsxs(\"div\", {\n className: [prefixCls, className || ''].filter(Boolean).join(' '),\n style: wrapperStyle,\n children: [renderInput ? renderInput(inputProps, ref) : /*#__PURE__*/_jsx(\"input\", _extends({\n ref: ref\n }, inputProps)), label && /*#__PURE__*/_jsx(\"label\", {\n htmlFor: inputId,\n style: _extends({\n color: 'var(--editable-input-label-color)',\n textTransform: 'capitalize'\n }, labelStyle),\n children: label\n })]\n });\n});\nEditableInput.displayName = 'EditableInput';\nexport default EditableInput;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"hsva\", \"placement\", \"rProps\", \"gProps\", \"bProps\", \"aProps\", \"className\", \"style\", \"onChange\"];\nimport React from 'react';\nimport EditableInput from '@uiw/react-color-editable-input';\nimport { color as handleColor, hsvaToRgba, rgbaToHsva } from '@uiw/color-convert';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar EditableInputRGBA = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-editable-input-rgba' : _props$prefixCls,\n hsva = props.hsva,\n _props$placement = props.placement,\n placement = _props$placement === void 0 ? 'bottom' : _props$placement,\n _props$rProps = props.rProps,\n rProps = _props$rProps === void 0 ? {} : _props$rProps,\n _props$gProps = props.gProps,\n gProps = _props$gProps === void 0 ? {} : _props$gProps,\n _props$bProps = props.bProps,\n bProps = _props$bProps === void 0 ? {} : _props$bProps,\n _props$aProps = props.aProps,\n aProps = _props$aProps === void 0 ? {} : _props$aProps,\n className = props.className,\n style = props.style,\n onChange = props.onChange,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var rgba = hsva ? hsvaToRgba(hsva) : {};\n function handleBlur(evn) {\n var value = Number(evn.target.value);\n if (value && value > 255) {\n evn.target.value = '255';\n }\n if (value && value < 0) {\n evn.target.value = '0';\n }\n }\n var handleAlphaBlur = evn => {\n var value = Number(evn.target.value);\n if (value && value > 100) {\n evn.target.value = '100';\n }\n if (value && value < 0) {\n evn.target.value = '0';\n }\n };\n var handleChange = (value, type, evn) => {\n if (typeof value === 'number') {\n if (type === 'a') {\n if (value < 0) value = 0;\n if (value > 100) value = 100;\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n a: value / 100\n }))));\n }\n if (value > 255) {\n value = 255;\n evn.target.value = '255';\n }\n if (value < 0) {\n value = 0;\n evn.target.value = '0';\n }\n if (type === 'r') {\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n r: value\n }))));\n }\n if (type === 'g') {\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n g: value\n }))));\n }\n if (type === 'b') {\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n b: value\n }))));\n }\n }\n };\n var roundedAlpha = rgba.a ? Math.round(rgba.a * 100) / 100 : 0;\n return /*#__PURE__*/_jsxs(\"div\", _extends({\n ref: ref,\n className: [prefixCls, className || ''].filter(Boolean).join(' ')\n }, other, {\n style: _extends({\n fontSize: 11,\n display: 'flex'\n }, style),\n children: [/*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"R\",\n value: rgba.r || 0,\n onBlur: handleBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'r', evn)\n }, rProps, {\n style: _extends({}, rProps.style)\n })), /*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"G\",\n value: rgba.g || 0,\n onBlur: handleBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'g', evn)\n }, gProps, {\n style: _extends({\n marginLeft: 5\n }, gProps.style)\n })), /*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"B\",\n value: rgba.b || 0,\n onBlur: handleBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'b', evn)\n }, bProps, {\n style: _extends({\n marginLeft: 5\n }, bProps.style)\n })), aProps && /*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"A\",\n value: parseInt(String(roundedAlpha * 100), 10),\n onBlur: handleAlphaBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'a', evn)\n }, aProps, {\n style: _extends({\n marginLeft: 5\n }, aProps.style)\n }))]\n }));\n});\nEditableInputRGBA.displayName = 'EditableInputRGBA';\nexport default EditableInputRGBA;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"hue\", \"onChange\", \"direction\", \"reverse\"];\nimport React, { useCallback, useMemo } from 'react';\nimport Alpha from '@uiw/react-color-alpha';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar NORMAL_COLORS = 'rgb(255, 0, 0) 0%, rgb(255, 255, 0) 17%, rgb(0, 255, 0) 33%, rgb(0, 255, 255) 50%, rgb(0, 0, 255) 67%, rgb(255, 0, 255) 83%, rgb(255, 0, 0) 100%';\nvar REVERSED_COLORS = 'rgb(255, 0, 0) 0%, rgb(255, 0, 255) 17%, rgb(0, 0, 255) 33%, rgb(0, 255, 255) 50%, rgb(0, 255, 0) 67%, rgb(255, 255, 0) 83%, rgb(255, 0, 0) 100%';\nvar Hue = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-hue' : _props$prefixCls,\n className = props.className,\n _props$hue = props.hue,\n hue = _props$hue === void 0 ? 0 : _props$hue,\n _onChange = props.onChange,\n _props$direction = props.direction,\n direction = _props$direction === void 0 ? 'horizontal' : _props$direction,\n _props$reverse = props.reverse,\n reverse = _props$reverse === void 0 ? false : _props$reverse,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var getGradientBackground = useCallback(() => {\n if (direction === 'horizontal') {\n var colors = reverse ? REVERSED_COLORS : NORMAL_COLORS;\n var gradientDirection = 'right';\n return \"linear-gradient(to \" + gradientDirection + \", \" + colors + \")\";\n } else {\n // 垂直模式下,由于交互逻辑使用了 1-value,所以渐变颜色也要反转\n var _colors = reverse ? NORMAL_COLORS : REVERSED_COLORS;\n var _gradientDirection = 'bottom';\n return \"linear-gradient(to \" + _gradientDirection + \", \" + _colors + \")\";\n }\n }, [direction, reverse]);\n var getHueFromInteraction = useCallback(interaction => {\n var value = direction === 'horizontal' ? interaction.left : interaction.top;\n var normalizedValue;\n if (direction === 'horizontal') {\n normalizedValue = reverse ? 1 - value : value;\n } else {\n // 垂直模式下,正常情况下顶部应该是0,底部是360,所以需要反转\n normalizedValue = reverse ? value : 1 - value;\n }\n return 360 * normalizedValue;\n }, [direction, reverse]);\n var gradientBackground = useMemo(() => getGradientBackground(), [getGradientBackground]);\n return /*#__PURE__*/_jsx(Alpha, _extends({\n ref: ref,\n className: prefixCls + \" \" + (className || '')\n }, other, {\n direction: direction,\n reverse: reverse,\n background: gradientBackground,\n hsva: {\n h: hue,\n s: 100,\n v: 100,\n a: hue / 360\n },\n onChange: (_, interaction) => {\n _onChange && _onChange({\n h: getHueFromInteraction(interaction)\n });\n }\n }));\n});\nHue.displayName = 'Hue';\nexport default Hue;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"color\", \"colors\", \"style\", \"rectProps\", \"onChange\", \"addonAfter\", \"addonBefore\", \"rectRender\"];\nimport React, { Fragment } from 'react';\nimport { hexToHsva, color as handleColor } from '@uiw/color-convert';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar Swatch = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'w-color-swatch' : _props$prefixCls,\n className = props.className,\n color = props.color,\n _props$colors = props.colors,\n colors = _props$colors === void 0 ? [] : _props$colors,\n style = props.style,\n _props$rectProps = props.rectProps,\n rectProps = _props$rectProps === void 0 ? {} : _props$rectProps,\n onChange = props.onChange,\n addonAfter = props.addonAfter,\n addonBefore = props.addonBefore,\n rectRender = props.rectRender,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var rectStyle = _extends({\n '--swatch-background-color': 'rgb(144, 19, 254)',\n background: 'var(--swatch-background-color)',\n height: 15,\n width: 15,\n marginRight: 5,\n marginBottom: 5,\n cursor: 'pointer',\n position: 'relative',\n outline: 'none',\n borderRadius: 2\n }, rectProps.style);\n var handleClick = (hex, evn) => {\n onChange && onChange(hexToHsva(hex), handleColor(hexToHsva(hex)), evn);\n };\n return /*#__PURE__*/_jsxs(\"div\", _extends({\n ref: ref\n }, other, {\n className: [prefixCls, className || ''].filter(Boolean).join(' '),\n style: _extends({\n display: 'flex',\n flexWrap: 'wrap',\n position: 'relative'\n }, style),\n children: [addonBefore && /*#__PURE__*/React.isValidElement(addonBefore) && addonBefore, colors && Array.isArray(colors) && colors.map((item, idx) => {\n var title = '';\n var background = '';\n if (typeof item === 'string') {\n title = item;\n background = item;\n }\n if (typeof item === 'object' && item.color) {\n title = item.title || item.color;\n background = item.color;\n }\n var checked = color && color.toLocaleLowerCase() === background.toLocaleLowerCase();\n var render = rectRender && rectRender({\n title,\n color: background,\n checked: !!checked,\n style: _extends({}, rectStyle, {\n background\n }),\n onClick: evn => handleClick(background, evn)\n });\n if (render) {\n return /*#__PURE__*/_jsx(Fragment, {\n children: render\n }, idx);\n }\n var child = rectProps.children && /*#__PURE__*/React.isValidElement(rectProps.children) ? /*#__PURE__*/React.cloneElement(rectProps.children, {\n color: background,\n checked\n }) : null;\n return /*#__PURE__*/_jsx(\"div\", _extends({\n tabIndex: 0,\n title: title,\n onClick: evn => handleClick(background, evn)\n }, rectProps, {\n children: child,\n style: _extends({}, rectStyle, {\n background\n })\n }), idx);\n }), addonAfter && /*#__PURE__*/React.isValidElement(addonAfter) && addonAfter]\n }));\n});\nSwatch.displayName = 'Swatch';\nexport default Swatch;","/**\n * Hazo UI Rich Text Editor - Type Definitions\n *\n * Type definitions for the rich text editor component including\n * attachments, variables, and editor output interfaces.\n */\n\n/**\n * Represents a file attachment stored as base64\n */\nexport interface RteAttachment {\n filename: string;\n mime_type: string;\n data: string; // base64 encoded content\n}\n\n/**\n * Represents a template variable that can be inserted into the editor\n */\nexport interface RteVariable {\n name: string;\n description: string;\n}\n\n/**\n * Output structure returned by the editor on change\n */\nexport interface RteOutput {\n html: string;\n plain_text: string;\n attachments: RteAttachment[];\n}\n\n/**\n * Props for the HazoUiRte component\n */\nexport interface HazoUiRteProps {\n // Content (all optional)\n html?: string;\n plain_text?: string;\n attachments?: RteAttachment[];\n\n // Variables for email templates\n variables?: RteVariable[];\n\n // Callback fired when content changes\n on_change?: (output: RteOutput) => void;\n\n // Customization\n placeholder?: string;\n min_height?: string;\n max_height?: string;\n disabled?: boolean;\n className?: string;\n\n // Show output viewer tabs (HTML, Plain Text, Raw HTML)\n show_output_viewer?: boolean;\n}\n\n/**\n * Font family options available in the editor\n */\nexport const FONT_FAMILIES = [\n { label: \"Arial\", value: \"Arial, sans-serif\" },\n { label: \"Verdana\", value: \"Verdana, sans-serif\" },\n { label: \"Times New Roman\", value: \"Times New Roman, serif\" },\n { label: \"Georgia\", value: \"Georgia, serif\" },\n { label: \"Courier New\", value: \"Courier New, monospace\" },\n { label: \"Trebuchet MS\", value: \"Trebuchet MS, sans-serif\" },\n] as const;\n\n/**\n * Font size configuration\n */\nexport const FONT_SIZE_CONFIG = {\n default: 16,\n min: 8,\n max: 72,\n step: 2,\n} as const;\n\n/**\n * Block type options for the paragraph dropdown\n */\nexport const BLOCK_TYPES = [\n { label: \"Paragraph\", value: \"paragraph\", icon: \"paragraph\" },\n { label: \"Heading 1\", value: \"heading-1\", icon: \"h1\" },\n { label: \"Heading 2\", value: \"heading-2\", icon: \"h2\" },\n { label: \"Heading 3\", value: \"heading-3\", icon: \"h3\" },\n { label: \"Numbered List\", value: \"ordered-list\", icon: \"list-ordered\" },\n { label: \"Bulleted List\", value: \"bullet-list\", icon: \"list\" },\n { label: \"Check List\", value: \"task-list\", icon: \"list-checks\" },\n { label: \"Code Block\", value: \"code-block\", icon: \"code\" },\n { label: \"Quote\", value: \"blockquote\", icon: \"quote\" },\n] as const;\n\n/**\n * Text alignment options\n */\nexport const TEXT_ALIGNMENTS = [\n { label: \"Left\", value: \"left\", icon: \"align-left\" },\n { label: \"Center\", value: \"center\", icon: \"align-center\" },\n { label: \"Right\", value: \"right\", icon: \"align-right\" },\n { label: \"Justify\", value: \"justify\", icon: \"align-justify\" },\n] as const;\n","/**\n * Hazo UI Rich Text Editor - Utility Functions\n *\n * Helper functions for file handling, text extraction, and other utilities.\n */\n\nimport type { RteAttachment } from \"./types\";\n\n/**\n * Convert a File object to a base64 encoded string\n */\nexport function file_to_base64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix to get just the base64 content\n const base64 = result.split(\",\")[1];\n resolve(base64);\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Convert a File object to an RteAttachment\n */\nexport async function file_to_attachment(file: File): Promise<RteAttachment> {\n const data = await file_to_base64(file);\n return {\n filename: file.name,\n mime_type: file.type || \"application/octet-stream\",\n data,\n };\n}\n\n/**\n * Convert a File object to a base64 data URL for inline embedding\n */\nexport function file_to_data_url(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Extract plain text from HTML content\n */\nexport function extract_plain_text(html: string): string {\n if (typeof document === \"undefined\") {\n // Server-side fallback - basic tag stripping\n return html\n .replace(/<[^>]*>/g, \"\")\n .replace(/ /g, \" \")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .trim();\n }\n\n // Client-side - use DOM parser\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n return doc.body.textContent || \"\";\n}\n\n/**\n * Generate a unique ID for internal use\n */\nexport function generate_unique_id(): string {\n return `rte_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Debounce function for rate-limiting callbacks\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout_id: ReturnType<typeof setTimeout> | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout_id) {\n clearTimeout(timeout_id);\n }\n timeout_id = setTimeout(() => {\n func(...args);\n }, wait);\n };\n}\n\n/**\n * Format file size for display\n */\nexport function format_file_size(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n}\n\n/**\n * Get file extension from filename\n */\nexport function get_file_extension(filename: string): string {\n const parts = filename.split(\".\");\n return parts.length > 1 ? parts.pop()?.toLowerCase() || \"\" : \"\";\n}\n\n/**\n * Check if a file is an image based on MIME type\n */\nexport function is_image_file(mime_type: string): boolean {\n return mime_type.startsWith(\"image/\");\n}\n\n/**\n * Parse variable syntax {{variable_name}} from text\n */\nexport function parse_variables_from_text(text: string): string[] {\n const regex = /\\{\\{([^}]+)\\}\\}/g;\n const variables: string[] = [];\n let match;\n while ((match = regex.exec(text)) !== null) {\n variables.push(match[1]);\n }\n return variables;\n}\n","\"use client\";\n\n/**\n * RTE Toolbar Component\n *\n * Main toolbar container that orchestrates all formatting controls.\n */\n\nimport * as React from \"react\";\nimport { type Editor } from \"@tiptap/react\";\nimport { cn } from \"../../../lib/utils\";\nimport { TooltipProvider } from \"../../ui/tooltip\";\nimport { ToolbarButton } from \"./toolbar_button\";\nimport {\n LuUndo2,\n LuRedo2,\n LuBold,\n LuItalic,\n LuUnderline,\n LuStrikethrough,\n LuSubscript,\n LuSuperscript,\n LuLink,\n LuRemoveFormatting,\n LuAlignLeft,\n LuAlignCenter,\n LuAlignRight,\n LuAlignJustify,\n LuIndentIncrease,\n LuIndentDecrease,\n LuPalette,\n LuHighlighter,\n LuPlus,\n LuVariable,\n LuPaperclip,\n LuMinus,\n LuImage,\n LuTable,\n LuList,\n LuListOrdered,\n LuListChecks,\n LuTableRowsSplit,\n LuTableColumnsSplit,\n LuTrash2,\n LuGrid3X3,\n} from \"react-icons/lu\";\nimport { RxDividerHorizontal } from \"react-icons/rx\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../ui/select\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../ui/popover\";\nimport { Input } from \"../../ui/input\";\nimport { Button } from \"../../ui/button\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../../ui/command\";\nimport Sketch from \"@uiw/react-color-sketch\";\nimport {\n FONT_FAMILIES,\n FONT_SIZE_CONFIG,\n BLOCK_TYPES,\n type RteVariable,\n type RteAttachment,\n} from \"../types\";\nimport { file_to_attachment, file_to_data_url } from \"../utils\";\n\ninterface ToolbarProps {\n editor: Editor | null;\n variables?: RteVariable[];\n attachments: RteAttachment[];\n on_attachments_change: (attachments: RteAttachment[]) => void;\n disabled?: boolean;\n}\n\n/**\n * Toolbar separator component\n */\nconst ToolbarSeparator = () => (\n <div className=\"cls_rte_toolbar_separator mx-1 h-6 w-px bg-border\" />\n);\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n editor,\n variables = [],\n attachments,\n on_attachments_change,\n disabled = false,\n}) => {\n const [link_url, set_link_url] = React.useState(\"https://\");\n const [link_popover_open, set_link_popover_open] = React.useState(false);\n const [text_color_open, set_text_color_open] = React.useState(false);\n const [highlight_color_open, set_highlight_color_open] = React.useState(false);\n const [variables_menu_open, set_variables_menu_open] = React.useState(false);\n const [table_menu_open, set_table_menu_open] = React.useState(false);\n const [text_color, set_text_color] = React.useState(\"#000000\");\n const [highlight_color, set_highlight_color] = React.useState(\"#ffff00\");\n const [table_rows, set_table_rows] = React.useState(3);\n const [table_cols, set_table_cols] = React.useState(3);\n const [hovered_cell, set_hovered_cell] = React.useState<{ row: number; col: number } | null>(null);\n\n const file_input_ref = React.useRef<HTMLInputElement>(null);\n const image_input_ref = React.useRef<HTMLInputElement>(null);\n\n if (!editor) {\n return null;\n }\n\n // Get current font size\n const get_current_font_size = (): number => {\n const attrs = editor.getAttributes(\"textStyle\");\n return attrs.fontSize || FONT_SIZE_CONFIG.default;\n };\n\n // Get current font family\n const get_current_font_family = (): string => {\n const attrs = editor.getAttributes(\"textStyle\");\n return attrs.fontFamily || FONT_FAMILIES[0].value;\n };\n\n // Get current block type\n const get_current_block_type = (): string => {\n if (editor.isActive(\"heading\", { level: 1 })) return \"heading-1\";\n if (editor.isActive(\"heading\", { level: 2 })) return \"heading-2\";\n if (editor.isActive(\"heading\", { level: 3 })) return \"heading-3\";\n if (editor.isActive(\"bulletList\")) return \"bullet-list\";\n if (editor.isActive(\"orderedList\")) return \"ordered-list\";\n if (editor.isActive(\"taskList\")) return \"task-list\";\n if (editor.isActive(\"codeBlock\")) return \"code-block\";\n if (editor.isActive(\"blockquote\")) return \"blockquote\";\n return \"paragraph\";\n };\n\n // Handle block type change\n const handle_block_type_change = (value: string) => {\n switch (value) {\n case \"paragraph\":\n editor.chain().focus().setParagraph().run();\n break;\n case \"heading-1\":\n editor.chain().focus().toggleHeading({ level: 1 }).run();\n break;\n case \"heading-2\":\n editor.chain().focus().toggleHeading({ level: 2 }).run();\n break;\n case \"heading-3\":\n editor.chain().focus().toggleHeading({ level: 3 }).run();\n break;\n case \"bullet-list\":\n editor.chain().focus().toggleBulletList().run();\n break;\n case \"ordered-list\":\n editor.chain().focus().toggleOrderedList().run();\n break;\n case \"task-list\":\n editor.chain().focus().toggleTaskList().run();\n break;\n case \"code-block\":\n editor.chain().focus().toggleCodeBlock().run();\n break;\n case \"blockquote\":\n editor.chain().focus().toggleBlockquote().run();\n break;\n }\n };\n\n // Handle font family change\n const handle_font_family_change = (value: string) => {\n editor.chain().focus().setFontFamily(value).run();\n };\n\n // Handle font size change\n const handle_font_size_change = (delta: number) => {\n const current = get_current_font_size();\n const new_size = Math.min(\n FONT_SIZE_CONFIG.max,\n Math.max(FONT_SIZE_CONFIG.min, current + delta)\n );\n editor.chain().focus().setFontSizeNum(new_size).run();\n };\n\n // Handle link\n const handle_set_link = () => {\n if (link_url && link_url !== \"https://\") {\n editor.chain().focus().setLink({ href: link_url }).run();\n set_link_url(\"https://\");\n set_link_popover_open(false);\n }\n };\n\n const handle_remove_link = () => {\n editor.chain().focus().unsetLink().run();\n set_link_popover_open(false);\n };\n\n // Handle text color\n const handle_text_color_change = (color: { hex: string }) => {\n set_text_color(color.hex);\n editor.chain().focus().setColor(color.hex).run();\n };\n\n // Handle highlight color\n const handle_highlight_color_change = (color: { hex: string }) => {\n set_highlight_color(color.hex);\n editor.chain().focus().setHighlight({ color: color.hex }).run();\n };\n\n // Handle image insert\n const handle_image_insert = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file && file.type.startsWith(\"image/\")) {\n const data_url = await file_to_data_url(file);\n editor.chain().focus().setImage({ src: data_url }).run();\n }\n if (image_input_ref.current) {\n image_input_ref.current.value = \"\";\n }\n };\n\n // Handle file attach\n const handle_file_attach = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const attachment = await file_to_attachment(file);\n on_attachments_change([...attachments, attachment]);\n }\n if (file_input_ref.current) {\n file_input_ref.current.value = \"\";\n }\n };\n\n // Handle table insert with custom size\n const handle_table_insert = (rows: number, cols: number) => {\n editor\n .chain()\n .focus()\n .insertTable({ rows, cols, withHeaderRow: true })\n .run();\n set_table_menu_open(false);\n set_table_rows(3);\n set_table_cols(3);\n set_hovered_cell(null);\n };\n\n // Handle table row/column operations\n const handle_add_row_before = () => {\n editor.chain().focus().addRowBefore().run();\n };\n\n const handle_add_row_after = () => {\n editor.chain().focus().addRowAfter().run();\n };\n\n const handle_delete_row = () => {\n editor.chain().focus().deleteRow().run();\n };\n\n const handle_add_col_before = () => {\n editor.chain().focus().addColumnBefore().run();\n };\n\n const handle_add_col_after = () => {\n editor.chain().focus().addColumnAfter().run();\n };\n\n const handle_delete_col = () => {\n editor.chain().focus().deleteColumn().run();\n };\n\n const handle_delete_table = () => {\n editor.chain().focus().deleteTable().run();\n };\n\n // Handle horizontal rule\n const handle_hr_insert = () => {\n editor.chain().focus().setHorizontalRule().run();\n };\n\n // Handle variable insert\n const handle_variable_insert = (variable_name: string) => {\n editor.chain().focus().insertVariable(variable_name).run();\n set_variables_menu_open(false);\n };\n\n return (\n <TooltipProvider delayDuration={300}>\n <div\n className={cn(\n \"cls_rte_toolbar\",\n \"flex flex-wrap items-center gap-0.5\",\n \"p-1.5 rounded-t-md\",\n \"bg-muted border-b border-border\",\n disabled && \"opacity-50 pointer-events-none\"\n )}\n >\n {/* Undo/Redo */}\n <ToolbarButton\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().undo()}\n tooltip=\"Undo\"\n >\n <LuUndo2 className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().redo()}\n tooltip=\"Redo\"\n >\n <LuRedo2 className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Block Type Dropdown */}\n <Select value={get_current_block_type()} onValueChange={handle_block_type_change}>\n <SelectTrigger className=\"h-8 w-[130px] text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {BLOCK_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value} className=\"text-xs\">\n {type.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <ToolbarSeparator />\n\n {/* Font Family */}\n <Select value={get_current_font_family()} onValueChange={handle_font_family_change}>\n <SelectTrigger className=\"h-8 w-[120px] text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {FONT_FAMILIES.map((font) => (\n <SelectItem\n key={font.value}\n value={font.value}\n className=\"text-xs\"\n style={{ fontFamily: font.value }}\n >\n {font.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {/* Font Size */}\n <div className=\"flex items-center\">\n <ToolbarButton\n onClick={() => handle_font_size_change(-FONT_SIZE_CONFIG.step)}\n tooltip=\"Decrease font size\"\n >\n <LuMinus className=\"h-3 w-3\" />\n </ToolbarButton>\n <span className=\"w-8 text-center text-xs tabular-nums\">\n {get_current_font_size()}\n </span>\n <ToolbarButton\n onClick={() => handle_font_size_change(FONT_SIZE_CONFIG.step)}\n tooltip=\"Increase font size\"\n >\n <LuPlus className=\"h-3 w-3\" />\n </ToolbarButton>\n </div>\n\n <ToolbarSeparator />\n\n {/* Text Formatting */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n is_active={editor.isActive(\"bold\")}\n tooltip=\"Bold\"\n >\n <LuBold className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n is_active={editor.isActive(\"italic\")}\n tooltip=\"Italic\"\n >\n <LuItalic className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n is_active={editor.isActive(\"underline\")}\n tooltip=\"Underline\"\n >\n <LuUnderline className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n is_active={editor.isActive(\"strike\")}\n tooltip=\"Strikethrough\"\n >\n <LuStrikethrough className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n is_active={editor.isActive(\"subscript\")}\n tooltip=\"Subscript\"\n >\n <LuSubscript className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n is_active={editor.isActive(\"superscript\")}\n tooltip=\"Superscript\"\n >\n <LuSuperscript className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Link */}\n <Popover open={link_popover_open} onOpenChange={set_link_popover_open}>\n <PopoverTrigger asChild>\n <ToolbarButton is_active={editor.isActive(\"link\")} tooltip=\"Link\">\n <LuLink className=\"h-4 w-4\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-80 p-3\">\n <div className=\"flex flex-col gap-2\">\n <Input\n value={link_url}\n onChange={(e) => set_link_url(e.target.value)}\n placeholder=\"https://example.com\"\n className=\"h-8 text-sm\"\n />\n <div className=\"flex gap-2\">\n <Button size=\"sm\" onClick={handle_set_link} className=\"flex-1\">\n {editor.isActive(\"link\") ? \"Update\" : \"Add\"} Link\n </Button>\n {editor.isActive(\"link\") && (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n onClick={handle_remove_link}\n >\n Remove\n </Button>\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n\n {/* Clear Formatting */}\n <ToolbarButton\n onClick={() => editor.chain().focus().unsetAllMarks().clearNodes().run()}\n tooltip=\"Clear formatting\"\n >\n <LuRemoveFormatting className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Text Color */}\n <Popover open={text_color_open} onOpenChange={set_text_color_open}>\n <PopoverTrigger asChild>\n <ToolbarButton tooltip=\"Text color\">\n <div className=\"flex flex-col items-center\">\n <LuPalette className=\"h-4 w-4\" />\n <div\n className=\"h-0.5 w-4 mt-0.5 rounded-full\"\n style={{ backgroundColor: text_color }}\n />\n </div>\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Sketch\n color={text_color}\n onChange={handle_text_color_change}\n presetColors={[\n \"#000000\", \"#434343\", \"#666666\", \"#999999\", \"#cccccc\", \"#ffffff\",\n \"#ff0000\", \"#ff9900\", \"#ffff00\", \"#00ff00\", \"#00ffff\", \"#0000ff\",\n \"#9900ff\", \"#ff00ff\", \"#f4cccc\", \"#fce5cd\", \"#fff2cc\", \"#d9ead3\",\n ]}\n />\n </PopoverContent>\n </Popover>\n\n {/* Highlight Color */}\n <Popover open={highlight_color_open} onOpenChange={set_highlight_color_open}>\n <PopoverTrigger asChild>\n <ToolbarButton tooltip=\"Highlight color\">\n <div className=\"flex flex-col items-center\">\n <LuHighlighter className=\"h-4 w-4\" />\n <div\n className=\"h-0.5 w-4 mt-0.5 rounded-full\"\n style={{ backgroundColor: highlight_color }}\n />\n </div>\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Sketch\n color={highlight_color}\n onChange={handle_highlight_color_change}\n presetColors={[\n \"#ffff00\", \"#00ff00\", \"#00ffff\", \"#ff00ff\", \"#ff0000\", \"#0000ff\",\n \"#fff2cc\", \"#d9ead3\", \"#cfe2f3\", \"#ead1dc\", \"#fce5cd\", \"#d0e0e3\",\n ]}\n />\n </PopoverContent>\n </Popover>\n\n <ToolbarSeparator />\n\n {/* Alignment */}\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"left\").run()}\n is_active={editor.isActive({ textAlign: \"left\" })}\n tooltip=\"Align left\"\n >\n <LuAlignLeft className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"center\").run()}\n is_active={editor.isActive({ textAlign: \"center\" })}\n tooltip=\"Align center\"\n >\n <LuAlignCenter className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"right\").run()}\n is_active={editor.isActive({ textAlign: \"right\" })}\n tooltip=\"Align right\"\n >\n <LuAlignRight className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"justify\").run()}\n is_active={editor.isActive({ textAlign: \"justify\" })}\n tooltip=\"Justify\"\n >\n <LuAlignJustify className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* List Types */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n is_active={editor.isActive(\"bulletList\")}\n tooltip=\"Bullet list\"\n >\n <LuList className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n is_active={editor.isActive(\"orderedList\")}\n tooltip=\"Numbered list\"\n >\n <LuListOrdered className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleTaskList().run()}\n is_active={editor.isActive(\"taskList\")}\n tooltip=\"Checklist\"\n >\n <LuListChecks className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Indent/Outdent */}\n <ToolbarButton\n onClick={() => {\n if (editor.isActive(\"listItem\")) {\n editor.chain().focus().liftListItem(\"listItem\").run();\n } else if (editor.isActive(\"taskItem\")) {\n editor.chain().focus().liftListItem(\"taskItem\").run();\n }\n }}\n disabled={!editor.can().liftListItem(\"listItem\") && !editor.can().liftListItem(\"taskItem\")}\n tooltip=\"Decrease indent\"\n >\n <LuIndentDecrease className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => {\n if (editor.isActive(\"listItem\")) {\n editor.chain().focus().sinkListItem(\"listItem\").run();\n } else if (editor.isActive(\"taskItem\")) {\n editor.chain().focus().sinkListItem(\"taskItem\").run();\n }\n }}\n disabled={!editor.can().sinkListItem(\"listItem\") && !editor.can().sinkListItem(\"taskItem\")}\n tooltip=\"Increase indent\"\n >\n <LuIndentIncrease className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Horizontal Rule */}\n <ToolbarButton\n onClick={handle_hr_insert}\n tooltip=\"Horizontal rule\"\n >\n <RxDividerHorizontal className=\"h-4 w-4\" />\n </ToolbarButton>\n\n {/* Image */}\n <ToolbarButton\n onClick={() => image_input_ref.current?.click()}\n tooltip=\"Insert image\"\n >\n <LuImage className=\"h-4 w-4\" />\n </ToolbarButton>\n\n {/* Table Menu */}\n <Popover open={table_menu_open} onOpenChange={set_table_menu_open}>\n <PopoverTrigger asChild>\n <ToolbarButton\n is_active={editor.isActive(\"table\")}\n tooltip=\"Table\"\n >\n <LuTable className=\"h-4 w-4\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-3\" align=\"start\">\n {editor.isActive(\"table\") ? (\n // Table editing controls when inside a table\n <div className=\"flex flex-col gap-2\">\n <div className=\"text-xs font-medium mb-1\">Table Operations</div>\n <div className=\"grid grid-cols-2 gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_row_before}\n >\n <LuTableRowsSplit className=\"h-3 w-3 mr-1\" />\n Add row above\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_row_after}\n >\n <LuTableRowsSplit className=\"h-3 w-3 mr-1\" />\n Add row below\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_col_before}\n >\n <LuTableColumnsSplit className=\"h-3 w-3 mr-1\" />\n Add col left\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_col_after}\n >\n <LuTableColumnsSplit className=\"h-3 w-3 mr-1\" />\n Add col right\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7 text-destructive hover:text-destructive\"\n onClick={handle_delete_row}\n >\n <LuTrash2 className=\"h-3 w-3 mr-1\" />\n Delete row\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7 text-destructive hover:text-destructive\"\n onClick={handle_delete_col}\n >\n <LuTrash2 className=\"h-3 w-3 mr-1\" />\n Delete col\n </Button>\n </div>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"justify-center text-xs h-7 mt-1\"\n onClick={handle_delete_table}\n >\n <LuTrash2 className=\"h-3 w-3 mr-1\" />\n Delete table\n </Button>\n </div>\n ) : (\n // Table size picker when not in a table\n <div className=\"flex flex-col gap-2\">\n <div className=\"text-xs font-medium mb-1\">Insert Table</div>\n {/* Grid size picker */}\n <div className=\"grid gap-0.5\">\n {Array.from({ length: 6 }).map((_, row_idx) => (\n <div key={row_idx} className=\"flex gap-0.5\">\n {Array.from({ length: 6 }).map((_, col_idx) => (\n <div\n key={col_idx}\n className={cn(\n \"w-5 h-5 border rounded-sm cursor-pointer transition-colors\",\n hovered_cell && row_idx < hovered_cell.row && col_idx < hovered_cell.col\n ? \"bg-primary border-primary\"\n : \"border-border hover:border-primary/50\"\n )}\n onMouseEnter={() => set_hovered_cell({ row: row_idx + 1, col: col_idx + 1 })}\n onMouseLeave={() => set_hovered_cell(null)}\n onClick={() => handle_table_insert(row_idx + 1, col_idx + 1)}\n />\n ))}\n </div>\n ))}\n </div>\n <div className=\"text-xs text-center text-muted-foreground\">\n {hovered_cell ? `${hovered_cell.col} x ${hovered_cell.row}` : \"Select size\"}\n </div>\n <div className=\"border-t pt-2 mt-1\">\n <div className=\"text-xs text-muted-foreground mb-2\">Custom size</div>\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"number\"\n min={1}\n max={20}\n value={table_cols}\n onChange={(e) => set_table_cols(Math.max(1, Math.min(20, parseInt(e.target.value) || 1)))}\n className=\"h-7 w-14 text-xs\"\n />\n <span className=\"text-xs\">x</span>\n <Input\n type=\"number\"\n min={1}\n max={20}\n value={table_rows}\n onChange={(e) => set_table_rows(Math.max(1, Math.min(20, parseInt(e.target.value) || 1)))}\n className=\"h-7 w-14 text-xs\"\n />\n <Button\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => handle_table_insert(table_rows, table_cols)}\n >\n <LuGrid3X3 className=\"h-3 w-3 mr-1\" />\n Insert\n </Button>\n </div>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n\n <ToolbarSeparator />\n\n {/* Variables Menu */}\n {variables.length > 0 && (\n <Popover open={variables_menu_open} onOpenChange={set_variables_menu_open}>\n <PopoverTrigger asChild>\n <ToolbarButton tooltip=\"Insert variable\">\n <LuVariable className=\"h-4 w-4\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-64 p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder=\"Search variables...\" className=\"h-8 text-xs\" />\n <CommandList>\n <CommandEmpty>No variables found.</CommandEmpty>\n <CommandGroup>\n {variables.map((variable) => (\n <CommandItem\n key={variable.name}\n value={variable.name}\n onSelect={() => handle_variable_insert(variable.name)}\n className=\"text-xs\"\n >\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">{`{{${variable.name}}}`}</span>\n {variable.description && (\n <span className=\"text-muted-foreground text-[10px]\">\n {variable.description}\n </span>\n )}\n </div>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )}\n\n {/* File Attach */}\n <ToolbarButton\n onClick={() => file_input_ref.current?.click()}\n tooltip=\"Attach file\"\n >\n <LuPaperclip className=\"h-4 w-4\" />\n </ToolbarButton>\n\n {/* Hidden file inputs */}\n <input\n ref={file_input_ref}\n type=\"file\"\n className=\"hidden\"\n onChange={handle_file_attach}\n />\n <input\n ref={image_input_ref}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handle_image_insert}\n />\n </div>\n </TooltipProvider>\n );\n};\n","\"use client\";\n\n/**\n * Attachments List Component\n *\n * Displays attached files with preview and remove functionality.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"../../ui/button\";\nimport { LuX, LuFile, LuImage, LuFileText, LuFileCode } from \"react-icons/lu\";\nimport type { RteAttachment } from \"../types\";\nimport { format_file_size, get_file_extension, is_image_file } from \"../utils\";\n\ninterface AttachmentsListProps {\n attachments: RteAttachment[];\n on_remove: (index: number) => void;\n disabled?: boolean;\n}\n\n/**\n * Get icon for file type\n */\nconst get_file_icon = (mime_type: string, filename: string) => {\n if (is_image_file(mime_type)) {\n return <LuImage className=\"h-4 w-4\" />;\n }\n\n const ext = get_file_extension(filename);\n if ([\"txt\", \"md\", \"doc\", \"docx\", \"pdf\"].includes(ext)) {\n return <LuFileText className=\"h-4 w-4\" />;\n }\n if ([\"js\", \"ts\", \"jsx\", \"tsx\", \"json\", \"html\", \"css\"].includes(ext)) {\n return <LuFileCode className=\"h-4 w-4\" />;\n }\n\n return <LuFile className=\"h-4 w-4\" />;\n};\n\n/**\n * Calculate base64 file size in bytes\n */\nconst get_base64_size = (base64: string): number => {\n // Remove padding and calculate\n const padding = (base64.match(/=+$/) || [\"\"])[0].length;\n return Math.floor((base64.length * 3) / 4) - padding;\n};\n\nexport const AttachmentsList: React.FC<AttachmentsListProps> = ({\n attachments,\n on_remove,\n disabled = false,\n}) => {\n if (attachments.length === 0) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"cls_rte_attachments\",\n \"flex flex-wrap gap-2 p-2\",\n \"border-t border-border bg-muted/50 rounded-b-md\"\n )}\n >\n {attachments.map((attachment, index) => {\n const size = get_base64_size(attachment.data);\n const is_image = is_image_file(attachment.mime_type);\n\n return (\n <div\n key={`${attachment.filename}-${index}`}\n className={cn(\n \"cls_rte_attachment_item\",\n \"flex items-center gap-2\",\n \"px-2 py-1.5 rounded-md\",\n \"bg-background border border-border\",\n \"text-xs\"\n )}\n >\n {/* Preview thumbnail for images */}\n {is_image ? (\n <img\n src={`data:${attachment.mime_type};base64,${attachment.data}`}\n alt={attachment.filename}\n className=\"h-8 w-8 rounded object-cover\"\n />\n ) : (\n <div className=\"flex h-8 w-8 items-center justify-center rounded bg-muted\">\n {get_file_icon(attachment.mime_type, attachment.filename)}\n </div>\n )}\n\n {/* File info */}\n <div className=\"flex flex-col min-w-0\">\n <span className=\"truncate max-w-[120px] font-medium\">\n {attachment.filename}\n </span>\n <span className=\"text-muted-foreground text-[10px]\">\n {format_file_size(size)}\n </span>\n </div>\n\n {/* Remove button */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5 ml-1\"\n onClick={() => on_remove(index)}\n disabled={disabled}\n >\n <LuX className=\"h-3 w-3\" />\n </Button>\n </div>\n );\n })}\n </div>\n );\n};\n","/**\n * Font Size Extension for Tiptap\n *\n * Custom extension that adds font-size support through the TextStyle mark.\n * Uses setFontSizeNum to avoid conflicts with other font size extensions.\n */\n\nimport { Extension } from \"@tiptap/core\";\nimport \"@tiptap/extension-text-style\";\n\nexport interface FontSizeOptions {\n types: string[];\n default_size: number;\n min_size: number;\n max_size: number;\n step: number;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n fontSizeCustom: {\n /**\n * Set the font size (numeric)\n */\n setFontSizeNum: (size: number) => ReturnType;\n /**\n * Unset the font size\n */\n unsetFontSizeNum: () => ReturnType;\n };\n }\n}\n\nexport const FontSizeExtension = Extension.create<FontSizeOptions>({\n name: \"fontSizeCustom\",\n\n addOptions() {\n return {\n types: [\"textStyle\"],\n default_size: 16,\n min_size: 8,\n max_size: 72,\n step: 2,\n };\n },\n\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n fontSize: {\n default: null,\n parseHTML: (element) => {\n const size = element.style.fontSize?.replace(/['\"px]/g, \"\");\n return size ? parseInt(size, 10) : null;\n },\n renderHTML: (attributes) => {\n if (!attributes.fontSize) {\n return {};\n }\n return {\n style: `font-size: ${attributes.fontSize}px`,\n };\n },\n },\n },\n },\n ];\n },\n\n addCommands() {\n return {\n setFontSizeNum:\n (size: number) =>\n ({ chain }) => {\n const clampedSize = Math.min(\n this.options.max_size,\n Math.max(this.options.min_size, size)\n );\n return chain().setMark(\"textStyle\", { fontSize: clampedSize }).run();\n },\n unsetFontSizeNum:\n () =>\n ({ chain }) => {\n return chain()\n .setMark(\"textStyle\", { fontSize: null })\n .removeEmptyTextStyle()\n .run();\n },\n };\n },\n});\n","/**\n * Variable Extension for Tiptap\n *\n * Custom atomic node extension for template variables.\n * Variables are rendered as non-editable pills and serialize to {{variable_name}}.\n */\n\nimport { Node, mergeAttributes } from \"@tiptap/core\";\nimport { ReactNodeViewRenderer, NodeViewWrapper, type NodeViewProps } from \"@tiptap/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\n\n/**\n * React component for rendering variable pills in the editor\n */\nconst VariablePill: React.FC<NodeViewProps> = ({ node, selected }) => {\n return (\n <NodeViewWrapper as=\"span\" className=\"inline\">\n <span\n className={cn(\n \"cls_rte_variable_pill\",\n \"inline-flex items-center\",\n \"px-2 py-0.5 mx-0.5\",\n \"rounded-full\",\n \"text-sm font-medium\",\n \"bg-primary/10 text-primary\",\n \"border border-primary/20\",\n \"cursor-default select-none\",\n selected && \"ring-2 ring-primary ring-offset-1\"\n )}\n contentEditable={false}\n data-variable={node.attrs.name}\n >\n {`{{${node.attrs.name}}}`}\n </span>\n </NodeViewWrapper>\n );\n};\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n variable: {\n /**\n * Insert a variable node\n */\n insertVariable: (name: string) => ReturnType;\n };\n }\n}\n\nexport const VariableExtension = Node.create({\n name: \"variable\",\n\n group: \"inline\",\n\n inline: true,\n\n // Atomic means the node cannot be split or merged\n atom: true,\n\n // Draggable in the editor\n draggable: true,\n\n // Selectable as a whole unit\n selectable: true,\n\n addAttributes() {\n return {\n name: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-variable\"),\n renderHTML: (attributes) => ({\n \"data-variable\": attributes.name,\n }),\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"span[data-variable]\",\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"span\",\n mergeAttributes(HTMLAttributes, {\n class: \"cls_rte_variable_pill\",\n contenteditable: \"false\",\n }),\n `{{${HTMLAttributes[\"data-variable\"]}}}`,\n ];\n },\n\n renderText({ node }) {\n return `{{${node.attrs.name}}}`;\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(VariablePill);\n },\n\n addCommands() {\n return {\n insertVariable:\n (name: string) =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: { name },\n });\n },\n };\n },\n\n // Keyboard behavior - delete entire node on backspace\n addKeyboardShortcuts() {\n return {\n Backspace: () =>\n this.editor.commands.command(({ tr, state }) => {\n let is_variable = false;\n const { selection } = state;\n const { empty, anchor } = selection;\n\n if (!empty) {\n return false;\n }\n\n state.doc.nodesBetween(anchor - 1, anchor, (node, pos) => {\n if (node.type.name === this.name) {\n is_variable = true;\n tr.insertText(\"\", pos, pos + node.nodeSize);\n return false;\n }\n });\n\n return is_variable;\n }),\n };\n },\n});\n","\"use client\";\n\n/**\n * Tabs component based on Radix UI\n * Provides tabbed interface for content switching\n */\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../../lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","\"use client\";\n\n/**\n * Hazo UI Rich Text Editor Component\n *\n * A comprehensive rich text editor for email template generation with\n * variable insertion support, file attachments, and full formatting controls.\n */\n\nimport * as React from \"react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { TextStyle } from \"@tiptap/extension-text-style\";\nimport FontFamily from \"@tiptap/extension-font-family\";\nimport Underline from \"@tiptap/extension-underline\";\nimport Subscript from \"@tiptap/extension-subscript\";\nimport Superscript from \"@tiptap/extension-superscript\";\nimport Link from \"@tiptap/extension-link\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport Color from \"@tiptap/extension-color\";\nimport Image from \"@tiptap/extension-image\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport HorizontalRule from \"@tiptap/extension-horizontal-rule\";\nimport { Table } from \"@tiptap/extension-table\";\nimport TableRow from \"@tiptap/extension-table-row\";\nimport TableCell from \"@tiptap/extension-table-cell\";\nimport TableHeader from \"@tiptap/extension-table-header\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Toolbar } from \"./toolbar/toolbar\";\nimport { AttachmentsList } from \"./attachments/attachments_list\";\nimport { FontSizeExtension } from \"./extensions/font_size_extension\";\nimport { VariableExtension } from \"./extensions/variable_extension\";\nimport { Tabs, TabsList, TabsTrigger } from \"../ui/tabs\";\nimport type {\n HazoUiRteProps,\n RteOutput,\n RteAttachment,\n RteVariable,\n} from \"./types\";\n\n// Re-export types for external use\nexport type { HazoUiRteProps, RteOutput, RteAttachment, RteVariable };\n\n/**\n * Debounce utility for rate-limiting callbacks\n */\nfunction debounce_fn<T extends RteOutput>(\n func: (output: T) => void,\n wait: number\n): (output: T) => void {\n let timeout_id: ReturnType<typeof setTimeout> | null = null;\n\n return (output: T) => {\n if (timeout_id) {\n clearTimeout(timeout_id);\n }\n timeout_id = setTimeout(() => {\n func(output);\n }, wait);\n };\n}\n\n/**\n * HazoUiRte - Rich Text Editor Component\n */\nexport const HazoUiRte: React.FC<HazoUiRteProps> = ({\n html = \"\",\n attachments: initial_attachments = [],\n variables = [],\n on_change,\n placeholder = \"Start typing...\",\n min_height = \"200px\",\n max_height = \"400px\",\n disabled = false,\n className,\n show_output_viewer = false,\n}) => {\n const [attachments, set_attachments] = React.useState<RteAttachment[]>(\n initial_attachments\n );\n const [active_tab, set_active_tab] = React.useState<\"html\" | \"plain_text\" | \"raw_html\">(\"html\");\n\n // Determine if toolbar should be disabled (view-only modes)\n const is_view_only = active_tab !== \"html\";\n\n // Store latest attachments in a ref for the debounced callback\n const attachments_ref = React.useRef(attachments);\n attachments_ref.current = attachments;\n\n // Create debounced change handler\n const debounced_on_change = React.useMemo(\n () =>\n debounce_fn<RteOutput>((output: RteOutput) => {\n if (on_change) {\n on_change(output);\n }\n }, 300),\n [on_change]\n );\n\n // Initialize the editor\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: {\n levels: [1, 2, 3],\n },\n }),\n TextStyle,\n FontFamily,\n FontSizeExtension,\n Underline,\n Subscript,\n Superscript,\n Link.configure({\n openOnClick: false,\n HTMLAttributes: {\n class: \"cls_rte_link text-primary underline cursor-pointer\",\n },\n }),\n TextAlign.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Highlight.configure({\n multicolor: true,\n }),\n Color,\n Image.configure({\n inline: true,\n allowBase64: true,\n HTMLAttributes: {\n class: \"cls_rte_image max-w-full h-auto rounded\",\n },\n }),\n Placeholder.configure({\n placeholder,\n }),\n HorizontalRule,\n Table.configure({\n resizable: true,\n HTMLAttributes: {\n class: \"cls_rte_table border-collapse w-full\",\n },\n }),\n TableRow,\n TableCell.configure({\n HTMLAttributes: {\n class: \"border border-border p-2\",\n },\n }),\n TableHeader.configure({\n HTMLAttributes: {\n class: \"border border-border p-2 bg-muted font-semibold\",\n },\n }),\n TaskList.configure({\n HTMLAttributes: {\n class: \"cls_rte_task_list list-none pl-0\",\n },\n }),\n TaskItem.configure({\n nested: true,\n HTMLAttributes: {\n class: \"cls_rte_task_item flex items-start gap-2\",\n },\n }),\n VariableExtension,\n ],\n content: html,\n editable: !disabled,\n immediatelyRender: false, // Prevent SSR hydration mismatch in Next.js\n editorProps: {\n attributes: {\n class: cn(\n \"cls_rte_editor\",\n \"prose prose-sm dark:prose-invert max-w-none\",\n \"p-4 focus:outline-none\",\n \"min-h-[inherit] overflow-auto\"\n ),\n style: `min-height: ${min_height}; max-height: ${max_height}`,\n },\n },\n onUpdate: ({ editor }) => {\n const output: RteOutput = {\n html: editor.getHTML(),\n plain_text: editor.getText(),\n attachments: attachments_ref.current,\n };\n debounced_on_change(output);\n },\n });\n\n // Update editor content when html prop changes externally\n React.useEffect(() => {\n if (editor && html !== undefined) {\n const current_html = editor.getHTML();\n // Only update if content is actually different to avoid cursor jumps\n if (html !== current_html && !editor.isFocused) {\n editor.commands.setContent(html, { emitUpdate: false });\n }\n }\n }, [html, editor]);\n\n // Update editor editable state when disabled changes\n React.useEffect(() => {\n if (editor) {\n editor.setEditable(!disabled);\n }\n }, [disabled, editor]);\n\n // Track if attachments were set from props to avoid circular updates\n const attachments_from_props_ref = React.useRef(false);\n const prev_initial_attachments_ref = React.useRef(initial_attachments);\n\n // Sync attachments with initial prop (only if changed externally)\n React.useEffect(() => {\n // Only update if initial_attachments actually changed (not from our own on_change)\n if (JSON.stringify(initial_attachments) !== JSON.stringify(prev_initial_attachments_ref.current)) {\n prev_initial_attachments_ref.current = initial_attachments;\n attachments_from_props_ref.current = true;\n set_attachments(initial_attachments);\n }\n }, [initial_attachments]);\n\n // Notify parent when attachments change (but not if set from props)\n React.useEffect(() => {\n if (attachments_from_props_ref.current) {\n attachments_from_props_ref.current = false;\n return;\n }\n if (editor && on_change) {\n const output: RteOutput = {\n html: editor.getHTML(),\n plain_text: editor.getText(),\n attachments,\n };\n on_change(output);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [attachments]);\n\n // Handle attachment removal\n const handle_remove_attachment = (index: number) => {\n set_attachments((prev) => prev.filter((_, i) => i !== index));\n };\n\n // Handle attachments change from toolbar\n const handle_attachments_change = (new_attachments: RteAttachment[]) => {\n set_attachments(new_attachments);\n };\n\n // Format HTML with indentation for raw view\n const format_html = (html_str: string): string => {\n let formatted = \"\";\n let indent = 0;\n const tags = html_str.split(/(<[^>]+>)/g).filter(Boolean);\n\n for (const tag of tags) {\n if (tag.startsWith(\"</\")) {\n indent = Math.max(0, indent - 1);\n formatted += \" \".repeat(indent) + tag + \"\\n\";\n } else if (tag.startsWith(\"<\") && !tag.startsWith(\"<!\") && !tag.endsWith(\"/>\")) {\n formatted += \" \".repeat(indent) + tag + \"\\n\";\n if (!tag.includes(\"br\") && !tag.includes(\"hr\") && !tag.includes(\"img\")) {\n indent++;\n }\n } else if (tag.startsWith(\"<\")) {\n formatted += \" \".repeat(indent) + tag + \"\\n\";\n } else if (tag.trim()) {\n formatted += \" \".repeat(indent) + tag.trim() + \"\\n\";\n }\n }\n return formatted.trim();\n };\n\n return (\n <div\n className={cn(\n \"cls_rte_container\",\n \"rounded-md border border-input bg-background\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n {/* Toolbar - always visible, disabled in view-only modes */}\n <Toolbar\n editor={editor}\n variables={variables}\n attachments={attachments}\n on_attachments_change={handle_attachments_change}\n disabled={disabled || is_view_only}\n />\n\n {/* View Mode Tabs */}\n {show_output_viewer && editor && (\n <div className=\"cls_rte_tabs border-b border-border px-2 pt-2\">\n <Tabs value={active_tab} onValueChange={(v) => set_active_tab(v as typeof active_tab)}>\n <TabsList className=\"h-9\">\n <TabsTrigger value=\"html\" className=\"text-sm\">HTML</TabsTrigger>\n <TabsTrigger value=\"plain_text\" className=\"text-sm\">Plain Text</TabsTrigger>\n <TabsTrigger value=\"raw_html\" className=\"text-sm\">Raw HTML</TabsTrigger>\n </TabsList>\n </Tabs>\n </div>\n )}\n\n {/* Content Area */}\n <div style={{ minHeight: min_height, maxHeight: max_height }} className=\"overflow-auto\">\n {/* HTML Edit Mode */}\n {active_tab === \"html\" && (\n <EditorContent\n editor={editor}\n className={cn(\n \"cls_rte_content\",\n disabled && \"pointer-events-none\"\n )}\n />\n )}\n\n {/* Plain Text View */}\n {active_tab === \"plain_text\" && (\n <pre className=\"cls_rte_plain_text p-4 text-sm whitespace-pre-wrap font-mono h-full\">\n {editor?.getText() || \"(empty)\"}\n </pre>\n )}\n\n {/* Raw HTML View */}\n {active_tab === \"raw_html\" && (\n <pre className=\"cls_rte_raw_html p-4 text-xs whitespace-pre-wrap font-mono text-muted-foreground h-full\">\n {format_html(editor?.getHTML() || \"\") || \"(empty)\"}\n </pre>\n )}\n </div>\n\n {/* Attachments List */}\n <AttachmentsList\n attachments={attachments}\n on_remove={handle_remove_attachment}\n disabled={disabled}\n />\n </div>\n );\n};\n\nHazoUiRte.displayName = \"HazoUiRte\";\n","/**\n * Command Node Extension for TipTap\n *\n * Custom atomic node extension for command pills (mentions, slash commands, etc.).\n * Commands are rendered as non-editable pills and serialize to prefix + action format.\n */\n\nimport { Node, mergeAttributes } from \"@tiptap/core\";\nimport { ReactNodeViewRenderer, NodeViewWrapper, type NodeViewProps } from \"@tiptap/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { CommandPillProps, PrefixColor } from \"../types\";\n\n/**\n * Generate unique ID for command nodes\n */\nconst generate_command_id = (): string => {\n return `cmd_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n};\n\n/**\n * Get pill variant classes\n */\nconst get_variant_classes = (variant: CommandPillProps[\"variant\"] = \"default\"): string => {\n switch (variant) {\n case \"outline\":\n return \"bg-transparent border-primary/40 text-primary\";\n case \"subtle\":\n return \"bg-muted border-transparent text-muted-foreground\";\n case \"default\":\n default:\n return \"bg-primary/10 text-primary border-primary/20\";\n }\n};\n\n/**\n * Build custom inline styles from PrefixColor\n */\nconst get_custom_color_styles = (\n color_bg?: string,\n color_fg?: string,\n color_border?: string\n): React.CSSProperties => {\n if (!color_bg && !color_fg && !color_border) {\n return {};\n }\n return {\n ...(color_bg && { backgroundColor: color_bg }),\n ...(color_fg && { color: color_fg }),\n ...(color_border && { borderColor: color_border }),\n };\n};\n\n/**\n * Check if custom colors are provided\n */\nconst has_custom_colors = (\n color_bg?: string,\n color_fg?: string,\n color_border?: string\n): boolean => {\n return Boolean(color_bg || color_fg || color_border);\n};\n\n/**\n * React component for rendering command pills in the editor\n */\nconst CommandPillView: React.FC<NodeViewProps> = ({ node, selected, editor }) => {\n const { prefix, action, action_label, id, variant, color_bg, color_fg, color_border } = node.attrs;\n\n const handle_click = () => {\n // Dispatch a custom event that the parent component can listen to\n const event = new CustomEvent(\"command-pill-click\", {\n detail: {\n id,\n prefix,\n action,\n action_label,\n node_pos: editor.state.selection.from - 1,\n },\n bubbles: true,\n });\n document.dispatchEvent(event);\n };\n\n const use_custom_colors = has_custom_colors(color_bg, color_fg, color_border);\n const custom_styles = get_custom_color_styles(color_bg, color_fg, color_border);\n\n return (\n <NodeViewWrapper as=\"span\" className=\"inline\">\n <span\n className={cn(\n \"cls_command_pill\",\n \"inline-flex items-center\",\n \"px-1.5 py-0.5 mx-0.5\",\n \"rounded-md\",\n \"text-sm font-medium\",\n \"border\",\n \"cursor-pointer select-none\",\n \"transition-all duration-150\",\n // Only apply variant classes if no custom colors\n !use_custom_colors && get_variant_classes(variant),\n selected && \"ring-2 ring-ring ring-offset-1\",\n \"hover:opacity-80\"\n )}\n style={custom_styles}\n contentEditable={false}\n data-command-id={id}\n data-command-prefix={prefix}\n data-command-action={action}\n onClick={handle_click}\n >\n <span className={cn(!use_custom_colors && \"text-muted-foreground opacity-70\")} style={use_custom_colors ? { opacity: 0.7 } : undefined}>{prefix}</span>\n <span>{action_label}</span>\n </span>\n </NodeViewWrapper>\n );\n};\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n commandNode: {\n /**\n * Insert a command node\n */\n insertCommand: (attrs: {\n prefix: string;\n action: string;\n action_label: string;\n variant?: \"default\" | \"outline\" | \"subtle\";\n color?: PrefixColor;\n }) => ReturnType;\n /**\n * Update an existing command node by ID\n */\n updateCommand: (\n id: string,\n attrs: { action: string; action_label: string }\n ) => ReturnType;\n };\n }\n}\n\nexport const CommandNodeExtension = Node.create({\n name: \"commandNode\",\n\n group: \"inline\",\n\n inline: true,\n\n // Atomic means the node cannot be split or merged\n atom: true,\n\n // Draggable in the editor\n draggable: true,\n\n // Selectable as a whole unit\n selectable: true,\n\n addAttributes() {\n return {\n id: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-command-id\"),\n renderHTML: (attributes) => ({\n \"data-command-id\": attributes.id,\n }),\n },\n prefix: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"data-command-prefix\"),\n renderHTML: (attributes) => ({\n \"data-command-prefix\": attributes.prefix,\n }),\n },\n action: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"data-command-action\"),\n renderHTML: (attributes) => ({\n \"data-command-action\": attributes.action,\n }),\n },\n action_label: {\n default: \"\",\n parseHTML: (element) => element.getAttribute(\"data-command-label\"),\n renderHTML: (attributes) => ({\n \"data-command-label\": attributes.action_label,\n }),\n },\n variant: {\n default: \"default\",\n parseHTML: (element) =>\n element.getAttribute(\"data-command-variant\") || \"default\",\n renderHTML: (attributes) => ({\n \"data-command-variant\": attributes.variant,\n }),\n },\n color_bg: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-command-color-bg\"),\n renderHTML: (attributes) => ({\n \"data-command-color-bg\": attributes.color_bg,\n }),\n },\n color_fg: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-command-color-fg\"),\n renderHTML: (attributes) => ({\n \"data-command-color-fg\": attributes.color_fg,\n }),\n },\n color_border: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-command-color-border\"),\n renderHTML: (attributes) => ({\n \"data-command-color-border\": attributes.color_border,\n }),\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"span[data-command-id]\",\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"span\",\n mergeAttributes(HTMLAttributes, {\n class: \"cls_command_pill\",\n contenteditable: \"false\",\n }),\n `${HTMLAttributes[\"data-command-prefix\"]}${HTMLAttributes[\"data-command-label\"]}`,\n ];\n },\n\n // Output format: prefix + action (e.g., \"@user_123\", \"/due_date\")\n renderText({ node }) {\n return `${node.attrs.prefix}${node.attrs.action}`;\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CommandPillView);\n },\n\n addCommands() {\n return {\n insertCommand:\n (attrs) =>\n ({ commands }) => {\n // Extract color from attrs and flatten to individual attributes\n const { color, ...rest_attrs } = attrs;\n return commands.insertContent({\n type: this.name,\n attrs: {\n ...rest_attrs,\n id: generate_command_id(),\n ...(color?.bg && { color_bg: color.bg }),\n ...(color?.fg && { color_fg: color.fg }),\n ...(color?.border && { color_border: color.border }),\n },\n });\n },\n updateCommand:\n (id, attrs) =>\n ({ tr, state }) => {\n let updated = false;\n state.doc.descendants((node, pos) => {\n if (node.type.name === this.name && node.attrs.id === id) {\n tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n ...attrs,\n });\n updated = true;\n return false;\n }\n });\n return updated;\n },\n };\n },\n\n // Keyboard behavior - delete entire node on backspace\n addKeyboardShortcuts() {\n return {\n Backspace: () =>\n this.editor.commands.command(({ tr, state }) => {\n let is_command = false;\n const { selection } = state;\n const { empty, anchor } = selection;\n\n if (!empty) {\n return false;\n }\n\n state.doc.nodesBetween(anchor - 1, anchor, (node, pos) => {\n if (node.type.name === this.name) {\n is_command = true;\n tr.insertText(\"\", pos, pos + node.nodeSize);\n return false;\n }\n });\n\n return is_command;\n }),\n };\n },\n});\n\nexport { generate_command_id };\n","/**\n * Command Suggestion Extension for TipTap\n *\n * Detects prefix characters and triggers the command popover for selection.\n * Works with multiple configurable prefixes (e.g., @, /, #).\n *\n * Each instance uses unique plugin keys to prevent conflicts when multiple\n * editor instances coexist (e.g., in lists during React transitions).\n */\n\nimport { Extension } from \"@tiptap/core\";\nimport Suggestion, { type SuggestionOptions } from \"@tiptap/suggestion\";\nimport { PluginKey } from \"@tiptap/pm/state\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { PrefixConfig, CommandItem, SuggestionState, PrefixColor } from \"../types\";\n\n/**\n * Props for creating the suggestion extension\n */\nexport interface CommandSuggestionConfig {\n /** Prefix configurations */\n prefixes: PrefixConfig[];\n /** Callback when suggestion state changes */\n on_suggestion_change: (state: SuggestionState | null) => void;\n /** Callback to insert a command */\n on_insert_command: (\n command: CommandItem,\n prefix: string,\n range: { from: number; to: number }\n ) => void;\n /**\n * Unique instance identifier for plugin key generation.\n * Prevents \"Adding different instances of a keyed plugin (suggestion$)\" errors\n * when multiple editor instances exist simultaneously.\n */\n instance_id: string;\n}\n\n/**\n * Create a suggestion configuration for a specific prefix\n */\nconst create_suggestion_config = (\n prefix_config: PrefixConfig,\n on_suggestion_change: CommandSuggestionConfig[\"on_suggestion_change\"],\n on_insert_command: CommandSuggestionConfig[\"on_insert_command\"]\n): Partial<SuggestionOptions> => {\n return {\n char: prefix_config.char,\n allowSpaces: false,\n startOfLine: false,\n\n items: ({ query }) => {\n if (!query) return prefix_config.commands;\n\n const lower_query = query.toLowerCase();\n return prefix_config.commands.filter(\n (cmd) =>\n cmd.action_label.toLowerCase().includes(lower_query) ||\n cmd.action.toLowerCase().includes(lower_query) ||\n cmd.action_description?.toLowerCase().includes(lower_query)\n );\n },\n\n render: () => {\n return {\n onStart: (props) => {\n // Defer React state update to avoid flushSync error during TipTap's render cycle\n queueMicrotask(() => {\n on_suggestion_change({\n is_active: true,\n query: props.query,\n prefix: prefix_config.char,\n client_rect: props.clientRect as () => DOMRect | null,\n commands: prefix_config.commands,\n range: props.range,\n });\n });\n },\n\n onUpdate: (props) => {\n // Defer React state update to avoid flushSync error during TipTap's render cycle\n queueMicrotask(() => {\n on_suggestion_change({\n is_active: true,\n query: props.query,\n prefix: prefix_config.char,\n client_rect: props.clientRect as () => DOMRect | null,\n commands: prefix_config.commands,\n range: props.range,\n });\n });\n },\n\n onKeyDown: (props) => {\n if (props.event.key === \"Escape\") {\n queueMicrotask(() => {\n on_suggestion_change(null);\n });\n return true;\n }\n // Let the popover handle arrow keys and enter\n if (\n props.event.key === \"ArrowUp\" ||\n props.event.key === \"ArrowDown\" ||\n props.event.key === \"Enter\"\n ) {\n return true;\n }\n return false;\n },\n\n onExit: () => {\n // Defer React state update to avoid flushSync error during TipTap's render cycle\n queueMicrotask(() => {\n on_suggestion_change(null);\n });\n },\n };\n },\n\n command: ({ range, props }) => {\n const command = props as unknown as CommandItem;\n on_insert_command(command, prefix_config.char, range);\n },\n };\n};\n\n/**\n * Create a combined suggestion extension for all configured prefixes\n *\n * Each suggestion plugin receives a unique key based on the instance_id\n * to prevent conflicts when multiple editor instances exist.\n */\nexport const create_command_suggestion_extension = (\n config: CommandSuggestionConfig\n): Extension[] => {\n const { prefixes, on_suggestion_change, on_insert_command, instance_id } = config;\n\n // Create an extension for each prefix with unique plugin keys\n return prefixes.map((prefix_config, index) => {\n // Generate a unique plugin key for this specific instance and prefix\n const plugin_key = new PluginKey(`suggestion_${instance_id}_${prefix_config.char}_${index}`);\n\n return Extension.create({\n name: `commandSuggestion_${instance_id}_${prefix_config.char}_${index}`,\n\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n pluginKey: plugin_key,\n ...create_suggestion_config(\n prefix_config,\n on_suggestion_change,\n on_insert_command\n ),\n }),\n ];\n },\n });\n });\n};\n\n/**\n * Utility to get current suggestion range and delete trigger text\n */\nexport const delete_suggestion_range = (\n editor: Editor,\n range: { from: number; to: number }\n): void => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .run();\n};\n\n/**\n * Utility to insert command at current position\n */\nexport const insert_command_at_position = (\n editor: Editor,\n command: CommandItem,\n prefix: string,\n range: { from: number; to: number },\n variant: \"default\" | \"outline\" | \"subtle\" = \"default\",\n color?: PrefixColor\n): void => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .insertCommand({\n prefix,\n action: command.action,\n action_label: command.action_label,\n variant,\n color,\n })\n .run();\n};\n","/**\n * Command Pill Component\n *\n * Standalone pill component for displaying commands outside the editor.\n * Used in edit popovers and previews.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { CommandPillProps } from \"../types\";\n\n/**\n * Get variant-specific classes for the pill\n */\nconst get_variant_classes = (variant: CommandPillProps[\"variant\"] = \"default\"): string => {\n switch (variant) {\n case \"outline\":\n return \"bg-transparent border-primary/40 text-primary hover:bg-primary/5\";\n case \"subtle\":\n return \"bg-muted border-transparent text-muted-foreground hover:bg-muted/80\";\n case \"default\":\n default:\n return \"bg-primary/10 text-primary border-primary/20 hover:bg-primary/15\";\n }\n};\n\n/**\n * Build custom inline styles from PrefixColor\n */\nconst get_custom_color_styles = (\n color?: CommandPillProps[\"color\"]\n): React.CSSProperties => {\n if (!color) {\n return {};\n }\n return {\n ...(color.bg && { backgroundColor: color.bg }),\n ...(color.fg && { color: color.fg }),\n ...(color.border && { borderColor: color.border }),\n };\n};\n\n/**\n * CommandPill - Displays a command as a styled badge/pill\n */\nexport const CommandPill: React.FC<CommandPillProps> = ({\n prefix,\n action,\n action_label,\n id,\n selected = false,\n variant = \"default\",\n color,\n on_click,\n}) => {\n const use_custom_colors = Boolean(color?.bg || color?.fg || color?.border);\n const custom_styles = get_custom_color_styles(color);\n\n return (\n <span\n className={cn(\n \"cls_command_pill_standalone\",\n \"inline-flex items-center\",\n \"px-1.5 py-0.5\",\n \"rounded-md\",\n \"text-sm font-medium\",\n \"border\",\n \"transition-all duration-150\",\n // Only apply variant classes if no custom colors\n !use_custom_colors && get_variant_classes(variant),\n selected && \"ring-2 ring-ring ring-offset-1\",\n on_click && \"cursor-pointer\"\n )}\n style={custom_styles}\n data-command-id={id}\n data-command-prefix={prefix}\n data-command-action={action}\n onClick={on_click}\n role={on_click ? \"button\" : undefined}\n tabIndex={on_click ? 0 : undefined}\n onKeyDown={(e) => {\n if (on_click && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n on_click();\n }\n }}\n >\n <span className={cn(!use_custom_colors && \"text-muted-foreground opacity-70\")} style={use_custom_colors ? { opacity: 0.7 } : undefined}>{prefix}</span>\n <span>{action_label}</span>\n </span>\n );\n};\n\nCommandPill.displayName = \"CommandPill\";\n\nexport default CommandPill;\n","/**\n * Command Popover Component\n *\n * Dropdown menu for searching and selecting commands.\n * Supports keyboard navigation and command grouping.\n *\n * Rendered via React Portal to document.body to escape parent stacking\n * contexts and ensure the dropdown floats above all page content.\n *\n * Note: The query filtering is handled by TipTap's suggestion extension,\n * so typing continues in the editor and filters the list automatically.\n */\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n Command,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n} from \"../../ui/command\";\nimport type { CommandItem as CommandItemType, CommandPopoverProps } from \"../types\";\n\n/**\n * Group commands by their group property\n */\nconst group_commands = (commands: CommandItemType[]): Map<string, CommandItemType[]> => {\n const groups = new Map<string, CommandItemType[]>();\n\n for (const cmd of commands) {\n const group_name = cmd.group || \"\";\n if (!groups.has(group_name)) {\n groups.set(group_name, []);\n }\n groups.get(group_name)!.push(cmd);\n }\n\n return groups;\n};\n\n/**\n * CommandPopover - Dropdown for command selection\n */\nexport const CommandPopover: React.FC<CommandPopoverProps> = ({\n is_open,\n commands,\n prefix,\n query,\n selected_index,\n position,\n on_select,\n on_close,\n on_selection_change: _on_selection_change,\n prefix_color,\n}) => {\n const container_ref = React.useRef<HTMLDivElement>(null);\n\n // Grouped commands for display\n const grouped_commands = React.useMemo(\n () => group_commands(commands),\n [commands]\n );\n\n // Close on click outside\n React.useEffect(() => {\n const handle_click_outside = (e: MouseEvent) => {\n if (\n container_ref.current &&\n !container_ref.current.contains(e.target as Node)\n ) {\n on_close();\n }\n };\n\n if (is_open) {\n document.addEventListener(\"mousedown\", handle_click_outside);\n return () => {\n document.removeEventListener(\"mousedown\", handle_click_outside);\n };\n }\n }, [is_open, on_close]);\n\n // Track if we're in a browser environment for SSR compatibility\n const [mounted, set_mounted] = React.useState(false);\n\n React.useEffect(() => {\n set_mounted(true);\n }, []);\n\n if (!is_open || !mounted) return null;\n\n const popover_content = (\n <div\n ref={container_ref}\n className={cn(\n \"cls_command_popover\",\n \"fixed\",\n \"w-64 min-w-[200px] max-w-[300px]\",\n \"rounded-md border bg-popover text-popover-foreground shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\"\n )}\n style={{\n position: \"fixed\",\n top: position.top,\n left: position.left,\n zIndex: 9999,\n // Fallback background for consuming apps that may use hex CSS variables\n // (Tailwind's bg-popover generates hsl(var(--popover)) which fails with hex values)\n backgroundColor: \"var(--popover, hsl(0 0% 100%))\",\n color: \"var(--popover-foreground, hsl(222.2 84% 4.9%))\",\n }}\n >\n <Command className=\"rounded-md\">\n {/* Show query hint if user is typing */}\n {query && (\n <div className=\"px-3 py-2 text-xs text-muted-foreground border-b\">\n Searching: <span className=\"font-medium\">{prefix}{query}</span>\n </div>\n )}\n <CommandList className=\"max-h-[200px]\">\n {commands.length === 0 && (\n <CommandEmpty>No commands found.</CommandEmpty>\n )}\n {Array.from(grouped_commands.entries()).map(([group_name, group_commands]) => (\n <CommandGroup\n key={group_name || \"default\"}\n heading={group_name || undefined}\n >\n {group_commands.map((cmd, idx) => {\n // Calculate flat index for this command\n let flat_idx = 0;\n for (const [g, cmds] of grouped_commands.entries()) {\n if (g === group_name) {\n flat_idx += idx;\n break;\n }\n flat_idx += cmds.length;\n }\n\n return (\n <CommandItem\n key={cmd.action}\n value={cmd.action}\n onSelect={() => on_select(cmd)}\n selected={flat_idx === selected_index}\n >\n <div className=\"flex items-center gap-2 w-full\">\n {/* Color indicator dot when prefix has custom color */}\n {prefix_color && (prefix_color.bg || prefix_color.fg) && (\n <span\n className=\"flex-shrink-0 w-2 h-2 rounded-full\"\n style={{\n backgroundColor: prefix_color.bg || prefix_color.fg,\n border: prefix_color.border ? `1px solid ${prefix_color.border}` : undefined,\n }}\n />\n )}\n {cmd.icon && (\n <span className=\"flex-shrink-0 text-muted-foreground\">\n {cmd.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">\n {prefix}\n {cmd.action_label}\n </div>\n {cmd.action_description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {cmd.action_description}\n </div>\n )}\n </div>\n </div>\n </CommandItem>\n );\n })}\n </CommandGroup>\n ))}\n </CommandList>\n </Command>\n </div>\n );\n\n // Render via portal to escape parent stacking contexts\n return createPortal(popover_content, document.body);\n};\n\nCommandPopover.displayName = \"CommandPopover\";\n\nexport default CommandPopover;\n","/**\n * HazoUiCommand - Headless Command/Mention System\n *\n * Provides TipTap extensions and UI components for implementing\n * command pills with prefix triggers (e.g., @mentions, /commands, #tags).\n *\n * This module exports:\n * - CommandNodeExtension: TipTap node for rendering command pills\n * - CommandPill: Standalone pill component\n * - CommandPopover: Dropdown menu for command selection\n * - create_command_suggestion_extension: Factory for prefix detection\n * - Types for building custom command UIs\n */\n\n// Types\nexport type {\n CommandItem,\n PrefixConfig,\n PrefixColor,\n InsertedCommand,\n CommandTextOutput,\n CommandPopoverProps,\n CommandPillProps,\n SuggestionState,\n BaseCommandInputProps,\n HazoUiTextboxProps,\n HazoUiTextareaProps,\n CommandEditContext,\n} from \"./types\";\n\n// TipTap Extensions\nexport {\n CommandNodeExtension,\n generate_command_id,\n} from \"./extensions/command_node_extension\";\n\nexport {\n create_command_suggestion_extension,\n delete_suggestion_range,\n insert_command_at_position,\n type CommandSuggestionConfig,\n} from \"./extensions/command_suggestion\";\n\n// UI Components\nexport { CommandPill } from \"./components/command_pill\";\nexport { CommandPopover } from \"./components/command_popover\";\n\nimport type { PrefixColor } from \"./types\";\n\n/**\n * Extended prefix configuration type for internal parsing\n */\ntype PrefixConfigForParsing = {\n char: string;\n commands: { action: string; action_label: string }[];\n color?: PrefixColor;\n};\n\n/**\n * Utility to parse plain text with commands into structured format\n *\n * @param text - Plain text with prefix + action format (e.g., \"Hello @user_123\")\n * @param prefixes - Prefix configurations to detect\n * @returns Parsed commands with positions\n */\nexport const parse_commands_from_text = (\n text: string,\n prefixes: PrefixConfigForParsing[]\n): { action: string; action_label: string; prefix: string; position: number; length: number; color?: PrefixColor }[] => {\n const result: {\n action: string;\n action_label: string;\n prefix: string;\n position: number;\n length: number;\n color?: PrefixColor;\n }[] = [];\n\n // Build a map of action -> label for quick lookup\n const action_to_label = new Map<string, { label: string; prefix: string; color?: PrefixColor }>();\n for (const prefix_config of prefixes) {\n for (const cmd of prefix_config.commands) {\n action_to_label.set(`${prefix_config.char}${cmd.action}`, {\n label: cmd.action_label,\n prefix: prefix_config.char,\n color: prefix_config.color,\n });\n }\n }\n\n // Build regex pattern for all prefixes\n const prefix_chars = prefixes.map((p) => escape_regex(p.char)).join(\"|\");\n // Match prefix followed by word characters (action)\n const pattern = new RegExp(`(${prefix_chars})(\\\\w+)`, \"g\");\n\n let match;\n while ((match = pattern.exec(text)) !== null) {\n const full_match = match[0];\n const prefix = match[1];\n const action = match[2];\n const lookup_key = `${prefix}${action}`;\n\n const info = action_to_label.get(lookup_key);\n if (info) {\n result.push({\n action,\n action_label: info.label,\n prefix,\n position: match.index,\n length: full_match.length,\n color: info.color,\n });\n }\n }\n\n return result;\n};\n\n/**\n * Escape special regex characters in a string\n */\nconst escape_regex = (str: string): string => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n};\n\n/**\n * Convert parsed commands to TipTap content structure\n *\n * @param text - Plain text with prefix + action format\n * @param prefixes - Prefix configurations\n * @param variant - Pill variant style\n * @returns TipTap JSON content structure\n */\nexport const text_to_tiptap_content = (\n text: string,\n prefixes: PrefixConfigForParsing[],\n variant: \"default\" | \"outline\" | \"subtle\" = \"default\"\n): Record<string, unknown> => {\n const commands = parse_commands_from_text(text, prefixes);\n\n if (commands.length === 0) {\n return {\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n content: text ? [{ type: \"text\", text }] : [],\n },\n ],\n };\n }\n\n // Sort commands by position\n commands.sort((a, b) => a.position - b.position);\n\n // Build content array with text nodes and command nodes\n const content: Record<string, unknown>[] = [];\n let last_end = 0;\n\n for (const cmd of commands) {\n // Add text before this command\n if (cmd.position > last_end) {\n content.push({\n type: \"text\",\n text: text.slice(last_end, cmd.position),\n });\n }\n\n // Add command node with optional color attributes\n content.push({\n type: \"commandNode\",\n attrs: {\n id: `cmd_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n prefix: cmd.prefix,\n action: cmd.action,\n action_label: cmd.action_label,\n variant,\n ...(cmd.color?.bg && { color_bg: cmd.color.bg }),\n ...(cmd.color?.fg && { color_fg: cmd.color.fg }),\n ...(cmd.color?.border && { color_border: cmd.color.border }),\n },\n });\n\n last_end = cmd.position + cmd.length;\n }\n\n // Add remaining text after last command\n if (last_end < text.length) {\n content.push({\n type: \"text\",\n text: text.slice(last_end),\n });\n }\n\n return {\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n content,\n },\n ],\n };\n};\n","import { Node } from '@tiptap/core'\n\n/**\n * The default document node which represents the top level node of the editor.\n * @see https://tiptap.dev/api/nodes/document\n */\nexport const Document = Node.create({\n name: 'doc',\n topNode: true,\n content: 'block+',\n\n renderMarkdown: (node, h) => {\n if (!node.content) {\n return ''\n }\n\n return h.renderChildren(node.content, '\\n\\n')\n },\n})\n","import { Document } from './document.js'\n\nexport * from './document.js'\n\nexport default Document\n","import { mergeAttributes, Node } from '@tiptap/core'\n\nexport interface ParagraphOptions {\n /**\n * The HTML attributes for a paragraph node.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n paragraph: {\n /**\n * Toggle a paragraph\n * @example editor.commands.toggleParagraph()\n */\n setParagraph: () => ReturnType\n }\n }\n}\n\n/**\n * Markdown marker for empty paragraphs to preserve blank lines.\n * Using (non-breaking space HTML entity) ensures the paragraph\n * is not collapsed by markdown parsers while remaining human-readable.\n */\nconst EMPTY_PARAGRAPH_MARKDOWN = ' '\n\n/**\n * Unicode character for non-breaking space (U+00A0).\n * Some markdown parsers may convert entities to this literal character.\n */\nconst NBSP_CHAR = '\\u00A0'\n\n/**\n * This extension allows you to create paragraphs.\n * @see https://www.tiptap.dev/api/nodes/paragraph\n */\nexport const Paragraph = Node.create<ParagraphOptions>({\n name: 'paragraph',\n\n priority: 1000,\n\n addOptions() {\n return {\n HTMLAttributes: {},\n }\n },\n\n group: 'block',\n\n content: 'inline*',\n\n parseHTML() {\n return [{ tag: 'p' }]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['p', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0]\n },\n\n parseMarkdown: (token, helpers) => {\n const tokens = token.tokens || []\n\n // Special case: if paragraph contains only a single image token,\n // unwrap it to avoid nesting block elements incorrectly\n if (tokens.length === 1 && tokens[0].type === 'image') {\n // Parse the image token directly as a block element\n return helpers.parseChildren([tokens[0]])\n }\n\n // Parse the inline tokens\n const content = helpers.parseInline(tokens)\n\n // Special case: if paragraph contains only (non-breaking space),\n // treat it as an empty paragraph to preserve blank lines\n const hasExplicitEmptyParagraphMarker =\n tokens.length === 1 &&\n tokens[0].type === 'text' &&\n (tokens[0].raw === EMPTY_PARAGRAPH_MARKDOWN ||\n tokens[0].text === EMPTY_PARAGRAPH_MARKDOWN ||\n tokens[0].raw === NBSP_CHAR ||\n tokens[0].text === NBSP_CHAR)\n\n if (\n hasExplicitEmptyParagraphMarker &&\n content.length === 1 &&\n content[0].type === 'text' &&\n (content[0].text === EMPTY_PARAGRAPH_MARKDOWN || content[0].text === NBSP_CHAR)\n ) {\n return helpers.createNode('paragraph', undefined, [])\n }\n\n // Convert 'paragraph' token to paragraph node\n return helpers.createNode('paragraph', undefined, content)\n },\n\n renderMarkdown: (node, h, ctx) => {\n if (!node) {\n return ''\n }\n\n // Normalize content: treat undefined/null as empty array\n const content = Array.isArray(node.content) ? node.content : []\n\n if (content.length === 0) {\n // Emit for the second and later empty paragraphs in a consecutive\n // run at the current nesting level. The first empty paragraph stays empty\n // so markdown spacing is preserved naturally.\n const previousContent = Array.isArray(ctx?.previousNode?.content) ? ctx.previousNode.content : []\n const previousNodeIsEmptyParagraph = ctx?.previousNode?.type === 'paragraph' && previousContent.length === 0\n\n return previousNodeIsEmptyParagraph ? EMPTY_PARAGRAPH_MARKDOWN : ''\n }\n\n return h.renderChildren(content)\n },\n\n addCommands() {\n return {\n setParagraph:\n () =>\n ({ commands }) => {\n return commands.setNode(this.name)\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-0': () => this.editor.commands.setParagraph(),\n }\n },\n})\n","import { Paragraph } from './paragraph.js'\n\nexport * from './paragraph.js'\n\nexport default Paragraph\n","import { Node } from '@tiptap/core'\n\n/**\n * This extension allows you to create text nodes.\n * @see https://www.tiptap.dev/api/nodes/text\n */\nexport const Text = Node.create({\n name: 'text',\n group: 'inline',\n\n parseMarkdown: token => {\n // Convert 'text' token to text node - text nodes are special as they store text directly\n return {\n type: 'text',\n text: token.text || '',\n }\n },\n\n renderMarkdown: node => node.text || '',\n})\n","import { Text } from './text.js'\n\nexport * from './text.js'\n\nexport default Text\n","\"use client\";\n\n/**\n * HazoUiTextbox - Single-line Input with Command Support\n *\n * A TipTap-based single-line text input that supports prefix-triggered\n * command pills (e.g., @mentions, /commands, #tags).\n */\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport Document from \"@tiptap/extension-document\";\nimport Paragraph from \"@tiptap/extension-paragraph\";\nimport Text from \"@tiptap/extension-text\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n CommandNodeExtension,\n create_command_suggestion_extension,\n insert_command_at_position,\n text_to_tiptap_content,\n} from \"../hazo_ui_command\";\nimport { CommandPopover } from \"../hazo_ui_command/components/command_popover\";\nimport type {\n HazoUiTextboxProps,\n CommandTextOutput,\n SuggestionState,\n CommandItem,\n InsertedCommand,\n CommandEditContext,\n} from \"../hazo_ui_command/types\";\n\n// Re-export types\nexport type { HazoUiTextboxProps, CommandTextOutput } from \"./types\";\n\n/**\n * Custom Document that only allows a single paragraph (single-line)\n */\nconst SingleLineDocument = Document.extend({\n content: \"paragraph\",\n});\n\n/**\n * Extract output from editor\n */\nconst get_editor_output = (\n editor: ReturnType<typeof useEditor>\n): CommandTextOutput => {\n if (!editor) {\n return { plain_text: \"\", display_text: \"\", commands: [] };\n }\n\n const plain_text = editor.getText();\n const commands: InsertedCommand[] = [];\n let display_text = \"\";\n let position = 0;\n\n // Walk through the document to build output\n editor.state.doc.descendants((node, _pos) => {\n if (node.type.name === \"text\") {\n display_text += node.text || \"\";\n position += (node.text || \"\").length;\n } else if (node.type.name === \"commandNode\") {\n const { id, prefix, action, action_label } = node.attrs;\n const cmd_plain_text = `${prefix}${action}`;\n const cmd_display_text = `${prefix}${action_label}`;\n\n commands.push({\n id,\n prefix,\n action,\n action_label,\n position,\n length: cmd_plain_text.length,\n });\n\n display_text += cmd_display_text;\n position += cmd_plain_text.length;\n }\n });\n\n return { plain_text, display_text, commands };\n};\n\n/**\n * HazoUiTextbox Component\n */\nexport const HazoUiTextbox: React.FC<HazoUiTextboxProps> = ({\n value,\n default_value,\n prefixes,\n placeholder = \"Type here...\",\n disabled = false,\n className,\n pill_variant = \"default\",\n instance_id: provided_instance_id,\n on_change,\n on_submit,\n on_command_insert,\n on_command_change,\n on_command_remove,\n}) => {\n // Generate unique instance ID for TipTap plugin keys\n // This prevents \"Adding different instances of a keyed plugin (suggestion$)\" errors\n const generated_instance_id = React.useId();\n const instance_id = provided_instance_id || generated_instance_id;\n\n // Suggestion state for popover\n const [suggestion_state, set_suggestion_state] =\n React.useState<SuggestionState | null>(null);\n const [selected_index, set_selected_index] = React.useState(0);\n const [popover_position, set_popover_position] = React.useState<{ top: number; left: number }>({ top: 0, left: 0 });\n\n // Edit context for pill editing\n const [edit_context, set_edit_context] = React.useState<CommandEditContext | null>(null);\n const [edit_selected_index, set_edit_selected_index] = React.useState(0);\n\n // Refs for tracking state\n const is_controlled = value !== undefined;\n const editor_container_ref = React.useRef<HTMLDivElement>(null);\n const edit_popover_ref = React.useRef<HTMLDivElement>(null);\n\n // Track if we're in a browser environment for SSR compatibility\n const [mounted, set_mounted] = React.useState(false);\n\n React.useEffect(() => {\n set_mounted(true);\n }, []);\n\n // Create suggestion extensions with unique plugin keys per instance\n const suggestion_extensions = React.useMemo(() => {\n return create_command_suggestion_extension({\n prefixes,\n instance_id,\n on_suggestion_change: (state) => {\n set_suggestion_state(state);\n set_selected_index(0);\n },\n on_insert_command: (_command, _prefix, _range) => {\n // This is handled by the popover selection\n },\n });\n }, [prefixes, instance_id]);\n\n // Initialize editor\n const editor = useEditor({\n extensions: [\n SingleLineDocument,\n Paragraph,\n Text,\n Placeholder.configure({\n placeholder,\n }),\n CommandNodeExtension.configure({}),\n ...suggestion_extensions,\n ],\n content: is_controlled\n ? text_to_tiptap_content(value || \"\", prefixes, pill_variant)\n : text_to_tiptap_content(default_value || \"\", prefixes, pill_variant),\n editable: !disabled,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: cn(\n \"cls_textbox_editor\",\n \"w-full outline-none\",\n \"whitespace-nowrap overflow-x-auto\"\n ),\n },\n handleKeyDown: (_view, event) => {\n // Prevent Enter from creating new lines (single-line input)\n if (event.key === \"Enter\" && !suggestion_state?.is_active) {\n event.preventDefault();\n if (on_submit && editor) {\n on_submit(get_editor_output(editor));\n }\n return true;\n }\n return false;\n },\n },\n onUpdate: ({ editor }) => {\n if (on_change) {\n on_change(get_editor_output(editor));\n }\n },\n });\n\n // Update popover position when suggestion state changes\n // Now uses viewport coordinates since popover is rendered via portal\n React.useEffect(() => {\n if (suggestion_state?.is_active && editor) {\n // Use requestAnimationFrame to ensure DOM is updated\n requestAnimationFrame(() => {\n // Get cursor position using TipTap's view.coordsAtPos\n const { from } = suggestion_state.range;\n try {\n const coords = editor.view.coordsAtPos(from);\n if (coords) {\n // Use viewport coordinates directly for fixed positioning\n set_popover_position({\n top: coords.bottom + 4,\n left: coords.left,\n });\n }\n } catch {\n // Fallback to client_rect if coordsAtPos fails\n const rect = suggestion_state.client_rect?.();\n if (rect) {\n set_popover_position({\n top: rect.bottom + 4,\n left: rect.left,\n });\n }\n }\n });\n }\n }, [suggestion_state, editor]);\n\n // Sync controlled value\n React.useEffect(() => {\n if (is_controlled && editor && !editor.isFocused) {\n const current_text = editor.getText();\n if (value !== current_text) {\n const content = text_to_tiptap_content(value || \"\", prefixes, pill_variant);\n editor.commands.setContent(content, { emitUpdate: false });\n }\n }\n }, [value, editor, is_controlled, prefixes, pill_variant]);\n\n // Update editable state\n React.useEffect(() => {\n if (editor) {\n editor.setEditable(!disabled);\n }\n }, [disabled, editor]);\n\n // Handle command selection from popover\n const handle_command_select = React.useCallback(\n (command: CommandItem) => {\n if (!editor || !suggestion_state) return;\n\n // Look up the prefix config to get the color\n const prefix_config = prefixes.find((p) => p.char === suggestion_state.prefix);\n const prefix_color = prefix_config?.color;\n\n insert_command_at_position(\n editor,\n command,\n suggestion_state.prefix,\n suggestion_state.range,\n pill_variant,\n prefix_color\n );\n\n if (on_command_insert) {\n on_command_insert(command, suggestion_state.prefix);\n }\n\n set_suggestion_state(null);\n },\n [editor, suggestion_state, pill_variant, on_command_insert, prefixes]\n );\n\n // Handle popover close\n const handle_popover_close = React.useCallback(() => {\n set_suggestion_state(null);\n editor?.commands.focus();\n }, [editor]);\n\n // Handle edit popover close\n const handle_edit_close = React.useCallback(() => {\n set_edit_context(null);\n editor?.commands.focus();\n }, [editor]);\n\n // Handle command update from edit popover\n const handle_command_update = React.useCallback(\n (new_command: CommandItem) => {\n if (!editor || !edit_context) return;\n\n const old_command = edit_context.command;\n\n // Update the node attributes\n editor.commands.updateCommand(old_command.id, {\n action: new_command.action,\n action_label: new_command.action_label,\n });\n\n // Call the change callback if provided\n if (on_command_change) {\n on_command_change(old_command, new_command);\n }\n\n set_edit_context(null);\n editor.commands.focus();\n },\n [editor, edit_context, on_command_change]\n );\n\n // Handle command removal from edit popover\n const handle_command_remove = React.useCallback(() => {\n if (!editor || !edit_context) return;\n\n const command = edit_context.command;\n\n // Find and delete the node\n editor.state.doc.descendants((node, pos) => {\n if (node.type.name === \"commandNode\" && node.attrs.id === command.id) {\n editor.chain().focus().deleteRange({ from: pos, to: pos + node.nodeSize }).run();\n return false;\n }\n });\n\n // Call the remove callback if provided\n if (on_command_remove) {\n on_command_remove(command);\n }\n\n set_edit_context(null);\n }, [editor, edit_context, on_command_remove]);\n\n // Filter commands based on query\n const filtered_commands = React.useMemo(() => {\n if (!suggestion_state) return [];\n\n const query = suggestion_state.query.toLowerCase();\n if (!query) return suggestion_state.commands;\n\n return suggestion_state.commands.filter(\n (cmd) =>\n cmd.action_label.toLowerCase().includes(query) ||\n cmd.action.toLowerCase().includes(query) ||\n cmd.action_description?.toLowerCase().includes(query)\n );\n }, [suggestion_state]);\n\n // Handle keyboard navigation in popover\n React.useEffect(() => {\n if (!suggestion_state?.is_active) return;\n\n const handle_keydown = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n set_selected_index((prev) =>\n Math.min(prev + 1, filtered_commands.length - 1)\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n set_selected_index((prev) => Math.max(prev - 1, 0));\n break;\n case \"Enter\":\n e.preventDefault();\n if (filtered_commands[selected_index]) {\n handle_command_select(filtered_commands[selected_index]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n handle_popover_close();\n break;\n }\n };\n\n window.addEventListener(\"keydown\", handle_keydown);\n return () => window.removeEventListener(\"keydown\", handle_keydown);\n }, [\n suggestion_state?.is_active,\n filtered_commands,\n selected_index,\n handle_command_select,\n handle_popover_close,\n ]);\n\n // Close edit popover on click outside\n React.useEffect(() => {\n if (!edit_context) return;\n\n const handle_click_outside = (e: MouseEvent) => {\n if (\n edit_popover_ref.current &&\n !edit_popover_ref.current.contains(e.target as Node)\n ) {\n set_edit_context(null);\n }\n };\n\n // Delay to avoid immediate close from the pill click\n const timeout = setTimeout(() => {\n document.addEventListener(\"mousedown\", handle_click_outside);\n }, 100);\n\n return () => {\n clearTimeout(timeout);\n document.removeEventListener(\"mousedown\", handle_click_outside);\n };\n }, [edit_context]);\n\n // Get commands for edit popover\n const edit_commands = React.useMemo(() => {\n if (!edit_context) return [];\n const prefix_config = prefixes.find((p) => p.char === edit_context.command.prefix);\n return prefix_config?.commands || [];\n }, [edit_context, prefixes]);\n\n // Handle keyboard navigation in edit popover\n React.useEffect(() => {\n if (!edit_context) return;\n\n const handle_keydown = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n set_edit_selected_index((prev) =>\n Math.min(prev + 1, edit_commands.length)\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n set_edit_selected_index((prev) => Math.max(prev - 1, 0));\n break;\n case \"Enter\":\n e.preventDefault();\n // Last item is \"Remove\" option\n if (edit_selected_index === edit_commands.length) {\n handle_command_remove();\n } else if (edit_commands[edit_selected_index]) {\n handle_command_update(edit_commands[edit_selected_index]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n handle_edit_close();\n break;\n }\n };\n\n window.addEventListener(\"keydown\", handle_keydown);\n return () => window.removeEventListener(\"keydown\", handle_keydown);\n }, [\n edit_context,\n edit_commands,\n edit_selected_index,\n handle_command_update,\n handle_command_remove,\n handle_edit_close,\n ]);\n\n // Listen for pill click events (for editing)\n React.useEffect(() => {\n const handle_pill_click = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n const { id, prefix, action, action_label, node_pos } = detail;\n\n // Find the pill element to get its position\n if (editor) {\n // Get the position of the clicked pill node\n try {\n const coords = editor.view.coordsAtPos(node_pos);\n if (coords) {\n // Find the current command index in the prefix commands\n const prefix_config = prefixes.find((p) => p.char === prefix);\n const current_index = prefix_config?.commands.findIndex(\n (cmd) => cmd.action === action\n ) ?? 0;\n\n // Use viewport coordinates directly for fixed positioning\n set_edit_context({\n command: {\n id,\n prefix,\n action,\n action_label,\n position: node_pos,\n length: 0,\n },\n node_pos,\n rect: new DOMRect(\n coords.left,\n coords.bottom + 4,\n 0,\n 0\n ),\n });\n set_edit_selected_index(Math.max(0, current_index));\n }\n } catch {\n // Ignore positioning errors\n }\n }\n };\n\n document.addEventListener(\"command-pill-click\", handle_pill_click);\n return () =>\n document.removeEventListener(\"command-pill-click\", handle_pill_click);\n }, [editor, prefixes]);\n\n return (\n <div\n ref={editor_container_ref}\n className={cn(\n \"cls_hazo_ui_textbox\",\n \"relative flex h-10 w-full rounded-md border border-input bg-background px-3 py-2\",\n \"text-sm ring-offset-background\",\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n >\n <EditorContent\n editor={editor}\n className={cn(\n \"cls_textbox_content\",\n \"flex-1 min-w-0\",\n \"[&_.ProseMirror]:outline-none\",\n \"[&_.ProseMirror_p]:m-0\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:text-muted-foreground\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:pointer-events-none\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:float-left\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:h-0\"\n )}\n />\n\n {/* Command Popover */}\n {suggestion_state?.is_active && (\n <CommandPopover\n is_open={true}\n commands={filtered_commands}\n prefix={suggestion_state.prefix}\n query={suggestion_state.query}\n selected_index={selected_index}\n position={popover_position}\n on_query_change={() => {}}\n on_select={handle_command_select}\n on_close={handle_popover_close}\n on_selection_change={set_selected_index}\n prefix_color={prefixes.find((p) => p.char === suggestion_state.prefix)?.color}\n />\n )}\n\n {/* Edit Popover - rendered via portal to escape stacking contexts */}\n {edit_context && mounted && createPortal(\n <div\n ref={edit_popover_ref}\n className={cn(\n \"cls_edit_popover\",\n \"fixed\",\n \"w-64 min-w-[200px] max-w-[300px]\",\n \"rounded-md border bg-popover text-popover-foreground shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\"\n )}\n style={{\n position: \"fixed\",\n top: edit_context.rect.y,\n left: edit_context.rect.x,\n zIndex: 9999,\n }}\n >\n <div className=\"py-1\">\n <div className=\"px-3 py-2 text-xs text-muted-foreground border-b\">\n Change command\n </div>\n <div className=\"max-h-[200px] overflow-y-auto\">\n {edit_commands.map((cmd, idx) => (\n <div\n key={cmd.action}\n className={cn(\n \"px-3 py-2 cursor-pointer flex items-center gap-2\",\n \"hover:bg-accent\",\n idx === edit_selected_index && \"bg-accent\",\n cmd.action === edit_context.command.action && \"font-medium\"\n )}\n onClick={() => handle_command_update(cmd)}\n >\n {cmd.icon && (\n <span className=\"flex-shrink-0 text-muted-foreground\">\n {cmd.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"truncate\">\n {edit_context.command.prefix}\n {cmd.action_label}\n </div>\n {cmd.action_description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {cmd.action_description}\n </div>\n )}\n </div>\n {cmd.action === edit_context.command.action && (\n <span className=\"text-xs text-muted-foreground\">current</span>\n )}\n </div>\n ))}\n {/* Remove option */}\n <div\n className={cn(\n \"px-3 py-2 cursor-pointer flex items-center gap-2 text-destructive border-t\",\n \"hover:bg-destructive/10\",\n edit_selected_index === edit_commands.length && \"bg-destructive/10\"\n )}\n onClick={handle_command_remove}\n >\n <span>Remove</span>\n </div>\n </div>\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n};\n\nHazoUiTextbox.displayName = \"HazoUiTextbox\";\n","import { mergeAttributes, Node } from '@tiptap/core'\n\nexport interface HardBreakOptions {\n /**\n * Controls if marks should be kept after being split by a hard break.\n * @default true\n * @example false\n */\n keepMarks: boolean\n\n /**\n * HTML attributes to add to the hard break element.\n * @default {}\n * @example { class: 'foo' }\n */\n HTMLAttributes: Record<string, any>\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n hardBreak: {\n /**\n * Add a hard break\n * @example editor.commands.setHardBreak()\n */\n setHardBreak: () => ReturnType\n }\n }\n}\n\n/**\n * This extension allows you to insert hard breaks.\n * @see https://www.tiptap.dev/api/nodes/hard-break\n */\nexport const HardBreak = Node.create<HardBreakOptions>({\n name: 'hardBreak',\n\n markdownTokenName: 'br',\n\n addOptions() {\n return {\n keepMarks: true,\n HTMLAttributes: {},\n }\n },\n\n inline: true,\n\n group: 'inline',\n\n selectable: false,\n\n linebreakReplacement: true,\n\n parseHTML() {\n return [{ tag: 'br' }]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['br', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)]\n },\n\n renderText() {\n return '\\n'\n },\n\n renderMarkdown: () => ` \\n`,\n\n parseMarkdown: () => {\n return {\n type: 'hardBreak',\n }\n },\n\n addCommands() {\n return {\n setHardBreak:\n () =>\n ({ commands, chain, state, editor }) => {\n return commands.first([\n () => commands.exitCode(),\n () =>\n commands.command(() => {\n const { selection, storedMarks } = state\n\n if (selection.$from.parent.type.spec.isolating) {\n return false\n }\n\n const { keepMarks } = this.options\n const { splittableMarks } = editor.extensionManager\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks())\n\n return chain()\n .insertContent({ type: this.name })\n .command(({ tr, dispatch }) => {\n if (dispatch && marks && keepMarks) {\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name))\n\n tr.ensureMarks(filteredMarks)\n }\n\n return true\n })\n .run()\n }),\n ])\n },\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Enter': () => this.editor.commands.setHardBreak(),\n 'Shift-Enter': () => this.editor.commands.setHardBreak(),\n }\n },\n})\n","import { HardBreak } from './hard-break.js'\n\nexport * from './hard-break.js'\n\nexport default HardBreak\n","\"use client\";\n\n/**\n * HazoUiTextarea - Multi-line Input with Command Support\n *\n * A TipTap-based multi-line text input that supports prefix-triggered\n * command pills (e.g., @mentions, /commands, #tags).\n */\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport Document from \"@tiptap/extension-document\";\nimport Paragraph from \"@tiptap/extension-paragraph\";\nimport Text from \"@tiptap/extension-text\";\nimport HardBreak from \"@tiptap/extension-hard-break\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n CommandNodeExtension,\n create_command_suggestion_extension,\n insert_command_at_position,\n text_to_tiptap_content,\n} from \"../hazo_ui_command\";\nimport { CommandPopover } from \"../hazo_ui_command/components/command_popover\";\nimport type {\n HazoUiTextareaProps,\n CommandTextOutput,\n SuggestionState,\n CommandItem,\n InsertedCommand,\n CommandEditContext,\n} from \"../hazo_ui_command/types\";\n\n// Re-export types\nexport type { HazoUiTextareaProps, CommandTextOutput } from \"./types\";\n\n/**\n * Extract output from editor\n */\nconst get_editor_output = (\n editor: ReturnType<typeof useEditor>\n): CommandTextOutput => {\n if (!editor) {\n return { plain_text: \"\", display_text: \"\", commands: [] };\n }\n\n const plain_text = editor.getText();\n const commands: InsertedCommand[] = [];\n let display_text = \"\";\n let position = 0;\n\n // Walk through the document to build output\n editor.state.doc.descendants((node, _pos) => {\n if (node.type.name === \"text\") {\n display_text += node.text || \"\";\n position += (node.text || \"\").length;\n } else if (node.type.name === \"commandNode\") {\n const { id, prefix, action, action_label } = node.attrs;\n const cmd_plain_text = `${prefix}${action}`;\n const cmd_display_text = `${prefix}${action_label}`;\n\n commands.push({\n id,\n prefix,\n action,\n action_label,\n position,\n length: cmd_plain_text.length,\n });\n\n display_text += cmd_display_text;\n position += cmd_plain_text.length;\n } else if (node.type.name === \"hardBreak\") {\n display_text += \"\\n\";\n position += 1;\n }\n });\n\n return { plain_text, display_text, commands };\n};\n\n/**\n * Convert multi-line text to TipTap content\n */\nconst multiline_text_to_tiptap_content = (\n text: string,\n prefixes: { char: string; commands: { action: string; action_label: string }[] }[],\n variant: \"default\" | \"outline\" | \"subtle\" = \"default\"\n): Record<string, unknown> => {\n // Split by newlines and create multiple paragraphs\n const lines = text.split(\"\\n\");\n const paragraphs: Record<string, unknown>[] = [];\n\n for (const line of lines) {\n const line_content = text_to_tiptap_content(line, prefixes, variant);\n const para = (line_content as { content: Record<string, unknown>[] }).content?.[0];\n if (para) {\n paragraphs.push(para);\n } else {\n paragraphs.push({ type: \"paragraph\", content: [] });\n }\n }\n\n return {\n type: \"doc\",\n content: paragraphs.length > 0 ? paragraphs : [{ type: \"paragraph\", content: [] }],\n };\n};\n\n/**\n * HazoUiTextarea Component\n */\nexport const HazoUiTextarea: React.FC<HazoUiTextareaProps> = ({\n value,\n default_value,\n prefixes,\n placeholder = \"Type here...\",\n disabled = false,\n className,\n pill_variant = \"default\",\n min_height = \"80px\",\n max_height = \"200px\",\n rows,\n instance_id: provided_instance_id,\n on_change,\n on_submit,\n on_command_insert,\n on_command_change,\n on_command_remove,\n}) => {\n // Generate unique instance ID for TipTap plugin keys\n // This prevents \"Adding different instances of a keyed plugin (suggestion$)\" errors\n const generated_instance_id = React.useId();\n const instance_id = provided_instance_id || generated_instance_id;\n // Suggestion state for popover\n const [suggestion_state, set_suggestion_state] =\n React.useState<SuggestionState | null>(null);\n const [selected_index, set_selected_index] = React.useState(0);\n const [popover_position, set_popover_position] = React.useState<{ top: number; left: number }>({ top: 0, left: 0 });\n\n // Edit context for pill editing\n const [edit_context, set_edit_context] = React.useState<CommandEditContext | null>(null);\n const [edit_selected_index, set_edit_selected_index] = React.useState(0);\n\n // Refs for tracking state\n const is_controlled = value !== undefined;\n const editor_container_ref = React.useRef<HTMLDivElement>(null);\n const edit_popover_ref = React.useRef<HTMLDivElement>(null);\n\n // Track if we're in a browser environment for SSR compatibility\n const [mounted, set_mounted] = React.useState(false);\n\n React.useEffect(() => {\n set_mounted(true);\n }, []);\n\n // Calculate height from rows if provided\n const calculated_min_height = rows ? `${rows * 1.5}em` : min_height;\n\n // Create suggestion extensions with unique plugin keys per instance\n const suggestion_extensions = React.useMemo(() => {\n return create_command_suggestion_extension({\n prefixes,\n instance_id,\n on_suggestion_change: (state) => {\n set_suggestion_state(state);\n set_selected_index(0);\n },\n on_insert_command: (_command, _prefix, _range) => {\n // This is handled by the popover selection\n },\n });\n }, [prefixes, instance_id]);\n\n // Initialize editor\n const editor = useEditor({\n extensions: [\n Document,\n Paragraph,\n Text,\n HardBreak,\n Placeholder.configure({\n placeholder,\n }),\n CommandNodeExtension.configure({}),\n ...suggestion_extensions,\n ],\n content: is_controlled\n ? multiline_text_to_tiptap_content(value || \"\", prefixes, pill_variant)\n : multiline_text_to_tiptap_content(default_value || \"\", prefixes, pill_variant),\n editable: !disabled,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: cn(\"cls_textarea_editor\", \"w-full outline-none\"),\n style: `min-height: ${calculated_min_height}; max-height: ${max_height}`,\n },\n handleKeyDown: (_view, event) => {\n // Cmd/Ctrl + Enter to submit\n if (\n event.key === \"Enter\" &&\n (event.metaKey || event.ctrlKey) &&\n !suggestion_state?.is_active\n ) {\n event.preventDefault();\n if (on_submit && editor) {\n on_submit(get_editor_output(editor));\n }\n return true;\n }\n return false;\n },\n },\n onUpdate: ({ editor }) => {\n if (on_change) {\n on_change(get_editor_output(editor));\n }\n },\n });\n\n // Update popover position when suggestion state changes\n // Now uses viewport coordinates since popover is rendered via portal\n React.useEffect(() => {\n if (suggestion_state?.is_active && editor) {\n // Use requestAnimationFrame to ensure DOM is updated\n requestAnimationFrame(() => {\n // Get cursor position using TipTap's view.coordsAtPos\n const { from } = suggestion_state.range;\n try {\n const coords = editor.view.coordsAtPos(from);\n if (coords) {\n // Use viewport coordinates directly for fixed positioning\n set_popover_position({\n top: coords.bottom + 4,\n left: coords.left,\n });\n }\n } catch {\n // Fallback to client_rect if coordsAtPos fails\n const rect = suggestion_state.client_rect?.();\n if (rect) {\n set_popover_position({\n top: rect.bottom + 4,\n left: rect.left,\n });\n }\n }\n });\n }\n }, [suggestion_state, editor]);\n\n // Sync controlled value\n React.useEffect(() => {\n if (is_controlled && editor && !editor.isFocused) {\n const current_text = editor.getText();\n if (value !== current_text) {\n const content = multiline_text_to_tiptap_content(\n value || \"\",\n prefixes,\n pill_variant\n );\n editor.commands.setContent(content, { emitUpdate: false });\n }\n }\n }, [value, editor, is_controlled, prefixes, pill_variant]);\n\n // Update editable state\n React.useEffect(() => {\n if (editor) {\n editor.setEditable(!disabled);\n }\n }, [disabled, editor]);\n\n // Handle command selection from popover\n const handle_command_select = React.useCallback(\n (command: CommandItem) => {\n if (!editor || !suggestion_state) return;\n\n // Look up the prefix config to get the color\n const prefix_config = prefixes.find((p) => p.char === suggestion_state.prefix);\n const prefix_color = prefix_config?.color;\n\n insert_command_at_position(\n editor,\n command,\n suggestion_state.prefix,\n suggestion_state.range,\n pill_variant,\n prefix_color\n );\n\n if (on_command_insert) {\n on_command_insert(command, suggestion_state.prefix);\n }\n\n set_suggestion_state(null);\n },\n [editor, suggestion_state, pill_variant, on_command_insert, prefixes]\n );\n\n // Handle popover close\n const handle_popover_close = React.useCallback(() => {\n set_suggestion_state(null);\n editor?.commands.focus();\n }, [editor]);\n\n // Handle edit popover close\n const handle_edit_close = React.useCallback(() => {\n set_edit_context(null);\n editor?.commands.focus();\n }, [editor]);\n\n // Handle command update from edit popover\n const handle_command_update = React.useCallback(\n (new_command: CommandItem) => {\n if (!editor || !edit_context) return;\n\n const old_command = edit_context.command;\n\n // Update the node attributes\n editor.commands.updateCommand(old_command.id, {\n action: new_command.action,\n action_label: new_command.action_label,\n });\n\n // Call the change callback if provided\n if (on_command_change) {\n on_command_change(old_command, new_command);\n }\n\n set_edit_context(null);\n editor.commands.focus();\n },\n [editor, edit_context, on_command_change]\n );\n\n // Handle command removal from edit popover\n const handle_command_remove = React.useCallback(() => {\n if (!editor || !edit_context) return;\n\n const command = edit_context.command;\n\n // Find and delete the node\n editor.state.doc.descendants((node, pos) => {\n if (node.type.name === \"commandNode\" && node.attrs.id === command.id) {\n editor.chain().focus().deleteRange({ from: pos, to: pos + node.nodeSize }).run();\n return false;\n }\n });\n\n // Call the remove callback if provided\n if (on_command_remove) {\n on_command_remove(command);\n }\n\n set_edit_context(null);\n }, [editor, edit_context, on_command_remove]);\n\n // Filter commands based on query\n const filtered_commands = React.useMemo(() => {\n if (!suggestion_state) return [];\n\n const query = suggestion_state.query.toLowerCase();\n if (!query) return suggestion_state.commands;\n\n return suggestion_state.commands.filter(\n (cmd) =>\n cmd.action_label.toLowerCase().includes(query) ||\n cmd.action.toLowerCase().includes(query) ||\n cmd.action_description?.toLowerCase().includes(query)\n );\n }, [suggestion_state]);\n\n // Handle keyboard navigation in popover\n React.useEffect(() => {\n if (!suggestion_state?.is_active) return;\n\n const handle_keydown = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n set_selected_index((prev) =>\n Math.min(prev + 1, filtered_commands.length - 1)\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n set_selected_index((prev) => Math.max(prev - 1, 0));\n break;\n case \"Enter\":\n e.preventDefault();\n if (filtered_commands[selected_index]) {\n handle_command_select(filtered_commands[selected_index]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n handle_popover_close();\n break;\n }\n };\n\n window.addEventListener(\"keydown\", handle_keydown);\n return () => window.removeEventListener(\"keydown\", handle_keydown);\n }, [\n suggestion_state?.is_active,\n filtered_commands,\n selected_index,\n handle_command_select,\n handle_popover_close,\n ]);\n\n // Close edit popover on click outside\n React.useEffect(() => {\n if (!edit_context) return;\n\n const handle_click_outside = (e: MouseEvent) => {\n if (\n edit_popover_ref.current &&\n !edit_popover_ref.current.contains(e.target as Node)\n ) {\n set_edit_context(null);\n }\n };\n\n // Delay to avoid immediate close from the pill click\n const timeout = setTimeout(() => {\n document.addEventListener(\"mousedown\", handle_click_outside);\n }, 100);\n\n return () => {\n clearTimeout(timeout);\n document.removeEventListener(\"mousedown\", handle_click_outside);\n };\n }, [edit_context]);\n\n // Get commands for edit popover\n const edit_commands = React.useMemo(() => {\n if (!edit_context) return [];\n const prefix_config = prefixes.find((p) => p.char === edit_context.command.prefix);\n return prefix_config?.commands || [];\n }, [edit_context, prefixes]);\n\n // Handle keyboard navigation in edit popover\n React.useEffect(() => {\n if (!edit_context) return;\n\n const handle_keydown = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n set_edit_selected_index((prev) =>\n Math.min(prev + 1, edit_commands.length)\n );\n break;\n case \"ArrowUp\":\n e.preventDefault();\n set_edit_selected_index((prev) => Math.max(prev - 1, 0));\n break;\n case \"Enter\":\n e.preventDefault();\n // Last item is \"Remove\" option\n if (edit_selected_index === edit_commands.length) {\n handle_command_remove();\n } else if (edit_commands[edit_selected_index]) {\n handle_command_update(edit_commands[edit_selected_index]);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n handle_edit_close();\n break;\n }\n };\n\n window.addEventListener(\"keydown\", handle_keydown);\n return () => window.removeEventListener(\"keydown\", handle_keydown);\n }, [\n edit_context,\n edit_commands,\n edit_selected_index,\n handle_command_update,\n handle_command_remove,\n handle_edit_close,\n ]);\n\n // Listen for pill click events (for editing)\n React.useEffect(() => {\n const handle_pill_click = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n const { id, prefix, action, action_label, node_pos } = detail;\n\n // Find the pill element to get its position\n if (editor) {\n // Get the position of the clicked pill node\n try {\n const coords = editor.view.coordsAtPos(node_pos);\n if (coords) {\n // Find the current command index in the prefix commands\n const prefix_config = prefixes.find((p) => p.char === prefix);\n const current_index = prefix_config?.commands.findIndex(\n (cmd) => cmd.action === action\n ) ?? 0;\n\n // Use viewport coordinates directly for fixed positioning\n set_edit_context({\n command: {\n id,\n prefix,\n action,\n action_label,\n position: node_pos,\n length: 0,\n },\n node_pos,\n rect: new DOMRect(\n coords.left,\n coords.bottom + 4,\n 0,\n 0\n ),\n });\n set_edit_selected_index(Math.max(0, current_index));\n }\n } catch {\n // Ignore positioning errors\n }\n }\n };\n\n document.addEventListener(\"command-pill-click\", handle_pill_click);\n return () =>\n document.removeEventListener(\"command-pill-click\", handle_pill_click);\n }, [editor, prefixes]);\n\n return (\n <div\n ref={editor_container_ref}\n className={cn(\n \"cls_hazo_ui_textarea\",\n \"relative flex w-full rounded-md border border-input bg-background px-3 py-2\",\n \"text-sm ring-offset-background\",\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n style={{\n minHeight: calculated_min_height,\n maxHeight: max_height,\n }}\n >\n <EditorContent\n editor={editor}\n className={cn(\n \"cls_textarea_content\",\n \"flex-1 min-w-0 overflow-y-auto\",\n \"[&_.ProseMirror]:outline-none\",\n \"[&_.ProseMirror_p]:m-0 [&_.ProseMirror_p]:mb-1\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:text-muted-foreground\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:pointer-events-none\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:float-left\",\n \"[&_.ProseMirror_.is-editor-empty:first-child::before]:h-0\"\n )}\n />\n\n {/* Command Popover */}\n {suggestion_state?.is_active && (\n <CommandPopover\n is_open={true}\n commands={filtered_commands}\n prefix={suggestion_state.prefix}\n query={suggestion_state.query}\n selected_index={selected_index}\n position={popover_position}\n on_query_change={() => {}}\n on_select={handle_command_select}\n on_close={handle_popover_close}\n on_selection_change={set_selected_index}\n prefix_color={prefixes.find((p) => p.char === suggestion_state.prefix)?.color}\n />\n )}\n\n {/* Edit Popover - rendered via portal to escape stacking contexts */}\n {edit_context && mounted && createPortal(\n <div\n ref={edit_popover_ref}\n className={cn(\n \"cls_edit_popover\",\n \"fixed\",\n \"w-64 min-w-[200px] max-w-[300px]\",\n \"rounded-md border bg-popover text-popover-foreground shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\"\n )}\n style={{\n position: \"fixed\",\n top: edit_context.rect.y,\n left: edit_context.rect.x,\n zIndex: 9999,\n // Fallback background for consuming apps that may use hex CSS variables\n backgroundColor: \"var(--popover, #ffffff)\",\n color: \"var(--popover-foreground, #0f172a)\",\n }}\n >\n <div className=\"py-1\">\n <div className=\"px-3 py-2 text-xs text-muted-foreground border-b\">\n Change command\n </div>\n <div className=\"max-h-[200px] overflow-y-auto\">\n {edit_commands.map((cmd, idx) => (\n <div\n key={cmd.action}\n className={cn(\n \"px-3 py-2 cursor-pointer flex items-center gap-2\",\n \"hover:bg-accent\",\n idx === edit_selected_index && \"bg-accent\",\n cmd.action === edit_context.command.action && \"font-medium\"\n )}\n style={{\n // Inherit background from parent, use accent color when selected\n backgroundColor: idx === edit_selected_index\n ? \"var(--accent, #f1f5f9)\"\n : \"inherit\",\n }}\n onClick={() => handle_command_update(cmd)}\n >\n {cmd.icon && (\n <span className=\"flex-shrink-0 text-muted-foreground\">\n {cmd.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"truncate\">\n {edit_context.command.prefix}\n {cmd.action_label}\n </div>\n {cmd.action_description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {cmd.action_description}\n </div>\n )}\n </div>\n {cmd.action === edit_context.command.action && (\n <span className=\"text-xs text-muted-foreground\">current</span>\n )}\n </div>\n ))}\n {/* Remove option */}\n <div\n className={cn(\n \"px-3 py-2 cursor-pointer flex items-center gap-2 text-destructive border-t\",\n \"hover:bg-destructive/10\",\n edit_selected_index === edit_commands.length && \"bg-destructive/10\"\n )}\n style={{\n // Inherit background from parent, use light destructive color when selected\n backgroundColor: edit_selected_index === edit_commands.length\n ? \"rgba(239, 68, 68, 0.1)\"\n : \"inherit\",\n }}\n onClick={handle_command_remove}\n >\n <span>Remove</span>\n </div>\n </div>\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n};\n\nHazoUiTextarea.displayName = \"HazoUiTextarea\";\n","/**\n * animations.ts\n *\n * Purpose: Shared animation preset configurations for dialog components.\n * Used by HazoUiDialog and HazoUiConfirmDialog.\n */\n\n// Animation preset types\nexport type AnimationPreset = 'zoom' | 'slide' | 'fade' | 'bounce' | 'scale-up' | 'flip' | 'slide-left' | 'slide-right' | 'slide-top' | 'none';\n\n// Animation preset configurations\nexport const ANIMATION_PRESETS: Record<AnimationPreset, { open: string; close: string }> = {\n zoom: {\n open: \"animate-dialog-zoom\",\n close: \"animate-dialog-zoom\"\n },\n slide: {\n open: \"animate-dialog-slide-bottom\",\n close: \"animate-dialog-slide-bottom\"\n },\n fade: {\n open: \"animate-dialog-fade\",\n close: \"animate-dialog-fade\"\n },\n bounce: {\n open: \"animate-dialog-bounce\",\n close: \"animate-dialog-bounce\"\n },\n \"scale-up\": {\n open: \"animate-dialog-scale\",\n close: \"animate-dialog-scale\"\n },\n flip: {\n open: \"animate-dialog-flip\",\n close: \"animate-dialog-flip\"\n },\n \"slide-left\": {\n open: \"animate-dialog-slide-left\",\n close: \"animate-dialog-slide-left\"\n },\n \"slide-right\": {\n open: \"animate-dialog-slide-right\",\n close: \"animate-dialog-slide-right\"\n },\n \"slide-top\": {\n open: \"animate-dialog-slide-top\",\n close: \"animate-dialog-slide-top\"\n },\n none: { open: \"\", close: \"\" }\n};\n\n/**\n * Resolve animation classes from preset name or custom class string.\n * Supports both preset names and arbitrary Tailwind class strings.\n */\nexport function resolve_animation_classes(\n open_anim: AnimationPreset | string = \"zoom\",\n close_anim: AnimationPreset | string = \"zoom\"\n): string {\n const open_classes = (open_anim in ANIMATION_PRESETS)\n ? ANIMATION_PRESETS[open_anim as AnimationPreset].open\n : open_anim;\n const close_classes = (close_anim in ANIMATION_PRESETS)\n ? ANIMATION_PRESETS[close_anim as AnimationPreset].close\n : close_anim;\n return `${open_classes} ${close_classes}`;\n}\n","/**\n * hazo_ui_dialog/index.tsx\n *\n * Purpose: Standardized, reusable dialog component built on shadcn's Dialog primitive\n * Features:\n * - Standardized header and footer layout\n * - Customizable content area\n * - Flexible animation system (presets + custom)\n * - Responsive sizing (viewport-relative up to limits)\n * - Background overlay customization\n * - CSS variable-based theming\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X, Loader2 } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n DialogOverlay,\n DialogPortal,\n} from \"../ui/dialog\";\nimport { get_hazo_ui_config } from \"../../lib/hazo_ui_config\";\nimport { resolve_animation_classes } from \"../../lib/animations\";\nimport type { AnimationPreset } from \"../../lib/animations\";\nexport type { AnimationPreset } from \"../../lib/animations\";\n\ntype ButtonVariant = \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\n\n// Dialog variant types for preset color themes\nexport type DialogVariant = 'default' | 'info' | 'success' | 'warning' | 'destructive';\n\n// Variant preset color configurations\ninterface VariantPreset {\n header_background_color: string;\n description_background_color: string;\n header_text_color: string;\n border_color: string;\n accent_color: string;\n overlay_class_name: string;\n action_button_variant?: ButtonVariant;\n}\n\nconst VARIANT_PRESETS: Record<Exclude<DialogVariant, 'default'>, VariantPreset> = {\n info: {\n header_background_color: \"rgb(191, 219, 254)\",\n description_background_color: \"rgb(219, 234, 254)\",\n header_text_color: \"rgb(30, 58, 138)\",\n border_color: \"rgb(59, 130, 246)\",\n accent_color: \"rgb(59, 130, 246)\",\n overlay_class_name: \"bg-blue-950/50\",\n },\n success: {\n header_background_color: \"rgb(187, 247, 208)\",\n description_background_color: \"rgb(220, 252, 231)\",\n header_text_color: \"rgb(22, 101, 52)\",\n border_color: \"rgb(34, 197, 94)\",\n accent_color: \"rgb(34, 197, 94)\",\n overlay_class_name: \"bg-green-950/50\",\n },\n warning: {\n header_background_color: \"rgb(253, 230, 138)\",\n description_background_color: \"rgb(254, 249, 195)\",\n header_text_color: \"rgb(113, 63, 18)\",\n border_color: \"rgb(234, 179, 8)\",\n accent_color: \"rgb(234, 179, 8)\",\n overlay_class_name: \"bg-yellow-950/50\",\n },\n destructive: {\n header_background_color: \"rgb(254, 202, 202)\",\n description_background_color: \"rgb(254, 226, 226)\",\n header_text_color: \"rgb(127, 29, 29)\",\n border_color: \"rgb(239, 68, 68)\",\n accent_color: \"rgb(239, 68, 68)\",\n overlay_class_name: \"bg-red-950/50\",\n action_button_variant: \"destructive\",\n },\n};\n\n// Props interface\nexport interface HazoUiDialogProps {\n // Dialog State Control\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n\n // Content & Callbacks\n children: React.ReactNode;\n onConfirm?: () => void;\n onCancel?: () => void;\n\n // Header Configuration\n title?: string;\n description?: string;\n\n // Button Configuration\n actionButtonText?: string;\n actionButtonVariant?: ButtonVariant;\n cancelButtonText?: string;\n showCancelButton?: boolean;\n\n /**\n * Shows a loading spinner and disables the action button.\n * When true, renders a spinner icon before the action button text.\n * Does not affect cancel button.\n * Ignored if footerContent is provided.\n */\n actionButtonLoading?: boolean;\n\n /**\n * Disables the action button.\n * Ignored if footerContent is provided.\n */\n actionButtonDisabled?: boolean;\n\n /**\n * Icon element rendered before the action button text.\n * Typically a Lucide icon like <Send className=\"h-4 w-4 mr-2\" />\n * When actionButtonLoading is true, this is replaced with a spinner.\n * Ignored if footerContent is provided.\n */\n actionButtonIcon?: React.ReactNode;\n\n /**\n * Custom footer content that completely replaces the default footer.\n * When provided, actionButtonText, onConfirm, onCancel, showCancelButton,\n * actionButtonLoading, actionButtonIcon are all ignored.\n * Use this for complex layouts like stats + buttons, multiple actions,\n * or conditional button rendering.\n */\n footerContent?: React.ReactNode;\n\n // Size Configuration (responsive)\n sizeWidth?: string;\n sizeHeight?: string;\n fixedSize?: boolean; // When true, sizeHeight becomes a fixed height instead of maxHeight\n\n // Animation Configuration\n openAnimation?: AnimationPreset | string;\n closeAnimation?: AnimationPreset | string;\n\n // Variant (preset color theme)\n variant?: DialogVariant;\n\n /**\n * Controls header layout when a variant is active.\n * - true (default): title and description get separate background rows\n * - false: single header background, description rendered as italic subtext\n */\n splitHeader?: boolean;\n\n // Color Customization (overrides variant preset if both provided)\n headerBackgroundColor?: string;\n descriptionBackgroundColor?: string;\n headerTextColor?: string;\n bodyBackgroundColor?: string;\n footerBackgroundColor?: string;\n borderColor?: string;\n accentColor?: string;\n\n // Header Bar (full-width colored bar)\n headerBar?: boolean; // Enable full-width colored header bar\n headerBarColor?: string; // Color for the header bar (e.g., \"#1e293b\", \"rgb(30, 41, 59)\")\n\n // Styling Customization\n className?: string;\n contentClassName?: string;\n overlayClassName?: string;\n headerClassName?: string;\n footerClassName?: string;\n showCloseButton?: boolean;\n}\n\n/**\n * HazoUiDialog Component\n *\n * A flexible dialog component with standardized layout and customizable behavior\n */\nexport function HazoUiDialog({\n open,\n onOpenChange,\n children,\n onConfirm,\n onCancel,\n title = \"Action required\",\n description,\n actionButtonText = \"Confirm\",\n actionButtonVariant,\n cancelButtonText = \"Cancel\",\n showCancelButton = true,\n actionButtonLoading = false,\n actionButtonDisabled = false,\n actionButtonIcon,\n footerContent,\n sizeWidth = \"min(90vw, 600px)\",\n sizeHeight = \"min(80vh, 800px)\",\n fixedSize = false,\n openAnimation = \"zoom\",\n closeAnimation = \"zoom\",\n variant = \"default\",\n splitHeader = true,\n headerBackgroundColor,\n descriptionBackgroundColor,\n headerTextColor,\n bodyBackgroundColor,\n footerBackgroundColor,\n borderColor,\n accentColor,\n headerBar = false,\n headerBarColor = \"#1e293b\",\n className,\n contentClassName,\n overlayClassName,\n headerClassName,\n footerClassName,\n showCloseButton = true,\n}: HazoUiDialogProps) {\n // Get global config as defaults\n const config = get_hazo_ui_config();\n\n // Resolve variant preset (undefined for 'default' variant)\n const variant_preset = variant !== \"default\" ? VARIANT_PRESETS[variant] : undefined;\n\n // Resolve action button variant: prop > variant preset > \"default\"\n const resolved_action_button_variant = actionButtonVariant ?? variant_preset?.action_button_variant ?? \"default\";\n\n // Button click handlers\n const handleConfirm = () => {\n onConfirm?.();\n // Don't auto-close - let consumer control via onConfirm callback\n };\n\n const handleCancel = () => {\n onCancel?.();\n onOpenChange?.(false); // Auto-close on cancel\n };\n\n // Resolve animation classes\n const animationClasses = resolve_animation_classes(openAnimation, closeAnimation);\n\n // Build inline styles for color customization\n // Three-tier resolution: prop > variant preset > config\n const resolved_border_color = borderColor ?? variant_preset?.border_color;\n\n const contentStyles: React.CSSProperties = {\n width: sizeWidth,\n ...(fixedSize\n ? { height: sizeHeight, minHeight: sizeHeight, maxHeight: sizeHeight }\n : { maxHeight: sizeHeight }\n ),\n ...(resolved_border_color && { borderColor: resolved_border_color }),\n };\n\n // Header styles - combine headerBar with custom colors, using variant then config as fallback\n const finalHeaderBackgroundColor = headerBackgroundColor ?? variant_preset?.header_background_color ?? config.header_background_color;\n const finalDescriptionBgColor = descriptionBackgroundColor ?? variant_preset?.description_background_color;\n const finalHeaderTextColor = headerTextColor ?? variant_preset?.header_text_color ?? config.header_text_color;\n\n // Variant is active when not 'default'\n const is_variant_active = variant !== \"default\";\n\n // When splitHeader is true with a description bg, render two separate background rows\n const has_split_header = splitHeader && !headerBar && !!finalDescriptionBgColor && !!description;\n\n // When splitHeader is false but variant is active, use single bg with italic description\n const has_merged_variant_header = !splitHeader && is_variant_active && !headerBar && !!description;\n\n const headerStyles: React.CSSProperties = {\n ...(headerBar && {\n backgroundColor: headerBarColor,\n paddingTop: \"1.5rem\",\n paddingBottom: \"1.5rem\",\n paddingLeft: \"1.5rem\",\n paddingRight: \"1.5rem\",\n }),\n ...(!has_split_header && finalHeaderBackgroundColor && !headerBar && { backgroundColor: finalHeaderBackgroundColor }),\n ...(!has_split_header && finalHeaderTextColor && { color: finalHeaderTextColor }),\n };\n\n // Title styles - white text for header bar with !important to override inherited colors\n const titleClassName = cn(\n \"cls_dialog_title\",\n headerBar && \"!text-white\"\n );\n\n // Description styles - lighter white for header bar with !important to override inherited colors\n const descriptionClassName = cn(\n \"cls_dialog_description\",\n headerBar && \"!text-white/80\"\n );\n\n const bodyStyles: React.CSSProperties = {\n ...(bodyBackgroundColor && { backgroundColor: bodyBackgroundColor }),\n };\n\n const footerStyles: React.CSSProperties = {\n ...(footerBackgroundColor && { backgroundColor: footerBackgroundColor }),\n };\n\n // Build button styles for accent color and config colors\n const finalSubmitBgColor = accentColor ?? variant_preset?.accent_color ?? config.submit_button_background_color;\n const finalSubmitTextColor = config.submit_button_text_color;\n const finalCancelBgColor = config.cancel_button_background_color;\n const finalCancelTextColor = config.cancel_button_text_color;\n const finalCancelBorderColor = config.cancel_button_border_color;\n\n const actionButtonStyles: React.CSSProperties = {\n ...(finalSubmitBgColor && resolved_action_button_variant === \"default\" && {\n backgroundColor: finalSubmitBgColor,\n borderColor: finalSubmitBgColor,\n }),\n ...(finalSubmitTextColor && resolved_action_button_variant === \"default\" && {\n color: finalSubmitTextColor,\n }),\n };\n\n const cancelButtonStyles: React.CSSProperties = {\n ...(finalCancelBgColor && { backgroundColor: finalCancelBgColor }),\n ...(finalCancelTextColor && { color: finalCancelTextColor }),\n ...(finalCancelBorderColor && { borderColor: finalCancelBorderColor }),\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogPortal>\n {/* Custom DialogOverlay for background customization */}\n <DialogOverlay\n className={cn(\"cls_hazo_dialog_overlay\", overlayClassName ?? variant_preset?.overlay_class_name)}\n />\n\n {/* DialogContent - manually rendered to support overlay customization */}\n <DialogPrimitive.Content\n className={cn(\n \"cls_hazo_dialog_content\",\n \"fixed left-[50%] top-[50%] z-50 flex flex-col\",\n \"translate-x-[-50%] translate-y-[-50%]\",\n \"gap-0 border bg-background shadow-lg\",\n \"duration-200\",\n animationClasses,\n \"sm:rounded-lg\",\n \"overflow-hidden\",\n \"focus:outline-none\",\n className\n )}\n style={contentStyles}\n >\n {/* Header - Fixed */}\n {has_split_header ? (\n /* Split header: two rows with different backgrounds */\n <DialogHeader\n className={cn(\n \"cls_dialog_header shrink-0 p-0 space-y-0\",\n headerClassName\n )}\n >\n {/* Title row - main header background */}\n <div\n className={cn(\"cls_dialog_header_title px-6 pt-6 pb-3\", showCloseButton && \"pr-10\")}\n style={{\n ...(finalHeaderBackgroundColor && { backgroundColor: finalHeaderBackgroundColor }),\n ...(finalHeaderTextColor && { color: finalHeaderTextColor }),\n }}\n >\n <DialogTitle className={titleClassName}>\n {title}\n </DialogTitle>\n </div>\n {/* Description row - lighter sub-header background */}\n <div\n className=\"cls_dialog_header_description px-6 py-1.5\"\n style={{\n backgroundColor: finalDescriptionBgColor,\n ...(finalHeaderTextColor && { color: finalHeaderTextColor }),\n }}\n >\n <DialogDescription className={cn(descriptionClassName, \"italic text-xs\")}>\n {description}\n </DialogDescription>\n </div>\n </DialogHeader>\n ) : (\n /* Single header: one background, italic description when variant is active */\n <DialogHeader\n className={cn(\n \"cls_dialog_header shrink-0\",\n !headerBar && \"p-6 pb-4\",\n has_merged_variant_header && \"pb-3\",\n showCloseButton && \"pr-10\",\n headerClassName\n )}\n style={headerStyles}\n >\n <DialogTitle className={titleClassName}>\n {title}\n </DialogTitle>\n {description && (\n <DialogDescription className={cn(\n descriptionClassName,\n has_merged_variant_header && \"italic text-xs mt-1\"\n )}>\n {description}\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n\n {/* Body - Scrollable */}\n <div\n className={cn(\n \"cls_dialog_body\",\n \"px-6 py-4 overflow-y-auto flex-1 min-h-0\",\n contentClassName\n )}\n style={bodyStyles}\n >\n {children}\n </div>\n\n {/* Footer - Fixed, Right-aligned buttons */}\n <DialogFooter\n className={cn(\"cls_dialog_footer shrink-0 p-6 pt-4\", footerClassName)}\n style={footerStyles}\n >\n {footerContent ? (\n // Custom footer content replaces default buttons\n footerContent\n ) : (\n // Default footer with action and cancel buttons\n <>\n {showCancelButton && (\n <Button\n type=\"button\"\n className=\"cls_cancel_button\"\n variant=\"outline\"\n onClick={handleCancel}\n style={cancelButtonStyles}\n >\n {cancelButtonText}\n </Button>\n )}\n <Button\n type=\"button\"\n className=\"cls_confirm_button\"\n variant={resolved_action_button_variant}\n onClick={handleConfirm}\n style={actionButtonStyles}\n disabled={actionButtonLoading || actionButtonDisabled}\n >\n {actionButtonLoading ? (\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n ) : (\n actionButtonIcon\n )}\n {actionButtonText}\n </Button>\n </>\n )}\n </DialogFooter>\n\n {/* Close button */}\n {showCloseButton && (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\"\n style={\n headerBar\n ? { color: \"white\" }\n : finalHeaderTextColor\n ? { color: finalHeaderTextColor }\n : undefined\n }\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n </Dialog>\n );\n}\n","/**\n * hazo_ui_confirm_dialog/index.tsx\n *\n * Purpose: Compact, opinionated confirmation dialog for confirmations,\n * acknowledgments, and destructive action prompts.\n * Features:\n * - Accent top border colored by variant\n * - Variant system (default, destructive, warning, info, success)\n * - Async onConfirm with auto-loading state\n * - Configurable buttons (confirm + optional cancel)\n * - ReactNode children or simple description string\n * - Integrates with hazo_ui_config for theming\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogOverlay,\n DialogPortal,\n} from \"../ui/dialog\";\nimport { get_hazo_ui_config } from \"../../lib/hazo_ui_config\";\nimport { resolve_animation_classes } from \"../../lib/animations\";\nimport type { AnimationPreset } from \"../../lib/animations\";\n\n// Variant type\nexport type ConfirmDialogVariant = 'default' | 'destructive' | 'warning' | 'info' | 'success';\n\n// Variant preset color configurations\ninterface ConfirmVariantPreset {\n accent_color: string;\n confirm_button_color: string;\n overlay_class_name: string;\n}\n\nconst CONFIRM_VARIANT_PRESETS: Record<Exclude<ConfirmDialogVariant, 'default'>, ConfirmVariantPreset> = {\n destructive: {\n accent_color: \"rgb(220, 38, 38)\",\n confirm_button_color: \"rgb(220, 38, 38)\",\n overlay_class_name: \"bg-red-950/50\",\n },\n warning: {\n accent_color: \"rgb(245, 158, 11)\",\n confirm_button_color: \"rgb(245, 158, 11)\",\n overlay_class_name: \"bg-yellow-950/50\",\n },\n info: {\n accent_color: \"rgb(37, 99, 235)\",\n confirm_button_color: \"rgb(37, 99, 235)\",\n overlay_class_name: \"bg-blue-950/50\",\n },\n success: {\n accent_color: \"rgb(22, 163, 74)\",\n confirm_button_color: \"rgb(22, 163, 74)\",\n overlay_class_name: \"bg-green-950/50\",\n },\n};\n\n\n// Props interface\nexport interface HazoUiConfirmDialogProps {\n // Dialog state\n open: boolean;\n onOpenChange: (open: boolean) => void;\n\n // Header\n title: string;\n\n // Content — description for simple text, children for ReactNode\n // If both provided, children takes precedence\n description?: string;\n children?: React.ReactNode;\n\n // Variant — controls accent color, button color automatically\n variant?: ConfirmDialogVariant;\n\n // Button configuration\n confirmLabel?: string;\n cancelLabel?: string;\n showCancelButton?: boolean;\n\n // Callbacks\n onConfirm: () => void | Promise<void>;\n onCancel?: () => void;\n\n // State overrides\n loading?: boolean;\n disabled?: boolean;\n\n // Color overrides (override variant presets)\n accentColor?: string;\n confirmButtonColor?: string;\n\n // Animation\n openAnimation?: AnimationPreset | string;\n closeAnimation?: AnimationPreset | string;\n}\n\n/**\n * HazoUiConfirmDialog Component\n *\n * A compact, opinionated confirmation dialog with variant-driven styling,\n * accent top border, and async loading support.\n */\nexport function HazoUiConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n children,\n variant = \"default\",\n confirmLabel,\n cancelLabel = \"Cancel\",\n showCancelButton = true,\n onConfirm,\n onCancel,\n loading: external_loading,\n disabled = false,\n accentColor,\n confirmButtonColor,\n openAnimation = \"zoom\",\n closeAnimation = \"zoom\",\n}: HazoUiConfirmDialogProps) {\n const [internal_loading, set_internal_loading] = React.useState(false);\n const config = get_hazo_ui_config();\n\n // Resolve variant preset\n const variant_preset = variant !== \"default\" ? CONFIRM_VARIANT_PRESETS[variant] : undefined;\n\n // Loading state: external prop overrides internal async state\n const is_loading = external_loading ?? internal_loading;\n\n // Resolve default confirm label based on cancel button visibility\n const resolved_confirm_label = confirmLabel ?? (showCancelButton ? \"Confirm\" : \"OK\");\n\n // Resolve colors: variant preset > prop > config\n const resolved_accent_color = accentColor ?? variant_preset?.accent_color ?? \"rgb(148, 163, 184)\";\n const resolved_confirm_button_color = confirmButtonColor ?? variant_preset?.confirm_button_color ?? config.submit_button_background_color;\n\n // Cancel button styles from config\n const cancel_button_styles: React.CSSProperties = {\n ...(config.cancel_button_background_color && { backgroundColor: config.cancel_button_background_color }),\n ...(config.cancel_button_text_color && { color: config.cancel_button_text_color }),\n ...(config.cancel_button_border_color && { borderColor: config.cancel_button_border_color }),\n };\n\n // Confirm button styles\n const confirm_button_styles: React.CSSProperties = {\n ...(resolved_confirm_button_color && {\n backgroundColor: resolved_confirm_button_color,\n borderColor: resolved_confirm_button_color,\n color: \"white\",\n }),\n };\n\n // Animation classes\n const animation_classes = resolve_animation_classes(openAnimation, closeAnimation);\n\n // Handle confirm click with async support\n const handle_confirm = async () => {\n try {\n const result = onConfirm();\n if (result instanceof Promise) {\n set_internal_loading(true);\n await result;\n }\n onOpenChange(false);\n } catch {\n // Consumer handles errors in their onConfirm; we just restore UI state\n } finally {\n set_internal_loading(false);\n }\n };\n\n // Handle cancel click\n const handle_cancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n // Ref for cancel button to receive initial focus on destructive/warning variants\n const cancel_ref = React.useRef<HTMLButtonElement>(null);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogPortal>\n <DialogOverlay\n className={cn(\n \"cls_confirm_dialog_overlay\",\n variant_preset?.overlay_class_name\n )}\n style={{ backdropFilter: \"blur(4px)\" }}\n />\n\n <DialogPrimitive.Content\n className={cn(\n \"cls_confirm_dialog_content\",\n \"fixed left-[50%] top-[50%] z-50\",\n \"translate-x-[-50%] translate-y-[-50%]\",\n \"bg-background shadow-lg\",\n \"duration-200\",\n animation_classes,\n \"overflow-hidden\",\n \"focus:outline-none\"\n )}\n style={{\n width: \"min(90vw, 420px)\",\n borderRadius: \"12px\",\n borderTop: `4px solid ${resolved_accent_color}`,\n boxShadow: \"0 20px 60px rgba(0,0,0,0.15)\",\n }}\n onOpenAutoFocus={(e) => {\n if ((variant === \"destructive\" || variant === \"warning\") && showCancelButton && cancel_ref.current) {\n e.preventDefault();\n cancel_ref.current.focus();\n }\n }}\n >\n {/* Content area */}\n <div className=\"cls_confirm_dialog_body px-6 pt-7 pb-5\">\n <DialogPrimitive.Title className=\"cls_confirm_dialog_title text-[17px] font-semibold text-foreground mb-2.5\">\n {title}\n </DialogPrimitive.Title>\n\n {children ? (\n <DialogPrimitive.Description asChild>\n <div className=\"cls_confirm_dialog_children text-sm text-muted-foreground leading-relaxed\">\n {children}\n </div>\n </DialogPrimitive.Description>\n ) : description ? (\n <DialogPrimitive.Description className=\"cls_confirm_dialog_description text-sm text-muted-foreground leading-relaxed\">\n {description}\n </DialogPrimitive.Description>\n ) : null}\n </div>\n\n {/* Separator */}\n <div className=\"cls_confirm_dialog_separator border-t border-border\" />\n\n {/* Action area */}\n <div className=\"cls_confirm_dialog_actions px-6 py-4 flex justify-end gap-3\">\n {showCancelButton && (\n <Button\n ref={cancel_ref}\n type=\"button\"\n className=\"cls_confirm_cancel_button\"\n variant=\"outline\"\n onClick={handle_cancel}\n disabled={is_loading}\n style={cancel_button_styles}\n >\n {cancelLabel}\n </Button>\n )}\n <Button\n type=\"button\"\n className=\"cls_confirm_action_button\"\n onClick={handle_confirm}\n disabled={is_loading || disabled}\n style={confirm_button_styles}\n >\n {is_loading && <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />}\n {resolved_confirm_label}\n </Button>\n </div>\n </DialogPrimitive.Content>\n </DialogPortal>\n </Dialog>\n );\n}\n","// Drawer component for hazo_ui library\n// Based on shadcn/ui drawer component (vaul-backed).\n//\n// Intended for mobile bottom sheets. On desktop, consumers typically render a Dialog instead.\n// The component itself does not enforce this — pair with `useMediaQuery(\"(max-width: 640px)\")`\n// to swap Dialog ↔ Drawer, or render both shells with the same content.\n\nimport * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\nimport { cn } from \"../../lib/utils\";\n\nconst Drawer = ({\n shouldScaleBackground = true,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) => (\n <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />\n);\nDrawer.displayName = \"Drawer\";\n\nconst DrawerTrigger = DrawerPrimitive.Trigger;\nconst DrawerPortal = DrawerPrimitive.Portal;\nconst DrawerClose = DrawerPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDrawerOverlay.displayName = \"DrawerOverlay\";\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto max-h-[96dvh] flex-col rounded-t-[10px] border bg-background\",\n className\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"grid gap-1.5 p-4 text-center sm:text-left\", className)}\n {...props}\n />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDrawerTitle.displayName = \"DrawerTitle\";\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = \"DrawerDescription\";\n\nexport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerOverlay,\n DrawerPortal,\n DrawerTitle,\n DrawerTrigger,\n};\n","// useMediaQuery hook for hazo_ui library\n// SSR-safe React hook that returns whether the given media query matches.\n// Defaults to `false` during SSR so consumers can branch on `isMobile` without hydration mismatch.\n\nimport * as React from \"react\";\n\n/**\n * Returns whether the given media query currently matches.\n * Re-renders the consumer when the match state changes.\n *\n * @param query - A CSS media query string, e.g. \"(max-width: 640px)\"\n * @returns boolean — `true` when the query matches, `false` during SSR or before mount\n *\n * @example\n * const isMobile = useMediaQuery(\"(max-width: 640px)\");\n * const Shell = isMobile ? Drawer : Dialog;\n */\nexport function useMediaQuery(query: string): boolean {\n const get_match = React.useCallback(() => {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return false;\n }\n return window.matchMedia(query).matches;\n }, [query]);\n\n const [matches, set_matches] = React.useState<boolean>(false);\n\n React.useEffect(() => {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return;\n }\n const media_query_list = window.matchMedia(query);\n set_matches(media_query_list.matches);\n\n const handle_change = (event: MediaQueryListEvent) => set_matches(event.matches);\n\n // addEventListener is the modern API; addListener is the legacy fallback for older Safari\n if (typeof media_query_list.addEventListener === \"function\") {\n media_query_list.addEventListener(\"change\", handle_change);\n return () => media_query_list.removeEventListener(\"change\", handle_change);\n }\n media_query_list.addListener(handle_change);\n return () => media_query_list.removeListener(handle_change);\n }, [query, get_match]);\n\n return matches;\n}\n","// Accordion component for hazo_ui library\n// Based on shadcn/ui accordion component\nimport * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","// Checkbox component for hazo_ui library\n// Based on shadcn/ui checkbox component\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","// DropdownMenu component for hazo_ui library\n// Based on shadcn/ui dropdown-menu component\nimport * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n","// HoverCard component for hazo_ui library\n// Based on shadcn/ui hover-card component\nimport * as React from \"react\";\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\nimport { cn } from \"../../lib/utils\";\n\nconst HoverCard = HoverCardPrimitive.Root;\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none 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\",\n className\n )}\n {...props}\n />\n));\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","// Label component for hazo_ui library\n// Based on shadcn/ui label component (placeholder - not used in HazoUiMultiFilterDialog but included for completeness)\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, ...props }, ref) => {\n return (\n <label\n ref={ref}\n className={cn(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className\n )}\n {...props}\n />\n );\n }\n);\nLabel.displayName = \"Label\";\n\nexport { Label };\n\n","// Switch component for hazo_ui library\n// Based on shadcn/ui switch component\nimport * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n\n","// Textarea component for hazo_ui library\n// Based on shadcn/ui textarea component\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2\",\n \"text-sm ring-offset-background\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\"\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../../lib/utils\";\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","\"use client\"\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nconst Collapsible = CollapsiblePrimitive.Root;\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","\"use client\"\nimport * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport { cn } from \"../../lib/utils\";\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"rounded-lg border bg-card text-card-foreground shadow-sm\", className)} {...props} />\n )\n);\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props} />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import { cn } from \"../../lib/utils\";\n\ninterface SpinnerProps {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport function Spinner({ className, size = \"md\" }: SpinnerProps) {\n const sizeClasses = { sm: \"h-4 w-4\", md: \"h-8 w-8\", lg: \"h-12 w-12\" };\n return (\n <div\n className={cn(\"animate-spin rounded-full border-2 border-current border-t-transparent text-primary\", sizeClasses[size], className)}\n role=\"status\"\n aria-label=\"Loading\"\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n}\n","\"use client\"\nimport * as React from \"react\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 gap-2\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-10 px-3 min-w-10\",\n sm: \"h-9 px-2.5 min-w-9\",\n lg: \"h-11 px-5 min-w-11\",\n },\n },\n defaultVariants: { variant: \"default\", size: \"default\" },\n }\n);\n\nconst Toggle = React.forwardRef<\n React.ElementRef<typeof TogglePrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n <TogglePrimitive.Root ref={ref} className={cn(toggleVariants({ variant, size, className }))} {...props} />\n));\nToggle.displayName = TogglePrimitive.Root.displayName;\n\nexport { Toggle, toggleVariants };\n","\"use client\"\nimport * as React from \"react\";\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { toggleVariants } from \"./toggle\";\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n size: \"default\",\n variant: \"default\",\n});\n\nconst ToggleGroup = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => (\n <ToggleGroupPrimitive.Root ref={ref} className={cn(\"flex items-center justify-center gap-1\", className)} {...props}>\n <ToggleGroupContext.Provider value={{ variant, size }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n));\nToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;\n\nconst ToggleGroupItem = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>\n>(({ className, children, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext);\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(toggleVariants({ variant: context.variant || variant, size: context.size || size }), className)}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n );\n});\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;\n\nexport { ToggleGroup, ToggleGroupItem };\n","\"use client\"\nimport * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\nimport { cn } from \"../../lib/utils\";\nimport { buttonVariants } from \"./button\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className)}\n {...props}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\", className)}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title ref={ref} className={cn(\"text-lg font-semibold\", className)} {...props} />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel ref={ref} className={cn(buttonVariants({ variant: \"outline\" }), \"mt-2 sm:mt-0\", className)} {...props} />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { Separator } from \"./separator\";\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch [&>*]:focus-visible:relative [&>*]:focus-visible:z-10\",\n {\n variants: {\n orientation: {\n horizontal: \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\",\n vertical: \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\n },\n },\n defaultVariants: { orientation: \"horizontal\" },\n }\n);\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <div role=\"group\" data-slot=\"button-group\" className={cn(buttonGroupVariants({ orientation }), className)} {...props} />\n );\n}\n\nfunction ButtonGroupText({ className, asChild = false, ...props }: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp className={cn(\"bg-muted flex items-center gap-2 rounded-md border px-4 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\", className)} {...props} />\n );\n}\n\nfunction ButtonGroupSeparator({ className, orientation = \"vertical\", ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator orientation={orientation} className={cn(\"bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto\", className)} {...props} />;\n}\n\nexport { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\ninterface SkeletonBaseProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n}\n\nconst SkeletonBase = React.forwardRef<HTMLDivElement, SkeletonBaseProps>(\n ({ className, ...rest }, ref) => (\n <div\n ref={ref}\n data-hazo-skeleton=\"\"\n aria-hidden=\"true\"\n className={cn(\"hazo-shimmer rounded-md\", className)}\n {...rest}\n />\n )\n);\nSkeletonBase.displayName = \"Skeleton\";\n\nexport const Skeleton = SkeletonBase;\n\n/* ------------------------------ Circle ------------------------------ */\n\nexport interface SkeletonCircleProps {\n /** Diameter in px. Default 40. */\n size?: number;\n className?: string;\n}\n\nexport function SkeletonCircle({ size = 40, className }: SkeletonCircleProps) {\n return (\n <SkeletonBase\n className={cn(\"rounded-full\", className)}\n style={{ width: size, height: size }}\n />\n );\n}\n\n/* ------------------------------- Bar -------------------------------- */\n\nexport interface SkeletonBarProps {\n /** CSS width — accepts px (number) or any CSS length string. Default \"100%\". */\n width?: number | string;\n /** Height in px. Default 12. */\n height?: number;\n className?: string;\n}\n\nexport function SkeletonBar({ width = \"100%\", height = 12, className }: SkeletonBarProps) {\n return (\n <SkeletonBase\n className={className}\n style={{ width, height }}\n />\n );\n}\n\n/* ------------------------------- Rect ------------------------------- */\n\nexport interface SkeletonRectProps {\n width?: number | string;\n height?: number | string;\n /** CSS border-radius. Default 6 (matches rounded-md). */\n radius?: number | string;\n className?: string;\n}\n\nexport function SkeletonRect({ width = \"100%\", height = 96, radius = 6, className }: SkeletonRectProps) {\n return (\n <SkeletonBase\n className={className}\n style={{ width, height, borderRadius: radius }}\n />\n );\n}\n\n/* ------------------------------ Group ------------------------------- */\n\nexport interface SkeletonGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Optional `aria-label` for the loading region. Default \"Loading content\". */\n label?: string;\n children: React.ReactNode;\n}\n\nexport function SkeletonGroup({ label = \"Loading content\", children, className, ...rest }: SkeletonGroupProps) {\n return (\n <div\n role=\"status\"\n aria-busy=\"true\"\n aria-label={label}\n className={cn(\"space-y-2\", className)}\n {...rest}\n >\n {children}\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface EmptyStateProps {\n /** Icon element. Recommended size 48x48. Wrap a lucide icon in a div if you want background styling. */\n icon?: React.ReactNode;\n /** Required main heading. */\n title: string;\n /** Optional secondary description. */\n description?: React.ReactNode;\n /** Optional CTA region — typically one or two <Button> elements. */\n action?: React.ReactNode;\n /** Visual size. \"sm\" for inline use (cards, panels), \"md\" default, \"lg\" for full-page emptiness. */\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n size = \"md\",\n className,\n}: EmptyStateProps) {\n const sizing = {\n sm: { wrap: \"py-6 gap-2\", icon: \"w-8 h-8 mb-1\", title: \"text-sm font-medium\", desc: \"text-xs\" },\n md: { wrap: \"py-10 gap-3\", icon: \"w-12 h-12 mb-2\", title: \"text-base font-semibold\", desc: \"text-sm\" },\n lg: { wrap: \"py-16 gap-4\", icon: \"w-16 h-16 mb-3\", title: \"text-lg font-semibold\", desc: \"text-base\" },\n }[size];\n\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center text-center text-muted-foreground\",\n sizing.wrap,\n className\n )}\n >\n {icon ? (\n <div className={cn(\"text-muted-foreground/60\", sizing.icon)}>{icon}</div>\n ) : null}\n <div className={cn(\"text-foreground\", sizing.title)}>{title}</div>\n {description ? (\n <div className={cn(\"max-w-md text-muted-foreground\", sizing.desc)}>{description}</div>\n ) : null}\n {action ? <div className=\"mt-2 flex items-center gap-2\">{action}</div> : null}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AlertTriangle, OctagonAlert, X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type ErrorBannerSeverity = \"warning\" | \"error\";\n\nexport interface ErrorBannerProps {\n /** Defaults to \"error\". */\n severity?: ErrorBannerSeverity;\n /** Optional bold heading shown above the message. */\n title?: string;\n /** Required body text or node. */\n message: React.ReactNode;\n /** Override the auto-selected icon. */\n icon?: React.ReactNode;\n /** Optional CTA region — typically one <Button>. */\n action?: React.ReactNode;\n /** When provided, renders a dismiss \"X\" button that calls this on click. */\n onDismiss?: () => void;\n className?: string;\n}\n\nexport function ErrorBanner({\n severity = \"error\",\n title,\n message,\n icon,\n action,\n onDismiss,\n className,\n}: ErrorBannerProps) {\n const palette =\n severity === \"warning\"\n ? \"border-amber-300 bg-amber-50 text-amber-900 dark:border-amber-700 dark:bg-amber-950 dark:text-amber-100\"\n : \"border-destructive/40 bg-destructive/10 text-destructive-foreground\";\n\n const iconColor = severity === \"warning\" ? \"text-amber-600\" : \"text-destructive\";\n\n const resolvedIcon =\n icon ??\n (severity === \"warning\" ? (\n <AlertTriangle className={cn(\"h-5 w-5\", iconColor)} aria-hidden=\"true\" />\n ) : (\n <OctagonAlert className={cn(\"h-5 w-5\", iconColor)} aria-hidden=\"true\" />\n ));\n\n return (\n <div\n role=\"alert\"\n aria-live={severity === \"error\" ? \"assertive\" : \"polite\"}\n className={cn(\n \"flex items-start gap-3 rounded-md border px-4 py-3 text-sm\",\n palette,\n className\n )}\n >\n <div className=\"flex-shrink-0 mt-0.5\">{resolvedIcon}</div>\n <div className=\"flex-1 min-w-0\">\n {title ? <div className=\"font-semibold leading-tight\">{title}</div> : null}\n <div className={cn(\"leading-snug\", title ? \"mt-1\" : \"\")}>{message}</div>\n {action ? <div className=\"mt-2 flex items-center gap-2\">{action}</div> : null}\n </div>\n {onDismiss ? (\n <button\n type=\"button\"\n onClick={onDismiss}\n aria-label=\"Dismiss\"\n className=\"flex-shrink-0 rounded p-1 hover:bg-black/5 focus:outline-none focus:ring-2 focus:ring-offset-2 dark:hover:bg-white/5\"\n >\n <X className=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n ) : null}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { OctagonAlert } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ErrorPageProps {\n /** Defaults to \"Something went wrong\". */\n title?: string;\n /** Optional explanation paragraph(s). */\n description?: React.ReactNode;\n /** Short symbolic code (e.g., \"500\", \"NOT_FOUND\") rendered as a tag. */\n errorCode?: string;\n /** Correlation id from hazo_logs — rendered in a copyable mono block when present. */\n correlationId?: string;\n /** CTA region — typically one or two <Button> elements (\"Try again\", \"Go home\"). */\n actions?: React.ReactNode;\n /** Override the default OctagonAlert icon. */\n illustration?: React.ReactNode;\n className?: string;\n}\n\nexport function ErrorPage({\n title = \"Something went wrong\",\n description,\n errorCode,\n correlationId,\n actions,\n illustration,\n className,\n}: ErrorPageProps) {\n return (\n <div\n role=\"alert\"\n aria-live=\"assertive\"\n className={cn(\n \"mx-auto flex max-w-md flex-col items-center justify-center gap-4 px-6 py-16 text-center\",\n className\n )}\n >\n <div className=\"text-destructive\">\n {illustration ?? <OctagonAlert className=\"h-16 w-16\" aria-hidden=\"true\" />}\n </div>\n {errorCode ? (\n <div className=\"rounded-full bg-muted px-3 py-1 text-xs font-mono uppercase tracking-wider text-muted-foreground\">\n {errorCode}\n </div>\n ) : null}\n <h1 className=\"text-2xl font-semibold text-foreground\">{title}</h1>\n {description ? (\n <div className=\"text-sm text-muted-foreground\">{description}</div>\n ) : null}\n {correlationId ? (\n <div className=\"w-full rounded-md border bg-muted/40 px-3 py-2 text-left\">\n <div className=\"text-[10px] uppercase tracking-wider text-muted-foreground\">\n Correlation ID\n </div>\n <code className=\"break-all text-xs\">{correlationId}</code>\n </div>\n ) : null}\n {actions ? <div className=\"mt-2 flex flex-wrap items-center justify-center gap-2\">{actions}</div> : null}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ErrorBanner } from \"../error_banner\";\n\ntype Phase = \"idle\" | \"silent\" | \"gentle\" | \"firm\" | \"expired\";\n\nexport interface LoadingTimeoutProps {\n /** When true, the timeout runs and escalation states render. When false, renders children. */\n active: boolean;\n /** Children shown when not loading. */\n children?: React.ReactNode;\n /** Optional skeleton rendered during the \"silent\" phase (0–5s). */\n skeleton?: React.ReactNode;\n /** Called when the user clicks the retry button in the \"expired\" phase. */\n onRetry?: () => void;\n /** Customise the timeout thresholds in ms. Defaults: 5000/15000/30000. */\n thresholds?: { gentle?: number; firm?: number; expired?: number };\n /** Optional label used in the gentle/firm messages. Default \"content\". */\n label?: string;\n className?: string;\n}\n\nexport function LoadingTimeout({\n active,\n children,\n skeleton,\n onRetry,\n thresholds,\n label = \"content\",\n className,\n}: LoadingTimeoutProps) {\n const t = {\n gentle: thresholds?.gentle ?? 5_000,\n firm: thresholds?.firm ?? 15_000,\n expired: thresholds?.expired ?? 30_000,\n };\n\n const [phase, setPhase] = React.useState<Phase>(active ? \"silent\" : \"idle\");\n\n React.useEffect(() => {\n if (!active) {\n setPhase(\"idle\");\n return;\n }\n setPhase(\"silent\");\n const gentleTimer = window.setTimeout(() => setPhase(\"gentle\"), t.gentle);\n const firmTimer = window.setTimeout(() => setPhase(\"firm\"), t.firm);\n const expiredTimer = window.setTimeout(() => setPhase(\"expired\"), t.expired);\n return () => {\n window.clearTimeout(gentleTimer);\n window.clearTimeout(firmTimer);\n window.clearTimeout(expiredTimer);\n };\n }, [active, t.gentle, t.firm, t.expired]);\n\n if (!active) {\n return <>{children}</>;\n }\n\n if (phase === \"expired\") {\n return (\n <div className={className} role=\"alert\" aria-busy=\"false\">\n <ErrorBanner\n severity=\"error\"\n title=\"This is taking longer than expected\"\n message={`We're still trying to load the ${label}. The connection may be slow.`}\n action={\n onRetry ? (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"rounded bg-foreground/10 px-3 py-1.5 text-sm font-medium hover:bg-foreground/15\"\n >\n Try again\n </button>\n ) : null\n }\n />\n </div>\n );\n }\n\n return (\n <div className={className} role=\"status\" aria-busy=\"true\" aria-live=\"polite\">\n {skeleton}\n {phase === \"gentle\" ? (\n <div className=\"mt-3 text-center text-sm text-muted-foreground\">Loading {label}…</div>\n ) : null}\n {phase === \"firm\" ? (\n <div className=\"mt-3 text-center text-sm text-muted-foreground\">\n Still working on it — almost there.\n </div>\n ) : null}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ProgressiveImageProps {\n /** Required final image src. */\n src: string;\n /** Required alt text. Empty string is allowed for decorative images. */\n alt: string;\n /** Low-quality placeholder data URL or tiny image url. Renders blurred under the main image. */\n lqip?: string;\n /** Width in px or CSS length. Required for stable aspect ratio. */\n width: number | string;\n /** Height in px or CSS length. Required for stable aspect ratio. */\n height: number | string;\n /** Native loading attribute. Default \"lazy\". */\n loading?: \"eager\" | \"lazy\";\n /** Object fit for the final image. Default \"cover\". */\n fit?: \"cover\" | \"contain\" | \"fill\" | \"none\" | \"scale-down\";\n className?: string;\n onLoad?: () => void;\n onError?: () => void;\n}\n\nexport function ProgressiveImage({\n src,\n alt,\n lqip,\n width,\n height,\n loading = \"lazy\",\n fit = \"cover\",\n className,\n onLoad,\n onError,\n}: ProgressiveImageProps) {\n const [loaded, setLoaded] = React.useState(false);\n\n return (\n <div\n className={cn(\"relative overflow-hidden bg-muted\", className)}\n style={{ width, height }}\n >\n {lqip ? (\n <img\n src={lqip}\n alt=\"\"\n aria-hidden=\"true\"\n className={cn(\n \"absolute inset-0 h-full w-full object-cover blur-md scale-110 transition-opacity duration-300\",\n loaded ? \"opacity-0\" : \"opacity-100\"\n )}\n />\n ) : null}\n <img\n src={src}\n alt={alt}\n loading={loading}\n onLoad={() => {\n setLoaded(true);\n onLoad?.();\n }}\n onError={onError}\n className={cn(\n \"absolute inset-0 h-full w-full transition-opacity duration-300\",\n `object-${fit}`,\n loaded ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { Toaster as SonnerToaster, toast } from \"sonner\";\nimport { CheckCircle2, OctagonAlert } from \"lucide-react\";\n\nexport interface HazoUiToasterProps {\n /** Position of the toast stack. Default \"bottom-right\". */\n position?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"top-center\" | \"bottom-center\";\n /** Whether toasts include a close (X) button. Default true. */\n closeButton?: boolean;\n /** Max number of toasts visible at once. Default 5. */\n visibleToasts?: number;\n}\n\nexport function HazoUiToaster({\n position = \"bottom-right\",\n closeButton = true,\n visibleToasts = 5,\n}: HazoUiToasterProps = {}) {\n return (\n <SonnerToaster\n position={position}\n closeButton={closeButton}\n visibleToasts={visibleToasts}\n theme=\"system\"\n richColors\n toastOptions={{\n classNames: {\n toast: \"group rounded-md border bg-background text-foreground shadow-lg\",\n title: \"font-medium\",\n description: \"text-muted-foreground text-sm\",\n },\n }}\n />\n );\n}\n\nexport interface ToastOptions {\n title: string;\n description?: string;\n /** Auto-dismiss duration in ms. Default 3000 for success, 5000 for error. */\n duration?: number;\n /** Optional action button rendered inside the toast. */\n action?: { label: string; onClick: () => void };\n}\n\nexport function successToast({ title, description, duration = 3000, action }: ToastOptions) {\n return toast.success(title, {\n description,\n duration,\n icon: <CheckCircle2 className=\"h-4 w-4 text-emerald-600\" />,\n action: action ? { label: action.label, onClick: action.onClick } : undefined,\n });\n}\n\nexport function errorToast({ title, description, duration = 5000, action }: ToastOptions) {\n return toast.error(title, {\n description,\n duration,\n icon: <OctagonAlert className=\"h-4 w-4 text-destructive\" />,\n action: action ? { label: action.label, onClick: action.onClick } : undefined,\n });\n}\n\n/** Re-export sonner's raw toast for advanced use cases. */\nexport { toast as rawToast } from \"sonner\";\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\nexport interface UseLoadingStateResult {\n /** Current loading flag. */\n isLoading: boolean;\n /** Set the loading flag manually. */\n setLoading: (value: boolean) => void;\n /**\n * Wraps an async function: sets loading=true, awaits the function,\n * sets loading=false in a finally block. Returns the function's result\n * (or throws its error).\n */\n withLoading: <T>(fn: () => Promise<T>) => Promise<T>;\n}\n\nexport function useLoadingState(initial = false): UseLoadingStateResult {\n const [isLoading, setLoading] = useState<boolean>(initial);\n\n const withLoading = useCallback(async <T>(fn: () => Promise<T>): Promise<T> => {\n setLoading(true);\n try {\n return await fn();\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { isLoading, setLoading, withLoading };\n}\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\nexport interface UseErrorDisplayResult {\n /** Current error message, or null when cleared. */\n error: string | null;\n /**\n * Set the error. Accepts a string, an Error instance (uses .message),\n * or null to clear. Anything else is coerced via String().\n */\n setError: (value: unknown) => void;\n /** Clear the error. Same as `setError(null)`. */\n clearError: () => void;\n}\n\nexport function useErrorDisplay(): UseErrorDisplayResult {\n const [error, setRaw] = useState<string | null>(null);\n\n const setError = useCallback((value: unknown) => {\n if (value == null) {\n setRaw(null);\n return;\n }\n if (typeof value === \"string\") {\n setRaw(value);\n return;\n }\n if (value instanceof Error) {\n setRaw(value.message);\n return;\n }\n setRaw(String(value));\n }, []);\n\n const clearError = useCallback(() => setRaw(null), []);\n\n return { error, setError, clearError };\n}\n","// use_debounce.ts — Returns a debounced copy of `value` that only updates\n// after `delayMs` milliseconds of silence. SSR-safe (uses useEffect).\n\nimport { useEffect, useState } from \"react\";\n\n/**\n * Returns a debounced copy of `value`.\n * The returned value only updates after `delayMs` milliseconds have elapsed\n * with no new value. Useful for search inputs or any expensive effect that\n * should not run on every keystroke.\n *\n * @param value - The current value to debounce.\n * @param delayMs - Delay in milliseconds before the debounced value updates.\n * @returns The debounced value (same type as the input).\n *\n * @example\n * const [query, setQuery] = useState(\"\");\n * const debouncedQuery = useDebounce(query, 300);\n * useEffect(() => { fetchResults(debouncedQuery); }, [debouncedQuery]);\n */\nexport function useDebounce<T>(value: T, delayMs: number): T {\n const [debounced_value, set_debounced_value] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n set_debounced_value(value);\n }, delayMs);\n\n return () => clearTimeout(timer);\n }, [value, delayMs]);\n\n return debounced_value;\n}\n","// use_copy_to_clipboard.ts — Clipboard write wrapper with a transient `copied`\n// flag that auto-resets after 2 seconds. SSR-safe.\n\n\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\nexport interface UseCopyToClipboardResult {\n /** True for ~2 s after a successful copy; false otherwise. */\n copied: boolean;\n /**\n * Write `text` to the clipboard. Resolves silently on success.\n * In unsupported environments the promise resolves without throwing.\n */\n copy: (text: string) => Promise<void>;\n}\n\n/**\n * Clipboard write wrapper with a transient `copied` flag.\n *\n * @returns `{ copied, copy }` — call `copy(text)` to write to the clipboard.\n * `copied` is `true` for 2 seconds after a successful write.\n *\n * @example\n * const { copied, copy } = useCopyToClipboard();\n * <button onClick={() => copy(\"hello\")}>{copied ? \"Copied!\" : \"Copy\"}</button>\n */\nexport function useCopyToClipboard(): UseCopyToClipboardResult {\n const [copied, set_copied] = useState(false);\n\n const copy = useCallback(async (text: string): Promise<void> => {\n if (typeof navigator === \"undefined\" || !navigator.clipboard) {\n return;\n }\n try {\n await navigator.clipboard.writeText(text);\n set_copied(true);\n setTimeout(() => set_copied(false), 2000);\n } catch {\n // Silently swallow — clipboard access may be denied in some contexts\n }\n }, []);\n\n return { copied, copy };\n}\n","// use_is_mobile.ts — Breakpoint-based mobile detection built on useMediaQuery.\n// D-018: useIsMobile and useViewport are unified — same implementation,\n// both exported from this file. useViewport is an alias.\n\nimport { useMediaQuery } from \"./use_media_query\";\n\n/** Default breakpoint in pixels (768 px = Tailwind `md`). */\nconst DEFAULT_BREAKPOINT_PX = 768;\n\n/**\n * Returns `true` when the viewport width is narrower than `breakpointPx`.\n * Re-renders when the match state changes. SSR-safe (returns `false` on server).\n *\n * @param breakpointPx - Pixel threshold for \"mobile\". Defaults to 768 px.\n *\n * @example\n * const isMobile = useIsMobile();\n * const isTablet = useIsMobile(1024);\n */\nexport function useIsMobile(breakpointPx: number = DEFAULT_BREAKPOINT_PX): boolean {\n return useMediaQuery(`(max-width: ${breakpointPx - 1}px)`);\n}\n\n/**\n * Alias for `useIsMobile` — accepts a breakpoint in pixels.\n * Provided for consumers who prefer the `useViewport` name.\n *\n * @param breakpoint - Pixel threshold (same semantics as `useIsMobile`). Defaults to 768 px.\n */\nexport function useViewport(breakpoint: number = DEFAULT_BREAKPOINT_PX): boolean {\n return useIsMobile(breakpoint);\n}\n","// use_local_storage.ts — localStorage-backed state hook.\n// Behaves like useState but persists the value across page reloads.\n// Falls back gracefully when localStorage is unavailable (SSR, private mode).\n\n\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\n/**\n * localStorage-backed state hook.\n * The stored value is JSON-serialised; parse errors fall back to `initialValue`.\n *\n * @param key - localStorage key.\n * @param initialValue - Value used when no stored entry exists or on SSR.\n * @returns `[storedValue, setValue]` — same API as `useState`.\n *\n * @example\n * const [theme, setTheme] = useLocalStorage<\"light\" | \"dark\">(\"theme\", \"light\");\n */\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n): [T, (value: T | ((prev: T) => T)) => void] {\n const read_stored = (): T => {\n if (typeof window === \"undefined\") return initialValue;\n try {\n const raw = window.localStorage.getItem(key);\n return raw !== null ? (JSON.parse(raw) as T) : initialValue;\n } catch {\n return initialValue;\n }\n };\n\n const [stored_value, set_stored_value] = useState<T>(read_stored);\n\n const set_value = useCallback(\n (value: T | ((prev: T) => T)) => {\n set_stored_value((prev) => {\n const next = typeof value === \"function\" ? (value as (prev: T) => T)(prev) : value;\n try {\n if (typeof window !== \"undefined\") {\n window.localStorage.setItem(key, JSON.stringify(next));\n }\n } catch {\n // Quota exceeded or storage unavailable — state still updates in memory\n }\n return next;\n });\n },\n [key],\n );\n\n return [stored_value, set_value];\n}\n","// use_session_storage.ts — sessionStorage-backed state hook.\n// Same API as useLocalStorage but data is cleared when the browser tab closes.\n// Falls back gracefully when sessionStorage is unavailable (SSR, private mode).\n\n\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\n/**\n * sessionStorage-backed state hook.\n * The stored value is JSON-serialised; parse errors fall back to `initialValue`.\n *\n * @param key - sessionStorage key.\n * @param initialValue - Value used when no stored entry exists or on SSR.\n * @returns `[storedValue, setValue]` — same API as `useState`.\n *\n * @example\n * const [draft, setDraft] = useSessionStorage(\"form_draft\", \"\");\n */\nexport function useSessionStorage<T>(\n key: string,\n initialValue: T,\n): [T, (value: T | ((prev: T) => T)) => void] {\n const read_stored = (): T => {\n if (typeof window === \"undefined\") return initialValue;\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw !== null ? (JSON.parse(raw) as T) : initialValue;\n } catch {\n return initialValue;\n }\n };\n\n const [stored_value, set_stored_value] = useState<T>(read_stored);\n\n const set_value = useCallback(\n (value: T | ((prev: T) => T)) => {\n set_stored_value((prev) => {\n const next = typeof value === \"function\" ? (value as (prev: T) => T)(prev) : value;\n try {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.setItem(key, JSON.stringify(next));\n }\n } catch {\n // Quota exceeded or storage unavailable — state still updates in memory\n }\n return next;\n });\n },\n [key],\n );\n\n return [stored_value, set_value];\n}\n","// use_click_outside.ts — Fires `handler` when a pointer event lands outside\n// the element referenced by `ref`. Useful for closing dropdowns, popovers, etc.\n\n\"use client\";\n\nimport { type RefObject, useEffect } from \"react\";\n\n/**\n * Fires `handler` when the user clicks (or taps) outside the element bound to `ref`.\n * Attaches a `mousedown` listener on `document`; cleans up on unmount or dependency change.\n *\n * @param ref - React ref pointing to the element to watch.\n * @param handler - Callback invoked when a click outside is detected.\n *\n * @example\n * const panel_ref = useRef<HTMLDivElement>(null);\n * useClickOutside(panel_ref, () => setOpen(false));\n * return <div ref={panel_ref}>...</div>;\n */\nexport function useClickOutside<T extends HTMLElement>(\n ref: RefObject<T | null>,\n handler: () => void,\n): void {\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const handle_event = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node | null;\n if (!ref.current || !target) return;\n if (!ref.current.contains(target)) {\n handler();\n }\n };\n\n document.addEventListener(\"mousedown\", handle_event);\n document.addEventListener(\"touchstart\", handle_event);\n\n return () => {\n document.removeEventListener(\"mousedown\", handle_event);\n document.removeEventListener(\"touchstart\", handle_event);\n };\n }, [ref, handler]);\n}\n","// use_wake_lock.ts — Web Wake Lock API wrapper.\n// Prevents the screen from dimming or locking while the lock is held.\n// Returns null-safe helpers; `supported` is false in unsupported environments.\n\n\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface UseWakeLockResult {\n /** True when the Wake Lock API is available in this environment. */\n supported: boolean;\n /** True when a wake lock is currently held. */\n acquired: boolean;\n /** Request the screen wake lock. No-op if unsupported or already acquired. */\n request: () => Promise<void>;\n /** Release the currently held wake lock. No-op if not acquired. */\n release: () => Promise<void>;\n}\n\n/**\n * Web Wake Lock API wrapper. Prevents screen sleep while the lock is held.\n * Automatically reacquires the lock when the page becomes visible again\n * (e.g. after switching tabs), because the browser releases it on visibility change.\n *\n * Returns `supported: false` in environments that don't implement the API\n * (SSR, older browsers) — all other operations are no-ops in that case.\n *\n * @example\n * const { supported, acquired, request, release } = useWakeLock();\n * <button onClick={acquired ? release : request}>\n * {acquired ? \"Release lock\" : \"Keep screen on\"}\n * </button>\n */\nexport function useWakeLock(): UseWakeLockResult {\n const supported =\n typeof navigator !== \"undefined\" && \"wakeLock\" in navigator;\n\n const sentinel_ref = useRef<WakeLockSentinel | null>(null);\n const [acquired, set_acquired] = useState(false);\n\n const request = useCallback(async (): Promise<void> => {\n if (!supported || sentinel_ref.current) return;\n try {\n const sentinel = await (navigator as Navigator & { wakeLock: WakeLock }).wakeLock.request(\"screen\");\n sentinel.addEventListener(\"release\", () => {\n sentinel_ref.current = null;\n set_acquired(false);\n });\n sentinel_ref.current = sentinel;\n set_acquired(true);\n } catch {\n // AbortError if the page is not visible; NotAllowedError in some contexts\n }\n }, [supported]);\n\n const release = useCallback(async (): Promise<void> => {\n if (!sentinel_ref.current) return;\n try {\n await sentinel_ref.current.release();\n } catch {\n // Ignore — sentinel may already be released\n } finally {\n sentinel_ref.current = null;\n set_acquired(false);\n }\n }, []);\n\n // Reacquire when the tab becomes visible again (browser releases on hide)\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const handle_visibility = () => {\n if (document.visibilityState === \"visible\" && acquired && !sentinel_ref.current) {\n void request();\n }\n };\n\n document.addEventListener(\"visibilitychange\", handle_visibility);\n return () => document.removeEventListener(\"visibilitychange\", handle_visibility);\n }, [acquired, request]);\n\n // Release on unmount\n useEffect(() => {\n return () => {\n if (sentinel_ref.current) {\n void sentinel_ref.current.release().catch(() => undefined);\n sentinel_ref.current = null;\n }\n };\n }, []);\n\n return { supported, acquired, request, release };\n}\n","// use_fullscreen.ts — Fullscreen API wrapper.\n// Targets an optional element ref, or document.documentElement by default.\n// SSR-safe; no-ops when the API is unavailable.\n\n\"use client\";\n\nimport { type RefObject, useCallback, useEffect, useState } from \"react\";\n\nexport interface UseFullscreenResult {\n /** True when the targeted element (or document) is currently fullscreen. */\n isFullscreen: boolean;\n /** Request fullscreen. No-op if already fullscreen or unsupported. */\n enter: () => Promise<void>;\n /** Exit fullscreen. No-op if not fullscreen or unsupported. */\n exit: () => Promise<void>;\n /** Toggle between fullscreen and normal. */\n toggle: () => Promise<void>;\n}\n\n/**\n * Fullscreen API wrapper.\n *\n * @param elementRef - Optional ref to the element to fullscreen.\n * Defaults to `document.documentElement` when omitted.\n *\n * @example\n * const container_ref = useRef<HTMLDivElement>(null);\n * const { isFullscreen, toggle } = useFullscreen(container_ref);\n * return <div ref={container_ref}><button onClick={toggle}>Fullscreen</button></div>;\n */\nexport function useFullscreen(\n elementRef?: RefObject<HTMLElement | null>,\n): UseFullscreenResult {\n const [is_fullscreen, set_is_fullscreen] = useState(false);\n\n // Sync state with actual fullscreen changes (e.g. user pressed Escape)\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const handle_change = () => {\n set_is_fullscreen(!!document.fullscreenElement);\n };\n\n document.addEventListener(\"fullscreenchange\", handle_change);\n // Initial sync in case the element was already fullscreen at mount\n set_is_fullscreen(!!document.fullscreenElement);\n\n return () => document.removeEventListener(\"fullscreenchange\", handle_change);\n }, []);\n\n const get_target = useCallback((): Element => {\n return (elementRef?.current ?? document.documentElement) as Element;\n }, [elementRef]);\n\n const enter = useCallback(async (): Promise<void> => {\n if (typeof document === \"undefined\" || !document.documentElement.requestFullscreen) return;\n if (document.fullscreenElement) return;\n try {\n await get_target().requestFullscreen();\n } catch {\n // SecurityError or user gesture requirement not met\n }\n }, [get_target]);\n\n const exit = useCallback(async (): Promise<void> => {\n if (typeof document === \"undefined\") return;\n if (!document.fullscreenElement) return;\n try {\n await document.exitFullscreen();\n } catch {\n // Silently ignore\n }\n }, []);\n\n const toggle = useCallback(async (): Promise<void> => {\n if (document.fullscreenElement) {\n await exit();\n } else {\n await enter();\n }\n }, [enter, exit]);\n\n return { isFullscreen: is_fullscreen, enter, exit, toggle };\n}\n","\"use client\";\n\n/**\n * Internal kanban card shell. Wraps the consumer's renderCard output with:\n * - useSortable attributes/listeners (whole card is the drag handle)\n * - Priority-tinted left border via CSS custom property\n * - Keyboard-focusable + ARIA hints for screen readers\n *\n * Not exported from src/index.ts — consumers compose via HazoUiKanban's\n * `renderCard` prop, not by mounting this component directly.\n */\n\nimport * as React from \"react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Pencil } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport type { KanbanItem } from \"./types\";\n\ninterface KanbanCardProps {\n item: KanbanItem;\n renderCard: (item: KanbanItem) => React.ReactNode;\n /** Visual hint when this card is the active drag (rendered into DragOverlay). */\n dragging?: boolean;\n cardClassName?: string;\n /** When true and onEditRequest is provided, show the pencil overlay. */\n showEdit?: boolean;\n /** Called when the user clicks the pencil. */\n onEditRequest?: (item: KanbanItem) => void;\n}\n\nexport function KanbanCard({\n item,\n renderCard,\n dragging = false,\n cardClassName,\n showEdit = false,\n onEditRequest,\n}: KanbanCardProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: item.id, data: { columnKey: item.columnKey } });\n\n const priority_var = item.priority\n ? `--hazo-kanban-priority-${String(item.priority).toLowerCase()}`\n : null;\n\n const style: React.CSSProperties = {\n transform: CSS.Transform.toString(transform),\n transition,\n backgroundColor: \"hsl(var(--hazo-kanban-card-bg))\",\n border: `1px solid hsl(var(--hazo-kanban-card-border))`,\n borderLeft: priority_var\n ? `4px solid hsl(var(${priority_var}))`\n : `1px solid hsl(var(--hazo-kanban-card-border))`,\n opacity: isDragging && !dragging ? 0.4 : 1,\n cursor: \"grab\",\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n \"cls_hazo_kanban_card group relative rounded-md p-3 mb-2 select-none\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n dragging && \"cls_hazo_kanban_card_overlay shadow-lg\",\n cardClassName,\n )}\n {...attributes}\n {...listeners}\n role=\"button\"\n tabIndex={0}\n aria-roledescription=\"draggable card\"\n aria-grabbed={isDragging}\n >\n {showEdit && onEditRequest && !dragging && (\n <button\n type=\"button\"\n onPointerDown={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation();\n onEditRequest(item);\n }}\n aria-label={`Edit ${item.id}`}\n className={cn(\n \"cls_hazo_kanban_card_edit absolute top-1.5 right-1.5\",\n \"p-1 rounded-md text-muted-foreground hover:text-foreground hover:bg-accent\",\n \"opacity-0 group-hover:opacity-100 group-focus-within:opacity-100\",\n \"focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"transition-opacity duration-150\",\n )}\n tabIndex={0}\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </button>\n )}\n {renderCard(item)}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * Internal kanban column shell. Renders the column header (title + count\n * badge), wraps cards in a SortableContext, and acts as a useDroppable\n * target so empty columns still accept drops.\n *\n * Not exported from src/index.ts.\n */\n\nimport * as React from \"react\";\nimport { useDroppable } from \"@dnd-kit/core\";\nimport {\n SortableContext,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { cn } from \"../../lib/utils\";\nimport { KanbanCard } from \"./kanban_card\";\nimport type { KanbanColumn as KanbanColumnType, KanbanItem } from \"./types\";\n\ninterface KanbanColumnComponentProps {\n column: KanbanColumnType;\n items: KanbanItem[];\n renderCard: (item: KanbanItem) => React.ReactNode;\n emptyColumn: React.ReactNode;\n cardClassName?: string;\n showEdit?: boolean;\n onEditRequest?: (item: KanbanItem) => void;\n}\n\nexport function KanbanColumn({\n column,\n items,\n renderCard,\n emptyColumn,\n cardClassName,\n showEdit,\n onEditRequest,\n}: KanbanColumnComponentProps) {\n const { setNodeRef, isOver } = useDroppable({\n id: `column:${column.key}`,\n data: { columnKey: column.key, isColumn: true },\n });\n\n return (\n <div\n ref={setNodeRef}\n className={cn(\n \"cls_hazo_kanban_column flex flex-col rounded-md p-2\",\n isOver && \"cls_hazo_kanban_column_over bg-accent/30 ring-2 ring-ring/40\",\n )}\n >\n <div className=\"cls_hazo_kanban_column_head flex items-center justify-between mb-2 px-1 text-xs uppercase tracking-wider text-muted-foreground\">\n <span className=\"cls_hazo_kanban_column_title\">{column.title}</span>\n <span className=\"cls_hazo_kanban_column_count rounded-full bg-muted px-2 py-0.5 text-foreground\">\n {items.length}\n </span>\n </div>\n <SortableContext\n items={items.map((i) => i.id)}\n strategy={verticalListSortingStrategy}\n >\n <div className=\"cls_hazo_kanban_column_body flex-1 min-h-[40px]\">\n {items.length === 0 ? (\n <div className=\"cls_hazo_kanban_column_empty text-xs text-muted-foreground py-2 px-1\">\n {emptyColumn}\n </div>\n ) : (\n items.map((item) => (\n <KanbanCard\n key={item.id}\n item={item}\n renderCard={renderCard}\n cardClassName={cardClassName}\n showEdit={showEdit}\n onEditRequest={onEditRequest}\n />\n ))\n )}\n </div>\n </SortableContext>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * KanbanEditor — internal Dialog + form component invoked when the user\n * clicks the pencil icon on a card.\n *\n * Three rendering modes:\n * 1. renderBody provided → consumer's render-prop fills the body\n * 2. fields provided → library renders one row per field declaration\n * 3. neither → library auto-detects string fields on the item\n * and appends a Status row at the end\n *\n * Built on HazoUiDialog so we inherit the standardized header/footer,\n * accessibility (DialogTitle + DialogDescription pair), and the priority-\n * tinted header bar option.\n *\n * The orchestrator owns the \"which item is being edited\" state and the\n * onSave callback. This component owns the draft, saving, and error state\n * so keystrokes don't re-render the orchestrator.\n *\n * Not exported from src/index.ts — consumers interact via HazoUiKanban props.\n */\n\nimport * as React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { Input } from \"../ui/input\";\nimport { Textarea } from \"../ui/textarea\";\nimport { Checkbox } from \"../ui/checkbox\";\nimport { Label } from \"../ui/label\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport { HazoUiDialog } from \"../hazo_ui_dialog\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n KanbanColumn,\n KanbanEditorCtx,\n KanbanEditorField,\n KanbanItem,\n KanbanPriority,\n KanbanSaveEvent,\n} from \"./types\";\n\nconst DEFAULT_PRIORITIES: KanbanPriority[] = [\"P0\", \"P1\", \"P2\", \"P3\"];\n\n/**\n * \"dueDate\" -> \"Due Date\"; \"due_date\" -> \"Due Date\"; \"title\" -> \"Title\".\n */\nfunction humanize(key: string): string {\n return key\n .replace(/[_\\-]+/g, \" \")\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/\\s+/g, \" \")\n .trim()\n .split(\" \")\n .map((w) => (w ? w[0].toUpperCase() + w.slice(1) : w))\n .join(\" \");\n}\n\n/**\n * Auto-detect string fields on an item, skipping kanban-internal keys\n * (id, columnKey, priority). Numbers, booleans, arrays, and objects are\n * intentionally skipped — consumers can opt-in via the editorFields prop.\n *\n * If `columns` is provided, a Status field bound to `columnKey` is appended\n * at the end so users can move the card between columns from the editor.\n */\nfunction auto_detect_fields(\n item: KanbanItem,\n columns: KanbanColumn[],\n): KanbanEditorField[] {\n const skip = new Set([\"id\", \"columnKey\", \"priority\"]);\n const out: KanbanEditorField[] = [];\n for (const [key, value] of Object.entries(item)) {\n if (skip.has(key)) continue;\n if (typeof value === \"string\") {\n out.push({ key, type: \"text\" });\n }\n }\n if (columns.length > 0) {\n out.push({ key: \"columnKey\", type: \"status\", label: \"Status\" });\n }\n return out;\n}\n\ninterface KanbanEditorProps<T extends KanbanItem = KanbanItem> {\n /** The item being edited. Null means dialog closed. */\n item: T | null;\n /** All columns the kanban knows about — used by `type: 'status'`. */\n columns?: KanbanColumn[];\n /** Declarative field schema. If undefined, auto-detect. */\n fields?: KanbanEditorField[];\n /** Priority pool for type:'priority'. */\n priorities?: KanbanPriority[];\n /** Dialog title function. */\n titleFn?: (item: T) => string;\n /** Body override. */\n renderBody?: (item: T, ctx: KanbanEditorCtx<T>) => React.ReactNode;\n /** Hide the library's Save/Cancel footer (only honored with renderBody). */\n hideFooter?: boolean;\n /** Save handler. */\n onSave?: (event: KanbanSaveEvent<T>) => void | Promise<void>;\n /** Close handler — orchestrator clears editing_item_id. */\n onClose: () => void;\n}\n\nexport function KanbanEditor<T extends KanbanItem = KanbanItem>({\n item,\n columns,\n fields,\n priorities,\n titleFn,\n renderBody,\n hideFooter = false,\n onSave,\n onClose,\n}: KanbanEditorProps<T>) {\n // Draft is editor-local — orchestrator only knows which item is being\n // edited, not the keystroke-by-keystroke draft state.\n const [draft, set_draft] = React.useState<T | null>(item);\n const [saving, set_saving] = React.useState(false);\n const [error, set_error] = React.useState<string | null>(null);\n\n // Re-seed draft when a different item starts editing. Compare on id\n // (not reference) so the consumer can pass a fresh object each render\n // without re-seeding.\n const item_id = item?.id ?? null;\n React.useEffect(() => {\n set_draft(item);\n set_error(null);\n set_saving(false);\n }, [item_id]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const resolved_columns = columns ?? [];\n const resolved_priorities = priorities ?? DEFAULT_PRIORITIES;\n\n // Resolve which fields to render.\n const resolved_fields = React.useMemo<KanbanEditorField[]>(() => {\n if (fields) return fields;\n if (!item) return [];\n return auto_detect_fields(item, resolved_columns);\n }, [fields, item, resolved_columns]);\n\n // Required-field gating (only meaningful for text/textarea/number).\n const required_keys = React.useMemo(\n () =>\n resolved_fields\n .filter(\n (f) =>\n f.required &&\n (f.type === \"text\" || f.type === \"textarea\" || f.type === \"number\"),\n )\n .map((f) => f.key),\n [resolved_fields],\n );\n\n const all_required_filled = React.useMemo(() => {\n if (!draft) return false;\n for (const key of required_keys) {\n const v = (draft as unknown as Record<string, unknown>)[key];\n if (v === undefined || v === null || v === \"\") return false;\n if (typeof v === \"string\" && v.trim() === \"\") return false;\n }\n return true;\n }, [draft, required_keys]);\n\n const is_dirty = React.useMemo(() => {\n if (!draft || !item) return false;\n try {\n return JSON.stringify(draft) !== JSON.stringify(item);\n } catch {\n return draft !== item;\n }\n }, [draft, item]);\n\n const handle_save = React.useCallback(async () => {\n if (!draft || !item) return;\n if (saving) return;\n set_error(null);\n if (!onSave) {\n onClose();\n return;\n }\n const result = onSave({ itemId: item.id, item, next: draft });\n if (result && typeof (result as Promise<void>).then === \"function\") {\n set_saving(true);\n try {\n await result;\n set_saving(false);\n onClose();\n } catch (err) {\n set_saving(false);\n const message = err instanceof Error ? err.message : String(err);\n set_error(message);\n }\n } else {\n onClose();\n }\n }, [draft, item, onSave, onClose, saving]);\n\n const ctx: KanbanEditorCtx<T> = {\n draft: (draft ?? item) as T,\n setDraft: (next) => {\n set_draft((prev) => {\n const base = prev ?? item;\n if (!base) return prev;\n if (typeof next === \"function\") {\n return (next as (p: T) => T)(base as T);\n }\n return next as T;\n });\n },\n save: handle_save,\n close: onClose,\n saving,\n error,\n isDirty: is_dirty,\n };\n\n const open = item !== null;\n const title = item && titleFn ? titleFn(item) : item ? `Edit ${item.id}` : \"\";\n\n // Priority-tinted header bar for visual continuity with the kanban grid.\n const priority_var = item?.priority\n ? `--hazo-kanban-priority-${String(item.priority).toLowerCase()}`\n : null;\n const header_bar_color = priority_var\n ? `hsl(var(${priority_var}))`\n : undefined;\n\n // Footer wiring: HazoUiDialog renders Save/Cancel by default. When the\n // consumer supplies a renderBody AND requests hideFooter, we pass an\n // empty footer slot so their custom buttons (via ctx.save/ctx.close) are\n // the only controls. In all other cases, HazoUiDialog's default footer\n // is correct.\n const use_default_footer = !(renderBody && hideFooter);\n\n return (\n <HazoUiDialog\n open={open}\n onOpenChange={(o) => {\n if (!o && !saving) onClose();\n }}\n title={title}\n description=\"Update card details below.\"\n sizeWidth=\"min(90vw, 480px)\"\n openAnimation=\"none\"\n closeAnimation=\"none\"\n headerBar={!!priority_var}\n headerBarColor={header_bar_color}\n contentClassName={cn(\"cls_hazo_kanban_editor\", priority_var && \"pt-0\")}\n actionButtonText={saving ? \"Saving…\" : \"Save\"}\n actionButtonIcon={saving ? undefined : <Check className=\"h-4 w-4 mr-2\" />}\n actionButtonLoading={saving}\n actionButtonDisabled={!is_dirty || !all_required_filled || saving}\n cancelButtonText=\"Cancel\"\n showCancelButton={true}\n onConfirm={handle_save}\n onCancel={onClose}\n footerContent={use_default_footer ? undefined : <span />}\n >\n <div className=\"cls_hazo_kanban_editor_body flex flex-col gap-4\">\n {item && draft && renderBody ? (\n renderBody(item, ctx)\n ) : draft ? (\n resolved_fields.map((field) => (\n <KanbanEditorFieldRow\n key={field.key}\n field={field}\n draft={draft as unknown as KanbanItem}\n setDraft={(updater) =>\n set_draft((prev) =>\n prev\n ? (updater(prev as unknown as KanbanItem) as unknown as T)\n : prev,\n )\n }\n priorities={resolved_priorities}\n columns={resolved_columns}\n />\n ))\n ) : null}\n\n {error && (\n <div\n className=\"cls_hazo_kanban_editor_error mt-1 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive\"\n role=\"alert\"\n >\n {error}\n </div>\n )}\n </div>\n </HazoUiDialog>\n );\n}\n\n/* ---------- Internal field row ---------- */\n\ninterface KanbanEditorFieldRowProps {\n field: KanbanEditorField;\n draft: KanbanItem;\n setDraft: (updater: (prev: KanbanItem) => KanbanItem) => void;\n priorities: KanbanPriority[];\n columns: KanbanColumn[];\n}\n\nfunction KanbanEditorFieldRow({\n field,\n draft,\n setDraft,\n priorities,\n columns,\n}: KanbanEditorFieldRowProps) {\n const id = `kanban-editor-${field.key}`;\n const label = field.label ?? humanize(field.key);\n const value = (draft as unknown as Record<string, unknown>)[field.key];\n\n const set_value = (next_value: unknown) => {\n setDraft((prev) => ({ ...prev, [field.key]: next_value }) as KanbanItem);\n };\n\n const required_marker_shown =\n field.required &&\n (field.type === \"text\" ||\n field.type === \"textarea\" ||\n field.type === \"number\");\n\n return (\n <div className={cn(\"cls_hazo_kanban_editor_field flex flex-col gap-1.5\")}>\n <Label htmlFor={id} className=\"text-xs font-medium text-muted-foreground\">\n {label}\n {required_marker_shown && (\n <span className=\"text-destructive ml-0.5\">*</span>\n )}\n </Label>\n {field.type === \"text\" && (\n <Input\n id={id}\n value={typeof value === \"string\" ? value : \"\"}\n placeholder={field.placeholder}\n onChange={(e) => set_value(e.target.value)}\n />\n )}\n {field.type === \"textarea\" && (\n <Textarea\n id={id}\n value={typeof value === \"string\" ? value : \"\"}\n placeholder={field.placeholder}\n rows={3}\n onChange={(e) => set_value(e.target.value)}\n />\n )}\n {field.type === \"number\" && (\n <Input\n id={id}\n type=\"number\"\n value={\n typeof value === \"number\"\n ? value\n : value === \"\" || value == null\n ? \"\"\n : Number(value) || 0\n }\n placeholder={field.placeholder}\n onChange={(e) =>\n set_value(e.target.value === \"\" ? undefined : Number(e.target.value))\n }\n />\n )}\n {field.type === \"checkbox\" && (\n <Checkbox\n id={id}\n checked={!!value}\n onCheckedChange={(checked) => set_value(checked === true)}\n />\n )}\n {field.type === \"select\" && (\n <Select\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={set_value}\n >\n <SelectTrigger id={id}>\n <SelectValue\n placeholder={field.placeholder ?? `Select ${label}…`}\n />\n </SelectTrigger>\n <SelectContent>\n {(field.options ?? []).map((opt) => (\n <SelectItem key={opt} value={opt}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {field.type === \"priority\" && (\n <Select\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={set_value}\n >\n <SelectTrigger id={id}>\n <SelectValue\n placeholder={field.placeholder ?? \"Select priority…\"}\n />\n </SelectTrigger>\n <SelectContent>\n {priorities.map((p) => (\n <SelectItem key={p} value={p}>\n {p}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {field.type === \"status\" && (\n <Select\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={set_value}\n >\n <SelectTrigger id={id}>\n <SelectValue\n placeholder={field.placeholder ?? \"Select status…\"}\n />\n </SelectTrigger>\n <SelectContent>\n {columns.map((col) => (\n <SelectItem key={col.key} value={col.key}>\n {col.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * HazoUiKanbanFilter - controlled-or-uncontrolled filter bar\n *\n * Decoupled from HazoUiKanban. Emits KanbanFilterValue via onChange; consumer\n * applies it to their items (typically via applyKanbanFilter) before passing\n * to the board.\n */\n\nimport * as React from \"react\";\nimport { X } from \"lucide-react\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { ToggleGroup, ToggleGroupItem } from \"../ui/toggle-group\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n KanbanFilterValue,\n KanbanPriority,\n HazoUiKanbanFilterProps,\n} from \"./types\";\n\nconst EMPTY_FILTER: KanbanFilterValue = {\n search: \"\",\n categories: [],\n priority: null,\n};\n\nexport function HazoUiKanbanFilter({\n search = true,\n searchPlaceholder = \"Search...\",\n categories,\n priorities,\n value,\n defaultValue,\n onChange,\n className,\n}: HazoUiKanbanFilterProps) {\n const is_controlled = value !== undefined;\n const [internal, set_internal] = React.useState<KanbanFilterValue>(\n defaultValue ?? EMPTY_FILTER,\n );\n const current = is_controlled ? (value as KanbanFilterValue) : internal;\n\n const update = React.useCallback(\n (next: KanbanFilterValue) => {\n if (!is_controlled) set_internal(next);\n onChange?.(next);\n },\n [is_controlled, onChange],\n );\n\n const has_active =\n current.search.length > 0 ||\n current.categories.length > 0 ||\n current.priority !== null;\n\n return (\n <div\n className={cn(\n \"cls_hazo_kanban_filter flex flex-wrap items-center gap-3 p-2\",\n className,\n )}\n >\n {search && (\n <Input\n value={current.search}\n onChange={(e) =>\n update({ ...current, search: e.target.value })\n }\n placeholder={searchPlaceholder}\n className=\"cls_hazo_kanban_filter_search w-full sm:w-64\"\n />\n )}\n\n {categories && categories.length > 0 && (\n <ToggleGroup\n type=\"multiple\"\n value={current.categories}\n onValueChange={(cats: string[]) =>\n update({ ...current, categories: cats })\n }\n className=\"cls_hazo_kanban_filter_categories flex flex-wrap gap-1\"\n >\n {categories.map((cat) => (\n <ToggleGroupItem\n key={cat}\n value={cat}\n size=\"sm\"\n className=\"cls_hazo_kanban_filter_category_chip\"\n >\n {cat}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )}\n\n {priorities && priorities.length > 0 && (\n <ToggleGroup\n type=\"single\"\n value={current.priority ?? \"\"}\n onValueChange={(p: string) =>\n update({\n ...current,\n priority: p ? (p as KanbanPriority) : null,\n })\n }\n className=\"cls_hazo_kanban_filter_priority flex gap-1\"\n >\n {priorities.map((p) => (\n <ToggleGroupItem\n key={p}\n value={p}\n size=\"sm\"\n className=\"cls_hazo_kanban_filter_priority_chip\"\n >\n {p}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )}\n\n {has_active && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => update(EMPTY_FILTER)}\n className=\"cls_hazo_kanban_filter_clear\"\n >\n <X className=\"h-4 w-4 mr-1\" />\n Clear\n </Button>\n )}\n </div>\n );\n}\n","/**\n * Pure helper: filters KanbanItem[] by search / categories / priority.\n *\n * - search: case-insensitive substring against any string-typed field of the item.\n * - categories: keep items whose item.category (string) is in the list.\n * - priority: exact equality on item.priority.\n *\n * Consumers needing different filter logic should write their own — this is\n * a convenience export, not the public contract for filtering.\n */\n\nimport type { KanbanFilterValue, KanbanItem } from \"./types\";\n\nexport function applyKanbanFilter<T extends KanbanItem>(\n items: T[],\n filter: KanbanFilterValue,\n): T[] {\n const search = filter.search.trim().toLowerCase();\n\n return items.filter((item) => {\n if (filter.priority && item.priority !== filter.priority) {\n return false;\n }\n\n if (filter.categories.length > 0) {\n const cat = (item as unknown as { category?: unknown }).category;\n if (typeof cat !== \"string\" || !filter.categories.includes(cat)) {\n return false;\n }\n }\n\n if (search) {\n const haystack = Object.values(item as unknown as Record<string, unknown>)\n .filter((v): v is string => typeof v === \"string\")\n .join(\" \")\n .toLowerCase();\n if (!haystack.includes(search)) {\n return false;\n }\n }\n\n return true;\n });\n}\n","\"use client\";\n\n/**\n * HazoUiKanban - drag-drop kanban primitive\n *\n * Wraps @dnd-kit/core + @dnd-kit/sortable. Consumers see only HazoUi*\n * types — no @dnd-kit types leak through the public surface.\n *\n * State model: controlled `items` + library overlay. The consumer owns\n * the `items` array. While a drag is being committed (e.g. an async\n * PATCH), the library tracks an \"overlay\" position internally so the\n * card moves immediately. On commit, the consumer updates `items` and\n * the overlay clears naturally. On failure, the consumer calls\n * event.revert() and the overlay entry is dropped.\n */\n\nimport * as React from \"react\";\nimport {\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n closestCorners,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n} from \"@dnd-kit/core\";\nimport { sortableKeyboardCoordinates } from \"@dnd-kit/sortable\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../ui/tabs\";\nimport { useMediaQuery } from \"../../hooks/use_media_query\";\nimport { cn } from \"../../lib/utils\";\nimport { KanbanCard } from \"./kanban_card\";\nimport { KanbanColumn as KanbanColumnView } from \"./kanban_column\";\nimport { KanbanEditor } from \"./kanban_editor\";\nimport type {\n KanbanAnnouncements,\n KanbanItem,\n KanbanMoveEvent,\n KanbanMoveHandle,\n KanbanReorderEvent,\n HazoUiKanbanProps,\n} from \"./types\";\n\n/* ---------- Re-exports for convenience (consumers also import from hazo_ui) ---------- */\nexport { HazoUiKanbanFilter } from \"./kanban_filter\";\nexport { applyKanbanFilter } from \"./apply_kanban_filter\";\nexport type {\n KanbanAnnouncements,\n KanbanColumn,\n KanbanEditorCtx,\n KanbanEditorField,\n KanbanEditorFieldType,\n KanbanFilterValue,\n KanbanItem,\n KanbanMoveEvent,\n KanbanMoveHandle,\n KanbanPriority,\n KanbanReorderEvent,\n KanbanSaveEvent,\n HazoUiKanbanFilterProps,\n HazoUiKanbanProps,\n} from \"./types\";\n\n/* ---------- Internal overlay state ---------- */\n\ninterface OverlayPosition {\n columnKey: string;\n /** Absolute index within the destination column, computed at drop time. */\n index: number;\n}\n\n/* ---------- Default announcements ---------- */\n\nfunction default_announcements<T extends KanbanItem>(\n itemLabel: (item: T) => string,\n): KanbanAnnouncements {\n return {\n onDragStart: ({ item, fromColumn }) =>\n `Picked up ${itemLabel(item as T)}. Currently in ${fromColumn}. Use arrow keys to choose a different column. Press space to drop, escape to cancel.`,\n onDragOver: ({ item, overColumn }) =>\n overColumn ? `${itemLabel(item as T)} over ${overColumn}.` : \"\",\n onDragEnd: ({ item, fromColumn, toColumn, newIndex }) =>\n fromColumn === toColumn\n ? `${itemLabel(item as T)} reordered to position ${newIndex + 1} in ${toColumn}.`\n : `${itemLabel(item as T)} dropped in ${toColumn}, position ${newIndex + 1}.`,\n onDragCancel: ({ item, fromColumn }) =>\n `Movement cancelled. ${itemLabel(item as T)} returned to ${fromColumn}.`,\n };\n}\n\n/* ---------- Helpers ---------- */\n\nfunction group_items_by_column<T extends KanbanItem>(\n items: T[],\n overlay: Map<string, OverlayPosition>,\n columns: { key: string }[],\n): Map<string, T[]> {\n const out = new Map<string, T[]>();\n for (const col of columns) out.set(col.key, []);\n\n // Apply overlay: re-route items whose id is in the overlay to the overlay's\n // columnKey, but remember the index for ordering.\n const overlay_inserts: Map<string, { item: T; index: number }[]> = new Map();\n for (const col of columns) overlay_inserts.set(col.key, []);\n\n for (const item of items) {\n const ov = overlay.get(item.id);\n if (ov) {\n const bucket = overlay_inserts.get(ov.columnKey);\n if (bucket) {\n bucket.push({ item, index: ov.index });\n }\n } else {\n const bucket = out.get(item.columnKey);\n if (bucket) bucket.push(item);\n }\n }\n\n // Splice overlay items into their target column at the recorded index.\n for (const col of columns) {\n const inserts = overlay_inserts.get(col.key) ?? [];\n inserts.sort((a, b) => a.index - b.index);\n const arr = out.get(col.key) ?? [];\n for (const { item, index } of inserts) {\n const at = Math.max(0, Math.min(index, arr.length));\n arr.splice(at, 0, item);\n }\n out.set(col.key, arr);\n }\n\n return out;\n}\n\n/* ---------- HazoUiKanban ---------- */\n\nexport function HazoUiKanban<T extends KanbanItem = KanbanItem>({\n columns,\n items,\n renderCard,\n onMove,\n onReorder,\n mobileBreakpoint = 640,\n announcements,\n emptyColumn = \"—\",\n className,\n cardClassName,\n itemLabel,\n editorFields,\n editorPriorities,\n editorTitle,\n renderCardEditor,\n hideEditorFooter,\n onCardSave,\n disableEdit = false,\n}: HazoUiKanbanProps<T>) {\n const label_fn = React.useCallback(\n (item: T) => (itemLabel ? itemLabel(item) : item.id),\n [itemLabel],\n );\n\n // Stable per-instance ID so dnd-kit's internal aria-describedby IDs are\n // deterministic across SSR/CSR. Without this, multiple boards on one page\n // hydrate with mismatched \"DndDescribedBy-N\" counters between server and\n // client. React.useId() produces a stable, SSR-safe identifier.\n const dnd_context_id = React.useId();\n\n const [overlay, set_overlay] = React.useState<Map<string, OverlayPosition>>(\n new Map(),\n );\n const [active_id, set_active_id] = React.useState<string | null>(null);\n const [active_tab, set_active_tab] = React.useState<string>(columns[0]?.key ?? \"\");\n\n // Editor state. editing_item drives the dialog: non-null = open. We re-\n // resolve from items so the editor sees the freshest typed item on each\n // request (cards pass us a KanbanItem because the sub-component doesn't\n // carry T).\n const [editing_item, set_editing_item] = React.useState<T | null>(null);\n\n const show_edit = !disableEdit && typeof onCardSave === \"function\";\n\n const handle_edit_request = React.useCallback(\n (it: KanbanItem) => {\n const typed = items.find((x) => x.id === it.id);\n if (typed) set_editing_item(typed);\n },\n [items],\n );\n\n const handle_editor_close = React.useCallback(() => {\n set_editing_item(null);\n }, []);\n\n // Clear overlay entries that the consumer has now committed in `items`.\n React.useEffect(() => {\n if (overlay.size === 0) return;\n set_overlay((prev) => {\n let changed = false;\n const next = new Map(prev);\n for (const [item_id, pos] of prev.entries()) {\n const item = items.find((i) => i.id === item_id);\n if (item && item.columnKey === pos.columnKey) {\n next.delete(item_id);\n changed = true;\n }\n }\n return changed ? next : prev;\n });\n }, [items, overlay]);\n\n // Group items per column (with overlay applied) — recomputed on every render.\n const grouped = React.useMemo(\n () => group_items_by_column(items, overlay, columns),\n [items, overlay, columns],\n );\n\n const find_item = React.useCallback(\n (id: string): T | undefined => items.find((i) => i.id === id),\n [items],\n );\n\n // dnd-kit sensors. PointerSensor with 5px activation distance; KeyboardSensor\n // wired through sortableKeyboardCoordinates (per @dnd-kit/accessibility).\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n\n /* ----- Announcements: merge consumer overrides over defaults ----- */\n\n const merged_announcements = React.useMemo<KanbanAnnouncements>(() => {\n const defaults = default_announcements<T>(label_fn);\n return {\n onDragStart: announcements?.onDragStart ?? defaults.onDragStart,\n onDragOver: announcements?.onDragOver ?? defaults.onDragOver,\n onDragEnd: announcements?.onDragEnd ?? defaults.onDragEnd,\n onDragCancel: announcements?.onDragCancel ?? defaults.onDragCancel,\n };\n }, [announcements, label_fn]);\n\n const dnd_announcements = React.useMemo(\n () => ({\n onDragStart({ active }: { active: { id: string | number } }) {\n const id = String(active.id);\n const item = find_item(id);\n if (!item) return \"\";\n const col = columns.find((c) => c.key === item.columnKey);\n return merged_announcements.onDragStart({\n item,\n fromColumn: col?.title ?? item.columnKey,\n });\n },\n onDragOver({\n active,\n over,\n }: {\n active: { id: string | number };\n over: { id: string | number; data?: { current?: { columnKey?: string } } } | null;\n }) {\n const id = String(active.id);\n const item = find_item(id);\n if (!item) return \"\";\n const over_col_key = over\n ? (over.data?.current?.columnKey as string | undefined) ??\n String(over.id).replace(/^column:/, \"\")\n : null;\n const col = over_col_key\n ? columns.find((c) => c.key === over_col_key)\n : null;\n return merged_announcements.onDragOver({\n item,\n overColumn: col?.title ?? null,\n });\n },\n onDragEnd({\n active,\n over,\n }: {\n active: { id: string | number };\n over: { id: string | number; data?: { current?: { columnKey?: string } } } | null;\n }) {\n const id = String(active.id);\n const item = find_item(id);\n if (!item) return \"\";\n const from_col = columns.find((c) => c.key === item.columnKey);\n const over_col_key = over\n ? (over.data?.current?.columnKey as string | undefined) ??\n String(over.id).replace(/^column:/, \"\")\n : null;\n const to_col = over_col_key\n ? columns.find((c) => c.key === over_col_key) ?? from_col\n : from_col;\n const target = over_col_key\n ? grouped.get(over_col_key) ?? []\n : grouped.get(item.columnKey) ?? [];\n const new_index =\n over && String(over.id) !== `column:${over_col_key}`\n ? target.findIndex((it) => it.id === String(over.id))\n : target.length;\n return merged_announcements.onDragEnd({\n item,\n fromColumn: from_col?.title ?? item.columnKey,\n toColumn: to_col?.title ?? item.columnKey,\n newIndex: Math.max(0, new_index),\n });\n },\n onDragCancel({ active }: { active: { id: string | number } }) {\n const id = String(active.id);\n const item = find_item(id);\n if (!item) return \"\";\n const col = columns.find((c) => c.key === item.columnKey);\n return merged_announcements.onDragCancel({\n item,\n fromColumn: col?.title ?? item.columnKey,\n });\n },\n }),\n [find_item, columns, grouped, merged_announcements],\n );\n\n /* ----- Drag handlers ----- */\n\n const handle_drag_start = React.useCallback((event: DragStartEvent) => {\n set_active_id(String(event.active.id));\n }, []);\n\n const make_revert_handle = React.useCallback(\n (item_id: string): KanbanMoveHandle => ({\n revert: () => {\n set_overlay((prev) => {\n if (!prev.has(item_id)) return prev;\n const next = new Map(prev);\n next.delete(item_id);\n return next;\n });\n },\n }),\n [],\n );\n\n const handle_drag_end = React.useCallback(\n (event: DragEndEvent) => {\n const active_id_str = String(event.active.id);\n set_active_id(null);\n const item = find_item(active_id_str);\n if (!item) return;\n if (!event.over) return;\n\n const over_id = String(event.over.id);\n const over_data = event.over.data?.current as\n | { columnKey?: string; isColumn?: boolean }\n | undefined;\n const dest_column_key =\n over_data?.columnKey ?? over_id.replace(/^column:/, \"\");\n const dest_column = columns.find((c) => c.key === dest_column_key);\n if (!dest_column) return;\n\n // accepts() gate\n if (dest_column.accepts && !dest_column.accepts(item)) return;\n\n // Compute destination index. If dropped on a card, use its index in dest;\n // if dropped on the column shell (empty), append.\n const dest_items_pre_overlay = grouped.get(dest_column_key) ?? [];\n let new_index: number;\n if (over_data?.isColumn) {\n new_index = dest_items_pre_overlay.length;\n } else {\n const idx = dest_items_pre_overlay.findIndex((i) => i.id === over_id);\n new_index = idx === -1 ? dest_items_pre_overlay.length : idx;\n }\n\n const handle = make_revert_handle(active_id_str);\n\n if (item.columnKey === dest_column_key) {\n // Same-column reorder\n if (active_id_str === over_id) return;\n set_overlay((prev) => {\n const next = new Map(prev);\n next.set(active_id_str, {\n columnKey: dest_column_key,\n index: new_index,\n });\n return next;\n });\n const reorder_event: KanbanReorderEvent<T> = {\n itemId: active_id_str,\n item: item,\n columnKey: dest_column_key,\n newIndex: new_index,\n revert: handle.revert,\n };\n onReorder?.(reorder_event);\n return;\n }\n\n // Cross-column move\n set_overlay((prev) => {\n const next = new Map(prev);\n next.set(active_id_str, {\n columnKey: dest_column_key,\n index: new_index,\n });\n return next;\n });\n const move_event: KanbanMoveEvent<T> = {\n itemId: active_id_str,\n item: item,\n fromColumn: item.columnKey,\n toColumn: dest_column_key,\n newIndex: new_index,\n revert: handle.revert,\n };\n onMove?.(move_event);\n },\n [find_item, columns, grouped, onMove, onReorder, make_revert_handle],\n );\n\n const handle_drag_cancel = React.useCallback(() => {\n set_active_id(null);\n }, []);\n\n /* ----- Render ----- */\n\n const active_item = active_id ? find_item(active_id) : null;\n\n // Layout switch:\n // - Default mobileBreakpoint (640): pure CSS via Tailwind sm:* utilities.\n // Both trees render server-side; CSS hides one. No hydration mismatch.\n // - Custom mobileBreakpoint: useMediaQuery drives a runtime branch.\n // SSR returns false → desktop renders first, may flip to mobile after\n // hydration. Both trees still render so the DndContext sees them.\n const is_custom_breakpoint = mobileBreakpoint !== 640;\n const is_mobile_via_query = useMediaQuery(\n `(max-width: ${Math.max(0, mobileBreakpoint - 1)}px)`,\n );\n\n const mobile_classes = is_custom_breakpoint\n ? is_mobile_via_query\n ? \"block\"\n : \"hidden\"\n : \"sm:hidden\";\n\n const desktop_classes = is_custom_breakpoint\n ? is_mobile_via_query\n ? \"hidden\"\n : \"grid\"\n : \"hidden sm:grid\";\n\n return (\n <DndContext\n id={dnd_context_id}\n sensors={sensors}\n collisionDetection={closestCorners}\n onDragStart={handle_drag_start}\n onDragEnd={handle_drag_end}\n onDragCancel={handle_drag_cancel}\n accessibility={{ announcements: dnd_announcements }}\n >\n <div className={cn(\"cls_hazo_kanban w-full\", className)}>\n {/* Mobile: tab strip */}\n <div className={cn(\"cls_hazo_kanban_mobile\", mobile_classes)}>\n <Tabs value={active_tab} onValueChange={set_active_tab}>\n <TabsList className=\"grid w-full\" style={{ gridTemplateColumns: `repeat(${columns.length}, 1fr)` }}>\n {columns.map((col) => {\n const count = (grouped.get(col.key) ?? []).length;\n return (\n <TabsTrigger key={col.key} value={col.key} className=\"flex flex-col gap-0.5\">\n <span className=\"text-xs\">{col.title}</span>\n <span className=\"text-[10px] text-muted-foreground\">{count}</span>\n </TabsTrigger>\n );\n })}\n </TabsList>\n {columns.map((col) => (\n <TabsContent key={col.key} value={col.key} className=\"mt-3\">\n <KanbanColumnView\n column={col}\n items={grouped.get(col.key) ?? []}\n renderCard={renderCard as (i: KanbanItem) => React.ReactNode}\n emptyColumn={emptyColumn}\n cardClassName={cardClassName}\n showEdit={show_edit}\n onEditRequest={handle_edit_request}\n />\n </TabsContent>\n ))}\n </Tabs>\n </div>\n\n {/* Desktop: column grid */}\n <div\n className={cn(\"cls_hazo_kanban_desktop gap-3\", desktop_classes)}\n style={{ gridTemplateColumns: `repeat(${columns.length}, minmax(0, 1fr))` }}\n >\n {columns.map((col) => (\n <KanbanColumnView\n key={col.key}\n column={col}\n items={grouped.get(col.key) ?? []}\n renderCard={renderCard as (i: KanbanItem) => React.ReactNode}\n emptyColumn={emptyColumn}\n cardClassName={cardClassName}\n showEdit={show_edit}\n onEditRequest={handle_edit_request}\n />\n ))}\n </div>\n\n <DragOverlay>\n {active_item ? (\n <KanbanCard\n item={active_item}\n renderCard={renderCard as (i: KanbanItem) => React.ReactNode}\n dragging\n cardClassName={cardClassName}\n />\n ) : null}\n </DragOverlay>\n </div>\n <KanbanEditor<T>\n item={editing_item}\n columns={columns}\n fields={editorFields}\n priorities={editorPriorities}\n titleFn={editorTitle}\n renderBody={renderCardEditor}\n hideFooter={hideEditorFooter}\n onSave={onCardSave}\n onClose={handle_editor_close}\n />\n </DndContext>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"cls_table_wrap relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n);\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n )\n);\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n);\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\"bg-muted/50 font-medium [&>tr]:last:border-b-0\", className)}\n {...props}\n />\n )\n);\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n )\n);\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n);\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n )\n);\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n);\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","\"use client\";\n\n/**\n * Mobile fallback for HazoUiTable. Renders a Card per row with the\n * first column as the title and the remaining columns as label/value\n * rows. Toolbar and pagination are rendered by the parent component.\n */\n\nimport * as React from \"react\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../ui/card\";\nimport { cn } from \"../../lib/utils\";\nimport type { TableColumn } from \"./types\";\n\ninterface TableMobileCardsProps<TRow extends object> {\n columns: TableColumn<TRow>[];\n rows: TRow[];\n getRowKey?: (row: TRow, index: number) => string | number;\n onRowClick?: (row: TRow, index: number) => void;\n renderCell: (column: TableColumn<TRow>, row: TRow, index: number) => React.ReactNode;\n}\n\nexport function TableMobileCards<TRow extends object>(\n props: TableMobileCardsProps<TRow>\n) {\n const { columns, rows, getRowKey, onRowClick, renderCell } = props;\n const [titleCol, ...restCols] = columns;\n if (!titleCol) return null;\n\n return (\n <div className=\"cls_hazo_ui_table_mobile_cards flex flex-col gap-3\">\n {rows.map((row, i) => {\n const interactionProps = onRowClick\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n className: \"cls_hazo_ui_table_mobile_card_clickable cursor-pointer\",\n onClick: () => onRowClick(row, i),\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(row, i);\n }\n },\n }\n : {};\n\n return (\n <Card\n key={getRowKey ? getRowKey(row, i) : i}\n {...interactionProps}\n >\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-base\">\n {renderCell(titleCol, row, i)}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"pt-0 space-y-1.5\">\n {restCols.map((c) => (\n <div\n key={c.key}\n className={cn(\n \"cls_hazo_ui_table_mobile_row flex items-center justify-between gap-3 text-sm\"\n )}\n >\n <span className=\"cls_hazo_ui_table_mobile_label text-muted-foreground\">\n {c.label}\n </span>\n <span className={cn(\"cls_hazo_ui_table_mobile_value\", c.className)}>\n {renderCell(c, row, i)}\n </span>\n </div>\n ))}\n </CardContent>\n </Card>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n TableColumn,\n TableFilter,\n TableSort,\n TableSortProp,\n HazoUiTableProps,\n} from \"./types\";\nimport type { FilterConfig } from \"../hazo_ui_multi_filter_dialog\";\n\nconst DEFAULT_DEBOUNCE_MS = 200;\n\n/* ============================================================\n * Public hook\n * ============================================================ */\n\nexport interface UseTableStateResult<TRow> {\n sort: TableSort;\n setSort: (sort: TableSort) => void;\n cycleHeaderSort: (key: string, append?: boolean) => void;\n\n filter: TableFilter;\n setFilter: (filter: TableFilter) => void;\n setSearch: (search: string) => void;\n\n page: number;\n setPage: (page: number) => void;\n\n displayed: TRow[];\n totalAfterFilter: number;\n pageSize: number;\n /** Set when an `onLoad` promise rejects; cleared by the next request. Always `null` in in-memory mode. */\n serverError: unknown | null;\n}\n\nexport function useTableState<TRow extends object>(\n props: HazoUiTableProps<TRow>\n): UseTableStateResult<TRow> {\n // Sort — controlled or uncontrolled\n const [sortInternal, setSortInternal] = useState<TableSort>(() =>\n normalizeSortProp(props.defaultSort)\n );\n const isSortControlled = props.sort !== undefined;\n const sort = isSortControlled\n ? normalizeSortProp(props.sort)\n : sortInternal;\n\n const setSort = useCallback(\n (next: TableSort) => {\n if (!isSortControlled) setSortInternal(next);\n props.onSortChange?.(next);\n },\n [isSortControlled, props.onSortChange]\n );\n\n const cycleHeaderSort = useCallback(\n (key: string, append?: boolean) => {\n const next = append\n ? cycleAppendColumn(sort, key)\n : cycleSingleColumn(sort, key);\n setSort(next);\n },\n [sort, setSort]\n );\n\n // Filter — controlled or uncontrolled\n const [filterInternal, setFilterInternal] = useState<TableFilter>(\n () => props.defaultFilter ?? {}\n );\n const isFilterControlled = props.filter !== undefined;\n const filter = isFilterControlled ? props.filter! : filterInternal;\n\n const setFilter = useCallback(\n (next: TableFilter) => {\n if (!isFilterControlled) setFilterInternal(next);\n props.onFilterChange?.(next);\n },\n [isFilterControlled, props.onFilterChange]\n );\n\n // Debounced search separate from filter.search so that typing doesn't\n // re-run the pipeline on every keystroke.\n const [searchDraft, setSearchDraft] = useState<string>(\n filter.search ?? \"\"\n );\n const debounceMs = props.searchDebounceMs ?? DEFAULT_DEBOUNCE_MS;\n useEffect(() => {\n const handle = setTimeout(() => {\n if (searchDraft === (filter.search ?? \"\")) return;\n setFilter({ ...filter, search: searchDraft || undefined });\n }, debounceMs);\n return () => clearTimeout(handle);\n // We deliberately omit `filter` to avoid resetting the debounce on\n // every filter-fields change; only searchDraft drives the timer.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchDraft, debounceMs]);\n const setSearch = useCallback((s: string) => setSearchDraft(s), []);\n\n // Page — controlled or uncontrolled\n const [pageInternal, setPageInternal] = useState<number>(\n () => props.defaultPage ?? 0\n );\n const isPageControlled = props.page !== undefined;\n const page = isPageControlled ? props.page! : pageInternal;\n const setPage = useCallback(\n (next: number) => {\n if (!isPageControlled) setPageInternal(next);\n props.onPageChange?.(next);\n },\n [isPageControlled, props.onPageChange]\n );\n\n // Reset page to 0 when filter or sort changes (uncontrolled only).\n const prevSortKey = useRef(serializeSort(sort));\n const prevFilterKey = useRef(serializeFilter(filter));\n useEffect(() => {\n const sk = serializeSort(sort);\n const fk = serializeFilter(filter);\n if (sk !== prevSortKey.current || fk !== prevFilterKey.current) {\n if (!isPageControlled) setPageInternal(0);\n prevSortKey.current = sk;\n prevFilterKey.current = fk;\n }\n }, [sort, filter, isPageControlled]);\n\n // ───── Pipeline ─────\n const pageSize =\n props.pagination && typeof props.pagination === \"object\"\n ? props.pagination.pageSize\n : 0;\n\n const isServerMode = typeof props.onLoad === \"function\";\n\n // In-memory pipeline (only used when no onLoad)\n const filtered = useMemo(\n () => (isServerMode ? props.rows : applyFilter(props.rows, filter, props.columns)),\n [props.rows, filter, props.columns, isServerMode]\n );\n const sorted = useMemo(\n () => (isServerMode ? filtered : applySort(filtered, sort)),\n [filtered, sort, isServerMode]\n );\n const pagedInMemory = useMemo(() => {\n if (isServerMode || pageSize <= 0) return sorted;\n const start = page * pageSize;\n return sorted.slice(start, start + pageSize);\n }, [sorted, page, pageSize, isServerMode]);\n\n // Server-mode result state\n const [serverRows, setServerRows] = useState<TRow[]>([]);\n const [serverTotal, setServerTotal] = useState<number>(0);\n const [serverError, setServerError] = useState<unknown | null>(null);\n const reqIdRef = useRef(0);\n\n useEffect(() => {\n if (!isServerMode) return;\n const myId = ++reqIdRef.current;\n let cancelled = false;\n setServerError(null);\n Promise.resolve(\n props.onLoad!({ page, sort, filter })\n )\n .then((res) => {\n if (cancelled || myId !== reqIdRef.current) return;\n setServerRows(res.rows);\n setServerTotal(res.total);\n })\n .catch((err) => {\n if (cancelled || myId !== reqIdRef.current) return;\n console.warn(\"[HazoUiTable] onLoad rejected:\", err);\n setServerRows([]);\n setServerTotal(0);\n setServerError(err ?? new Error(\"onLoad rejected\"));\n });\n return () => {\n cancelled = true;\n };\n }, [isServerMode, page, sort, filter, props.onLoad]);\n\n const displayed = isServerMode ? serverRows : pagedInMemory;\n const totalAfterFilter = isServerMode ? serverTotal : filtered.length;\n\n return {\n sort,\n setSort,\n cycleHeaderSort,\n filter,\n setFilter,\n setSearch,\n page,\n setPage,\n displayed,\n totalAfterFilter,\n pageSize,\n serverError: isServerMode ? serverError : null,\n };\n}\n\n/* ============================================================\n * Helpers — exported for use_table_state but also for tests/inspection\n * ============================================================ */\n\nexport function normalizeSortProp(p: TableSortProp | undefined): TableSort {\n if (!p) return [];\n if (Array.isArray(p)) return p;\n return [p];\n}\n\nexport function cycleSingleColumn(\n current: TableSort,\n key: string\n): TableSort {\n // Multi-column sort active → header click replaces with single-column asc.\n if (current.length !== 1) return [{ key, dir: \"asc\" }];\n const only = current[0];\n if (only.key !== key) return [{ key, dir: \"asc\" }];\n if (only.dir === \"asc\") return [{ key, dir: \"desc\" }];\n return []; // desc → none\n}\n\n/**\n * Shift-click semantics: append the column to the current sort\n * (preserving previously-sorted columns). Cycle the appended column\n * asc → desc → removed.\n */\nexport function cycleAppendColumn(\n current: TableSort,\n key: string\n): TableSort {\n const idx = current.findIndex((s) => s.key === key);\n if (idx === -1) return [...current, { key, dir: \"asc\" }];\n const entry = current[idx];\n if (entry.dir === \"asc\") {\n const next = current.slice();\n next[idx] = { key, dir: \"desc\" };\n return next;\n }\n // desc → remove (preserving order of remaining entries)\n return current.filter((_, i) => i !== idx);\n}\n\nexport function applyFilter<TRow extends object>(\n rows: TRow[],\n filter: TableFilter,\n columns: TableColumn<TRow>[]\n): TRow[] {\n let result = rows;\n\n if (filter.fields && filter.fields.length > 0) {\n result = result.filter((row) =>\n filter.fields!.every((f) => matchesFieldFilter(row, f, columns))\n );\n }\n\n const needle = (filter.search ?? \"\").trim().toLowerCase();\n if (needle.length > 0) {\n const searchKeys = columns.filter(isSearchable).map((c) => c.key);\n if (searchKeys.length > 0) {\n result = result.filter((row) =>\n searchKeys.some((k) =>\n String((row as any)[k] ?? \"\")\n .toLowerCase()\n .includes(needle)\n )\n );\n }\n }\n\n return result;\n}\n\nexport function isSearchable<TRow extends object>(c: TableColumn<TRow>): boolean {\n if (c.searchable !== undefined) return c.searchable;\n switch (c.formatter) {\n case \"number\":\n case \"currency\":\n case \"percent\":\n case \"date\":\n return false;\n default:\n return true;\n }\n}\n\nfunction matchesFieldFilter<TRow extends object>(\n row: TRow,\n f: FilterConfig,\n columns: TableColumn<TRow>[]\n): boolean {\n const col = columns.find((c) => c.key === f.field);\n if (!col || !col.filterType) return true;\n const value = (row as any)[f.field];\n const op = f.operator || \"equals\";\n\n switch (col.filterType) {\n case \"text\": {\n if (f.value === undefined || f.value === \"\") return true;\n return String(value ?? \"\")\n .toLowerCase()\n .includes(String(f.value).toLowerCase());\n }\n case \"number\": {\n const v = Number(value);\n const fv = Number(f.value);\n if (Number.isNaN(v) || Number.isNaN(fv)) return false;\n return numberOp(v, fv, op);\n }\n case \"date\": {\n const v = value instanceof Date ? value : new Date(value);\n const fv = f.value instanceof Date ? f.value : new Date(f.value);\n if (Number.isNaN(v.getTime()) || Number.isNaN(fv.getTime())) return false;\n const ta = new Date(v).setHours(0, 0, 0, 0);\n const tb = new Date(fv).setHours(0, 0, 0, 0);\n return numberOp(ta, tb, op);\n }\n case \"combobox\":\n return String(value) === String(f.value);\n case \"boolean\":\n return Boolean(value) === Boolean(f.value);\n default:\n return true;\n }\n}\n\nfunction numberOp(a: number, b: number, op: string): boolean {\n switch (op) {\n case \"equals\":\n return a === b;\n case \"not_equals\":\n return a !== b;\n case \"greater_than\":\n return a > b;\n case \"less_than\":\n return a < b;\n case \"greater_equal\":\n return a >= b;\n case \"less_equal\":\n return a <= b;\n default:\n return true;\n }\n}\n\nexport function applySort<TRow extends object>(\n rows: TRow[],\n sort: TableSort\n): TRow[] {\n if (sort.length === 0) return rows;\n return [...rows]\n .map((row, idx) => ({ row, idx }))\n .sort((a, b) => {\n for (const entry of sort) {\n const va = (a.row as any)[entry.key];\n const vb = (b.row as any)[entry.key];\n const cmp = compareValues(va, vb);\n if (cmp !== 0) return entry.dir === \"asc\" ? cmp : -cmp;\n }\n return a.idx - b.idx;\n })\n .map((x) => x.row);\n}\n\nfunction compareValues(a: any, b: any): number {\n if (a == null && b == null) return 0;\n if (a == null) return 1;\n if (b == null) return -1;\n if (a instanceof Date && b instanceof Date)\n return a.getTime() - b.getTime();\n if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n return String(a).localeCompare(String(b));\n}\n\nfunction serializeSort(sort: TableSort): string {\n return sort.map((s) => `${s.key}:${s.dir}`).join(\",\");\n}\n\nfunction serializeFilter(filter: TableFilter): string {\n const fields = (filter.fields ?? [])\n .map((f) => `${f.field}:${f.operator ?? \"\"}:${String(f.value)}`)\n .join(\",\");\n return `${filter.search ?? \"\"}|${fields}`;\n}\n","\"use client\";\n\n/**\n * HazoUiTable — column-config-driven data table.\n *\n * Composes the shadcn Table primitive family with the in-memory\n * filter/sort/paginate pipeline from use_table_state, and (in later\n * tasks) the existing HazoUiMultiSortDialog / HazoUiMultiFilterDialog.\n */\n\nimport * as React from \"react\";\nimport { format } from \"date-fns\";\nimport {\n ChevronDown,\n ChevronUp,\n ChevronsUpDown,\n} from \"lucide-react\";\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../ui/table\";\nimport { Input } from \"../ui/input\";\nimport { Button } from \"../ui/button\";\nimport {\n HazoUiMultiSortDialog,\n type SortConfig,\n type SortField,\n} from \"../hazo_ui_multi_sort_dialog\";\nimport {\n HazoUiMultiFilterDialog,\n type FilterField,\n type FilterConfig,\n} from \"../hazo_ui_multi_filter_dialog\";\nimport { cn } from \"../../lib/utils\";\nimport { EmptyState } from \"../empty_state\";\nimport { SkeletonBar } from \"../skeleton\";\nimport { useMediaQuery } from \"../../hooks/use_media_query\";\nimport { Card, CardContent, CardHeader } from \"../ui/card\";\nimport { TableMobileCards } from \"./table_mobile_cards\";\nimport { useTableState } from \"./use_table_state\";\nimport type {\n HazoUiTableProps,\n TableColumn,\n TableFormatter,\n TableSort,\n} from \"./types\";\n\nexport type {\n TableColumn,\n TableSort,\n TableSortEntry,\n TableSortProp,\n TableFilter,\n TableFormatter,\n HazoUiTableProps,\n HazoUiTablePagination,\n HazoUiTableServerLoadArgs,\n HazoUiTableServerLoadResult,\n} from \"./types\";\n\nexport function HazoUiTable<TRow extends object = any>(\n props: HazoUiTableProps<TRow>\n) {\n const state = useTableState<TRow>(props);\n const { columns, rows, getRowKey, className, caption } = props;\n\n const mobileBreakpoint = props.mobileBreakpoint ?? 768;\n const mobileEnabled = props.mobileCardFallback !== false;\n const isNarrow = useMediaQuery(`(max-width: ${mobileBreakpoint - 1}px)`);\n const renderAsCards = mobileEnabled && isNarrow;\n\n return (\n <div className={cn(\"cls_hazo_ui_table_root space-y-3\", className)}>\n {(props.enableSearch || props.enableSortDialog || props.enableFilterDialog) && (\n <Toolbar<TRow>\n columns={columns}\n sort={state.sort}\n onSortChange={state.setSort}\n filter={state.filter}\n onSearchChange={state.setSearch}\n onFilterFieldsChange={(fields) =>\n state.setFilter({ ...state.filter, fields })\n }\n enableSearch={props.enableSearch}\n enableSortDialog={props.enableSortDialog}\n enableFilterDialog={props.enableFilterDialog}\n searchPlaceholder={props.searchPlaceholder}\n />\n )}\n {renderAsCards ? (\n props.loading ? (\n <div className=\"cls_hazo_ui_table_mobile_loading flex flex-col gap-3\">\n {Array.from({ length: Math.max(state.pageSize || 5, 3) }).map(\n (_, i) => (\n <Card key={`mloader-${i}`}>\n <CardHeader className=\"pb-2\">\n <SkeletonBar className=\"w-2/3\" />\n </CardHeader>\n <CardContent className=\"pt-0 space-y-2\">\n <SkeletonBar className=\"w-full\" />\n <SkeletonBar className=\"w-1/2\" />\n </CardContent>\n </Card>\n )\n )}\n </div>\n ) : state.serverError != null ? (\n <div className=\"cls_hazo_ui_table_mobile_error py-6\">\n {renderErrorState(props.error, state.serverError)}\n </div>\n ) : state.displayed.length === 0 ? (\n <div className=\"cls_hazo_ui_table_mobile_empty py-6\">\n {noActiveFilters(state.filter) && rows.length === 0 ? (\n typeof props.empty === \"string\" || props.empty === undefined ? (\n <EmptyState\n title={\n (typeof props.empty === \"string\" && props.empty) ||\n \"No items\"\n }\n />\n ) : (\n props.empty\n )\n ) : typeof props.noResults === \"string\" ||\n props.noResults === undefined ? (\n <EmptyState\n title={\n (typeof props.noResults === \"string\" && props.noResults) ||\n \"No matches — adjust your filters\"\n }\n />\n ) : (\n props.noResults\n )}\n </div>\n ) : (\n <TableMobileCards\n columns={columns}\n rows={state.displayed}\n getRowKey={getRowKey}\n onRowClick={props.onRowClick}\n renderCell={renderCell}\n />\n )\n ) : (\n <Table>\n {caption && <TableCaption>{caption}</TableCaption>}\n <TableHeader>\n <TableRow>\n {columns.map((c) => (\n <TableHead\n key={c.key}\n className={cn(headerAlignClass(c), c.headerClassName)}\n aria-sort={ariaSortFor(state.sort, c.key)}\n >\n {c.sortable ? (\n <button\n type=\"button\"\n onClick={(e) =>\n state.cycleHeaderSort(c.key, e.shiftKey)\n }\n title=\"Click to sort; shift-click to append a secondary sort\"\n className=\"cls_hazo_ui_table_sort_btn inline-flex items-center gap-1 hover:text-foreground\"\n >\n <span>{c.label}</span>\n <SortIndicator sort={state.sort} columnKey={c.key} />\n </button>\n ) : (\n c.label\n )}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {props.loading ? (\n <LoadingRows\n columns={columns}\n count={Math.max(state.pageSize || 5, 3)}\n />\n ) : state.serverError != null ? (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"cls_hazo_ui_table_error_cell p-0\"\n >\n <div className=\"cls_hazo_ui_table_error_wrap py-6\">\n {renderErrorState(props.error, state.serverError)}\n </div>\n </TableCell>\n </TableRow>\n ) : state.displayed.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"cls_hazo_ui_table_empty_cell p-0\"\n >\n {noActiveFilters(state.filter) && rows.length === 0 ? (\n <div className=\"cls_hazo_ui_table_empty_wrap py-6\">\n {typeof props.empty === \"string\" || props.empty === undefined ? (\n <EmptyState\n title={\n (typeof props.empty === \"string\" && props.empty) ||\n \"No items\"\n }\n />\n ) : (\n props.empty\n )}\n </div>\n ) : (\n <div className=\"cls_hazo_ui_table_no_results_wrap py-6\">\n {typeof props.noResults === \"string\" ||\n props.noResults === undefined ? (\n <EmptyState\n title={\n (typeof props.noResults === \"string\" && props.noResults) ||\n \"No matches — adjust your filters\"\n }\n />\n ) : (\n props.noResults\n )}\n </div>\n )}\n </TableCell>\n </TableRow>\n ) : (\n state.displayed.map((row, i) => (\n <TableRow\n key={getRowKey ? getRowKey(row, i) : i}\n {...buildRowProps(row, i, props.onRowClick)}\n >\n {columns.map((c) => (\n <TableCell\n key={c.key}\n className={cn(cellAlignClass(c), c.className)}\n >\n {renderCell(c, row, i)}\n </TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n )}\n {state.pageSize > 0 && (\n <PaginationFooter\n page={state.page}\n pageSize={state.pageSize}\n total={state.totalAfterFilter}\n onPageChange={state.setPage}\n />\n )}\n </div>\n );\n}\n\n/* ============================================================\n * Internal render helpers\n * ============================================================ */\n\nfunction renderCell<TRow extends object>(\n c: TableColumn<TRow>,\n row: TRow,\n i: number\n): React.ReactNode {\n if (c.cell) return c.cell(row, i);\n const raw = (row as any)[c.key];\n return formatValue(raw, c.formatter, c.currency, c.locale);\n}\n\n// Pinned default so SSR (Node) and CSR (browser) agree on number /\n// currency / percent output. `Intl.NumberFormat(undefined, ...)` resolves\n// to the runtime's host locale, which differs between server and client\n// and triggers React hydration text-content errors.\nconst DEFAULT_NUMBER_LOCALE = \"en-US\";\n\nfunction formatValue(\n value: any,\n formatter?: TableFormatter,\n currency?: string,\n locale?: string\n): React.ReactNode {\n if (value === null || value === undefined || value === \"\") return \"—\";\n const lc = locale ?? DEFAULT_NUMBER_LOCALE;\n switch (formatter) {\n case \"date\": {\n const d = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(d.getTime())) return String(value);\n return format(d, \"MMM d, yyyy\");\n }\n case \"number\":\n return new Intl.NumberFormat(lc).format(Number(value));\n case \"currency\":\n return new Intl.NumberFormat(lc, {\n style: \"currency\",\n currency: currency ?? \"USD\",\n }).format(Number(value));\n case \"percent\":\n return new Intl.NumberFormat(lc, {\n style: \"percent\",\n maximumFractionDigits: 2,\n }).format(Number(value));\n default:\n return String(value);\n }\n}\n\nfunction headerAlignClass<TRow extends object>(c: TableColumn<TRow>): string {\n switch (c.align) {\n case \"right\":\n return \"text-right\";\n case \"center\":\n return \"text-center\";\n default:\n return \"text-left\";\n }\n}\n\nfunction cellAlignClass<TRow extends object>(c: TableColumn<TRow>): string {\n switch (c.align) {\n case \"right\":\n return \"text-right\";\n case \"center\":\n return \"text-center\";\n default:\n return \"\";\n }\n}\n\nfunction ariaSortFor(\n sort: TableSort,\n key: string\n): \"ascending\" | \"descending\" | \"none\" {\n const entry = sort.find((s) => s.key === key);\n if (!entry) return \"none\";\n return entry.dir === \"asc\" ? \"ascending\" : \"descending\";\n}\n\nfunction deriveSortFields<TRow extends object>(\n columns: TableColumn<TRow>[]\n): SortField[] {\n return columns\n .filter((c) => c.sortable)\n .map((c) => ({ value: c.key, label: c.label }));\n}\n\nfunction deriveFilterFields<TRow extends object>(\n columns: TableColumn<TRow>[]\n): FilterField[] {\n return columns\n .filter((c) => c.filterType)\n .map((c) => ({\n value: c.key,\n label: c.label,\n type: c.filterType!,\n ...(c.filterConfig ?? {}),\n }));\n}\n\nfunction sortToDialogConfig(sort: TableSort): SortConfig[] {\n return sort.map((s) => ({ field: s.key, direction: s.dir }));\n}\n\nfunction dialogConfigToSort(configs: SortConfig[]): TableSort {\n return configs.map((c) => ({ key: c.field, dir: c.direction }));\n}\n\ninterface PaginationFooterProps {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n}\n\nfunction PaginationFooter({\n page,\n pageSize,\n total,\n onPageChange,\n}: PaginationFooterProps) {\n const start = total === 0 ? 0 : page * pageSize + 1;\n const end = Math.min((page + 1) * pageSize, total);\n const lastPage = Math.max(0, Math.ceil(total / pageSize) - 1);\n\n return (\n <div className=\"cls_hazo_ui_table_pagination flex items-center justify-between gap-3 pt-2 text-sm\">\n <span className=\"cls_hazo_ui_table_page_counter text-muted-foreground\">\n Showing {start}–{end} of {total}\n </span>\n <div className=\"cls_hazo_ui_table_page_buttons flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(Math.max(0, page - 1))}\n disabled={page === 0}\n aria-label=\"Previous page\"\n >\n ‹ Prev\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPageChange(Math.min(lastPage, page + 1))}\n disabled={page >= lastPage}\n aria-label=\"Next page\"\n >\n Next ›\n </Button>\n </div>\n </div>\n );\n}\n\ninterface ToolbarProps<TRow extends object> {\n columns: TableColumn<TRow>[];\n sort: TableSort;\n onSortChange: (sort: TableSort) => void;\n filter: { search?: string; fields?: FilterConfig[] };\n onSearchChange: (search: string) => void;\n onFilterFieldsChange: (fields: FilterConfig[]) => void;\n enableSearch?: boolean;\n enableSortDialog?: boolean;\n enableFilterDialog?: boolean;\n searchPlaceholder?: string;\n}\n\nfunction Toolbar<TRow extends object>(props: ToolbarProps<TRow>) {\n const {\n columns,\n sort,\n onSortChange,\n filter,\n onSearchChange,\n onFilterFieldsChange,\n enableSearch,\n enableSortDialog,\n enableFilterDialog,\n searchPlaceholder,\n } = props;\n\n const sortFields = React.useMemo(\n () => deriveSortFields(columns),\n [columns]\n );\n const filterFields = React.useMemo(\n () => deriveFilterFields(columns),\n [columns]\n );\n\n // Local state for the search input — controlled here so typing updates\n // visibly even though the debounced value lives in use_table_state.\n const [searchValue, setSearchValue] = React.useState<string>(\n filter.search ?? \"\"\n );\n React.useEffect(() => {\n setSearchValue(filter.search ?? \"\");\n }, [filter.search]);\n\n return (\n <div className=\"cls_hazo_ui_table_toolbar flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n {enableSearch ? (\n <Input\n type=\"text\"\n value={searchValue}\n onChange={(e) => {\n const v = e.target.value;\n setSearchValue(v);\n onSearchChange(v);\n }}\n placeholder={searchPlaceholder ?? \"Search...\"}\n className=\"cls_hazo_ui_table_search w-full sm:max-w-xs\"\n />\n ) : (\n <div />\n )}\n\n <div className=\"cls_hazo_ui_table_toolbar_right flex items-center gap-2\">\n {enableFilterDialog && filterFields.length > 0 && (\n <HazoUiMultiFilterDialog\n availableFields={filterFields}\n initialFilters={filter.fields ?? []}\n onFilterChange={onFilterFieldsChange}\n />\n )}\n {enableSortDialog && sortFields.length > 0 && (\n <HazoUiMultiSortDialog\n availableFields={sortFields}\n initialSortFields={sortToDialogConfig(sort)}\n onSortChange={(configs) => onSortChange(dialogConfigToSort(configs))}\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction LoadingRows<TRow extends object>({\n columns,\n count,\n}: {\n columns: TableColumn<TRow>[];\n count: number;\n}) {\n return (\n <>\n {Array.from({ length: count }).map((_, rowIdx) => (\n <TableRow key={`skeleton-${rowIdx}`}>\n {columns.map((c) => (\n <TableCell key={c.key} className={cellAlignClass(c)}>\n <SkeletonBar\n className={cn(\n \"cls_hazo_ui_table_skeleton\",\n c.align === \"right\" ? \"w-16 ml-auto\" : \"w-full\"\n )}\n />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </>\n );\n}\n\nfunction noActiveFilters(filter: {\n search?: string;\n fields?: any[];\n}): boolean {\n return !filter.search && (!filter.fields || filter.fields.length === 0);\n}\n\nfunction renderErrorState(\n error: HazoUiTableProps<any>[\"error\"],\n serverError: unknown\n): React.ReactNode {\n if (typeof error === \"function\") return error(serverError);\n if (error !== undefined && error !== null) return error;\n const msg = serverError instanceof Error ? serverError.message : String(serverError);\n return (\n <EmptyState\n title=\"Couldn't load data\"\n description={msg || \"The data source rejected the request.\"}\n />\n );\n}\n\nfunction buildRowProps<TRow extends object>(\n row: TRow,\n index: number,\n onRowClick: ((row: TRow, index: number) => void) | undefined\n): React.HTMLAttributes<HTMLTableRowElement> & { className?: string } {\n if (!onRowClick) return {};\n return {\n role: \"button\",\n tabIndex: 0,\n className: \"cls_hazo_ui_table_row_clickable cursor-pointer\",\n onClick: () => onRowClick(row, index),\n onKeyDown: (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick(row, index);\n }\n },\n };\n}\n\nfunction SortIndicator({\n sort,\n columnKey,\n}: {\n sort: TableSort;\n columnKey: string;\n}) {\n const idx = sort.findIndex((s) => s.key === columnKey);\n if (idx === -1) {\n return (\n <ChevronsUpDown className=\"cls_hazo_ui_table_sort_idle h-3.5 w-3.5 opacity-30\" />\n );\n }\n const entry = sort[idx];\n return (\n <span className=\"cls_hazo_ui_table_sort_active inline-flex items-center gap-0.5\">\n {entry.dir === \"asc\" ? (\n <ChevronUp className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronDown className=\"h-3.5 w-3.5\" />\n )}\n {sort.length > 1 && (\n <span className=\"text-[10px] font-medium\">{idx + 1}</span>\n )}\n </span>\n );\n}\n","\"use client\";\n\n/**\n * Sparkline — tiny single-series line for KPI cards.\n *\n * Intentionally axisless (per PRD §6b — sparklines are for trend *shape*,\n * the value is shown above them in the card itself). 12% area fill makes\n * the trajectory readable even at 40px high; a 2px dot marks the latest\n * non-null point so \"now\" is obvious.\n *\n * SVG renders edge-to-edge with `preserveAspectRatio=\"none\"` so the line\n * stretches across whatever width the parent gives it.\n */\n\nimport * as React from \"react\";\nimport type { ChartDataSeries } from \"./types\";\n\nexport interface SparklineProps {\n /** Time-series. `null` entries are skipped. */\n data: ChartDataSeries;\n /** Stroke / dot / area-fill color. */\n color: string;\n /** Container className passthrough. */\n className?: string;\n /** Override the default 40px height. */\n height?: number;\n}\n\nconst VBOX_W = 200;\nconst PAD = 2;\n\nexport function Sparkline({\n data,\n color,\n className,\n height = 40,\n}: SparklineProps): React.ReactElement {\n const vbox_h = height;\n\n const non_null_values = data.filter((v): v is number => v !== null && !Number.isNaN(v));\n if (non_null_values.length === 0) {\n return (\n <svg\n viewBox={`0 0 ${VBOX_W} ${vbox_h}`}\n preserveAspectRatio=\"none\"\n className={className}\n style={{ width: \"100%\", height: `${height}px`, display: \"block\" }}\n />\n );\n }\n\n const mn = Math.min(...non_null_values);\n const mx = Math.max(...non_null_values);\n const rng = mx - mn || 1;\n\n const cx = (i: number): number =>\n data.length <= 1 ? VBOX_W / 2 : PAD + (i * (VBOX_W - 2 * PAD)) / (data.length - 1);\n const cy = (v: number): number => vbox_h - PAD - ((v - mn) * (vbox_h - 2 * PAD)) / rng;\n\n let line_d = \"\";\n data.forEach((v, i) => {\n if (v === null || Number.isNaN(v)) return;\n line_d += `${line_d ? \" L\" : \"M\"}${cx(i).toFixed(1)},${cy(v).toFixed(1)}`;\n });\n\n const first_non_null_idx = data.findIndex((v) => v !== null && !Number.isNaN(v as number));\n const last_idx = data.length - 1;\n const last_v = data[last_idx];\n const area_d =\n line_d &&\n `${line_d} L${cx(last_idx).toFixed(1)},${vbox_h - PAD} L${cx(first_non_null_idx).toFixed(1)},${vbox_h - PAD} Z`;\n\n const has_last = last_v !== null && last_v !== undefined && !Number.isNaN(last_v);\n\n return (\n <svg\n viewBox={`0 0 ${VBOX_W} ${vbox_h}`}\n preserveAspectRatio=\"none\"\n className={className}\n style={{ width: \"100%\", height: `${height}px`, display: \"block\" }}\n >\n {area_d && <path d={area_d} fill={color} fillOpacity={0.1} stroke=\"none\" />}\n {line_d && <path d={line_d} stroke={color} strokeWidth={1.5} fill=\"none\" />}\n {has_last && (\n <circle cx={cx(last_idx)} cy={cy(last_v as number)} r={2} fill={color} />\n )}\n </svg>\n );\n}\n","\"use client\";\n\n/**\n * InverseSparkline — tiny axisless line where lower = better.\n *\n * Used for GSC position trends: rank 1 is best, rank 50 is bad, so the Y\n * axis is flipped relative to a regular sparkline. No area fill, no dot —\n * the only signal is the line's direction. 62×18 by default matches the\n * \"scrollable list of queries\" layout in the GSC deep-dive mockup.\n */\n\nimport * as React from \"react\";\nimport type { ChartDataSeries } from \"./types\";\n\nexport interface InverseSparklineProps {\n /** Time-series (e.g. GSC avg-position values). `null` is skipped. */\n data: ChartDataSeries;\n /** Stroke color. */\n color: string;\n /** Container className passthrough. */\n className?: string;\n /** Override default 62px width. */\n width?: number;\n /** Override default 18px height. */\n height?: number;\n}\n\nconst PAD = 2;\n\nexport function InverseSparkline({\n data,\n color,\n className,\n width = 62,\n height = 18,\n}: InverseSparklineProps): React.ReactElement {\n const non_null_values = data.filter((v): v is number => v !== null && !Number.isNaN(v));\n if (non_null_values.length === 0) {\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className={className}\n style={{ width: `${width}px`, height: `${height}px`, display: \"block\" }}\n />\n );\n }\n\n const mn = Math.min(...non_null_values);\n const mx = Math.max(...non_null_values);\n const rng = mx - mn || 1;\n\n const cx = (i: number): number =>\n data.length <= 1 ? width / 2 : PAD + (i * (width - 2 * PAD)) / (data.length - 1);\n // Inverted: higher value → lower position on screen\n const cy = (v: number): number => PAD + ((v - mn) * (height - 2 * PAD)) / rng;\n\n let line_d = \"\";\n data.forEach((v, i) => {\n if (v === null || Number.isNaN(v)) return;\n line_d += `${line_d ? \" L\" : \"M\"}${cx(i).toFixed(1)},${cy(v).toFixed(1)}`;\n });\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className={className}\n style={{ width: `${width}px`, height: `${height}px`, display: \"block\" }}\n >\n {line_d && <path d={line_d} stroke={color} strokeWidth={1.4} fill=\"none\" />}\n </svg>\n );\n}\n","/**\n * Number/date formatters shared across hazo_ui_charts.\n *\n * Kept as pure, zero-dependency helpers so the chart primitives stay\n * deterministic across SSR/CSR. Locale is intentionally pinned (the same\n * lesson as v2.15.1's Intl fix on HazoUiTable).\n */\n\n/**\n * Compact number formatter used on Y-axis ticks, marker labels, and legends.\n *\n * null / undefined / NaN → empty string\n * ≥ 1,000 → `1.0k`, `12.3k`, `1.0M`\n * integer → no decimals (`14`, `0`)\n * fractional → one decimal (`5.7`)\n *\n * Strings pass through unchanged so callers can pre-format if needed.\n */\nexport function format_num(n: number | null | undefined | string): string {\n if (n === null || n === undefined) return \"\";\n if (typeof n === \"string\") return n;\n if (Number.isNaN(n)) return \"\";\n const abs = Math.abs(n);\n if (abs >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (abs >= 1_000) return `${(n / 1_000).toFixed(1)}k`;\n if (Number.isInteger(n)) return n.toString();\n return n.toFixed(1);\n}\n\n/**\n * Pick three index positions for X-axis labels: start, middle, end.\n * Returns `[0, mid, last]` for length ≥ 3; falls back gracefully below that.\n */\nexport function pick_x_label_indices(length: number): [number, number, number] {\n if (length <= 0) return [0, 0, 0];\n if (length === 1) return [0, 0, 0];\n if (length === 2) return [0, 0, 1];\n return [0, Math.floor(length / 2), length - 1];\n}\n","\"use client\";\n\n/**\n * LineChart — full-anatomy single-series chart (PRD §6b spec).\n *\n * ┌─────────────────────────────────────────────┐\n * │ Y-max ─ - - - - - - - - - - - - - - - - - │ ← three dashed gridlines\n * │ Y-mid ─ - - - - - - - - - - ╭──•value │ ← marker dot + label\n * │ Y-min ─ - - - - - - -╭──────╯ │ + dashed guide to Y-axis\n * │ └───────────────────────────────── │\n * │ Mar 4 Mar 10 Mar 17 │ ← three X labels\n * └─────────────────────────────────────────────┘\n *\n * Hover anywhere over the plot area to surface a cursor line + value\n * bubble at the nearest data point. Set `showTooltip={false}` to disable\n * — useful when the chart is small or non-interactive (print export).\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { format_num, pick_x_label_indices } from \"./format\";\nimport type { ChartDataSeries } from \"./types\";\n\nexport interface LineChartProps {\n /** Time-series. `null` entries are gaps in the line. */\n data: ChartDataSeries;\n /** Labels for the X-axis. Length should match `data`. */\n dates: string[];\n /** Stroke / area / marker color. */\n color: string;\n /** Override default 360-wide viewBox. */\n width?: number;\n /** Override default 130-tall viewBox. */\n height?: number;\n /** Optional suffix shown next to the current-value label (e.g. \"%\"). */\n unit?: string;\n /** Disable hover tooltip. Defaults to enabled. */\n showTooltip?: boolean;\n /** Container className passthrough. */\n className?: string;\n}\n\nconst PAD_LEFT = 38;\nconst PAD_RIGHT = 14;\nconst PAD_TOP = 12;\nconst PAD_BOTTOM = 22;\nconst AXIS_LABEL_COLOR = \"#8b949e\";\nconst GRIDLINE_COLOR = \"#2a3441\";\n\ninterface Geometry {\n vbox_w: number;\n vbox_h: number;\n y_min: number;\n y_max: number;\n cx: (i: number) => number;\n cy: (v: number) => number;\n}\n\nfunction compute_geometry(\n data: ChartDataSeries,\n width: number,\n height: number,\n): Geometry | null {\n const vals = data.filter((v): v is number => v !== null && !Number.isNaN(v));\n if (vals.length === 0) return null;\n\n const mn = Math.min(...vals);\n const mx = Math.max(...vals);\n const rng = mx - mn || mx * 0.1 + 1;\n const y_min = Math.max(0, mn - rng * 0.1);\n const y_max = mx + rng * 0.1;\n const y_rng = y_max - y_min || 1;\n\n const plot_w = width - PAD_LEFT - PAD_RIGHT;\n const plot_h = height - PAD_TOP - PAD_BOTTOM;\n\n return {\n vbox_w: width,\n vbox_h: height,\n y_min,\n y_max,\n cx: (i) => (data.length <= 1 ? PAD_LEFT + plot_w / 2 : PAD_LEFT + (i * plot_w) / (data.length - 1)),\n cy: (v) => PAD_TOP + (1 - (v - y_min) / y_rng) * plot_h,\n };\n}\n\nfunction build_paths(\n data: ChartDataSeries,\n g: Geometry,\n): { line_d: string; area_d: string } {\n let line_d = \"\";\n let first_idx = -1;\n data.forEach((v, i) => {\n if (v === null || Number.isNaN(v)) return;\n if (first_idx === -1) first_idx = i;\n line_d += `${line_d ? \" L\" : \"M\"}${g.cx(i).toFixed(1)},${g.cy(v).toFixed(1)}`;\n });\n const last_idx = data.length - 1;\n const last_v = data[last_idx];\n const area_d =\n line_d && last_v !== null && last_v !== undefined && !Number.isNaN(last_v)\n ? `${line_d} L${g.cx(last_idx).toFixed(1)},${g.vbox_h - PAD_BOTTOM} L${g.cx(first_idx).toFixed(1)},${g.vbox_h - PAD_BOTTOM} Z`\n : \"\";\n return { line_d, area_d };\n}\n\nexport function LineChart({\n data,\n dates,\n color,\n width = 360,\n height = 130,\n unit = \"\",\n showTooltip = true,\n className,\n}: LineChartProps): React.ReactElement {\n const geo = compute_geometry(data, width, height);\n const svg_ref = React.useRef<SVGSVGElement | null>(null);\n const [hover_idx, set_hover_idx] = React.useState<number | null>(null);\n\n const handle_mouse_move = React.useCallback(\n (e: React.MouseEvent<SVGSVGElement>) => {\n if (!geo) return;\n const rect = e.currentTarget.getBoundingClientRect();\n if (rect.width === 0) return;\n // Map client X → viewBox X (preserveAspectRatio default keeps aspect, so width-relative ratio works).\n const vbox_x = ((e.clientX - rect.left) / rect.width) * geo.vbox_w;\n const plot_w = geo.vbox_w - PAD_LEFT - PAD_RIGHT;\n if (vbox_x < PAD_LEFT || vbox_x > geo.vbox_w - PAD_RIGHT) {\n set_hover_idx(null);\n return;\n }\n const ratio = (vbox_x - PAD_LEFT) / plot_w;\n const idx = Math.round(ratio * (data.length - 1));\n const clamped = Math.max(0, Math.min(data.length - 1, idx));\n // Walk to the nearest non-null point if the exact bucket is missing.\n let resolved = clamped;\n if (data[resolved] === null || Number.isNaN(data[resolved] as number)) {\n for (let step = 1; step < data.length; step += 1) {\n const left_i = clamped - step;\n const right_i = clamped + step;\n if (left_i >= 0 && data[left_i] !== null && !Number.isNaN(data[left_i] as number)) {\n resolved = left_i;\n break;\n }\n if (right_i < data.length && data[right_i] !== null && !Number.isNaN(data[right_i] as number)) {\n resolved = right_i;\n break;\n }\n }\n }\n set_hover_idx(resolved);\n },\n [geo, data],\n );\n\n const handle_mouse_leave = React.useCallback(() => set_hover_idx(null), []);\n\n if (!geo) {\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={cn(\"cls_hazo_chart cls_hazo_chart_empty\", className)}\n style={{ width: \"100%\", height: \"auto\", display: \"block\", maxHeight: `${height + 10}px` }}\n />\n );\n }\n\n const { line_d, area_d } = build_paths(data, geo);\n const x_label_idx = pick_x_label_indices(data.length);\n const last_idx = data.length - 1;\n const last_v = data[last_idx];\n const has_last = last_v !== null && last_v !== undefined && !Number.isNaN(last_v);\n\n const hover_v = hover_idx !== null ? data[hover_idx] : null;\n const hover_has_v = hover_v !== null && hover_v !== undefined && !Number.isNaN(hover_v);\n\n return (\n <svg\n ref={svg_ref}\n viewBox={`0 0 ${width} ${height}`}\n onMouseMove={showTooltip ? handle_mouse_move : undefined}\n onMouseLeave={showTooltip ? handle_mouse_leave : undefined}\n className={cn(\"cls_hazo_chart\", className)}\n style={{\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n maxHeight: `${height + 10}px`,\n cursor: showTooltip ? \"crosshair\" : \"default\",\n }}\n >\n {/* Gridlines */}\n {[0, 1, 2].map((i) => {\n const y = PAD_TOP + (i / 2) * (geo.vbox_h - PAD_TOP - PAD_BOTTOM);\n return (\n <line\n key={i}\n x1={PAD_LEFT}\n x2={geo.vbox_w - PAD_RIGHT}\n y1={y}\n y2={y}\n stroke={GRIDLINE_COLOR}\n strokeWidth={0.5}\n strokeDasharray=\"2,3\"\n />\n );\n })}\n\n {/* Area + line */}\n {area_d && <path d={area_d} fill={color} fillOpacity={0.12} stroke=\"none\" />}\n {line_d && <path d={line_d} stroke={color} strokeWidth={1.8} fill=\"none\" />}\n\n {/* Y-axis labels */}\n <text x={PAD_LEFT - 4} y={PAD_TOP + 3} textAnchor=\"end\" fill={AXIS_LABEL_COLOR} fontSize={9}>\n {format_num(geo.y_max)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={PAD_TOP + (geo.vbox_h - PAD_TOP - PAD_BOTTOM) / 2 + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {format_num((geo.y_max + geo.y_min) / 2)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={geo.vbox_h - PAD_BOTTOM + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {format_num(geo.y_min)}\n </text>\n\n {/* X-axis labels (start / mid / end) */}\n {x_label_idx.map((idx, k) => {\n const anchor = k === 0 ? \"start\" : k === 1 ? \"middle\" : \"end\";\n const x_pos = geo.cx(idx);\n return (\n <text\n key={`x_${k}`}\n x={x_pos}\n y={geo.vbox_h - 6}\n textAnchor={anchor}\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {dates[idx] ?? \"\"}\n </text>\n );\n })}\n\n {/* Current-value marker (only on last data point — not the hover one) */}\n {has_last && hover_idx === null && (() => {\n const x = geo.cx(last_idx);\n const y = geo.cy(last_v as number);\n return (\n <>\n <line\n x1={x}\n x2={PAD_LEFT}\n y1={y}\n y2={y}\n stroke={color}\n strokeWidth={0.5}\n strokeDasharray=\"2,2\"\n opacity={0.4}\n />\n <circle cx={x} cy={y} r={3.5} fill={color} stroke={color} strokeWidth={2} fillOpacity={0.3} />\n <circle cx={x} cy={y} r={2} fill={color} />\n <text x={x - 6} y={y - 6} textAnchor=\"end\" fill={color} fontSize={10} fontWeight={700}>\n {format_num(last_v as number)}\n {unit}\n </text>\n </>\n );\n })()}\n\n {/* Hover cursor + bubble */}\n {showTooltip && hover_idx !== null && hover_has_v && (() => {\n const x = geo.cx(hover_idx);\n const y = geo.cy(hover_v as number);\n const label = `${format_num(hover_v as number)}${unit}`;\n const date = dates[hover_idx] ?? \"\";\n // Bubble dimensions sized to the longer of label vs date.\n const bubble_text_w = Math.max(label.length, date.length) * 5.5 + 12;\n const bubble_w = Math.max(bubble_text_w, 40);\n const bubble_h = 26;\n // Flip the bubble to the left of the cursor if it would overflow the right edge.\n const flip = x + bubble_w + 6 > geo.vbox_w - PAD_RIGHT;\n const bubble_x = flip ? x - bubble_w - 6 : x + 6;\n const bubble_y = Math.max(PAD_TOP, Math.min(y - bubble_h / 2, geo.vbox_h - PAD_BOTTOM - bubble_h));\n return (\n <>\n <line\n x1={x}\n x2={x}\n y1={PAD_TOP}\n y2={geo.vbox_h - PAD_BOTTOM}\n stroke={color}\n strokeWidth={0.5}\n strokeDasharray=\"2,2\"\n opacity={0.6}\n />\n <circle cx={x} cy={y} r={3} fill={color} />\n <rect\n x={bubble_x}\n y={bubble_y}\n width={bubble_w}\n height={bubble_h}\n rx={3}\n fill=\"#0d1117\"\n stroke={color}\n strokeWidth={0.5}\n fillOpacity={0.92}\n />\n <text\n x={bubble_x + bubble_w / 2}\n y={bubble_y + 11}\n textAnchor=\"middle\"\n fill={color}\n fontSize={10}\n fontWeight={700}\n >\n {label}\n </text>\n <text\n x={bubble_x + bubble_w / 2}\n y={bubble_y + 22}\n textAnchor=\"middle\"\n fill={AXIS_LABEL_COLOR}\n fontSize={8}\n >\n {date}\n </text>\n </>\n );\n })()}\n </svg>\n );\n}\n","\"use client\";\n\n/**\n * MultiLineChart — multi-series chart with shared Y-axis.\n *\n * No area fill (PRD §6b — \"multi-series uses lines only to avoid color\n * collisions\"). Each series gets a per-endpoint marker + value label so\n * the latest value is readable without hovering. Hover surfaces a single\n * cursor line with one bubble per series stacked vertically.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { format_num, pick_x_label_indices } from \"./format\";\nimport type { MultiSeries } from \"./types\";\n\nexport interface MultiLineChartProps {\n series: MultiSeries[];\n dates: string[];\n width?: number;\n height?: number;\n showTooltip?: boolean;\n showLegend?: boolean;\n className?: string;\n}\n\nconst PAD_LEFT = 38;\nconst PAD_RIGHT = 14;\nconst PAD_TOP = 12;\nconst PAD_BOTTOM = 22;\nconst AXIS_LABEL_COLOR = \"#8b949e\";\nconst GRIDLINE_COLOR = \"#2a3441\";\n\ninterface Geometry {\n vbox_w: number;\n vbox_h: number;\n y_min: number;\n y_max: number;\n point_count: number;\n cx: (i: number) => number;\n cy: (v: number) => number;\n}\n\nfunction compute_geometry(\n series: MultiSeries[],\n width: number,\n height: number,\n): Geometry | null {\n const all_vals: number[] = [];\n let n = 0;\n for (const s of series) {\n n = Math.max(n, s.data.length);\n for (const v of s.data) if (v !== null && !Number.isNaN(v)) all_vals.push(v);\n }\n if (all_vals.length === 0 || n === 0) return null;\n\n const mn = Math.min(...all_vals);\n const mx = Math.max(...all_vals);\n const rng = mx - mn || mx * 0.1 + 1;\n const y_min = Math.max(0, mn - rng * 0.05);\n const y_max = mx + rng * 0.05;\n const y_rng = y_max - y_min || 1;\n\n const plot_w = width - PAD_LEFT - PAD_RIGHT;\n const plot_h = height - PAD_TOP - PAD_BOTTOM;\n\n return {\n vbox_w: width,\n vbox_h: height,\n y_min,\n y_max,\n point_count: n,\n cx: (i) => (n <= 1 ? PAD_LEFT + plot_w / 2 : PAD_LEFT + (i * plot_w) / (n - 1)),\n cy: (v) => PAD_TOP + (1 - (v - y_min) / y_rng) * plot_h,\n };\n}\n\nexport function MultiLineChart({\n series,\n dates,\n width = 360,\n height = 140,\n showTooltip = true,\n showLegend = true,\n className,\n}: MultiLineChartProps): React.ReactElement {\n const geo = compute_geometry(series, width, height);\n const [hover_idx, set_hover_idx] = React.useState<number | null>(null);\n\n const handle_mouse_move = React.useCallback(\n (e: React.MouseEvent<SVGSVGElement>) => {\n if (!geo) return;\n const rect = e.currentTarget.getBoundingClientRect();\n if (rect.width === 0) return;\n const vbox_x = ((e.clientX - rect.left) / rect.width) * geo.vbox_w;\n const plot_w = geo.vbox_w - PAD_LEFT - PAD_RIGHT;\n if (vbox_x < PAD_LEFT || vbox_x > geo.vbox_w - PAD_RIGHT) {\n set_hover_idx(null);\n return;\n }\n const ratio = (vbox_x - PAD_LEFT) / plot_w;\n const idx = Math.round(ratio * (geo.point_count - 1));\n set_hover_idx(Math.max(0, Math.min(geo.point_count - 1, idx)));\n },\n [geo],\n );\n\n const handle_mouse_leave = React.useCallback(() => set_hover_idx(null), []);\n\n if (!geo) {\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={cn(\"cls_hazo_chart cls_hazo_chart_empty\", className)}\n style={{ width: \"100%\", height: \"auto\", display: \"block\", maxHeight: `${height + 10}px` }}\n />\n );\n }\n\n const x_label_idx = pick_x_label_indices(geo.point_count);\n\n return (\n <div className={cn(\"cls_hazo_chart_wrapper\", className)}>\n <svg\n viewBox={`0 0 ${width} ${height}`}\n onMouseMove={showTooltip ? handle_mouse_move : undefined}\n onMouseLeave={showTooltip ? handle_mouse_leave : undefined}\n className=\"cls_hazo_chart cls_hazo_chart_multi\"\n style={{\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n maxHeight: `${height + 10}px`,\n cursor: showTooltip ? \"crosshair\" : \"default\",\n }}\n >\n {/* Gridlines */}\n {[0, 1, 2].map((i) => {\n const y = PAD_TOP + (i / 2) * (geo.vbox_h - PAD_TOP - PAD_BOTTOM);\n return (\n <line\n key={i}\n x1={PAD_LEFT}\n x2={geo.vbox_w - PAD_RIGHT}\n y1={y}\n y2={y}\n stroke={GRIDLINE_COLOR}\n strokeWidth={0.5}\n strokeDasharray=\"2,3\"\n />\n );\n })}\n\n {/* Y labels */}\n <text x={PAD_LEFT - 4} y={PAD_TOP + 3} textAnchor=\"end\" fill={AXIS_LABEL_COLOR} fontSize={9}>\n {format_num(geo.y_max)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={PAD_TOP + (geo.vbox_h - PAD_TOP - PAD_BOTTOM) / 2 + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {format_num((geo.y_max + geo.y_min) / 2)}\n </text>\n <text x={PAD_LEFT - 4} y={geo.vbox_h - PAD_BOTTOM + 3} textAnchor=\"end\" fill={AXIS_LABEL_COLOR} fontSize={9}>\n {format_num(geo.y_min)}\n </text>\n\n {/* X labels */}\n {x_label_idx.map((idx, k) => {\n const anchor = k === 0 ? \"start\" : k === 1 ? \"middle\" : \"end\";\n return (\n <text\n key={`x_${k}`}\n x={geo.cx(idx)}\n y={geo.vbox_h - 6}\n textAnchor={anchor}\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {dates[idx] ?? \"\"}\n </text>\n );\n })}\n\n {/* Series lines + endpoint markers */}\n {series.map((s, s_idx) => {\n let d = \"\";\n s.data.forEach((v, i) => {\n if (v === null || Number.isNaN(v)) return;\n d += `${d ? \" L\" : \"M\"}${geo.cx(i).toFixed(1)},${geo.cy(v).toFixed(1)}`;\n });\n const last_idx = s.data.length - 1;\n const last_v = s.data[last_idx];\n const has_last = last_v !== null && last_v !== undefined && !Number.isNaN(last_v);\n return (\n <g key={`series_${s_idx}`}>\n {d && <path d={d} stroke={s.color} strokeWidth={1.7} fill=\"none\" />}\n {has_last && hover_idx === null && (\n <>\n <circle\n cx={geo.cx(last_idx)}\n cy={geo.cy(last_v as number)}\n r={3}\n fill={s.color}\n fillOpacity={0.3}\n stroke={s.color}\n strokeWidth={1.5}\n />\n <text\n x={geo.cx(last_idx) - 5}\n y={geo.cy(last_v as number) - 5}\n textAnchor=\"end\"\n fill={s.color}\n fontSize={9}\n fontWeight={700}\n >\n {format_num(last_v as number)}\n </text>\n </>\n )}\n </g>\n );\n })}\n\n {/* Hover cursor + per-series bubbles */}\n {showTooltip && hover_idx !== null && (() => {\n const x = geo.cx(hover_idx);\n const items = series\n .map((s) => ({\n label: s.label,\n color: s.color,\n value: s.data[hover_idx] ?? null,\n }))\n .filter((it) => it.value !== null && !Number.isNaN(it.value as number));\n if (items.length === 0) return null;\n\n const bubble_w = 70;\n const row_h = 12;\n const bubble_h = items.length * row_h + 18;\n const flip = x + bubble_w + 6 > geo.vbox_w - PAD_RIGHT;\n const bubble_x = flip ? x - bubble_w - 6 : x + 6;\n const bubble_y = Math.max(PAD_TOP, Math.min(PAD_TOP + 5, geo.vbox_h - PAD_BOTTOM - bubble_h));\n\n return (\n <>\n <line\n x1={x}\n x2={x}\n y1={PAD_TOP}\n y2={geo.vbox_h - PAD_BOTTOM}\n stroke={AXIS_LABEL_COLOR}\n strokeWidth={0.5}\n strokeDasharray=\"2,2\"\n opacity={0.6}\n />\n {items.map((it) => (\n <circle\n key={`hd_${it.label}`}\n cx={x}\n cy={geo.cy(it.value as number)}\n r={3}\n fill={it.color}\n />\n ))}\n <rect\n x={bubble_x}\n y={bubble_y}\n width={bubble_w}\n height={bubble_h}\n rx={3}\n fill=\"#0d1117\"\n stroke={AXIS_LABEL_COLOR}\n strokeWidth={0.5}\n fillOpacity={0.92}\n />\n <text x={bubble_x + 6} y={bubble_y + 10} fill={AXIS_LABEL_COLOR} fontSize={8}>\n {dates[hover_idx] ?? \"\"}\n </text>\n {items.map((it, i) => (\n <g key={`row_${i}`}>\n <rect\n x={bubble_x + 6}\n y={bubble_y + 14 + i * row_h}\n width={6}\n height={6}\n fill={it.color}\n />\n <text\n x={bubble_x + 16}\n y={bubble_y + 20 + i * row_h}\n fill={it.color}\n fontSize={9}\n fontWeight={600}\n >\n {format_num(it.value as number)}\n </text>\n </g>\n ))}\n </>\n );\n })()}\n </svg>\n {showLegend && (\n <div\n className=\"cls_hazo_chart_legend\"\n style={{\n display: \"flex\",\n gap: \"12px\",\n justifyContent: \"center\",\n marginTop: \"4px\",\n fontSize: \"10px\",\n color: AXIS_LABEL_COLOR,\n flexWrap: \"wrap\",\n }}\n >\n {series.map((s) => (\n <span\n key={s.label}\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: \"4px\" }}\n >\n <i\n style={{\n display: \"inline-block\",\n width: \"8px\",\n height: \"8px\",\n background: s.color,\n borderRadius: \"1px\",\n }}\n />\n {s.label}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * StackedBars — one vertical bar per X position, each split into top-to-bottom\n * colored bands.\n *\n * Generic enough for any distribution-over-time visual: GSC position buckets\n * (Top 3 / 4-10 / 11-20 / 20+), traffic source mix (organic / direct / referral),\n * etc. The component is data-driven via `bars: StackedBar[]` — the consumer\n * picks the segment colors, the labels, and the band order.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { format_num, pick_x_label_indices } from \"./format\";\nimport type { StackedBar } from \"./types\";\n\nexport interface StackedBarsProps {\n bars: StackedBar[];\n width?: number;\n height?: number;\n /** Show Y-axis ticks (max, mid, 0). Defaults to true. */\n showYAxis?: boolean;\n className?: string;\n}\n\nconst PAD_LEFT = 32;\nconst PAD_RIGHT = 8;\nconst PAD_TOP = 10;\nconst PAD_BOTTOM = 22;\nconst BAR_GAP_RATIO = 0.25;\nconst AXIS_LABEL_COLOR = \"#8b949e\";\n\nexport function StackedBars({\n bars,\n width = 360,\n height = 140,\n showYAxis = true,\n className,\n}: StackedBarsProps): React.ReactElement {\n const totals = bars.map((b) => b.segments.reduce((sum, s) => sum + s.value, 0));\n const y_max = Math.max(0, ...totals) || 1;\n\n const plot_w = width - PAD_LEFT - PAD_RIGHT;\n const plot_h = height - PAD_TOP - PAD_BOTTOM;\n const slot_w = bars.length > 0 ? plot_w / bars.length : 0;\n const bar_w = slot_w * (1 - BAR_GAP_RATIO);\n\n const x_for = (i: number): number => PAD_LEFT + i * slot_w + (slot_w - bar_w) / 2;\n const x_label_idx = pick_x_label_indices(bars.length);\n\n return (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={cn(\"cls_hazo_chart cls_hazo_chart_stacked_bars\", className)}\n style={{ width: \"100%\", height: \"auto\", display: \"block\", maxHeight: `${height + 10}px` }}\n >\n {/* Y-axis labels */}\n {showYAxis && (\n <>\n <text x={PAD_LEFT - 4} y={PAD_TOP + 3} textAnchor=\"end\" fill={AXIS_LABEL_COLOR} fontSize={9}>\n {format_num(y_max)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={PAD_TOP + plot_h / 2 + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {format_num(y_max / 2)}\n </text>\n <text\n x={PAD_LEFT - 4}\n y={height - PAD_BOTTOM + 3}\n textAnchor=\"end\"\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n 0\n </text>\n </>\n )}\n\n {/* Bars */}\n {bars.map((bar, i) => {\n let cursor_y = height - PAD_BOTTOM;\n return (\n <g key={`bar_${i}`}>\n {bar.segments.map((seg, s_idx) => {\n if (seg.value <= 0) return null;\n const seg_h = (seg.value / y_max) * plot_h;\n const y = cursor_y - seg_h;\n cursor_y = y;\n return (\n <rect\n key={`seg_${s_idx}`}\n x={x_for(i)}\n y={y}\n width={bar_w}\n height={seg_h}\n fill={seg.color}\n />\n );\n })}\n </g>\n );\n })}\n\n {/* X-axis labels (start / mid / end) */}\n {x_label_idx.map((idx, k) => {\n const anchor = k === 0 ? \"start\" : k === 1 ? \"middle\" : \"end\";\n const x_pos = x_for(idx) + bar_w / 2;\n return (\n <text\n key={`x_${k}`}\n x={x_pos}\n y={height - 6}\n textAnchor={anchor}\n fill={AXIS_LABEL_COLOR}\n fontSize={9}\n >\n {bars[idx]?.label ?? \"\"}\n </text>\n );\n })}\n </svg>\n );\n}\n","\"use client\";\n\n/**\n * DateRangeSelector — segmented control for picking a chart's time window.\n *\n * Framework-agnostic: emits the new value via `onChange`. The consumer\n * decides whether to write it to a URL query param (Next.js router), a\n * local state, or a global store — hazo_ui has no opinion on routing.\n *\n * Visually a row of pills, the active one tinted with the primary color.\n * Designed to sit immediately above a chart on the Trends / Bing / GA4\n * pages where users need to flip between \"14d\", \"30d\", and \"since launch\".\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { DateRangeOption } from \"./types\";\n\nexport interface DateRangeSelectorProps {\n value: string;\n onChange: (value: string) => void;\n options: DateRangeOption[];\n className?: string;\n /** Aria label for the whole group. Defaults to \"Date range\". */\n ariaLabel?: string;\n}\n\nexport function DateRangeSelector({\n value,\n onChange,\n options,\n className,\n ariaLabel = \"Date range\",\n}: DateRangeSelectorProps): React.ReactElement {\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n className={cn(\n \"cls_hazo_date_range_selector inline-flex items-center gap-0 rounded-md border bg-background p-0.5\",\n className,\n )}\n >\n {options.map((opt) => {\n const is_active = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n aria-pressed={is_active}\n onClick={() => {\n if (!is_active) onChange(opt.value);\n }}\n className={cn(\n \"cls_hazo_date_range_option px-2.5 py-1 text-xs font-medium rounded-sm transition-colors\",\n is_active\n ? \"bg-primary text-primary-foreground\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\",\n )}\n >\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","/**\n * hazo_ui_celebration/index.tsx\n *\n * CelebrationModal: imperative confetti + modal overlay with optional shareable card.\n * Mount <CelebrationProvider /> once at root, then call celebrate({ ... }) from anywhere.\n *\n * Session gating: each id is written to sessionStorage (hazo_ui_celebration_<id>) when\n * shown. Duplicate calls with the same id within the session are no-ops.\n * Cross-session gating is the consumer's responsibility.\n *\n * Queue policy: FIFO. Gating runs at call time (before enqueue), not at display time.\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { X, Download, Share2, Copy, Loader2 } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport chime_url from \"../../assets/celebration-chime.mp3\";\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\n/** Default gradient for the shareable card background. Override via shareableCard.background. */\nexport const CELEBRATION_GRADIENT =\n \"linear-gradient(135deg, #667eea 0%, #764ba2 100%)\";\n\nconst CARD_SIZE = 1080;\nconst PREVIEW_SIZE = 400;\nconst CARD_SCALE = PREVIEW_SIZE / CARD_SIZE;\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface CelebrationShareableCard {\n /**\n * CSS background value applied to the 1080×1080 card.\n * Default: CELEBRATION_GRADIENT.\n */\n background?: string;\n /** ReactNode rendered at full 1080×1080 size (scaled down for preview). */\n foreground: React.ReactNode;\n /**\n * Caption at the bottom of the card.\n * Falls back to the top-level subtitle when omitted.\n */\n caption?: string;\n}\n\nexport interface CelebrationPayload {\n /**\n * Unique identifier. Also the sessionStorage dedup key:\n * hazo_ui_celebration_<id> = \"1\" once shown.\n */\n id: string;\n title: string;\n subtitle?: string;\n shareableCard?: CelebrationShareableCard;\n /** Auto-dismiss the modal after autoDismissDelay ms. Default true. */\n autoDismiss?: boolean;\n /**\n * Duration in ms before auto-dismiss. Default 8000.\n * Set to a short value (e.g. 100) in tests.\n */\n autoDismissDelay?: number;\n /** Play the bundled success chime when the modal opens. Default false. */\n audioChime?: boolean;\n}\n\n// ─── Module-level imperative handle ──────────────────────────────────────────\n\nlet _enqueue: ((payload: CelebrationPayload) => void) | null = null;\n\n/**\n * Fire a celebration modal from anywhere in the tree.\n * No-ops when <CelebrationProvider /> is not mounted or the id was already\n * shown this session.\n */\nexport function celebrate(payload: CelebrationPayload): void {\n if (!_enqueue) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"[hazo_ui] celebrate() called before <CelebrationProvider /> was mounted\"\n );\n }\n return;\n }\n _enqueue(payload);\n}\n\n// ─── Provider ─────────────────────────────────────────────────────────────────\n\nexport interface CelebrationProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Mount once near the root of your app (e.g. (app)/layout.tsx).\n * Renders the current celebration modal and manages the FIFO queue.\n */\nexport function CelebrationProvider({ children }: CelebrationProviderProps) {\n const [queue, set_queue] = React.useState<CelebrationPayload[]>([]);\n\n const enqueue = React.useCallback((payload: CelebrationPayload) => {\n // Gating runs at call time — before the item enters the queue\n const storage_key = `hazo_ui_celebration_${payload.id}`;\n if (typeof window !== \"undefined\" && sessionStorage.getItem(storage_key)) {\n return;\n }\n set_queue((q) => [...q, payload]);\n }, []);\n\n React.useEffect(() => {\n _enqueue = enqueue;\n return () => {\n _enqueue = null;\n };\n }, [enqueue]);\n\n const handle_close = React.useCallback(() => {\n set_queue((q) => q.slice(1));\n }, []);\n\n const current = queue[0] ?? null;\n\n return (\n <>\n {children}\n {current && (\n <CelebrationModalInner\n key={current.id}\n payload={current}\n onClose={handle_close}\n />\n )}\n </>\n );\n}\n\n// ─── Internal modal ───────────────────────────────────────────────────────────\n\ninterface CelebrationModalInnerProps {\n payload: CelebrationPayload;\n onClose: () => void;\n}\n\nfunction CelebrationModalInner({\n payload,\n onClose,\n}: CelebrationModalInnerProps) {\n const {\n id,\n title,\n subtitle,\n shareableCard,\n autoDismiss = true,\n autoDismissDelay = 8000,\n audioChime = false,\n } = payload;\n\n const [visible, set_visible] = React.useState(true);\n const [is_downloading, set_is_downloading] = React.useState(false);\n const canvas_ref = React.useRef<HTMLCanvasElement>(null);\n const card_ref = React.useRef<HTMLDivElement>(null);\n\n // Mark seen immediately on mount — gating check already ran at call time,\n // but we write here so browser-refresh within a session also deduplicates.\n React.useEffect(() => {\n sessionStorage.setItem(`hazo_ui_celebration_${id}`, \"1\");\n }, [id]);\n\n // Confetti burst\n React.useEffect(() => {\n if (!canvas_ref.current) return;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let confetti_instance: any = null;\n\n import(\"canvas-confetti\").then(({ default: confetti }) => {\n if (!canvas_ref.current) return;\n confetti_instance = confetti.create(canvas_ref.current, { resize: true });\n confetti_instance({\n particleCount: 120,\n spread: 70,\n origin: { y: 0.5 },\n colors: [\"#667eea\", \"#764ba2\", \"#f6d365\", \"#fda085\", \"#84fab0\"],\n });\n });\n\n return () => {\n confetti_instance?.reset();\n };\n }, []);\n\n // Audio chime\n React.useEffect(() => {\n if (!audioChime) return;\n const audio = new Audio(chime_url);\n audio.play().catch(() => {\n // Ignore autoplay policy errors (mobile requires prior user gesture)\n });\n }, [audioChime]);\n\n // Auto-dismiss timer\n React.useEffect(() => {\n if (!autoDismiss) return;\n const timer = window.setTimeout(close_modal, autoDismissDelay);\n return () => window.clearTimeout(timer);\n // close_modal is stable (defined below via function declaration, captured by closure)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [autoDismiss, autoDismissDelay]);\n\n // ESC key\n React.useEffect(() => {\n const on_key = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") close_modal();\n };\n document.addEventListener(\"keydown\", on_key);\n return () => document.removeEventListener(\"keydown\", on_key);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n function close_modal() {\n set_visible(false);\n // Allow CSS transition before removing from queue\n setTimeout(onClose, 150);\n }\n\n async function handle_download() {\n if (!card_ref.current) return;\n set_is_downloading(true);\n try {\n const { toPng } = await import(\"html-to-image\");\n const data_url = await toPng(card_ref.current, {\n width: CARD_SIZE,\n height: CARD_SIZE,\n });\n const a = document.createElement(\"a\");\n a.download = `${id}.png`;\n a.href = data_url;\n a.click();\n } catch (err) {\n console.error(\"[hazo_ui] CelebrationModal: download failed\", err);\n } finally {\n set_is_downloading(false);\n }\n }\n\n async function handle_share() {\n if (!card_ref.current || !navigator.share) return;\n try {\n const { toPng } = await import(\"html-to-image\");\n const data_url = await toPng(card_ref.current, {\n width: CARD_SIZE,\n height: CARD_SIZE,\n });\n const blob = await fetch(data_url).then((r) => r.blob());\n await navigator.share({\n files: [new File([blob], `${id}.png`, { type: \"image/png\" })],\n });\n } catch (err) {\n console.error(\"[hazo_ui] CelebrationModal: share failed\", err);\n }\n }\n\n async function handle_copy() {\n if (!card_ref.current) return;\n try {\n const { toPng } = await import(\"html-to-image\");\n const data_url = await toPng(card_ref.current, {\n width: CARD_SIZE,\n height: CARD_SIZE,\n });\n const blob = await fetch(data_url).then((r) => r.blob());\n await navigator.clipboard.write([\n new ClipboardItem({ \"image/png\": blob }),\n ]);\n } catch (err) {\n console.error(\"[hazo_ui] CelebrationModal: copy failed\", err);\n }\n }\n\n const resolved_caption = shareableCard?.caption ?? subtitle;\n const card_bg = shareableCard?.background ?? CELEBRATION_GRADIENT;\n const can_share =\n typeof navigator !== \"undefined\" && \"share\" in navigator;\n\n return (\n <div\n className={cn(\n \"cls_celebration_modal_overlay\",\n \"fixed inset-0 z-50 flex items-center justify-center\",\n \"bg-black/30 backdrop-blur-sm\",\n \"transition-opacity duration-150\",\n visible ? \"opacity-100\" : \"opacity-0 pointer-events-none\"\n )}\n onClick={close_modal}\n >\n {/* Confetti canvas — covers full overlay, no pointer events */}\n <canvas\n ref={canvas_ref}\n className=\"cls_celebration_confetti_canvas absolute inset-0 w-full h-full pointer-events-none\"\n />\n\n {/* Modal card */}\n <div\n className={cn(\n \"cls_celebration_modal_card\",\n \"relative bg-white rounded-2xl shadow-2xl\",\n \"flex flex-col items-center overflow-hidden\",\n \"transition-transform duration-150\",\n visible ? \"scale-100\" : \"scale-95\"\n )}\n style={{ width: 480, maxWidth: \"95vw\" }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Close button */}\n <button\n className=\"cls_celebration_close_btn absolute top-3 right-3 z-10 p-1.5 rounded-full hover:bg-black/10 transition-colors\"\n onClick={close_modal}\n aria-label=\"Close celebration\"\n >\n <X className=\"h-4 w-4 text-gray-600\" />\n </button>\n\n {/* Header */}\n <div className=\"cls_celebration_header px-8 pt-8 pb-5 text-center\">\n <h2 className=\"cls_celebration_title text-2xl font-bold text-gray-900\">\n {title}\n </h2>\n {subtitle && (\n <p className=\"cls_celebration_subtitle mt-1.5 text-sm text-gray-500 leading-relaxed\">\n {subtitle}\n </p>\n )}\n </div>\n\n {/* Shareable card preview */}\n {shareableCard && (\n <>\n {/*\n * The inner div is the actual 1080×1080 html-to-image capture target.\n * CSS scale() brings it down to 400×400 for the preview.\n * overflow-hidden on the wrapper clips the overflow.\n */}\n <div\n className=\"cls_celebration_card_preview_wrapper overflow-hidden rounded-lg mx-8\"\n style={{ width: PREVIEW_SIZE, height: PREVIEW_SIZE }}\n >\n <div\n ref={card_ref}\n className=\"cls_celebration_card_inner\"\n style={{\n width: CARD_SIZE,\n height: CARD_SIZE,\n transform: `scale(${CARD_SCALE})`,\n transformOrigin: \"top left\",\n background: card_bg,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 80,\n boxSizing: \"border-box\",\n }}\n >\n {shareableCard.foreground}\n {resolved_caption && (\n <p\n style={{\n marginTop: 32,\n fontSize: 36,\n color: \"white\",\n textAlign: \"center\",\n fontWeight: 600,\n lineHeight: 1.3,\n }}\n >\n {resolved_caption}\n </p>\n )}\n </div>\n </div>\n\n {/* Card action buttons */}\n <div className=\"cls_celebration_card_actions flex flex-wrap gap-2 px-8 py-5\">\n <Button\n className=\"cls_celebration_download_btn\"\n size=\"sm\"\n onClick={handle_download}\n disabled={is_downloading}\n >\n {is_downloading ? (\n <Loader2 className=\"h-3.5 w-3.5 mr-1.5 animate-spin\" />\n ) : (\n <Download className=\"h-3.5 w-3.5 mr-1.5\" />\n )}\n Download PNG\n </Button>\n {can_share && (\n <Button variant=\"outline\" size=\"sm\" onClick={handle_share}>\n <Share2 className=\"h-3.5 w-3.5 mr-1.5\" />\n Share\n </Button>\n )}\n <Button variant=\"outline\" size=\"sm\" onClick={handle_copy}>\n <Copy className=\"h-3.5 w-3.5 mr-1.5\" />\n Copy image\n </Button>\n </div>\n </>\n )}\n\n {/* Footer dismiss (no card) */}\n {!shareableCard && (\n <div className=\"cls_celebration_footer pb-8\">\n <Button size=\"sm\" onClick={close_modal}>\n Dismiss\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
|