@sequenceholdings/atlas-ui 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/charts.d.ts +157 -0
- package/dist/charts.mjs +35 -23
- package/dist/index.d.ts +3961 -0
- package/dist/index.mjs +36736 -10455
- package/dist/{utils-Dhlckutd.js → utils-BZS7Y02J.js} +1 -3
- package/package.json +15 -7
- package/dist/charts.mjs.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/utils-Dhlckutd.js.map +0 -1
- package/src/charts.ts +0 -17
- package/src/index.ts +0 -216
- package/src/process-env.d.ts +0 -8
- package/src/tokens.css +0 -220
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["React","React","createSlot","isSlottable","Slot","createSlotClone","getElementRef","mergeProps","SLOTTABLE_IDENTIFIER","Primitive","createSlot","React","NAME","Label","React","Primitive","Root","NAME","Separator","React","Primitive","Root","defaultAttributes","defaultAttributes","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","React","useLayoutEffect2","React","React","useLayoutEffect","isFunction","React","React","React","React","getElementRef","Fragment2","React","Switch","React","getState","BUBBLE_INPUT_NAME","Root","NAME","Toggle","React","Root","React","count","useCallbackRef","React","React","EVENT_OPTIONS","GROUP_NAME","Collection","useCollection","createCollectionScope","React","useCallbackRef","ITEM_NAME","wrapArray","focusFirst","Root","useRovingFocusGroupScope","ToggleGroup","ToggleGroupContext","RovingFocusGroup.Root","ITEM_NAME","ToggleGroupItem","RovingFocusGroup.Item","Toggle","Root2","Item2","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","React","React2","useRovingFocusGroupScope","Tabs","React","TabsList","RovingFocusGroup.Root","TRIGGER_NAME","TabsTrigger","RovingFocusGroup.Item","CONTENT_NAME","TabsContent","Root2","Trigger","Content","useCallbackRef","React","useCallbackRef","React","useCallbackRef","min","max","computePosition","arrow","min","min$1","flip","hide","offset","shift","limitShift","size","max","getComputedStyle","max","min","offset","offset$1","shift","shift$1","flip","flip$1","size","size$1","hide","hide$1","arrow","arrow$1","limitShift","limitShift$1","React","NAME","Arrow","React","Root","React","ANCHOR_NAME","CONTENT_NAME","arrow","floatingUIarrow","useCallbackRef","ARROW_NAME","ArrowPrimitive.Root","Root2","Content","PORTAL_NAME","Portal","React","React","Root","usePopperScope","TooltipProvider","React","Tooltip","PopperPrimitive.Root","TRIGGER_NAME","TooltipTrigger","PopperPrimitive.Anchor","PORTAL_NAME","PortalProvider","usePortalContext","PortalPrimitive","CONTENT_NAME","TooltipContent","isPointInPolygon","Slottable","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","ARROW_NAME","TooltipArrow","PopperPrimitive.Arrow","Root3","Trigger","Portal","Content2","Arrow2","cn","Toaster","isFunction","memo","count","passiveSupported","React","useIsomorphicLayoutEffect","React","React","isIndeterminate","TRIGGER_NAME","getState","Checkbox","INDICATOR_NAME","React","useCallbackRef","focusFirst","React","React","React","React","React","React","SideCar","usePopperScope","Popover","React","PopperPrimitive.Root","ANCHOR_NAME","PopoverAnchor","PopperPrimitive.Anchor","TRIGGER_NAME","PopoverTrigger","getState","PORTAL_NAME","PortalProvider","usePortalContext","PortalPrimitive","CONTENT_NAME","PopoverContent","Slot","RemoveScroll","PopperPrimitive.Content","CLOSE_NAME","ARROW_NAME","PopperPrimitive.Arrow","Root2","Anchor2","Trigger","Portal","Content2","Dialog","React","TRIGGER_NAME","DialogTrigger","PORTAL_NAME","PortalProvider","usePortalContext","DialogPortal","PortalPrimitive","OVERLAY_NAME","DialogOverlay","Slot","RemoveScroll","CONTENT_NAME","DialogContent","DescriptionWarning","TITLE_NAME","DialogTitle","DESCRIPTION_NAME","DialogDescription","DialogClose","createContext","Trigger","Portal","React","useCallbackRef","PopperPrimitive.Root","PopperPrimitive.Anchor","PORTAL_NAME","PortalPrimitive","CONTENT_NAME","RemoveScroll","RovingFocusGroup.Root","PopperPrimitive.Content","GROUP_NAME","LABEL_NAME","ITEM_NAME","RovingFocusGroup.Item","CHECKBOX_ITEM_NAME","RADIO_GROUP_NAME","RADIO_ITEM_NAME","SEPARATOR_NAME","ARROW_NAME","PopperPrimitive.Arrow","SUB_NAME","SUB_TRIGGER_NAME","SUB_CONTENT_NAME","Content2","Label","Item2","Separator","ContextMenu","React","useCallbackRef","MenuPrimitive.Root","TRIGGER_NAME","ContextMenuTrigger","MenuPrimitive.Anchor","PORTAL_NAME","ContextMenuPortal","MenuPrimitive.Portal","CONTENT_NAME","ContextMenuContent","MenuPrimitive.Content","ContextMenuGroup","MenuPrimitive.Group","ContextMenuLabel","MenuPrimitive.Label","ContextMenuItem","MenuPrimitive.Item","ContextMenuCheckboxItem","MenuPrimitive.CheckboxItem","ContextMenuRadioGroup","MenuPrimitive.RadioGroup","ContextMenuRadioItem","MenuPrimitive.RadioItem","MenuPrimitive.ItemIndicator","ContextMenuSeparator","MenuPrimitive.Separator","MenuPrimitive.Arrow","ContextMenuSub","MenuPrimitive.Sub","ContextMenuSubTrigger","MenuPrimitive.SubTrigger","ContextMenuSubContent","MenuPrimitive.SubContent","Root2","Portal2","Content2","AlertDialog","DialogPrimitive.Root","AlertDialogTrigger","React","DialogPrimitive.Trigger","AlertDialogPortal","DialogPrimitive.Portal","AlertDialogOverlay","DialogPrimitive.Overlay","AlertDialogContent","DialogPrimitive.WarningProvider","DialogPrimitive.Content","AlertDialogTitle","DialogPrimitive.Title","AlertDialogDescription","DialogPrimitive.Description","AlertDialogAction","DialogPrimitive.Close","AlertDialogCancel"],"sources":["../../../../atlas/src/shared/lib/format.ts","../../../../atlas/src/shared/contexts/PortalContainerContext.tsx","../../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../../../../atlas/src/shared/components/ui/badge.tsx","../../../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.2_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-slot@1.2.4_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.4_@types+react-dom@19.2.3_@types+react@19.2.14__@types+re_c8c8fd2647f03197dbf56370d7498033/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-label@2.1.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_8d35ec453e0b59eefe06771bb1432577/node_modules/@radix-ui/react-label/dist/index.mjs","../../../../atlas/src/shared/components/ui/required-marker.tsx","../../../../atlas/src/shared/components/ui/label.tsx","../../../../node_modules/.pnpm/@radix-ui+react-separator@1.1.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+re_1c2d14dd6f3e6960869b5d7d9355f1a3/node_modules/@radix-ui/react-separator/dist/index.mjs","../../../../atlas/src/shared/components/ui/separator.tsx","../../../../atlas/src/shared/components/ui/field.tsx","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/shared/src/utils.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/defaultAttributes.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/Icon.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/createLucideIcon.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/arrow-down.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/arrow-up.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/check.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/chevron-right.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/circle.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/cloud-upload.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/file.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/minus.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/search.js","../../../../node_modules/.pnpm/lucide-react@0.546.0_react@19.2.6/node_modules/lucide-react/dist/esm/icons/x.js","../../../../atlas/src/shared/components/ui/input.tsx","../../../../atlas/src/shared/components/ui/search-input.tsx","../../../../node_modules/.pnpm/@radix-ui+primitive@1.1.3/node_modules/@radix-ui/primitive/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-context@1.1.2_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-context/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.1_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.2_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-use-previous@1.1.1_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.1-rc.9_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-use-size@1.1.1_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-use-size/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-slot@1.2.3_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.3_@types+react-dom@19.2.3_@types+react@19.2.14__@types+re_0935c7b95cefcdb4f10a34e92035e5e3/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_fb4779bfc166cf9d3db05474981c0df1/node_modules/@radix-ui/react-switch/dist/index.mjs","../../../../atlas/src/shared/components/ui/switch.tsx","../../../../atlas/src/shared/components/ui/choice-card.tsx","../../../../atlas/src/shared/components/ui/code-badge.tsx","../../../../atlas/src/shared/components/ui/form-field.tsx","../../../../node_modules/.pnpm/@radix-ui+react-toggle@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_1170d6428188a43ba2f1794b2158e623/node_modules/@radix-ui/react-toggle/dist/index.mjs","../../../../atlas/src/shared/components/ui/toggle.tsx","../../../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+r_b94f5365b88697a700662930c56ccffc/node_modules/@radix-ui/react-collection/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-id@1.1.1_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-id/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.1_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-direction/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14__@type_b849ea542e77d5b397b1fe12d9f00b2e/node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-toggle-group@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14__@type_f53932d1010514ee55ce15134943c7f6/node_modules/@radix-ui/react-toggle-group/dist/index.mjs","../../../../atlas/src/shared/components/ui/toggle-group.tsx","../../../../atlas/src/shared/components/ui/card.tsx","../../../../atlas/src/shared/components/ui/progress-bar.tsx","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDownRight.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDown.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowUpRight.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowUp.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronDown.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronUp.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconLoader2.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconMinus.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.43.0_react@19.2.6/node_modules/@tabler/icons-react/dist/esm/icons/IconX.mjs","../../../../atlas/src/shared/components/ui/spinner.tsx","../../../../node_modules/.pnpm/@radix-ui+react-presence@1.1.5_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_abbc8bcf75333b39bfe32b13ef7abc0e/node_modules/@radix-ui/react-presence/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-tabs@1.1.13_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_08684373bbac196273bdefb5472f93a8/node_modules/@radix-ui/react-tabs/dist/index.mjs","../../../../atlas/src/shared/components/ui/tabs.tsx","../../../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.1-rc.9_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.1.1_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14___9e4771d0900293d89694eff7a0933149/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../../node_modules/.pnpm/@floating-ui+react-dom@2.1.8_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../../node_modules/.pnpm/@radix-ui+react-arrow@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_07ab85c571739f89808dad9390df6d71/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-popper@1.2.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_505ed917ba38a18b4046dabcb3d6a2bb/node_modules/@radix-ui/react-popper/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-portal@1.1.9_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_266ca67294f168fbf2e025541d323e69/node_modules/@radix-ui/react-portal/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.3_@types+react-dom@19.2.3_@types+react@19.2.14__@ty_d1be9c417e0b55d219bafdc186d26ce0/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_8c33d96ab4033e6041e8b8646beae976/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../../../atlas/src/shared/components/ui/tooltip.tsx","../../../../node_modules/.pnpm/sonner@2.0.7_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/sonner/dist/index.mjs","../../../../atlas/src/shared/components/ui/sonner.tsx","../../../../node_modules/.pnpm/@tanstack+table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.mjs","../../../../node_modules/.pnpm/@tanstack+react-table@8.21.3_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-table/build/lib/index.mjs","../../../../atlas/src/shared/components/ui/table.tsx","../../../../atlas/src/shared/components/ui/button.tsx","../../../../atlas/src/shared/components/ui/data-table.tsx","../../../../atlas/src/shared/components/ui/dot-label.tsx","../../../../atlas/src/shared/components/ui/loading-state.tsx","../../../../atlas/src/shared/components/ui/heatmap-table.tsx","../../../../atlas/src/shared/components/ui/metric-card.tsx","../../../../atlas/src/shared/components/ui/kpi-tile.tsx","../../../../atlas/src/shared/components/ui/trend-badge.tsx","../../../../atlas/src/shared/components/ui/pro-data-table.tsx","../../../../atlas/src/shared/components/ui/async-action-button.tsx","../../../../atlas/src/shared/components/ui/file-dropzone.tsx","../../../../atlas/src/shared/components/ui/filter-pill.tsx","../../../../atlas/src/shared/components/ui/segmented-control.tsx","../../../../atlas/src/shared/components/ui/error-state.tsx","../../../../atlas/src/shared/components/ui/page-skeleton.tsx","../../../../atlas/src/shared/components/ui/skeleton.tsx","../../../../atlas/src/shared/components/ui/route-loading.tsx","../../../../atlas/src/shared/components/ui/ack-badges.tsx","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.14.0/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.14.0/node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../../node_modules/.pnpm/@tanstack+react-virtual@3.13.24_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-virtual/dist/esm/index.js","../../../../node_modules/.pnpm/@radix-ui+react-checkbox@1.3.3_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_36946c77eec45f5a9fc04b1442c78a6c/node_modules/@radix-ui/react-checkbox/dist/index.mjs","../../../../atlas/src/shared/components/ui/checkbox.tsx","../../../../atlas/src/shared/components/ui/data-review-table.tsx","../../../../atlas/src/shared/components/ui/diff-cell.tsx","../../../../atlas/src/shared/components/ui/progress-card.tsx","../../../../atlas/src/shared/components/ui/dashboard-shell.tsx","../../../../atlas/src/shared/components/ui/metric-grid.tsx","../../../../atlas/src/shared/components/ui/section-header.tsx","../../../../atlas/src/shared/components/ui/tab-page.tsx","../../../../atlas/src/shared/components/ui/sidebar-nav.tsx","../../../../atlas/src/shared/components/ui/editor-top-bar.tsx","../../../../atlas/src/shared/components/ui/editor-side-nav.tsx","../../../../atlas/src/shared/components/ui/editor-page-header.tsx","../../../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.3_@types+react@19.2.14_react@19.2.6/node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+_c6061abe6ab403e0e04cce9bd67455fb/node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../../../node_modules/.pnpm/aria-hidden@1.2.6/node_modules/aria-hidden/dist/es2015/index.js","../../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.14_react@19.2.6/node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.14_react@19.2.6/node_modules/use-callback-ref/dist/es2015/useRef.js","../../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.14_react@19.2.6/node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.2.14_react@19.2.6/node_modules/use-sidecar/dist/es2015/medium.js","../../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.2.14_react@19.2.6/node_modules/use-sidecar/dist/es2015/exports.js","../../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/medium.js","../../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/UI.js","../../../../node_modules/.pnpm/get-nonce@1.0.1/node_modules/get-nonce/dist/es2015/index.js","../../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.14_react@19.2.6/node_modules/react-style-singleton/dist/es2015/singleton.js","../../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.14_react@19.2.6/node_modules/react-style-singleton/dist/es2015/hook.js","../../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.14_react@19.2.6/node_modules/react-style-singleton/dist/es2015/component.js","../../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.14_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/Combination.js","../../../../node_modules/.pnpm/@radix-ui+react-popover@1.1.15_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_70579f2082d5a15782122fa6c39e7d95/node_modules/@radix-ui/react-popover/dist/index.mjs","../../../../atlas/src/shared/components/ui/popover.tsx","../../../../node_modules/.pnpm/@radix-ui+react-dialog@1.1.15_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_340425d8afbecb0b8c61fd2281bc18a1/node_modules/@radix-ui/react-dialog/dist/index.mjs","../../../../atlas/src/shared/components/ui/dialog.tsx","../../../../atlas/src/shared/components/ui/sheet.tsx","../../../../node_modules/.pnpm/@radix-ui+react-menu@2.1.16_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_6e090c4710b0b40304301dfd6649d716/node_modules/@radix-ui/react-menu/dist/index.mjs","../../../../node_modules/.pnpm/@radix-ui+react-context-menu@2.2.16_@types+react-dom@19.2.3_@types+react@19.2.14__@type_f37cfa1787d19448013098dea4e28ec1/node_modules/@radix-ui/react-context-menu/dist/index.mjs","../../../../atlas/src/shared/components/ui/context-menu.tsx","../../../../atlas/src/shared/components/ui/user-avatar.tsx","../../../../atlas/src/shared/components/ui/textarea.tsx","../../../../node_modules/.pnpm/@radix-ui+react-alert-dialog@1.1.15_@types+react-dom@19.2.3_@types+react@19.2.14__@type_91d5036573779c1b9f41b61cd4660f3d/node_modules/@radix-ui/react-alert-dialog/dist/index.mjs","../../../../atlas/src/shared/components/ui/alert-dialog.tsx"],"sourcesContent":["const currencyFmt = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n maximumFractionDigits: 0,\n})\n\nconst currencyPreciseFmt = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n maximumFractionDigits: 2,\n})\n\nconst compactFmt = new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: 1,\n})\n\nconst percentFmt = new Intl.NumberFormat('en-US', {\n style: 'percent',\n maximumFractionDigits: 1,\n})\n\nexport function formatCurrency(value: number): string {\n return currencyFmt.format(value)\n}\n\nexport function formatCurrencyPrecise(value: number): string {\n return currencyPreciseFmt.format(value)\n}\n\nexport function formatCompact(value: number): string {\n return compactFmt.format(value)\n}\n\nexport function formatPercent(value: number): string {\n return percentFmt.format(value / 100)\n}\n\nexport function formatNumber(value: number): string {\n return value.toLocaleString('en-US')\n}\n\nexport function pctChange(current: number, previous: number): number | null {\n if (previous === 0) return null\n return ((current - previous) / previous) * 100\n}\n\nexport function formatTimestamp(date: string | Date): string {\n const d = typeof date === 'string' ? new Date(date) : date\n return d.toLocaleString(undefined, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n })\n}\n\nexport function formatDurationMs(ms: number): string {\n if (ms < 1000) return `${Math.round(ms)}ms`\n const totalSeconds = Math.floor(ms / 1000)\n if (totalSeconds < 60) return `${(ms / 1000).toFixed(1)}s`\n const minutes = Math.floor(totalSeconds / 60)\n const seconds = totalSeconds % 60\n if (minutes < 60) return `${minutes}m ${seconds}s`\n const hours = Math.floor(minutes / 60)\n const remainingMinutes = minutes % 60\n return `${hours}h ${remainingMinutes}m`\n}\n\n/**\n * \"2 hours ago\" / \"3d ago\" / \"just now\" — compact relative-time\n * formatter for tables and list rows that want a short timestamp\n * column.\n *\n * Lives in `@shared/lib/format` so each new app surface can import\n * one canonical formatter. Several apps had near-identical inline\n * copies before this — cursor flagged the duplication on PR #5082.\n * New code paths should use this; the existing inline copies in\n * agents, scheduled-jobs, mining, etc. can migrate in a follow-up\n * cleanup.\n *\n * Behavior:\n * - non-numeric / unparseable input → return the original string\n * - future dates → locale date (no negative-ago surface)\n * - <1m → \"just now\"\n * - <1h → \"Nm ago\"\n * - <1d → \"Nh ago\"\n * - <30d → \"Nd ago\"\n * - >=30d → locale date string (\"May 15, 2026\")\n */\nexport function formatRelativeTime(date: string | Date): string {\n const t = typeof date === 'string' ? Date.parse(date) : date.getTime()\n if (Number.isNaN(t)) return typeof date === 'string' ? date : date.toString()\n const diff = Date.now() - t\n if (diff < 0) return new Date(t).toLocaleDateString()\n const seconds = Math.floor(diff / 1000)\n if (seconds < 60) return 'just now'\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ago`\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ago`\n const days = Math.floor(hours / 24)\n if (days < 30) return `${days}d ago`\n return new Date(t).toLocaleDateString()\n}\n","import * as React from 'react';\n\ninterface PortalContainerContextValue {\n container: HTMLElement | null;\n appClassName?: string;\n}\n\nconst PortalContainerContext = React.createContext<PortalContainerContextValue>({\n container: null,\n});\n\nexport function usePortalContainer() {\n return React.useContext(PortalContainerContext).container;\n}\n\nexport function useAppClassName() {\n return React.useContext(PortalContainerContext).appClassName;\n}\n\nexport function PortalContainerProvider({\n children,\n appClassName,\n}: {\n children: React.ReactNode;\n appClassName?: string;\n}) {\n const [container, setContainer] = React.useState<HTMLElement | null>(null);\n\n const callbackRef = React.useCallback((node: HTMLDivElement | null) => {\n if (node) {\n setContainer(node);\n }\n }, []);\n\n const value = React.useMemo(\n () => ({ container, appClassName }),\n [container, appClassName],\n );\n\n return (\n <PortalContainerContext.Provider value={value}>\n <div ref={callbackRef} className={appClassName ? `${appClassName} contents` : 'contents'}>\n {children}\n </div>\n </PortalContainerContext.Provider>\n );\n}\n\nexport { PortalContainerContext };\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@shared/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n success:\n \"border-transparent bg-green-500/20 text-green-700\",\n ghost:\n \"hover:bg-muted hover:text-muted-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar use = React[\" use \".trim().toString()];\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","import { cn } from '@shared/lib/utils'\n\nexport function RequiredMarker({ className }: { className?: string }) {\n return (\n <span\n aria-hidden=\"true\"\n className={cn('ml-0.5 text-destructive', className)}\n >\n *\n </span>\n )\n}\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@shared/lib/utils\"\nimport { RequiredMarker } from \"./required-marker\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\ninterface LabelOwnProps {\n /**\n * When true, appends a red `*` marker after the label text. Prefer this\n * over rendering `<RequiredMarker />` manually — keeps the marker\n * positioning consistent and makes required-ness a declarative prop\n * at the call site. Also consumed by `<FormField required>` which\n * forwards it through to the label automatically.\n */\n required?: boolean\n}\n\ntype LabelProps = React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants> &\n LabelOwnProps\n\nconst Label = React.forwardRef<React.ElementRef<typeof LabelPrimitive.Root>, LabelProps>(\n ({ className, required, children, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n >\n {children}\n {required && <RequiredMarker />}\n </LabelPrimitive.Root>\n ),\n)\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\nexport type { LabelProps }\n","// src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@shared/lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\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 )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","import { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@shared/lib/utils\"\nimport { Label } from \"@shared/components/ui/label\"\nimport { Separator } from \"@shared/components/ui/separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n \"data-[variant=label]:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field data-[invalid=true]:text-destructive flex w-full gap-3\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start\",\n ],\n responsive: [\n \"@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm font-medium leading-snug group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground text-sm font-normal leading-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors) {\n return null\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return errors[0].message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {errors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive text-sm font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }],\n [\"path\", { d: \"m19 12-7 7-7-7\", key: \"1idqje\" }]\n];\nconst ArrowDown = createLucideIcon(\"arrow-down\", __iconNode);\n\nexport { __iconNode, ArrowDown as default };\n//# sourceMappingURL=arrow-down.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m5 12 7-7 7 7\", key: \"hav0vg\" }],\n [\"path\", { d: \"M12 19V5\", key: \"x0mq9r\" }]\n];\nconst ArrowUp = createLucideIcon(\"arrow-up\", __iconNode);\n\nexport { __iconNode, ArrowUp as default };\n//# sourceMappingURL=arrow-up.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]];\nconst Circle = createLucideIcon(\"circle\", __iconNode);\n\nexport { __iconNode, Circle as default };\n//# sourceMappingURL=circle.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 13v8\", key: \"1l5pq0\" }],\n [\"path\", { d: \"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242\", key: \"1pljnt\" }],\n [\"path\", { d: \"m8 17 4-4 4 4\", key: \"1quai1\" }]\n];\nconst CloudUpload = createLucideIcon(\"cloud-upload\", __iconNode);\n\nexport { __iconNode, CloudUpload as default };\n//# sourceMappingURL=cloud-upload.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }]\n];\nconst File = createLucideIcon(\"file\", __iconNode);\n\nexport { __iconNode, File as default };\n//# sourceMappingURL=file.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]];\nconst Minus = createLucideIcon(\"minus\", __iconNode);\n\nexport { __iconNode, Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.546.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import * as React from \"react\"\n\nimport { cn } from \"@shared/lib/utils\"\n\ninterface InputOwnProps {\n /**\n * When truthy, the input renders in its error state — destructive\n * border, destructive focus ring, and `aria-invalid=\"true\"` for\n * assistive tech.\n *\n * Accepts `boolean` (to toggle styling) or `string` (for convenience\n * — any non-empty string is truthy). The error *message* itself is\n * rendered by the caller (or automatically by `<Field error=\"...\">`);\n * this prop only controls the input's own visual state.\n */\n error?: boolean | string\n}\n\ntype InputProps = React.ComponentProps<\"input\"> & InputOwnProps\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, error, ...props }, ref) => {\n const hasError = !!error\n return (\n <input\n type={type}\n aria-invalid={hasError || undefined}\n className={cn(\n // `rounded-sm` = 8px (`--radius-sm`) is the canonical form-input\n // radius across Input / Select / Textarea. See Foundations →\n // Radius in the design-system gallery for the full scale.\n \"flex h-9 w-full rounded-sm border bg-background px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n // Suppress the native WebKit/Chromium search cancel button\n // globally on every `<Input type=\"search\">`. Browsers render\n // their own chunky blue × by default — varies by OS, bypasses\n // every design-system choice (size/color/stroke), and\n // appears alongside our Lucide × when `SearchInput` is used.\n // Hiding it here means any caller using `type=\"search\"`\n // (including bare `<Input>` without the SearchInput wrapper)\n // gets the clean treatment. SearchInput still renders its own\n // accessible Lucide X via a separate button.\n \"[&::-webkit-search-cancel-button]:hidden [&::-webkit-search-cancel-button]:appearance-none\",\n // Error state flips the border and focus ring to destructive\n // tokens. Keeping the bg untouched (still `bg-background`) so\n // the input doesn't read as filled — just outlined in red.\n hasError\n ? \"border-destructive focus-visible:ring-destructive\"\n : \"border-input focus-visible:ring-ring\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\nexport type { InputProps }\n","import * as React from 'react'\nimport { Search, X } from 'lucide-react'\n\nimport { cn } from '@shared/lib/utils'\nimport { Input } from './input'\n\ntype SearchInputOwnProps = {\n /**\n * Size of the magnifying glass icon in px. Defaults to 14 — matches\n * the h-9 input height's optical balance.\n */\n iconSize?: number\n /**\n * Tailwind classes for the outer relative wrapper (e.g., width / layout).\n * Use `className` for the actual `<input>` styling.\n */\n containerClassName?: string\n /**\n * Optional override for the icon tailwind classes. By default the icon\n * sits on the LEFT side of the input with enough padding that the first\n * character of user text never collides with the icon.\n */\n iconClassName?: string\n /**\n * Hide the built-in clear (×) button. Defaults to `false`. The clear\n * button appears when the input has a value and replaces the browser's\n * inconsistent native `<input type=\"search\">` × with a properly-sized\n * Lucide X icon that matches the rest of the design system.\n */\n hideClearButton?: boolean\n}\n\nexport type SearchInputProps = SearchInputOwnProps &\n Omit<React.ComponentPropsWithoutRef<typeof Input>, 'type'>\n\n/**\n * Shared search input with a left-aligned magnifying glass icon and an\n * optional right-aligned clear (×) button. Both icons come from\n * `lucide-react` — Atlas's primary icon library — and are sized to 14px\n * to match the h-9 input's optical balance.\n *\n * Works in both controlled and uncontrolled modes. In controlled mode,\n * clicking the clear button synthesizes an `onChange` event with an\n * empty value using the native setter so React's state pipeline picks\n * it up correctly. In uncontrolled mode, it clears the input directly.\n *\n * The native WebKit/Chromium `::-webkit-search-cancel-button` is\n * suppressed so consumers see one consistent clear affordance across\n * browsers, not two stacked ones.\n */\nconst SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n className,\n containerClassName,\n iconClassName,\n iconSize = 14,\n hideClearButton = false,\n style: callerStyle,\n value,\n defaultValue,\n onChange,\n ...props\n },\n ref,\n ) => {\n // Merge a local ref with the forwarded one so we can read/clear the\n // input imperatively for the uncontrolled case without stealing the\n // caller's ref.\n const localRef = React.useRef<HTMLInputElement>(null)\n React.useImperativeHandle(ref, () => localRef.current as HTMLInputElement)\n\n // Track whether the input has a value for clear-button visibility.\n // - Controlled: derive directly from the `value` prop.\n // - Uncontrolled: shadow via internal state seeded from `defaultValue`,\n // kept in sync via `onChange` below.\n const isControlled = value !== undefined\n const [uncontrolledHasValue, setUncontrolledHasValue] = React.useState(\n () => (defaultValue != null && String(defaultValue).length > 0),\n )\n const hasValue = isControlled\n ? typeof value === 'string' && value.length > 0\n : uncontrolledHasValue\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setUncontrolledHasValue(event.target.value.length > 0)\n }\n onChange?.(event)\n }\n\n const handleClear = () => {\n const input = localRef.current\n if (!input) return\n\n // Use the native value setter so React's synthetic-event pipeline\n // detects the change — plain `input.value = ''` is a no-op inside\n // React's controlled-input diffing.\n const setter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n 'value',\n )?.set\n setter?.call(input, '')\n input.dispatchEvent(new Event('input', { bubbles: true }))\n input.focus()\n }\n\n const showClear = !hideClearButton && hasValue && !props.disabled\n\n return (\n <div className={cn('relative', containerClassName)}>\n <Search\n size={iconSize}\n strokeWidth={1.75}\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-black-40',\n iconClassName,\n )}\n />\n <Input\n ref={localRef}\n type=\"search\"\n value={value}\n defaultValue={defaultValue}\n onChange={handleChange}\n className={cn(\n // (Base `Input` already suppresses the native WebKit/Chromium\n // `::-webkit-search-cancel-button` globally for every\n // `type=\"search\"` — see input.tsx. We render our own Lucide\n // X below as the single, consistent clear affordance.)\n className,\n )}\n // Reserve left space for the search icon always; reserve right\n // space for the clear button only when it's currently shown,\n // so the caret doesn't jump when the user starts typing.\n style={{\n paddingLeft: '2rem',\n paddingRight: showClear ? '2rem' : undefined,\n ...callerStyle,\n }}\n {...props}\n />\n {showClear && (\n <button\n type=\"button\"\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n className={cn(\n 'absolute right-2 top-1/2 flex size-5 -translate-y-1/2 items-center justify-center',\n 'rounded-full text-black-40 transition-colors',\n 'hover:bg-black-6 hover:text-black-80 focus-visible:outline-none',\n 'focus-visible:ring-1 focus-visible:ring-ring',\n )}\n >\n <X size={12} strokeWidth={2} aria-hidden=\"true\" />\n </button>\n )}\n </div>\n )\n },\n)\nSearchInput.displayName = 'SearchInput'\n\nexport { SearchInput }\n","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-previous/src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@shared/lib/utils\"\n\n/**\n * Switch — slider-style on/off toggle.\n *\n * No drop shadows — neither on the track nor the thumb — consistent\n * with the rest of Atlas's form primitives (Input, Select, Textarea,\n * Button, Checkbox). Affordance comes from the bg-color transition\n * (`bg-input` → `bg-primary`) and the thumb's translate + opaque\n * contrast against the track.\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-5 w-9 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-4 w-4 rounded-full bg-background ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","import * as React from 'react'\n\nimport { cn } from '@shared/lib/utils'\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldLabel,\n FieldTitle,\n} from './field'\nimport { SearchInput } from './search-input'\nimport { Switch } from './switch'\n\n/**\n * ChoiceCard — card-style selection row built on shadcn's `Field` family.\n *\n * Composes `FieldLabel` (which makes the whole card clickable as a native\n * label) + `Field` (horizontal) + `FieldContent` (holding `FieldTitle` +\n * `FieldDescription`) + `Switch`. This is the canonical \"Switch Choice\n * Card\" pattern from shadcn — wrapping it here saves consumers from\n * hand-assembling the five Field primitives every time and ensures the\n * shared selected-tint behavior (`has-data-[state=checked]:bg-primary/5`)\n * kicks in consistently.\n *\n * Composition:\n * ```tsx\n * import { ChoiceCard, ChoiceCardGroup } from '@shared/components/ui'\n *\n * <ChoiceCardGroup>\n * <ChoiceCard\n * title=\"Web search\"\n * description=\"General web lookup via platform search provider\"\n * checked={enabled}\n * onCheckedChange={setEnabled}\n * />\n * </ChoiceCardGroup>\n * ```\n *\n * `ChoiceCardGroup` is the recommended wrapper — it renders choice cards\n * at a tighter 8px gap (vs `FieldGroup`'s 28px) and supports an optional\n * search input for long lists. `FieldGroup` remains available for mixed\n * Field layouts where the looser spacing is intentional.\n *\n * When you need extra content below the description (e.g. a secondary\n * checkbox, a config chip, a status indicator), pass it via `children` —\n * it renders inside `FieldContent` after the description.\n *\n * When you need a different trailing control (Checkbox, Radio, icon\n * button), pass it via `control`; otherwise the default `Switch` is used.\n * Controls receive their own `onClick` handlers and don't need propagation\n * handling — the label wiring covers row clicks.\n */\ninterface ChoiceCardProps {\n /**\n * Leading icon slot — renders as a tinted 32px square tile on the left\n * of the card. Accepts a lucide/tabler icon; the tile styling and sizing\n * are handled here so callers just pass the glyph.\n */\n icon?: React.ReactNode\n /**\n * Primary label — renders inside `FieldTitle`. Accepts a ReactNode so\n * inline badges / tags can sit next to the title.\n */\n title: React.ReactNode\n /** Secondary text — renders inside `FieldDescription`. */\n description?: React.ReactNode\n /**\n * Default trailing control is a `Switch`. Pass a custom control here\n * to use something else (Checkbox, Radio, icon button). The custom\n * control is responsible for its own state — `checked` /\n * `onCheckedChange` are ignored when `control` is set.\n */\n control?: React.ReactNode\n /** Forwarded to the default `Switch`. */\n checked?: boolean\n /** Forwarded to the default `Switch`. */\n onCheckedChange?: (checked: boolean) => void\n /** Forwarded to the default `Switch` — also surfaces Field's disabled styling. */\n disabled?: boolean\n /**\n * Optional id. When omitted, one is generated so the FieldLabel's\n * `htmlFor` binds to the Switch automatically. Override only when the\n * consumer needs to reference the control id externally.\n */\n id?: string\n /**\n * Canonical searchable text used by `ChoiceCardGroup` when `searchable`\n * is enabled. Lets callers control exactly what a query matches against\n * — important when `title` / `description` are ReactNodes (badges,\n * icons, fragments) that can't be reliably stringified.\n *\n * When omitted, the group falls back to stringifying whatever string\n * content it can extract from `title` and `description`; works fine for\n * plain-text cards, unreliable for rich ones. Provide it explicitly\n * for any list where search matters.\n */\n searchTerms?: string\n /** Additional content rendered inside FieldContent after the description. */\n children?: React.ReactNode\n className?: string\n}\n\nconst ChoiceCard = React.forwardRef<HTMLLabelElement, ChoiceCardProps>(\n (\n {\n title,\n description,\n control,\n checked,\n onCheckedChange,\n disabled,\n id: providedId,\n // `searchTerms` is consumed by `ChoiceCardGroup` through the prop\n // inspection below — it never renders on the label itself. Destructure\n // so it doesn't end up on the DOM as an unknown attribute.\n searchTerms: _searchTerms,\n children,\n className,\n },\n ref,\n ) => {\n const reactId = React.useId()\n const controlId = providedId ?? reactId\n\n const resolvedControl = control ?? (\n <Switch\n id={controlId}\n checked={checked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n />\n )\n\n return (\n <FieldLabel\n ref={ref}\n htmlFor={controlId}\n className={cn(\n // Always white background — the `bg-background` design token.\n // Overrides FieldLabel's default `has-data-[state=checked]:bg-primary/5`\n // tint (see `./field.tsx`), so selection is communicated by the\n // `border-primary` treatment alone. Matches Atlas's \"white surfaces\"\n // aesthetic used across Input / Select / Textarea / Card / DataTable.\n // tailwind-merge ensures these later `bg-*` declarations win over\n // FieldLabel's defaults.\n 'bg-background has-data-[state=checked]:bg-background',\n className,\n )}\n >\n <Field orientation=\"horizontal\" data-disabled={disabled || undefined}>\n <FieldContent>\n <FieldTitle>{title}</FieldTitle>\n {description && <FieldDescription>{description}</FieldDescription>}\n {children}\n </FieldContent>\n {resolvedControl}\n </Field>\n </FieldLabel>\n )\n },\n)\nChoiceCard.displayName = 'ChoiceCard'\n\n// ─── Group ───────────────────────────────────────────────────────────────────\n\ninterface ChoiceCardGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * When true, renders a search input above the list that filters visible\n * cards by matching the query against each card's `searchTerms` prop\n * (or a fallback derived from the card's `title` / `description`).\n * Intended for long lists — tool pickers, skill palettes, integration\n * catalogs — where users need to narrow down quickly.\n */\n searchable?: boolean\n /** Placeholder shown in the search input. Defaults to `'Search'`. */\n searchPlaceholder?: string\n /**\n * Rendered when the search query matches zero cards. Defaults to a\n * muted \"No matches\" row. Pass a richer ReactNode (illustration, CTA,\n * etc.) when context warrants it.\n */\n emptyState?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * ChoiceCardGroup — the canonical wrapper for a stack of `ChoiceCard`s.\n *\n * Differences from `FieldGroup`:\n * - Gap is `gap-2` (8px), not `gap-7` (28px). ChoiceCards are visually\n * dense already (border + padding + hover); a tight gap reads as a\n * single group rather than a loose collection of unrelated rows.\n * - Optional `searchable` — adds a search input that filters children\n * by their `searchTerms` prop (with text fallbacks). Useful when the\n * underlying list is long (tool palettes, integrations, etc.).\n *\n * Children are expected to be `<ChoiceCard>` elements. Non-ChoiceCard\n * children pass through unchanged and aren't affected by the filter —\n * so you can intermix dividers, section headers, or `<FieldSeparator>`\n * without them being stripped when the user types.\n */\nconst ChoiceCardGroup = React.forwardRef<HTMLDivElement, ChoiceCardGroupProps>(\n (\n {\n searchable = false,\n searchPlaceholder = 'Search',\n emptyState,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const [query, setQuery] = React.useState('')\n const trimmed = query.trim().toLowerCase()\n\n // When search is inactive (either disabled or empty query), skip the\n // child iteration + haystack build entirely. The children array round-\n // trip isn't free on large lists, and most renders won't have a query.\n const showAll = !searchable || trimmed.length === 0\n\n const childArray = React.Children.toArray(children)\n const cardCount = childArray.filter(isChoiceCardElement).length\n const visibleChildren = showAll\n ? childArray\n : childArray.filter((child) => {\n if (!isChoiceCardElement(child)) {\n // Pass non-ChoiceCard children through (headers, separators).\n // They're not searchable anyway — filtering them would make\n // the list lose structure when the user types.\n return true\n }\n const haystack = deriveHaystack(child.props)\n return haystack.includes(trimmed)\n })\n\n const visibleCardCount = showAll\n ? cardCount\n : visibleChildren.filter(isChoiceCardElement).length\n\n return (\n <div\n ref={ref}\n data-slot=\"choice-card-group\"\n className={cn('flex w-full flex-col gap-2', className)}\n {...props}\n >\n {searchable && (\n <div className=\"mb-1\">\n <SearchInput\n value={query}\n onChange={(e) => setQuery(e.currentTarget.value)}\n placeholder={searchPlaceholder}\n // Clear-button callback path for controlled consumers —\n // keep our state in sync when the user hits the ×.\n aria-label={searchPlaceholder}\n />\n </div>\n )}\n\n {visibleChildren}\n\n {searchable && !showAll && visibleCardCount === 0 && (\n <div\n role=\"status\"\n className=\"rounded-md border border-dashed border-black-10 px-4 py-6 text-center text-sm text-black-40\"\n >\n {emptyState ?? `No matches for \"${query.trim()}\"`}\n </div>\n )}\n </div>\n )\n },\n)\nChoiceCardGroup.displayName = 'ChoiceCardGroup'\n\n// ─── Search helpers ──────────────────────────────────────────────────────────\n\n/**\n * Narrow a child node to a ChoiceCard React element. We check the\n * element's type identity rather than display name so consumers can't\n * accidentally substitute a look-alike component and have it silently\n * pass as filterable.\n */\nfunction isChoiceCardElement(\n child: React.ReactNode,\n): child is React.ReactElement<ChoiceCardProps> {\n return React.isValidElement(child) && child.type === ChoiceCard\n}\n\n/**\n * Build the lowercase searchable text for a ChoiceCard.\n *\n * Priority:\n * 1. `searchTerms` when explicitly provided — always the authoritative\n * value. Callers know their domain better than any fallback.\n * 2. Stringified `title` + `description` — works when both are plain\n * strings, and degrades gracefully (returns '') for ReactNode values\n * that can't be stringified safely.\n *\n * Empty haystack is deliberately non-matching: an unfilterable card stays\n * hidden during an active search rather than leaking through. Callers\n * should pass `searchTerms` when title/description are ReactNodes.\n */\nfunction deriveHaystack(props: ChoiceCardProps): string {\n if (props.searchTerms) return props.searchTerms.toLowerCase()\n const parts = [nodeToText(props.title), nodeToText(props.description)]\n return parts.filter(Boolean).join(' ').toLowerCase()\n}\n\n/**\n * Best-effort stringification of a ReactNode. Handles primitives and\n * flat fragments; returns '' for function components, complex elements,\n * or anything else we can't inspect without rendering. The fallback is\n * intentionally conservative — false positives during search are worse\n * than false negatives that the caller can fix with `searchTerms`.\n */\nfunction nodeToText(node: React.ReactNode): string {\n if (node == null || typeof node === 'boolean') return ''\n if (typeof node === 'string' || typeof node === 'number') return String(node)\n if (Array.isArray(node)) return node.map(nodeToText).join(' ')\n if (React.isValidElement(node)) {\n const children = (node.props as { children?: React.ReactNode }).children\n return nodeToText(children)\n }\n return ''\n}\n\nexport { ChoiceCard, ChoiceCardGroup }\nexport type { ChoiceCardGroupProps }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@shared/lib/utils'\n\n/**\n * CodeBadge — small inline monospace pill for literal strings.\n *\n * Use for identifiers that read as \"code\" rather than prose: model IDs\n * (`gemini-3.1-flash-lite-preview`), version labels (`v14`), commit hashes,\n * cron expressions, IDs, etc. Sits naturally next to titles, inside table\n * cells, or in top-bar identity rows.\n *\n * When to reach for this vs. `Badge`:\n * - `Badge` — semantic status/tone (success, destructive, outline)\n * - `CodeBadge` — typographic tag (monospace, muted bg, neutral)\n *\n * Sizes:\n * - `sm` (default) — inline next to a title (e.g. AvatarTextCell tag)\n * - `md` — inside table cells where it reads as primary content\n */\nconst codeBadgeVariants = cva(\n 'inline-flex items-center shrink-0 font-mono tracking-tight bg-black-4 text-black-70',\n {\n variants: {\n size: {\n // Both sizes use `rounded-xs` (4px, `--radius-xs`) from the\n // design-token scale — consolidates the old one-off 3px/4px\n // literal values into a single tight-radius token shared with\n // AvatarTextCell's icon tile and the sidebar sub-nav tag chip.\n // Both sizes floor at `text-xs` (12px) per the design-system\n // typography rule — no UI text below 12px. Density comes from\n // horizontal padding instead: `sm` = px-1, `md` = px-1.5.\n sm: 'text-xs px-1 py-px rounded-xs',\n md: 'text-xs px-1.5 py-0.5 rounded-xs',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n)\n\ninterface CodeBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof codeBadgeVariants> {}\n\nconst CodeBadge = React.forwardRef<HTMLSpanElement, CodeBadgeProps>(\n ({ className, size, children, ...props }, ref) => {\n return (\n <span\n ref={ref}\n data-slot=\"code-badge\"\n className={cn(codeBadgeVariants({ size }), className)}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\nCodeBadge.displayName = 'CodeBadge'\n\nexport { CodeBadge, codeBadgeVariants }\n","import * as React from 'react'\n\nimport { cn } from '@shared/lib/utils'\nimport { Label } from './label'\n\nexport interface FormFieldProps {\n /**\n * Label text rendered above the control. Pass a string for the common\n * case; pass a ReactNode for custom content (e.g. a Label with an\n * adjacent HelpTooltip icon). When omitted, the field renders its\n * control only — useful for nesting a raw control inside a layout\n * without forcing a label.\n */\n label?: React.ReactNode\n /**\n * When true, appends a red `*` marker to the label. No-op without `label`.\n */\n required?: boolean\n /**\n * Error message. When non-empty, the control inside is styled with its\n * error state and this message renders below in destructive color.\n * Mutually exclusive with `description` (error wins when both are set).\n */\n error?: string\n /**\n * Helper text rendered below the control in muted color (field hint,\n * input format, etc). Hidden when `error` is set — the error message\n * takes the same slot.\n */\n description?: React.ReactNode\n /**\n * DOM id for the control. If omitted, `useId()` generates one so\n * `<label htmlFor>` and `aria-describedby` wire up automatically.\n */\n id?: string\n /**\n * The form control. `FormField` clones this child to inject `id`,\n * `aria-describedby`, and — when `error` is set — the child's\n * `error` prop. Must be a single element (Input / Textarea / Select\n * trigger / etc).\n */\n children: React.ReactElement\n className?: string\n}\n\n/**\n * Compound form-field wrapper — the label + control + error/description\n * triple, wired up correctly.\n *\n * ```tsx\n * <FormField label=\"Customer name\" required error={errors.name}>\n * <Input value={name} onChange={e => setName(e.target.value)} />\n * </FormField>\n * ```\n *\n * Handles three things consumers otherwise have to do by hand:\n *\n * 1. `id` + `htmlFor` wiring — auto-generated via `useId()` when\n * omitted, so the label clicks focus the control.\n * 2. `aria-describedby` — points the control at the description\n * and/or error message element(s) for assistive tech.\n * 3. Error-state propagation — passes `error={!!error}` down to the\n * child control so its border/ring flip to destructive tokens\n * without the caller having to duplicate the flag.\n *\n * For manual composition (Label + Input as siblings), everything the\n * FormField does is still reachable as individual primitives. Use FormField\n * when you want the 90% case in one line.\n */\nexport function FormField({\n label,\n required,\n error,\n description,\n id: providedId,\n children,\n className,\n}: FormFieldProps) {\n const reactId = React.useId()\n const controlId = providedId ?? reactId\n const descriptionId = description ? `${controlId}-description` : undefined\n const errorId = error ? `${controlId}-error` : undefined\n\n // Compose aria-describedby from the existing value on the child\n // (preserve consumer-set descriptions) plus our own description/error\n // ids. `filter(Boolean)` strips undefined / empty segments cleanly.\n const childAriaDescribedBy = (children.props as { 'aria-describedby'?: string })[\n 'aria-describedby'\n ]\n const ariaDescribedBy =\n [childAriaDescribedBy, descriptionId, errorId].filter(Boolean).join(' ') || undefined\n\n const childProps = children.props as {\n id?: string\n error?: boolean | string\n 'aria-describedby'?: string\n }\n\n const enhancedChild = React.cloneElement(children, {\n id: childProps.id ?? controlId,\n // Only override the child's error prop when FormField has one. If the\n // consumer explicitly set error on the child, respect it.\n error: error ? true : childProps.error,\n 'aria-describedby': ariaDescribedBy,\n } as Partial<typeof childProps>)\n\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <Label htmlFor={controlId} required={required}>\n {label}\n </Label>\n )}\n {enhancedChild}\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-xs text-destructive\">\n {error}\n </p>\n ) : description ? (\n <p id={descriptionId} className=\"text-xs text-muted-foreground\">\n {description}\n </p>\n ) : null}\n </div>\n )\n}\n","\"use client\";\n\n// src/toggle.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Toggle\";\nvar Toggle = React.forwardRef((props, forwardedRef) => {\n const { pressed: pressedProp, defaultPressed, onPressedChange, ...buttonProps } = props;\n const [pressed, setPressed] = useControllableState({\n prop: pressedProp,\n onChange: onPressedChange,\n defaultProp: defaultPressed ?? false,\n caller: NAME\n });\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-pressed\": pressed,\n \"data-state\": pressed ? \"on\" : \"off\",\n \"data-disabled\": props.disabled ? \"\" : void 0,\n ...buttonProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => {\n if (!props.disabled) {\n setPressed(!pressed);\n }\n })\n }\n );\n});\nToggle.displayName = NAME;\nvar Root = Toggle;\nexport {\n Root,\n Toggle\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react'\nimport * as TogglePrimitive from '@radix-ui/react-toggle'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@shared/lib/utils'\n\n/**\n * Toggle — pressable two-state button primitive (shadcn/ui).\n *\n * Use for formatting-style toolbars (bold/italic), view-mode switches, or any\n * button that represents an on/off state without a label. For slider-style\n * on/off switches in forms, use `Switch` instead. For mutually-exclusive\n * groups of toggles (segmented picker), use `ToggleGroup`.\n */\nconst toggleVariants = cva(\n 'inline-flex cursor-pointer items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring 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',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline:\n 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n default: 'h-9 px-2 min-w-9',\n sm: 'h-8 px-1.5 min-w-8',\n lg: 'h-10 px-2.5 min-w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nconst Toggle = React.forwardRef<\n React.ElementRef<typeof TogglePrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n <TogglePrimitive.Root\n ref={ref}\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n))\nToggle.displayName = TogglePrimitive.Root.displayName\n\nexport { Toggle, toggleVariants }\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/toggle-group.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Toggle } from \"@radix-ui/react-toggle\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TOGGLE_GROUP_NAME = \"ToggleGroup\";\nvar [createToggleGroupContext, createToggleGroupScope] = createContextScope(TOGGLE_GROUP_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar ToggleGroup = React.forwardRef((props, forwardedRef) => {\n const { type, ...toggleGroupProps } = props;\n if (type === \"single\") {\n const singleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplSingle, { ...singleProps, ref: forwardedRef });\n }\n if (type === \"multiple\") {\n const multipleProps = toggleGroupProps;\n return /* @__PURE__ */ jsx(ToggleGroupImplMultiple, { ...multipleProps, ref: forwardedRef });\n }\n throw new Error(`Missing prop \\`type\\` expected on \\`${TOGGLE_GROUP_NAME}\\``);\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupValueProvider, useToggleGroupValueContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImplSingle = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"single\",\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemActivate: setValue,\n onItemDeactivate: React.useCallback(() => setValue(\"\"), [setValue]),\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupSingleProps, ref: forwardedRef })\n }\n );\n});\nvar ToggleGroupImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...toggleGroupMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: TOGGLE_GROUP_NAME\n });\n const handleButtonActivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleButtonDeactivate = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n ToggleGroupValueProvider,\n {\n scope: props.__scopeToggleGroup,\n type: \"multiple\",\n value,\n onItemActivate: handleButtonActivate,\n onItemDeactivate: handleButtonDeactivate,\n children: /* @__PURE__ */ jsx(ToggleGroupImpl, { ...toggleGroupMultipleProps, ref: forwardedRef })\n }\n );\n});\nToggleGroup.displayName = TOGGLE_GROUP_NAME;\nvar [ToggleGroupContext, useToggleGroupContext] = createToggleGroupContext(TOGGLE_GROUP_NAME);\nvar ToggleGroupImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeToggleGroup,\n disabled = false,\n rovingFocus = true,\n orientation,\n dir,\n loop = true,\n ...toggleGroupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeToggleGroup);\n const direction = useDirection(dir);\n const commonProps = { role: \"group\", dir: direction, ...toggleGroupProps };\n return /* @__PURE__ */ jsx(ToggleGroupContext, { scope: __scopeToggleGroup, rovingFocus, disabled, children: rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation,\n dir: direction,\n loop,\n children: /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(Primitive.div, { ...commonProps, ref: forwardedRef }) });\n }\n);\nvar ITEM_NAME = \"ToggleGroupItem\";\nvar ToggleGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const valueContext = useToggleGroupValueContext(ITEM_NAME, props.__scopeToggleGroup);\n const context = useToggleGroupContext(ITEM_NAME, props.__scopeToggleGroup);\n const rovingFocusGroupScope = useRovingFocusGroupScope(props.__scopeToggleGroup);\n const pressed = valueContext.value.includes(props.value);\n const disabled = context.disabled || props.disabled;\n const commonProps = { ...props, pressed, disabled };\n const ref = React.useRef(null);\n return context.rovingFocus ? /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: pressed,\n ref,\n children: /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef })\n }\n ) : /* @__PURE__ */ jsx(ToggleGroupItemImpl, { ...commonProps, ref: forwardedRef });\n }\n);\nToggleGroupItem.displayName = ITEM_NAME;\nvar ToggleGroupItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeToggleGroup, value, ...itemProps } = props;\n const valueContext = useToggleGroupValueContext(ITEM_NAME, __scopeToggleGroup);\n const singleProps = { role: \"radio\", \"aria-checked\": props.pressed, \"aria-pressed\": void 0 };\n const typeProps = valueContext.type === \"single\" ? singleProps : void 0;\n return /* @__PURE__ */ jsx(\n Toggle,\n {\n ...typeProps,\n ...itemProps,\n ref: forwardedRef,\n onPressedChange: (pressed) => {\n if (pressed) {\n valueContext.onItemActivate(value);\n } else {\n valueContext.onItemDeactivate(value);\n }\n }\n }\n );\n }\n);\nvar Root2 = ToggleGroup;\nvar Item2 = ToggleGroupItem;\nexport {\n Item2 as Item,\n Root2 as Root,\n ToggleGroup,\n ToggleGroupItem,\n createToggleGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react'\nimport * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group'\nimport { type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@shared/lib/utils'\nimport { toggleVariants } from './toggle'\n\n/**\n * ToggleGroup — segmented group of `Toggle`s (shadcn/ui).\n *\n * Use for mutually-exclusive view switches with visual button treatment\n * (e.g. \"Built-in tools / MCP servers\" in the agent editor, formatting\n * button rows, view-mode pickers). When the switch changes the underlying\n * route or tab view, prefer `Tabs` instead for better a11y semantics.\n *\n * Supports `type=\"single\" | \"multiple\"` via Radix:\n *\n * ```tsx\n * <ToggleGroup type=\"single\" value={view} onValueChange={setView}>\n * <ToggleGroupItem value=\"builtin\">Built-in tools</ToggleGroupItem>\n * <ToggleGroupItem value=\"mcp\">MCP servers</ToggleGroupItem>\n * </ToggleGroup>\n * ```\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> &\n VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => (\n <ToggleGroupPrimitive.Root\n ref={ref}\n className={cn('flex items-center justify-center gap-1', className)}\n {...props}\n >\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> &\n VariantProps<typeof toggleVariants>\n>(({ className, children, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(\n toggleVariants({\n variant: context.variant ?? variant,\n size: context.size ?? size,\n }),\n className,\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n})\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName\n\nexport { ToggleGroup, ToggleGroupItem }\n","import * as React from \"react\"\n\nimport { cn } from \"@shared/lib/utils\"\n\n/**\n * Card — the foundational surface for grouped content (dashboards,\n * metrics, forms, lists, detail pages).\n *\n * Visual contract:\n * - Background: `bg-card`, which maps to the `--card` design token.\n * `--card` is pure white (`oklch(1 0 0)`) in every Atlas app theme\n * — verified in `atlas/src/index.css`. Dark mode resolves to the\n * warm-dark surface token. Do NOT hardcode `bg-white` / `#fff`:\n * the theme system needs the variable to switch modes reliably.\n * - Text: `text-card-foreground` — paired with `--card` so reversed\n * themes flip body color correctly.\n * - Separation: a 1px `border` (maps to `--border`), NOT a drop\n * shadow. Matches the flat aesthetic used by ProDataTable,\n * DashboardShell, Input, Select, Textarea, Switch, and Button.\n * Drop shadows on cards quickly compound against each other in\n * dense dashboards (card-inside-card, kpi-tile-inside-card, etc.)\n * and visually muddy the hierarchy.\n * - Radius: `rounded-xl` via the design system — 12px at default\n * scale; per-app themes can tighten/loosen via `--radius`.\n *\n * When a card genuinely needs elevation (modal/popover-adjacent lifts,\n * drag affordances), opt in explicitly with `shadow-sm` / `shadow-md`\n * at the call site rather than baking it into the base.\n */\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import { cn } from '@shared/lib/utils'\n\ninterface ProgressBarProps {\n value: number\n max?: number\n color?: string\n className?: string\n}\n\nexport function ProgressBar({ value, max = 100, color, className }: ProgressBarProps) {\n const pct = max > 0 ? Math.min((value / max) * 100, 100) : 0\n\n return (\n <div\n data-slot=\"progress-bar\"\n className={cn('h-1.5 overflow-hidden rounded-full bg-slate-100', className)}\n >\n <div\n className=\"h-full rounded-full transition-all\"\n style={{\n width: `${pct}%`,\n backgroundColor: color ?? 'rgb(71 85 105)',\n }}\n />\n </div>\n )\n}\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n outline: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n },\n filled: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n stroke: \"none\"\n }\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\n\nconst createReactComponent = (type, iconName, iconNamePascal, iconNode) => {\n const Component = forwardRef(\n ({ color = \"currentColor\", size = 24, stroke = 2, title, className, children, ...rest }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes[type],\n width: size,\n height: size,\n className: [`tabler-icon`, `tabler-icon-${iconName}`, className].join(\" \"),\n ...type === \"filled\" ? {\n fill: color\n } : {\n strokeWidth: stroke,\n stroke: color\n },\n ...rest\n },\n [\n title && createElement(\"title\", { key: \"svg-title\" }, title),\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n );\n Component.displayName = `${iconNamePascal}`;\n return Component;\n};\n\nexport { createReactComponent as default };\n//# sourceMappingURL=createReactComponent.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 7l10 10\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17 8l0 9l-9 0\", \"key\": \"svg-1\" }]];\nconst IconArrowDownRight = createReactComponent(\"outline\", \"arrow-down-right\", \"ArrowDownRight\", __iconNode);\n\nexport { __iconNode, IconArrowDownRight as default };\n//# sourceMappingURL=IconArrowDownRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M18 13l-6 6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M6 13l6 6\", \"key\": \"svg-2\" }]];\nconst IconArrowDown = createReactComponent(\"outline\", \"arrow-down\", \"ArrowDown\", __iconNode);\n\nexport { __iconNode, IconArrowDown as default };\n//# sourceMappingURL=IconArrowDown.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M17 7l-10 10\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M8 7l9 0l0 9\", \"key\": \"svg-1\" }]];\nconst IconArrowUpRight = createReactComponent(\"outline\", \"arrow-up-right\", \"ArrowUpRight\", __iconNode);\n\nexport { __iconNode, IconArrowUpRight as default };\n//# sourceMappingURL=IconArrowUpRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 5l0 14\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M18 11l-6 -6\", \"key\": \"svg-1\" }], [\"path\", { \"d\": \"M6 11l6 -6\", \"key\": \"svg-2\" }]];\nconst IconArrowUp = createReactComponent(\"outline\", \"arrow-up\", \"ArrowUp\", __iconNode);\n\nexport { __iconNode, IconArrowUp as default };\n//# sourceMappingURL=IconArrowUp.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 12l5 5l10 -10\", \"key\": \"svg-0\" }]];\nconst IconCheck = createReactComponent(\"outline\", \"check\", \"Check\", __iconNode);\n\nexport { __iconNode, IconCheck as default };\n//# sourceMappingURL=IconCheck.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6 9l6 6l6 -6\", \"key\": \"svg-0\" }]];\nconst IconChevronDown = createReactComponent(\"outline\", \"chevron-down\", \"ChevronDown\", __iconNode);\n\nexport { __iconNode, IconChevronDown as default };\n//# sourceMappingURL=IconChevronDown.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15 6l-6 6l6 6\", \"key\": \"svg-0\" }]];\nconst IconChevronLeft = createReactComponent(\"outline\", \"chevron-left\", \"ChevronLeft\", __iconNode);\n\nexport { __iconNode, IconChevronLeft as default };\n//# sourceMappingURL=IconChevronLeft.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 6l6 6l-6 6\", \"key\": \"svg-0\" }]];\nconst IconChevronRight = createReactComponent(\"outline\", \"chevron-right\", \"ChevronRight\", __iconNode);\n\nexport { __iconNode, IconChevronRight as default };\n//# sourceMappingURL=IconChevronRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M6 15l6 -6l6 6\", \"key\": \"svg-0\" }]];\nconst IconChevronUp = createReactComponent(\"outline\", \"chevron-up\", \"ChevronUp\", __iconNode);\n\nexport { __iconNode, IconChevronUp as default };\n//# sourceMappingURL=IconChevronUp.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 3a9 9 0 1 0 9 9\", \"key\": \"svg-0\" }]];\nconst IconLoader2 = createReactComponent(\"outline\", \"loader-2\", \"Loader2\", __iconNode);\n\nexport { __iconNode, IconLoader2 as default };\n//# sourceMappingURL=IconLoader2.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M5 12l14 0\", \"key\": \"svg-0\" }]];\nconst IconMinus = createReactComponent(\"outline\", \"minus\", \"Minus\", __iconNode);\n\nexport { __iconNode, IconMinus as default };\n//# sourceMappingURL=IconMinus.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M8 9l4 -4l4 4\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M16 15l-4 4l-4 -4\", \"key\": \"svg-1\" }]];\nconst IconSelector = createReactComponent(\"outline\", \"selector\", \"Selector\", __iconNode);\n\nexport { __iconNode, IconSelector as default };\n//# sourceMappingURL=IconSelector.mjs.map\n","/**\n * @license @tabler/icons-react v3.43.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M18 6l-12 12\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M6 6l12 12\", \"key\": \"svg-1\" }]];\nconst IconX = createReactComponent(\"outline\", \"x\", \"X\", __iconNode);\n\nexport { __iconNode, IconX as default };\n//# sourceMappingURL=IconX.mjs.map\n","import { IconLoader2 } from '@tabler/icons-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@shared/lib/utils'\n\nconst spinnerVariants = cva('animate-spin [animation-duration:1.5s] text-slate-400', {\n variants: {\n size: {\n sm: '',\n default: '',\n lg: '',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n})\n\nconst iconSizes = { sm: 16, default: 24, lg: 40 } as const\n\nfunction Spinner({\n size = 'default',\n className,\n ...props\n}: VariantProps<typeof spinnerVariants> & React.ComponentProps<'div'>) {\n const resolvedSize = size ?? 'default'\n return (\n <div\n data-slot=\"spinner\"\n role=\"status\"\n className={cn('flex items-center justify-center', className)}\n {...props}\n >\n <IconLoader2\n size={iconSizes[resolvedSize]}\n stroke={1.5}\n className={cn(spinnerVariants({ size: resolvedSize }))}\n />\n <span className=\"sr-only\">Loading</span>\n </div>\n )\n}\n\nexport { Spinner, spinnerVariants }\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@shared/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst tabsListVariants = cva(\n \"inline-flex items-center justify-center text-muted-foreground\",\n {\n variants: {\n variant: {\n // `w-fit` keeps the pill group content-sized even inside a flex-column\n // parent (which would otherwise stretch it via align-items: stretch).\n default: \"h-9 w-fit rounded-lg bg-muted p-1\",\n line: \"gap-1 bg-transparent\",\n sidebar:\n \"flex flex-col items-stretch justify-start w-full h-auto bg-transparent p-0 rounded-none gap-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants>\n>(({ className, variant, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\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, tabsListVariants }\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const openRef = useLatestRef(open);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n // The floating element's position may be recomputed while it's closed\n // but still mounted (such as when transitioning out). To ensure\n // `isPositioned` will be `false` initially on the next open, avoid\n // setting it to `true` when `open === false` (must be specified).\n isPositioned: openRef.current !== false\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$2({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$2({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => {\n const result = offset$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => {\n const result = shift$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => {\n const result = limitShift$1(options);\n return {\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => {\n const result = flip$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => {\n const result = size$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => {\n const result = autoPlacement$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => {\n const result = hide$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => {\n const result = inline$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => {\n const result = arrow$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef?.current || ref.current;\n if (previousAnchor !== anchorRef.current) {\n context.onAnchorChange(anchorRef.current);\n }\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar VISUALLY_HIDDEN_STYLES = Object.freeze({\n // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\"\n});\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...props,\n ref: forwardedRef,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style }\n }\n );\n }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n Root,\n VISUALLY_HIDDEN_STYLES,\n VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = (props) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children\n } = props;\n const isOpenDelayedRef = React.useRef(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n return /* @__PURE__ */ jsx(\n TooltipProviderContextProvider,\n {\n scope: __scopeTooltip,\n isOpenDelayedRef,\n delayDuration,\n onOpen: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n isOpenDelayedRef.current = false;\n }, []),\n onClose: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => isOpenDelayedRef.current = true,\n skipDelayDuration\n );\n }, [skipDelayDuration]),\n isPointerInTransitRef,\n onPointerInTransitChange: React.useCallback((inTransit) => {\n isPointerInTransitRef.current = inTransit;\n }, []),\n disableHoverableContent,\n children\n }\n );\n};\nTooltipProvider.displayName = PROVIDER_NAME;\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = (props) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const contentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: (open2) => {\n if (open2) {\n providerContext.onOpen();\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open2);\n },\n caller: TOOLTIP_NAME\n });\n const stateAttribute = React.useMemo(() => {\n return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n }, [open]);\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n TooltipContextProvider,\n {\n scope: __scopeTooltip,\n contentId,\n open,\n stateAttribute,\n trigger,\n onTriggerChange: setTrigger,\n onTriggerEnter: React.useCallback(() => {\n if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n onTriggerLeave: React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent]),\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n children\n }\n ) });\n};\nTooltip.displayName = TOOLTIP_NAME;\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n React.useEffect(() => {\n return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerUp]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n \"aria-describedby\": context.open ? context.contentId : void 0,\n \"data-state\": context.stateAttribute,\n ...triggerProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === \"touch\") return;\n if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n }),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n if (context.open) {\n context.onClose();\n }\n isPointerDownRef.current = true;\n document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n }),\n onBlur: composeEventHandlers(props.onBlur, context.onClose),\n onClick: composeEventHandlers(props.onClick, context.onClose)\n }\n ) });\n }\n);\nTooltipTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar TooltipPortal = (props) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nTooltipPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n }\n);\nvar TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n const { trigger, onClose } = context;\n const content = ref.current;\n const { onPointerInTransitChange } = providerContext;\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n const handleCreateGraceArea = React.useCallback(\n (event, hoverTarget) => {\n const currentTarget = event.currentTarget;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);\n trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n content.addEventListener(\"pointerleave\", handleContentLeave);\n return () => {\n trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n content.removeEventListener(\"pointerleave\", handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event) => {\n const target = event.target;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n});\nvar [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n \"aria-label\": ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event) => {\n const target = event.target;\n if (target?.contains(context.trigger)) onClose();\n };\n window.addEventListener(\"scroll\", handleScroll, { capture: true });\n return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n return /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: onClose,\n children: /* @__PURE__ */ jsxs(\n PopperPrimitive.Content,\n {\n \"data-state\": context.stateAttribute,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n },\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel || children }) })\n ]\n }\n )\n }\n );\n }\n);\nTooltipContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"TooltipArrow\";\nvar TooltipArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n ARROW_NAME,\n __scopeTooltip\n );\n return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nTooltipArrow.displayName = ARROW_NAME;\nfunction getExitSideFromRect(point, rect) {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return \"left\";\n case right:\n return \"right\";\n case top:\n return \"top\";\n case bottom:\n return \"bottom\";\n default:\n throw new Error(\"unreachable\");\n }\n}\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n const paddedExitPoints = [];\n switch (exitSide) {\n case \"top\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"bottom\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case \"left\":\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"right\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\nfunction getPointsFromRect(rect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom }\n ];\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction getHull(points) {\n const newPoints = points.slice();\n newPoints.sort((a, b) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return 1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return 1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\nfunction getHullPresorted(points) {\n if (points.length <= 1) return points.slice();\n const upperHull = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n const lowerHull = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Portal,\n Provider,\n Root3 as Root,\n Tooltip,\n TooltipArrow,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n Trigger,\n createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\n\nimport { cn } from '@shared/lib/utils'\nimport { usePortalContainer } from '@shared/contexts/PortalContainerContext'\n\n/**\n * Tooltip — contextual helper text anchored to a trigger.\n *\n * Wraps Radix's Tooltip primitives with Atlas defaults. The component\n * family tracks shadcn's canonical v5 pattern:\n *\n * - `TooltipProvider` is mounted once at the app shell\n * (`atlas/src/platform/app/AppLayout.tsx`) with\n * `delayDuration={200}` — consumers don't need to provide their own.\n * - `TooltipContent` renders into the shared portal container\n * (`usePortalContainer()`) so tooltips escape `overflow: hidden`\n * ancestors (tables, scroll regions, dialogs) and still align to\n * the trigger correctly.\n * - `TooltipArrow` is baked into `TooltipContent` — the caret\n * pointing at the trigger is an expected affordance, not an opt-in\n * one.\n * - Colors use `bg-foreground` / `text-background` (neutral dark\n * tooltip on light surfaces). Intentionally NOT `bg-primary` —\n * tooltips are informational, not branded; using the primary\n * color made them read as popovers or links in themed apps.\n *\n * Usage:\n * ```tsx\n * <Tooltip>\n * <TooltipTrigger asChild>\n * <Button variant=\"ghost\" size=\"icon\">\n * <Info />\n * </Button>\n * </TooltipTrigger>\n * <TooltipContent>Helpful description</TooltipContent>\n * </Tooltip>\n * ```\n *\n * For triggers that are a single non-interactive element (text span,\n * icon), wrap with `asChild` so the trigger inherits the child's DOM\n * rather than adding an extra button wrapper.\n */\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {\n /**\n * Per-instance portal container override. Radix Popper uses\n * `position: fixed` for the tooltip body, which is normally\n * anchored to the viewport — but per CSS spec, **any** ancestor\n * with `transform`, `filter`, `perspective`, `will-change`, or\n * `contain` creates a new containing block and re-anchors fixed\n * descendants to itself. Surfaces that mount inside such an\n * ancestor (e.g. a React Flow node body) get tooltips placed at\n * the wrong viewport position even though Floating UI's math is\n * correct.\n *\n * The shared `PortalContainerProvider` can pick up such a\n * containing block when the app's outer chrome is transformed.\n * Pass `container={null}` on triggers inside transformed wrappers\n * to force the portal back to `document.body`, where no\n * transformed ancestor can re-anchor `position: fixed`.\n *\n * Leave undefined to inherit `usePortalContainer()` (default).\n */\n container?: HTMLElement | null\n }\n>(({ className, sideOffset = 6, container: containerOverride, children, ...props }, ref) => {\n // Mount into whatever portal container the shell has registered —\n // lets chat-admin, inbox, and other nested MFEs trap portaled UI\n // inside their own DOM scope so global click handlers and z-index\n // stacking work correctly. Falls back to document.body when no\n // container is set (or when the caller explicitly passed `null` to\n // escape a transformed ancestor — see prop docs above).\n const defaultContainer = usePortalContainer()\n const container =\n containerOverride === undefined ? defaultContainer : containerOverride\n return (\n <TooltipPrimitive.Portal container={container ?? undefined}>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n // Neutral dark surface. `bg-foreground` → `--foreground`\n // (near-black) paired with `text-background` → pure white\n // body text. Auto-inverts for dark mode via the token system.\n 'z-50 w-fit max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs font-normal text-background',\n // Soft shadow mirrors Popover/DropdownMenu elevation —\n // tooltips sit one layer above the page and a subtle lift\n // helps them read as floating UI without competing with the\n // trigger. No border: tooltips are ephemeral and a visible\n // outline adds noise.\n 'shadow-md',\n // Radix animation tokens — fade + slide in from the side\n // opposite the anchored edge so the motion feels anchored\n // to the trigger rather than arbitrary.\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n 'origin-[--radix-tooltip-content-transform-origin]',\n className,\n )}\n {...props}\n >\n {children}\n {/* Caret pointing at the trigger. Fill matches the content\n background so the arrow and body read as one shape — Radix\n handles rotation based on `side` automatically. 2.5 × 1.25\n (10px × 5px) matches shadcn's default and reads clearly at\n the standard 12px tooltip text size. */}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n})\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\n/**\n * Raw access to Radix's `Arrow` primitive for the rare case where a\n * consumer wants to render a custom-styled arrow separately from the\n * default one baked into `TooltipContent`. Most callers should NOT\n * need this — reach for it only when building a specialized tooltip\n * variant inside a subsystem (e.g. an inline annotation overlay).\n */\nconst TooltipArrow = TooltipPrimitive.Arrow\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TooltipArrow }\n","'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nconst getAsset = (type)=>{\n switch(type){\n case 'success':\n return SuccessIcon;\n case 'info':\n return InfoIcon;\n case 'warning':\n return WarningIcon;\n case 'error':\n return ErrorIcon;\n default:\n return null;\n }\n};\nconst bars = Array(12).fill(0);\nconst Loader = ({ visible, className })=>{\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: [\n 'sonner-loading-wrapper',\n className\n ].filter(Boolean).join(' '),\n \"data-visible\": visible\n }, /*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-spinner\"\n }, bars.map((_, i)=>/*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-loading-bar\",\n key: `spinner-bar-${i}`\n }))));\n};\nconst SuccessIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",\n clipRule: \"evenodd\"\n}));\nconst WarningIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",\n clipRule: \"evenodd\"\n}));\nconst InfoIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",\n clipRule: \"evenodd\"\n}));\nconst ErrorIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n}));\nconst CloseIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n}), /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n}));\n\nconst useIsDocumentHidden = ()=>{\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n React.useEffect(()=>{\n const callback = ()=>{\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return ()=>window.removeEventListener('visibilitychange', callback);\n }, []);\n return isDocumentHidden;\n};\n\nlet toastsCounter = 1;\nclass Observer {\n constructor(){\n // We use arrow functions to maintain the correct `this` reference\n this.subscribe = (subscriber)=>{\n this.subscribers.push(subscriber);\n return ()=>{\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n this.publish = (data)=>{\n this.subscribers.forEach((subscriber)=>subscriber(data));\n };\n this.addToast = (data)=>{\n this.publish(data);\n this.toasts = [\n ...this.toasts,\n data\n ];\n };\n this.create = (data)=>{\n var _data_id;\n const { message, ...rest } = data;\n const id = typeof (data == null ? void 0 : data.id) === 'number' || ((_data_id = data.id) == null ? void 0 : _data_id.length) > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast)=>{\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n if (this.dismissedToasts.has(id)) {\n this.dismissedToasts.delete(id);\n }\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast)=>{\n if (toast.id === id) {\n this.publish({\n ...toast,\n ...data,\n id,\n title: message\n });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message\n };\n }\n return toast;\n });\n } else {\n this.addToast({\n title: message,\n ...rest,\n dismissible,\n id\n });\n }\n return id;\n };\n this.dismiss = (id)=>{\n if (id) {\n this.dismissedToasts.add(id);\n requestAnimationFrame(()=>this.subscribers.forEach((subscriber)=>subscriber({\n id,\n dismiss: true\n })));\n } else {\n this.toasts.forEach((toast)=>{\n this.subscribers.forEach((subscriber)=>subscriber({\n id: toast.id,\n dismiss: true\n }));\n });\n }\n return id;\n };\n this.message = (message, data)=>{\n return this.create({\n ...data,\n message\n });\n };\n this.error = (message, data)=>{\n return this.create({\n ...data,\n message,\n type: 'error'\n });\n };\n this.success = (message, data)=>{\n return this.create({\n ...data,\n type: 'success',\n message\n });\n };\n this.info = (message, data)=>{\n return this.create({\n ...data,\n type: 'info',\n message\n });\n };\n this.warning = (message, data)=>{\n return this.create({\n ...data,\n type: 'warning',\n message\n });\n };\n this.loading = (message, data)=>{\n return this.create({\n ...data,\n type: 'loading',\n message\n });\n };\n this.promise = (promise, data)=>{\n if (!data) {\n // Nothing to show\n return;\n }\n let id = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined\n });\n }\n const p = Promise.resolve(promise instanceof Function ? promise() : promise);\n let shouldDismiss = id !== undefined;\n let result;\n const originalPromise = p.then(async (response)=>{\n result = [\n 'resolve',\n response\n ];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({\n id,\n type: 'default',\n message: response\n });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description = typeof data.description === 'function' ? await data.description(`HTTP error! status: ${response.status}`) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (response instanceof Error) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(response) : data.error;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'success',\n description,\n ...toastSettings\n });\n }\n }).catch(async (error)=>{\n result = [\n 'reject',\n error\n ];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n }\n }).finally(()=>{\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n data.finally == null ? void 0 : data.finally.call(data);\n });\n const unwrap = ()=>new Promise((resolve, reject)=>originalPromise.then(()=>result[0] === 'reject' ? reject(result[1]) : resolve(result[1])).catch(reject));\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return {\n unwrap\n };\n } else {\n return Object.assign(id, {\n unwrap\n });\n }\n };\n this.custom = (jsx, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n this.create({\n jsx: jsx(id),\n id,\n ...data\n });\n return id;\n };\n this.getActiveToasts = ()=>{\n return this.toasts.filter((toast)=>!this.dismissedToasts.has(toast.id));\n };\n this.subscribers = [];\n this.toasts = [];\n this.dismissedToasts = new Set();\n }\n}\nconst ToastState = new Observer();\n// bind this to the toast function\nconst toastFunction = (message, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n ToastState.addToast({\n title: message,\n ...data,\n id\n });\n return id;\n};\nconst isHttpResponse = (data)=>{\n return data && typeof data === 'object' && 'ok' in data && typeof data.ok === 'boolean' && 'status' in data && typeof data.status === 'number';\n};\nconst basicToast = toastFunction;\nconst getHistory = ()=>ToastState.toasts;\nconst getToasts = ()=>ToastState.getActiveToasts();\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nconst toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading\n}, {\n getHistory,\n getToasts\n});\n\n__insertCSS(\"[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\");\n\nfunction isAction(action) {\n return action.label !== undefined;\n}\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n// Viewport padding\nconst VIEWPORT_OFFSET = '24px';\n// Mobile viewport padding\nconst MOBILE_VIEWPORT_OFFSET = '16px';\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n// Default toast width\nconst TOAST_WIDTH = 356;\n// Default gap between toasts\nconst GAP = 14;\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 45;\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\nfunction cn(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nfunction getDefaultSwipeDirections(position) {\n const [y, x] = position.split('-');\n const directions = [];\n if (y) {\n directions.push(y);\n }\n if (x) {\n directions.push(x);\n }\n return directions;\n}\nconst Toast = (props)=>{\n var _toast_classNames, _toast_classNames1, _toast_classNames2, _toast_classNames3, _toast_classNames4, _toast_classNames5, _toast_classNames6, _toast_classNames7, _toast_classNames8;\n const { invert: ToasterInvert, toast, unstyled, interacting, setHeights, visibleToasts, heights, index, toasts, expanded, removeToast, defaultRichColors, closeButton: closeButtonFromToaster, style, cancelButtonStyle, actionButtonStyle, className = '', descriptionClassName = '', duration: durationFromToaster, position, gap, expandByDefault, classNames, icons, closeButtonAriaLabel = 'Close toast' } = props;\n const [swipeDirection, setSwipeDirection] = React.useState(null);\n const [swipeOutDirection, setSwipeOutDirection] = React.useState(null);\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [isSwiped, setIsSwiped] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef(null);\n const toastRef = React.useRef(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(()=>heights.findIndex((height)=>height.toastId === toast.id) || 0, [\n heights,\n toast.id\n ]);\n const closeButton = React.useMemo(()=>{\n var _toast_closeButton;\n return (_toast_closeButton = toast.closeButton) != null ? _toast_closeButton : closeButtonFromToaster;\n }, [\n toast.closeButton,\n closeButtonFromToaster\n ]);\n const duration = React.useMemo(()=>toast.duration || durationFromToaster || TOAST_LIFETIME, [\n toast.duration,\n durationFromToaster\n ]);\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(()=>{\n return heights.reduce((prev, curr, reducerIndex)=>{\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n return prev + curr.height;\n }, 0);\n }, [\n heights,\n heightIndex\n ]);\n const isDocumentHidden = useIsDocumentHidden();\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n offset.current = React.useMemo(()=>heightIndex * gap + toastsHeightBefore, [\n heightIndex,\n toastsHeightBefore\n ]);\n React.useEffect(()=>{\n remainingTime.current = duration;\n }, [\n duration\n ]);\n React.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n React.useEffect(()=>{\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height to heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h)=>[\n {\n toastId: toast.id,\n height,\n position: toast.position\n },\n ...h\n ]);\n return ()=>setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n }\n }, [\n setHeights,\n toast.id\n ]);\n React.useLayoutEffect(()=>{\n // Keep height up to date with the content in case it updates\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n setInitialHeight(newHeight);\n setHeights((heights)=>{\n const alreadyExists = heights.find((height)=>height.toastId === toast.id);\n if (!alreadyExists) {\n return [\n {\n toastId: toast.id,\n height: newHeight,\n position: toast.position\n },\n ...heights\n ];\n } else {\n return heights.map((height)=>height.toastId === toast.id ? {\n ...height,\n height: newHeight\n } : height);\n }\n });\n }, [\n mounted,\n toast.title,\n toast.description,\n setHeights,\n toast.id,\n toast.jsx,\n toast.action,\n toast.cancel\n ]);\n const deleteToast = React.useCallback(()=>{\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n setTimeout(()=>{\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [\n toast,\n removeToast,\n setHeights,\n offset\n ]);\n React.useEffect(()=>{\n if (toast.promise && toastType === 'loading' || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId;\n // Pause the timer on each hover\n const pauseTimer = ()=>{\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n const startTimer = ()=>{\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(()=>{\n toast.onAutoClose == null ? void 0 : toast.onAutoClose.call(toast, toast);\n deleteToast();\n }, remainingTime.current);\n };\n if (expanded || interacting || isDocumentHidden) {\n pauseTimer();\n } else {\n startTimer();\n }\n return ()=>clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n toast,\n toastType,\n isDocumentHidden,\n deleteToast\n ]);\n React.useEffect(()=>{\n if (toast.delete) {\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n }\n }, [\n deleteToast,\n toast.delete\n ]);\n function getLoadingIcon() {\n var _toast_classNames;\n if (icons == null ? void 0 : icons.loading) {\n var _toast_classNames1;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1.loader, 'sonner-loader'),\n \"data-visible\": toastType === 'loading'\n }, icons.loading);\n }\n return /*#__PURE__*/ React.createElement(Loader, {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.loader),\n visible: toastType === 'loading'\n });\n }\n const icon = toast.icon || (icons == null ? void 0 : icons[toastType]) || getAsset(toastType);\n var _toast_richColors, _icons_close;\n return /*#__PURE__*/ React.createElement(\"li\", {\n tabIndex: 0,\n ref: toastRef,\n className: cn(className, toastClassname, classNames == null ? void 0 : classNames.toast, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.toast, classNames == null ? void 0 : classNames.default, classNames == null ? void 0 : classNames[toastType], toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1[toastType]),\n \"data-sonner-toast\": \"\",\n \"data-rich-colors\": (_toast_richColors = toast.richColors) != null ? _toast_richColors : defaultRichColors,\n \"data-styled\": !Boolean(toast.jsx || toast.unstyled || unstyled),\n \"data-mounted\": mounted,\n \"data-promise\": Boolean(toast.promise),\n \"data-swiped\": isSwiped,\n \"data-removed\": removed,\n \"data-visible\": isVisible,\n \"data-y-position\": y,\n \"data-x-position\": x,\n \"data-index\": index,\n \"data-front\": isFront,\n \"data-swiping\": swiping,\n \"data-dismissible\": dismissible,\n \"data-type\": toastType,\n \"data-invert\": invert,\n \"data-swipe-out\": swipeOut,\n \"data-swipe-direction\": swipeOutDirection,\n \"data-expanded\": Boolean(expanded || expandByDefault && mounted),\n \"data-testid\": toast.testId,\n style: {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style\n },\n onDragEnd: ()=>{\n setSwiping(false);\n setSwipeDirection(null);\n pointerStartRef.current = null;\n },\n onPointerDown: (event)=>{\n if (event.button === 2) return; // Return early on right click\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n event.target.setPointerCapture(event.pointerId);\n if (event.target.tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = {\n x: event.clientX,\n y: event.clientY\n };\n },\n onPointerUp: ()=>{\n var _toastRef_current, _toastRef_current1, _dragStartTime_current;\n if (swipeOut || !dismissible) return;\n pointerStartRef.current = null;\n const swipeAmountX = Number(((_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.getPropertyValue('--swipe-amount-x').replace('px', '')) || 0);\n const swipeAmountY = Number(((_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.getPropertyValue('--swipe-amount-y').replace('px', '')) || 0);\n const timeTaken = new Date().getTime() - ((_dragStartTime_current = dragStartTime.current) == null ? void 0 : _dragStartTime_current.getTime());\n const swipeAmount = swipeDirection === 'x' ? swipeAmountX : swipeAmountY;\n const velocity = Math.abs(swipeAmount) / timeTaken;\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n if (swipeDirection === 'x') {\n setSwipeOutDirection(swipeAmountX > 0 ? 'right' : 'left');\n } else {\n setSwipeOutDirection(swipeAmountY > 0 ? 'down' : 'up');\n }\n deleteToast();\n setSwipeOut(true);\n return;\n } else {\n var _toastRef_current2, _toastRef_current3;\n (_toastRef_current2 = toastRef.current) == null ? void 0 : _toastRef_current2.style.setProperty('--swipe-amount-x', `0px`);\n (_toastRef_current3 = toastRef.current) == null ? void 0 : _toastRef_current3.style.setProperty('--swipe-amount-y', `0px`);\n }\n setIsSwiped(false);\n setSwiping(false);\n setSwipeDirection(null);\n },\n onPointerMove: (event)=>{\n var _window_getSelection, // Apply transform using both x and y values\n _toastRef_current, _toastRef_current1;\n if (!pointerStartRef.current || !dismissible) return;\n const isHighlighted = ((_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString().length) > 0;\n if (isHighlighted) return;\n const yDelta = event.clientY - pointerStartRef.current.y;\n const xDelta = event.clientX - pointerStartRef.current.x;\n var _props_swipeDirections;\n const swipeDirections = (_props_swipeDirections = props.swipeDirections) != null ? _props_swipeDirections : getDefaultSwipeDirections(position);\n // Determine swipe direction if not already locked\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n setSwipeDirection(Math.abs(xDelta) > Math.abs(yDelta) ? 'x' : 'y');\n }\n let swipeAmount = {\n x: 0,\n y: 0\n };\n const getDampening = (delta)=>{\n const factor = Math.abs(delta) / 20;\n return 1 / (1.5 + factor);\n };\n // Only apply swipe in the locked direction\n if (swipeDirection === 'y') {\n // Handle vertical swipes\n if (swipeDirections.includes('top') || swipeDirections.includes('bottom')) {\n if (swipeDirections.includes('top') && yDelta < 0 || swipeDirections.includes('bottom') && yDelta > 0) {\n swipeAmount.y = yDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = yDelta * getDampening(yDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.y = Math.abs(dampenedDelta) < Math.abs(yDelta) ? dampenedDelta : yDelta;\n }\n }\n } else if (swipeDirection === 'x') {\n // Handle horizontal swipes\n if (swipeDirections.includes('left') || swipeDirections.includes('right')) {\n if (swipeDirections.includes('left') && xDelta < 0 || swipeDirections.includes('right') && xDelta > 0) {\n swipeAmount.x = xDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = xDelta * getDampening(xDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.x = Math.abs(dampenedDelta) < Math.abs(xDelta) ? dampenedDelta : xDelta;\n }\n }\n }\n if (Math.abs(swipeAmount.x) > 0 || Math.abs(swipeAmount.y) > 0) {\n setIsSwiped(true);\n }\n (_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.setProperty('--swipe-amount-x', `${swipeAmount.x}px`);\n (_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.setProperty('--swipe-amount-y', `${swipeAmount.y}px`);\n }\n }, closeButton && !toast.jsx && toastType !== 'loading' ? /*#__PURE__*/ React.createElement(\"button\", {\n \"aria-label\": closeButtonAriaLabel,\n \"data-disabled\": disabled,\n \"data-close-button\": true,\n onClick: disabled || !dismissible ? ()=>{} : ()=>{\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n },\n className: cn(classNames == null ? void 0 : classNames.closeButton, toast == null ? void 0 : (_toast_classNames2 = toast.classNames) == null ? void 0 : _toast_classNames2.closeButton)\n }, (_icons_close = icons == null ? void 0 : icons.close) != null ? _icons_close : CloseIcon) : null, (toastType || toast.icon || toast.promise) && toast.icon !== null && ((icons == null ? void 0 : icons[toastType]) !== null || toast.icon) ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-icon\": \"\",\n className: cn(classNames == null ? void 0 : classNames.icon, toast == null ? void 0 : (_toast_classNames3 = toast.classNames) == null ? void 0 : _toast_classNames3.icon)\n }, toast.promise || toast.type === 'loading' && !toast.icon ? toast.icon || getLoadingIcon() : null, toast.type !== 'loading' ? icon : null) : null, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-content\": \"\",\n className: cn(classNames == null ? void 0 : classNames.content, toast == null ? void 0 : (_toast_classNames4 = toast.classNames) == null ? void 0 : _toast_classNames4.content)\n }, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-title\": \"\",\n className: cn(classNames == null ? void 0 : classNames.title, toast == null ? void 0 : (_toast_classNames5 = toast.classNames) == null ? void 0 : _toast_classNames5.title)\n }, toast.jsx ? toast.jsx : typeof toast.title === 'function' ? toast.title() : toast.title), toast.description ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-description\": \"\",\n className: cn(descriptionClassName, toastDescriptionClassname, classNames == null ? void 0 : classNames.description, toast == null ? void 0 : (_toast_classNames6 = toast.classNames) == null ? void 0 : _toast_classNames6.description)\n }, typeof toast.description === 'function' ? toast.description() : toast.description) : null), /*#__PURE__*/ React.isValidElement(toast.cancel) ? toast.cancel : toast.cancel && isAction(toast.cancel) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-cancel\": true,\n style: toast.cancelButtonStyle || cancelButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick == null ? void 0 : toast.cancel.onClick.call(toast.cancel, event);\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.cancelButton, toast == null ? void 0 : (_toast_classNames7 = toast.classNames) == null ? void 0 : _toast_classNames7.cancelButton)\n }, toast.cancel.label) : null, /*#__PURE__*/ React.isValidElement(toast.action) ? toast.action : toast.action && isAction(toast.action) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-action\": true,\n style: toast.actionButtonStyle || actionButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick == null ? void 0 : toast.action.onClick.call(toast.action, event);\n if (event.defaultPrevented) return;\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.actionButton, toast == null ? void 0 : (_toast_classNames8 = toast.classNames) == null ? void 0 : _toast_classNames8.actionButton)\n }, toast.action.label) : null);\n};\nfunction getDocumentDirection() {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n const dirAttribute = document.documentElement.getAttribute('dir');\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction;\n }\n return dirAttribute;\n}\nfunction assignOffset(defaultOffset, mobileOffset) {\n const styles = {};\n [\n defaultOffset,\n mobileOffset\n ].forEach((offset, index)=>{\n const isMobile = index === 1;\n const prefix = isMobile ? '--mobile-offset' : '--offset';\n const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n function assignAll(offset) {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n styles[`${prefix}-${key}`] = typeof offset === 'number' ? `${offset}px` : offset;\n });\n }\n if (typeof offset === 'number' || typeof offset === 'string') {\n assignAll(offset);\n } else if (typeof offset === 'object') {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n if (offset[key] === undefined) {\n styles[`${prefix}-${key}`] = defaultValue;\n } else {\n styles[`${prefix}-${key}`] = typeof offset[key] === 'number' ? `${offset[key]}px` : offset[key];\n }\n });\n } else {\n assignAll(defaultValue);\n }\n });\n return styles;\n}\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState([]);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>toasts.filter((t)=>t.id !== toast.id));\n });\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, []);\n return {\n toasts: activeToasts\n };\n}\nconst Toaster = /*#__PURE__*/ React.forwardRef(function Toaster(props, ref) {\n const { id, invert, position = 'bottom-right', hotkey = [\n 'altKey',\n 'KeyT'\n ], expand, closeButton, className, offset, mobileOffset, theme = 'light', richColors, duration, style, visibleToasts = VISIBLE_TOASTS_AMOUNT, toastOptions, dir = getDocumentDirection(), gap = GAP, icons, containerAriaLabel = 'Notifications' } = props;\n const [toasts, setToasts] = React.useState([]);\n const filteredToasts = React.useMemo(()=>{\n if (id) {\n return toasts.filter((toast)=>toast.toasterId === id);\n }\n return toasts.filter((toast)=>!toast.toasterId);\n }, [\n toasts,\n id\n ]);\n const possiblePositions = React.useMemo(()=>{\n return Array.from(new Set([\n position\n ].concat(filteredToasts.filter((toast)=>toast.position).map((toast)=>toast.position))));\n }, [\n filteredToasts,\n position\n ]);\n const [heights, setHeights] = React.useState([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(theme !== 'system' ? theme : typeof window !== 'undefined' ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : 'light');\n const listRef = React.useRef(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef(null);\n const isFocusWithinRef = React.useRef(false);\n const removeToast = React.useCallback((toastToRemove)=>{\n setToasts((toasts)=>{\n var _toasts_find;\n if (!((_toasts_find = toasts.find((toast)=>toast.id === toastToRemove.id)) == null ? void 0 : _toasts_find.delete)) {\n ToastState.dismiss(toastToRemove.id);\n }\n return toasts.filter(({ id })=>id !== toastToRemove.id);\n });\n }, []);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n // Prevent batching of other state updates\n requestAnimationFrame(()=>{\n setToasts((toasts)=>toasts.map((t)=>t.id === toast.id ? {\n ...t,\n delete: true\n } : t));\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n if (typeof window === 'undefined') return;\n const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches })=>{\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches })=>{\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\n });\n }\n }, [\n theme\n ]);\n React.useEffect(()=>{\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n const handleKeyDown = (event)=>{\n var _listRef_current;\n const isHotkeyPressed = hotkey.every((key)=>event[key] || event.code === key);\n if (isHotkeyPressed) {\n var _listRef_current1;\n setExpanded(true);\n (_listRef_current1 = listRef.current) == null ? void 0 : _listRef_current1.focus();\n }\n if (event.code === 'Escape' && (document.activeElement === listRef.current || ((_listRef_current = listRef.current) == null ? void 0 : _listRef_current.contains(document.activeElement)))) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return ()=>document.removeEventListener('keydown', handleKeyDown);\n }, [\n hotkey\n ]);\n React.useEffect(()=>{\n if (listRef.current) {\n return ()=>{\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [\n listRef.current\n ]);\n return(// Remove item from normal navigation flow, only available via hotkey\n /*#__PURE__*/ React.createElement(\"section\", {\n ref: ref,\n \"aria-label\": `${containerAriaLabel} ${hotkeyLabel}`,\n tabIndex: -1,\n \"aria-live\": \"polite\",\n \"aria-relevant\": \"additions text\",\n \"aria-atomic\": \"false\",\n suppressHydrationWarning: true\n }, possiblePositions.map((position, index)=>{\n var _heights_;\n const [y, x] = position.split('-');\n if (!filteredToasts.length) return null;\n return /*#__PURE__*/ React.createElement(\"ol\", {\n key: position,\n dir: dir === 'auto' ? getDocumentDirection() : dir,\n tabIndex: -1,\n ref: listRef,\n className: className,\n \"data-sonner-toaster\": true,\n \"data-sonner-theme\": actualTheme,\n \"data-y-position\": y,\n \"data-x-position\": x,\n style: {\n '--front-toast-height': `${((_heights_ = heights[0]) == null ? void 0 : _heights_.height) || 0}px`,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n ...assignOffset(offset, mobileOffset)\n },\n onBlur: (event)=>{\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n }\n }\n },\n onFocus: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget;\n }\n },\n onMouseEnter: ()=>setExpanded(true),\n onMouseMove: ()=>setExpanded(true),\n onMouseLeave: ()=>{\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n },\n onDragEnd: ()=>setExpanded(false),\n onPointerDown: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n setInteracting(true);\n },\n onPointerUp: ()=>setInteracting(false)\n }, filteredToasts.filter((toast)=>!toast.position && index === 0 || toast.position === position).map((toast, index)=>{\n var _toastOptions_duration, _toastOptions_closeButton;\n return /*#__PURE__*/ React.createElement(Toast, {\n key: toast.id,\n icons: icons,\n index: index,\n toast: toast,\n defaultRichColors: richColors,\n duration: (_toastOptions_duration = toastOptions == null ? void 0 : toastOptions.duration) != null ? _toastOptions_duration : duration,\n className: toastOptions == null ? void 0 : toastOptions.className,\n descriptionClassName: toastOptions == null ? void 0 : toastOptions.descriptionClassName,\n invert: invert,\n visibleToasts: visibleToasts,\n closeButton: (_toastOptions_closeButton = toastOptions == null ? void 0 : toastOptions.closeButton) != null ? _toastOptions_closeButton : closeButton,\n interacting: interacting,\n position: position,\n style: toastOptions == null ? void 0 : toastOptions.style,\n unstyled: toastOptions == null ? void 0 : toastOptions.unstyled,\n classNames: toastOptions == null ? void 0 : toastOptions.classNames,\n cancelButtonStyle: toastOptions == null ? void 0 : toastOptions.cancelButtonStyle,\n actionButtonStyle: toastOptions == null ? void 0 : toastOptions.actionButtonStyle,\n closeButtonAriaLabel: toastOptions == null ? void 0 : toastOptions.closeButtonAriaLabel,\n removeToast: removeToast,\n toasts: filteredToasts.filter((t)=>t.position == toast.position),\n heights: heights.filter((h)=>h.position == toast.position),\n setHeights: setHeights,\n expandByDefault: expand,\n gap: gap,\n expanded: expanded,\n swipeDirections: props.swipeDirections\n });\n }));\n })));\n});\n\nexport { Toaster, toast, useSonner };\n","\"use client\"\n\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nimport { cn } from \"@shared/lib/utils\"\n\n/**\n * Toaster — the Atlas-themed Sonner renderer. Canonical toast system\n * for the design system, matching the current shadcn recommendation\n * (https://ui.shadcn.com/docs/components/sonner — the Radix-based\n * Toast was deprecated in v5 in favor of Sonner).\n *\n * Mount once at the app shell — Atlas already does this in\n * `atlas/src/platform/app/AppLayout.tsx`. Callers never render\n * `<Toaster />` themselves; they just call `toast(...)` from\n * 'sonner' and messages appear in the shared stack.\n *\n * Why a wrapper instead of using Sonner's `<Toaster>` directly:\n * 1. Bakes in Atlas's positioning / visibility / sizing defaults\n * (top-right, 380px wide, 8-deep stack) so every mount looks\n * the same without re-specifying options at the call site.\n * 2. Binds Sonner's internal classes to Atlas design tokens via\n * `toastOptions.classNames` — `bg-card`, `border-border`,\n * `shadow-lg`, `rounded-md`, and the `--destructive` /\n * `--primary` / `--muted` pairs. Matches Dialog / Popover /\n * DropdownMenu so all floating UI reads as one visual family.\n * 3. Uses `richColors` for the semantic variants\n * (`toast.success` / `.error` / `.warning` / `.info`), so\n * consumers get Atlas's destructive red on errors without\n * per-call styling.\n *\n * Usage:\n * import { toast } from 'sonner'\n *\n * toast('Saved')\n * toast.success('Published')\n * toast.error('Upload failed', { description: err.message })\n * toast.promise(saveDraft(), {\n * loading: 'Saving…',\n * success: 'Saved',\n * error: (err) => `Failed: ${err.message}`,\n * })\n * toast('Deleted', {\n * description: '3 items moved to trash.',\n * action: { label: 'Undo', onClick: () => restore() },\n * })\n */\nexport function Toaster({ ...props }: ToasterProps) {\n return (\n <Sonner\n // Top-right stack — toasts drop in from the top edge and\n // queue vertically. Matches where users naturally look for\n // system messages after an action.\n position=\"top-right\"\n // Atlas's semantic variant coloring. `richColors` makes\n // `toast.error` / `.success` / `.warning` / `.info` paint\n // their own tinted surfaces (destructive red, emerald green,\n // amber, sky) rather than the neutral default.\n richColors\n // Always show a × close button on the hover surface — matches\n // Dialog's close affordance expectation.\n closeButton\n // Cap the visible stack. A burst of messages queues until\n // earlier toasts dismiss, so the viewport never stops feeling\n // interactable.\n visibleToasts={8}\n // Offset from the viewport edge. 56px pushes toasts below the\n // shell's top bar so they don't collide with header controls.\n offset={56}\n toastOptions={{\n // Fixed width keeps long titles from making the stack\n // jitter sideways as toasts enter/exit.\n style: { width: \"380px\" },\n // Atlas design-token bindings for Sonner's internal class\n // hooks. `group-[.toaster]` scopes the overrides to this\n // Toaster's root so they don't leak into other `.toast`\n // classnames elsewhere in the app.\n classNames: {\n toast: cn(\n \"group toast\",\n \"group-[.toaster]:bg-card group-[.toaster]:text-foreground\",\n \"group-[.toaster]:border group-[.toaster]:border-border\",\n \"group-[.toaster]:shadow-lg group-[.toaster]:rounded-md\",\n ),\n description: cn(\"group-[.toast]:text-muted-foreground\"),\n actionButton: cn(\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n ),\n cancelButton: cn(\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n ),\n // Close × button. Sonner's default renders a circular chip\n // floated in the OUTER top-left corner of the toast, using\n // `transform: translate(-35%, -35%)` applied via INLINE\n // style to push the button past the toast's border. We\n // override to put it INSIDE the toast at the far right —\n // matches Dialog's corner close affordance and keeps the\n // active surface contained to the toast's own footprint.\n //\n // Override mechanics:\n // - `left-auto right-3 top-3` positions the button at\n // the inside-right edge of the toast, 12px from the\n // right and 12px from the top.\n // - `[transform:none]!` is the ONLY reliable way to\n // defeat Sonner's inline `transform: translate(...)`.\n // Tailwind's `-translate-*` utilities write to\n // `--tw-translate-*` variables rather than to the\n // `transform` property directly, so inline transforms\n // still win. Arbitrary-property syntax with `!`\n // (important) overrides the inline declaration.\n closeButton: cn(\n \"[transform:none]!\",\n \"!left-auto !right-3 !top-3\",\n // Transparent surface — just the icon, no chip\n // background. Muted icon color that darkens on hover,\n // with a subtle `bg-accent` wash on hover for a small\n // affordance without becoming a distinct button.\n \"!size-6 !rounded-xs !border-0 !bg-transparent\",\n \"!text-foreground/50 hover:!text-foreground hover:!bg-accent\",\n // Center the X glyph inside the larger touch target.\n \"flex items-center justify-center\",\n ),\n },\n }}\n {...props}\n />\n )\n}\n","/**\n * table-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nfunction createColumnHelper() {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function' ? {\n ...column,\n accessorFn: accessor\n } : {\n ...column,\n accessorKey: accessor\n };\n },\n display: column => column,\n group: column => column\n };\n}\n\n// Is this type a tuple?\n\n// If this type is a tuple, what indices are allowed?\n\n///\n\nfunction functionalUpdate(updater, input) {\n return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {\n //\n}\nfunction makeStateUpdater(key, instance) {\n return updater => {\n instance.setState(old => {\n return {\n ...old,\n [key]: functionalUpdate(updater, old[key])\n };\n });\n };\n}\nfunction isFunction(d) {\n return d instanceof Function;\n}\nfunction isNumberArray(d) {\n return Array.isArray(d) && d.every(val => typeof val === 'number');\n}\nfunction flattenBy(arr, getChildren) {\n const flat = [];\n const recurse = subArr => {\n subArr.forEach(item => {\n flat.push(item);\n const children = getChildren(item);\n if (children != null && children.length) {\n recurse(children);\n }\n });\n };\n recurse(arr);\n return flat;\n}\nfunction memo(getDeps, fn, opts) {\n let deps = [];\n let result;\n return depArgs => {\n let depTime;\n if (opts.key && opts.debug) depTime = Date.now();\n const newDeps = getDeps(depArgs);\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && opts.debug) resultTime = Date.now();\n result = fn(...newDeps);\n opts == null || opts.onChange == null || opts.onChange(result);\n if (opts.key && opts.debug) {\n if (opts != null && opts.debug()) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = ' ' + str;\n }\n return str;\n };\n console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);\n }\n }\n return result;\n };\n}\nfunction getMemoOptions(tableOptions, debugLevel, key, onChange) {\n return {\n debug: () => {\n var _tableOptions$debugAl;\n return (_tableOptions$debugAl = tableOptions == null ? void 0 : tableOptions.debugAll) != null ? _tableOptions$debugAl : tableOptions[debugLevel];\n },\n key: process.env.NODE_ENV === 'development' && key,\n onChange\n };\n}\n\nfunction createCell(table, row, column, columnId) {\n const getRenderValue = () => {\n var _cell$getValue;\n return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue;\n };\n const cell = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(() => [table, column, row, cell], (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell,\n getValue: cell.getValue,\n renderValue: cell.renderValue\n }), getMemoOptions(table.options, 'debugCells', 'cell.getContext'))\n };\n table._features.forEach(feature => {\n feature.createCell == null || feature.createCell(cell, column, row, table);\n }, {});\n return cell;\n}\n\nfunction createColumn(table, columnDef, depth, parent) {\n var _ref, _resolvedColumnDef$id;\n const defaultColumn = table._getDefaultColumnDef();\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef\n };\n const accessorKey = resolvedColumnDef.accessorKey;\n let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? typeof String.prototype.replaceAll === 'function' ? accessorKey.replaceAll('.', '_') : accessorKey.replace(/\\./g, '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined;\n let accessorFn;\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn;\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = originalRow => {\n let result = originalRow;\n for (const key of accessorKey.split('.')) {\n var _result;\n result = (_result = result) == null ? void 0 : _result[key];\n if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n }\n }\n return result;\n };\n } else {\n accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey];\n }\n }\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`);\n }\n throw new Error();\n }\n let column = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent,\n depth,\n columnDef: resolvedColumnDef,\n columns: [],\n getFlatColumns: memo(() => [true], () => {\n var _column$columns;\n return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')),\n getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => {\n var _column$columns2;\n if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }\n return [column];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns'))\n };\n for (const feature of table._features) {\n feature.createColumn == null || feature.createColumn(column, table);\n }\n\n // Yes, we have to convert table to unknown, because we know more than the compiler here.\n return column;\n}\n\nconst debug = 'debugHeaders';\n//\n\nfunction createHeader(table, column, options) {\n var _options$id;\n const id = (_options$id = options.id) != null ? _options$id : column.id;\n let header = {\n id,\n column,\n index: options.index,\n isPlaceholder: !!options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null,\n getLeafHeaders: () => {\n const leafHeaders = [];\n const recurseHeader = h => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader);\n }\n leafHeaders.push(h);\n };\n recurseHeader(header);\n return leafHeaders;\n },\n getContext: () => ({\n table,\n header: header,\n column\n })\n };\n table._features.forEach(feature => {\n feature.createHeader == null || feature.createHeader(header, table);\n });\n return header;\n}\nconst Headers = {\n createTable: table => {\n // Header Groups\n\n table.getHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n var _left$map$filter, _right$map$filter;\n const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : [];\n const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : [];\n const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table);\n return headerGroups;\n }, getMemoOptions(table.options, debug, 'getHeaderGroups'));\n table.getCenterHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n return buildHeaderGroups(allColumns, leafColumns, table, 'center');\n }, getMemoOptions(table.options, debug, 'getCenterHeaderGroups'));\n table.getLeftHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n var _left$map$filter2;\n const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left');\n }, getMemoOptions(table.options, debug, 'getLeftHeaderGroups'));\n table.getRightHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n var _right$map$filter2;\n const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right');\n }, getMemoOptions(table.options, debug, 'getRightHeaderGroups'));\n\n // Footer Groups\n\n table.getFooterGroups = memo(() => [table.getHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getFooterGroups'));\n table.getLeftFooterGroups = memo(() => [table.getLeftHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getLeftFooterGroups'));\n table.getCenterFooterGroups = memo(() => [table.getCenterHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getCenterFooterGroups'));\n table.getRightFooterGroups = memo(() => [table.getRightHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getRightFooterGroups'));\n\n // Flat Headers\n\n table.getFlatHeaders = memo(() => [table.getHeaderGroups()], headerGroups => {\n return headerGroups.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getFlatHeaders'));\n table.getLeftFlatHeaders = memo(() => [table.getLeftHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeftFlatHeaders'));\n table.getCenterFlatHeaders = memo(() => [table.getCenterHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getCenterFlatHeaders'));\n table.getRightFlatHeaders = memo(() => [table.getRightHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getRightFlatHeaders'));\n\n // Leaf Headers\n\n table.getCenterLeafHeaders = memo(() => [table.getCenterFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders;\n return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n });\n }, getMemoOptions(table.options, debug, 'getCenterLeafHeaders'));\n table.getLeftLeafHeaders = memo(() => [table.getLeftFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders2;\n return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n });\n }, getMemoOptions(table.options, debug, 'getLeftLeafHeaders'));\n table.getRightLeafHeaders = memo(() => [table.getRightFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders3;\n return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n });\n }, getMemoOptions(table.options, debug, 'getRightLeafHeaders'));\n table.getLeafHeaders = memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => {\n var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n return header.getLeafHeaders();\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeafHeaders'));\n }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n var _headerGroups$0$heade, _headerGroups$;\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0;\n const findMaxDepth = function (columns, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n maxDepth = Math.max(maxDepth, depth);\n columns.filter(column => column.getIsVisible()).forEach(column => {\n var _column$columns;\n if ((_column$columns = column.columns) != null && _column$columns.length) {\n findMaxDepth(column.columns, depth + 1);\n }\n }, 0);\n };\n findMaxDepth(allColumns);\n let headerGroups = [];\n const createHeaderGroup = (headersToGroup, depth) => {\n // The header group we are creating\n const headerGroup = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: []\n };\n\n // The parent columns we're going to scan next\n const pendingParentHeaders = [];\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n let column;\n let isPlaceholder = false;\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent;\n } else {\n // The parent header is repeated\n column = headerToGroup.column;\n isPlaceholder = true;\n }\n if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup);\n } else {\n // This is a new header. Let's create it\n const header = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined,\n depth,\n index: pendingParentHeaders.length\n });\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup);\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header);\n }\n headerGroup.headers.push(headerToGroup);\n headerToGroup.headerGroup = headerGroup;\n });\n headerGroups.push(headerGroup);\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1);\n }\n };\n const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, {\n depth: maxDepth,\n index\n }));\n createHeaderGroup(bottomHeaders, maxDepth - 1);\n headerGroups.reverse();\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = headers => {\n const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n return filteredHeaders.map(header => {\n let colSpan = 0;\n let rowSpan = 0;\n let childRowSpans = [0];\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = [];\n recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n let {\n colSpan: childColSpan,\n rowSpan: childRowSpan\n } = _ref;\n colSpan += childColSpan;\n childRowSpans.push(childRowSpan);\n });\n } else {\n colSpan = 1;\n }\n const minChildRowSpan = Math.min(...childRowSpans);\n rowSpan = rowSpan + minChildRowSpan;\n header.colSpan = colSpan;\n header.rowSpan = rowSpan;\n return {\n colSpan,\n rowSpan\n };\n });\n };\n recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n return headerGroups;\n}\n\nconst createRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n let row = {\n id,\n index: rowIndex,\n original,\n depth,\n parentId,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: columnId => {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n return row._valuesCache[columnId];\n },\n getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n return row._uniqueValuesCache[columnId];\n }\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex);\n return row._uniqueValuesCache[columnId];\n },\n renderValue: columnId => {\n var _row$getValue;\n return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue;\n },\n subRows: subRows != null ? subRows : [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getParentRow: () => row.parentId ? table.getRow(row.parentId, true) : undefined,\n getParentRows: () => {\n let parentRows = [];\n let currentRow = row;\n while (true) {\n const parentRow = currentRow.getParentRow();\n if (!parentRow) break;\n parentRows.push(parentRow);\n currentRow = parentRow;\n }\n return parentRows.reverse();\n },\n getAllCells: memo(() => [table.getAllLeafColumns()], leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row, column, column.id);\n });\n }, getMemoOptions(table.options, 'debugRows', 'getAllCells')),\n _getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell;\n return acc;\n }, {});\n }, getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId'))\n };\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i];\n feature == null || feature.createRow == null || feature.createRow(row, table);\n }\n return row;\n};\n\n//\n\nconst ColumnFaceting = {\n createColumn: (column, table) => {\n column._getFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id);\n column.getFacetedRowModel = () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return column._getFacetedRowModel();\n };\n column._getFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id);\n column.getFacetedUniqueValues = () => {\n if (!column._getFacetedUniqueValues) {\n return new Map();\n }\n return column._getFacetedUniqueValues();\n };\n column._getFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id);\n column.getFacetedMinMaxValues = () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined;\n }\n return column._getFacetedMinMaxValues();\n };\n }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n var _filterValue$toString, _row$getValue;\n const search = filterValue == null || (_filterValue$toString = filterValue.toString()) == null ? void 0 : _filterValue$toString.toLowerCase();\n return Boolean((_row$getValue = row.getValue(columnId)) == null || (_row$getValue = _row$getValue.toString()) == null || (_row$getValue = _row$getValue.toLowerCase()) == null ? void 0 : _row$getValue.includes(search));\n};\nincludesString.autoRemove = val => testFalsey(val);\nconst includesStringSensitive = (row, columnId, filterValue) => {\n var _row$getValue2;\n return Boolean((_row$getValue2 = row.getValue(columnId)) == null || (_row$getValue2 = _row$getValue2.toString()) == null ? void 0 : _row$getValue2.includes(filterValue));\n};\nincludesStringSensitive.autoRemove = val => testFalsey(val);\nconst equalsString = (row, columnId, filterValue) => {\n var _row$getValue3;\n return ((_row$getValue3 = row.getValue(columnId)) == null || (_row$getValue3 = _row$getValue3.toString()) == null ? void 0 : _row$getValue3.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase());\n};\nequalsString.autoRemove = val => testFalsey(val);\nconst arrIncludes = (row, columnId, filterValue) => {\n var _row$getValue4;\n return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue);\n};\narrIncludes.autoRemove = val => testFalsey(val);\nconst arrIncludesAll = (row, columnId, filterValue) => {\n return !filterValue.some(val => {\n var _row$getValue5;\n return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val));\n });\n};\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesSome = (row, columnId, filterValue) => {\n return filterValue.some(val => {\n var _row$getValue6;\n return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val);\n });\n};\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst equals = (row, columnId, filterValue) => {\n return row.getValue(columnId) === filterValue;\n};\nequals.autoRemove = val => testFalsey(val);\nconst weakEquals = (row, columnId, filterValue) => {\n return row.getValue(columnId) == filterValue;\n};\nweakEquals.autoRemove = val => testFalsey(val);\nconst inNumberRange = (row, columnId, filterValue) => {\n let [min, max] = filterValue;\n const rowValue = row.getValue(columnId);\n return rowValue >= min && rowValue <= max;\n};\ninNumberRange.resolveFilterValue = val => {\n let [unsafeMin, unsafeMax] = val;\n let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n if (min > max) {\n const temp = min;\n min = max;\n max = temp;\n }\n return [min, max];\n};\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]);\n\n// Export\n\nconst filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange\n};\n// Utils\n\nfunction testFalsey(val) {\n return val === undefined || val === null || val === '';\n}\n\n//\n\nconst ColumnFiltering = {\n getDefaultColumnDef: () => {\n return {\n filterFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n columnFilters: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n filterFromLeafRows: false,\n maxLeafRowFilterDepth: 100\n };\n },\n createColumn: (column, table) => {\n column.getAutoFilterFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return filterFns.includesString;\n }\n if (typeof value === 'number') {\n return filterFns.inNumberRange;\n }\n if (typeof value === 'boolean') {\n return filterFns.equals;\n }\n if (value !== null && typeof value === 'object') {\n return filterFns.equals;\n }\n if (Array.isArray(value)) {\n return filterFns.arrIncludes;\n }\n return filterFns.weakEquals;\n };\n column.getFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : // @ts-ignore\n (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn];\n };\n column.getCanFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2;\n return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn;\n };\n column.getIsFiltered = () => column.getFilterIndex() > -1;\n column.getFilterValue = () => {\n var _table$getState$colum;\n return (_table$getState$colum = table.getState().columnFilters) == null || (_table$getState$colum = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum.value;\n };\n column.getFilterIndex = () => {\n var _table$getState$colum2, _table$getState$colum3;\n return (_table$getState$colum2 = (_table$getState$colum3 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum3.findIndex(d => d.id === column.id)) != null ? _table$getState$colum2 : -1;\n };\n column.setFilterValue = value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn();\n const previousFilter = old == null ? void 0 : old.find(d => d.id === column.id);\n const newFilter = functionalUpdate(value, previousFilter ? previousFilter.value : undefined);\n\n //\n if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n var _old$filter;\n return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n }\n const newFilterObj = {\n id: column.id,\n value: newFilter\n };\n if (previousFilter) {\n var _old$map;\n return (_old$map = old == null ? void 0 : old.map(d => {\n if (d.id === column.id) {\n return newFilterObj;\n }\n return d;\n })) != null ? _old$map : [];\n }\n if (old != null && old.length) {\n return [...old, newFilterObj];\n }\n return [newFilterObj];\n });\n };\n },\n createRow: (row, _table) => {\n row.columnFilters = {};\n row.columnFiltersMeta = {};\n },\n createTable: table => {\n table.setColumnFilters = updater => {\n const leafColumns = table.getAllLeafColumns();\n const updateFn = old => {\n var _functionalUpdate;\n return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id);\n if (column) {\n const filterFn = column.getFilterFn();\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false;\n }\n }\n return true;\n });\n };\n table.options.onColumnFiltersChange == null || table.options.onColumnFiltersChange(updateFn);\n };\n table.resetColumnFilters = defaultState => {\n var _table$initialState$c, _table$initialState;\n table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnFilters) != null ? _table$initialState$c : []);\n };\n table.getPreFilteredRowModel = () => table.getCoreRowModel();\n table.getFilteredRowModel = () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table);\n }\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getFilteredRowModel();\n };\n }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst sum = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId);\n return sum + (typeof nextValue === 'number' ? nextValue : 0);\n }, 0);\n};\nconst min = (columnId, _leafRows, childRows) => {\n let min;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (min > value || min === undefined && value >= value)) {\n min = value;\n }\n });\n return min;\n};\nconst max = (columnId, _leafRows, childRows) => {\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (max < value || max === undefined && value >= value)) {\n max = value;\n }\n });\n return max;\n};\nconst extent = (columnId, _leafRows, childRows) => {\n let min;\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n });\n return [min, max];\n};\nconst mean = (columnId, leafRows) => {\n let count = 0;\n let sum = 0;\n leafRows.forEach(row => {\n let value = row.getValue(columnId);\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n });\n if (count) return sum / count;\n return;\n};\nconst median = (columnId, leafRows) => {\n if (!leafRows.length) {\n return;\n }\n const values = leafRows.map(row => row.getValue(columnId));\n if (!isNumberArray(values)) {\n return;\n }\n if (values.length === 1) {\n return values[0];\n }\n const mid = Math.floor(values.length / 2);\n const nums = values.sort((a, b) => a - b);\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n};\nconst unique = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values());\n};\nconst uniqueCount = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size;\n};\nconst count = (_columnId, leafRows) => {\n return leafRows.length;\n};\nconst aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count\n};\n\n//\n\nconst ColumnGrouping = {\n getDefaultColumnDef: () => {\n return {\n aggregatedCell: props => {\n var _toString, _props$getValue;\n return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null;\n },\n aggregationFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n grouping: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder'\n };\n },\n createColumn: (column, table) => {\n column.toggleGrouping = () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old != null && old.includes(column.id)) {\n return old.filter(d => d !== column.id);\n }\n return [...(old != null ? old : []), column.id];\n });\n };\n column.getCanGroup = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue);\n };\n column.getIsGrouped = () => {\n var _table$getState$group;\n return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id);\n };\n column.getGroupedIndex = () => {\n var _table$getState$group2;\n return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id);\n };\n column.getToggleGroupingHandler = () => {\n const canGroup = column.getCanGroup();\n return () => {\n if (!canGroup) return;\n column.toggleGrouping();\n };\n };\n column.getAutoAggregationFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'number') {\n return aggregationFns.sum;\n }\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent;\n }\n };\n column.getAggregationFn = () => {\n var _table$options$aggreg, _table$options$aggreg2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn];\n };\n },\n createTable: table => {\n table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater);\n table.resetGrouping = defaultState => {\n var _table$initialState$g, _table$initialState;\n table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []);\n };\n table.getPreGroupedRowModel = () => table.getFilteredRowModel();\n table.getGroupedRowModel = () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table);\n }\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel();\n }\n return table._getGroupedRowModel();\n };\n },\n createRow: (row, table) => {\n row.getIsGrouped = () => !!row.groupingColumnId;\n row.getGroupingValue = columnId => {\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.columnDef.getGroupingValue)) {\n return row.getValue(columnId);\n }\n row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original);\n return row._groupingValuesCache[columnId];\n };\n row._groupingValuesCache = {};\n },\n createCell: (cell, column, row, table) => {\n cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId;\n cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped();\n cell.getIsAggregated = () => {\n var _row$subRows;\n return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n return leafColumns;\n }\n const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns;\n }\n const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\n\nconst ColumnOrdering = {\n getInitialState: state => {\n return {\n columnOrder: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table)\n };\n },\n createColumn: (column, table) => {\n column.getIndex = memo(position => [_getVisibleLeafColumns(table, position)], columns => columns.findIndex(d => d.id === column.id), getMemoOptions(table.options, 'debugColumns', 'getIndex'));\n column.getIsFirstColumn = position => {\n var _columns$;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns$ = columns[0]) == null ? void 0 : _columns$.id) === column.id;\n };\n column.getIsLastColumn = position => {\n var _columns;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns = columns[columns.length - 1]) == null ? void 0 : _columns.id) === column.id;\n };\n },\n createTable: table => {\n table.setColumnOrder = updater => table.options.onColumnOrderChange == null ? void 0 : table.options.onColumnOrderChange(updater);\n table.resetColumnOrder = defaultState => {\n var _table$initialState$c;\n table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []);\n };\n table._getOrderColumnsFn = memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns = [];\n\n // If there is no order, return the normal columns\n if (!(columnOrder != null && columnOrder.length)) {\n orderedColumns = columns;\n } else {\n const columnOrderCopy = [...columnOrder];\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns];\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift();\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy];\n }\n return orderColumns(orderedColumns, grouping, groupedColumnMode);\n }, getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn'));\n }\n};\n\n//\n\nconst getDefaultColumnPinningState = () => ({\n left: [],\n right: []\n});\nconst ColumnPinning = {\n getInitialState: state => {\n return {\n columnPinning: getDefaultColumnPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table)\n };\n },\n createColumn: (column, table) => {\n column.pin = position => {\n const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n table.setColumnPinning(old => {\n var _old$left3, _old$right3;\n if (position === 'right') {\n var _old$left, _old$right;\n return {\n left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n };\n }\n if (position === 'left') {\n var _old$left2, _old$right2;\n return {\n left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n }\n return {\n left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n });\n };\n column.getCanPin = () => {\n const leafColumns = column.getLeafColumns();\n return leafColumns.some(d => {\n var _d$columnDef$enablePi, _ref, _table$options$enable;\n return ((_d$columnDef$enablePi = d.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_ref = (_table$options$enable = table.options.enableColumnPinning) != null ? _table$options$enable : table.options.enablePinning) != null ? _ref : true);\n });\n };\n column.getIsPinned = () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id);\n const {\n left,\n right\n } = table.getState().columnPinning;\n const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n return isLeft ? 'left' : isRight ? 'right' : false;\n };\n column.getPinnedIndex = () => {\n var _table$getState$colum, _table$getState$colum2;\n const position = column.getIsPinned();\n return position ? (_table$getState$colum = (_table$getState$colum2 = table.getState().columnPinning) == null || (_table$getState$colum2 = _table$getState$colum2[position]) == null ? void 0 : _table$getState$colum2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0;\n };\n },\n createRow: (row, table) => {\n row.getCenterVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allCells.filter(d => !leftAndRight.includes(d.column.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells'));\n row.getLeftVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left], (allCells, left) => {\n const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'left'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells'));\n row.getRightVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => {\n const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'right'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells'));\n },\n createTable: table => {\n table.setColumnPinning = updater => table.options.onColumnPinningChange == null ? void 0 : table.options.onColumnPinningChange(updater);\n table.resetColumnPinning = defaultState => {\n var _table$initialState$c, _table$initialState;\n return table.setColumnPinning(defaultState ? getDefaultColumnPinningState() : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnPinning) != null ? _table$initialState$c : getDefaultColumnPinningState());\n };\n table.getIsSomeColumnsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().columnPinning;\n if (!position) {\n var _pinningState$left, _pinningState$right;\n return Boolean(((_pinningState$left = pinningState.left) == null ? void 0 : _pinningState$left.length) || ((_pinningState$right = pinningState.right) == null ? void 0 : _pinningState$right.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table.getLeftLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => {\n return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns'));\n table.getRightLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => {\n return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns'));\n table.getCenterLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allColumns.filter(d => !leftAndRight.includes(d.id));\n }, getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns'));\n }\n};\n\nfunction safelyAccessDocument(_document) {\n return _document || (typeof document !== 'undefined' ? document : null);\n}\n\n//\n\n//\n\nconst defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER\n};\nconst getDefaultColumnSizingInfoState = () => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: []\n});\nconst ColumnSizing = {\n getDefaultColumnDef: () => {\n return defaultColumnSizing;\n },\n getInitialState: state => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n columnResizeMode: 'onEnd',\n columnResizeDirection: 'ltr',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table)\n };\n },\n createColumn: (column, table) => {\n column.getSize = () => {\n var _column$columnDef$min, _ref, _column$columnDef$max;\n const columnSize = table.getState().columnSizing[column.id];\n return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize);\n };\n column.getStart = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(0, column.getIndex(position)).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getStart'));\n column.getAfter = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(column.getIndex(position) + 1).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getAfter'));\n column.resetSize = () => {\n table.setColumnSizing(_ref2 => {\n let {\n [column.id]: _,\n ...rest\n } = _ref2;\n return rest;\n });\n };\n column.getCanResize = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true);\n };\n column.getIsResizing = () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id;\n };\n },\n createHeader: (header, table) => {\n header.getSize = () => {\n let sum = 0;\n const recurse = header => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse);\n } else {\n var _header$column$getSiz;\n sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n }\n };\n recurse(header);\n return sum;\n };\n header.getStart = () => {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n }\n return 0;\n };\n header.getResizeHandler = _contextDocument => {\n const column = table.getColumn(header.column.id);\n const canResize = column == null ? void 0 : column.getCanResize();\n return e => {\n if (!column || !canResize) {\n return;\n }\n e.persist == null || e.persist();\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return;\n }\n }\n const startSize = header.getSize();\n const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n const newColumnSizing = {};\n const updateOffset = (eventType, clientXPos) => {\n if (typeof clientXPos !== 'number') {\n return;\n }\n table.setColumnSizingInfo(old => {\n var _old$startOffset, _old$startSize;\n const deltaDirection = table.options.columnResizeDirection === 'rtl' ? -1 : 1;\n const deltaOffset = (clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0)) * deltaDirection;\n const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n old.columnSizingStart.forEach(_ref3 => {\n let [columnId, headerSize] = _ref3;\n newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n });\n return {\n ...old,\n deltaOffset,\n deltaPercentage\n };\n });\n if (table.options.columnResizeMode === 'onChange' || eventType === 'end') {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing\n }));\n }\n };\n const onMove = clientXPos => updateOffset('move', clientXPos);\n const onEnd = clientXPos => {\n updateOffset('end', clientXPos);\n table.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: []\n }));\n };\n const contextDocument = safelyAccessDocument(_contextDocument);\n const mouseEvents = {\n moveHandler: e => onMove(e.clientX),\n upHandler: e => {\n contextDocument == null || contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('mouseup', mouseEvents.upHandler);\n onEnd(e.clientX);\n }\n };\n const touchEvents = {\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onMove(e.touches[0].clientX);\n return false;\n },\n upHandler: e => {\n var _e$touches$;\n contextDocument == null || contextDocument.removeEventListener('touchmove', touchEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('touchend', touchEvents.upHandler);\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX);\n }\n };\n const passiveIfSupported = passiveEventSupported() ? {\n passive: false\n } : false;\n if (isTouchStartEvent(e)) {\n contextDocument == null || contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported);\n } else {\n contextDocument == null || contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n }\n table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id\n }));\n };\n };\n },\n createTable: table => {\n table.setColumnSizing = updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater);\n table.setColumnSizingInfo = updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater);\n table.resetColumnSizing = defaultState => {\n var _table$initialState$c;\n table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {});\n };\n table.resetHeaderSizeInfo = defaultState => {\n var _table$initialState$c2;\n table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState());\n };\n table.getTotalSize = () => {\n var _table$getHeaderGroup, _table$getHeaderGroup2;\n return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getHeaderGroup : 0;\n };\n table.getLeftTotalSize = () => {\n var _table$getLeftHeaderG, _table$getLeftHeaderG2;\n return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getLeftHeaderG : 0;\n };\n table.getCenterTotalSize = () => {\n var _table$getCenterHeade, _table$getCenterHeade2;\n return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getCenterHeade : 0;\n };\n table.getRightTotalSize = () => {\n var _table$getRightHeader, _table$getRightHeader2;\n return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getRightHeader : 0;\n };\n }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported;\n let supported = false;\n try {\n const options = {\n get passive() {\n supported = true;\n return false;\n }\n };\n const noop = () => {};\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop);\n } catch (err) {\n supported = false;\n }\n passiveSupported = supported;\n return passiveSupported;\n}\nfunction isTouchStartEvent(e) {\n return e.type === 'touchstart';\n}\n\n//\n\nconst ColumnVisibility = {\n getInitialState: state => {\n return {\n columnVisibility: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table)\n };\n },\n createColumn: (column, table) => {\n column.toggleVisibility = value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value != null ? value : !column.getIsVisible()\n }));\n }\n };\n column.getIsVisible = () => {\n var _ref, _table$getState$colum;\n const childColumns = column.columns;\n return (_ref = childColumns.length ? childColumns.some(c => c.getIsVisible()) : (_table$getState$colum = table.getState().columnVisibility) == null ? void 0 : _table$getState$colum[column.id]) != null ? _ref : true;\n };\n column.getCanHide = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true);\n };\n column.getToggleVisibilityHandler = () => {\n return e => {\n column.toggleVisibility == null || column.toggleVisibility(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row._getAllVisibleCells = memo(() => [row.getAllCells(), table.getState().columnVisibility], cells => {\n return cells.filter(cell => cell.column.getIsVisible());\n }, getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells'));\n row.getVisibleCells = memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], getMemoOptions(table.options, 'debugRows', 'getVisibleCells'));\n },\n createTable: table => {\n const makeVisibleColumnsMethod = (key, getColumns) => {\n return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n }, getMemoOptions(table.options, 'debugColumns', key));\n };\n table.getVisibleFlatColumns = makeVisibleColumnsMethod('getVisibleFlatColumns', () => table.getAllFlatColumns());\n table.getVisibleLeafColumns = makeVisibleColumnsMethod('getVisibleLeafColumns', () => table.getAllLeafColumns());\n table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => table.getLeftLeafColumns());\n table.getRightVisibleLeafColumns = makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => table.getRightLeafColumns());\n table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => table.getCenterLeafColumns());\n table.setColumnVisibility = updater => table.options.onColumnVisibilityChange == null ? void 0 : table.options.onColumnVisibilityChange(updater);\n table.resetColumnVisibility = defaultState => {\n var _table$initialState$c;\n table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {});\n };\n table.toggleAllColumnsVisible = value => {\n var _value;\n value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible();\n table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => ({\n ...obj,\n [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n }), {}));\n };\n table.getIsAllColumnsVisible = () => !table.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible()));\n table.getIsSomeColumnsVisible = () => table.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible());\n table.getToggleAllColumnsVisibilityHandler = () => {\n return e => {\n var _target;\n table.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nfunction _getVisibleLeafColumns(table, position) {\n return !position ? table.getVisibleLeafColumns() : position === 'center' ? table.getCenterVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();\n}\n\n//\n\nconst GlobalFaceting = {\n createTable: table => {\n table._getGlobalFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, '__global__');\n table.getGlobalFacetedRowModel = () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getGlobalFacetedRowModel();\n };\n table._getGlobalFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, '__global__');\n table.getGlobalFacetedUniqueValues = () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map();\n }\n return table._getGlobalFacetedUniqueValues();\n };\n table._getGlobalFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, '__global__');\n table.getGlobalFacetedMinMaxValues = () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return;\n }\n return table._getGlobalFacetedMinMaxValues();\n };\n }\n};\n\n//\n\nconst GlobalFiltering = {\n getInitialState: state => {\n return {\n globalFilter: undefined,\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n var _table$getCoreRowMode;\n const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null || (_table$getCoreRowMode = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode.getValue();\n return typeof value === 'string' || typeof value === 'number';\n }\n };\n },\n createColumn: (column, table) => {\n column.getCanGlobalFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2, _table$options$getCol;\n return ((_column$columnDef$ena = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGlobalFilter) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn;\n };\n },\n createTable: table => {\n table.getGlobalAutoFilterFn = () => {\n return filterFns.includesString;\n };\n table.getGlobalFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n const {\n globalFilterFn: globalFilterFn\n } = table.options;\n return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[globalFilterFn]) != null ? _table$options$filter : filterFns[globalFilterFn];\n };\n table.setGlobalFilter = updater => {\n table.options.onGlobalFilterChange == null || table.options.onGlobalFilterChange(updater);\n };\n table.resetGlobalFilter = defaultState => {\n table.setGlobalFilter(defaultState ? undefined : table.initialState.globalFilter);\n };\n }\n};\n\n//\n\nconst RowExpanding = {\n getInitialState: state => {\n return {\n expanded: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetExpanded = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetExpanded();\n queued = false;\n });\n }\n };\n table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);\n table.toggleAllRowsExpanded = expanded => {\n if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {\n table.setExpanded(true);\n } else {\n table.setExpanded({});\n }\n };\n table.resetExpanded = defaultState => {\n var _table$initialState$e, _table$initialState;\n table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});\n };\n table.getCanSomeRowsExpand = () => {\n return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());\n };\n table.getToggleAllRowsExpandedHandler = () => {\n return e => {\n e.persist == null || e.persist();\n table.toggleAllRowsExpanded();\n };\n };\n table.getIsSomeRowsExpanded = () => {\n const expanded = table.getState().expanded;\n return expanded === true || Object.values(expanded).some(Boolean);\n };\n table.getIsAllRowsExpanded = () => {\n const expanded = table.getState().expanded;\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true;\n }\n if (!Object.keys(expanded).length) {\n return false;\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n return false;\n }\n\n // They must all be expanded :shrug:\n return true;\n };\n table.getExpandedDepth = () => {\n let maxDepth = 0;\n const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);\n rowIds.forEach(id => {\n const splitId = id.split('.');\n maxDepth = Math.max(maxDepth, splitId.length);\n });\n return maxDepth;\n };\n table.getPreExpandedRowModel = () => table.getSortedRowModel();\n table.getExpandedRowModel = () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table);\n }\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel();\n }\n return table._getExpandedRowModel();\n };\n },\n createRow: (row, table) => {\n row.toggleExpanded = expanded => {\n table.setExpanded(old => {\n var _expanded;\n const exists = old === true ? true : !!(old != null && old[row.id]);\n let oldExpanded = {};\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true;\n });\n } else {\n oldExpanded = old;\n }\n expanded = (_expanded = expanded) != null ? _expanded : !exists;\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [row.id]: true\n };\n }\n if (exists && !expanded) {\n const {\n [row.id]: _,\n ...rest\n } = oldExpanded;\n return rest;\n }\n return old;\n });\n };\n row.getIsExpanded = () => {\n var _table$options$getIsR;\n const expanded = table.getState().expanded;\n return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n };\n row.getCanExpand = () => {\n var _table$options$getRow, _table$options$enable, _row$subRows;\n return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n row.getIsAllParentsExpanded = () => {\n let isFullyExpanded = true;\n let currentRow = row;\n while (isFullyExpanded && currentRow.parentId) {\n currentRow = table.getRow(currentRow.parentId, true);\n isFullyExpanded = currentRow.getIsExpanded();\n }\n return isFullyExpanded;\n };\n row.getToggleExpandedHandler = () => {\n const canExpand = row.getCanExpand();\n return () => {\n if (!canExpand) return;\n row.toggleExpanded();\n };\n };\n }\n};\n\n//\n\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\nconst getDefaultPaginationState = () => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize\n});\nconst RowPagination = {\n getInitialState: state => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...(state == null ? void 0 : state.pagination)\n }\n };\n },\n getDefaultOptions: table => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table)\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetPageIndex = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetPageIndex();\n queued = false;\n });\n }\n };\n table.setPagination = updater => {\n const safeUpdater = old => {\n let newState = functionalUpdate(updater, old);\n return newState;\n };\n return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);\n };\n table.resetPagination = defaultState => {\n var _table$initialState$p;\n table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());\n };\n table.setPageIndex = updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex);\n const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n return {\n ...old,\n pageIndex\n };\n });\n };\n table.resetPageIndex = defaultState => {\n var _table$initialState$p2, _table$initialState;\n table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);\n };\n table.resetPageSize = defaultState => {\n var _table$initialState$p3, _table$initialState2;\n table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);\n };\n table.setPageSize = updater => {\n table.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n const topRowIndex = old.pageSize * old.pageIndex;\n const pageIndex = Math.floor(topRowIndex / pageSize);\n return {\n ...old,\n pageIndex,\n pageSize\n };\n });\n };\n //deprecated\n table.setPageCount = updater => table.setPagination(old => {\n var _table$options$pageCo;\n let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount);\n }\n return {\n ...old,\n pageCount: newPageCount\n };\n });\n table.getPageOptions = memo(() => [table.getPageCount()], pageCount => {\n let pageOptions = [];\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n }\n return pageOptions;\n }, getMemoOptions(table.options, 'debugTable', 'getPageOptions'));\n table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;\n table.getCanNextPage = () => {\n const {\n pageIndex\n } = table.getState().pagination;\n const pageCount = table.getPageCount();\n if (pageCount === -1) {\n return true;\n }\n if (pageCount === 0) {\n return false;\n }\n return pageIndex < pageCount - 1;\n };\n table.previousPage = () => {\n return table.setPageIndex(old => old - 1);\n };\n table.nextPage = () => {\n return table.setPageIndex(old => {\n return old + 1;\n });\n };\n table.firstPage = () => {\n return table.setPageIndex(0);\n };\n table.lastPage = () => {\n return table.setPageIndex(table.getPageCount() - 1);\n };\n table.getPrePaginationRowModel = () => table.getExpandedRowModel();\n table.getPaginationRowModel = () => {\n if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {\n table._getPaginationRowModel = table.options.getPaginationRowModel(table);\n }\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel();\n }\n return table._getPaginationRowModel();\n };\n table.getPageCount = () => {\n var _table$options$pageCo2;\n return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);\n };\n table.getRowCount = () => {\n var _table$options$rowCou;\n return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;\n };\n }\n};\n\n//\n\nconst getDefaultRowPinningState = () => ({\n top: [],\n bottom: []\n});\nconst RowPinning = {\n getInitialState: state => {\n return {\n rowPinning: getDefaultRowPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowPinningChange: makeStateUpdater('rowPinning', table)\n };\n },\n createRow: (row, table) => {\n row.pin = (position, includeLeafRows, includeParentRows) => {\n const leafRowIds = includeLeafRows ? row.getLeafRows().map(_ref => {\n let {\n id\n } = _ref;\n return id;\n }) : [];\n const parentRowIds = includeParentRows ? row.getParentRows().map(_ref2 => {\n let {\n id\n } = _ref2;\n return id;\n }) : [];\n const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds]);\n table.setRowPinning(old => {\n var _old$top3, _old$bottom3;\n if (position === 'bottom') {\n var _old$top, _old$bottom;\n return {\n top: ((_old$top = old == null ? void 0 : old.top) != null ? _old$top : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: [...((_old$bottom = old == null ? void 0 : old.bottom) != null ? _old$bottom : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)]\n };\n }\n if (position === 'top') {\n var _old$top2, _old$bottom2;\n return {\n top: [...((_old$top2 = old == null ? void 0 : old.top) != null ? _old$top2 : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)],\n bottom: ((_old$bottom2 = old == null ? void 0 : old.bottom) != null ? _old$bottom2 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n }\n return {\n top: ((_old$top3 = old == null ? void 0 : old.top) != null ? _old$top3 : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: ((_old$bottom3 = old == null ? void 0 : old.bottom) != null ? _old$bottom3 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n });\n };\n row.getCanPin = () => {\n var _ref3;\n const {\n enableRowPinning,\n enablePinning\n } = table.options;\n if (typeof enableRowPinning === 'function') {\n return enableRowPinning(row);\n }\n return (_ref3 = enableRowPinning != null ? enableRowPinning : enablePinning) != null ? _ref3 : true;\n };\n row.getIsPinned = () => {\n const rowIds = [row.id];\n const {\n top,\n bottom\n } = table.getState().rowPinning;\n const isTop = rowIds.some(d => top == null ? void 0 : top.includes(d));\n const isBottom = rowIds.some(d => bottom == null ? void 0 : bottom.includes(d));\n return isTop ? 'top' : isBottom ? 'bottom' : false;\n };\n row.getPinnedIndex = () => {\n var _ref4, _visiblePinnedRowIds$;\n const position = row.getIsPinned();\n if (!position) return -1;\n const visiblePinnedRowIds = (_ref4 = position === 'top' ? table.getTopRows() : table.getBottomRows()) == null ? void 0 : _ref4.map(_ref5 => {\n let {\n id\n } = _ref5;\n return id;\n });\n return (_visiblePinnedRowIds$ = visiblePinnedRowIds == null ? void 0 : visiblePinnedRowIds.indexOf(row.id)) != null ? _visiblePinnedRowIds$ : -1;\n };\n },\n createTable: table => {\n table.setRowPinning = updater => table.options.onRowPinningChange == null ? void 0 : table.options.onRowPinningChange(updater);\n table.resetRowPinning = defaultState => {\n var _table$initialState$r, _table$initialState;\n return table.setRowPinning(defaultState ? getDefaultRowPinningState() : (_table$initialState$r = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.rowPinning) != null ? _table$initialState$r : getDefaultRowPinningState());\n };\n table.getIsSomeRowsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().rowPinning;\n if (!position) {\n var _pinningState$top, _pinningState$bottom;\n return Boolean(((_pinningState$top = pinningState.top) == null ? void 0 : _pinningState$top.length) || ((_pinningState$bottom = pinningState.bottom) == null ? void 0 : _pinningState$bottom.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n var _table$options$keepPi;\n const rows = ((_table$options$keepPi = table.options.keepPinnedRows) != null ? _table$options$keepPi : true) ?\n //get all rows that are pinned even if they would not be otherwise visible\n //account for expanded parent rows, but not pagination or filtering\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => {\n const row = table.getRow(rowId, true);\n return row.getIsAllParentsExpanded() ? row : null;\n }) :\n //else get only visible rows that are pinned\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => visibleRows.find(row => row.id === rowId));\n return rows.filter(Boolean).map(d => ({\n ...d,\n position\n }));\n };\n table.getTopRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top], (allRows, topPinnedRowIds) => table._getPinnedRows(allRows, topPinnedRowIds, 'top'), getMemoOptions(table.options, 'debugRows', 'getTopRows'));\n table.getBottomRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.bottom], (allRows, bottomPinnedRowIds) => table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'), getMemoOptions(table.options, 'debugRows', 'getBottomRows'));\n table.getCenterRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top, table.getState().rowPinning.bottom], (allRows, top, bottom) => {\n const topAndBottom = new Set([...(top != null ? top : []), ...(bottom != null ? bottom : [])]);\n return allRows.filter(d => !topAndBottom.has(d.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterRows'));\n }\n};\n\n//\n\nconst RowSelection = {\n getInitialState: state => {\n return {\n rowSelection: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n };\n },\n createTable: table => {\n table.setRowSelection = updater => table.options.onRowSelectionChange == null ? void 0 : table.options.onRowSelectionChange(updater);\n table.resetRowSelection = defaultState => {\n var _table$initialState$r;\n return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {});\n };\n table.toggleAllRowsSelected = value => {\n table.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected();\n const rowSelection = {\n ...old\n };\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n if (!row.getCanSelect()) {\n return;\n }\n rowSelection[row.id] = true;\n });\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id];\n });\n }\n return rowSelection;\n });\n };\n table.toggleAllPageRowsSelected = value => table.setRowSelection(old => {\n const resolvedValue = typeof value !== 'undefined' ? value : !table.getIsAllPageRowsSelected();\n const rowSelection = {\n ...old\n };\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table);\n });\n return rowSelection;\n });\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // table.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // table.setRowSelection(selectedRowIds)\n // },\n table.getPreSelectedRowModel = () => table.getCoreRowModel();\n table.getSelectedRowModel = memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel'));\n table.getFilteredSelectedRowModel = memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel'));\n table.getGroupedSelectedRowModel = memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel'));\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n table.getIsAllRowsSelected = () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n const {\n rowSelection\n } = table.getState();\n let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n if (isAllRowsSelected) {\n if (preGroupedFlatRows.some(row => row.getCanSelect() && !rowSelection[row.id])) {\n isAllRowsSelected = false;\n }\n }\n return isAllRowsSelected;\n };\n table.getIsAllPageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows.filter(row => row.getCanSelect());\n const {\n rowSelection\n } = table.getState();\n let isAllPageRowsSelected = !!paginationFlatRows.length;\n if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n isAllPageRowsSelected = false;\n }\n return isAllPageRowsSelected;\n };\n table.getIsSomeRowsSelected = () => {\n var _table$getState$rowSe;\n const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length;\n return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length;\n };\n table.getIsSomePageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows;\n return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.filter(row => row.getCanSelect()).some(d => d.getIsSelected() || d.getIsSomeSelected());\n };\n table.getToggleAllRowsSelectedHandler = () => {\n return e => {\n table.toggleAllRowsSelected(e.target.checked);\n };\n };\n table.getToggleAllPageRowsSelectedHandler = () => {\n return e => {\n table.toggleAllPageRowsSelected(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row.toggleSelected = (value, opts) => {\n const isSelected = row.getIsSelected();\n table.setRowSelection(old => {\n var _opts$selectChildren;\n value = typeof value !== 'undefined' ? value : !isSelected;\n if (row.getCanSelect() && isSelected === value) {\n return old;\n }\n const selectedRowIds = {\n ...old\n };\n mutateRowIsSelected(selectedRowIds, row.id, value, (_opts$selectChildren = opts == null ? void 0 : opts.selectChildren) != null ? _opts$selectChildren : true, table);\n return selectedRowIds;\n });\n };\n row.getIsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isRowSelected(row, rowSelection);\n };\n row.getIsSomeSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'some';\n };\n row.getIsAllSubRowsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'all';\n };\n row.getCanSelect = () => {\n var _table$options$enable;\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row);\n }\n return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true;\n };\n row.getCanSelectSubRows = () => {\n var _table$options$enable2;\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row);\n }\n return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true;\n };\n row.getCanMultiSelect = () => {\n var _table$options$enable3;\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row);\n }\n return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true;\n };\n row.getToggleSelectedHandler = () => {\n const canSelect = row.getCanSelect();\n return e => {\n var _target;\n if (!canSelect) return;\n row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nconst mutateRowIsSelected = (selectedRowIds, id, value, includeChildren, table) => {\n var _row$subRows;\n const row = table.getRow(id, true);\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key]);\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true;\n }\n } else {\n delete selectedRowIds[id];\n }\n // }\n\n if (includeChildren && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table));\n }\n};\nfunction selectRowsFn(table, rowModel) {\n const rowSelection = table.getState().rowSelection;\n const newSelectedFlatRows = [];\n const newSelectedRowsById = {};\n\n // Filters top level and nested rows\n const recurseRows = function (rows, depth) {\n return rows.map(row => {\n var _row$subRows2;\n const isSelected = isRowSelected(row, rowSelection);\n if (isSelected) {\n newSelectedFlatRows.push(row);\n newSelectedRowsById[row.id] = row;\n }\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows)\n };\n }\n if (isSelected) {\n return row;\n }\n }).filter(Boolean);\n };\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById\n };\n}\nfunction isRowSelected(row, selection) {\n var _selection$row$id;\n return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false;\n}\nfunction isSubRowSelected(row, selection, table) {\n var _row$subRows3;\n if (!((_row$subRows3 = row.subRows) != null && _row$subRows3.length)) return false;\n let allChildrenSelected = true;\n let someSelected = false;\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return;\n }\n if (subRow.getCanSelect()) {\n if (isRowSelected(subRow, selection)) {\n someSelected = true;\n } else {\n allChildrenSelected = false;\n }\n }\n\n // Check row selection of nested subrows\n if (subRow.subRows && subRow.subRows.length) {\n const subRowChildrenSelected = isSubRowSelected(subRow, selection);\n if (subRowChildrenSelected === 'all') {\n someSelected = true;\n } else if (subRowChildrenSelected === 'some') {\n someSelected = true;\n allChildrenSelected = false;\n } else {\n allChildrenSelected = false;\n }\n }\n });\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst alphanumeric = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\nconst alphanumericCaseSensitive = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\nconst datetime = (rowA, rowB, columnId) => {\n const a = rowA.getValue(columnId);\n const b = rowB.getValue(columnId);\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0;\n};\nconst basic = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n};\n\n// Utils\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return '';\n }\n return String(a);\n }\n if (typeof a === 'string') {\n return a;\n }\n return '';\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr, bStr) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n // While\n while (a.length && b.length) {\n const aa = a.shift();\n const bb = b.shift();\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n const combo = [an, bn].sort();\n\n // Both are string\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1;\n }\n if (bb > aa) {\n return -1;\n }\n continue;\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1;\n }\n\n // Both are numbers\n if (an > bn) {\n return 1;\n }\n if (bn > an) {\n return -1;\n }\n }\n return a.length - b.length;\n}\n\n// Exports\n\nconst sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic\n};\n\n//\n\nconst RowSorting = {\n getInitialState: state => {\n return {\n sorting: [],\n ...state\n };\n },\n getDefaultColumnDef: () => {\n return {\n sortingFn: 'auto',\n sortUndefined: 1\n };\n },\n getDefaultOptions: table => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: e => {\n return e.shiftKey;\n }\n };\n },\n createColumn: (column, table) => {\n column.getAutoSortingFn = () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10);\n let isString = false;\n for (const row of firstRows) {\n const value = row == null ? void 0 : row.getValue(column.id);\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime;\n }\n if (typeof value === 'string') {\n isString = true;\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric;\n }\n }\n }\n if (isString) {\n return sortingFns.text;\n }\n return sortingFns.basic;\n };\n column.getAutoSortDir = () => {\n const firstRow = table.getFilteredRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return 'asc';\n }\n return 'desc';\n };\n column.getSortingFn = () => {\n var _table$options$sortin, _table$options$sortin2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === 'auto' ? column.getAutoSortingFn() : (_table$options$sortin = (_table$options$sortin2 = table.options.sortingFns) == null ? void 0 : _table$options$sortin2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn];\n };\n column.toggleSorting = (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder();\n const hasManualValue = typeof desc !== 'undefined' && desc !== null;\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n let newSorting = [];\n\n // What should we do with this sort action?\n let sortAction;\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc';\n\n // Multi-mode\n if (old != null && old.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'add';\n }\n } else {\n // Normal mode\n if (old != null && old.length && existingIndex !== old.length - 1) {\n sortAction = 'replace';\n } else if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'replace';\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove';\n }\n }\n }\n if (sortAction === 'add') {\n var _table$options$maxMul;\n newSorting = [...old, {\n id: column.id,\n desc: nextDesc\n }];\n // Take latest n columns\n newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc\n };\n }\n return d;\n });\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id);\n } else {\n newSorting = [{\n id: column.id,\n desc: nextDesc\n }];\n }\n return newSorting;\n });\n };\n column.getFirstSortDir = () => {\n var _ref, _column$columnDef$sor;\n const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';\n return sortDescFirst ? 'desc' : 'asc';\n };\n column.getNextSortingOrder = multi => {\n var _table$options$enable, _table$options$enable2;\n const firstSortDirection = column.getFirstSortDir();\n const isSorted = column.getIsSorted();\n if (!isSorted) {\n return firstSortDirection;\n }\n if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (\n // If enableSortRemove, enable in general\n multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false;\n }\n return isSorted === 'desc' ? 'asc' : 'desc';\n };\n column.getCanSort = () => {\n var _column$columnDef$ena, _table$options$enable3;\n return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn;\n };\n column.getCanMultiSort = () => {\n var _ref2, _column$columnDef$ena2;\n return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn;\n };\n column.getIsSorted = () => {\n var _table$getState$sorti;\n const columnSort = (_table$getState$sorti = table.getState().sorting) == null ? void 0 : _table$getState$sorti.find(d => d.id === column.id);\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n };\n column.getSortIndex = () => {\n var _table$getState$sorti2, _table$getState$sorti3;\n return (_table$getState$sorti2 = (_table$getState$sorti3 = table.getState().sorting) == null ? void 0 : _table$getState$sorti3.findIndex(d => d.id === column.id)) != null ? _table$getState$sorti2 : -1;\n };\n column.clearSorting = () => {\n //clear sorting for just 1 column\n table.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n };\n column.getToggleSortingHandler = () => {\n const canSort = column.getCanSort();\n return e => {\n if (!canSort) return;\n e.persist == null || e.persist();\n column.toggleSorting == null || column.toggleSorting(undefined, column.getCanMultiSort() ? table.options.isMultiSortEvent == null ? void 0 : table.options.isMultiSortEvent(e) : false);\n };\n };\n },\n createTable: table => {\n table.setSorting = updater => table.options.onSortingChange == null ? void 0 : table.options.onSortingChange(updater);\n table.resetSorting = defaultState => {\n var _table$initialState$s, _table$initialState;\n table.setSorting(defaultState ? [] : (_table$initialState$s = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.sorting) != null ? _table$initialState$s : []);\n };\n table.getPreSortedRowModel = () => table.getGroupedRowModel();\n table.getSortedRowModel = () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table);\n }\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel();\n }\n return table._getSortedRowModel();\n };\n }\n};\n\nconst builtInFeatures = [Headers, ColumnVisibility, ColumnOrdering, ColumnPinning, ColumnFaceting, ColumnFiltering, GlobalFaceting,\n//depends on ColumnFaceting\nGlobalFiltering,\n//depends on ColumnFiltering\nRowSorting, ColumnGrouping,\n//depends on RowSorting\nRowExpanding, RowPagination, RowPinning, RowSelection, ColumnSizing];\n\n//\n\nfunction createTable(options) {\n var _options$_features, _options$initialState;\n if (process.env.NODE_ENV !== 'production' && (options.debugAll || options.debugTable)) {\n console.info('Creating Table Instance...');\n }\n const _features = [...builtInFeatures, ...((_options$_features = options._features) != null ? _options$_features : [])];\n let table = {\n _features\n };\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(table));\n }, {});\n const mergeOptions = options => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options);\n }\n return {\n ...defaultOptions,\n ...options\n };\n };\n const coreInitialState = {};\n let initialState = {\n ...coreInitialState,\n ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n };\n table._features.forEach(feature => {\n var _feature$getInitialSt;\n initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n });\n const queued = [];\n let queuedTimeout = false;\n const coreInstance = {\n _features,\n options: {\n ...defaultOptions,\n ...options\n },\n initialState,\n _queue: cb => {\n queued.push(cb);\n if (!queuedTimeout) {\n queuedTimeout = true;\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve().then(() => {\n while (queued.length) {\n queued.shift()();\n }\n queuedTimeout = false;\n }).catch(error => setTimeout(() => {\n throw error;\n }));\n }\n },\n reset: () => {\n table.setState(table.initialState);\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options);\n table.options = mergeOptions(newOptions);\n },\n getState: () => {\n return table.options.state;\n },\n setState: updater => {\n table.options.onStateChange == null || table.options.onStateChange(updater);\n },\n _getRowId: (row, index, parent) => {\n var _table$options$getRow;\n return (_table$options$getRow = table.options.getRowId == null ? void 0 : table.options.getRowId(row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join('.') : index}`;\n },\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table);\n }\n return table._getCoreRowModel();\n },\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return table.getPaginationRowModel();\n },\n //in next version, we should just pass in the row model as the optional 2nd arg\n getRow: (id, searchAll) => {\n let row = (searchAll ? table.getPrePaginationRowModel() : table.getRowModel()).rowsById[id];\n if (!row) {\n row = table.getCoreRowModel().rowsById[id];\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow could not find row with ID: ${id}`);\n }\n throw new Error();\n }\n }\n return row;\n },\n _getDefaultColumnDef: memo(() => [table.options.defaultColumn], defaultColumn => {\n var _defaultColumn;\n defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n return {\n header: props => {\n const resolvedColumnDef = props.header.column.columnDef;\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey;\n }\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id;\n }\n return null;\n },\n // footer: props => props.header.column.id,\n cell: props => {\n var _props$renderValue$to, _props$renderValue;\n return (_props$renderValue$to = (_props$renderValue = props.renderValue()) == null || _props$renderValue.toString == null ? void 0 : _props$renderValue.toString()) != null ? _props$renderValue$to : null;\n },\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());\n }, {}),\n ...defaultColumn\n };\n }, getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')),\n _getColumnDefs: () => table.options.columns,\n getAllColumns: memo(() => [table._getColumnDefs()], columnDefs => {\n const recurseColumns = function (columnDefs, parent, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent);\n const groupingColumnDef = columnDef;\n column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : [];\n return column;\n });\n };\n return recurseColumns(columnDefs);\n }, getMemoOptions(options, 'debugColumns', 'getAllColumns')),\n getAllFlatColumns: memo(() => [table.getAllColumns()], allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns();\n });\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')),\n _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column;\n return acc;\n }, {});\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')),\n getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }, getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')),\n getColumn: columnId => {\n const column = table._getAllFlatColumnsById()[columnId];\n if (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`);\n }\n return column;\n }\n };\n Object.assign(table, coreInstance);\n for (let index = 0; index < table._features.length; index++) {\n const feature = table._features[index];\n feature == null || feature.createTable == null || feature.createTable(table);\n }\n return table;\n}\n\nfunction getCoreRowModel() {\n return table => memo(() => [table.options.data], data => {\n const rowModel = {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n const accessRows = function (originalRows, depth, parentRow) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\n // if (!id) {\n // if (process.env.NODE_ENV !== 'production') {\n // throw new Error(`getRowId expected an ID, but got ${id}`)\n // }\n // }\n\n // Make the row\n const row = createRow(table, table._getRowId(originalRows[i], i, parentRow), originalRows[i], i, depth, undefined, parentRow == null ? void 0 : parentRow.id);\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row);\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row;\n // Push table row into parent\n rows.push(row);\n\n // Get the original subrows\n if (table.options.getSubRows) {\n var _row$originalSubRows;\n row.originalSubRows = table.options.getSubRows(originalRows[i], i);\n\n // Then recursively access them\n if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row);\n }\n }\n }\n return rows;\n };\n rowModel.rows = accessRows(data);\n return rowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getExpandedRowModel() {\n return table => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n return rowModel;\n }\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel;\n }\n return expandRows(rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel'));\n}\nfunction expandRows(rowModel) {\n const expandedRows = [];\n const handleRow = row => {\n var _row$subRows;\n expandedRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow);\n }\n };\n rowModel.rows.forEach(handleRow);\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById\n };\n}\n\nfunction getFacetedMinMaxValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return undefined;\n const uniqueValues = facetedRowModel.flatRows.flatMap(flatRow => {\n var _flatRow$getUniqueVal;\n return (_flatRow$getUniqueVal = flatRow.getUniqueValues(columnId)) != null ? _flatRow$getUniqueVal : [];\n }).map(Number).filter(value => !Number.isNaN(value));\n if (!uniqueValues.length) return;\n let facetedMinValue = uniqueValues[0];\n let facetedMaxValue = uniqueValues[uniqueValues.length - 1];\n for (const value of uniqueValues) {\n if (value < facetedMinValue) facetedMinValue = value;else if (value > facetedMaxValue) facetedMaxValue = value;\n }\n return [facetedMinValue, facetedMaxValue];\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues'));\n}\n\nfunction filterRows(rows, filterRowImpl, table) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table);\n }\n return filterRowModelFromRoot(rows, filterRowImpl, table);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, table) {\n var _table$options$maxLea;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea : 100;\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n var _row$subRows;\n let row = rowsToFilter[i];\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.columnFilters = row.columnFilters;\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n } else {\n row = newRow;\n if (filterRow(row)) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n }\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, table) {\n var _table$options$maxLea2;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea2 = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea2 : 100;\n\n // Filters top level and nested rows\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n // Filter from parents downward first\n\n const rows = [];\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i];\n const pass = filterRow(row);\n if (pass) {\n var _row$subRows2;\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length && depth < maxDepth) {\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n }\n rows.push(row);\n newFilteredFlatRows.push(row);\n newFilteredRowsById[row.id] = row;\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\n\nfunction getFacetedRowModel() {\n return (table, columnId) => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n return preRowModel;\n }\n const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n return filterRows(preRowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel'));\n}\n\nfunction getFacetedUniqueValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return new Map();\n let facetedUniqueValues = new Map();\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values = facetedRowModel.flatRows[i].getUniqueValues(columnId);\n for (let j = 0; j < values.length; j++) {\n const value = values[j];\n if (facetedUniqueValues.has(value)) {\n var _facetedUniqueValues$;\n facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n } else {\n facetedUniqueValues.set(value, 1);\n }\n }\n }\n return facetedUniqueValues;\n }, getMemoOptions(table.options, 'debugTable', `getFacetedUniqueValues_${columnId}`));\n}\n\nfunction getFilteredRowModel() {\n return table => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i].columnFilters = {};\n rowModel.flatRows[i].columnFiltersMeta = {};\n }\n return rowModel;\n }\n const resolvedColumnFilters = [];\n const resolvedGlobalFilters = [];\n (columnFilters != null ? columnFilters : []).forEach(d => {\n var _filterFn$resolveFilt;\n const column = table.getColumn(d.id);\n if (!column) {\n return;\n }\n const filterFn = column.getFilterFn();\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`);\n }\n return;\n }\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n });\n });\n const filterableIds = (columnFilters != null ? columnFilters : []).map(d => d.id);\n const globalFilterFn = table.getGlobalFilterFn();\n const globallyFilterableColumns = table.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n filterableIds.push('__global__');\n globallyFilterableColumns.forEach(column => {\n var _globalFilterFn$resol;\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n });\n });\n }\n let currentColumnFilter;\n let currentGlobalFilter;\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j];\n row.columnFilters = {};\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i];\n const id = currentColumnFilter.id;\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(row, id, currentColumnFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n });\n }\n }\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i];\n const id = currentGlobalFilter.id;\n // Tag the row with the first truthy global filter state\n if (currentGlobalFilter.filterFn(row, id, currentGlobalFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n })) {\n row.columnFilters.__global__ = true;\n break;\n }\n }\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false;\n }\n }\n }\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getGroupedRowModel() {\n return table => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n rowModel.rows.forEach(row => {\n row.depth = 0;\n row.parentId = undefined;\n });\n return rowModel;\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId => table.getColumn(columnId));\n const groupedFlatRows = [];\n const groupedRowsById = {};\n // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n // Recursively group the data\n const groupUpRecursively = function (rows, depth, parentId) {\n if (depth === void 0) {\n depth = 0;\n }\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth;\n groupedFlatRows.push(row);\n groupedRowsById[row.id] = row;\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id);\n }\n return row;\n });\n }\n const columnId = existingGrouping[depth];\n\n // Group the rows together for this level\n const rowGroupsMap = groupBy(rows, columnId);\n\n // Perform aggregations for each group\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n let [groupingValue, groupedRows] = _ref;\n let id = `${columnId}:${groupingValue}`;\n id = parentId ? `${parentId}>${id}` : id;\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id);\n subRows.forEach(subRow => {\n subRow.parentId = id;\n });\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n const row = createRow(table, id, leafRows[0].original, index, depth, undefined, parentId);\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: columnId => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(columnId)) {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n if (groupedRows[0]) {\n var _groupedRows$0$getVal;\n row._valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n }\n return row._valuesCache[columnId];\n }\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId);\n const aggregateFn = column == null ? void 0 : column.getAggregationFn();\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);\n return row._groupingValuesCache[columnId];\n }\n }\n });\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return row;\n });\n return aggregatedGroupedRows;\n };\n const groupedRows = groupUpRecursively(rowModel.rows, 0);\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n table._queue(() => {\n table._autoResetExpanded();\n table._autoResetPageIndex();\n });\n }));\n}\nfunction groupBy(rows, columnId) {\n const groupMap = new Map();\n return rows.reduce((map, row) => {\n const resKey = `${row.getGroupingValue(columnId)}`;\n const previous = map.get(resKey);\n if (!previous) {\n map.set(resKey, [row]);\n } else {\n previous.push(row);\n }\n return map;\n }, groupMap);\n}\n\nfunction getPaginationRowModel(opts) {\n return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel;\n }\n const {\n pageSize,\n pageIndex\n } = pagination;\n let {\n rows,\n flatRows,\n rowsById\n } = rowModel;\n const pageStart = pageSize * pageIndex;\n const pageEnd = pageStart + pageSize;\n rows = rows.slice(pageStart, pageEnd);\n let paginatedRowModel;\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById\n });\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById\n };\n }\n paginatedRowModel.flatRows = [];\n const handleRow = row => {\n paginatedRowModel.flatRows.push(row);\n if (row.subRows.length) {\n row.subRows.forEach(handleRow);\n }\n };\n paginatedRowModel.rows.forEach(handleRow);\n return paginatedRowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));\n}\n\nfunction getSortedRowModel() {\n return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {\n if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n return rowModel;\n }\n const sortingState = table.getState().sorting;\n const sortedFlatRows = [];\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort => {\n var _table$getColumn;\n return (_table$getColumn = table.getColumn(sort.id)) == null ? void 0 : _table$getColumn.getCanSort();\n });\n const columnInfoById = {};\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id);\n if (!column) return;\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn()\n };\n });\n const sortData = rows => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.map(row => ({\n ...row\n }));\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n var _sortEntry$desc;\n const sortEntry = availableSorting[i];\n const columnInfo = columnInfoById[sortEntry.id];\n const sortUndefined = columnInfo.sortUndefined;\n const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n let sortInt = 0;\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id);\n const bValue = rowB.getValue(sortEntry.id);\n const aUndefined = aValue === undefined;\n const bUndefined = bValue === undefined;\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1;\n if (sortUndefined === 'last') return aUndefined ? 1 : -1;\n sortInt = aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;\n }\n }\n if (sortInt === 0) {\n sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n }\n\n // If sorting is non-zero, take care of desc and inversion\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1;\n }\n if (columnInfo.invertSorting) {\n sortInt *= -1;\n }\n return sortInt;\n }\n }\n return rowA.index - rowB.index;\n });\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n var _row$subRows;\n sortedFlatRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n row.subRows = sortData(row.subRows);\n }\n });\n return sortedData;\n };\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () => table._autoResetPageIndex()));\n}\n\nexport { ColumnFaceting, ColumnFiltering, ColumnGrouping, ColumnOrdering, ColumnPinning, ColumnSizing, ColumnVisibility, GlobalFaceting, GlobalFiltering, Headers, RowExpanding, RowPagination, RowPinning, RowSelection, RowSorting, _getVisibleLeafColumns, aggregationFns, buildHeaderGroups, createCell, createColumn, createColumnHelper, createRow, createTable, defaultColumnSizing, expandRows, filterFns, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getMemoOptions, getPaginationRowModel, getSortedRowModel, isFunction, isNumberArray, isRowSelected, isSubRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, reSplitAlphaNumeric, selectRowsFn, shouldAutoRemoveFilter, sortingFns };\n//# sourceMappingURL=index.mjs.map\n","/**\n * react-table\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { createTable } from '@tanstack/table-core';\nexport * from '@tanstack/table-core';\n\n//\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n */\nfunction flexRender(Comp, props) {\n return !Comp ? null : isReactComponent(Comp) ? /*#__PURE__*/React.createElement(Comp, props) : Comp;\n}\nfunction isReactComponent(component) {\n return isClassComponent(component) || typeof component === 'function' || isExoticComponent(component);\n}\nfunction isClassComponent(component) {\n return typeof component === 'function' && (() => {\n const proto = Object.getPrototypeOf(component);\n return proto.prototype && proto.prototype.isReactComponent;\n })();\n}\nfunction isExoticComponent(component) {\n return typeof component === 'object' && typeof component.$$typeof === 'symbol' && ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description);\n}\nfunction useReactTable(options) {\n // Compose in the generic options to the user options\n const resolvedOptions = {\n state: {},\n // Dummy state\n onStateChange: () => {},\n // noop\n renderFallbackValue: null,\n ...options\n };\n\n // Create a new table and store it in state\n const [tableRef] = React.useState(() => ({\n current: createTable(resolvedOptions)\n }));\n\n // By default, manage table state here using the table's initial state\n const [state, setState] = React.useState(() => tableRef.current.initialState);\n\n // Compose the default state above with any user state. This will allow the user\n // to only control a subset of the state if desired.\n tableRef.current.setOptions(prev => ({\n ...prev,\n ...options,\n state: {\n ...state,\n ...options.state\n },\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n setState(updater);\n options.onStateChange == null || options.onStateChange(updater);\n }\n }));\n return tableRef.current;\n}\n\nexport { flexRender, useReactTable };\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\n\nimport { cn } from \"@shared/lib/utils\"\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"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))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n 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))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n 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))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n // Atlas design-system header contract, enforced at the primitive\n // so every table (ProDataTable, DataTable, DataReviewTable, any\n // new consumer) renders headers consistently without re-stating\n // the rule:\n //\n // Size — `text-body-sm` → `--text-body-sm` (0.8125rem / 13px)\n // Weight — `font-semibold` (not `font-medium` — insufficient\n // contrast against 14px `font-normal` primary body\n // cells once sizes sit one step apart)\n // Color — `text-black-70` (hierarchy vs. `text-black-90` body)\n //\n // Rationale: primary cells are 14px `text-sm`, so headers sit\n // ONE notch below at 13px with bolder weight + lighter color\n // carrying the remaining distinction. Consumers that need a\n // different size/weight can still pass `className` — tailwind-merge\n // resolves the conflict in favor of the later class.\n className={cn(\n \"h-10 px-2 text-left align-middle text-body-sm font-semibold text-black-70 [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n 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))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@shared/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n // No drop shadows on any variant — modern shadcn direction, and\n // consistent with the rest of Atlas's form/toolbar primitives.\n // Affordance comes from bg + border + focus ring (keyboard),\n // not elevation.\n default:\n \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n xs: \"h-6 rounded-md px-2 text-xs [&_svg]:size-3\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n \"icon-xs\": \"h-6 w-6 [&_svg]:size-3\",\n \"icon-sm\": \"h-7 w-7 [&_svg]:size-3.5\",\n \"icon-lg\": \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import { useState } from 'react'\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getPaginationRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type PaginationState,\n type Row,\n} from '@tanstack/react-table'\nimport { ArrowUp, ArrowDown } from 'lucide-react'\nimport { cn } from '@shared/lib/utils'\nimport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from './table'\nimport { Button } from './button'\n\ninterface DataTableProps<T> {\n columns: ColumnDef<T, unknown>[]\n data: T[]\n pageSize?: number\n defaultSort?: SortingState\n emptyMessage?: string\n onRowClick?: (row: T) => void\n rowClassName?: (row: Row<T>) => string | undefined\n className?: string\n}\n\nexport function DataTable<T>({\n columns,\n data,\n pageSize = 50,\n defaultSort,\n emptyMessage = 'No data',\n onRowClick,\n rowClassName,\n className,\n}: DataTableProps<T>) {\n const [sorting, setSorting] = useState<SortingState>(defaultSort ?? [])\n const [pagination, setPagination] = useState<PaginationState>({ pageIndex: 0, pageSize })\n\n const table = useReactTable({\n data,\n columns,\n state: { sorting, pagination },\n onSortingChange: setSorting,\n onPaginationChange: setPagination,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n })\n\n return (\n <div data-slot=\"data-table\" className={cn('rounded-md border', className)}>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((hg) => (\n <TableRow key={hg.id}>\n {hg.headers.map((header) => (\n <TableHead\n key={header.id}\n className=\"cursor-pointer select-none\"\n style={header.column.columnDef.size ? { width: header.column.columnDef.size } : undefined}\n onClick={header.column.getToggleSortingHandler()}\n >\n <span className=\"flex items-center gap-1\">\n {flexRender(header.column.columnDef.header, header.getContext())}\n {{\n asc: <ArrowUp className=\"size-3\" />,\n desc: <ArrowDown className=\"size-3\" />,\n }[header.column.getIsSorted() as string] ?? null}\n </span>\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n className={cn(\n onRowClick && 'cursor-pointer',\n rowClassName?.(row),\n )}\n onClick={() => onRowClick?.(row.original)}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))}\n {!data.length && (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"h-24 text-center text-muted-foreground\">\n {emptyMessage}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n {data.length > pagination.pageSize && (\n <div className=\"flex items-center justify-between border-t px-4 py-2\">\n <span className=\"text-xs text-muted-foreground\">\n {pagination.pageIndex * pagination.pageSize + 1}–{Math.min((pagination.pageIndex + 1) * pagination.pageSize, data.length)} of {data.length}\n </span>\n <div className=\"flex items-center gap-1.5\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n Previous\n </Button>\n <span className=\"px-1.5 text-xs tabular-nums text-muted-foreground\">\n {pagination.pageIndex + 1} / {table.getPageCount()}\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n Next\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport type { ColumnDef, SortingState, Row }\n","import { cn } from '@shared/lib/utils'\n\ninterface DotLabelProps {\n color: string\n children: string\n bold?: boolean\n className?: string\n}\n\nexport function DotLabel({ color, children, bold = true, className }: DotLabelProps) {\n return (\n <span data-slot=\"dot-label\" className={cn('inline-flex items-center gap-2', className)}>\n <span\n className=\"h-2.5 w-2.5 shrink-0 rounded-full\"\n style={{ backgroundColor: color }}\n />\n <span className={cn(bold ? 'font-medium text-slate-800' : 'text-slate-600')}>\n {children}\n </span>\n </span>\n )\n}\n","import { cn } from '@shared/lib/utils'\nimport { Spinner } from './spinner'\n\ninterface ContentLoadingStateProps {\n className?: string\n}\n\n/**\n * Full content-area loading indicator. Use when an entire tab or page section\n * is waiting for data. Renders a centered large spinner with a consistent\n * fade-in animation so loading → content transitions feel smooth.\n */\nfunction ContentLoadingState({ className }: ContentLoadingStateProps) {\n return (\n <div\n data-slot=\"content-loading\"\n className={cn(\n 'flex h-full min-h-64 flex-1 items-center justify-center animate-in fade-in duration-300',\n className,\n )}\n >\n <Spinner size=\"lg\" />\n </div>\n )\n}\n\ninterface SectionLoadingStateProps {\n className?: string\n size?: 'sm' | 'default'\n label?: string\n}\n\n/**\n * Inline section loading indicator. Use inside cards, chart areas, sidebar\n * panels, or any bounded region that loads independently of the page chrome.\n */\nfunction SectionLoadingState({ className, size = 'sm', label }: SectionLoadingStateProps) {\n return (\n <div\n data-slot=\"section-loading\"\n className={cn(\n 'flex items-center justify-center animate-in fade-in duration-200',\n className,\n )}\n >\n <div className=\"flex flex-col items-center gap-2\">\n <Spinner size={size} />\n {label && (\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n )}\n </div>\n </div>\n )\n}\n\ninterface EmptyStateProps {\n icon?: React.ReactNode\n message: string\n detail?: string\n className?: string\n}\n\n/**\n * Consistent empty-state placeholder for tables and content areas.\n */\nfunction EmptyState({ icon, message, detail, className }: EmptyStateProps) {\n return (\n <div\n data-slot=\"empty-state\"\n className={cn('flex flex-col items-center justify-center py-10 text-center', className)}\n >\n {icon && <div className=\"mb-2 text-muted-foreground/50\">{icon}</div>}\n <p className=\"text-sm text-muted-foreground\">{message}</p>\n {detail && <p className=\"mt-1 text-xs text-muted-foreground\">{detail}</p>}\n </div>\n )\n}\n\nexport { ContentLoadingState, SectionLoadingState, EmptyState }\nexport type { ContentLoadingStateProps, SectionLoadingStateProps, EmptyStateProps }\n","import { useState, useEffect } from 'react'\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getPaginationRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n} from '@tanstack/react-table'\nimport { IconArrowUp, IconArrowDown, IconChevronLeft, IconChevronRight } from '@tabler/icons-react'\nimport { formatCurrency } from '@shared/lib/format'\nimport { EmptyState } from './loading-state'\n\n// ── Heat color utility ──────────────────────────────────────────────\n\n/**\n * Maps a numeric value within [min, max] to a warm green→amber background.\n * Returns `undefined` for zero / degenerate ranges so the caller can skip styling.\n */\nfunction heatColor(value: number, min: number, max: number): string | undefined {\n if (value <= 0 || max === min) return undefined\n const norm = (value - min) / (max - min)\n let r: number, g: number, b: number\n if (norm <= 0.5) {\n r = Math.round(198 + (245 - 198) * (norm * 2))\n g = Math.round(228 + (238 - 228) * (norm * 2))\n b = Math.round(199 + (245 - 199) * (norm * 2))\n } else {\n r = Math.round(245 + (240 - 245) * ((norm - 0.5) * 2))\n g = Math.round(238 + (190 - 238) * ((norm - 0.5) * 2))\n b = Math.round(195 + (190 - 195) * ((norm - 0.5) * 2))\n }\n return `rgb(${r},${g},${b})`\n}\n\n// ── Sortable header ─────────────────────────────────────────────────\n\nfunction SortableHeader({ column, children }: { column: any; children: React.ReactNode }) {\n const sorted = column.getIsSorted()\n return (\n <button\n className=\"flex items-center gap-1 text-xs font-medium uppercase tracking-wide text-muted-foreground transition-colors hover:text-muted-foreground\"\n onClick={column.getToggleSortingHandler()}\n >\n {children}\n {sorted === 'asc' && <IconArrowUp size={12} className=\"text-foreground\" />}\n {sorted === 'desc' && <IconArrowDown size={12} className=\"text-foreground\" />}\n </button>\n )\n}\n\n// ── HeatmapTable ────────────────────────────────────────────────────\n\ninterface HeatmapTableProps<T> {\n data: T[]\n columns: ColumnDef<T>[]\n pageSize?: number\n defaultSort?: SortingState\n onRowClick?: (row: T) => void\n /** Label used in pagination (\"1–10 of 42 {entityLabel}\") and empty state. */\n entityLabel?: string\n className?: string\n}\n\n/**\n * Sortable, paginated table with heat-colored numeric cells.\n *\n * Pair with `buildPeriodColumns` and `buildTotalColumn` for time-series\n * data, or supply your own `ColumnDef` array for any tabular layout.\n */\nfunction HeatmapTable<T>({\n data,\n columns,\n pageSize = 10,\n defaultSort = [{ id: 'total', desc: true }],\n onRowClick,\n entityLabel = 'items',\n className,\n}: HeatmapTableProps<T>) {\n const [sorting, setSorting] = useState<SortingState>(defaultSort)\n const [pagination, setPagination] = useState({ pageIndex: 0, pageSize })\n\n const defaultSortKey = defaultSort.map((s) => `${s.id}:${s.desc}`).join(',')\n useEffect(() => { setSorting(defaultSort) }, [defaultSortKey])\n\n const table = useReactTable({\n data,\n columns,\n state: { sorting, pagination },\n onSortingChange: setSorting,\n onPaginationChange: setPagination,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n })\n\n const pageIndex = table.getState().pagination.pageIndex\n const pageCount = table.getPageCount()\n\n return (\n <div data-slot=\"heatmap-table\" className={className}>\n <div className=\"overflow-auto rounded-xl bg-background shadow-sm ring-1 ring-border/60\">\n <table className=\"w-full text-sm\">\n <thead>\n {table.getHeaderGroups().map((hg) => (\n <tr key={hg.id} className=\"border-b border-border bg-muted/60\">\n {hg.headers.map((header) => (\n <th\n key={header.id}\n className=\"px-4 py-3 text-left\"\n style={{ width: header.getSize() }}\n >\n {header.isPlaceholder ? null : (\n <SortableHeader column={header.column}>\n {flexRender(header.column.columnDef.header, header.getContext())}\n </SortableHeader>\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.length === 0 ? (\n <tr>\n <td colSpan={columns.length}>\n <EmptyState message={`No ${entityLabel} found`} />\n </td>\n </tr>\n ) : (\n table.getRowModel().rows.map((row) => (\n <tr\n key={row.id}\n className={`border-b border-muted transition-colors last:border-0 hover:bg-muted/80 ${onRowClick ? 'cursor-pointer' : ''}`}\n onClick={() => onRowClick?.(row.original)}\n >\n {row.getVisibleCells().map((cell) => (\n <td key={cell.id} className=\"px-4 py-3\" style={{ width: cell.column.getSize() }}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {pageCount > 1 && (\n <div className=\"mt-3 flex items-center justify-between px-1\">\n <span className=\"text-xs text-muted-foreground\">\n {pageIndex * pageSize + 1}–{Math.min((pageIndex + 1) * pageSize, data.length)} of {data.length} {entityLabel}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n className=\"flex h-7 w-7 items-center justify-center rounded-md border border-border bg-background text-muted-foreground transition-colors hover:bg-muted disabled:opacity-30 disabled:hover:bg-background\"\n >\n <IconChevronLeft size={14} />\n </button>\n <span className=\"px-2 text-xs font-medium tabular-nums text-muted-foreground\">\n {pageIndex + 1} / {pageCount}\n </span>\n <button\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n className=\"flex h-7 w-7 items-center justify-center rounded-md border border-border bg-background text-muted-foreground transition-colors hover:bg-muted disabled:opacity-30 disabled:hover:bg-background\"\n >\n <IconChevronRight size={14} />\n </button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ── Column builders ─────────────────────────────────────────────────\n\n/**\n * Generate heat-colored columns for time-period keys (dates, weeks, months).\n * Each column auto-computes min/max from visible rows for relative coloring.\n */\nfunction buildPeriodColumns<T extends Record<string, any>>({\n periods,\n accessor,\n formatLabel,\n formatValue,\n}: {\n periods: string[]\n accessor: (row: T) => Record<string, number>\n formatLabel: (period: string) => string\n /** Custom value formatter. Defaults to whole-dollar currency. */\n formatValue?: (value: number) => string\n}): ColumnDef<T>[] {\n const fmtVal = formatValue ?? formatCurrency\n\n return periods.map((period) => ({\n id: `period-${period}`,\n header: formatLabel(period),\n size: 95,\n accessorFn: (row: T) => accessor(row)[period] ?? 0,\n sortingFn: 'basic' as const,\n cell: ({ getValue, table: tbl }: { getValue: () => any; table: any }) => {\n const val = getValue() as number\n if (val <= 0) return null\n\n const allVals: number[] = []\n for (const row of tbl.getRowModel().rows) {\n const v = accessor(row.original)[period] ?? 0\n if (v > 0) allVals.push(v)\n }\n const colMin = allVals.length ? Math.min(...allVals) : 0\n const colMax = allVals.length ? Math.max(...allVals) : 0\n const bg = heatColor(val, colMin, colMax)\n const intensity = colMax > 0 ? val / colMax : 0\n\n return (\n <span\n className={`inline-block rounded px-1.5 py-0.5 font-mono text-xs tabular-nums ${\n intensity >= 0.7\n ? 'font-semibold text-foreground'\n : intensity >= 0.3\n ? 'font-medium text-muted-foreground'\n : 'text-muted-foreground'\n }`}\n style={bg ? { backgroundColor: bg } : undefined}\n >\n {fmtVal(val)}\n </span>\n )\n },\n }))\n}\n\n/**\n * A \"Total\" column with a value + horizontal progress bar.\n */\nfunction buildTotalColumn<T>({\n accessor,\n maxValue,\n formatValue,\n barColor = 'bg-muted-foreground',\n}: {\n accessor: (row: T) => number\n maxValue: number\n formatValue?: (value: number) => string\n barColor?: string\n}): ColumnDef<T> {\n const fmtVal = formatValue ?? formatCurrency\n\n return {\n id: 'total',\n header: 'Total',\n size: 160,\n accessorFn: accessor,\n sortingFn: 'basic' as const,\n cell: ({ getValue }: { getValue: () => any }) => {\n const val = getValue() as number\n const pct = maxValue > 0 ? (val / maxValue) * 100 : 0\n return (\n <div className=\"flex items-center gap-3\">\n <span className=\"w-16 text-right text-sm font-semibold text-foreground\">{fmtVal(val)}</span>\n <div className=\"h-2 flex-1 overflow-hidden rounded-full bg-muted\">\n <div\n className={`h-full rounded-full ${barColor} transition-all`}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n )\n },\n }\n}\n\nexport { HeatmapTable, SortableHeader, heatColor, buildPeriodColumns, buildTotalColumn }\nexport type { HeatmapTableProps }\n","import type { ReactNode } from 'react'\nimport { cn } from '@shared/lib/utils'\n\ninterface MetricCardProps {\n label: string\n value: ReactNode\n subtitle?: ReactNode\n compact?: boolean\n className?: string\n onClick?: () => void\n children?: ReactNode\n}\n\nexport function MetricCard({ label, value, subtitle, compact, className, onClick, children }: MetricCardProps) {\n return (\n <div\n data-slot=\"metric-card\"\n className={cn(\n // `bg-card` → `--card` (pure white, design token). Explicit\n // rather than relying on the parent surface showing through:\n // a card component must render as a card on any page backdrop,\n // not just where the page is already white.\n 'rounded-xl bg-card ring-1 ring-border/60',\n compact ? 'p-4' : 'p-5',\n onClick && 'cursor-pointer transition-colors hover:bg-muted/50',\n className,\n )}\n onClick={onClick}\n >\n <p className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">{label}</p>\n <p className={cn('mt-1 font-semibold tracking-tight text-foreground', compact ? 'text-xl' : 'text-2xl')}>{value}</p>\n {subtitle && <div className=\"mt-1\">{subtitle}</div>}\n {children}\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@shared/lib/utils'\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@shared/components/ui/tooltip'\n\n/**\n * KpiTile — compact metric card for the top of dashboards.\n *\n * Differs from `MetricCard` in two deliberate ways:\n * - supports a colored \"warn\" state (tinted background/border) for KPIs that\n * themselves carry an attention signal (e.g. \"Needs attention: 1\")\n * - exposes `delta`, `deltaTone`, and `footer` slots so the monitoring-style\n * copy (\"+0.4pp vs prev 24h\", \"5 agents live\") renders consistently\n *\n * When you only need a static label + value + subtitle, prefer MetricCard.\n */\n\ntype KpiTone = 'neutral' | 'warn' | 'info'\n\ninterface KpiTileProps {\n label: string\n /** Inline adornment rendered immediately after the label (e.g. info icon). */\n labelAdornment?: React.ReactNode\n /**\n * When set, the label text becomes a button that fires this handler.\n * Adornments stay separate (their own buttons handle their own clicks),\n * so consumers can keep info / remove / log affordances next to a\n * clickable title without overlapping hit-targets.\n */\n onLabelClick?: () => void\n value: React.ReactNode\n /** Delta chip rendered next to the value (e.g. \"+12%\"). */\n delta?: React.ReactNode\n /** Green for positive, red for negative; neutral when omitted. */\n deltaTone?: 'positive' | 'negative' | 'neutral'\n /** Optional small line of text below the value (captions, context). */\n footer?: React.ReactNode\n /** When 'warn', the tile picks up an amber tint to flag attention. */\n tone?: KpiTone\n /** Inline adornment rendered next to the value (e.g. live dot). */\n valueAdornment?: React.ReactNode\n /**\n * Pin the value+footer block to the bottom of the tile instead of\n * letting the value float right below the label. Use for tiles where\n * the value should stay anchored to chart/progress content\n * regardless of how tall the label gets (e.g. a label that wraps to\n * two lines). Also drops the default `truncate` on the footer wrapper\n * since pinned-value consumers typically pass a multi-element footer\n * (progress bar + chip) where truncation would clip the layout.\n */\n pinValue?: boolean\n className?: string\n onClick?: () => void\n}\n\nexport function KpiTile({\n label,\n labelAdornment,\n onLabelClick,\n value,\n delta,\n deltaTone = 'neutral',\n footer,\n tone = 'neutral',\n valueAdornment,\n pinValue = false,\n className,\n onClick,\n}: KpiTileProps) {\n // Default tone uses `bg-card` (the pure-white design token) paired\n // with a neutral border. Tonal variants (warn / info) intentionally\n // tint the surface with semantic color washes; those stay as-is\n // because the tint IS the message. Never use hardcoded `bg-white` —\n // per-app themes and dark mode need the variable to switch cleanly.\n const toneBg =\n tone === 'warn'\n ? 'bg-amber-50/60 border-amber-500/40'\n : tone === 'info'\n ? 'bg-sky-50/60 border-sky-500/40'\n : 'bg-card border-black-10'\n\n const labelColor =\n tone === 'warn' ? 'text-amber-700' : tone === 'info' ? 'text-sky-700' : 'text-black-50'\n const valueColor =\n tone === 'warn' ? 'text-amber-900' : tone === 'info' ? 'text-sky-900' : 'text-black-90'\n const deltaColor =\n deltaTone === 'positive'\n ? 'text-emerald-700'\n : deltaTone === 'negative'\n ? 'text-rose-700'\n : 'text-black-60'\n\n return (\n <div\n data-slot=\"kpi-tile\"\n onClick={onClick}\n className={cn(\n // Compact density: ~64px tall — matches the primary score cards on\n // the Agents dashboard. p-3 = 12px, rounded-md = --radius-md token.\n // `h-full` lets the tile stretch to its grid cell's height when\n // the parent grid uses `auto-rows-fr` for equal-height rows\n // (JAR-88) — falls back to `min-h-[64px]` when the parent has\n // no row-height constraint, so the default look is unchanged.\n // `font-normal` resets parent-inherited font-weight (e.g. when\n // the tile sits inside a shared `<Button>` which is `font-medium`\n // by default) so the footer/delta render at body weight; the\n // label and value below set their own `font-semibold` so they\n // aren't affected (JAR-88).\n 'flex h-full flex-col gap-0.5 rounded-md border p-3 min-h-[64px] font-normal',\n toneBg,\n onClick && 'cursor-pointer transition-colors hover:bg-black-2',\n className,\n )}\n >\n <span\n className={cn(\n // Label: `text-xs` (12px) — design-system floor. Dropped the\n // old `text-[10px] uppercase tracking` micro-label treatment;\n // at 12 sentence case with semibold is enough hierarchy.\n //\n // `items-start` (not items-center) so the labelAdornment\n // aligns with the first line of the label when the label\n // wraps to two lines — center-aligning would float the\n // adornment between the two lines, which reads as a\n // misplaced icon.\n 'flex items-start gap-1 text-xs font-semibold',\n labelColor,\n )}\n >\n {/* Tooltip wraps the label so the full text is reachable when\n `line-clamp-2` truncates a long metric name. Always mounted\n (rather than gated on a measured `is-truncated` flag) so the\n behavior is predictable and doesn't depend on layout having\n settled — short labels just show a redundant-but-harmless\n tooltip on hover (JAR-88). */}\n <Tooltip>\n <TooltipTrigger asChild>\n {onLabelClick ? (\n <button\n type=\"button\"\n onClick={(e) => {\n // Stop the click from bubbling to the tile's outer `onClick`\n // when consumers wire both (e.g. card-level navigation +\n // title-level deep-link). Without this, clicking the title\n // fires the outer handler too and you get two competing\n // navigations from one click.\n e.stopPropagation()\n onLabelClick()\n }}\n // `nodrag` is the React Flow escape hatch — pointer-down\n // events bubble to the parent node and get interpreted as a\n // drag-pan unless the interactive child opts out by name.\n // Consumers outside React Flow (e.g. the Agents dashboard)\n // see no effect from the class, so it's safe to ship as a\n // default on the shared component instead of forcing every\n // canvas consumer to remember.\n //\n // `line-clamp-2` caps the label at 2 lines; anything beyond\n // ellipsises. Keeps tile heights bounded when long metric\n // names land in a narrow column (e.g. the 3-col grid on\n // workstream-variant goal cards).\n className=\"nodrag line-clamp-2 cursor-pointer text-left transition-colors hover:text-black-100 hover:underline focus-visible:underline focus-visible:outline-none\"\n >\n {label}\n </button>\n ) : (\n <span className=\"line-clamp-2\">{label}</span>\n )}\n </TooltipTrigger>\n <TooltipContent side=\"top\">{label}</TooltipContent>\n </Tooltip>\n {labelAdornment}\n </span>\n <div\n className={cn(\n 'flex items-baseline gap-2',\n // `pinValue` pushes the value row (and the footer that\n // follows it) to the bottom of the tile so the value stays\n // anchored above its footer regardless of label height.\n pinValue && 'mt-auto',\n )}\n >\n <span\n className={cn(\n // 22px headline — one step down from --font-size-lg (26px).\n 'text-[22px] font-semibold tracking-tight leading-none tabular-nums',\n valueColor,\n )}\n >\n {value}\n </span>\n {delta && (\n <span className={cn('font-mono text-xs', deltaColor)}>{delta}</span>\n )}\n {valueAdornment}\n </div>\n {footer && (\n <div\n className={cn(\n 'pt-0.5 text-xs text-black-50',\n // Default-mode footers carry single-line caption copy that\n // should ellipsis on overflow. Pinned-value consumers pass\n // multi-element flex content (progress bar + chip) where\n // `truncate` would clip — drop it and rely on the\n // consumer's own overflow handling.\n pinValue ? '' : 'mt-auto truncate',\n )}\n >\n {footer}\n </div>\n )}\n </div>\n )\n}\n\n/**\n * KpiTileGrid — opinionated 1-D grid of KPI tiles. Responsive: wraps at small\n * widths, up to `columns` at wide widths.\n */\nexport function KpiTileGrid({\n columns = 4,\n className,\n children,\n}: {\n columns?: 2 | 3 | 4 | 5\n className?: string\n children: React.ReactNode\n}) {\n const gridCols: Record<number, string> = {\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-2 lg:grid-cols-3',\n 4: 'sm:grid-cols-2 lg:grid-cols-4',\n 5: 'sm:grid-cols-2 lg:grid-cols-5',\n }\n return (\n <div\n // `auto-rows-fr` makes every row in the grid stretch to the\n // tallest tile in that row, so a 3-line label next to a 1-line\n // label produces two equal-height tiles instead of a height\n // mismatch (JAR-88). Pairs with `h-full` on KpiTile.\n className={cn(\n 'grid auto-rows-fr grid-cols-1 gap-3',\n gridCols[columns],\n className,\n )}\n >\n {children}\n </div>\n )\n}\n","import { IconArrowUpRight, IconArrowDownRight, IconMinus } from '@tabler/icons-react'\nimport { cn } from '@shared/lib/utils'\n\ninterface TrendBadgeProps {\n value: number | null\n /** When true, \"up\" is green (revenue). Default false: \"up\" is red (cost). */\n invertColors?: boolean\n}\n\nexport function TrendBadge({ value, invertColors = false }: TrendBadgeProps) {\n if (value === null) return <span data-slot=\"trend-badge\" className=\"text-xs text-slate-300\">—</span>\n\n const up = value > 0\n const flat = Math.abs(value) < 1\n\n if (flat) {\n return (\n <span data-slot=\"trend-badge\" className=\"inline-flex items-center gap-0.5 text-xs font-medium text-slate-400\">\n <IconMinus size={12} /> 0%\n </span>\n )\n }\n\n const upColor = invertColors ? 'text-emerald-600' : 'text-red-500'\n const downColor = invertColors ? 'text-red-500' : 'text-emerald-600'\n\n return (\n <span data-slot=\"trend-badge\" className={cn('inline-flex items-center gap-0.5 text-xs font-semibold', up ? upColor : downColor)}>\n {up ? <IconArrowUpRight size={12} /> : <IconArrowDownRight size={12} />}\n {Math.abs(Math.round(value))}%\n </span>\n )\n}\n","import * as React from 'react'\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getPaginationRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type PaginationState,\n type Row,\n type Table as TanstackTable,\n} from '@tanstack/react-table'\nimport { IconChevronUp, IconChevronDown, IconSelector, IconChevronLeft, IconChevronRight } from '@tabler/icons-react'\nimport { cn } from '@shared/lib/utils'\nimport { TableHeader, TableBody, TableRow, TableHead, TableCell } from './table'\nimport { Button } from './button'\nimport { CodeBadge } from './code-badge'\nimport { SearchInput } from './search-input'\n\n/**\n * ProDataTable — opinionated extension of the shadcn table for dashboard-style\n * lists. Layered on top of `DataTable` so apps can opt into richer chrome:\n * - toolbar slot (search + filters + extras) above the header row\n * - uppercase, compact header cells with sort arrows (stateful)\n * - sticky-left columns for \"name\" identity (horizontal-scroll safe)\n * - selected/hover row styling + right-aligned numeric cells\n * - composable cell primitives exported from this module\n * (AvatarTextCell, SparklineCell, StatusDotBadge, ScoreBarCell, etc.)\n *\n * Consumers describe columns with TanStack's `ColumnDef<T>`. The `meta` field\n * on each column is extended with optional presentational hints that live\n * with the column definition (alignment, sticky, width, header tooltip).\n */\n\n/**\n * Column meta extension. Narrow, opt-in; backwards compatible with ColumnDef.\n *\n * Sizing model (rebuilt):\n * - `minWidth` — hard lower bound. The cell never renders narrower than\n * this, even when the table is squeezed. This is what\n * triggers horizontal scroll when the sum of minimums\n * exceeds the container. Defaults to `width` when only\n * `width` is supplied, else `DEFAULT_MIN_WIDTH`.\n * - `width` — preferred/fixed width in px. Use for compact utility\n * columns (status pills, action menus, numeric cells).\n * A column with `width` but no `grow` stays locked to\n * `width` when the container is wide.\n * - `grow` — when true, the column claims remaining horizontal space.\n * Use for identity columns (name + subtitle) so they\n * flex with the viewport. Multiple `grow` columns share\n * remaining space proportionally.\n *\n * The table itself uses `table-layout: auto` + a computed `min-width` that\n * equals the sum of per-column `minWidth`s plus container padding — so when\n * the viewport shrinks past that threshold, horizontal scroll kicks in and\n * every column stays at its own minimum instead of collapsing below it.\n */\n/**\n * Fields shared by every column regardless of sticky / grow.\n *\n * `sticky` and `grow` are intentionally omitted here — they're added by the\n * two `ProColumnMeta` variants below to form a discriminated union that makes\n * `{ sticky: true, grow: true }` unrepresentable.\n */\ninterface ProColumnMetaBase {\n align?: 'left' | 'right' | 'center'\n /** Preferred pixel width. Locks the column unless `grow` is also set. */\n width?: number\n /** Lower bound — column never renders narrower than this. */\n minWidth?: number\n /** Header cell monospace / text hint. Body follows column cell content. */\n headerMono?: boolean\n /** Extra className applied to the <th>. */\n headerClassName?: string\n /** Extra className applied to every <td>. */\n cellClassName?: string\n /** Hide default sort indicator even when column is sortable. */\n hideSortIndicator?: boolean\n}\n\n/**\n * Column meta for a sticky (pinned) column.\n *\n * Sticky columns pin to EITHER the left or right edge of the scroll\n * region. Both sides support a contiguous block — for left, the block\n * starts at the leftmost column; for right, at the rightmost. The first\n * non-sticky column ends the chain on each side (dev-mode warning if a\n * sticky declaration follows the break).\n *\n * API:\n * - `sticky: true` → equivalent to `sticky: 'left'` (backward compat)\n * - `sticky: 'left'` → pin to the left edge. Common for identity\n * columns (name, row ID).\n * - `sticky: 'right'`→ pin to the right edge. Common for action\n * columns (overflow menu, status).\n *\n * The innermost pinned cell on each side (rightmost of the left block,\n * leftmost of the right block) gets an edge shadow when the scrollable\n * content has room to move away from that side — i.e., left-edge shadow\n * appears after the user scrolls right past the start, right-edge shadow\n * appears until the user scrolls to the end. The shadow indicates that\n * content is currently being occluded BY the pinned cell.\n *\n * `grow` is disallowed on sticky columns — a grown sticky column renders at\n * `width: 100%` which both breaks the cumulative offset math used to pin\n * subsequent sticky columns and makes the pinned region balloon to fill\n * the viewport. Set an explicit `width` (and optional `minWidth`) instead.\n */\ninterface ProColumnMetaSticky extends ProColumnMetaBase {\n sticky: true | 'left' | 'right'\n /**\n * @deprecated `grow` is not allowed on sticky columns. Use `width` +\n * `minWidth` to give the sticky column a deterministic size.\n */\n grow?: never\n}\n\n/**\n * Column meta for a non-sticky column. `grow: true` opts the column into\n * absorbing remaining horizontal space (identity / title columns typically\n * want this; utility columns do not).\n */\ninterface ProColumnMetaNonSticky extends ProColumnMetaBase {\n sticky?: false\n /** When true, column flexes to fill remaining horizontal space. */\n grow?: boolean\n}\n\n/**\n * Discriminated union on `sticky`. The variants enforce at compile time that\n * `{ sticky: true, grow: true }` can't be declared — callers get a TS error\n * instead of silent layout corruption.\n */\nexport type ProColumnMeta = ProColumnMetaSticky | ProColumnMetaNonSticky\n\nconst DEFAULT_MIN_WIDTH = 80\n\n// Surface tokens for the table chrome. Sourced from the design system\n// (`--surface` / `--surface-hover` in atlas/src/index.css) so per-app\n// theming can override them and so the gallery surfaces them as first-\n// class swatches. Both must be fully opaque — translucent overlays let\n// horizontally-scrolled content bleed through sticky cells.\nconst STICKY_BG = 'bg-surface'\nconst STICKY_HOVER_BG = 'group-hover:bg-surface-hover'\n// Drop-shadow on the rightmost sticky column, indicating the scroll edge.\n// Applied only when the table is actually scrolled horizontally\n// (`isScrolledFromLeft` / `isScrolledFromRight`) — at scrollLeft === 0\n// there's no occluded content past the left edge; at max scroll there's\n// none past the right edge. Shadows fade in/out smoothly via\n// `transition-shadow` as the user begins / finishes scrolling toward\n// either side.\nconst STICKY_EDGE_SHADOW = 'shadow-[8px_0_12px_-6px_rgba(9,10,12,0.14)]'\nconst STICKY_EDGE_SHADOW_TRANSITION = 'transition-shadow duration-150 ease-out'\n\n// Row dividers rendered as an inset box-shadow on each cell rather than\n// as <tr>/<td> borders. Reasons (learned the hard way):\n//\n// 1. Shadcn's base TableRow already emits `border-b` with Tailwind's\n// default border color. Adding our own border on cells with\n// `border-collapse: collapse` creates a conflict-resolution game\n// where the wrong color sometimes wins, and styling varies by\n// browser.\n// 2. Sticky cells create their own stacking context (`position: sticky`\n// + `z-index`). A tr-level border is painted under the row; the\n// sticky cell's opaque background then renders on top during\n// horizontal scroll and visually erases the divider across the\n// pinned column.\n// 3. Box-shadow (especially `inset`) is painted with the cell itself\n// and is unaffected by border-collapse or sibling stacking contexts.\n// It reliably draws a 1px line at the cell's bottom edge under all\n// scroll states.\n//\n// The shared TableRow's baked-in `border-b` is suppressed via\n// `[&]:border-b-0` below so this is the ONLY divider the table draws.\nconst ROW_DIVIDER = 'shadow-[inset_0_-1px_0_var(--color-black-6)]'\n\n// Custom scrollbar styling. On macOS with overlay scrollbars the track\n// is invisible at rest — but on Windows/Linux and on macOS with\n// \"Always show scrollbars\" enabled, the default classic scrollbar reads\n// as a visible vertical gutter strip against the table's surface. The\n// arbitrary-value classes below thin the scrollbar and make the track\n// transparent so it no longer reads as an intrusive gutter regardless\n// of OS preference.\n//\n// - `scrollbar-width:thin` — Firefox + modern standard\n// - `::-webkit-scrollbar` sizing — Chromium/Safari\n// - transparent tracks, soft translucent thumb — matches other\n// Atlas scroll regions (DashboardShell body, chat, etc.) for a\n// consistent look across the shell.\nconst THIN_SCROLLBAR = cn(\n '[scrollbar-width:thin]',\n '[&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar]:w-2',\n '[&::-webkit-scrollbar-track]:bg-transparent',\n '[&::-webkit-scrollbar-thumb]:rounded-full',\n '[&::-webkit-scrollbar-thumb]:bg-black-10',\n 'hover:[&::-webkit-scrollbar-thumb]:bg-black-20',\n)\n\ntype StickySide = 'left' | 'right'\n\ninterface StickyInfo {\n /** Which edge this column is pinned to. */\n side: StickySide\n /**\n * Cumulative offset from its pinned edge, in px (sum of the widths\n * of the sticky columns between this one and the edge).\n */\n offset: number\n /**\n * True for the cell at the boundary between the sticky block and\n * the scrollable region — the ONE cell per side that draws the edge\n * shadow indicating occluded content.\n *\n * - Left block: rightmost sticky cell\n * - Right block: leftmost sticky cell\n */\n isEdge: boolean\n}\n\n/**\n * Normalize the `sticky` prop to its canonical side. `sticky: true` is\n * the legacy \"pin left\" form kept for backward compatibility — all new\n * call sites should use the explicit `'left'` / `'right'` string.\n */\nfunction stickySide(meta: ProColumnMeta): StickySide | null {\n if (meta.sticky === true || meta.sticky === 'left') return 'left'\n if (meta.sticky === 'right') return 'right'\n return null\n}\n\n/**\n * Read the column identifier used at render time. Matches TanStack's\n * resolution order (`col.id` → stringified `accessorKey` → generated).\n * We only need the explicit forms for sticky lookup — generated ids\n * would never collide with a consumer-declared key.\n */\nfunction columnIdOf<T>(col: ProColumnDef<T>): string {\n return (\n (col as { id?: string }).id ??\n (col as { accessorKey?: string | number }).accessorKey?.toString() ??\n ''\n )\n}\n\n/**\n * Build the per-column sticky layout.\n *\n * Two passes — left-to-right collects the leading contiguous block of\n * `side: 'left'` columns, right-to-left collects the trailing\n * contiguous block of `side: 'right'` columns. Each side has its own\n * cumulative offset and its own edge cell (innermost sticky cell, the\n * one next to scrolling content).\n *\n * Returns a map keyed by `columnIdOf(col)` so renderers can look up by\n * `header.id` / `cell.column.id` without recomputing per row.\n */\nfunction buildStickyLayout<T>(columns: ProColumnDef<T>[]): Map<string, StickyInfo> {\n const info = new Map<string, StickyInfo>()\n\n // ── Left block ────────────────────────────────────────────────────\n let leftOffset = 0\n let leftBroken = false\n const leftIds: string[] = []\n for (const col of columns) {\n const meta = (col.meta ?? {}) as ProColumnMeta\n const side = stickySide(meta)\n const id = columnIdOf(col)\n\n if (side !== 'left') {\n // As soon as a non-left-sticky column appears, the left chain ends.\n // A later `sticky: 'left'` after the break is a consumer bug.\n if (!leftBroken) leftBroken = true\n continue\n }\n if (leftBroken) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n `[ProDataTable] Column \"${id}\" was marked \\`sticky: 'left'\\` but follows a non-sticky column. ` +\n `Left-sticky columns must form a contiguous block starting from the leftmost column. Ignoring.`,\n )\n }\n continue\n }\n warnStickyGrow(meta, id)\n\n info.set(id, { side: 'left', offset: leftOffset, isEdge: false })\n leftIds.push(id)\n leftOffset += meta.width ?? meta.minWidth ?? DEFAULT_MIN_WIDTH\n }\n if (leftIds.length > 0) {\n const lastId = leftIds[leftIds.length - 1]\n const last = info.get(lastId)\n if (last) info.set(lastId, { ...last, isEdge: true })\n }\n\n // ── Right block ───────────────────────────────────────────────────\n // Walk right-to-left and accumulate the offset from the right edge.\n // Stop as soon as a non-right-sticky column appears; any earlier\n // `sticky: 'right'` is a consumer bug and is ignored with a warning\n // (the same way left-side breaks are handled).\n let rightOffset = 0\n let rightBroken = false\n const rightIds: string[] = []\n for (let i = columns.length - 1; i >= 0; i--) {\n const col = columns[i]\n const meta = (col.meta ?? {}) as ProColumnMeta\n const side = stickySide(meta)\n const id = columnIdOf(col)\n\n if (side !== 'right') {\n // Stop counting new right-sticky columns once we've crossed the\n // boundary, BUT keep iterating so we can flag any further\n // `sticky: 'right'` declarations as misplaced.\n if (!rightBroken) rightBroken = true\n continue\n }\n if (rightBroken) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n `[ProDataTable] Column \"${id}\" was marked \\`sticky: 'right'\\` but precedes a non-sticky column. ` +\n `Right-sticky columns must form a contiguous block ending at the rightmost column. Ignoring.`,\n )\n }\n continue\n }\n warnStickyGrow(meta, id)\n\n // Skip if the column is ALSO tracked as left-sticky — the left\n // pass wins (`sticky: true` / `'left'` takes precedence if a\n // future variant ever allowed dual declarations).\n if (info.has(id)) continue\n\n info.set(id, { side: 'right', offset: rightOffset, isEdge: false })\n rightIds.push(id)\n rightOffset += meta.width ?? meta.minWidth ?? DEFAULT_MIN_WIDTH\n }\n if (rightIds.length > 0) {\n // `rightIds` was populated right-to-left, so the LAST id in that\n // array is the LEFTMOST right-sticky column — the edge cell.\n const edgeId = rightIds[rightIds.length - 1]\n const edge = info.get(edgeId)\n if (edge) info.set(edgeId, { ...edge, isEdge: true })\n }\n\n return info\n}\n\n/**\n * Dev-mode warning for the illegal `sticky + grow` combination. The\n * discriminated-union types prevent this at compile time, but callers\n * can still slip past via `any` / plain-JS column defs.\n */\nfunction warnStickyGrow(meta: ProColumnMeta, id: string) {\n const growFlag = (meta as { grow?: boolean }).grow === true\n if (growFlag && process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n `[ProDataTable] Column \"${id}\" is sticky and has \\`grow: true\\`. ` +\n `Sticky columns must have a deterministic width — \\`grow\\` is ignored. ` +\n `Set an explicit \\`width\\` (and optional \\`minWidth\\`) instead.`,\n )\n }\n}\n\n/**\n * Resolve a column's final sizing styles from meta. Keeps the semantics of\n * `width`/`minWidth`/`grow` in one place so the header and body stay in sync.\n *\n * Under `table-layout: fixed` every column needs a deterministic width, so:\n * - `grow` columns get `width: 100%` (they absorb remaining space)\n * - Non-grow columns get `width: minWidth` when only `minWidth` was set\n * (the column stays at its floor, no implicit flex)\n * - Explicit `width` always wins for non-grow columns\n * - Every cell carries `min-width` so the table-level `min-width` (sum of\n * column minimums) triggers horizontal scroll cleanly.\n *\n * Sticky columns force `grow` off regardless of what the caller declared —\n * a grown sticky column renders at `width: 100%` which (a) breaks the\n * cumulative left-offset math in `buildStickyLayout` and (b) makes the\n * pinned region fill the viewport. `buildStickyLayout` warns in dev when\n * this combination is used; here we simply ignore `grow`.\n */\nfunction resolveColumnSizing(\n meta: ProColumnMeta,\n isSticky: boolean = false,\n): React.CSSProperties {\n const minWidth = meta.minWidth ?? meta.width ?? DEFAULT_MIN_WIDTH\n if (meta.grow && !isSticky) {\n return { minWidth, width: '100%' }\n }\n return { minWidth, width: meta.width ?? minWidth }\n}\n\nexport type ProColumnDef<T> = ColumnDef<T, unknown> & {\n meta?: ProColumnMeta\n}\n\n// ─── Root component ──────────────────────────────────────────────────────────\n\n/**\n * Built-in search config for ProDataTable. The table owns the input and\n * filters rows client-side via TanStack's globalFilter. Pass `true` for a\n * default search bar, or an object to customize placeholder / matcher.\n */\ninterface ProDataTableSearchable<T> {\n placeholder?: string\n /**\n * Optional extractor used when the default includes-string matcher isn't\n * enough (e.g. fuzzy search, concatenating several fields). Return the\n * searchable text representation for a row.\n */\n accessor?: (row: T) => string\n /** Width of the input in px. Defaults to 240. */\n width?: number\n}\n\ninterface ProDataTableProps<T> {\n columns: ProColumnDef<T>[]\n data: T[]\n /**\n * Enable a client-side search input in the table header. Filters rows by\n * concatenating every cell's accessor value (default) or via a custom\n * accessor. Pass `true` for defaults, or an object to override.\n */\n searchable?: boolean | ProDataTableSearchable<T>\n /** Custom filter controls rendered next to the search input. */\n toolbar?: React.ReactNode\n /** Footer rendered below the table (e.g. custom summary row). */\n footer?: React.ReactNode\n pageSize?: number\n /** Disable pagination entirely (small, known datasets). */\n disablePagination?: boolean\n defaultSort?: SortingState\n emptyMessage?: React.ReactNode\n onRowClick?: (row: T) => void\n /**\n * Per-row destination URL. When provided alongside `onRowClick`, plain\n * clicks still call `onRowClick` (SPA navigate), but Cmd/Ctrl-click,\n * middle-click, and Shift-click open the URL in a new tab/window — same\n * semantics as a real `<a>` element. Without this prop, modifier-clicks\n * fall through to the plain handler and the user can't multi-open rows.\n */\n rowHref?: (row: T) => string | undefined\n rowClassName?: (row: Row<T>) => string | undefined\n /**\n * Override the computed table min-width. By default, the component adds up\n * each column's `minWidth` + horizontal padding to derive the threshold\n * where horizontal scroll should kick in. Set this only if you need to\n * force a larger minimum (e.g. to reserve room for a floating column).\n */\n minWidth?: number\n /**\n * Explicit height for the table card. Overrides the default fill-parent\n * behavior. Accepts any CSS length (`'600px'`, `'70vh'`,\n * `'calc(100vh - 12rem)'`) or a pixel `number`.\n *\n * By default the card grows to fill its parent's available height via\n * `flex-1` (for flex-column parents like DashboardShell body) and\n * `h-full` (for fixed-height parents). The toolbar stays pinned at\n * the top of the card, the body scrolls internally, and the header\n * sticks to the top of the scroll region.\n */\n height?: string | number\n /** Wrap the whole thing in a rounded card. Defaults to true. */\n bordered?: boolean\n /** Shown when the table is selected in a multi-table shell (optional). */\n ariaLabel?: string\n className?: string\n}\n\nfunction ProDataTable<T>({\n columns,\n data,\n searchable,\n toolbar,\n footer,\n pageSize = 50,\n disablePagination,\n defaultSort,\n emptyMessage = 'No data',\n onRowClick,\n rowHref,\n rowClassName,\n minWidth,\n height,\n bordered = true,\n ariaLabel,\n className,\n}: ProDataTableProps<T>) {\n // Memoize the resolved search config so a stable identity flows into the\n // filter useMemo deps (caller passes object literals on every render).\n const searchConfig = React.useMemo<ProDataTableSearchable<T> | null>(() => {\n if (!searchable) return null\n return typeof searchable === 'object' ? searchable : {}\n }, [searchable])\n const [sorting, setSorting] = React.useState<SortingState>(defaultSort ?? [])\n const [pagination, setPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize,\n })\n const [searchQuery, setSearchQuery] = React.useState('')\n\n // Track horizontal scroll so the last sticky column only shows its edge\n // shadow when there's actually scrolled-under content to indicate. This\n // mirrors the standard spreadsheet/data-grid pattern (Linear, Notion, Google\n // Sheets): shadow appears the moment the user scrolls right, and disappears\n // when they scroll back to the leftmost position. Implemented with a ref on\n // the scroll container + a native scroll listener — cheap and matches the\n // rendering pipeline (no layout thrash).\n const scrollContainerRef = React.useRef<HTMLDivElement | null>(null)\n // Two independent states, one per edge:\n // - `isScrolledFromLeft` — content has moved away from the start,\n // so the LEFT sticky column is now occluding something. Drives\n // the left-edge shadow.\n // - `isScrolledFromRight` — there is still content to the right\n // of the viewport (we're not yet at max scroll), so the RIGHT\n // sticky column is occluding something. Drives the right-edge\n // shadow.\n //\n // Both update on every scroll / resize via a single listener — cheap\n // and matches the rendering pipeline (no layout thrash).\n const [isScrolledFromLeft, setIsScrolledFromLeft] = React.useState(false)\n const [isScrolledFromRight, setIsScrolledFromRight] = React.useState(false)\n React.useEffect(() => {\n const el = scrollContainerRef.current\n if (!el) return\n const update = () => {\n const maxScroll = el.scrollWidth - el.clientWidth\n setIsScrolledFromLeft(el.scrollLeft > 0)\n // `-1` epsilon for subpixel rounding — at max scroll the\n // browser can report scrollLeft as (scrollWidth - clientWidth)\n // or fractionally below it on fractional-pixel displays.\n setIsScrolledFromRight(el.scrollLeft < maxScroll - 1)\n }\n // Initialize once on mount (data width may exceed container and the user\n // may land mid-scroll on back-nav / restoration) and whenever the content\n // reflows.\n update()\n el.addEventListener('scroll', update, { passive: true })\n // If the viewport resizes such that the table no longer overflows, both\n // flags naturally clamp to false — re-evaluate so the shadows hide.\n // Defer to rAF: the observer's callback calls setState, which can\n // synchronously relayout the table and re-fire the observer within the\n // same frame, producing Chrome's \"ResizeObserver loop completed with\n // undelivered notifications\" warning.\n let rafId = 0\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rafId)\n rafId = requestAnimationFrame(update)\n })\n resizeObserver.observe(el)\n return () => {\n cancelAnimationFrame(rafId)\n el.removeEventListener('scroll', update)\n resizeObserver.disconnect()\n }\n }, [])\n\n // Single pre-filter pass — runs whenever the query changes. When a custom\n // accessor is provided we use it; otherwise we serialize each row's values\n // into a haystack so the \"includes\" matcher works across all columns.\n const filteredData = React.useMemo(() => {\n if (!searchConfig) return data\n const q = searchQuery.trim().toLowerCase()\n if (!q) return data\n const accessor =\n searchConfig.accessor ?? ((row: T) => JSON.stringify(row).toLowerCase())\n return data.filter((row) => accessor(row).toLowerCase().includes(q))\n }, [data, searchQuery, searchConfig])\n\n const table = useReactTable({\n data: filteredData,\n columns,\n state: { sorting, pagination },\n onSortingChange: setSorting,\n onPaginationChange: setPagination,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getPaginationRowModel: disablePagination ? undefined : getPaginationRowModel(),\n })\n\n const rowModel = table.getRowModel()\n\n // Precompute per-column sticky metadata (side + offset + isEdge flag) so the\n // header and body render identically without re-walking the column array\n // on every cell. Recomputes only when the columns array identity changes.\n const stickyLayout = React.useMemo(() => buildStickyLayout(columns), [columns])\n\n const hasToolbar = !!(searchConfig || toolbar)\n\n // Resolve the height prop. When omitted, the card uses `flex-1 h-full`\n // to fill its parent — `flex-1` claims remaining space in a flex column\n // (e.g. DashboardShell body), and `h-full` fills fixed-height parents.\n // When provided, the explicit height wins.\n const resolvedHeight =\n height != null ? (typeof height === 'number' ? `${height}px` : height) : undefined\n\n // Compute the table's implicit min-width from per-column minimums so that\n // horizontal scroll only kicks in once all columns are already sitting at\n // their lower bound. ~36px padding per cell accounts for px-4 gutters on\n // both sides.\n const computedMinWidth = React.useMemo(() => {\n if (minWidth != null) return minWidth\n let sum = 0\n for (const col of columns) {\n const meta = (col.meta ?? {}) as ProColumnMeta\n sum += meta.minWidth ?? meta.width ?? DEFAULT_MIN_WIDTH\n }\n return sum\n }, [columns, minWidth])\n\n return (\n <div\n data-slot=\"pro-data-table\"\n className={cn(\n // `flex flex-col` lets the inner scroll region claim remaining\n // vertical space between the static toolbar and footer. `min-h-0`\n // is load-bearing — flex children default to min-height: auto,\n // which refuses to shrink below their content and breaks scroll.\n // `bg-card` → `--card` design token (pure white across all\n // themes, dark-mode-aware). Tables are card-shaped surfaces:\n // grouped data on an elevated plane over the page canvas.\n 'flex flex-col min-h-0 bg-card',\n // Default sizing: fill the parent. `flex-1` claims remaining\n // space in a flex column (DashboardShell body, dialog grids,\n // two-pane layouts). `h-full` falls back to parent height for\n // non-flex fixed-height parents. Overridden when `height` is set.\n height == null && 'flex-1 h-full',\n // `overflow-hidden` clips the rounded corners. Sticky elements\n // inside don't reference this box because the inner scroll\n // region (`overflow-auto` below) is their nearest scrolling\n // ancestor — so the card is free to be a scroll container for\n // clipping purposes without trapping anything.\n bordered && 'rounded-xl border border-black-10 overflow-hidden',\n className,\n )}\n style={resolvedHeight != null ? { height: resolvedHeight } : undefined}\n >\n {hasToolbar && (\n <div\n // Toolbar sits statically at the top of the card's flex column.\n // It doesn't need `position: sticky` — the internal scroll\n // region below keeps the header visible regardless of how far\n // the body has scrolled, so the toolbar just stays where it\n // started. `shrink-0` prevents flex from compressing it.\n //\n // Intentionally NO `border-b` here: a horizontal line inside a\n // rounded container reads as a second nested box at the corners\n // (the rounded mask clips the line endpoints into a visible\n // inset). The table header row below carries its own top border\n // and provides the visual separation we want.\n className=\"shrink-0\"\n >\n <ProDataTableToolbar>\n {searchConfig && (\n // Shared `SearchInput` — wraps the base Input with the\n // canonical leading Lucide `Search` icon and a trailing\n // Lucide `X` clear button. Crucially, it also suppresses\n // the native `::-webkit-search-cancel-button`; without\n // that, the browser renders its own chunky blue × that\n // bypasses every design-system choice (size, color, stroke).\n <SearchInput\n containerClassName=\"shrink-0\"\n style={{ width: searchConfig.width ?? 240 }}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.currentTarget.value)}\n placeholder={searchConfig.placeholder ?? 'Search'}\n className=\"h-8 text-body-sm\"\n />\n )}\n {toolbar}\n </ProDataTableToolbar>\n </div>\n )}\n\n {/*\n The inner scroll region is the single scroll container for the\n table body. It claims the remaining vertical space between the\n static toolbar above and the static footer below via `flex-1\n min-h-0`, and scrolls both axes when content exceeds its bounds\n (wide columns → horizontal; many rows → vertical). The sticky\n `<thead>` pins to the top of THIS region, which is what keeps\n the column headers visible without letting them escape the card.\n\n Raw <table> rather than the shared `<Table>` component because\n `<Table>` wraps its child in an `<div className=\"overflow-auto\">`\n of its own — adding a second scroll container nested inside this\n one, which traps the sticky thead and reintroduces the offset\n bug. See Eva's Medium write-up on shadcn sticky-header pitfalls.\n\n */}\n <div\n ref={scrollContainerRef}\n className={cn('flex-1 min-h-0 overflow-auto', THIN_SCROLLBAR)}\n >\n <table\n aria-label={ariaLabel}\n className=\"caption-bottom w-full text-sm\"\n // `table-layout: fixed` is what makes the column widths (from\n // `resolveColumnSizing`) actually stick. With `auto`, cells grow\n // to fit content and long text blows out the layout; with `fixed`,\n // the declared widths win, extra space is handed to `grow` columns,\n // and overflowing content truncates via `overflow-hidden` on the\n // cell.\n style={{ tableLayout: 'fixed', minWidth: computedMinWidth }}\n >\n <TableHeader\n // Sticks to the top of the scroll region above. No CSS-var\n // offset needed — the toolbar lives OUTSIDE this scroll\n // region, so the header's natural `top: 0` pins to the top\n // of the scroll viewport, which sits directly below the\n // toolbar's bottom border.\n className=\"sticky top-0 z-[2]\"\n >\n {table.getHeaderGroups().map((hg) => (\n <TableRow\n key={hg.id}\n // Header dividers (top border separating from toolbar,\n // bottom border separating from body) are drawn as\n // per-cell inset shadows below, NOT as tr-level borders.\n // Same rationale as the body: sticky header cells\n // (`position: sticky` + `z-[3]`) create stacking\n // contexts that occlude tr-borders during horizontal\n // scroll. `border-b-0` suppresses shadcn's baked-in\n // row border so it doesn't double-draw or fight with\n // the per-cell shadow.\n className=\"border-b-0 bg-surface hover:bg-surface\"\n >\n {hg.headers.map((header) => {\n const meta = (header.column.columnDef.meta ?? {}) as ProColumnMeta\n const align = meta.align ?? 'left'\n const sortable = header.column.getCanSort()\n const sortDir = header.column.getIsSorted()\n const sticky = stickyLayout.get(header.column.id)\n return (\n <TableHead\n key={header.id}\n onClick={sortable ? header.column.getToggleSortingHandler() : undefined}\n className={cn(\n // Header row — 13px via the `text-body-sm`\n // design token. Mapping:\n //\n // class: text-body-sm\n // token: --text-body-sm\n // value: 0.8125rem (13px)\n // source: atlas/src/index.css\n //\n // The header sits one notch BELOW the 14px\n // primary body voice (`text-sm`) and matches\n // the 13px of secondary descriptions — headers\n // read as scaffolding/meta for the row content,\n // not as peers of the primary cell text.\n // Weight + color carry the remaining hierarchy\n // against the body: `font-semibold text-black-70`\n // for headers vs. `font-normal text-black-90`\n // for primary cells.\n //\n // `min-h-10` (not `h-10`) lets the cell grow\n // when a long label needs two lines — but\n // never past two, because the inner `<span>`\n // below uses `line-clamp-2` to truncate with\n // ellipsis. Font size stays fixed at the token\n // regardless of column width; headers do NOT\n // auto-shrink.\n 'min-h-10 py-2 px-4 text-body-sm font-semibold text-black-70 align-middle',\n 'first:pl-5 last:pr-5',\n align === 'right' && 'text-right',\n align === 'center' && 'text-center',\n sortable && 'cursor-pointer select-none hover:text-black-90',\n // Sticky header cells carry the same opaque bg as the\n // header row so non-sticky headers disappear behind\n // them during horizontal scroll. Edge-shadow and\n // the header's top/bottom dividers are combined\n // into a single inline `box-shadow` below\n // (Tailwind utility classes can't compose\n // multiple shadows).\n sticky && ['sticky z-[3]', STICKY_BG],\n sticky?.isEdge && STICKY_EDGE_SHADOW_TRANSITION,\n meta.headerMono && 'font-mono',\n meta.headerClassName,\n )}\n style={{\n ...resolveColumnSizing(meta, !!sticky),\n // Pin to the correct edge. `left` for left-block\n // sticky, `right` for right-block sticky. The\n // offset is the sum of sibling sticky widths on\n // the SAME side (computed in `buildStickyLayout`).\n ...(sticky\n ? sticky.side === 'left'\n ? { left: `${sticky.offset}px` }\n : { right: `${sticky.offset}px` }\n : null),\n boxShadow:\n [\n // Header top divider (separates from\n // toolbar) AND bottom divider (separates\n // from body). Rendered on every header cell\n // so both lines survive horizontal scroll\n // across the sticky column.\n 'inset 0 1px 0 var(--color-black-6)',\n 'inset 0 -1px 0 var(--color-black-6)',\n // Edge shadow on the innermost sticky cell\n // of each side. Direction flips to match\n // which side is pinned:\n // - LEFT sticky edge: shadow to the RIGHT\n // (positive X offset, 8px blur). Shown\n // only when the user has scrolled away\n // from the start (isScrolledFromLeft).\n // - RIGHT sticky edge: shadow to the LEFT\n // (negative X offset). Shown while\n // there's still content to the right\n // of the viewport (isScrolledFromRight).\n sticky?.isEdge && sticky.side === 'left' && isScrolledFromLeft\n ? '8px 0 12px -6px rgba(9, 10, 12, 0.14)'\n : null,\n sticky?.isEdge && sticky.side === 'right' && isScrolledFromRight\n ? '-8px 0 12px -6px rgba(9, 10, 12, 0.14)'\n : null,\n ]\n .filter(Boolean)\n .join(', '),\n }}\n >\n {/*\n Header label + sort indicator layout. The\n previous `inline-flex items-center` version\n put text and icon in the same wrapping line,\n which caused long labels to either (a) wrap\n indefinitely (blowing out row height for\n columns like \"Meeting Prep: Goal Focus &\n Context\"), or (b) visually shrink when the\n browser squeezed the text to fit.\n\n This replacement splits the two concerns:\n\n - Outer `flex` (block) fills the cell width.\n Vertical alignment via `items-start` keeps\n the sort icon anchored to the first line,\n not floating at the visual centroid of a\n growing label.\n - Inner `<span>` uses `line-clamp-2` to cap\n the label at two lines with a trailing\n ellipsis. `min-w-0` is mandatory on a flex\n child that clamps — without it the flex\n child never shrinks below its intrinsic\n content width, so `line-clamp` has\n nothing to clamp against.\n - Sort indicator gets `shrink-0` + a small\n `mt-0.5` so it optically aligns with the\n x-height of the first line rather than the\n baseline of the flex container.\n */}\n <span\n className={cn(\n 'flex w-full items-start gap-1',\n align === 'right' && 'justify-end',\n align === 'center' && 'justify-center',\n )}\n >\n <span\n className={cn(\n 'min-w-0 line-clamp-2',\n align === 'right' && 'text-right',\n align === 'center' && 'text-center',\n )}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </span>\n {sortable && !meta.hideSortIndicator && (\n <span className=\"mt-0.5 shrink-0\">\n <SortIndicator direction={sortDir} />\n </span>\n )}\n </span>\n </TableHead>\n )\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {rowModel.rows.map((row, rowIndex) => {\n const isLastRow = rowIndex === rowModel.rows.length - 1\n const href = rowHref?.(row.original)\n // Cmd/Ctrl/Shift-click or middle-click should open the row's\n // detail URL in a new tab, mirroring `<a>` semantics. Plain\n // click stays on the SPA `onRowClick` path so we don't lose\n // React-Router navigation state.\n const handleRowClick = (onRowClick || href)\n ? (e: React.MouseEvent<HTMLTableRowElement>) => {\n if (href && (e.metaKey || e.ctrlKey || e.shiftKey)) {\n e.preventDefault()\n window.open(href, '_blank', 'noopener,noreferrer')\n return\n }\n onRowClick?.(row.original)\n }\n : undefined\n const handleRowAuxClick = href\n ? (e: React.MouseEvent<HTMLTableRowElement>) => {\n if (e.button === 1) {\n e.preventDefault()\n window.open(href, '_blank', 'noopener,noreferrer')\n }\n }\n : undefined\n return (\n <TableRow\n key={row.id}\n onClick={handleRowClick}\n onAuxClick={handleRowAuxClick}\n className={cn(\n // `group` lets each sticky cell mirror the row hover bg\n // with `group-hover:bg-surface-hover` — required because\n // sticky cells paint their own opaque bg on top of\n // whatever the row declares.\n //\n // `border-b-0` suppresses shadcn's baked-in TableRow\n // border (which uses Tailwind's default border color\n // AND gets occluded by sticky-cell stacking contexts).\n // Dividers come instead from `ROW_DIVIDER` — an inset\n // box-shadow on each TableCell below — which renders\n // reliably regardless of border-collapse or sticky\n // z-index.\n 'group border-b-0 hover:bg-surface-hover',\n (onRowClick || href) && 'cursor-pointer',\n rowClassName?.(row),\n )}\n >\n {row.getVisibleCells().map((cell) => {\n const meta = (cell.column.columnDef.meta ?? {}) as ProColumnMeta\n const align = meta.align ?? 'left'\n const sticky = stickyLayout.get(cell.column.id)\n return (\n <TableCell\n key={cell.id}\n className={cn(\n // `overflow-hidden` is what makes truncation work:\n // combined with table-layout:fixed the cell clips to\n // its computed width so inner `truncate` utilities\n // kick in.\n // Body cells: `text-sm` (14px) — default body\n // voice. Primary text in a row (names, titles,\n // status labels) reads at the same size as\n // everything else in the system. Secondary\n // descriptions / subtitles drop to 13px\n // (`text-body-sm`) inside the individual cell\n // renderers (AvatarTextCell subtitle,\n // AvatarCell secondary, etc.). Meta chips,\n // compact numbers, and monospace values drop\n // further to `text-xs` (12px) — see the cell\n // primitives below.\n 'py-2.5 px-4 align-middle text-sm text-black-90 overflow-hidden first:pl-5 last:pr-5',\n align === 'right' && 'text-right',\n align === 'center' && 'text-center',\n // Sticky cells need a fully opaque background so\n // horizontally-scrolled content stays hidden behind\n // them. On hover, both the row and the sticky cell\n // swap to a matching opaque shade so the pinned\n // region doesn't become an island. Dividers and\n // the edge-shadow are merged into a single inline\n // `box-shadow` below — Tailwind shadow utilities\n // can't compose (each declares `box-shadow: ...`\n // and overwrites the previous), so for cells that\n // need BOTH an inset divider and an outset edge\n // shadow we combine them via inline style.\n sticky && ['sticky z-[1] bg-background', STICKY_HOVER_BG],\n sticky?.isEdge && STICKY_EDGE_SHADOW_TRANSITION,\n meta.cellClassName,\n )}\n style={{\n ...resolveColumnSizing(meta, !!sticky),\n // Pin to the correct edge — see the matching\n // header-cell logic above.\n ...(sticky\n ? sticky.side === 'left'\n ? { left: `${sticky.offset}px` }\n : { right: `${sticky.offset}px` }\n : null),\n boxShadow:\n [\n // Row divider — inset line at the bottom of\n // every cell except the last row. Inset\n // box-shadow bypasses border-collapse AND is\n // painted with the cell itself, so it survives\n // both sticky stacking contexts and horizontal\n // scroll. This is the fix for \"dividers vanish\n // across the pinned column when scrolling\".\n !isLastRow ? 'inset 0 -1px 0 var(--color-black-6)' : null,\n // Edge shadow on the innermost sticky cell of\n // each side — mirrors the header-cell logic.\n // LEFT edge draws to the right when scrolled\n // away from the start; RIGHT edge draws to\n // the left while there's still content to\n // the right of the viewport.\n sticky?.isEdge && sticky.side === 'left' && isScrolledFromLeft\n ? '8px 0 12px -6px rgba(9, 10, 12, 0.14)'\n : null,\n sticky?.isEdge && sticky.side === 'right' && isScrolledFromRight\n ? '-8px 0 12px -6px rgba(9, 10, 12, 0.14)'\n : null,\n ]\n .filter(Boolean)\n .join(', ') || undefined,\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n )\n })}\n </TableRow>\n )\n })}\n {rowModel.rows.length === 0 && (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell\n colSpan={columns.length}\n className=\"h-24 px-4 text-center text-sm text-black-40\"\n >\n {emptyMessage}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </table>\n </div>\n\n {footer && <div className=\"shrink-0\">{footer}</div>}\n\n {!disablePagination && !footer && data.length > pagination.pageSize && (\n <div className=\"shrink-0\">\n <ProDataTablePagination table={table} />\n </div>\n )}\n </div>\n )\n}\n\nfunction SortIndicator({ direction }: { direction: false | 'asc' | 'desc' }) {\n if (direction === 'asc') return <IconChevronUp size={12} strokeWidth={2} className=\"text-black-90\" />\n if (direction === 'desc') return <IconChevronDown size={12} strokeWidth={2} className=\"text-black-90\" />\n return <IconSelector size={12} strokeWidth={1.6} className=\"text-black-30\" />\n}\n\ninterface ProDataTablePaginationProps<T> {\n table: TanstackTable<T>\n className?: string\n totalLabel?: (args: { from: number; to: number; total: number }) => React.ReactNode\n}\n\nfunction ProDataTablePagination<T>({ table, className, totalLabel }: ProDataTablePaginationProps<T>) {\n const total = table.getFilteredRowModel().rows.length\n const { pageIndex, pageSize } = table.getState().pagination\n const from = total === 0 ? 0 : pageIndex * pageSize + 1\n const to = Math.min((pageIndex + 1) * pageSize, total)\n return (\n <div\n className={cn(\n 'flex items-center gap-2 border-t border-black-6 bg-black-2 px-4 py-2 text-xs text-black-60',\n className,\n )}\n >\n <span>\n {totalLabel\n ? totalLabel({ from, to, total })\n : `Showing ${from}–${to} of ${total}`}\n </span>\n <div className=\"flex-1\" />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Previous page\"\n >\n <IconChevronLeft size={14} />\n </Button>\n <span className=\"font-mono tabular-nums text-black-60\">\n {pageIndex + 1} / {Math.max(1, table.getPageCount())}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Next page\"\n >\n <IconChevronRight size={14} />\n </Button>\n </div>\n )\n}\n\n// ─── Toolbar primitives ──────────────────────────────────────────────────────\n\nfunction ProDataTableToolbar({\n className,\n children,\n}: {\n className?: string\n children?: React.ReactNode\n}) {\n return (\n <div\n className={cn(\n // `px-5` matches the table header's `first:pl-5` — so the\n // SearchInput's left edge lines up exactly with the first\n // column's label below. Without this, the toolbar contents\n // sit 4px to the left of the column grid and read as slightly\n // mis-aligned chrome. `py-2` trims the old `py-2.5` — toolbars\n // should feel tight; 8/8 is enough padding around an h-9 input\n // for breathing room without wasting vertical space above the\n // data.\n 'flex flex-wrap items-center gap-2 px-5 py-2',\n className,\n )}\n >\n {children}\n </div>\n )\n}\n\n// ─── Cell primitives ─────────────────────────────────────────────────────────\n\nexport const AGENT_TINTS = {\n teal: { bg: 'bg-teal-50', fg: 'text-teal-700' },\n violet: { bg: 'bg-violet-50', fg: 'text-violet-700' },\n amber: { bg: 'bg-amber-50', fg: 'text-amber-700' },\n rose: { bg: 'bg-rose-50', fg: 'text-rose-700' },\n sky: { bg: 'bg-sky-50', fg: 'text-sky-700' },\n emerald: { bg: 'bg-emerald-50', fg: 'text-emerald-700' },\n orange: { bg: 'bg-orange-50', fg: 'text-orange-700' },\n indigo: { bg: 'bg-indigo-50', fg: 'text-indigo-700' },\n graphite: { bg: 'bg-black-6', fg: 'text-black-80' },\n} as const\n\nexport type AgentTint = keyof typeof AGENT_TINTS\n\nexport function tintForString(seed: string): AgentTint {\n const keys = Object.keys(AGENT_TINTS) as AgentTint[]\n let hash = 0\n for (let i = 0; i < seed.length; i++) hash = seed.charCodeAt(i) + ((hash << 5) - hash)\n return keys[Math.abs(hash) % keys.length]\n}\n\ninterface AvatarTextCellProps {\n /** Icon rendered inside the tinted square. */\n icon?: React.ReactNode\n /** Fallback initials when no icon is supplied. */\n initials?: string\n title: React.ReactNode\n subtitle?: React.ReactNode\n /** Small mono tag rendered inline to the right of the title (e.g. \"Sonnet 4.5\"). */\n tag?: React.ReactNode\n tint?: AgentTint\n /** Override inline action rendered on hover at the right of the title row. */\n rightSlot?: React.ReactNode\n className?: string\n}\n\nfunction AvatarTextCell({\n icon,\n initials,\n title,\n subtitle,\n tag,\n tint = 'graphite',\n rightSlot,\n className,\n}: AvatarTextCellProps) {\n const palette = AGENT_TINTS[tint]\n return (\n <div className={cn('flex items-center gap-3 min-w-0', className)}>\n {/* Avatar tile — 32px (design: `h-8`), no outline. Uses the tight\n `rounded-xs` (4px, `--radius-xs`) — reads as a \"chiclet\" next\n to the agent name rather than a soft pill. The [&>svg]:size-*\n selector enlarges any child <svg> so callers don't need to\n pass size={...} explicitly. */}\n <div\n className={cn(\n 'size-8 rounded-xs shrink-0 grid place-items-center text-xs font-semibold',\n '[&>svg]:size-[18px]',\n palette.bg,\n palette.fg,\n )}\n >\n {icon ?? initials}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-1.5\">\n {/* Primary row text — `text-sm` (14px). The row identity\n (agent name, customer name, loan ID) sits at the default\n body size so it reads as the main voice of the row. */}\n <span className=\"text-sm font-medium text-black-90 truncate tracking-tight\">\n {title}\n </span>\n {tag && <CodeBadge>{tag}</CodeBadge>}\n {rightSlot}\n </div>\n {subtitle && (\n // Secondary description — `text-body-sm` (13px). One notch\n // below primary: establishes hierarchy via size AND color\n // (`text-black-40` vs. `text-black-90`) so the subtitle\n // clearly reads as supporting context, not a peer of the\n // title. 13 (not 12) so the description stays comfortably\n // readable across long text.\n <div className=\"text-body-sm text-black-40 mt-0.5 truncate\">{subtitle}</div>\n )}\n </div>\n </div>\n )\n}\n\n// Status badge tones.\nexport const STATUS_TONES = {\n healthy: { bg: 'bg-emerald-50', fg: 'text-emerald-700', dot: 'bg-emerald-500' },\n active: { bg: 'bg-emerald-50', fg: 'text-emerald-700', dot: 'bg-emerald-500' },\n completed: { bg: 'bg-emerald-50', fg: 'text-emerald-700', dot: 'bg-emerald-500' },\n success: { bg: 'bg-emerald-50', fg: 'text-emerald-700', dot: 'bg-emerald-500' },\n\n running: { bg: 'bg-sky-50', fg: 'text-sky-700', dot: 'bg-sky-500' },\n info: { bg: 'bg-sky-50', fg: 'text-sky-700', dot: 'bg-sky-500' },\n queued: { bg: 'bg-sky-50', fg: 'text-sky-700', dot: 'bg-sky-500' },\n\n drift: { bg: 'bg-amber-50', fg: 'text-amber-700', dot: 'bg-amber-500' },\n warn: { bg: 'bg-amber-50', fg: 'text-amber-700', dot: 'bg-amber-500' },\n\n failing: { bg: 'bg-rose-50', fg: 'text-rose-700', dot: 'bg-rose-500' },\n failed: { bg: 'bg-rose-50', fg: 'text-rose-700', dot: 'bg-rose-500' },\n error: { bg: 'bg-rose-50', fg: 'text-rose-700', dot: 'bg-rose-500' },\n\n paused: { bg: 'bg-black-6', fg: 'text-black-60', dot: 'bg-black-30' },\n neutral: { bg: 'bg-black-6', fg: 'text-black-60', dot: 'bg-black-30' },\n} as const\n\nexport type StatusTone = keyof typeof STATUS_TONES\n\nfunction StatusDotBadge({\n tone,\n label,\n pulse,\n className,\n}: {\n tone: StatusTone\n label: React.ReactNode\n pulse?: boolean\n className?: string\n}) {\n const palette = STATUS_TONES[tone]\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium',\n palette.bg,\n palette.fg,\n className,\n )}\n >\n <span\n className={cn(\n 'size-1.5 rounded-full',\n palette.dot,\n pulse && 'animate-pulse',\n )}\n />\n {label}\n </span>\n )\n}\n\ninterface SparklineCellProps {\n values: number[]\n /** Highlight a trailing portion in rose (e.g. failures near end). */\n highlightTail?: number\n label?: React.ReactNode\n /** Fixed pixel width of the sparkline area. */\n width?: number\n height?: number\n className?: string\n}\n\nfunction SparklineCell({\n values,\n highlightTail = 0,\n label,\n width = 60,\n height = 22,\n className,\n}: SparklineCellProps) {\n const max = Math.max(1, ...values)\n const tailStart = values.length - highlightTail\n return (\n <div className={cn('flex items-center gap-2 min-w-0', className)}>\n <div\n className=\"flex items-end gap-[1.5px] shrink-0\"\n style={{ width, height }}\n >\n {values.map((v, i) => {\n const h = (v / max) * 100\n const highlight = highlightTail > 0 && i >= tailStart\n return (\n <div\n key={i}\n className={cn(\n 'flex-1 rounded-[1px] min-h-[1.5px]',\n highlight ? 'bg-rose-500' : 'bg-black-15',\n )}\n style={{ height: `${h}%` }}\n />\n )\n })}\n </div>\n {label != null && (\n <span className=\"font-mono tabular-nums text-xs text-black-90\">{label}</span>\n )}\n </div>\n )\n}\n\ninterface ProgressBarCellProps {\n value: number\n total: number\n label?: React.ReactNode\n /** Tone applied to the fill bar. Defaults to neutral ink. */\n tone?: 'neutral' | 'running' | 'success' | 'danger'\n className?: string\n}\n\nfunction ProgressBarCell({\n value,\n total,\n label,\n tone = 'neutral',\n className,\n}: ProgressBarCellProps) {\n const pct = total === 0 ? 0 : Math.min(100, (value / total) * 100)\n const fill =\n tone === 'running'\n ? 'bg-sky-500'\n : tone === 'success'\n ? 'bg-emerald-500'\n : tone === 'danger'\n ? 'bg-rose-500'\n : 'bg-black-80'\n return (\n <div className={cn('flex items-center gap-2', className)}>\n <div className=\"flex-1 h-[5px] rounded bg-black-8 overflow-hidden\">\n <div className={cn('h-full', fill)} style={{ width: `${pct}%` }} />\n </div>\n {label != null && (\n <span className=\"font-mono tabular-nums text-xs text-black-40 whitespace-nowrap\">\n {label}\n </span>\n )}\n </div>\n )\n}\n\ninterface ResultsBarCellProps {\n passed: number\n warn?: number\n failed?: number\n className?: string\n}\n\nfunction ResultsBarCell({ passed, warn = 0, failed = 0, className }: ResultsBarCellProps) {\n const total = Math.max(1, passed + warn + failed)\n return (\n <div className={cn('flex items-center gap-1.5', className)}>\n <span className=\"font-mono tabular-nums text-xs text-emerald-700 min-w-[18px] text-right\">\n {passed}\n </span>\n <div className=\"flex-1 h-[5px] rounded overflow-hidden bg-black-6 flex\">\n <div className=\"h-full bg-emerald-500\" style={{ width: `${(passed / total) * 100}%` }} />\n <div className=\"h-full bg-amber-500\" style={{ width: `${(warn / total) * 100}%` }} />\n <div className=\"h-full bg-rose-500\" style={{ width: `${(failed / total) * 100}%` }} />\n </div>\n <span\n className={cn(\n 'font-mono tabular-nums text-xs min-w-[14px]',\n failed > 0 ? 'text-rose-700' : 'text-black-40',\n )}\n >\n {failed}\n </span>\n </div>\n )\n}\n\nfunction scoreBand(value: number): 'green' | 'amber' | 'red' {\n if (value < 0.5) return 'red'\n if (value < 0.78) return 'amber'\n return 'green'\n}\n\nfunction ScoreBarCell({\n value,\n className,\n}: {\n value: number | null | undefined\n className?: string\n}) {\n if (value == null) {\n return <span className=\"font-mono text-xs text-black-30\">—</span>\n }\n const band = scoreBand(value)\n const fg =\n band === 'green' ? 'text-emerald-700' : band === 'amber' ? 'text-amber-700' : 'text-rose-700'\n const bar =\n band === 'green' ? 'bg-emerald-500' : band === 'amber' ? 'bg-amber-500' : 'bg-rose-500'\n return (\n <div className={cn('inline-flex flex-col min-w-[52px]', className)}>\n <div className={cn('font-mono tabular-nums text-xs font-semibold text-center', fg)}>\n {value.toFixed(2)}\n </div>\n <div className=\"h-[3px] rounded mt-1 bg-black-8 overflow-hidden\">\n <div className={cn('h-full', bar)} style={{ width: `${value * 100}%` }} />\n </div>\n </div>\n )\n}\n\nfunction PercentCell({\n value,\n dangerBelow = 90,\n className,\n}: {\n value: number | null | undefined\n dangerBelow?: number\n className?: string\n}) {\n if (value == null) return <span className=\"text-black-30\">—</span>\n const danger = value < dangerBelow\n return (\n <span\n className={cn(\n 'font-mono tabular-nums text-xs',\n danger ? 'text-rose-700' : 'text-black-90',\n className,\n )}\n >\n {value.toFixed(0)}%\n </span>\n )\n}\n\n/**\n * Table-cell wrapper around `CodeBadge` for columns that render literal\n * strings (version labels, cron expressions, IDs). Kept as a separate export\n * so column definitions can stay value-oriented (`<CodePillCell value={v} />`)\n * rather than wrapping children — but the visual treatment now lives in\n * the shared `CodeBadge` primitive.\n */\nfunction CodePillCell({\n value,\n className,\n}: {\n value: React.ReactNode\n className?: string\n}) {\n return (\n <CodeBadge size=\"md\" className={className}>\n {value}\n </CodeBadge>\n )\n}\n\nfunction RelativeTimeCell({\n primary,\n secondary,\n className,\n}: {\n primary: React.ReactNode\n secondary?: React.ReactNode\n className?: string\n}) {\n return (\n <div className={cn('flex flex-col leading-tight', className)}>\n {/* Primary and secondary render in the default sans font. Relative\n time strings (\"2 min ago\", \"yesterday 14:22\", \"1w ago\") are\n prose, not numeric data — they don't benefit from monospace\n or tabular-nums, and rendering them in mono looks like\n bad-CSV debug output rather than human-readable time. If a\n consumer specifically needs tabular alignment on absolute\n timestamps (e.g., right-aligned ISO-8601 columns), they can\n pass classes via `className`. */}\n {/* Primary at `text-sm` (14px) — matches the default row voice\n across the table. Secondary drops to `text-body-sm` (13px)\n + `text-black-40` so the pair reads as \"main value + context\"\n rather than two equally-weighted strings. */}\n <span className=\"text-sm text-black-80\">{primary}</span>\n {secondary && (\n <span className=\"text-body-sm text-black-40 truncate\">{secondary}</span>\n )}\n </div>\n )\n}\n\nexport {\n ProDataTable,\n ProDataTableToolbar,\n ProDataTablePagination,\n AvatarTextCell,\n StatusDotBadge,\n SparklineCell,\n ProgressBarCell,\n ResultsBarCell,\n ScoreBarCell,\n PercentCell,\n CodePillCell,\n RelativeTimeCell,\n scoreBand,\n}\n","import { useState, useEffect } from 'react'\nimport { IconCheck, IconX } from '@tabler/icons-react'\nimport { cn } from '@shared/lib/utils'\nimport { Spinner } from './spinner'\n\ntype Status = 'idle' | 'pending' | 'success' | 'error'\n\ninterface AsyncActionButtonProps {\n onClick: () => void\n isPending: boolean\n isSuccess: boolean\n isError: boolean\n error?: Error | null\n icon: React.ReactNode\n label: string\n pendingLabel: string\n /** Label shown on success. Defaults to \"Triggered\". */\n successLabel?: string\n /** How long to show the success state before resetting (ms). */\n successTimeout?: number\n /** How long to show the error state before resetting (ms). */\n errorTimeout?: number\n className?: string\n}\n\n/**\n * Button that reflects the lifecycle of an async mutation:\n * idle → pending (spinner) → success/error (auto-resets).\n *\n * Designed to pair with TanStack Query's `useMutation` return values.\n */\nfunction AsyncActionButton({\n onClick,\n isPending,\n isSuccess,\n isError,\n error,\n icon,\n label,\n pendingLabel,\n successLabel = 'Triggered',\n successTimeout = 3000,\n errorTimeout = 5000,\n className,\n}: AsyncActionButtonProps) {\n const [status, setStatus] = useState<Status>('idle')\n\n useEffect(() => {\n if (isPending) {\n setStatus('pending')\n } else if (isSuccess && status === 'pending') {\n setStatus('success')\n const t = setTimeout(() => setStatus('idle'), successTimeout)\n return () => clearTimeout(t)\n } else if (isError && status === 'pending') {\n setStatus('error')\n const t = setTimeout(() => setStatus('idle'), errorTimeout)\n return () => clearTimeout(t)\n }\n }, [isPending, isSuccess, isError])\n\n return (\n <div data-slot=\"async-action-button\" className=\"flex items-center gap-2\">\n {status === 'success' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-emerald-600 animate-in fade-in duration-200\">\n <IconCheck size={13} /> {successLabel}\n </span>\n )}\n {status === 'error' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-red-500 animate-in fade-in duration-200\">\n <IconX size={13} /> {error?.message?.slice(0, 40) ?? 'Failed'}\n </span>\n )}\n <button\n onClick={onClick}\n disabled={status === 'pending'}\n className={cn(\n 'flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-medium transition-colors ring-1 ring-border/60',\n status === 'pending'\n ? 'cursor-not-allowed bg-muted text-muted-foreground'\n : 'bg-background text-muted-foreground hover:bg-muted hover:text-foreground',\n className,\n )}\n >\n {status === 'pending' ? <Spinner size=\"sm\" /> : icon}\n {status === 'pending' ? pendingLabel : label}\n </button>\n </div>\n )\n}\n\nexport { AsyncActionButton }\nexport type { AsyncActionButtonProps }\n","import * as React from 'react'\nimport { UploadCloud, File as FileIcon, X } from 'lucide-react'\n\nimport { cn } from '@shared/lib/utils'\nimport { Button } from './button'\n\n/**\n * FileDropzone — drag-and-drop file upload surface.\n *\n * Shadcn doesn't ship a first-class file-upload primitive in the core\n * registry, so this is Atlas's canonical version — built in the same\n * house style: `cn()`, `forwardRef`, design-token palette, composable\n * via children, and zero external dependencies (no `react-dropzone`).\n *\n * Core behaviors:\n * - Drag-and-drop OR click-to-browse OR keyboard (Enter/Space)\n * - Paste support (Ctrl/Cmd+V while focused)\n * - Validation: `accept` (mime / extension), `maxFiles`, `maxSize`\n * - Rejection reporting via `onReject({ file, reason })`\n * - Controlled (`value` + `onValueChange`) or uncontrolled\n * - Matches Input/Select/Textarea on radius (8px), border color\n * (`border-input` dashed), and focus ring (1px). Surface is\n * `bg-muted` — a subtle tinted fill that differentiates the drop\n * target from the white page backdrop. Hover / drag states\n * darken via `bg-accent/40` and `bg-accent/60` respectively.\n *\n * Usage — simplest form (uncontrolled):\n * ```tsx\n * <FileDropzone accept=\"image/*\" maxSize={5 * 1024 * 1024} onFilesAdded={upload} />\n * ```\n *\n * Controlled with file list:\n * ```tsx\n * const [files, setFiles] = useState<File[]>([])\n * <FileDropzone value={files} onValueChange={setFiles} multiple />\n * <FileDropzoneList files={files} onRemove={(f) => setFiles(prev => prev.filter(x => x !== f))} />\n * ```\n */\n\nexport interface FileRejection {\n file: File\n /**\n * Reason the file was rejected. Discrete codes so consumers can\n * localize or branch on them rather than parsing strings.\n */\n reason: 'invalid-type' | 'too-large' | 'too-many' | 'empty'\n message: string\n}\n\ninterface FileDropzoneProps {\n /**\n * Controlled list of files. Omit for uncontrolled — the dropzone\n * holds its own internal list and emits adds/removes via callbacks.\n */\n value?: File[]\n /** Controlled counterpart — fires with the full updated list. */\n onValueChange?: (files: File[]) => void\n /**\n * Fires with files that passed validation and were added to the set.\n * Useful when you want to start an upload immediately rather than\n * wait for an explicit \"Submit\" action.\n */\n onFilesAdded?: (files: File[]) => void\n /**\n * Fires with files that were dropped/selected but rejected. Report\n * these to the user — typically via a toast or inline error.\n */\n onReject?: (rejections: FileRejection[]) => void\n /**\n * MIME types or extensions accepted by the file picker. Passed\n * verbatim to the native `<input>` `accept` attribute. Use the\n * native format: `\"image/*,application/pdf,.jsonl\"`.\n */\n accept?: string\n /** Max files in the total set. Defaults to `Infinity`. */\n maxFiles?: number\n /** Max size per file in bytes. Defaults to `Infinity`. */\n maxSize?: number\n /** Allow multiple selections. Default `true`. */\n multiple?: boolean\n /** Disable interaction + dim the surface. */\n disabled?: boolean\n /**\n * Error state — destructive border + `aria-invalid`. Mirrors\n * Input / Select / Textarea so form primitives share a surface.\n */\n error?: boolean | string\n /**\n * Override the default empty-state UI. When omitted, a centered\n * upload icon + \"Drop files here or click to browse\" label renders\n * using the `accept` / `maxSize` props as the hint line.\n */\n children?: React.ReactNode\n className?: string\n}\n\nconst FileDropzone = React.forwardRef<HTMLDivElement, FileDropzoneProps>(\n (\n {\n value,\n onValueChange,\n onFilesAdded,\n onReject,\n accept,\n maxFiles = Infinity,\n maxSize = Infinity,\n multiple = true,\n disabled,\n error,\n children,\n className,\n },\n ref,\n ) => {\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [dragActive, setDragActive] = React.useState(false)\n const [internalFiles, setInternalFiles] = React.useState<File[]>([])\n // Dragenter/leave fire per child element, so we need a counter to\n // tell whether we've truly left the dropzone vs. moved between a\n // child and its parent. Without this, hovering over a nested icon\n // would flicker the drag state.\n const dragCounterRef = React.useRef(0)\n\n const isControlled = value !== undefined\n const files = isControlled ? value : internalFiles\n const hasError = !!error\n\n const commitFiles = React.useCallback(\n (next: File[]) => {\n if (isControlled) {\n onValueChange?.(next)\n } else {\n setInternalFiles(next)\n onValueChange?.(next)\n }\n },\n [isControlled, onValueChange],\n )\n\n const addFiles = React.useCallback(\n (incoming: FileList | File[]) => {\n if (disabled) return\n const candidates = Array.from(incoming)\n const accepted: File[] = []\n const rejected: FileRejection[] = []\n\n // Treat the `maxFiles` budget against the EXISTING set so\n // repeated drops don't silently overwrite earlier selections.\n const remainingSlots = maxFiles - files.length\n\n for (const file of candidates) {\n if (accepted.length >= remainingSlots) {\n rejected.push({\n file,\n reason: 'too-many',\n message: `Exceeds max of ${maxFiles} file${maxFiles === 1 ? '' : 's'}.`,\n })\n continue\n }\n if (file.size === 0) {\n rejected.push({ file, reason: 'empty', message: 'File is empty.' })\n continue\n }\n if (file.size > maxSize) {\n rejected.push({\n file,\n reason: 'too-large',\n message: `${formatBytes(file.size)} exceeds ${formatBytes(maxSize)} limit.`,\n })\n continue\n }\n if (accept && !matchesAccept(file, accept)) {\n rejected.push({\n file,\n reason: 'invalid-type',\n message: `File type not accepted. Use ${accept}.`,\n })\n continue\n }\n accepted.push(file)\n }\n\n if (accepted.length > 0) {\n const next = multiple ? [...files, ...accepted] : accepted.slice(0, 1)\n commitFiles(next)\n onFilesAdded?.(accepted)\n }\n if (rejected.length > 0) {\n onReject?.(rejected)\n }\n },\n [disabled, files, maxFiles, maxSize, accept, multiple, commitFiles, onFilesAdded, onReject],\n )\n\n // Paste handler — bind when dropzone is focused. Lets users paste a\n // file from the clipboard (Figma screenshots, copied attachments).\n const onPaste = React.useCallback(\n (e: React.ClipboardEvent) => {\n if (disabled) return\n const items = e.clipboardData?.files\n if (items && items.length > 0) {\n e.preventDefault()\n addFiles(items)\n }\n },\n [disabled, addFiles],\n )\n\n function openPicker() {\n if (disabled) return\n inputRef.current?.click()\n }\n\n return (\n <div\n ref={ref}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n aria-invalid={hasError || undefined}\n onKeyDown={(e) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n openPicker()\n }\n }}\n onClick={openPicker}\n onPaste={onPaste}\n onDragEnter={(e) => {\n if (disabled) return\n e.preventDefault()\n e.stopPropagation()\n dragCounterRef.current += 1\n setDragActive(true)\n }}\n onDragOver={(e) => {\n if (disabled) return\n e.preventDefault()\n e.stopPropagation()\n }}\n onDragLeave={(e) => {\n if (disabled) return\n e.preventDefault()\n e.stopPropagation()\n dragCounterRef.current -= 1\n if (dragCounterRef.current <= 0) {\n dragCounterRef.current = 0\n setDragActive(false)\n }\n }}\n onDrop={(e) => {\n if (disabled) return\n e.preventDefault()\n e.stopPropagation()\n dragCounterRef.current = 0\n setDragActive(false)\n if (e.dataTransfer.files?.length) {\n addFiles(e.dataTransfer.files)\n }\n }}\n className={cn(\n // Shared radius / border / focus-ring language with Input /\n // Select / Textarea (8px, 1px focus ring) so a form that\n // stacks a dropzone + text inputs reads as one coherent\n // control set. The border is DASHED (not solid) in the idle\n // state to signal \"drop target here\" without competing with\n // the solid-bordered fields around it.\n //\n // Surface — `bg-muted` (= `--color-black-4`, a warm 4%\n // black-on-white wash). The subtle tint is what makes the\n // dropzone visually read as an interactive target on a\n // white page backdrop. White-on-white with only a dashed\n // border reads as empty space; the tinted fill pulls the\n // drop area forward. Same token as table headers / sticky\n // cell hover / accent surfaces elsewhere, so no new color\n // is introduced to the theme.\n 'group relative flex min-h-[8rem] w-full flex-col items-center justify-center rounded-sm border border-dashed bg-muted px-6 py-8 text-center',\n 'transition-colors cursor-pointer',\n 'focus:outline-none focus:ring-1 focus:ring-ring focus:ring-offset-0',\n // Drag + hover states darken the tint one step via\n // `bg-accent/40` (drag active) and `bg-accent/20` (hover).\n // Both fall under the same `--accent` token family, so the\n // progression idle → hover → drag-active reads as a single\n // color lifting incrementally rather than three unrelated\n // shades.\n dragActive\n ? 'border-foreground bg-accent/60'\n : hasError\n ? 'border-destructive hover:bg-accent/40'\n : 'border-input hover:border-foreground/40 hover:bg-accent/40',\n disabled && 'cursor-not-allowed opacity-60 hover:bg-muted',\n className,\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"sr-only\"\n onChange={(e) => {\n if (e.target.files?.length) {\n addFiles(e.target.files)\n }\n // Reset so selecting the same file twice re-triggers\n // onChange — browsers deduplicate identical values on\n // <input type=\"file\"> otherwise.\n e.target.value = ''\n }}\n />\n\n {children ?? (\n <DefaultEmptyState accept={accept} maxSize={maxSize} multiple={multiple} />\n )}\n </div>\n )\n },\n)\nFileDropzone.displayName = 'FileDropzone'\n\n// ─── Default empty-state UI ──────────────────────────────────────────────────\n\nfunction DefaultEmptyState({\n accept,\n maxSize,\n multiple,\n}: {\n accept?: string\n maxSize: number\n multiple: boolean\n}) {\n const hint = [\n accept ? humanizeAccept(accept) : 'Any file type',\n maxSize !== Infinity ? `up to ${formatBytes(maxSize)}` : null,\n ]\n .filter(Boolean)\n .join(' · ')\n\n return (\n <>\n <div\n className={cn(\n // Icon tile — matches the leading tile in ChoiceCard / KPI,\n // uses `--radius-sm` to stay consistent with the dropzone\n // radius.\n 'flex size-10 items-center justify-center rounded-sm bg-accent text-foreground',\n 'transition-colors group-hover:bg-foreground group-hover:text-background',\n )}\n >\n <UploadCloud className=\"size-5\" aria-hidden />\n </div>\n <div className=\"mt-3 flex flex-col gap-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {multiple ? 'Drop files here or click to browse' : 'Drop a file here or click to browse'}\n </p>\n {hint && <p className=\"text-xs text-muted-foreground\">{hint}</p>}\n </div>\n </>\n )\n}\n\n// ─── File list primitive ─────────────────────────────────────────────────────\n\ninterface FileDropzoneListProps extends React.HTMLAttributes<HTMLUListElement> {\n files: File[]\n onRemove?: (file: File) => void\n}\n\n/**\n * Companion component — renders the current file selection as a list\n * with per-item remove buttons. Separate from `FileDropzone` on\n * purpose: some layouts want the list above the dropzone, some below,\n * some inside a dialog. The dropzone emits the file array; callers\n * render however they want.\n */\nconst FileDropzoneList = React.forwardRef<HTMLUListElement, FileDropzoneListProps>(\n ({ files, onRemove, className, ...props }, ref) => {\n if (files.length === 0) return null\n return (\n <ul\n ref={ref}\n data-slot=\"file-dropzone-list\"\n className={cn('flex w-full flex-col gap-1.5', className)}\n {...props}\n >\n {files.map((file, idx) => (\n <li\n key={`${file.name}-${file.size}-${idx}`}\n className=\"flex items-center gap-3 rounded-sm border border-input bg-background px-3 py-2\"\n >\n <FileIcon className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium text-foreground\">{file.name}</p>\n <p className=\"text-xs text-muted-foreground\">{formatBytes(file.size)}</p>\n </div>\n {onRemove && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => onRemove(file)}\n aria-label={`Remove ${file.name}`}\n >\n <X className=\"size-4\" />\n </Button>\n )}\n </li>\n ))}\n </ul>\n )\n },\n)\nFileDropzoneList.displayName = 'FileDropzoneList'\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/**\n * Format a byte count to a human-readable string. Matches the\n * conventions users expect in file dialogs: 1024-base, one decimal\n * place once past KB.\n */\nexport function formatBytes(bytes: number): string {\n if (!Number.isFinite(bytes)) return '∞'\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / 1024 / 1024).toFixed(1)} MB`\n return `${(bytes / 1024 / 1024 / 1024).toFixed(1)} GB`\n}\n\n/**\n * Replicate the browser's `accept` matching so we can reject files\n * that sneak in via drag-and-drop (which doesn't honor `accept`). The\n * native `<input>` only applies the filter in the file picker — drops\n * bypass it entirely, so we validate here.\n *\n * Rules match MDN's `HTMLInputElement.accept` semantics:\n * - \".ext\" — matches files whose name ends with that extension\n * - \"mime/type\" — exact mime match\n * - \"mime/*\" — mime prefix match (e.g., `image/*`)\n */\nfunction matchesAccept(file: File, accept: string): boolean {\n const specs = accept\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n if (specs.length === 0) return true\n\n const name = file.name.toLowerCase()\n const type = file.type\n\n return specs.some((spec) => {\n if (spec.startsWith('.')) {\n return name.endsWith(spec.toLowerCase())\n }\n if (spec.endsWith('/*')) {\n return type.startsWith(spec.slice(0, -1))\n }\n return type === spec\n })\n}\n\n/**\n * Convert the machine `accept` string into something a user can read\n * for the empty-state hint line. \"image/*,application/pdf,.jsonl\" →\n * \"Images, PDF, JSONL\".\n */\nfunction humanizeAccept(accept: string): string {\n return accept\n .split(',')\n .map((s) => s.trim())\n .map((spec) => {\n if (spec.startsWith('.')) return spec.slice(1).toUpperCase()\n if (spec === 'image/*') return 'Images'\n if (spec === 'video/*') return 'Videos'\n if (spec === 'audio/*') return 'Audio'\n if (spec.endsWith('/*')) {\n return spec.slice(0, -2).charAt(0).toUpperCase() + spec.slice(1, -2) + ' files'\n }\n // \"application/pdf\" → \"PDF\"\n const sub = spec.split('/')[1] ?? spec\n return sub.toUpperCase()\n })\n .join(', ')\n}\n\nexport { FileDropzone, FileDropzoneList }\nexport type { FileDropzoneProps, FileDropzoneListProps }\n","import { useRef, useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\n\nimport { cn } from '@shared/lib/utils'\n\n/**\n * FilterPill — a compact multi-select filter anchored to a table toolbar.\n *\n * Visual contract mirrors `SelectTrigger` so a toolbar of FilterPills +\n * SearchInput + Select reads as one coherent row of controls, not a\n * grab-bag of visual treatments:\n *\n * - Height: h-9 (36px)\n * - Radius: rounded-sm (8px, `--radius-sm`)\n * - Border/bg: `border bg-background` — `--input` color, white\n * surface — same palette as Select/Input\n * - Padding: px-3 py-1\n * - Text: text-base md:text-sm (14px on desktop)\n * - Focus ring: focus:ring-1 focus:ring-ring (keyboard-visible)\n *\n * Rationale for NOT using `rounded-full` + primary fill (the old shape):\n * 1. Visual noise. When a toolbar mixes a SearchInput (8px radius),\n * two FilterPills (full radius), and a Select (8px radius), the\n * eye has to re-parse each control. A consistent radius reads as\n * one group.\n * 2. Active state hierarchy. A solid primary-colored pill made the\n * active filter feel like a CTA. Filters are not CTAs — the\n * primary action on a dashboard is \"run query\" / \"save\", not\n * \"I've narrowed my view\". A subtle count chip communicates\n * activity without competing with real buttons.\n *\n * Active state now uses a tiny pill-shaped count badge next to the\n * label. The trigger itself stays in the Select-aligned neutral look.\n */\n\ninterface FilterPillProps {\n label: string\n options: string[]\n selected: string[]\n onChange: (values: string[]) => void\n}\n\nexport function FilterPill({ label, options, selected, onChange }: FilterPillProps) {\n const [open, setOpen] = useState(false)\n const triggerRef = useRef<HTMLButtonElement>(null)\n const active = selected.length > 0\n\n const toggle = (value: string) => {\n onChange(\n selected.includes(value)\n ? selected.filter((v) => v !== value)\n : [...selected, value],\n )\n }\n\n if (!options.length) return null\n\n return (\n <div data-slot=\"filter-pill\" className=\"relative\">\n <button\n ref={triggerRef}\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n className={cn(\n // Matches `SelectTrigger` — see `select.tsx`. Any deviation\n // breaks the toolbar's coherent-controls aesthetic.\n 'flex h-9 items-center justify-between gap-2 whitespace-nowrap rounded-sm border bg-background px-3 py-1 text-base md:text-sm',\n 'ring-offset-background transition-colors',\n 'focus:outline-none focus:ring-1 focus:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n // Active filter: keep the neutral Select surface, bump the\n // border to the foreground so the control reads as \"on\"\n // without becoming a filled CTA. Text stays the default\n // foreground — the count chip below carries the quantitative\n // meaning.\n active\n ? 'border-foreground text-foreground'\n : 'border-input text-muted-foreground hover:text-foreground',\n )}\n >\n <span className=\"flex items-center gap-1.5\">\n <span>{label}</span>\n {active && (\n <span\n // Compact count chip — communicates \"how many filters are\n // applied\" at a glance. `rounded-full` here is a CHIP\n // treatment (fine at ~18px diameter for a 1-2 digit\n // count), distinct from the old full-radius trigger\n // (wrong for this toolbar density). `bg-foreground /\n // text-background` matches Tooltip's token pair for\n // neutral informational UI. Text uses `text-xs` (12px\n // floor) — density comes from the chip's diameter, not\n // from sub-12 type.\n className=\"inline-flex h-[18px] min-w-[18px] items-center justify-center rounded-full bg-foreground px-1 text-xs font-semibold leading-none text-background tabular-nums\"\n aria-label={`${selected.length} selected`}\n >\n {selected.length}\n </span>\n )}\n </span>\n <ChevronDown\n className={cn(\n 'size-4 opacity-50 transition-transform',\n open && 'rotate-180',\n )}\n />\n </button>\n\n {open && (\n <>\n {/* Click-outside scrim */}\n <div\n className=\"fixed inset-0 z-10\"\n onClick={() => setOpen(false)}\n aria-hidden\n />\n <div\n role=\"listbox\"\n aria-multiselectable=\"true\"\n // Matches `SelectContent` — `rounded-md` (10px, one notch\n // larger than the trigger per shadcn's popover convention),\n // `border bg-popover shadow-md`. Reuses `popover` tokens so\n // the dropdown reads as an Atlas popover, not a bespoke\n // floating menu.\n className=\"absolute left-0 top-full z-20 mt-1 max-h-64 w-52 overflow-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md\"\n >\n {selected.length > 0 && (\n <button\n type=\"button\"\n onClick={() => onChange([])}\n className=\"w-full rounded-sm px-2 py-1.5 text-left text-xs font-medium text-muted-foreground hover:bg-accent hover:text-accent-foreground\"\n >\n Clear all\n </button>\n )}\n {options.map((opt) => {\n const checked = selected.includes(opt)\n return (\n <label\n key={opt}\n className=\"flex cursor-pointer items-center gap-2.5 rounded-sm px-2 py-1.5 text-sm transition-colors hover:bg-accent\"\n >\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() => toggle(opt)}\n className=\"size-3.5 rounded-xs border-input text-foreground focus:ring-1 focus:ring-ring\"\n />\n <span className={cn('truncate', checked ? 'text-foreground' : 'text-muted-foreground')}>\n {opt}\n </span>\n </label>\n )\n })}\n </div>\n </>\n )}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@shared/lib/utils'\n\ninterface SegmentedControlOption<T extends string> {\n value: T\n label: string\n icon?: ReactNode\n}\n\ninterface SegmentedControlProps<T extends string> {\n options: SegmentedControlOption<T>[]\n value: T\n onChange: (value: T) => void\n className?: string\n}\n\nexport function SegmentedControl<T extends string>({\n options,\n value,\n onChange,\n className,\n}: SegmentedControlProps<T>) {\n return (\n <div\n data-slot=\"segmented-control\"\n // Container carries a subtle black-opacity fill (`bg-black-4`)\n // that frames the control without a hard border. The selected\n // pill contrasts by switching back to pure `bg-background` (white)\n // plus a hairline border — this reads as \"lifted above the track\"\n // without needing a drop shadow.\n //\n // Radius — outer `rounded-md` (10px, `--radius-md`) + inner\n // `rounded-sm` (8px, `--radius-sm`). The 2px delta MATCHES the\n // container's `p-0.5` padding so the inner pill and the outer\n // track stay concentric (outer_radius - padding = inner_radius).\n // Any other combination makes the corners look kinked where the\n // selected pill meets the track. `rounded-lg` (14px) here read\n // as \"pill-shaped\" / segmented-button-from-2016 — tighter corners\n // match the rest of the design system (Button, Select, Input all\n // at `rounded-sm` or `rounded-md`).\n className={cn(\n 'inline-flex h-8 w-fit items-center rounded-md bg-black-4 p-0.5',\n className,\n )}\n >\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => value !== opt.value && onChange(opt.value)}\n aria-pressed={value === opt.value}\n className={cn(\n // Border is always rendered (transparent on unselected) so\n // the button's rendered height stays constant across states\n // — without this, the selected border would push the pill\n // 2px taller than its siblings.\n 'inline-flex h-7 cursor-pointer items-center gap-1.5 rounded-sm border px-2.5 text-xs font-medium transition-colors',\n value === opt.value\n ? 'border-black-10 bg-background text-foreground'\n : 'border-transparent text-black-60 hover:text-black-90',\n )}\n >\n {opt.icon}\n {opt.label}\n </button>\n ))}\n </div>\n )\n}\n","import { cn } from '@shared/lib/utils'\n\ninterface ErrorStateProps {\n message: string\n className?: string\n}\n\nexport function ErrorState({ message, className }: ErrorStateProps) {\n return (\n <div\n data-slot=\"error-state\"\n className={cn(\n 'rounded-xl border border-red-200 bg-red-50 px-5 py-4 text-sm font-medium text-red-700',\n className,\n )}\n >\n {message}\n </div>\n )\n}\n","import { cn } from '@shared/lib/utils'\n\ntype PageSkeletonVariant = 'default' | 'list' | 'detail' | 'dashboard'\n\ninterface PageSkeletonProps {\n variant?: PageSkeletonVariant\n className?: string\n}\n\nfunction SkeletonBlock({ className, style }: { className?: string; style?: React.CSSProperties }) {\n return (\n <div\n className={cn(\n 'animate-pulse rounded bg-gradient-to-r from-muted via-border to-muted bg-[length:200%_100%]',\n className,\n )}\n style={style}\n />\n )\n}\n\nfunction DefaultSkeleton() {\n return (\n <div className=\"flex flex-col gap-6 p-8\">\n <SkeletonBlock className=\"h-8 w-48\" />\n <SkeletonBlock className=\"h-4 w-96\" />\n <div className=\"flex flex-col gap-3 mt-4\">\n <SkeletonBlock className=\"h-4 w-full max-w-2xl\" />\n <SkeletonBlock className=\"h-4 w-full max-w-xl\" />\n <SkeletonBlock className=\"h-4 w-full max-w-lg\" />\n </div>\n </div>\n )\n}\n\nfunction ListSkeleton() {\n return (\n <div className=\"flex flex-col h-full\">\n <div className=\"flex items-center justify-between p-6 pb-4\">\n <SkeletonBlock className=\"h-8 w-40\" />\n <div className=\"flex items-center gap-3\">\n <SkeletonBlock className=\"h-9 w-24 rounded-md\" />\n <SkeletonBlock className=\"h-9 w-32 rounded-md\" />\n </div>\n </div>\n <div className=\"px-6\">\n <div className=\"flex gap-4 py-3 border-b border-border\">\n {[120, 200, 160, 100, 80].map((w, i) => (\n <SkeletonBlock key={i} className=\"h-4 flex-shrink-0\" style={{ width: w }} />\n ))}\n </div>\n {Array.from({ length: 8 }).map((_, row) => (\n <div key={row} className=\"flex gap-4 py-4 border-b border-muted\">\n {[120, 200, 160, 100, 80].map((w, i) => (\n <SkeletonBlock\n key={i}\n className=\"h-4 flex-shrink-0\"\n style={{ width: w, animationDelay: `${row * 0.05}s` }}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction DetailSkeleton() {\n return (\n <div className=\"flex h-full\">\n <div className=\"w-80 border-r border-border p-6 flex flex-col gap-4\">\n <SkeletonBlock className=\"h-6 w-32\" />\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 py-2\">\n <SkeletonBlock className=\"h-8 w-8 rounded-md\" />\n <SkeletonBlock className=\"h-4 flex-1\" />\n </div>\n ))}\n </div>\n <div className=\"flex-1 p-8 flex flex-col gap-6\">\n <SkeletonBlock className=\"h-8 w-64\" />\n <SkeletonBlock className=\"h-4 w-96\" />\n <div className=\"grid grid-cols-2 gap-4 mt-4\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"flex flex-col gap-2 p-4 border border-border rounded-lg\">\n <SkeletonBlock className=\"h-3 w-20\" />\n <SkeletonBlock className=\"h-6 w-32\" />\n </div>\n ))}\n </div>\n <div className=\"flex flex-col gap-3 mt-4\">\n <SkeletonBlock className=\"h-4 w-full max-w-2xl\" />\n <SkeletonBlock className=\"h-4 w-full max-w-xl\" />\n <SkeletonBlock className=\"h-4 w-full max-w-lg\" />\n </div>\n </div>\n </div>\n )\n}\n\nfunction DashboardSkeleton() {\n return (\n <div className=\"flex flex-col gap-6 p-8\">\n <div className=\"flex items-center justify-between\">\n <SkeletonBlock className=\"h-8 w-48\" />\n <div className=\"flex items-center gap-3\">\n <SkeletonBlock className=\"h-9 w-28 rounded-md\" />\n <SkeletonBlock className=\"h-9 w-28 rounded-md\" />\n </div>\n </div>\n <div className=\"grid grid-cols-4 gap-4\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"flex flex-col gap-2 p-5 border border-border rounded-xl\">\n <SkeletonBlock className=\"h-3 w-20\" />\n <SkeletonBlock className=\"h-7 w-24\" />\n <SkeletonBlock className=\"h-3 w-16\" />\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-2 gap-6\">\n <div className=\"border border-border rounded-xl p-5 flex flex-col gap-4\">\n <SkeletonBlock className=\"h-5 w-32\" />\n <SkeletonBlock className=\"h-48 w-full rounded-lg\" />\n </div>\n <div className=\"border border-border rounded-xl p-5 flex flex-col gap-4\">\n <SkeletonBlock className=\"h-5 w-32\" />\n <SkeletonBlock className=\"h-48 w-full rounded-lg\" />\n </div>\n </div>\n </div>\n )\n}\n\nconst variants: Record<PageSkeletonVariant, () => React.ReactNode> = {\n default: DefaultSkeleton,\n list: ListSkeleton,\n detail: DetailSkeleton,\n dashboard: DashboardSkeleton,\n}\n\nfunction PageSkeleton({ variant = 'default', className }: PageSkeletonProps) {\n const Variant = variants[variant]\n return (\n <div data-slot=\"page-skeleton\" className={cn('h-full w-full bg-background', className)}>\n <Variant />\n </div>\n )\n}\n\nexport { PageSkeleton, SkeletonBlock }\nexport type { PageSkeletonVariant, PageSkeletonProps }\n","import { cn } from '@shared/lib/utils'\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn('bg-accent animate-pulse rounded-md', className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","'use client'\n\nimport { cn } from '@shared/lib/utils'\nimport { Spinner } from './spinner'\n\ninterface RouteLoadingProps {\n className?: string\n}\n\nfunction RouteLoading({ className }: RouteLoadingProps) {\n return (\n <div\n data-slot=\"route-loading\"\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n 'flex h-full w-full items-center justify-center animate-in fade-in duration-200 delay-150',\n className,\n )}\n >\n <Spinner size=\"lg\" />\n </div>\n )\n}\n\nexport { RouteLoading }\nexport type { RouteLoadingProps }\n","import * as React from 'react'\nimport { cn } from '@shared/lib/utils'\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from './tooltip'\nimport { Button } from './button'\n\ninterface AckUser {\n userId: string\n displayName: string\n at: string\n}\n\ninterface AckBadgesProps {\n ack1?: AckUser\n ack2?: AckUser\n currentUserId: string\n requiredAcks: 1 | 2\n onAck?: () => void\n onUnack?: () => void\n disabled?: boolean\n // When set, the Ack button is disabled and the tooltip surfaces the\n // reason. Use this for callers that have a precondition the badge\n // can't infer (e.g. \"row has no recommendation yet\" — clicking Ack\n // without a recommendation would be a silent no-op on the BE).\n disabledReason?: string\n className?: string\n}\n\nfunction formatAckTimestamp(iso: string): string {\n try {\n return new Date(iso).toLocaleString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n })\n } catch {\n return iso\n }\n}\n\nfunction AckChip({ ack, label }: { ack: AckUser; label: string }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n data-slot=\"ack-chip\"\n className=\"flex items-center gap-xs rounded-full border border-green-600/20 bg-green-600/10 px-sm py-0.5\"\n >\n <div\n className=\"flex size-5 shrink-0 items-center justify-center rounded-full bg-green-600/20 text-xs font-medium text-green-600\"\n aria-label={ack.displayName}\n >\n {ack.displayName.charAt(0).toUpperCase()}\n </div>\n <span className=\"text-xs font-medium text-green-600\">{label}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent>\n {ack.displayName} acked at {formatAckTimestamp(ack.at)}\n </TooltipContent>\n </Tooltip>\n )\n}\n\nfunction AckBadges({\n ack1,\n ack2,\n currentUserId,\n requiredAcks,\n onAck,\n onUnack,\n disabled,\n disabledReason,\n className,\n}: AckBadgesProps) {\n const currentUserHasAcked =\n currentUserId === ack1?.userId || currentUserId === ack2?.userId\n\n const totalAcks = (ack1 ? 1 : 0) + (ack2 ? 1 : 0)\n const fullyAcked = totalAcks >= requiredAcks\n\n return (\n <TooltipProvider>\n <div\n data-slot=\"ack-badges\"\n className={cn('flex items-center gap-sm', className)}\n >\n {ack1 && <AckChip ack={ack1} label=\"Ack 1\" />}\n\n {requiredAcks === 2 && ack1 && !ack2 && (\n <div\n data-slot=\"ack-placeholder\"\n className=\"flex items-center gap-xs rounded-full border border-dashed border-black-10 px-sm py-0.5\"\n >\n <div className=\"size-5 shrink-0 rounded-full bg-black-6\" />\n <span className=\"text-xs text-black-30\">Awaiting Ack 2</span>\n </div>\n )}\n\n {ack2 && <AckChip ack={ack2} label=\"Ack 2\" />}\n\n {!fullyAcked && onAck && (\n <Tooltip>\n <TooltipTrigger asChild>\n <span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onAck}\n disabled={disabled || currentUserHasAcked || disabledReason != null}\n className=\"h-6 px-2 text-xs\"\n aria-label={\n disabledReason != null\n ? disabledReason\n : currentUserHasAcked\n ? 'You have already acked this row'\n : 'Acknowledge this row'\n }\n >\n Ack\n </Button>\n </span>\n </TooltipTrigger>\n {disabledReason != null ? (\n <TooltipContent>{disabledReason}</TooltipContent>\n ) : currentUserHasAcked ? (\n <TooltipContent>You have already acked this row</TooltipContent>\n ) : null}\n </Tooltip>\n )}\n\n {currentUserHasAcked && onUnack && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onUnack}\n disabled={disabled}\n className=\"h-6 px-2 text-xs text-black-40\"\n aria-label=\"Remove your acknowledgement\"\n >\n Unack\n </Button>\n )}\n </div>\n </TooltipProvider>\n )\n}\n\nexport { AckBadges }\nexport type { AckBadgesProps, AckUser }\n","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a, _b, _c;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst getRect = (element) => {\n const { offsetWidth, offsetHeight } = element;\n return { width: offsetWidth, height: offsetHeight };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.scrollState = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.now = () => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = this.targetWindow) == null ? void 0 : _a.performance) == null ? void 0 : _b.now) == null ? void 0 : _c.call(_b)) ?? Date.now();\n };\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n const node = entry.target;\n const index = this.indexFromElement(node);\n if (!node.isConnected) {\n this.observer.unobserve(node);\n return;\n }\n if (this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(\n index,\n this.options.measureElement(node, entry, this)\n );\n }\n };\n this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n laneAssignmentMode: \"estimate\",\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n if (this.rafId != null && this.targetWindow) {\n this.targetWindow.cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.scrollState = null;\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n if (this.scrollState) {\n this.scheduleScrollReconcile();\n }\n this.maybeNotify();\n })\n );\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n }\n };\n this.rafId = null;\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes,\n this.options.laneAssignmentMode\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode\n }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMeasuredCacheIndexes = [];\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n laneLastIndex[item.lane] = m;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n const shouldCacheLane = laneAssignmentMode === \"estimate\" || itemSizeCache.has(key);\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;\n } else {\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n if (this.options.lanes > 1 && shouldCacheLane) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n laneLastIndex[lane] = i;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this.shouldMeasureDuringScroll = (index) => {\n var _a;\n if (!this.scrollState || this.scrollState.behavior !== \"smooth\") {\n return true;\n }\n const scrollIndex = this.scrollState.index ?? ((_a = this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)) == null ? void 0 : _a.index);\n if (scrollIndex !== void 0 && this.range) {\n const bufferSize = Math.max(\n this.options.overscan,\n Math.ceil((this.range.endIndex - this.range.startIndex) / 2)\n );\n const minIndex = Math.max(0, scrollIndex - bufferSize);\n const maxIndex = Math.min(\n this.options.count - 1,\n scrollIndex + bufferSize\n );\n return index >= minIndex && index <= maxIndex;\n }\n return true;\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key2) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key2);\n }\n });\n return;\n }\n const index = this.indexFromElement(node);\n const key = this.options.getItemKey(index);\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if ((!this.isScrolling || this.scrollState) && this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(index, this.options.measureElement(node, void 0, this));\n }\n };\n this.resizeItem = (index, size) => {\n var _a;\n const item = this.measurementsCache[index];\n if (!item) return;\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (((_a = this.scrollState) == null ? void 0 : _a.behavior) !== \"smooth\" && (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments)) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0;\n if (\"scrollHeight\" in this.scrollElement) {\n return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;\n } else {\n const doc = this.scrollElement.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;\n }\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n const item = this.measurementsCache[index];\n if (!item) return;\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.scrollToOffset = (toOffset, { align = \"start\", behavior = \"auto\" } = {}) => {\n const offset = this.getOffsetForAlignment(toOffset, align);\n const now = this.now();\n this.scrollState = {\n index: null,\n align,\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0\n };\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.scheduleScrollReconcile();\n };\n this.scrollToIndex = (index, {\n align: initialAlign = \"auto\",\n behavior = \"auto\"\n } = {}) => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const offsetInfo = this.getOffsetForIndex(index, initialAlign);\n if (!offsetInfo) {\n return;\n }\n const [offset, align] = offsetInfo;\n const now = this.now();\n this.scrollState = {\n index,\n align,\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0\n };\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.scheduleScrollReconcile();\n };\n this.scrollBy = (delta, { behavior = \"auto\" } = {}) => {\n const offset = this.getScrollOffset() + delta;\n const now = this.now();\n this.scrollState = {\n index: null,\n align: \"start\",\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0\n };\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.scheduleScrollReconcile();\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n scheduleScrollReconcile() {\n if (!this.targetWindow) {\n this.scrollState = null;\n return;\n }\n if (this.rafId != null) return;\n this.rafId = this.targetWindow.requestAnimationFrame(() => {\n this.rafId = null;\n this.reconcileScroll();\n });\n }\n reconcileScroll() {\n if (!this.scrollState) return;\n const el = this.scrollElement;\n if (!el) return;\n const MAX_RECONCILE_MS = 5e3;\n if (this.now() - this.scrollState.startedAt > MAX_RECONCILE_MS) {\n this.scrollState = null;\n return;\n }\n const offsetInfo = this.scrollState.index != null ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align) : void 0;\n const targetOffset = offsetInfo ? offsetInfo[0] : this.scrollState.lastTargetOffset;\n const STABLE_FRAMES = 1;\n const targetChanged = targetOffset !== this.scrollState.lastTargetOffset;\n if (!targetChanged && approxEqual(targetOffset, this.getScrollOffset())) {\n this.scrollState.stableFrames++;\n if (this.scrollState.stableFrames >= STABLE_FRAMES) {\n this.scrollState = null;\n return;\n }\n } else {\n this.scrollState.stableFrames = 0;\n if (targetChanged) {\n this.scrollState.lastTargetOffset = targetOffset;\n this.scrollState.behavior = \"auto\";\n this._scrollToOffset(targetOffset, {\n adjustments: void 0,\n behavior: \"auto\"\n });\n }\n }\n this.scheduleScrollReconcile();\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n}) {\n const lastIndex = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex\n };\n }\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset\n );\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Virtualizer, elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nconst useIsomorphicLayoutEffect = typeof document !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\nfunction useVirtualizerBase({\n useFlushSync = true,\n ...options\n}) {\n const rerender = React.useReducer(() => ({}), {})[1];\n const resolvedOptions = {\n ...options,\n onChange: (instance2, sync) => {\n var _a;\n if (useFlushSync && sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n (_a = options.onChange) == null ? void 0 : _a.call(options, instance2, sync);\n }\n };\n const [instance] = React.useState(\n () => new Virtualizer(resolvedOptions)\n );\n instance.setOptions(resolvedOptions);\n useIsomorphicLayoutEffect(() => {\n return instance._didMount();\n }, []);\n useIsomorphicLayoutEffect(() => {\n return instance._willUpdate();\n });\n return instance;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase({\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...options\n });\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase({\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...options\n });\n}\nexport {\n useVirtualizer,\n useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n","\"use client\";\n\n// src/checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nfunction CheckboxProvider(props) {\n const {\n __scopeCheckbox,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: CHECKBOX_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n disabled,\n setChecked,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(\n CheckboxProviderImpl,\n {\n scope: __scopeCheckbox,\n ...context,\n children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n }\n );\n}\nvar TRIGGER_NAME = \"CheckboxTrigger\";\nvar CheckboxTrigger = React.forwardRef(\n ({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {\n const {\n control,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = control?.form;\n if (form) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form.addEventListener(\"reset\", reset);\n return () => form.removeEventListener(\"reset\", reset);\n }\n }, [control, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...checkboxProps,\n ref: composedRefs,\n onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nCheckboxTrigger.displayName = TRIGGER_NAME;\nvar Checkbox = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n return /* @__PURE__ */ jsx(\n CheckboxProvider,\n {\n __scopeCheckbox,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n CheckboxTrigger,\n {\n ...checkboxProps,\n ref: forwardedRef,\n __scopeCheckbox\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n CheckboxBubbleInput,\n {\n __scopeCheckbox\n }\n )\n ] })\n }\n );\n }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(context.checked) || context.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef,\n style: { pointerEvents: \"none\", ...props.style }\n }\n )\n }\n );\n }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"CheckboxBubbleInput\";\nvar CheckboxBubbleInput = React.forwardRef(\n ({ __scopeCheckbox, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nCheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Checkbox,\n CheckboxIndicator,\n CheckboxIndicator as Indicator,\n Checkbox as Root,\n createCheckboxScope,\n CheckboxBubbleInput as unstable_BubbleInput,\n CheckboxBubbleInput as unstable_CheckboxBubbleInput,\n CheckboxProvider as unstable_CheckboxProvider,\n CheckboxTrigger as unstable_CheckboxTrigger,\n CheckboxProvider as unstable_Provider,\n CheckboxTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check, Minus } from \"lucide-react\"\n\nimport { cn } from \"@shared/lib/utils\"\n\n/**\n * Checkbox — matches shadcn's canonical 16×16 design:\n *\n * - `size-4` (16px)\n * - `rounded-xs` (4px, `--radius-xs`) — a square with softened corners,\n * NOT a circle. Atlas's scale shifted `--radius-sm` up to 8px, which\n * would render a 16px checkbox as a 50% pill. `--radius-xs` closes\n * the gap at the tight end specifically for cases like this.\n * - Neutral `border-input` when unchecked; flips to `border-primary`\n * when checked/indeterminate so the outline blends with the fill.\n * - No drop shadow — consistent with the rest of Atlas's form\n * primitives (Input, Select, Button).\n * - Distinct icon for indeterminate state (horizontal minus) so a\n * bulk-select header reads as \"some selected\" without showing a\n * check mark. Switching is driven by Radix's `data-state` attribute\n * via Tailwind `group-data-*` modifiers — no extra state wiring.\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 \"group peer size-4 shrink-0 rounded-xs border border-input bg-background transition-colors\",\n \"grid place-content-center\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground\",\n \"data-[state=indeterminate]:bg-primary data-[state=indeterminate]:border-primary data-[state=indeterminate]:text-primary-foreground\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n <Check\n className=\"size-3.5 hidden group-data-[state=checked]:block\"\n strokeWidth={3}\n aria-hidden=\"true\"\n />\n <Minus\n className=\"size-3.5 hidden group-data-[state=indeterminate]:block\"\n strokeWidth={3}\n aria-hidden=\"true\"\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type RowSelectionState,\n} from '@tanstack/react-table'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { ArrowUp, ArrowDown } from 'lucide-react'\nimport { cn } from '@shared/lib/utils'\nimport { Checkbox } from './checkbox'\nimport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from './table'\n\n// Virtualize anything bigger than a typical small inline list. The cost\n// model is non-obvious: even at 100 rows × ~30 columns the cell layer\n// is ~3,000 React elements, and each cell often contains CVA-styled\n// nested components (segmented controls, badges, ack buttons). When the\n// data prop changes (filter / pagination / fresh poll), reconciliation\n// over the full set is what showed up in INP traces as 800ms+ post-\n// click renders, even with the parent memo intact upstream. Virtualizing\n// drops the rendered window to ~15-25 visible rows × cols, turning a\n// previously-unavoidable re-render into something cheap.\n//\n// 50 is comfortably below the 100-row page size used by the core-\n// migration review page (the hottest consumer) while staying above the\n// inline test fixtures (3-row TestRow arrays) so test snapshots that\n// assert specific row text continue to render every row into the DOM\n// without needing the offsetHeight jsdom override.\nconst VIRTUALIZATION_THRESHOLD = 50\nconst ROW_HEIGHT_ESTIMATE = 40\nconst CHECKBOX_COLUMN_ID = '_select'\n\n/**\n * Radix floating primitives (ContextMenu, DropdownMenu, Popover, Dialog,\n * Tooltip) render their content into a portal outside the original tree.\n * The outside-click cell-selection clear needs to treat these portals as\n * logically \"inside\" the table — otherwise clicking a menu item wipes the\n * selection before the menu's onSelect runs, making every menu action on\n * the selection silently no-op.\n *\n * Detect via role=\"menu\" (ContextMenu/DropdownMenu content), the\n * data-radix-popper-content-wrapper attribute, or ARIA dialog roles.\n */\nfunction isInsideRadixFloatingContent(target: Element): boolean {\n return (\n target.closest('[role=\"menu\"]') !== null ||\n target.closest('[role=\"menuitem\"]') !== null ||\n target.closest('[data-radix-popper-content-wrapper]') !== null ||\n target.closest('[role=\"dialog\"]') !== null\n )\n}\n\ninterface CellCoord {\n rowId: string\n columnId: string\n}\n\ninterface DataReviewTableProps<T extends { id: string; _version?: number }> {\n columns: ColumnDef<T, unknown>[]\n data: T[]\n /**\n * Controlled selection. When provided, the table reflects this value and\n * fires `onSelectionChange` on user interaction without mutating internal\n * state. When omitted, the table manages selection itself (uncontrolled\n * mode) — useful when the caller only needs the callback or no callback\n * at all. Mixing controlled/uncontrolled across renders is undefined\n * behavior (standard React convention).\n */\n selectedRows?: string[]\n onSelectionChange?: (rowIds: string[]) => void\n defaultSort?: SortingState\n emptyMessage?: string\n className?: string\n /**\n * Height cap on the internal scroll container. Required for the virtualized\n * path (rows >= VIRTUALIZATION_THRESHOLD) — without a bounded scroll\n * element, `useVirtualizer` only sees the initial viewport and rows below\n * the fold stay unreachable. Accepts any CSS length (`'70vh'`, `'600px'`,\n * `'calc(100vh - 12rem)'`) or a pixel `number`. Default is `'70vh'`.\n */\n maxHeight?: string | number\n /**\n * Row IDs to highlight with a transient amber background — typically used\n * to flash rows that conflicted during a batch mutation so the user can\n * see which rows changed underneath them. The caller owns the lifecycle\n * (populate on conflict, clear on timer).\n */\n highlightedRowIds?: Set<string>\n /**\n * When false, column headers do not respond to clicks and rows are\n * rendered in `data` order. Use this when sorting is implemented server-\n * side or when sorting a paginated subset would produce cross-page\n * inconsistencies. Default `true` preserves the previous client-side\n * sort behavior.\n */\n enableSorting?: boolean\n /**\n * When true, the leading checkbox column is removed entirely AND any\n * internal/uncontrolled selection state is dropped. Use this for\n * read-only views (e.g. a LOCKED migration table) where ack actions\n * are forbidden — without this prop the table would silently keep its\n * own selection in uncontrolled mode even when the parent thinks\n * selection is disabled, surfacing a checkbox column the user can\n * tick but never act on.\n */\n selectionDisabled?: boolean\n /**\n * When true, switches the table into Excel-grade cell selection mode.\n * The leading checkbox column is NOT rendered and row-selection plumbing\n * is disabled; users interact with individual cells instead. Supports\n * click, shift-click (rectangular range), cmd/ctrl-click (additive),\n * mouse drag, Escape to clear, and Cmd/Ctrl+A to select all visible\n * cells. The caller can observe or drive selection via\n * `selectedCells` / `onCellSelectionChange`.\n */\n enableCellSelection?: boolean\n /**\n * Controlled cell selection. When provided, the table reflects this\n * value and fires `onCellSelectionChange` on user interaction without\n * mutating internal state. Only applies when `enableCellSelection` is\n * true.\n */\n selectedCells?: CellCoord[]\n onCellSelectionChange?: (cells: CellCoord[]) => void\n}\n\nfunction cellMapToArray(map: Map<string, Set<string>>): CellCoord[] {\n const out: CellCoord[] = []\n for (const [rowId, cols] of map) {\n for (const columnId of cols) {\n out.push({ rowId, columnId })\n }\n }\n return out\n}\n\nfunction cellArrayToMap(cells: CellCoord[]): Map<string, Set<string>> {\n const map = new Map<string, Set<string>>()\n for (const { rowId, columnId } of cells) {\n let cols = map.get(rowId)\n if (!cols) {\n cols = new Set<string>()\n map.set(rowId, cols)\n }\n cols.add(columnId)\n }\n return map\n}\n\nfunction DataReviewTable<T extends { id: string; _version?: number }>({\n columns,\n data,\n selectedRows: controlledSelected,\n onSelectionChange,\n defaultSort,\n emptyMessage = 'No data',\n className,\n maxHeight = '70vh',\n highlightedRowIds,\n enableSorting = true,\n selectionDisabled = false,\n enableCellSelection = false,\n selectedCells: controlledCells,\n onCellSelectionChange,\n}: DataReviewTableProps<T>) {\n const [sorting, setSorting] = useState<SortingState>(defaultSort ?? [])\n // Internal selection state used when `selectedRows` is not provided\n // (uncontrolled mode). When `selectedRows` IS provided, this state still\n // exists but `effectiveSelection` always returns the controlled value —\n // it just acts as a shadow that stays in sync on each commit, so a\n // caller switching from controlled → uncontrolled mid-lifecycle doesn't\n // blow up. When `selectionDisabled` or `enableCellSelection` is true we\n // force an empty row-selection regardless of mode so the checkbox-less\n // render is consistent (no ghost selection lingering from a prior\n // unlocked render).\n const [internalSelection, setInternalSelection] = useState<string[]>([])\n const isControlled = controlledSelected !== undefined\n const rowSelectionSuppressed = selectionDisabled || enableCellSelection\n const effectiveSelection = rowSelectionSuppressed\n ? []\n : isControlled\n ? controlledSelected\n : internalSelection\n\n const lastSelectedId = useRef<string | null>(null)\n const parentRef = useRef<HTMLDivElement>(null)\n\n const selectionRef = useRef(effectiveSelection)\n selectionRef.current = effectiveSelection\n\n const onSelectionChangeRef = useRef(onSelectionChange)\n onSelectionChangeRef.current = onSelectionChange\n\n const commitSelection = useCallback(\n (ids: string[]) => {\n if (!isControlled) {\n setInternalSelection(ids)\n }\n onSelectionChangeRef.current?.(ids)\n },\n [isControlled],\n )\n\n // ─── Cell selection state ────────────────────────────────────────────\n const isCellControlled = controlledCells !== undefined\n const [internalCellSelection, setInternalCellSelection] = useState<\n Map<string, Set<string>>\n >(() => new Map())\n\n const effectiveCellMap = useMemo(() => {\n if (!enableCellSelection) return new Map<string, Set<string>>()\n return isCellControlled\n ? cellArrayToMap(controlledCells ?? [])\n : internalCellSelection\n }, [enableCellSelection, isCellControlled, controlledCells, internalCellSelection])\n\n // Mirror the current selection into a ref so listeners that don't want\n // to re-subscribe on every selection change can still read the size.\n const effectiveCellMapRef = useRef(effectiveCellMap)\n effectiveCellMapRef.current = effectiveCellMap\n\n const onCellSelectionChangeRef = useRef(onCellSelectionChange)\n onCellSelectionChangeRef.current = onCellSelectionChange\n\n const commitCellSelection = useCallback(\n (next: Map<string, Set<string>>) => {\n if (!isCellControlled) {\n setInternalCellSelection(next)\n }\n onCellSelectionChangeRef.current?.(cellMapToArray(next))\n },\n [isCellControlled],\n )\n\n // Anchor cell — the \"origin\" for shift-range and drag selection.\n const anchorCellRef = useRef<CellCoord | null>(null)\n // Rectangular drag state — remembers the drag origin so mousemove can\n // recompute the rectangle against the latest hovered cell.\n const dragStateRef = useRef<{\n active: boolean\n additive: boolean\n baseSelection: Map<string, Set<string>>\n origin: CellCoord | null\n }>({ active: false, additive: false, baseSelection: new Map(), origin: null })\n\n const rowSelectionState: RowSelectionState = {}\n for (const id of effectiveSelection) {\n rowSelectionState[id] = true\n }\n\n const handleShiftClick = useCallback(\n (clickedId: string) => {\n const currentRows = tableRef.current?.getRowModel().rows\n if (!currentRows || lastSelectedId.current === null) return\n\n const lastIdx = currentRows.findIndex((r) => r.id === lastSelectedId.current)\n const currentIdx = currentRows.findIndex((r) => r.id === clickedId)\n if (lastIdx === -1 || currentIdx === -1) return\n\n const start = Math.min(lastIdx, currentIdx)\n const end = Math.max(lastIdx, currentIdx)\n const newIds = new Set(selectionRef.current ?? [])\n\n for (let i = start; i <= end; i++) {\n newIds.add(currentRows[i].original.id)\n }\n\n commitSelection(Array.from(newIds))\n },\n [commitSelection],\n )\n\n const checkboxColumn: ColumnDef<T, unknown> = {\n id: CHECKBOX_COLUMN_ID,\n size: 40,\n header: ({ table }) => (\n <Checkbox\n checked={table.getIsAllRowsSelected()}\n onCheckedChange={(checked) => {\n table.toggleAllRowsSelected(!!checked)\n }}\n aria-label=\"Select all rows\"\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(checked) => {\n row.toggleSelected(!!checked)\n }}\n onClick={(e: React.MouseEvent) => {\n if (e.shiftKey) {\n handleShiftClick(row.original.id)\n e.preventDefault()\n }\n lastSelectedId.current = row.original.id\n }}\n aria-label={`Select row ${row.original.id}`}\n />\n ),\n enableSorting: false,\n }\n\n const allColumns: ColumnDef<T, unknown>[] =\n selectionDisabled || enableCellSelection ? columns : [checkboxColumn, ...columns]\n\n const table = useReactTable({\n data,\n columns: allColumns,\n state: { sorting, rowSelection: rowSelectionState },\n onSortingChange: setSorting,\n enableSorting,\n onRowSelectionChange: (updaterOrValue) => {\n if (rowSelectionSuppressed) return\n const newState =\n typeof updaterOrValue === 'function'\n ? updaterOrValue(rowSelectionState)\n : updaterOrValue\n const ids = Object.entries(newState)\n .filter(([, selected]) => selected)\n .map(([id]) => id)\n commitSelection(ids)\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n enableRowSelection: !rowSelectionSuppressed,\n getRowId: (row) => row.id,\n })\n\n const tableRef = useRef(table)\n tableRef.current = table\n\n const rows = table.getRowModel().rows\n const useVirtual = rows.length > VIRTUALIZATION_THRESHOLD\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => parentRef.current,\n estimateSize: () => ROW_HEIGHT_ESTIMATE,\n overscan: 20,\n enabled: useVirtual,\n })\n\n // ─── Cell selection helpers ──────────────────────────────────────────\n // Row/column indexes keyed by id for O(1) rectangle math. Uses the\n // current sorted row order and the leaf columns from the table so that\n // rectangles reflect what the user actually sees.\n const rowIndexById = useMemo(() => {\n const map = new Map<string, number>()\n rows.forEach((r, idx) => map.set(r.original.id, idx))\n return map\n }, [rows])\n\n // Depend on the inputs that actually drive the set of visible columns.\n // Can't use [table] alone — useReactTable v8 returns a referentially\n // stable ref, so the memo would compute once and go stale when the\n // caller's `columns` prop changes. Can't use [allColumns] — it's a\n // fresh array literal every render, which makes this effectively\n // unmemoized. The primitive inputs below are the real signal.\n const visibleColumnIds = useMemo(\n () =>\n table\n .getVisibleLeafColumns()\n .map((c) => c.id)\n .filter((id) => id !== CHECKBOX_COLUMN_ID),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- table ref is stable; the three below drive real changes\n [columns, selectionDisabled, enableCellSelection],\n )\n\n const columnIndexById = useMemo(() => {\n const map = new Map<string, number>()\n visibleColumnIds.forEach((id, idx) => map.set(id, idx))\n return map\n }, [visibleColumnIds])\n\n const buildRectSelection = useCallback(\n (a: CellCoord, b: CellCoord): Map<string, Set<string>> => {\n const aRow = rowIndexById.get(a.rowId)\n const bRow = rowIndexById.get(b.rowId)\n const aCol = columnIndexById.get(a.columnId)\n const bCol = columnIndexById.get(b.columnId)\n if (aRow === undefined || bRow === undefined || aCol === undefined || bCol === undefined) {\n return new Map()\n }\n const rowStart = Math.min(aRow, bRow)\n const rowEnd = Math.max(aRow, bRow)\n const colStart = Math.min(aCol, bCol)\n const colEnd = Math.max(aCol, bCol)\n const next = new Map<string, Set<string>>()\n for (let r = rowStart; r <= rowEnd; r++) {\n const rowId = rows[r]?.original.id\n if (!rowId) continue\n const cols = new Set<string>()\n for (let c = colStart; c <= colEnd; c++) {\n const colId = visibleColumnIds[c]\n if (colId) cols.add(colId)\n }\n next.set(rowId, cols)\n }\n return next\n },\n [rowIndexById, columnIndexById, rows, visibleColumnIds],\n )\n\n const mergeSelections = useCallback(\n (\n base: Map<string, Set<string>>,\n add: Map<string, Set<string>>,\n ): Map<string, Set<string>> => {\n const next = new Map<string, Set<string>>()\n for (const [rowId, cols] of base) {\n next.set(rowId, new Set(cols))\n }\n for (const [rowId, cols] of add) {\n const existing = next.get(rowId) ?? new Set<string>()\n for (const c of cols) existing.add(c)\n next.set(rowId, existing)\n }\n return next\n },\n [],\n )\n\n const isCellSelected = useCallback(\n (rowId: string, columnId: string): boolean => {\n return effectiveCellMap.get(rowId)?.has(columnId) === true\n },\n [effectiveCellMap],\n )\n\n const handleCellMouseDown = useCallback(\n (e: React.MouseEvent, rowId: string, columnId: string) => {\n if (!enableCellSelection) return\n if (columnId === CHECKBOX_COLUMN_ID) return\n // Only react to primary button to avoid fighting right-click menus.\n if (e.button !== 0) return\n\n // Every path below calls preventDefault(), which blocks the browser\n // from transferring focus to the scroll container. Without an explicit\n // focus() the keyboard shortcuts (Escape/Cmd+A) wired on the container\n // never fire in a real browser — tests pass because fireEvent targets\n // the element directly.\n parentRef.current?.focus()\n\n const isShift = e.shiftKey\n const isMeta = e.metaKey || e.ctrlKey\n\n if (isShift && anchorCellRef.current) {\n const rect = buildRectSelection(anchorCellRef.current, { rowId, columnId })\n commitCellSelection(rect)\n dragStateRef.current = {\n active: true,\n additive: false,\n baseSelection: new Map(),\n origin: anchorCellRef.current,\n }\n e.preventDefault()\n return\n }\n\n if (isMeta) {\n // Toggle this single cell additively; move anchor here.\n const next = new Map<string, Set<string>>()\n for (const [rid, cols] of effectiveCellMap) {\n next.set(rid, new Set(cols))\n }\n const existing = next.get(rowId)\n if (existing?.has(columnId)) {\n existing.delete(columnId)\n if (existing.size === 0) next.delete(rowId)\n } else {\n const cols = existing ?? new Set<string>()\n cols.add(columnId)\n next.set(rowId, cols)\n }\n anchorCellRef.current = { rowId, columnId }\n commitCellSelection(next)\n dragStateRef.current = {\n active: true,\n additive: true,\n baseSelection: next,\n origin: { rowId, columnId },\n }\n e.preventDefault()\n return\n }\n\n // Plain click: reset to just this cell, start a drag.\n const fresh = new Map<string, Set<string>>([[rowId, new Set([columnId])]])\n anchorCellRef.current = { rowId, columnId }\n commitCellSelection(fresh)\n dragStateRef.current = {\n active: true,\n additive: false,\n baseSelection: new Map(),\n origin: { rowId, columnId },\n }\n e.preventDefault()\n },\n [enableCellSelection, buildRectSelection, commitCellSelection, effectiveCellMap],\n )\n\n const handleCellMouseEnter = useCallback(\n (rowId: string, columnId: string) => {\n if (!enableCellSelection) return\n const drag = dragStateRef.current\n if (!drag.active || !drag.origin) return\n const rect = buildRectSelection(drag.origin, { rowId, columnId })\n const next = drag.additive ? mergeSelections(drag.baseSelection, rect) : rect\n commitCellSelection(next)\n },\n [enableCellSelection, buildRectSelection, mergeSelections, commitCellSelection],\n )\n\n // Stop the drag on mouseup anywhere in the document (the user may release\n // outside the table). The ref-based flag means we don't need to re-render.\n useEffect(() => {\n if (!enableCellSelection) return\n const stop = () => {\n if (dragStateRef.current.active) {\n dragStateRef.current = {\n active: false,\n additive: false,\n baseSelection: new Map(),\n origin: null,\n }\n }\n }\n window.addEventListener('mouseup', stop)\n return () => {\n window.removeEventListener('mouseup', stop)\n }\n }, [enableCellSelection])\n\n // Clear the cell selection when the user mousedowns anywhere outside the\n // table. Listen to `mousedown` (not `click`) so the clear happens before\n // any downstream handler reads the selection.\n //\n // Radix floating primitives (ContextMenu, DropdownMenu, Popover) portal\n // their content outside the table, so naïvely clearing on any mousedown\n // outside `root` would wipe the selection the instant the user clicks a\n // menu item — making Copy / Report no-op. Exempt any click that lands\n // inside a Radix floating-content node.\n useEffect(() => {\n if (!enableCellSelection) return\n const root = parentRef.current\n if (!root) return\n const clearOnOutside = (e: MouseEvent) => {\n const target = e.target as Element | null\n if (!target) return\n if (root.contains(target)) return\n if (isInsideRadixFloatingContent(target)) return\n if (effectiveCellMapRef.current.size === 0) return\n commitCellSelection(new Map())\n anchorCellRef.current = null\n }\n window.addEventListener('mousedown', clearOnOutside)\n return () => {\n window.removeEventListener('mousedown', clearOnOutside)\n }\n }, [enableCellSelection, commitCellSelection])\n\n const handleContainerKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!enableCellSelection) return\n\n if (e.key === 'Escape') {\n commitCellSelection(new Map())\n anchorCellRef.current = null\n e.preventDefault()\n return\n }\n\n // Cmd/Ctrl+A — select all visible cells. Skip the checkbox column\n // (which is never rendered in cell-selection mode anyway).\n if ((e.metaKey || e.ctrlKey) && (e.key === 'a' || e.key === 'A')) {\n const next = new Map<string, Set<string>>()\n for (const row of rows) {\n const cols = new Set<string>()\n for (const colId of visibleColumnIds) {\n cols.add(colId)\n }\n next.set(row.original.id, cols)\n }\n commitCellSelection(next)\n // Anchor to first cell so a follow-up shift-click has a reference.\n const firstRowId = rows[0]?.original.id\n const firstColId = visibleColumnIds[0]\n if (firstRowId && firstColId) {\n anchorCellRef.current = { rowId: firstRowId, columnId: firstColId }\n }\n e.preventDefault()\n return\n }\n\n // TODO(SEQ-2096 follow-up): arrow-key anchor navigation. Deferred —\n // would exceed 20 lines and is explicitly scoped as nice-to-have.\n },\n [enableCellSelection, commitCellSelection, rows, visibleColumnIds],\n )\n\n const anchorCell = anchorCellRef.current\n\n const renderCell = useCallback(\n (\n rowId: string,\n columnId: string,\n content: React.ReactNode,\n key: string,\n ) => {\n if (!enableCellSelection) {\n return (\n <TableCell key={key} data-row-id={rowId} data-column-id={columnId}>\n {content}\n </TableCell>\n )\n }\n const selected = isCellSelected(rowId, columnId)\n const isAnchor =\n selected &&\n anchorCell !== null &&\n anchorCell.rowId === rowId &&\n anchorCell.columnId === columnId\n return (\n <TableCell\n key={key}\n data-row-id={rowId}\n data-column-id={columnId}\n data-cell-selected={selected ? 'true' : undefined}\n onMouseDown={(e) => handleCellMouseDown(e, rowId, columnId)}\n onMouseEnter={() => handleCellMouseEnter(rowId, columnId)}\n className={cn(\n 'cursor-cell select-none',\n selected && 'bg-blue-100 ring-1 ring-blue-400 ring-inset',\n isAnchor && 'ring-2',\n )}\n >\n {content}\n </TableCell>\n )\n },\n [enableCellSelection, isCellSelected, anchorCell, handleCellMouseDown, handleCellMouseEnter],\n )\n\n return (\n <div\n data-slot=\"data-review-table\"\n className={cn('rounded-md border border-black-10', className)}\n >\n <div\n ref={parentRef}\n className=\"overflow-auto focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-inset\"\n style={{ maxHeight: typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight }}\n tabIndex={enableCellSelection ? 0 : undefined}\n onKeyDown={enableCellSelection ? handleContainerKeyDown : undefined}\n >\n <Table>\n <TableHeader className=\"sticky top-0 z-10 bg-background\">\n {table.getHeaderGroups().map((hg) => (\n <TableRow key={hg.id}>\n {hg.headers.map((header) => (\n <TableHead\n key={header.id}\n className={cn(\n 'select-none bg-background',\n header.column.getCanSort() && 'cursor-pointer',\n )}\n style={\n header.column.columnDef.size\n ? { width: header.column.columnDef.size }\n : undefined\n }\n onClick={header.column.getToggleSortingHandler()}\n >\n <span className=\"flex items-center gap-1\">\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n {{\n asc: <ArrowUp className=\"size-3\" />,\n desc: <ArrowDown className=\"size-3\" />,\n }[header.column.getIsSorted() as string] ?? null}\n </span>\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n\n <TableBody>\n {useVirtual ? (\n <>\n {virtualizer.getVirtualItems().length > 0 && (\n <tr style={{ height: virtualizer.getVirtualItems()[0]?.start }} />\n )}\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index]\n if (!row) return null\n const isHighlighted = highlightedRowIds?.has(row.original.id)\n return (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() ? 'selected' : undefined}\n data-index={virtualRow.index}\n data-highlighted={isHighlighted ? 'true' : undefined}\n ref={virtualizer.measureElement}\n className={cn(isHighlighted && 'bg-amber-100')}\n >\n {row.getVisibleCells().map((cell) =>\n renderCell(\n row.original.id,\n cell.column.id,\n flexRender(cell.column.columnDef.cell, cell.getContext()),\n cell.id,\n ),\n )}\n </TableRow>\n )\n })}\n {virtualizer.getVirtualItems().length > 0 && (\n <tr\n style={{\n height:\n virtualizer.getTotalSize() -\n (virtualizer.getVirtualItems().at(-1)?.end ?? 0),\n }}\n />\n )}\n </>\n ) : (\n rows.map((row) => {\n const isHighlighted = highlightedRowIds?.has(row.original.id)\n return (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() ? 'selected' : undefined}\n data-highlighted={isHighlighted ? 'true' : undefined}\n className={cn(isHighlighted && 'bg-amber-100')}\n >\n {row.getVisibleCells().map((cell) =>\n renderCell(\n row.original.id,\n cell.column.id,\n flexRender(cell.column.columnDef.cell, cell.getContext()),\n cell.id,\n ),\n )}\n </TableRow>\n )\n })\n )}\n\n {rows.length === 0 && (\n <TableRow>\n <TableCell\n colSpan={allColumns.length}\n className=\"h-24 text-center text-black-40\"\n >\n {emptyMessage}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n )\n}\n\nexport { DataReviewTable }\nexport type { DataReviewTableProps, CellCoord }\n","import * as React from 'react'\nimport { cn } from '@shared/lib/utils'\nimport { Input } from './input'\n\ninterface DiffCellProps {\n before: string | number | null\n after: string | number | null\n editable?: boolean\n onChange?: (newValue: string) => void\n className?: string\n}\n\nfunction stringify(value: string | number | null): string {\n if (value === null || value === undefined) return ''\n return String(value)\n}\n\nfunction DiffCell({\n before,\n after,\n editable,\n onChange,\n className,\n}: DiffCellProps) {\n const beforeStr = stringify(before)\n const afterStr = stringify(after)\n // Any string difference is a real diff — including the cleared case\n // (before non-empty, after null/empty) and the added case (before\n // empty, after non-empty). The previous `after !== null &&` guard\n // silently hid value-clearing edits.\n const hasChange = beforeStr !== afterStr\n const isEditable = Boolean(editable && onChange)\n\n // Editable mode takes precedence over the early return — a reviewer\n // needs to be able to start editing a field even when before === after\n // (typical pre-edit state). Without this the editable branch was\n // unreachable when no diff had been made yet.\n if (isEditable) {\n return (\n <span\n data-slot=\"diff-cell\"\n className={cn('inline-flex flex-col gap-0.5 text-sm', className)}\n >\n {hasChange && beforeStr.length > 0 && (\n <span\n className=\"text-red-600 line-through\"\n aria-label={`Previous value: ${beforeStr}`}\n >\n {beforeStr}\n </span>\n )}\n <Input\n type=\"text\"\n value={afterStr}\n onChange={(e) => onChange!(e.target.value)}\n // Green-tinted to signal \"proposed/edited value\". Composes the\n // shadcn <Input> primitive (focus ring, sizing, disabled\n // handling) and only overrides border/text color.\n className=\"h-7 min-w-[4rem] border-green-600/30 bg-green-600/5 px-2 py-0.5 text-sm font-medium text-green-600\"\n aria-label={`Edit new value, currently ${afterStr}`}\n placeholder=\"(cleared)\"\n />\n </span>\n )\n }\n\n if (!hasChange) {\n return (\n <span\n data-slot=\"diff-cell\"\n className={cn('text-sm text-black-90', className)}\n >\n {beforeStr}\n </span>\n )\n }\n\n // Non-editable diff rendering:\n // before non-empty + after empty → strikethrough `before` + \"(cleared)\"\n // before empty + after non-empty → just the new value (no empty strikethrough)\n // before non-empty + after non-empty → strikethrough + new value (standard diff)\n const showBefore = beforeStr.length > 0\n const isCleared = beforeStr.length > 0 && afterStr.length === 0\n\n return (\n <span\n data-slot=\"diff-cell\"\n className={cn('inline-flex flex-col gap-0.5 text-sm', className)}\n >\n {showBefore && (\n <span\n className=\"text-red-600 line-through\"\n aria-label={`Previous value: ${beforeStr}`}\n >\n {beforeStr}\n </span>\n )}\n {isCleared ? (\n <span\n className=\"italic text-black-40\"\n aria-label=\"Value was cleared\"\n >\n (cleared)\n </span>\n ) : (\n <span\n className=\"font-medium text-green-600\"\n aria-label={`New value: ${afterStr}`}\n >\n {afterStr}\n </span>\n )}\n </span>\n )\n}\n\nexport { DiffCell }\nexport type { DiffCellProps }\n","import * as React from 'react'\nimport { cn } from '@shared/lib/utils'\nimport { Badge } from './badge'\nimport { Card } from './card'\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from './tooltip'\n\ninterface ProgressCardAssignee {\n id: string\n displayName: string\n avatarUrl?: string\n}\n\ninterface ProgressCardCounts {\n todo: number\n pending: number\n done: number\n}\n\ninterface ProgressCardProps {\n title: string\n description?: string\n total: number\n counts: ProgressCardCounts\n assignees?: ProgressCardAssignee[]\n footer?: React.ReactNode\n onClick?: () => void\n locked?: boolean\n className?: string\n}\n\nconst MAX_VISIBLE_AVATARS = 3\n\nfunction AvatarStack({ assignees }: { assignees: ProgressCardAssignee[] }) {\n const visible = assignees.slice(0, MAX_VISIBLE_AVATARS)\n const overflow = assignees.length - MAX_VISIBLE_AVATARS\n\n return (\n <TooltipProvider>\n <div\n data-slot=\"avatar-stack\"\n className=\"flex -space-x-2\"\n aria-label={`Assigned to ${assignees.map((a) => a.displayName).join(', ')}`}\n >\n {visible.map((assignee) => (\n <Tooltip key={assignee.id}>\n <TooltipTrigger asChild>\n <div\n className=\"relative flex size-6 shrink-0 items-center justify-center rounded-full border-2 border-background bg-black-6 text-xs font-medium text-black-60\"\n aria-label={assignee.displayName}\n >\n {assignee.avatarUrl ? (\n <img\n src={assignee.avatarUrl}\n alt={assignee.displayName}\n className=\"size-full rounded-full object-cover\"\n />\n ) : (\n assignee.displayName.charAt(0).toUpperCase()\n )}\n </div>\n </TooltipTrigger>\n <TooltipContent>{assignee.displayName}</TooltipContent>\n </Tooltip>\n ))}\n {overflow > 0 && (\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n className=\"relative flex size-6 shrink-0 items-center justify-center rounded-full border-2 border-background bg-black-6 text-xs font-medium text-black-60\"\n aria-label={`${overflow} more assignees`}\n >\n +{overflow}\n </div>\n </TooltipTrigger>\n <TooltipContent>\n {assignees.slice(MAX_VISIBLE_AVATARS).map((a) => a.displayName).join(', ')}\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n </TooltipProvider>\n )\n}\n\nfunction StatusBar({ counts, total }: { counts: ProgressCardCounts; total: number }) {\n if (total === 0) return null\n\n const todoPct = (counts.todo / total) * 100\n const pendingPct = (counts.pending / total) * 100\n const donePct = (counts.done / total) * 100\n\n return (\n <div\n data-slot=\"status-bar\"\n className=\"flex h-1.5 w-full overflow-hidden rounded-full bg-black-6\"\n role=\"progressbar\"\n aria-valuenow={counts.done}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-label={`${counts.done} of ${total} done, ${counts.pending} pending, ${counts.todo} to do`}\n >\n <div\n className=\"h-full bg-green-600 transition-all\"\n style={{ width: `${donePct}%` }}\n />\n <div\n className=\"h-full bg-blue-600 transition-all\"\n style={{ width: `${pendingPct}%` }}\n />\n <div\n className=\"h-full bg-black-10 transition-all\"\n style={{ width: `${todoPct}%` }}\n />\n </div>\n )\n}\n\nfunction ProgressCard({\n title,\n description,\n total,\n counts,\n assignees,\n footer,\n onClick,\n locked,\n className,\n}: ProgressCardProps) {\n const donePct = total > 0 ? Math.round((counts.done / total) * 100) : 0\n\n // Card is a div, so we layer button-like behavior via role + keyboard\n // handler instead of switching the root tag. This keeps interactive\n // children (avatar tooltip triggers, footer buttons, future action\n // buttons) valid HTML — a native <button> root would nest interactives.\n //\n // Click/keyboard handlers both gate on \"was the user actually targeting\n // the card itself, or a descendant that owns the interaction?\" Without\n // this, clicking an inner button fires BOTH the button's handler and\n // the card's onClick, which is the classic nested-interactive footgun.\n const INTERACTIVE_SELECTOR = 'button, a, input, select, textarea, [role=\"button\"], [role=\"link\"], [role=\"menuitem\"]'\n\n const handleClick = onClick\n ? (e: React.MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement\n // `closest` walks up from the click target. If the nearest\n // interactive ancestor is the card itself (currentTarget), the\n // click was on card chrome and we fire. If it's some inner\n // element, that element owns the interaction — don't fire.\n const interactive = target.closest(INTERACTIVE_SELECTOR)\n if (interactive !== e.currentTarget) return\n onClick()\n }\n : undefined\n\n const handleKeyDown = onClick\n ? (e: React.KeyboardEvent<HTMLDivElement>) => {\n // Only fire for Enter/Space when focus is on the card itself,\n // not when a nested button or link has focus (those own their\n // own keyboard handling).\n if (e.target !== e.currentTarget) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick()\n }\n }\n : undefined\n\n return (\n <Card\n data-slot=\"progress-card\"\n className={cn(\n 'flex flex-col gap-md p-lg text-left transition-colors',\n onClick && 'cursor-pointer hover:bg-black-2',\n locked && 'opacity-60',\n className,\n )}\n onClick={handleClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={handleKeyDown}\n >\n <div className=\"flex items-start justify-between gap-sm\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-sm\">\n <h3 className=\"truncate text-sm font-semibold text-black-90\">{title}</h3>\n {locked && (\n <Badge variant=\"outline\" className=\"shrink-0 text-xs px-1.5 py-0\">\n Locked\n </Badge>\n )}\n </div>\n {description && (\n <p className=\"mt-xs truncate text-xs text-black-40\">{description}</p>\n )}\n </div>\n <span className=\"shrink-0 text-sm font-semibold tabular-nums text-black-90\">\n {donePct}%\n </span>\n </div>\n\n <StatusBar counts={counts} total={total} />\n\n <div className=\"flex items-center justify-between gap-sm\">\n <div className=\"flex items-center gap-md text-xs text-black-40\">\n <span className=\"flex items-center gap-xs\">\n <span className=\"inline-block size-2 rounded-full bg-black-10\" />\n {counts.todo} todo\n </span>\n <span className=\"flex items-center gap-xs\">\n <span className=\"inline-block size-2 rounded-full bg-blue-600\" />\n {counts.pending} pending\n </span>\n <span className=\"flex items-center gap-xs\">\n <span className=\"inline-block size-2 rounded-full bg-green-600\" />\n {counts.done} done\n </span>\n </div>\n\n {assignees && assignees.length > 0 && (\n <AvatarStack assignees={assignees} />\n )}\n </div>\n\n {footer && (\n <div className=\"border-t border-black-6 pt-sm text-xs text-black-40\">\n {footer}\n </div>\n )}\n </Card>\n )\n}\n\nexport { ProgressCard }\nexport type { ProgressCardProps, ProgressCardCounts, ProgressCardAssignee }\n","import type { ReactNode } from 'react'\nimport { cn } from '@shared/lib/utils'\n\n/**\n * DashboardShell — canonical frame for dashboard / list pages.\n *\n * Provides the compact 12-row top bar (title · range slot · actions slot) and\n * a scrolling body with consistent horizontal/vertical rhythm. Pages compose\n * their content (KPI strip, chart cards, tables) as direct children — each\n * child gets `gap-5` vertical spacing automatically.\n *\n * Scrolling ownership: the body is the *only* vertical scroll container for\n * the page. Do NOT wrap `<DashboardShell>` in another `overflow-y-auto` div.\n * Height flows from the platform app shell (`atlas-shell-routes` → app\n * wrapper → `h-full`).\n *\n * Composition:\n * ```tsx\n * <DashboardShell\n * title=\"Agents\"\n * range={<SegmentedControl value=\"24h\" onChange={…} options={…} />}\n * actions={<>\n * <Button variant=\"outline\" size=\"sm\">Import</Button>\n * <Button size=\"sm\">New agent</Button>\n * </>}\n * >\n * <KpiTileGrid columns={4}>…</KpiTileGrid>\n * <ChartCard />\n * <ProDataTable … />\n * </DashboardShell>\n * ```\n *\n * Rules:\n * - Don't render a page subtitle (e.g. \"N total\") under the title — those\n * belong in section headers or on the table itself.\n * - Don't nest a `<DashboardShell>` inside another scroll container.\n * - Title renders at 16px (`--font-size-md` / `text-base`).\n */\ninterface DashboardShellProps {\n /** Page title — 16px, semibold. Usually a short noun (\"Agents\", \"Schedules\"). */\n title: ReactNode\n /** Small controls rendered left of the actions (e.g. 24h/7d/30d toggle). */\n range?: ReactNode\n /** Right-aligned action buttons (Import, New item, etc.). */\n actions?: ReactNode\n children: ReactNode\n className?: string\n /** Extra className on the scrolling body. Use for custom gap/padding overrides. */\n bodyClassName?: string\n}\n\nexport function DashboardShell({\n title,\n range,\n actions,\n children,\n className,\n bodyClassName,\n}: DashboardShellProps) {\n return (\n <div\n data-slot=\"dashboard-shell\"\n className={cn('flex flex-col min-h-0 h-full bg-background', className)}\n >\n <header className=\"h-12 shrink-0 flex items-center gap-3 px-6 border-b border-black-6 bg-background/90 backdrop-blur-sm\">\n {/* 16px title — matches --font-size-md token (text-base in Tailwind). */}\n <div className=\"min-w-0 text-base font-semibold tracking-tight text-black-90 truncate\">\n {title}\n </div>\n <div className=\"flex-1\" />\n {range}\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </header>\n <div\n className={cn(\n 'flex-1 min-h-0 overflow-y-auto px-6 py-5 flex flex-col gap-5',\n bodyClassName,\n )}\n >\n {children}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@shared/lib/utils'\n\ninterface MetricGridProps {\n columns?: 2 | 3 | 4 | 5\n children: ReactNode\n className?: string\n}\n\nconst COLS: Record<NonNullable<MetricGridProps['columns']>, string> = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n}\n\nexport function MetricGrid({ columns = 3, children, className }: MetricGridProps) {\n return (\n <div\n data-slot=\"metric-grid\"\n className={cn('grid gap-4', COLS[columns], className)}\n >\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@shared/lib/utils'\n\ninterface SectionHeaderProps {\n title: string\n icon?: ReactNode\n children?: ReactNode\n className?: string\n}\n\nexport function SectionHeader({ title, icon, children, className }: SectionHeaderProps) {\n return (\n <div\n data-slot=\"section-header\"\n className={cn('flex items-center justify-between', className)}\n >\n <div className=\"flex items-center gap-2\">\n {icon}\n <h2 className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">{title}</h2>\n </div>\n {children && <div className=\"flex items-center gap-2\">{children}</div>}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@shared/lib/utils'\n\ninterface TabPageProps {\n children: ReactNode\n maxWidth?: 'md' | 'lg' | 'xl' | '2xl' | '4xl' | '6xl' | '7xl' | 'full'\n className?: string\n}\n\nconst MAX_WIDTH: Record<NonNullable<TabPageProps['maxWidth']>, string> = {\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n '2xl': 'max-w-2xl',\n '4xl': 'max-w-4xl',\n '6xl': 'max-w-6xl',\n '7xl': 'max-w-7xl',\n full: 'max-w-full',\n}\n\nexport function TabPage({ children, maxWidth = '7xl', className }: TabPageProps) {\n return (\n <div\n data-slot=\"tab-page\"\n className={cn(\n 'mx-auto space-y-6 animate-in fade-in duration-200',\n MAX_WIDTH[maxWidth],\n className,\n )}\n >\n {children}\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@shared/lib/utils'\n\n/**\n * SidebarNav — shared primitives for app-sidebar navigation.\n *\n * Two levels:\n * - `SidebarNavItem` — the top-level row with icon + label (app entry)\n * - `SidebarNavSubList` — the indented, rail-connected secondary nav\n * rendered directly beneath a parent SidebarNavItem\n *\n * The pattern mirrors what Atlas's shell sidebar has been rendering\n * inline for a long time, but extracted here so every consumer\n * (Atlas, embedded MFEs, the design system gallery) gets the same\n * visual treatment and spacing rules for free.\n *\n * Spacing contract\n * ----------------\n * Parent item label x-position = `itemPaddingX + iconSize + iconGap`.\n * The sub-list is designed so its labels land at the SAME x-position\n * by default — with defaults of `itemPaddingX=8`, `iconSize=24`,\n * `iconGap=12` the sub-list labels indent by 44px. A rail sits at the\n * horizontal center of the parent icon (x = 8 + 24/2 = 20).\n *\n * If a consumer uses a different parent item geometry, pass\n * `labelIndent` / `railIndent` to match.\n */\n\nexport interface SidebarNavSubItem {\n id: string\n label: string\n /** Link href. Omit when using `onSelect` with a custom navigator. */\n href?: string\n /** True for the currently-selected item — gets weight + color emphasis. */\n active?: boolean\n /** Optional tail counter (e.g., \"12\"). Rendered right-aligned. */\n count?: number | string\n /** Optional uppercase chip (e.g., \"NEW\", \"BETA\"). Rendered right-aligned. */\n tag?: string\n /**\n * Render as visible but non-interactive. Use for placeholder items that\n * will become clickable later (feature gating, coming-soon, etc.).\n */\n parked?: boolean\n}\n\nexport interface SidebarNavSubListProps {\n items: SidebarNavSubItem[]\n /**\n * Called when the user activates an item (click, keyboard enter).\n * Use this to route with your SPA router; if omitted, the `<a href>`\n * does a full navigation. Parked items never fire this.\n */\n onSelect?: (item: SidebarNavSubItem, event: React.MouseEvent<HTMLAnchorElement>) => void\n /**\n * Horizontal distance (px) from the list's left edge at which item\n * labels begin. Should equal the parent item's label x-position so\n * the two stacks visually line up. Default 44.\n */\n labelIndent?: number\n /**\n * X-position (px) of the vertical connector rail. Usually the center\n * of the parent item's icon. Default 20.\n */\n railIndent?: number\n className?: string\n /** Accessible name for the list (e.g., \"Agent Builder pages\"). */\n ariaLabel?: string\n}\n\n/**\n * Indented secondary navigation with a vertical connector rail. Renders\n * nothing when `items` is empty.\n */\nexport function SidebarNavSubList({\n items,\n onSelect,\n labelIndent = 44,\n railIndent = 20,\n className,\n ariaLabel,\n}: SidebarNavSubListProps) {\n if (items.length === 0) return null\n\n return (\n <div\n role=\"list\"\n aria-label={ariaLabel}\n className={cn('relative flex flex-col gap-px py-1', className)}\n >\n {/* Vertical rail connecting the sub-items to their parent icon. */}\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute top-0 bottom-1 w-px bg-black-10\"\n style={{ left: `${railIndent}px` }}\n />\n {items.map((it) => {\n const isInteractive = !it.parked\n const commonClassName = cn(\n 'group flex min-h-[28px] items-center gap-2 rounded-md pr-2.5',\n 'text-[13px] leading-[1.35] tracking-[-0.005em] transition-colors',\n // Default state\n 'text-black-60',\n // Hover — opt out when parked since parked items are display-only\n isInteractive && 'hover:bg-black-4 hover:text-black-90',\n // Active — weight + color emphasis, no background pill\n it.active && 'font-medium text-black-90',\n // Parked — visibly dimmed, non-interactive\n it.parked && 'cursor-default text-black-40',\n )\n const itemStyle: React.CSSProperties = {\n paddingLeft: `${labelIndent}px`,\n paddingTop: 4,\n paddingBottom: 4,\n }\n\n const trailing =\n it.tag != null ? (\n <span className=\"shrink-0 rounded-xs bg-black-6 px-1.5 py-px text-xs font-semibold text-black-50\">\n {it.tag}\n </span>\n ) : it.count != null ? (\n <span className=\"shrink-0 font-mono text-xs tabular-nums text-black-40\">\n {it.count}\n </span>\n ) : null\n\n return (\n <a\n key={it.id}\n role=\"listitem\"\n aria-current={it.active ? 'page' : undefined}\n aria-disabled={it.parked || undefined}\n href={isInteractive ? it.href : undefined}\n className={commonClassName}\n style={itemStyle}\n onClick={(e) => {\n if (!isInteractive) {\n e.preventDefault()\n return\n }\n if (onSelect) {\n onSelect(it, e)\n }\n }}\n >\n <span className=\"flex-1 min-w-0 truncate\">{it.label}</span>\n {trailing}\n </a>\n )\n })}\n </div>\n )\n}\n","import * as React from 'react'\nimport { IconChevronLeft } from '@tabler/icons-react'\nimport { cn } from '@shared/lib/utils'\nimport { Button } from './button'\nimport { CodeBadge } from './code-badge'\n\n/**\n * EditorTopBar — minimal page header for entity editors (Agent, Workflow,\n * Skill, etc.). Pairs with `EditorSideNav` + `EditorPageHeader` to form the\n * standard editor chrome.\n *\n * Composition (left → right):\n * <EditorTopBar onBack={...}> ← back button slot\n * <EditorTopBarIdentity icon={...} name=\"…\" tag=\"…\" /> ← identity block\n * <EditorTopBarActions> ← right side\n * ...buttons...\n * </EditorTopBarActions>\n * </EditorTopBar>\n *\n * Density matches the V2 dashboard top bars (52px tall) so editors and\n * dashboards share a consistent shell row.\n */\n\ninterface EditorTopBarProps extends React.HTMLAttributes<HTMLDivElement> {\n onBack?: () => void\n /** Override the back button entirely (e.g. wrap in a Link). */\n backSlot?: React.ReactNode\n}\n\nconst EditorTopBar = React.forwardRef<HTMLDivElement, EditorTopBarProps>(\n ({ className, children, onBack, backSlot, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"editor-top-bar\"\n className={cn(\n 'h-13 shrink-0 flex items-center gap-3 px-4 border-b border-black-6 bg-background',\n className,\n )}\n style={{ height: 52, ...(props.style ?? {}) }}\n {...props}\n >\n {backSlot ?? (onBack && <EditorTopBarBackButton onClick={onBack} />)}\n {children}\n </div>\n )\n },\n)\nEditorTopBar.displayName = 'EditorTopBar'\n\nfunction EditorTopBarBackButton({ onClick, title = 'Back' }: { onClick: () => void; title?: string }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={title}\n className=\"size-7 grid place-items-center rounded-md text-black-50 hover:text-black-90 hover:bg-black-4 shrink-0\"\n >\n <IconChevronLeft size={16} strokeWidth={1.75} />\n </button>\n )\n}\n\ninterface EditorTopBarIdentityProps {\n /** Tinted square icon/avatar (28px) — pass an icon or initials. */\n icon?: React.ReactNode\n /** Background color for the icon tile. */\n iconBg?: string\n /** Foreground color for the icon glyph/initials. */\n iconColor?: string\n /** Primary name. */\n name: React.ReactNode\n /** Optional inline mono tag rendered next to the name (e.g. \"Sonnet 4.5\"). */\n tag?: React.ReactNode\n /** Optional status badge rendered to the right of the tag. */\n badge?: React.ReactNode\n /** Subtle meta line under the name (e.g. \"Draft · edited 4m ago by …\"). */\n meta?: React.ReactNode\n className?: string\n}\n\nfunction EditorTopBarIdentity({\n icon,\n iconBg = 'rgba(9,10,12,0.04)',\n iconColor = 'rgba(9,10,12,0.7)',\n name,\n tag,\n badge,\n meta,\n className,\n}: EditorTopBarIdentityProps) {\n return (\n <div className={cn('flex items-center gap-2.5 min-w-0', className)}>\n {icon && (\n <div\n className=\"size-7 rounded-md shrink-0 grid place-items-center text-[12px] font-semibold [&>svg]:size-[16px]\"\n style={{ background: iconBg, color: iconColor }}\n >\n {icon}\n </div>\n )}\n <div className=\"min-w-0 flex flex-col leading-tight\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <span className=\"text-[14px] font-semibold tracking-tight text-black-90 truncate\">\n {name}\n </span>\n {tag && <CodeBadge>{tag}</CodeBadge>}\n {badge}\n </div>\n {meta && (\n <span className=\"text-xs text-black-40 truncate mt-0.5\">{meta}</span>\n )}\n </div>\n </div>\n )\n}\n\n/** Right-aligned action group. Adds spacing + flex-end positioning. */\nfunction EditorTopBarActions({\n className,\n children,\n}: {\n className?: string\n children?: React.ReactNode\n}) {\n return (\n <div className={cn('ml-auto flex items-center gap-1.5', className)}>\n {children}\n </div>\n )\n}\n\n/**\n * Convenience status pill for \"Draft / Deployed / Archived\" etc. — uses the\n * same dot+label aesthetic as `StatusDotBadge` but smaller for inline use\n * inside the top bar identity block.\n */\nfunction EditorTopBarStatusBadge({\n tone = 'success',\n label,\n}: {\n tone?: 'success' | 'neutral' | 'warn' | 'info'\n label: React.ReactNode\n}) {\n const palette =\n tone === 'success'\n ? { bg: 'bg-emerald-50', fg: 'text-emerald-700', dot: 'bg-emerald-500' }\n : tone === 'warn'\n ? { bg: 'bg-amber-50', fg: 'text-amber-700', dot: 'bg-amber-500' }\n : tone === 'info'\n ? { bg: 'bg-sky-50', fg: 'text-sky-700', dot: 'bg-sky-500' }\n : { bg: 'bg-black-6', fg: 'text-black-60', dot: 'bg-black-30' }\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium shrink-0',\n palette.bg,\n palette.fg,\n )}\n >\n <span className={cn('size-1.5 rounded-full', palette.dot)} />\n {label}\n </span>\n )\n}\n\nexport {\n EditorTopBar,\n EditorTopBarIdentity,\n EditorTopBarActions,\n EditorTopBarStatusBadge,\n EditorTopBarBackButton,\n}\n","import * as React from 'react'\nimport Link from 'next/link'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\nimport { cn } from '@shared/lib/utils'\n\n/**\n * EditorSideNav — vertical, grouped tab list for entity editors.\n *\n * Designed to drop in as the `<TabsList>` for a Radix `<Tabs orientation=\"vertical\">`\n * tree, so it works with the existing `<TabsContent value=\"…\">` pattern with\n * zero state plumbing. Visual goals:\n * - 220px wide rail with subtle right border\n * - Section headers (`EditorSideNavGroup`) use uppercase 11px tracking — same\n * density as the V2 dashboards' KPI labels\n * - Items are 28–30px tall with a soft fill on the active row\n *\n * Optional `header` / `footer` slots render INSIDE the rail's chrome but\n * OUTSIDE the Radix tablist, so non-tab controls (brand row, freshness\n * indicator, scope toggles) don't pollute the tablist's keyboard\n * semantics or screen-reader announcements. Without these slots, mixing\n * a `<button>` into the EditorSideNav children would put an interactive\n * non-tab control inside `role=tablist`, breaking arrow-key navigation.\n *\n * Usage:\n * <Tabs orientation=\"vertical\" defaultValue=\"overview\" className=\"flex …\">\n * <EditorSideNav\n * header={<BrandRow />}\n * footer={<LiveBadge />}\n * >\n * <EditorSideNavGroup label=\"General\">\n * <EditorSideNavItem value=\"overview\">Overview</EditorSideNavItem>\n * <EditorSideNavItem value=\"prompt\">Prompt</EditorSideNavItem>\n * </EditorSideNavGroup>\n * …\n * </EditorSideNav>\n * <div>\n * <TabsContent value=\"overview\">…</TabsContent>\n * </div>\n * </Tabs>\n */\n\ninterface EditorSideNavProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> {\n /** Width override in px. Defaults to 220. */\n width?: number\n /**\n * Content rendered above the tablist — brand row, identity, etc.\n * Lives outside the Radix tablist so it doesn't appear in keyboard /\n * screen-reader navigation as a tab. Receives the same horizontal\n * padding as the rail.\n */\n header?: React.ReactNode\n /**\n * Content rendered below the tablist and pinned to the bottom of\n * the rail (via `mt-auto`). Use for global controls and indicators\n * (scope toggles, data-freshness badges) — anything that's\n * interactive but not a tab. Lives outside the Radix tablist for\n * the same accessibility reason as `header`.\n */\n footer?: React.ReactNode\n}\n\nconst EditorSideNav = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n EditorSideNavProps\n>(({ className, width = 220, style, children, header, footer, ...props }, ref) => {\n // When the wrapper is needed (header / footer slotted), we render an\n // outer flex column that takes over the rail's visual chrome and\n // keeps the tablist tight to just its trigger children. When neither\n // slot is used, fall through to the un-wrapped single-element shape\n // so existing consumers don't see a structural change.\n const hasChrome = header != null || footer != null\n if (!hasChrome) {\n return (\n <TabsPrimitive.List\n ref={ref}\n data-slot=\"editor-side-nav\"\n className={cn(\n // `px-1.5` (6px) — tight horizontal rail. Item rows carry\n // their own `px-2.5` internal padding, so the effective\n // indent is ~16px which reads as a focused secondary nav\n // without wasting leading-edge real estate.\n 'shrink-0 self-stretch flex flex-col gap-3 overflow-y-auto bg-background border-r border-black-6 px-1.5 py-4',\n className,\n )}\n style={{ width, ...(style ?? {}) }}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n )\n }\n return (\n <aside\n data-slot=\"editor-side-nav-wrapper\"\n className=\"shrink-0 self-stretch flex flex-col bg-background border-r border-black-6 px-1.5 py-4\"\n style={{ width }}\n >\n {header && (\n <div data-slot=\"editor-side-nav-header\" className=\"shrink-0\">\n {header}\n </div>\n )}\n <TabsPrimitive.List\n ref={ref}\n data-slot=\"editor-side-nav\"\n className={cn(\n // `flex-1 min-h-0` is load-bearing: without `min-h-0` the\n // default flex `min-height: auto` keeps the list at its\n // natural height regardless of overflow, so on tight\n // viewports tab items spill past the rail boundary instead\n // of scrolling. `flex-1` claims the leftover space between\n // header and footer; together they make `overflow-y-auto`\n // actually do something.\n 'flex flex-1 min-h-0 flex-col gap-3 overflow-y-auto',\n className,\n )}\n style={style}\n {...props}\n >\n {children}\n </TabsPrimitive.List>\n {footer && (\n <div\n data-slot=\"editor-side-nav-footer\"\n className=\"mt-auto flex shrink-0 flex-col gap-sm pt-md\"\n >\n {footer}\n </div>\n )}\n </aside>\n )\n})\nEditorSideNav.displayName = 'EditorSideNav'\n\ninterface EditorSideNavGroupProps {\n label?: React.ReactNode\n // Optional small action rendered to the right of the label (e.g. a\n // `+` button that opens a create popover). Only renders when `label`\n // is present.\n headerTrailing?: React.ReactNode\n className?: string\n children?: React.ReactNode\n}\n\nfunction EditorSideNavGroup({\n label,\n headerTrailing,\n className,\n children,\n}: EditorSideNavGroupProps) {\n return (\n <div className={cn('flex flex-col', className)}>\n {label && (\n <div className=\"flex items-center justify-between px-2 pb-1\">\n <span className=\"text-xs font-semibold text-black-40\">{label}</span>\n {headerTrailing}\n </div>\n )}\n <div className=\"flex flex-col gap-0.5\">{children}</div>\n </div>\n )\n}\n\ninterface EditorSideNavItemProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> {\n /** Optional small right-aligned count or tag. */\n trailing?: React.ReactNode\n}\n\nconst EditorSideNavItem = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n EditorSideNavItemProps\n>(({ className, trailing, children, ...props }, ref) => {\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'group flex cursor-pointer items-center gap-2 px-2.5 py-1.5 min-h-[30px] rounded-md text-left text-[13px] tracking-tight transition-colors',\n // Idle state — darker default text so the rail reads as a\n // confident navigation list rather than secondary chrome.\n // Matches the Atlas Shell sidebar's resting state.\n 'text-black-80 hover:text-black-100 hover:bg-black-4',\n // Active state — bold + subtle fill. Dropped the 2px left\n // accent rail; the fill + weight do enough on their own and\n // the rail competed with the rounded-md corners.\n 'data-[state=active]:text-black-100 data-[state=active]:font-medium data-[state=active]:bg-black-6',\n className,\n )}\n {...props}\n >\n <span className=\"flex-1 min-w-0 truncate\">{children}</span>\n {trailing && <span className=\"shrink-0\">{trailing}</span>}\n </TabsPrimitive.Trigger>\n )\n})\nEditorSideNavItem.displayName = 'EditorSideNavItem'\n\n/**\n * Link-rendering sibling of `EditorSideNavItem`. Same visual surface; renders\n * as a Next.js `<Link>` instead of a Radix Tabs trigger. Use this when the\n * app's tabs map to real URL routes (rather than being driven by Radix\n * tablist state inside the page) so each item participates in browser\n * history and is shareable as a URL.\n *\n * Callers compute `active` themselves (typically from `usePathname()`) and\n * pass it in; the link mirrors the `data-[state=active]` styling of\n * `EditorSideNavItem` so the two can co-exist in the same rail visually\n * indistinguishable.\n */\ninterface EditorSideNavLinkProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {\n href: string\n active?: boolean\n trailing?: React.ReactNode\n}\n\nconst EditorSideNavLink = React.forwardRef<HTMLAnchorElement, EditorSideNavLinkProps>(\n ({ className, href, active, trailing, children, ...props }, ref) => {\n return (\n <Link\n ref={ref}\n href={href}\n data-state={active ? 'active' : undefined}\n className={cn(\n 'group flex cursor-pointer items-center gap-2 px-2.5 py-1.5 min-h-[30px] rounded-md text-left text-[13px] tracking-tight transition-colors',\n 'text-black-80 hover:text-black-100 hover:bg-black-4',\n 'data-[state=active]:text-black-100 data-[state=active]:font-medium data-[state=active]:bg-black-6',\n className,\n )}\n {...props}\n >\n <span className=\"flex-1 min-w-0 truncate\">{children}</span>\n {trailing && <span className=\"shrink-0\">{trailing}</span>}\n </Link>\n )\n },\n)\nEditorSideNavLink.displayName = 'EditorSideNavLink'\n\nexport {\n EditorSideNav,\n EditorSideNavGroup,\n EditorSideNavItem,\n EditorSideNavLink,\n}\n","import * as React from 'react'\nimport { cn } from '@shared/lib/utils'\n\n/**\n * EditorPageHeader — section title + description block used at the top of\n * each editor pane (Prompt, Tools, Input Schema, etc.).\n *\n * Replaces the older `<Panel>` Card-wrap pattern with a flat layout that\n * matches the new editor design. Title is 18px (one step up from the\n * dashboard's 16px page header), description is 13px secondary text.\n *\n * Pair with `EditorSection` for vertically-stacked content blocks under the\n * header — gives consistent spacing and an optional sub-section divider.\n *\n * Usage:\n * <EditorPagePane>\n * <EditorPageHeader\n * title=\"Prompt\"\n * description=\"The system prompt sent to the model on every run …\"\n * />\n * <EditorSection>…</EditorSection>\n * <EditorSection title=\"Model parameters\">…</EditorSection>\n * </EditorPagePane>\n */\n\ninterface EditorPageHeaderProps {\n title: React.ReactNode\n description?: React.ReactNode\n /** Right-aligned action(s) on the same row as the title. */\n actions?: React.ReactNode\n className?: string\n}\n\nfunction EditorPageHeader({ title, description, actions, className }: EditorPageHeaderProps) {\n return (\n <header\n data-slot=\"editor-page-header\"\n className={cn('flex items-start justify-between gap-4', className)}\n >\n <div className=\"min-w-0\">\n <h2 className=\"text-[18px] font-semibold tracking-tight text-black-90 leading-tight\">\n {title}\n </h2>\n {description && (\n <p className=\"mt-1 text-[13px] text-black-50 leading-relaxed max-w-2xl\">\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div className=\"flex items-center gap-1.5 shrink-0 pt-0.5\">{actions}</div>\n )}\n </header>\n )\n}\n\ninterface EditorPagePaneProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst EditorPagePane = React.forwardRef<HTMLDivElement, EditorPagePaneProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"editor-page-pane\"\n // Centered max-width column with consistent vertical rhythm; matches\n // the design's content density across all panes.\n className={cn(\n 'mx-auto w-full max-w-3xl px-6 py-8 flex flex-col gap-6',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n },\n)\nEditorPagePane.displayName = 'EditorPagePane'\n\ninterface EditorSectionProps\n // Drop the native `title` HTML attribute (string-only) so we can accept a\n // ReactNode for richer section headings (badges, mono spans, etc.).\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Subtle section heading rendered above the content (smaller than EditorPageHeader). */\n title?: React.ReactNode\n description?: React.ReactNode\n /** Right-aligned action(s) on the heading row. */\n actions?: React.ReactNode\n}\n\nconst EditorSection = React.forwardRef<HTMLDivElement, EditorSectionProps>(\n ({ className, title, description, actions, children, ...props }, ref) => {\n return (\n <section\n ref={ref}\n data-slot=\"editor-section\"\n className={cn('flex flex-col gap-3', className)}\n {...props}\n >\n {(title || description || actions) && (\n <div className=\"flex items-end justify-between gap-3\">\n <div className=\"min-w-0\">\n {title && (\n <div className=\"text-[13px] font-semibold text-black-90 tracking-tight\">\n {title}\n </div>\n )}\n {description && (\n <div className=\"text-[12px] text-black-50 mt-0.5\">{description}</div>\n )}\n </div>\n {actions && <div className=\"flex items-center gap-1.5 shrink-0\">{actions}</div>}\n </div>\n )}\n {children}\n </section>\n )\n },\n)\nEditorSection.displayName = 'EditorSection'\n\nexport { EditorPageHeader, EditorPagePane, EditorSection }\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","\"use client\";\n\n// src/popover.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar POPOVER_NAME = \"Popover\";\nvar [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);\nvar Popover = (props) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = false\n } = props;\n const popperScope = usePopperScope(__scopePopover);\n const triggerRef = React.useRef(null);\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: POPOVER_NAME\n });\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n PopoverProvider,\n {\n scope: __scopePopover,\n contentId: useId(),\n triggerRef,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n hasCustomAnchor,\n onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),\n onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),\n modal,\n children\n }\n ) });\n};\nPopover.displayName = POPOVER_NAME;\nvar ANCHOR_NAME = \"PopoverAnchor\";\nvar PopoverAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props;\n const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n React.useEffect(() => {\n onCustomAnchorAdd();\n return () => onCustomAnchorRemove();\n }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nPopoverAnchor.displayName = ANCHOR_NAME;\nvar TRIGGER_NAME = \"PopoverTrigger\";\nvar PopoverTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props;\n const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n const trigger = /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: trigger });\n }\n);\nPopoverTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"PopoverPortal\";\nvar [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar PopoverPortal = (props) => {\n const { __scopePopover, forceMount, children, container } = props;\n const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nPopoverPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"PopoverContent\";\nvar PopoverContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nPopoverContent.displayName = CONTENT_NAME;\nvar Slot = createSlot(\"PopoverContent.RemoveScroll\");\nvar PopoverContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const isRightClickOutsideRef = React.useRef(false);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n isRightClickOutsideRef.current = isRightClick;\n },\n { checkForDefaultPrevented: false }\n ),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nvar PopoverContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar PopoverContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props;\n const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n useFocusGuards();\n return /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onInteractOutside,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n \"data-state\": getState(context.open),\n role: \"dialog\",\n id: context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n )\n }\n )\n }\n );\n }\n);\nvar CLOSE_NAME = \"PopoverClose\";\nvar PopoverClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props;\n const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nPopoverClose.displayName = CLOSE_NAME;\nvar ARROW_NAME = \"PopoverArrow\";\nvar PopoverArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopePopover);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nPopoverArrow.displayName = ARROW_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Popover;\nvar Anchor2 = PopoverAnchor;\nvar Trigger = PopoverTrigger;\nvar Portal = PopoverPortal;\nvar Content2 = PopoverContent;\nvar Close = PopoverClose;\nvar Arrow2 = PopoverArrow;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n Close,\n Content2 as Content,\n Popover,\n PopoverAnchor,\n PopoverArrow,\n PopoverClose,\n PopoverContent,\n PopoverPortal,\n PopoverTrigger,\n Portal,\n Root2 as Root,\n Trigger,\n createPopoverScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@shared/lib/utils\"\nimport { usePortalContainer } from \"@shared/contexts/PortalContainerContext\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => {\n const container = usePortalContainer()\n return (\n <PopoverPrimitive.Portal container={container ?? undefined}>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-[60] 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 )\n})\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@shared/lib/utils\"\nimport { usePortalContainer, useAppClassName } from \"@shared/contexts/PortalContainerContext\"\n\n/**\n * Dialog — modal dialog built on Radix's Dialog primitive.\n *\n * Composition (header + body + footer):\n *\n * <Dialog>\n * <DialogTrigger asChild><Button>Open</Button></DialogTrigger>\n * <DialogContent>\n * <DialogHeader>\n * <DialogTitle>Title</DialogTitle>\n * <DialogDescription>Optional helper copy.</DialogDescription>\n * </DialogHeader>\n * <DialogBody>\n * {form fields / long content}\n * </DialogBody>\n * <DialogFooter>\n * <DialogClose asChild><Button variant=\"ghost\">Cancel</Button></DialogClose>\n * <Button>Save</Button>\n * </DialogFooter>\n * </DialogContent>\n * </Dialog>\n *\n * Layout contract:\n * - `DialogContent` is a flex column with `overflow-hidden` — the\n * rounded corners clip the header/body/footer surfaces so they\n * meet the corners cleanly.\n * - `DialogHeader` is `shrink-0` on the shared white (`bg-card`)\n * surface with a 1px `border-b`. The border acts as the scroll\n * horizon — content in `DialogBody` slides under that line when\n * scrolled. No tint on the header: the dialog reads as one clean\n * white card with subtle dividers rather than stratified bands.\n * - `DialogBody` is `flex-1 min-h-0 overflow-y-auto` with its own\n * padding, same white surface as the header. Single scroll region\n * — content scrolls independently of the sticky header/footer.\n * - `DialogFooter` mirrors the header: white surface + 1px\n * `border-t` so the action row reads as a capped footer that\n * doesn't scroll with content.\n * - All three zones share `px-6 py-4` padding so the vertical\n * rhythm stays uniform; the borders are the only visual\n * differentiator.\n *\n * Atlas-specific behaviors:\n * - Portal mounts into the shared Atlas portal container\n * (`usePortalContainer()`), so dialogs trap focus + stacking\n * correctly inside MFEs (chat-admin, inbox, agents) that isolate\n * their own DOM scope.\n * - Fallback portal root is appended under `document.body` (NOT\n * `documentElement`) — a portal on `<html>` breaks Radix's\n * `aria-hidden` bookkeeping for nested layers.\n * - Title renders at `text-base` (16px) semibold — NOT `text-lg`\n * (which in Atlas's token scale is 26px / hero size).\n * - Overlay is `bg-foreground/50` with a light backdrop blur.\n * - Content rounds to `rounded-md` (10px, `--radius-md`).\n */\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nfunction DialogPortal({\n container,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n const portalContainer = usePortalContainer()\n const appClassName = useAppClassName()\n const [portalRoot, setPortalRoot] = React.useState<HTMLDivElement | null>(null)\n\n React.useLayoutEffect(() => {\n if (container || portalContainer) return\n const div = document.createElement(\"div\")\n div.id = \"shared-dialog-portal-root\"\n if (appClassName) div.className = appClassName\n document.body.appendChild(div)\n setPortalRoot(div)\n return () => div.remove()\n }, [container, portalContainer, appClassName])\n\n return (\n <DialogPrimitive.Portal\n container={container ?? portalContainer ?? portalRoot ?? undefined}\n {...props}\n />\n )\n}\n\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-foreground/50 backdrop-blur-sm\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"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 // Positioning — fixed center via 50% translate trick.\n \"fixed left-[50%] top-[50%] z-50 w-full max-w-lg translate-x-[-50%] translate-y-[-50%]\",\n // Max height stops dialogs from pushing past the viewport on\n // short screens / long content — the body region becomes the\n // single scroll container within this cap.\n \"max-h-[calc(100vh-4rem)]\",\n // Flex column so Header (shrink-0) + Body (flex-1) + Footer\n // (shrink-0) compose into the sticky-chrome + scrollable-body\n // pattern. `overflow-hidden` is load-bearing — it clips the\n // header/body/footer surfaces to the rounded corners so the\n // chrome doesn't paint past the rounded border.\n \"flex flex-col overflow-hidden\",\n // Surface — `bg-card` (pure white via `--card`), matches the\n // rest of Atlas's card-shaped surfaces. Border + rounded-md\n // (10px). `shadow-lg` lifts the modal above the page.\n \"rounded-md border bg-card shadow-lg\",\n // Default body padding + scroll behavior for direct children\n // that AREN'T part of the chrome (Header / Body / Footer /\n // Close). Covers the legacy composition pattern where callers\n // put form content directly inside `DialogContent` without\n // wrapping it in `DialogBody`:\n //\n // <DialogContent>\n // <DialogHeader>…</DialogHeader>\n // <form>…</form> ← gets px-6 py-4 + becomes the scroll\n // region (flex-1 min-h-0 overflow-y-auto)\n // <DialogFooter>…</DialogFooter>\n // </DialogContent>\n //\n // The `flex-1 min-h-0 overflow-y-auto` trio is what makes the\n // non-chrome child fill remaining space AND scroll its own\n // content — so the header and footer stay fixed at the\n // dialog's top/bottom edges while long content scrolls under\n // the header's `border-b` / over the footer's `border-t`.\n // Without `min-h-0` a flex child refuses to shrink below its\n // content's natural height, which disables the overflow.\n //\n // The attribute selector excludes anything with a\n // `data-slot=\"dialog-*\"` attribute, so the chrome slots keep\n // their own full-bleed non-scrolling behavior. Consumers that\n // DO use `DialogBody` also avoid double-padding + double-\n // scrolling because it has `data-slot=\"dialog-body\"`.\n \"[&>*:not([data-slot^=dialog-])]:flex-1\",\n \"[&>*:not([data-slot^=dialog-])]:min-h-0\",\n \"[&>*:not([data-slot^=dialog-])]:overflow-y-auto\",\n \"[&>*:not([data-slot^=dialog-])]:px-6\",\n \"[&>*:not([data-slot^=dialog-])]:py-4\",\n // Animation — fade + subtle zoom-in from 95%.\n \"duration-200\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n // `data-slot=\"dialog-close\"` keeps this button out of the\n // auto-padding selector on DialogContent — the close is\n // absolute-positioned chrome, not body content, so it should\n // not receive the default px-6 py-4 inset.\n data-slot=\"dialog-close\"\n className={cn(\n // Corner close affordance. Absolute-positioned on the content\n // so it sits over the HEADER surface at the same 16px inset\n // as the header's internal padding — close button aligns with\n // the title visually even though the two elements come from\n // different DOM siblings.\n \"absolute right-4 top-4 z-10 flex size-6 items-center justify-center rounded-xs\",\n \"text-black-50 opacity-80 transition-opacity hover:opacity-100 hover:bg-accent\",\n \"focus:outline-none focus:ring-1 focus:ring-ring\",\n \"disabled:pointer-events-none\",\n \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n )}\n >\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nfunction DialogHeader({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\n // `shrink-0` pins the header to the top of DialogContent's\n // flex column — it MUST NOT compress when body content\n // overflows, because the whole point of this layout is a\n // fixed header over a scrollable body. Without `shrink-0`\n // default flex behavior would shrink each child proportionally\n // once content exceeds the dialog's max-height.\n \"shrink-0\",\n // White header surface — inherits `bg-card` from DialogContent.\n // The 1px `border-b` is the ONLY visual separator between the\n // header and the scrollable body. When body content scrolls,\n // it slides UNDER this border, giving a clean horizon without\n // needing a tinted band. `px-6 py-4` matches DialogBody and\n // DialogFooter so vertical rhythm stays uniform across zones.\n \"flex flex-col gap-1.5 px-6 py-4 border-b border-border\",\n // Title sits left of the close button. 40px right reserve\n // keeps title text from colliding with the × at narrow widths.\n \"pr-12\",\n \"text-left\",\n className,\n )}\n {...props}\n />\n )\n}\nDialogHeader.displayName = \"DialogHeader\"\n\n/**\n * DialogBody — the scrollable body region between DialogHeader and\n * DialogFooter. New in this revision.\n *\n * Use this for any dialog with form fields, long content, or anything\n * that might exceed the viewport. For very short dialogs where the\n * scroll affordance is overkill, consumers can still render their own\n * `<div>` between header and footer; this component just encodes the\n * standard pattern (flex-1 + min-h-0 + overflow-y-auto + default\n * padding) so callers don't have to remember the details.\n */\nfunction DialogBody({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"dialog-body\"\n className={cn(\n // `flex-1 min-h-0` — the \"fills remaining space AND is allowed\n // to shrink below content size\" combination that lets the\n // inner `overflow-y-auto` actually scroll. Without `min-h-0`\n // the flex child would cling to content size and refuse to\n // scroll.\n \"flex-1 min-h-0 overflow-y-auto\",\n // Padding matches DialogHeader and DialogFooter so all three\n // zones share the same inset and vertical rhythm. The header\n // and footer borders — not tinted bands — do the visual\n // separation work.\n \"px-6 py-4\",\n className,\n )}\n {...props}\n />\n )\n}\nDialogBody.displayName = \"DialogBody\"\n\nfunction DialogFooter({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n // `shrink-0` pins the action row to the bottom of the flex\n // column — mirror of DialogHeader's fixed-top behavior.\n \"shrink-0\",\n // Mirror of DialogHeader: white surface (from parent `bg-card`)\n // with a 1px `border-t` that caps the scrollable body. Same\n // `px-6 py-4` padding as the header/body for uniform vertical\n // rhythm across all three zones.\n \"flex flex-col-reverse gap-2 px-6 py-4 border-t border-border\",\n \"sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\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 // `text-base` = 16px — the card/dialog title tier. Avoid `text-lg`\n // which in Atlas's token scale is 26px (hero metrics), not the\n // 18px that shadcn's default scale assumes.\n className={cn(\n \"text-base font-semibold leading-none tracking-tight text-foreground\",\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 // `text-body-sm` (13px) for helper copy in the header — one\n // notch below the 16px title so the hierarchy is clear.\n // `text-muted-foreground` establishes secondary voice against\n // the title.\n className={cn(\"text-body-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogBody,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@shared/lib/utils\"\nimport { usePortalContainer, useAppClassName } from \"@shared/contexts/PortalContainerContext\"\n\nconst Sheet = SheetPrimitive.Root\n\nconst SheetTrigger = SheetPrimitive.Trigger\n\nconst SheetClose = SheetPrimitive.Close\n\nfunction SheetPortal({\n container,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n const portalContainer = usePortalContainer()\n const appClassName = useAppClassName()\n const [portalRoot, setPortalRoot] = React.useState<HTMLDivElement | null>(null)\n\n React.useLayoutEffect(() => {\n if (container || portalContainer) return\n const div = document.createElement(\"div\")\n div.id = \"shared-sheet-portal-root\"\n if (appClassName) div.className = appClassName\n document.documentElement.appendChild(div)\n setPortalRoot(div)\n return () => div.remove()\n }, [container, portalContainer, appClassName])\n\n return (\n <SheetPrimitive.Portal\n container={container ?? portalContainer ?? portalRoot ?? undefined}\n {...props}\n />\n )\n}\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/40 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))\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName\n\nconst sheetVariants = cva(\n \"fixed z-50 gap-4 bg-background shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-200 data-[state=open]:duration-300\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom:\n \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 overflow-y-auto border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n right:\n \"inset-y-0 right-0 h-full w-3/4 overflow-y-auto border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n },\n)\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {\n hideCloseButton?: boolean\n}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, hideCloseButton, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n {children}\n {!hideCloseButton && (\n <SheetPrimitive.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 cursor-pointer\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n))\nSheetContent.displayName = SheetPrimitive.Content.displayName\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 border-b border-black-10 px-5 py-4 text-left\",\n className,\n )}\n {...props}\n />\n)\nSheetHeader.displayName = \"SheetHeader\"\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse border-t border-black-10 px-5 py-4 sm:flex-row sm:justify-end sm:space-x-2\",\n className,\n )}\n {...props}\n />\n)\nSheetFooter.displayName = \"SheetFooter\"\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\"text-base font-semibold text-black-90\", className)}\n {...props}\n />\n))\nSheetTitle.displayName = SheetPrimitive.Title.displayName\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn(\"text-xs text-black-60\", className)}\n {...props}\n />\n))\nSheetDescription.displayName = SheetPrimitive.Description.displayName\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\";\n\n// src/menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs, composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar FIRST_KEYS = [\"ArrowDown\", \"PageUp\", \"Home\"];\nvar LAST_KEYS = [\"ArrowUp\", \"PageDown\", \"End\"];\nvar FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nvar SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, \"ArrowRight\"],\n rtl: [...SELECTION_KEYS, \"ArrowLeft\"]\n};\nvar SUB_CLOSE_KEYS = {\n ltr: [\"ArrowLeft\"],\n rtl: [\"ArrowRight\"]\n};\nvar MENU_NAME = \"Menu\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);\nvar [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope\n]);\nvar usePopperScope = createPopperScope();\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\nvar [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\nvar Menu = (props) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n React.useEffect(() => {\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => isUsingKeyboardRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n document.removeEventListener(\"pointerdown\", handlePointer, { capture: true });\n document.removeEventListener(\"pointermove\", handlePointer, { capture: true });\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuRootProvider,\n {\n scope: __scopeMenu,\n onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]),\n isUsingKeyboardRef,\n dir: direction,\n modal,\n children\n }\n )\n }\n ) });\n};\nMenu.displayName = MENU_NAME;\nvar ANCHOR_NAME = \"MenuAnchor\";\nvar MenuAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nMenuAnchor.displayName = ANCHOR_NAME;\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = (props) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });\n }\n);\nvar MenuRootContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n disableOutsideScroll: true,\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n ),\n onDismiss: () => context.onOpenChange(false)\n }\n );\n }\n);\nvar MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n onDismiss: () => context.onOpenChange(false)\n }\n );\n});\nvar Slot = createSlot(\"MenuContent.ScrollLock\");\nvar MenuContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef(\"\");\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef(\"right\");\n const lastPointerXRef = React.useRef(0);\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;\n const handleTypeaheadSearch = (key) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n };\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n useFocusGuards();\n const isPointerMovingToSubmenu = React.useCallback((event) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentProvider,\n {\n scope: __scopeMenu,\n searchRef,\n onItemEnter: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n onItemLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n ),\n onTriggerLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n pointerGraceTimerRef,\n onPointerGraceIntentChange: React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, []),\n children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n }),\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n children: /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n dir: rootContext.dir,\n orientation: \"vertical\",\n loop,\n currentTabStopId: currentItemId,\n onCurrentTabStopIdChange: setCurrentItemId,\n onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n }),\n preventScrollOnEntryFocus: true,\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"data-state\": getOpenState(context.open),\n \"data-radix-menu-content\": \"\",\n dir: rootContext.dir,\n ...popperScope,\n ...contentProps,\n ref: composedRefs,\n style: { outline: \"none\", ...contentProps.style },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const target = event.target;\n const isKeyDownInside = target.closest(\"[data-radix-menu-content]\") === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n }),\n onBlur: composeEventHandlers(props.onBlur, (event) => {\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = \"\";\n }\n }),\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? \"right\" : \"left\";\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )\n }\n )\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"MenuGroup\";\nvar MenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }\n);\nMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"MenuLabel\";\nvar MenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }\n);\nMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n return /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n ...itemProps,\n ref: composedRefs,\n disabled,\n onClick: composeEventHandlers(props.onClick, handleSelect),\n onPointerDown: (event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n },\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n if (!isPointerDownRef.current) event.currentTarget?.click();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (disabled || isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }\n);\nMenuItem.displayName = ITEM_NAME;\nvar MenuItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n const [textContent, setTextContent] = React.useState(\"\");\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? \"\").trim());\n }\n }, [itemProps.children]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeMenu,\n disabled,\n textValue: textValue ?? textContent,\n children: /* @__PURE__ */ jsx(RovingFocusGroup.Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"menuitem\",\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...itemProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n ),\n onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))\n }\n ) })\n }\n );\n }\n);\nvar CHECKBOX_ITEM_NAME = \"MenuCheckboxItem\";\nvar MenuCheckboxItem = React.forwardRef(\n (props, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemcheckbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n ...checkboxItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: () => {\n } }\n);\nvar MenuRadioGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return /* @__PURE__ */ jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });\n }\n);\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemradio\",\n \"aria-checked\": checked,\n ...radioItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...itemIndicatorProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(indicatorContext.checked)\n }\n )\n }\n );\n }\n);\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SEPARATOR_NAME = \"MenuSeparator\";\nvar MenuSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"separator\",\n \"aria-orientation\": \"horizontal\",\n ...separatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"MenuArrow\";\nvar MenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = (props) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuSubProvider,\n {\n scope: __scopeMenu,\n contentId: useId(),\n triggerId: useId(),\n trigger,\n onTriggerChange: setTrigger,\n children\n }\n )\n }\n ) });\n};\nMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n return /* @__PURE__ */ jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n id: subContext.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": subContext.contentId,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composeRefs(forwardedRef, subContext.onTriggerChange),\n onClick: (event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n },\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n const side = context.content?.dataset.side;\n const rightSide = side === \"right\";\n const bleed = rightSide ? -5 : 5;\n const contentNearEdge = contentRect[rightSide ? \"left\" : \"right\"];\n const contentFarEdge = contentRect[rightSide ? \"right\" : \"left\"];\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom }\n ],\n side\n });\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n ),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (props.disabled || isTypingAhead && event.key === \" \") return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n context.content?.focus();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n id: subContext.contentId,\n \"aria-labelledby\": subContext.triggerId,\n ...subContentProps,\n ref: composedRefs,\n align: \"start\",\n side: rootContext.dir === \"rtl\" ? \"left\" : \"right\",\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n trapFocus: false,\n onOpenAutoFocus: (event) => {\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n },\n onCloseAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n }),\n onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n event.preventDefault();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isKeyDownInside = event.currentTarget.contains(event.target);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n subContext.trigger?.focus();\n event.preventDefault();\n }\n })\n }\n ) }) }) });\n }\n);\nMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nfunction focusFirst(candidates) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nfunction getNextMatch(values, search, currentMatch) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find(\n (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : void 0;\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\nvar Root3 = Menu;\nvar Anchor2 = MenuAnchor;\nvar Portal = MenuPortal;\nvar Content2 = MenuContent;\nvar Group = MenuGroup;\nvar Label = MenuLabel;\nvar Item2 = MenuItem;\nvar CheckboxItem = MenuCheckboxItem;\nvar RadioGroup = MenuRadioGroup;\nvar RadioItem = MenuRadioItem;\nvar ItemIndicator = MenuItemIndicator;\nvar Separator = MenuSeparator;\nvar Arrow2 = MenuArrow;\nvar Sub = MenuSub;\nvar SubTrigger = MenuSubTrigger;\nvar SubContent = MenuSubContent;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n CheckboxItem,\n Content2 as Content,\n Group,\n Item2 as Item,\n ItemIndicator,\n Label,\n Menu,\n MenuAnchor,\n MenuArrow,\n MenuCheckboxItem,\n MenuContent,\n MenuGroup,\n MenuItem,\n MenuItemIndicator,\n MenuLabel,\n MenuPortal,\n MenuRadioGroup,\n MenuRadioItem,\n MenuSeparator,\n MenuSub,\n MenuSubContent,\n MenuSubTrigger,\n Portal,\n RadioGroup,\n RadioItem,\n Root3 as Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/context-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CONTEXT_MENU_NAME = \"ContextMenu\";\nvar [createContextMenuContext, createContextMenuScope] = createContextScope(CONTEXT_MENU_NAME, [\n createMenuScope\n]);\nvar useMenuScope = createMenuScope();\nvar [ContextMenuProvider, useContextMenuContext] = createContextMenuContext(CONTEXT_MENU_NAME);\nvar ContextMenu = (props) => {\n const { __scopeContextMenu, children, onOpenChange, dir, modal = true } = props;\n const [open, setOpen] = React.useState(false);\n const menuScope = useMenuScope(__scopeContextMenu);\n const handleOpenChangeProp = useCallbackRef(onOpenChange);\n const handleOpenChange = React.useCallback(\n (open2) => {\n setOpen(open2);\n handleOpenChangeProp(open2);\n },\n [handleOpenChangeProp]\n );\n return /* @__PURE__ */ jsx(\n ContextMenuProvider,\n {\n scope: __scopeContextMenu,\n open,\n onOpenChange: handleOpenChange,\n modal,\n children: /* @__PURE__ */ jsx(\n MenuPrimitive.Root,\n {\n ...menuScope,\n dir,\n open,\n onOpenChange: handleOpenChange,\n modal,\n children\n }\n )\n }\n );\n};\nContextMenu.displayName = CONTEXT_MENU_NAME;\nvar TRIGGER_NAME = \"ContextMenuTrigger\";\nvar ContextMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, disabled = false, ...triggerProps } = props;\n const context = useContextMenuContext(TRIGGER_NAME, __scopeContextMenu);\n const menuScope = useMenuScope(__scopeContextMenu);\n const pointRef = React.useRef({ x: 0, y: 0 });\n const virtualRef = React.useRef({\n getBoundingClientRect: () => DOMRect.fromRect({ width: 0, height: 0, ...pointRef.current })\n });\n const longPressTimerRef = React.useRef(0);\n const clearLongPress = React.useCallback(\n () => window.clearTimeout(longPressTimerRef.current),\n []\n );\n const handleOpen = (event) => {\n pointRef.current = { x: event.clientX, y: event.clientY };\n context.onOpenChange(true);\n };\n React.useEffect(() => clearLongPress, [clearLongPress]);\n React.useEffect(() => void (disabled && clearLongPress()), [disabled, clearLongPress]);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { ...menuScope, virtualRef }),\n /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n ...triggerProps,\n ref: forwardedRef,\n style: { WebkitTouchCallout: \"none\", ...props.style },\n onContextMenu: disabled ? props.onContextMenu : composeEventHandlers(props.onContextMenu, (event) => {\n clearLongPress();\n handleOpen(event);\n event.preventDefault();\n }),\n onPointerDown: disabled ? props.onPointerDown : composeEventHandlers(\n props.onPointerDown,\n whenTouchOrPen((event) => {\n clearLongPress();\n longPressTimerRef.current = window.setTimeout(() => handleOpen(event), 700);\n })\n ),\n onPointerMove: disabled ? props.onPointerMove : composeEventHandlers(props.onPointerMove, whenTouchOrPen(clearLongPress)),\n onPointerCancel: disabled ? props.onPointerCancel : composeEventHandlers(props.onPointerCancel, whenTouchOrPen(clearLongPress)),\n onPointerUp: disabled ? props.onPointerUp : composeEventHandlers(props.onPointerUp, whenTouchOrPen(clearLongPress))\n }\n )\n ] });\n }\n);\nContextMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"ContextMenuPortal\";\nvar ContextMenuPortal = (props) => {\n const { __scopeContextMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nContextMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"ContextMenuContent\";\nvar ContextMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...contentProps } = props;\n const context = useContextMenuContext(CONTENT_NAME, __scopeContextMenu);\n const menuScope = useMenuScope(__scopeContextMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n side: \"right\",\n sideOffset: 2,\n align: \"start\",\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented && hasInteractedOutsideRef.current) {\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented && !context.modal) hasInteractedOutsideRef.current = true;\n },\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-context-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-context-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-context-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-context-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-context-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nContextMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"ContextMenuGroup\";\nvar ContextMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nContextMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"ContextMenuLabel\";\nvar ContextMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nContextMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"ContextMenuItem\";\nvar ContextMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nContextMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"ContextMenuCheckboxItem\";\nvar ContextMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nContextMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"ContextMenuRadioGroup\";\nvar ContextMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nContextMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"ContextMenuRadioItem\";\nvar ContextMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nContextMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"ContextMenuItemIndicator\";\nvar ContextMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nContextMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"ContextMenuSeparator\";\nvar ContextMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nContextMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"ContextMenuArrow\";\nvar ContextMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nContextMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"ContextMenuSub\";\nvar ContextMenuSub = (props) => {\n const { __scopeContextMenu, children, onOpenChange, open: openProp, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: SUB_NAME\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nContextMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"ContextMenuSubTrigger\";\nvar ContextMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...triggerItemProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...triggerItemProps, ref: forwardedRef });\n});\nContextMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"ContextMenuSubContent\";\nvar ContextMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-context-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-context-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-context-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-context-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-context-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nContextMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction whenTouchOrPen(handler) {\n return (event) => event.pointerType !== \"mouse\" ? handler(event) : void 0;\n}\nvar Root2 = ContextMenu;\nvar Trigger = ContextMenuTrigger;\nvar Portal2 = ContextMenuPortal;\nvar Content2 = ContextMenuContent;\nvar Group2 = ContextMenuGroup;\nvar Label2 = ContextMenuLabel;\nvar Item2 = ContextMenuItem;\nvar CheckboxItem2 = ContextMenuCheckboxItem;\nvar RadioGroup2 = ContextMenuRadioGroup;\nvar RadioItem2 = ContextMenuRadioItem;\nvar ItemIndicator2 = ContextMenuItemIndicator;\nvar Separator2 = ContextMenuSeparator;\nvar Arrow2 = ContextMenuArrow;\nvar Sub2 = ContextMenuSub;\nvar SubTrigger2 = ContextMenuSubTrigger;\nvar SubContent2 = ContextMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n ContextMenu,\n ContextMenuArrow,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuGroup,\n ContextMenuItem,\n ContextMenuItemIndicator,\n ContextMenuLabel,\n ContextMenuPortal,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createContextMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@shared/lib/utils\"\nimport { usePortalContainer } from \"@shared/contexts/PortalContainerContext\"\n\nconst ContextMenu = ContextMenuPrimitive.Root\n\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger\n\nconst ContextMenuGroup = ContextMenuPrimitive.Group\n\nconst ContextMenuPortal = ContextMenuPrimitive.Portal\n\nconst ContextMenuSub = ContextMenuPrimitive.Sub\n\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup\n\nconst ContextMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n))\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName\n\nconst ContextMenuSubContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-[60] 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 origin-[--radix-context-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n))\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName\n\nconst ContextMenuContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => {\n const container = usePortalContainer()\n return (\n <ContextMenuPrimitive.Portal container={container ?? undefined}>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"z-[60] max-h-[var(--radix-context-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"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 origin-[--radix-context-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n )\n})\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName\n\nconst ContextMenuItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n }\n>(({ className, inset, variant, ...props }, ref) => (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-pointer select-none items-center gap-2 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 [&>svg]:size-4 [&>svg]:shrink-0\",\n inset && \"pl-8\",\n variant === \"destructive\" && \"text-destructive focus:text-destructive focus:bg-destructive/10\",\n className\n )}\n {...props}\n />\n))\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-pointer 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 <ContextMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n))\nContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName\n\nconst ContextMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-pointer 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 <ContextMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n))\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName\n\nconst ContextMenuLabel = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.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))\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName\n\nconst ContextMenuSeparator = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName\n\nconst ContextMenuShortcut = ({\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}\nContextMenuShortcut.displayName = \"ContextMenuShortcut\"\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n","import { cn } from '@shared/lib/utils'\n\nconst PALETTE = [\n 'bg-blue-500 text-white',\n 'bg-pink-500 text-white',\n 'bg-emerald-500 text-white',\n 'bg-sky-500 text-white',\n 'bg-amber-600 text-white',\n 'bg-violet-500 text-white',\n 'bg-emerald-600 text-white',\n 'bg-red-600 text-white',\n 'bg-teal-500 text-white',\n] as const\n\nfunction hashColor(identifier: string): string {\n let h = 0\n for (let i = 0; i < identifier.length; i++) {\n h = (h * 31 + identifier.charCodeAt(i)) | 0\n }\n return PALETTE[Math.abs(h) % PALETTE.length]\n}\n\nfunction deriveInitials(name: string): string {\n return name\n .split(/[\\s,]+/)\n .filter(Boolean)\n .map((w) => w[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n}\n\ninterface UserAvatarProps {\n name: string\n /** Stable identifier for deterministic color (e.g. email). Falls back to name. */\n colorKey?: string\n /**\n * Optional explicit initials (e.g. \"AR\", \"ML\"). Use when the displayed\n * `name` is a single token but you want a two-letter avatar — common in\n * Jarvis where `emailToName()` returns just the first name from the\n * TEAM roster. Falls back to deriving from `name` when omitted, which\n * yields a single letter for one-word names.\n */\n initials?: string\n /** Size in px. Defaults to 20. */\n size?: number\n className?: string\n}\n\nfunction UserAvatar({\n name,\n colorKey,\n initials: explicitInitials,\n size = 20,\n className,\n}: UserAvatarProps) {\n const initials = explicitInitials?.trim() || deriveInitials(name)\n const color = hashColor(colorKey ?? name)\n const fontSize = Math.round(size * (initials.length > 1 ? 0.42 : 0.5))\n\n return (\n <span\n className={cn(\n 'inline-flex shrink-0 items-center justify-center rounded-full font-semibold uppercase',\n color,\n className,\n )}\n style={{ width: size, height: size, fontSize }}\n title={name}\n >\n {initials}\n </span>\n )\n}\n\nexport { UserAvatar, hashColor as userAvatarColor, deriveInitials }\n","import * as React from \"react\"\n\nimport { cn } from \"@shared/lib/utils\"\n\ninterface TextareaOwnProps {\n /**\n * Error state — destructive border, destructive focus ring, and\n * `aria-invalid=\"true\"`. Mirrors `Input`'s `error` prop so the three\n * form primitives share the same API surface.\n */\n error?: boolean | string\n}\n\ntype TextareaProps = React.ComponentProps<\"textarea\"> & TextareaOwnProps\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, error, ...props }, ref) => {\n const hasError = !!error\n return (\n <textarea\n aria-invalid={hasError || undefined}\n className={cn(\n // `rounded-sm` = 8px (`--radius-sm`) — shared form-input radius.\n // See Input / Select — same token so the three read as a set.\n \"flex min-h-[60px] w-full rounded-sm border bg-background px-3 py-2 text-base transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n hasError\n ? \"border-destructive focus-visible:ring-destructive\"\n : \"border-input focus-visible:ring-ring\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\nexport type { TextareaProps }\n","\"use client\";\n\n// src/alert-dialog.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { createDialogScope } from \"@radix-ui/react-dialog\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar ROOT_NAME = \"AlertDialog\";\nvar [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope\n]);\nvar useDialogScope = createDialogScope();\nvar AlertDialog = (props) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...dialogScope, ...alertDialogProps, modal: true });\n};\nAlertDialog.displayName = ROOT_NAME;\nvar TRIGGER_NAME = \"AlertDialogTrigger\";\nvar AlertDialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef });\n }\n);\nAlertDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"AlertDialogPortal\";\nvar AlertDialogPortal = (props) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { ...dialogScope, ...portalProps });\n};\nAlertDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"AlertDialogOverlay\";\nvar AlertDialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef });\n }\n);\nAlertDialogOverlay.displayName = OVERLAY_NAME;\nvar CONTENT_NAME = \"AlertDialogContent\";\nvar [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);\nvar Slottable = createSlottable(\"AlertDialogContent\");\nvar AlertDialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef(null);\n return /* @__PURE__ */ jsx(\n DialogPrimitive.WarningProvider,\n {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"alert-dialog\",\n children: /* @__PURE__ */ jsx(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: /* @__PURE__ */ jsxs(\n DialogPrimitive.Content,\n {\n role: \"alertdialog\",\n ...dialogScope,\n ...contentProps,\n ref: composedRefs,\n onOpenAutoFocus: composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n }),\n onPointerDownOutside: (event) => event.preventDefault(),\n onInteractOutside: (event) => event.preventDefault(),\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef })\n ]\n }\n ) })\n }\n );\n }\n);\nAlertDialogContent.displayName = CONTENT_NAME;\nvar TITLE_NAME = \"AlertDialogTitle\";\nvar AlertDialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Title, { ...dialogScope, ...titleProps, ref: forwardedRef });\n }\n);\nAlertDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"AlertDialogDescription\";\nvar AlertDialogDescription = React.forwardRef((props, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef });\n});\nAlertDialogDescription.displayName = DESCRIPTION_NAME;\nvar ACTION_NAME = \"AlertDialogAction\";\nvar AlertDialogAction = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...actionProps, ref: forwardedRef });\n }\n);\nAlertDialogAction.displayName = ACTION_NAME;\nvar CANCEL_NAME = \"AlertDialogCancel\";\nvar AlertDialogCancel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...cancelProps, ref });\n }\n);\nAlertDialogCancel.displayName = CANCEL_NAME;\nvar DescriptionWarning = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the \\`${CONTENT_NAME}\\` by passing a \\`${DESCRIPTION_NAME}\\` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an \\`id\\` and passing the same value to the \\`aria-describedby\\` prop in \\`${CONTENT_NAME}\\`. If the description is confusing or duplicative for sighted users, you can use the \\`@radix-ui/react-visually-hidden\\` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;\n React.useEffect(() => {\n const hasDescription = document.getElementById(\n contentRef.current?.getAttribute(\"aria-describedby\")\n );\n if (!hasDescription) console.warn(MESSAGE);\n }, [MESSAGE, contentRef]);\n return null;\n};\nvar Root2 = AlertDialog;\nvar Trigger2 = AlertDialogTrigger;\nvar Portal2 = AlertDialogPortal;\nvar Overlay2 = AlertDialogOverlay;\nvar Content2 = AlertDialogContent;\nvar Action = AlertDialogAction;\nvar Cancel = AlertDialogCancel;\nvar Title2 = AlertDialogTitle;\nvar Description2 = AlertDialogDescription;\nexport {\n Action,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n Cancel,\n Content2 as Content,\n Description2 as Description,\n Overlay2 as Overlay,\n Portal2 as Portal,\n Root2 as Root,\n Title2 as Title,\n Trigger2 as Trigger,\n createAlertDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@shared/lib/utils\"\nimport { buttonVariants } from \"@shared/components/ui/button\"\nimport { usePortalContainer, useAppClassName } from \"@shared/contexts/PortalContainerContext\"\n\nconst AlertDialog = AlertDialogPrimitive.Root\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\n\nfunction AlertDialogPortal({\n container,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n const portalContainer = usePortalContainer()\n const appClassName = useAppClassName()\n const [portalRoot, setPortalRoot] = React.useState<HTMLDivElement | null>(null)\n\n React.useLayoutEffect(() => {\n if (container || portalContainer) return\n const div = document.createElement(\"div\")\n div.id = \"shared-alert-dialog-portal-root\"\n if (appClassName) div.className = appClassName\n document.documentElement.appendChild(div)\n setPortalRoot(div)\n return () => div.remove()\n }, [container, portalContainer, appClassName])\n\n return (\n <AlertDialogPrimitive.Portal\n container={container ?? portalContainer ?? portalRoot ?? undefined}\n {...props}\n />\n )\n}\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(\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))\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(\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 </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)}\n {...props}\n />\n)\nAlertDialogHeader.displayName = \"AlertDialogHeader\"\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\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\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\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\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nAlertDialogDescription.displayName =\n 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\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\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\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n"],"x_google_ignoreList":[2,4,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,30,31,32,33,34,35,36,37,38,39,44,46,47,48,49,50,51,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,88,90,91,111,112,113,114,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,152,155,156,160],"mappings":";;;;;;;;AAAA,IAAM,IAAc,IAAI,KAAK,aAAa,SAAS;CACjD,OAAO;CACP,UAAU;CACV,uBAAuB;CACxB,CAAC,EAEI,IAAqB,IAAI,KAAK,aAAa,SAAS;CACxD,OAAO;CACP,UAAU;CACV,uBAAuB;CACxB,CAAC,EAEI,IAAa,IAAI,KAAK,aAAa,SAAS;CAChD,UAAU;CACV,uBAAuB;CACxB,CAAC,EAEI,IAAa,IAAI,KAAK,aAAa,SAAS;CAChD,OAAO;CACP,uBAAuB;CACxB,CAAC;AAEF,SAAgB,EAAe,GAAuB;AACpD,QAAO,EAAY,OAAO,EAAM;;AAGlC,SAAgB,EAAsB,GAAuB;AAC3D,QAAO,EAAmB,OAAO,EAAM;;AAGzC,SAAgB,EAAc,GAAuB;AACnD,QAAO,EAAW,OAAO,EAAM;;AAGjC,SAAgB,EAAc,GAAuB;AACnD,QAAO,EAAW,OAAO,IAAQ,IAAI;;AAGvC,SAAgB,EAAa,GAAuB;AAClD,QAAO,EAAM,eAAe,QAAQ;;AAGtC,SAAgB,EAAU,GAAiB,GAAiC;AAE1E,QADI,MAAa,IAAU,QAClB,IAAU,KAAY,IAAY;;AAG7C,SAAgB,EAAgB,GAA6B;AAE3D,SADU,OAAO,KAAS,WAAW,IAAI,KAAK,EAAK,GAAG,GAC7C,eAAe,KAAA,GAAW;EACjC,OAAO;EACP,KAAK;EACL,MAAM;EACN,MAAM;EACN,QAAQ;EACT,CAAC;;AAGJ,SAAgB,EAAiB,GAAoB;AACnD,KAAI,IAAK,IAAM,QAAO,GAAG,KAAK,MAAM,EAAG,CAAC;CACxC,IAAM,IAAe,KAAK,MAAM,IAAK,IAAK;AAC1C,KAAI,IAAe,GAAI,QAAO,IAAI,IAAK,KAAM,QAAQ,EAAE,CAAC;CACxD,IAAM,IAAU,KAAK,MAAM,IAAe,GAAG,EACvC,IAAU,IAAe;AAI/B,QAHI,IAAU,KAAW,GAAG,EAAQ,IAAI,EAAQ,KAGzC,GAFO,KAAK,MAAM,IAAU,GAAG,CAEtB,IADS,IAAU,GACE;;;;AC5DvC,IAAM,IAAyB,EAAM,cAA2C,EAC9E,WAAW,MACZ,CAAC;AAEF,SAAgB,IAAqB;AACnC,QAAO,EAAM,WAAW,EAAuB,CAAC;;AAGlD,SAAgB,IAAkB;AAChC,QAAO,EAAM,WAAW,EAAuB,CAAC;;AAGlD,SAAgB,EAAwB,EACtC,aACA,mBAIC;CACD,IAAM,CAAC,GAAW,KAAgB,EAAM,SAA6B,KAAK,EAEpE,IAAc,EAAM,aAAa,MAAgC;AACrE,EAAI,KACF,EAAa,EAAK;IAEnB,EAAE,CAAC,EAEA,IAAQ,EAAM,eACX;EAAE;EAAW;EAAc,GAClC,CAAC,GAAW,EAAa,CAC1B;AAED,QACE,kBAAC,EAAuB,UAAxB;EAAwC;YACtC,kBAAC,OAAD;GAAK,KAAK;GAAa,WAAW,IAAe,GAAG,EAAa,aAAa;GAC3E;GACG,CAAA;EAC0B,CAAA;;;;AC7BtC,IAAM,KAAiB,MAAQ,OAAO,KAAU,YAAY,GAAG,MAAU,MAAU,IAAI,MAAM,GAChF,IAAK,GACL,KAAO,GAAM,OAAU,MAAQ;AAEpC,KAAK,GAAuD,YAAa,KAAM,QAAO,EAAG,GAAM,GAAoD,OAAO,GAAoD,UAAU;CACxN,IAAM,EAAE,aAAU,uBAAoB,GAChC,IAAuB,OAAO,KAAK,EAAS,CAAC,KAAK,MAAU;EAC9D,IAAM,IAAc,IAAoD,IAClE,IAAqB,IAAkF;AAC7G,MAAI,MAAgB,KAAM,QAAO;EACjC,IAAM,IAAa,EAAc,EAAY,IAAI,EAAc,EAAmB;AAClF,SAAO,EAAS,GAAS;GAC3B,EACI,IAAwB,KAAS,OAAO,QAAQ,EAAM,CAAC,QAAQ,GAAK,MAAQ;EAC9E,IAAI,CAAC,GAAK,KAAS;AAKnB,SAJI,MAAU,KAAA,MAGd,EAAI,KAAO,IAFA;IAIZ,EAAE,CAAC;AAkBN,QAAO,EAAG,GAAM,GAjBqB,GAAmF,kBAAsG,QAAQ,GAAK,MAAQ;EAC/O,IAAI,EAAE,OAAO,GAAS,WAAW,GAAa,GAAG,MAA2B;AAC5E,SAAO,OAAO,QAAQ,EAAuB,CAAC,OAAO,MAAQ;GACzD,IAAI,CAAC,GAAK,KAAS;AACnB,UAAO,MAAM,QAAQ,EAAM,GAAG,EAAM,SAAS;IACzC,GAAG;IACH,GAAG;IACN,CAAC,GAAK,GAAI;IACP,GAAG;IACH,GAAG;IACN,CAAE,OAAS;IACd,GAAG;GACD,GAAG;GACH;GACA;GACH,GAAG;IACL,EAAE,CAAC,EAC8D,GAAoD,OAAO,GAAoD,UAAU;GChD/L,IAAgB,EACpB,sKACA;CACE,UAAU,EACR,SAAS;EACP,SACE;EACF,WACE;EACF,aACE;EACF,SAAS;EACT,SACE;EACF,OACE;EACH,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF;AAMD,SAAS,GAAM,EAAE,cAAW,YAAS,GAAG,KAAqB;AAC3D,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAc,EAAE,YAAS,CAAC,EAAE,EAAU;EAAE,GAAI;EAAS,CAAA;;;;ACjC5E,SAAS,GAAO,GAAK,GAAO;AAC1B,KAAI,OAAO,KAAQ,WACjB,QAAO,EAAI,EAAM;CACR,KAAQ,SACjB,EAAI,UAAU;;AAGlB,SAAS,EAAY,GAAG,GAAM;AAC5B,SAAQ,MAAS;EACf,IAAI,IAAa,IACX,IAAW,EAAK,KAAK,MAAQ;GACjC,IAAM,IAAU,GAAO,GAAK,EAAK;AAIjC,UAHI,CAAC,KAAc,OAAO,KAAW,eACnC,IAAa,KAER;IACP;AACF,MAAI,EACF,cAAa;AACX,QAAK,IAAI,IAAI,GAAG,IAAI,EAAS,QAAQ,KAAK;IACxC,IAAM,IAAU,EAAS;AACzB,IAAI,OAAO,KAAW,aACpB,GAAS,GAET,GAAO,EAAK,IAAI,KAAK;;;;;AAOjC,SAAS,EAAgB,GAAG,GAAM;AAChC,QAAOA,EAAM,YAAY,EAAY,GAAG,EAAK,EAAE,EAAK;;;;AC9BtD,IAAI,KAAkB,OAAO,IAAI,aAAa,EAC1C,KAAMC,EAAM;AAChB,SAAS,GAAc,GAAO;AAC5B,QAAO,OAAO,KAAU,cAAY,KAAkB,UAAU;;AAElE,SAAS,GAAgB,GAAS;AAChC,QAA0B,OAAO,KAAY,cAAtC,KAAkD,cAAc,KAAW,EAAQ,aAAa,MAAmB,cAAc,KAAW,GAAc,EAAQ,SAAS;;;AAGpL,SAASC,EAAW,GAAW;CAC7B,IAAM,IAA4B,kBAAgB,EAAU,EACtD,IAAQD,EAAM,YAAY,GAAO,MAAiB;EACtD,IAAI,EAAE,aAAU,GAAG,MAAc;AACjC,EAAI,GAAgB,EAAS,IAAI,OAAO,MAAQ,eAC9C,IAAW,GAAI,EAAS,SAAS;EAEnC,IAAM,IAAgBA,EAAM,SAAS,QAAQ,EAAS,EAChD,IAAY,EAAc,KAAKE,EAAY;AACjD,MAAI,GAAW;GACb,IAAM,IAAa,EAAU,MAAM,UAC7B,IAAc,EAAc,KAAK,MACjC,MAAU,IACRF,EAAM,SAAS,MAAM,EAAW,GAAG,IAAUA,EAAM,SAAS,KAAK,KAAK,GACnEA,EAAM,eAAe,EAAW,GAAG,EAAW,MAAM,WAAW,OAE/D,EAET;AACF,UAAuB,kBAAI,GAAW;IAAE,GAAG;IAAW,KAAK;IAAc,UAAUA,EAAM,eAAe,EAAW,GAAGA,EAAM,aAAa,GAAY,KAAK,GAAG,EAAY,GAAG;IAAM,CAAC;;AAErL,SAAuB,kBAAI,GAAW;GAAE,GAAG;GAAW,KAAK;GAAc;GAAU,CAAC;GACpF;AAEF,QADA,EAAM,cAAc,GAAG,EAAU,QAC1B;;AAET,IAAIG,KAAuB,kBAAW,OAAO;;AAE7C,SAASC,EAAgB,GAAW;CAClC,IAAM,IAAYJ,EAAM,YAAY,GAAO,MAAiB;EAC1D,IAAI,EAAE,aAAU,GAAG,MAAc;AAIjC,MAHI,GAAgB,EAAS,IAAI,OAAO,MAAQ,eAC9C,IAAW,GAAI,EAAS,SAAS,GAE/BA,EAAM,eAAe,EAAS,EAAE;GAClC,IAAM,IAAcK,GAAc,EAAS,EACrC,IAASC,GAAW,GAAW,EAAS,MAAM;AAIpD,UAHI,EAAS,SAASN,EAAM,aAC1B,EAAO,MAAM,IAAe,EAAY,GAAc,EAAY,GAAG,IAEhEA,EAAM,aAAa,GAAU,EAAO;;AAE7C,SAAOA,EAAM,SAAS,MAAM,EAAS,GAAG,IAAIA,EAAM,SAAS,KAAK,KAAK,GAAG;GACxE;AAEF,QADA,EAAU,cAAc,GAAG,EAAU,aAC9B;;AAET,IAAIO,IAAuB,OAAO,kBAAkB;AAWpD,SAASL,EAAY,GAAO;AAC1B,QAAOF,EAAM,eAAe,EAAM,IAAI,OAAO,EAAM,QAAS,cAAc,eAAe,EAAM,QAAQ,EAAM,KAAK,cAAcO;;AAElI,SAASD,GAAW,GAAW,GAAY;CACzC,IAAM,IAAgB,EAAE,GAAG,GAAY;AACvC,MAAK,IAAM,KAAY,GAAY;EACjC,IAAM,IAAgB,EAAU,IAC1B,IAAiB,EAAW;AAElC,EADkB,WAAW,KAAK,EAAS,GAErC,KAAiB,IACnB,EAAc,MAAa,GAAG,MAAS;GACrC,IAAM,IAAS,EAAe,GAAG,EAAK;AAEtC,UADA,EAAc,GAAG,EAAK,EACf;MAEA,MACT,EAAc,KAAY,KAEnB,MAAa,UACtB,EAAc,KAAY;GAAE,GAAG;GAAe,GAAG;GAAgB,GACxD,MAAa,gBACtB,EAAc,KAAY,CAAC,GAAe,EAAe,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAGvF,QAAO;EAAE,GAAG;EAAW,GAAG;EAAe;;AAE3C,SAASD,GAAc,GAAS;CAC9B,IAAI,IAAS,OAAO,yBAAyB,EAAQ,OAAO,MAAM,EAAE,KAChE,IAAU,KAAU,oBAAoB,KAAU,EAAO;AAS7D,QARI,IACK,EAAQ,OAEjB,IAAS,OAAO,yBAAyB,GAAS,MAAM,EAAE,KAC1D,IAAU,KAAU,oBAAoB,KAAU,EAAO,gBACrD,IACK,EAAQ,MAAM,MAEhB,EAAQ,MAAM,OAAO,EAAQ;;;;ACrFtC,IAAIG,KAnBQ;CACV;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CACqB,QAAQ,GAAW,MAAS;CAChD,IAAM,IAAOC,kBAAW,aAAa,IAAO,EACtC,IAAOC,EAAM,YAAY,GAAO,MAAiB;EACrD,IAAM,EAAE,YAAS,GAAG,MAAmB,GACjC,IAAO,IAAU,IAAO;AAI9B,SAHI,OAAO,SAAW,QACpB,OAAO,OAAO,IAAI,WAAW,IAAI,KAEZ,kBAAI,GAAM;GAAE,GAAG;GAAgB,KAAK;GAAc,CAAC;GAC1E;AAEF,QADA,EAAK,cAAc,aAAa,KACzB;EAAE,GAAG;GAAY,IAAO;EAAM;GACpC,EAAE,CAAC,EC9BFC,KAAO,SACPC,KAAQC,EAAM,YAAY,GAAO,MACZ,kBACrBC,GAAU,OACV;CACE,GAAG;CACH,KAAK;CACL,cAAc,MAAU;AACP,IAAM,OACV,QAAQ,kCAAkC,KACrD,EAAM,cAAc,EAAM,EACtB,CAAC,EAAM,oBAAoB,EAAM,SAAS,KAAG,EAAM,gBAAgB;;CAE1E,CACF,CACD;AACF,GAAM,cAAcH;AACpB,IAAII,KAAOH;;;ACrBX,SAAgB,GAAe,EAAE,gBAAqC;AACpE,QACE,kBAAC,QAAD;EACE,eAAY;EACZ,WAAW,EAAG,2BAA2B,EAAU;YACpD;EAEM,CAAA;;;;ACFX,IAAM,KAAgB,EACpB,6FACD,EAiBK,KAAQ,EAAM,YACjB,EAAE,cAAW,aAAU,aAAU,GAAG,KAAS,MAC5C,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,IAAe,EAAE,EAAU;CACzC,GAAI;WAHN,CAKG,GACA,KAAY,kBAAC,IAAD,EAAkB,CAAA,CACX;GAEzB;AACD,GAAM,cAAA,GAAkC;;;AClCxC,IAAII,KAAO,aACP,KAAsB,cACtB,KAAe,CAAC,cAAc,WAAW,EACzCC,KAAYC,EAAM,YAAY,GAAO,MAAiB;CACxD,IAAM,EAAE,eAAY,aAAa,IAAkB,IAAqB,GAAG,MAAa,GAClF,IAAc,GAAmB,EAAgB,GAAG,IAAkB,IAEtE,IAAgB,IAAa,EAAE,MAAM,QAAQ,GAAG;EAAE,oBADhC,MAAgB,aAAa,IAAc,KAAK;EACqB,MAAM;EAAa;AAChH,QAAuB,kBACrBC,GAAU,KACV;EACE,oBAAoB;EACpB,GAAG;EACH,GAAG;EACH,KAAK;EACN,CACF;EACD;AACF,GAAU,cAAcH;AACxB,SAAS,GAAmB,GAAa;AACvC,QAAO,GAAa,SAAS,EAAY;;AAE3C,IAAII,KAAOH,ICnBL,KAAY,EAAM,YAKpB,EAAE,cAAW,iBAAc,cAAc,gBAAa,IAAM,GAAG,KAC/D,MAEA,kBAAC,IAAD;CACO;CACO;CACC;CACb,WAAW,EACT,sBACA,MAAgB,eAAe,mBAAmB,kBAClD,EACD;CACD,GAAI;CACJ,CAAA,CAEL;AACD,GAAU,cAAA,GAAsC;;;ACrBhD,SAAS,GAAS,EAAE,cAAW,GAAG,KAA2C;AAC3E,QACE,kBAAC,YAAD;EACE,aAAU;EACV,WAAW,EACT,uBACA,gFACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,GAAY,EACnB,cACA,aAAU,UACV,GAAG,KACiE;AACpE,QACE,kBAAC,UAAD;EACE,aAAU;EACV,gBAAc;EACd,WAAW,EACT,oBACA,mCACA,gCACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,GAAW,EAAE,cAAW,GAAG,KAAsC;AACxE,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,0IACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,IAAM,KAAgB,EACpB,sEACA;CACE,UAAU,EACR,aAAa;EACX,UAAU,CAAC,4CAA4C;EACvD,YAAY;GACV;GACA;GACA;GACD;EACD,YAAY;GACV;GACA;GACA;GACD;EACF,EACF;CACD,iBAAiB,EACf,aAAa,YACd;CACF,CACF;AAED,SAAS,GAAM,EACb,cACA,iBAAc,YACd,GAAG,KACgE;AACnE,QACE,kBAAC,OAAD;EACE,MAAK;EACL,aAAU;EACV,oBAAkB;EAClB,WAAW,EAAG,GAAc,EAAE,gBAAa,CAAC,EAAE,EAAU;EACxD,GAAI;EACJ,CAAA;;AAIN,SAAS,GAAa,EAAE,cAAW,GAAG,KAAsC;AAC1E,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,iEACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,GAAW,EAClB,cACA,GAAG,KACkC;AACrC,QACE,kBAAC,IAAD;EACE,aAAU;EACV,WAAW,EACT,gHACA,mKACA,6HACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,GAAW,EAAE,cAAW,GAAG,KAAsC;AACxE,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,8GACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,GAAiB,EAAE,cAAW,GAAG,KAAoC;AAC5E,QACE,kBAAC,KAAD;EACE,aAAU;EACV,WAAW,EACT,yHACA,gEACA,qEACA,EACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,GAAe,EACtB,aACA,cACA,GAAG,KAGF;AACD,QACE,kBAAC,OAAD;EACE,aAAU;EACV,gBAAc,CAAC,CAAC;EAChB,WAAW,EACT,6EACA,EACD;EACD,GAAI;YAPN,CASE,kBAAC,IAAD,EAAW,WAAU,4BAA6B,CAAA,EACjD,KACC,kBAAC,QAAD;GACE,WAAU;GACV,aAAU;GAET;GACI,CAAA,CAEL;;;AAIV,SAAS,GAAW,EAClB,cACA,aACA,WACA,GAAG,KAGF;CACD,IAAM,IAAU,QACV,MAIC,IAID,GAAQ,WAAW,KAAK,EAAO,IAAI,UAC9B,EAAO,GAAG,UAIjB,kBAAC,MAAD;EAAI,WAAU;YACX,EAAO,KACL,GAAO,MACN,GAAO,WAAW,kBAAC,MAAD,EAAA,UAAiB,EAAM,SAAa,EAA3B,EAA2B,CACzD;EACE,CAAA,GAbE,OAeR,CAAC,GAAU,EAAO,CAAC;AAMtB,QAJK,IAKH,kBAAC,OAAD;EACE,MAAK;EACL,aAAU;EACV,WAAW,EAAG,wCAAwC,EAAU;EAChE,GAAI;YAEH;EACG,CAAA,GAXC;;;;AChNX,IAAM,MAAe,MAAW,EAAO,QAAQ,sBAAsB,QAAQ,CAAC,aAAa,EACrF,MAAe,MAAW,EAAO,QACrC,0BACC,GAAO,GAAI,MAAO,IAAK,EAAG,aAAa,GAAG,EAAG,aAAa,CAC5D,EACK,MAAgB,MAAW;CAC/B,IAAM,IAAY,GAAY,EAAO;AACrC,QAAO,EAAU,OAAO,EAAE,CAAC,aAAa,GAAG,EAAU,MAAM,EAAE;GAEzD,MAAgB,GAAG,MAAY,EAAQ,QAAQ,GAAW,GAAO,MAC9D,EAAQ,KAAc,EAAU,MAAM,KAAK,MAAM,EAAM,QAAQ,EAAU,KAAK,EACrF,CAAC,KAAK,IAAI,CAAC,MAAM,EACb,MAAe,MAAU;AAC7B,MAAK,IAAM,KAAQ,EACjB,KAAI,EAAK,WAAW,QAAQ,IAAI,MAAS,UAAU,MAAS,QAC1D,QAAO;GCfTI,KAAoB;CACtB,OAAO;CACP,OAAO;CACP,QAAQ;CACR,SAAS;CACT,MAAM;CACN,QAAQ;CACR,aAAa;CACb,eAAe;CACf,gBAAgB;CACjB,ECNK,KAAO,GACV,EACC,WAAQ,gBACR,UAAO,IACP,iBAAc,GACd,wBACA,eAAY,IACZ,aACA,aACA,GAAG,KACF,MAAQ,EACT,OACA;CACE;CACA,GAAGC;CACH,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,aAAa,IAAsB,OAAO,EAAY,GAAG,KAAK,OAAO,EAAK,GAAG;CAC7E,WAAW,GAAa,UAAU,EAAU;CAC5C,GAAG,CAAC,KAAY,CAAC,GAAY,EAAK,IAAI,EAAE,eAAe,QAAQ;CAC/D,GAAG;CACJ,EACD,CACE,GAAG,EAAS,KAAK,CAAC,GAAK,OAAW,EAAc,GAAK,EAAM,CAAC,EAC5D,GAAG,MAAM,QAAQ,EAAS,GAAG,IAAW,CAAC,EAAS,CACnD,CACF,CACF,EC5BK,MAAoB,GAAU,MAAa;CAC/C,IAAM,IAAY,GACf,EAAE,cAAW,GAAG,KAAS,MAAQ,EAAc,IAAM;EACpD;EACA;EACA,WAAW,GACT,UAAU,GAAY,GAAa,EAAS,CAAC,IAC7C,UAAU,KACV,EACD;EACD,GAAG;EACJ,CAAC,CACH;AAED,QADA,EAAU,cAAc,GAAa,EAAS,EACvC;GCZH,KAAY,GAAiB,cAJhB,CACjB,CAAC,QAAQ;CAAE,GAAG;CAAY,KAAK;CAAU,CAAC,EAC1C,CAAC,QAAQ;CAAE,GAAG;CAAkB,KAAK;CAAU,CAAC,CACjD,CAC2D,ECAtD,KAAU,GAAiB,YAJd,CACjB,CAAC,QAAQ;CAAE,GAAG;CAAiB,KAAK;CAAU,CAAC,EAC/C,CAAC,QAAQ;CAAE,GAAG;CAAY,KAAK;CAAU,CAAC,CAC3C,CACuD,ECHlD,KAAQ,GAAiB,SADZ,CAAC,CAAC,QAAQ;CAAE,GAAG;CAAmB,KAAK;CAAU,CAAC,CAAC,CACnB,ECA7C,KAAc,GAAiB,gBADlB,CAAC,CAAC,QAAQ;CAAE,GAAG;CAAgB,KAAK;CAAU,CAAC,CAAC,CACH,ECA1D,KAAe,GAAiB,iBADnB,CAAC,CAAC,QAAQ;CAAE,GAAG;CAAiB,KAAK;CAAU,CAAC,CAAC,CACF,ECA5D,KAAS,GAAiB,UADb,CAAC,CAAC,UAAU;CAAE,IAAI;CAAM,IAAI;CAAM,GAAG;CAAM,KAAK;CAAU,CAAC,CAAC,CAC1B,ECI/C,KAAc,GAAiB,gBALlB;CACjB,CAAC,QAAQ;EAAE,GAAG;EAAY,KAAK;EAAU,CAAC;CAC1C,CAAC,QAAQ;EAAE,GAAG;EAA4D,KAAK;EAAU,CAAC;CAC1F,CAAC,QAAQ;EAAE,GAAG;EAAiB,KAAK;EAAU,CAAC;CAChD,CAC+D,ECD1D,KAAO,GAAiB,QAJX,CACjB,CAAC,QAAQ;CAAE,GAAG;CAA8D,KAAK;CAAU,CAAC,EAC5F,CAAC,QAAQ;CAAE,GAAG;CAA2B,KAAK;CAAU,CAAC,CAC1D,CACgD,ECH3C,KAAQ,GAAiB,SADZ,CAAC,CAAC,QAAQ;CAAE,GAAG;CAAY,KAAK;CAAU,CAAC,CAAC,CACZ,ECG7C,KAAS,GAAiB,UAJb,CACjB,CAAC,QAAQ;CAAE,GAAG;CAAoB,KAAK;CAAU,CAAC,EAClD,CAAC,UAAU;CAAE,IAAI;CAAM,IAAI;CAAM,GAAG;CAAK,KAAK;CAAU,CAAC,CAC1D,CACoD,ECA/C,KAAI,GAAiB,KAJR,CACjB,CAAC,QAAQ;CAAE,GAAG;CAAc,KAAK;CAAU,CAAC,EAC5C,CAAC,QAAQ;CAAE,GAAG;CAAc,KAAK;CAAU,CAAC,CAC7C,CAC0C,ECOrC,KAAQ,EAAM,YACjB,EAAE,cAAW,SAAM,UAAO,GAAG,KAAS,MAAQ;CAC7C,IAAM,IAAW,CAAC,CAAC;AACnB,QACE,kBAAC,SAAD;EACQ;EACN,gBAAc,KAAY,KAAA;EAC1B,WAAW,EAIT,2TAUA,8FAIA,IACI,sDACA,wCACJ,EACD;EACI;EACL,GAAI;EACJ,CAAA;EAGP;AACD,GAAM,cAAc;;;ACNpB,IAAM,KAAc,EAAM,YAEtB,EACE,cACA,uBACA,kBACA,cAAW,IACX,qBAAkB,IAClB,OAAO,GACP,UACA,iBACA,aACA,GAAG,KAEL,MACG;CAIH,IAAM,IAAW,EAAM,OAAyB,KAAK;AACrD,GAAM,oBAAoB,SAAW,EAAS,QAA4B;CAM1E,IAAM,IAAe,MAAU,KAAA,GACzB,CAAC,GAAsB,KAA2B,EAAM,eACrD,KAAgB,QAAQ,OAAO,EAAa,CAAC,SAAS,EAC9D,EACK,IAAW,IACb,OAAO,KAAU,YAAY,EAAM,SAAS,IAC5C,GAEE,KAAgB,MAA+C;AAInE,EAHK,KACH,EAAwB,EAAM,OAAO,MAAM,SAAS,EAAE,EAExD,IAAW,EAAM;IAGb,UAAoB;EACxB,IAAM,IAAQ,EAAS;AAClB,SAKU,OAAO,yBACpB,OAAO,iBAAiB,WACxB,QACD,EAAE,MACK,KAAK,GAAO,GAAG,EACvB,EAAM,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM,CAAC,CAAC,EAC1D,EAAM,OAAO;IAGT,IAAY,CAAC,KAAmB,KAAY,CAAC,EAAM;AAEzD,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,YAAY,EAAmB;YAAlD;GACE,kBAAC,IAAD;IACE,MAAM;IACN,aAAa;IACb,eAAY;IACZ,WAAW,EACT,8EACA,EACD;IACD,CAAA;GACF,kBAAC,IAAD;IACE,KAAK;IACL,MAAK;IACE;IACO;IACd,UAAU;IACV,WAAW,EAKT,EACD;IAID,OAAO;KACL,aAAa;KACb,cAAc,IAAY,SAAS,KAAA;KACnC,GAAG;KACJ;IACD,GAAI;IACJ,CAAA;GACD,KACC,kBAAC,UAAD;IACE,MAAK;IACL,SAAS;IACT,cAAW;IACX,UAAU;IACV,WAAW,EACT,qFACA,gDACA,mEACA,+CACD;cAED,kBAAC,IAAD;KAAG,MAAM;KAAI,aAAa;KAAG,eAAY;KAAS,CAAA;IAC3C,CAAA;GAEP;;EAGX;AACD,GAAY,cAAc,eClKP,OAAO,SAAW,OAAe,OAAO,YAAY,OAAO,SAAS;AACvF,SAAS,EAAqB,GAAsB,GAAiB,EAAE,8BAA2B,OAAS,EAAE,EAAE;AAC7G,QAAO,SAAqB,GAAO;AAEjC,MADA,IAAuB,EAAM,EACzB,MAA6B,MAAS,CAAC,EAAM,iBAC/C,QAAO,IAAkB,EAAM;;;;;ACHrC,SAAS,GAAe,GAAmB,GAAgB;CACzD,IAAM,IAAUY,EAAM,cAAc,EAAe,EAC7C,KAAY,MAAU;EAC1B,IAAM,EAAE,aAAU,GAAG,MAAY,GAC3B,IAAQA,EAAM,cAAc,GAAS,OAAO,OAAO,EAAQ,CAAC;AAClE,SAAuB,kBAAI,EAAQ,UAAU;GAAE;GAAO;GAAU,CAAC;;AAEnE,GAAS,cAAc,IAAoB;CAC3C,SAAS,EAAY,GAAc;EACjC,IAAM,IAAUA,EAAM,WAAW,EAAQ;AACzC,MAAI,EAAS,QAAO;AACpB,MAAI,MAAmB,KAAK,EAAG,QAAO;AACtC,QAAU,MAAM,KAAK,EAAa,2BAA2B,EAAkB,IAAI;;AAErF,QAAO,CAAC,GAAU,EAAY;;AAEhC,SAAS,GAAmB,GAAW,IAAyB,EAAE,EAAE;CAClE,IAAI,IAAkB,EAAE;CACxB,SAAS,EAAe,GAAmB,GAAgB;EACzD,IAAM,IAAcA,EAAM,cAAc,EAAe,EACjD,IAAQ,EAAgB;AAC9B,MAAkB,CAAC,GAAG,GAAiB,EAAe;EACtD,IAAM,KAAY,MAAU;GAC1B,IAAM,EAAE,UAAO,aAAU,GAAG,MAAY,GAClC,IAAU,IAAQ,KAAa,MAAU,GACzC,IAAQA,EAAM,cAAc,GAAS,OAAO,OAAO,EAAQ,CAAC;AAClE,UAAuB,kBAAI,EAAQ,UAAU;IAAE;IAAO;IAAU,CAAC;;AAEnE,IAAS,cAAc,IAAoB;EAC3C,SAAS,EAAY,GAAc,GAAO;GACxC,IAAM,IAAU,IAAQ,KAAa,MAAU,GACzC,IAAUA,EAAM,WAAW,EAAQ;AACzC,OAAI,EAAS,QAAO;AACpB,OAAI,MAAmB,KAAK,EAAG,QAAO;AACtC,SAAU,MAAM,KAAK,EAAa,2BAA2B,EAAkB,IAAI;;AAErF,SAAO,CAAC,GAAU,EAAY;;CAEhC,IAAM,UAAoB;EACxB,IAAM,IAAgB,EAAgB,KAAK,MAClCA,EAAM,cAAc,EAAe,CAC1C;AACF,SAAO,SAAkB,GAAO;GAC9B,IAAM,IAAW,IAAQ,MAAc;AACvC,UAAOA,EAAM,eACJ,GAAG,UAAU,MAAc;IAAE,GAAG;KAAQ,IAAY;IAAU,EAAE,GACvE,CAAC,GAAO,EAAS,CAClB;;;AAIL,QADA,EAAY,YAAY,GACjB,CAAC,GAAgB,GAAqB,GAAa,GAAG,EAAuB,CAAC;;AAEvF,SAAS,GAAqB,GAAG,GAAQ;CACvC,IAAM,IAAY,EAAO;AACzB,KAAI,EAAO,WAAW,EAAG,QAAO;CAChC,IAAM,UAAoB;EACxB,IAAM,IAAa,EAAO,KAAK,OAAkB;GAC/C,UAAU,GAAc;GACxB,WAAW,EAAa;GACzB,EAAE;AACH,SAAO,SAA2B,GAAgB;GAChD,IAAM,IAAa,EAAW,QAAQ,GAAa,EAAE,aAAU,mBAAgB;IAE7E,IAAM,IADa,EAAS,EAAe,CACX,UAAU;AAC1C,WAAO;KAAE,GAAG;KAAa,GAAG;KAAc;MACzC,EAAE,CAAC;AACN,UAAOA,EAAM,eAAe,GAAG,UAAU,EAAU,cAAc,GAAY,GAAG,CAAC,EAAW,CAAC;;;AAIjG,QADA,EAAY,YAAY,EAAU,WAC3B;;;;ACxET,IAAIC,KAAmB,YAAY,WAAWC,EAAM,wBAAwB,ICCxE,KAAqBC,EAAM,sBAA6CC;AAC5E,SAAS,GAAqB,EAC5B,SACA,gBACA,oBAAiB,IAEjB,aACC;CACD,IAAM,CAAC,GAAkB,GAAqB,KAAe,GAAqB;EAChF;EACA;EACD,CAAC,EACI,IAAe,MAAS,KAAK,GAC7B,IAAQ,IAAe,IAAO;CAC1B;EACR,IAAM,IAAkBD,EAAM,OAAO,MAAS,KAAK,EAAE;AACrD,IAAM,gBAAgB;GACpB,IAAM,IAAgB,EAAgB;AAQtC,GAPI,MAAkB,KAGpB,QAAQ,KACN,GAAG,EAAO,oBAHC,IAAgB,eAAe,eAGP,MAF1B,IAAe,eAAe,eAEK,4KAC7C,EAEH,EAAgB,UAAU;KACzB,CAAC,GAAc,EAAO,CAAC;;AAe5B,QAAO,CAAC,GAbSA,EAAM,aACpB,MAAc;AACb,MAAI,GAAc;GAChB,IAAM,IAASE,GAAW,EAAU,GAAG,EAAU,EAAK,GAAG;AACzD,GAAI,MAAW,KACb,EAAY,UAAU,EAAO;QAG/B,GAAoB,EAAU;IAGlC;EAAC;EAAc;EAAM;EAAqB;EAAY,CACvD,CACuB;;AAE1B,SAAS,GAAqB,EAC5B,gBACA,eACC;CACD,IAAM,CAAC,GAAO,KAAYF,EAAM,SAAS,EAAY,EAC/C,IAAeA,EAAM,OAAO,EAAM,EAClC,IAAcA,EAAM,OAAO,EAAS;AAU1C,QATA,SAAyB;AACvB,IAAY,UAAU;IACrB,CAAC,EAAS,CAAC,EACd,EAAM,gBAAgB;AACpB,EAAI,EAAa,YAAY,MAC3B,EAAY,UAAU,EAAM,EAC5B,EAAa,UAAU;IAExB,CAAC,GAAO,EAAa,CAAC,EAClB;EAAC;EAAO;EAAU;EAAY;;AAEvC,SAASE,GAAW,GAAO;AACzB,QAAO,OAAO,KAAU;;;;AC/D1B,SAAS,GAAY,GAAO;CAC1B,IAAM,IAAMC,EAAM,OAAO;EAAE;EAAO,UAAU;EAAO,CAAC;AACpD,QAAOA,EAAM,eACP,EAAI,QAAQ,UAAU,MACxB,EAAI,QAAQ,WAAW,EAAI,QAAQ,OACnC,EAAI,QAAQ,QAAQ,IAEf,EAAI,QAAQ,WAClB,CAAC,EAAM,CAAC;;;;ACRb,IAAI,KAAmB,YAAY,WAAWC,EAAM,wBAAwB;;;ACC5E,SAAS,GAAQ,GAAS;CACxB,IAAM,CAAC,GAAM,KAAWC,EAAM,SAAS,KAAK,EAAE;AA+B9C,QA9BA,SAAsB;AACpB,MAAI,GAAS;AACX,KAAQ;IAAE,OAAO,EAAQ;IAAa,QAAQ,EAAQ;IAAc,CAAC;GACrE,IAAM,IAAiB,IAAI,gBAAgB,MAAY;AAIrD,QAHI,CAAC,MAAM,QAAQ,EAAQ,IAGvB,CAAC,EAAQ,OACX;IAEF,IAAM,IAAQ,EAAQ,IAClB,GACA;AACJ,QAAI,mBAAmB,GAAO;KAC5B,IAAM,IAAkB,EAAM,eACxB,IAAa,MAAM,QAAQ,EAAgB,GAAG,EAAgB,KAAK;AAEzE,KADA,IAAQ,EAAW,YACnB,IAAS,EAAW;UAGpB,CADA,IAAQ,EAAQ,aAChB,IAAS,EAAQ;AAEnB,MAAQ;KAAE;KAAO;KAAQ,CAAC;KAC1B;AAEF,UADA,EAAe,QAAQ,GAAS,EAAE,KAAK,cAAc,CAAC,QACzC,EAAe,UAAU,EAAQ;QAE9C,GAAQ,KAAK,EAAE;IAEhB,CAAC,EAAQ,CAAC,EACN;;;;;AC9BT,SAAS,GAAW,GAAW;CAC7B,IAAM,IAA4B,mBAAgB,EAAU,EACtD,IAAQC,EAAM,YAAY,GAAO,MAAiB;EACtD,IAAM,EAAE,aAAU,GAAG,MAAc,GAC7B,IAAgBA,EAAM,SAAS,QAAQ,EAAS,EAChD,IAAY,EAAc,KAAK,GAAY;AACjD,MAAI,GAAW;GACb,IAAM,IAAa,EAAU,MAAM,UAC7B,IAAc,EAAc,KAAK,MACjC,MAAU,IACRA,EAAM,SAAS,MAAM,EAAW,GAAG,IAAUA,EAAM,SAAS,KAAK,KAAK,GACnEA,EAAM,eAAe,EAAW,GAAG,EAAW,MAAM,WAAW,OAE/D,EAET;AACF,UAAuB,kBAAI,GAAW;IAAE,GAAG;IAAW,KAAK;IAAc,UAAUA,EAAM,eAAe,EAAW,GAAGA,EAAM,aAAa,GAAY,KAAK,GAAG,EAAY,GAAG;IAAM,CAAC;;AAErL,SAAuB,kBAAI,GAAW;GAAE,GAAG;GAAW,KAAK;GAAc;GAAU,CAAC;GACpF;AAEF,QADA,EAAM,cAAc,GAAG,EAAU,QAC1B;;;AAIT,SAAS,GAAgB,GAAW;CAClC,IAAM,IAAYA,EAAM,YAAY,GAAO,MAAiB;EAC1D,IAAM,EAAE,aAAU,GAAG,MAAc;AACnC,MAAIA,EAAM,eAAe,EAAS,EAAE;GAClC,IAAM,IAAcC,GAAc,EAAS,EACrC,IAAS,GAAW,GAAW,EAAS,MAAM;AAIpD,UAHI,EAAS,SAASD,EAAM,aAC1B,EAAO,MAAM,IAAe,EAAY,GAAc,EAAY,GAAG,IAEhEA,EAAM,aAAa,GAAU,EAAO;;AAE7C,SAAOA,EAAM,SAAS,MAAM,EAAS,GAAG,IAAIA,EAAM,SAAS,KAAK,KAAK,GAAG;GACxE;AAEF,QADA,EAAU,cAAc,GAAG,EAAU,aAC9B;;AAET,IAAI,KAAuB,OAAO,kBAAkB;;AAEpD,SAAS,GAAgB,GAAW;CAClC,IAAM,KAAc,EAAE,kBACG,kBAAIE,GAAW,EAAE,aAAU,CAAC;AAIrD,QAFA,EAAW,cAAc,GAAG,EAAU,aACtC,EAAW,YAAY,IAChB;;AAGT,SAAS,GAAY,GAAO;AAC1B,QAAOF,EAAM,eAAe,EAAM,IAAI,OAAO,EAAM,QAAS,cAAc,eAAe,EAAM,QAAQ,EAAM,KAAK,cAAc;;AAElI,SAAS,GAAW,GAAW,GAAY;CACzC,IAAM,IAAgB,EAAE,GAAG,GAAY;AACvC,MAAK,IAAM,KAAY,GAAY;EACjC,IAAM,IAAgB,EAAU,IAC1B,IAAiB,EAAW;AAElC,EADkB,WAAW,KAAK,EAAS,GAErC,KAAiB,IACnB,EAAc,MAAa,GAAG,MAAS;GACrC,IAAM,IAAS,EAAe,GAAG,EAAK;AAEtC,UADA,EAAc,GAAG,EAAK,EACf;MAEA,MACT,EAAc,KAAY,KAEnB,MAAa,UACtB,EAAc,KAAY;GAAE,GAAG;GAAe,GAAG;GAAgB,GACxD,MAAa,gBACtB,EAAc,KAAY,CAAC,GAAe,EAAe,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAGvF,QAAO;EAAE,GAAG;EAAW,GAAG;EAAe;;AAE3C,SAASC,GAAc,GAAS;CAC9B,IAAI,IAAS,OAAO,yBAAyB,EAAQ,OAAO,MAAM,EAAE,KAChE,IAAU,KAAU,oBAAoB,KAAU,EAAO;AAS7D,QARI,IACK,EAAQ,OAEjB,IAAS,OAAO,yBAAyB,GAAS,MAAM,EAAE,KAC1D,IAAU,KAAU,oBAAoB,KAAU,EAAO,gBACrD,IACK,EAAQ,MAAM,MAEhB,EAAQ,MAAM,OAAO,EAAQ;;;;ACvEtC,IAAI,IAnBQ;CACV;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CACqB,QAAQ,GAAW,MAAS;CAChD,IAAM,IAAO,mBAAW,aAAa,IAAO,EACtC,IAAOE,EAAM,YAAY,GAAO,MAAiB;EACrD,IAAM,EAAE,YAAS,GAAG,MAAmB,GACjC,IAAO,IAAU,IAAO;AAI9B,SAHI,OAAO,SAAW,QACpB,OAAO,OAAO,IAAI,WAAW,IAAI,KAEZ,kBAAI,GAAM;GAAE,GAAG;GAAgB,KAAK;GAAc,CAAC;GAC1E;AAEF,QADA,EAAK,cAAc,aAAa,KACzB;EAAE,GAAG;GAAY,IAAO;EAAM;GACpC,EAAE,CAAC;AACN,SAAS,GAA4B,GAAQ,GAAO;AAClD,CAAI,KAAQ,EAAS,gBAAgB,EAAO,cAAc,EAAM,CAAC;;;;AC1BnE,IAAI,KAAc,UACd,CAAC,IAAqB,MAAqB,GAAmB,GAAY,EAC1E,CAAC,IAAgB,MAAoB,GAAoB,GAAY,EACrEC,KAASC,EAAM,YAChB,GAAO,MAAiB;CACvB,IAAM,EACJ,kBACA,SACA,SAAS,GACT,mBACA,aACA,aACA,WAAQ,MACR,oBACA,SACA,GAAG,MACD,GACE,CAAC,GAAQ,KAAaA,EAAM,SAAS,KAAK,EAC1C,IAAe,EAAgB,IAAe,MAAS,EAAU,EAAK,CAAC,EACvE,IAAmCA,EAAM,OAAO,GAAM,EACtD,IAAgB,IAAS,KAAQ,CAAC,CAAC,EAAO,QAAQ,OAAO,GAAG,IAC5D,CAAC,GAAS,KAAc,GAAqB;EACjD,MAAM;EACN,aAAa,KAAkB;EAC/B,UAAU;EACV,QAAQ;EACT,CAAC;AACF,QAAuB,kBAAK,IAAgB;EAAE,OAAO;EAAe;EAAS;EAAU,UAAU,CAC/E,kBACd,EAAU,QACV;GACE,MAAM;GACN,MAAM;GACN,gBAAgB;GAChB,iBAAiB;GACjB,cAAcC,GAAS,EAAQ;GAC/B,iBAAiB,IAAW,KAAK,KAAK;GACtC;GACA;GACA,GAAG;GACH,KAAK;GACL,SAAS,EAAqB,EAAM,UAAU,MAAU;AAEtD,IADA,GAAY,MAAgB,CAAC,EAAY,EACrC,MACF,EAAiC,UAAU,EAAM,sBAAsB,EAClE,EAAiC,WAAS,EAAM,iBAAiB;KAExE;GACH,CACF,EACD,KAAiC,kBAC/B,IACA;GACE,SAAS;GACT,SAAS,CAAC,EAAiC;GAC3C;GACA;GACA;GACA;GACA;GACA;GACA,OAAO,EAAE,WAAW,qBAAqB;GAC1C,CACF,CACF;EAAE,CAAC;EAEP;AACD,GAAO,cAAc;AACrB,IAAI,KAAa,eACb,KAAcD,EAAM,YACrB,GAAO,MAAiB;CACvB,IAAM,EAAE,kBAAe,GAAG,MAAe,GACnC,IAAU,GAAiB,IAAY,EAAc;AAC3D,QAAuB,kBACrB,EAAU,MACV;EACE,cAAcC,GAAS,EAAQ,QAAQ;EACvC,iBAAiB,EAAQ,WAAW,KAAK,KAAK;EAC9C,GAAG;EACH,KAAK;EACN,CACF;EAEJ;AACD,GAAY,cAAc;AAC1B,IAAIC,KAAoB,qBACpB,KAAoBF,EAAM,YAC3B,EACC,kBACA,YACA,YACA,aAAU,IACV,GAAG,KACF,MAAiB;CAClB,IAAM,IAAMA,EAAM,OAAO,KAAK,EACxB,IAAe,EAAgB,GAAK,EAAa,EACjD,IAAc,GAAY,EAAQ,EAClC,IAAc,GAAQ,EAAQ;AAgBpC,QAfA,EAAM,gBAAgB;EACpB,IAAM,IAAQ,EAAI;AAClB,MAAI,CAAC,EAAO;EACZ,IAAM,IAAa,OAAO,iBAAiB,WAKrC,IAJa,OAAO,yBACxB,GACA,UACD,CAC6B;AAC9B,MAAI,MAAgB,KAAW,GAAY;GACzC,IAAM,IAAQ,IAAI,MAAM,SAAS,EAAE,YAAS,CAAC;AAE7C,GADA,EAAW,KAAK,GAAO,EAAQ,EAC/B,EAAM,cAAc,EAAM;;IAE3B;EAAC;EAAa;EAAS;EAAQ,CAAC,EACZ,kBACrB,SACA;EACE,MAAM;EACN,eAAe;EACf,gBAAgB;EAChB,GAAG;EACH,UAAU;EACV,KAAK;EACL,OAAO;GACL,GAAG,EAAM;GACT,GAAG;GACH,UAAU;GACV,eAAe;GACf,SAAS;GACT,QAAQ;GACT;EACF,CACF;EAEJ;AACD,GAAkB,cAAcE;AAChC,SAASD,GAAS,GAAS;AACzB,QAAO,IAAU,YAAY;;AAE/B,IAAIE,KAAOJ,IACP,KAAQ,ICzIN,KAAS,EAAM,YAGlB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACE,WAAW,EACT,qXACA,EACD;CACD,GAAI;CACC;WAEL,kBAAC,IAAD,EACE,WAAW,EACT,mKACD,EACD,CAAA;CACoB,CAAA,CACxB;AACF,GAAO,cAAA,GAAoC;;;ACqE3C,IAAM,KAAa,EAAM,YAErB,EACE,UACA,gBACA,YACA,YACA,oBACA,aACA,IAAI,GAIJ,aAAa,GACb,aACA,gBAEF,MACG;CACH,IAAM,IAAU,EAAM,OAAO,EACvB,IAAY,KAAc,GAE1B,IAAkB,KACtB,kBAAC,IAAD;EACE,IAAI;EACK;EACQ;EACP;EACV,CAAA;AAGJ,QACE,kBAAC,IAAD;EACO;EACL,SAAS;EACT,WAAW,EAQT,wDACA,EACD;YAED,kBAAC,IAAD;GAAO,aAAY;GAAa,iBAAe,KAAY,KAAA;aAA3D,CACE,kBAAC,IAAD,EAAA,UAAA;IACE,kBAAC,IAAD,EAAA,UAAa,GAAmB,CAAA;IAC/B,KAAe,kBAAC,IAAD,EAAA,UAAmB,GAA+B,CAAA;IACjE;IACY,EAAA,CAAA,EACd,EACK;;EACG,CAAA;EAGlB;AACD,GAAW,cAAc;AAwCzB,IAAM,KAAkB,EAAM,YAE1B,EACE,gBAAa,IACb,uBAAoB,UACpB,eACA,cACA,aACA,GAAG,KAEL,MACG;CACH,IAAM,CAAC,GAAO,KAAY,EAAM,SAAS,GAAG,EACtC,IAAU,EAAM,MAAM,CAAC,aAAa,EAKpC,IAAU,CAAC,KAAc,EAAQ,WAAW,GAE5C,IAAa,EAAM,SAAS,QAAQ,EAAS,EAC7C,IAAY,EAAW,OAAO,GAAoB,CAAC,QACnD,IAAkB,IACpB,IACA,EAAW,QAAQ,MACZ,GAAoB,EAAM,GAMd,GAAe,EAAM,MAAM,CAC5B,SAAS,EAAQ,GAHxB,GAIT,EAEA,IAAmB,IACrB,IACA,EAAgB,OAAO,GAAoB,CAAC;AAEhD,QACE,kBAAC,OAAD;EACO;EACL,aAAU;EACV,WAAW,EAAG,8BAA8B,EAAU;EACtD,GAAI;YAJN;GAMG,KACC,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,IAAD;KACE,OAAO;KACP,WAAW,MAAM,EAAS,EAAE,cAAc,MAAM;KAChD,aAAa;KAGb,cAAY;KACZ,CAAA;IACE,CAAA;GAGP;GAEA,KAAc,CAAC,KAAW,MAAqB,KAC9C,kBAAC,OAAD;IACE,MAAK;IACL,WAAU;cAET,KAAc,mBAAmB,EAAM,MAAM,CAAC;IAC3C,CAAA;GAEJ;;EAGX;AACD,GAAgB,cAAc;AAU9B,SAAS,GACP,GAC8C;AAC9C,QAAO,EAAM,eAAe,EAAM,IAAI,EAAM,SAAS;;AAiBvD,SAAS,GAAe,GAAgC;AAGtD,QAFI,EAAM,cAAoB,EAAM,YAAY,aAAa,GAC/C,CAAC,GAAW,EAAM,MAAM,EAAE,GAAW,EAAM,YAAY,CAAC,CACzD,OAAO,QAAQ,CAAC,KAAK,IAAI,CAAC,aAAa;;AAUtD,SAAS,GAAW,GAA+B;AACjD,KAAI,KAAQ,QAAQ,OAAO,KAAS,UAAW,QAAO;AACtD,KAAI,OAAO,KAAS,YAAY,OAAO,KAAS,SAAU,QAAO,OAAO,EAAK;AAC7E,KAAI,MAAM,QAAQ,EAAK,CAAE,QAAO,EAAK,IAAI,GAAW,CAAC,KAAK,IAAI;AAC9D,KAAI,EAAM,eAAe,EAAK,EAAE;EAC9B,IAAM,IAAY,EAAK,MAAyC;AAChE,SAAO,GAAW,EAAS;;AAE7B,QAAO;;;;ACjTT,IAAM,KAAoB,EACxB,uFACA;CACE,UAAU,EACR,MAAM;EAQJ,IAAI;EACJ,IAAI;EACL,EACF;CACD,iBAAiB,EACf,MAAM,MACP;CACF,CACF,EAMK,KAAY,EAAM,YACrB,EAAE,cAAW,SAAM,aAAU,GAAG,KAAS,MAEtC,kBAAC,QAAD;CACO;CACL,aAAU;CACV,WAAW,EAAG,GAAkB,EAAE,SAAM,CAAC,EAAE,EAAU;CACrD,GAAI;CAEH;CACI,CAAA,CAGZ;AACD,GAAU,cAAc;;;ACSxB,SAAgB,GAAU,EACxB,UACA,aACA,UACA,gBACA,IAAI,GACJ,aACA,gBACiB;CACjB,IAAM,IAAU,EAAM,OAAO,EACvB,IAAY,KAAc,GAC1B,IAAgB,IAAc,GAAG,EAAU,gBAAgB,KAAA,GAC3D,IAAU,IAAQ,GAAG,EAAU,UAAU,KAAA,GAQzC,IACJ;EAJ4B,EAAS,MACrC;EAGuB;EAAe;EAAQ,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,IAAI,KAAA,GAExE,IAAa,EAAS,OAMtB,IAAgB,EAAM,aAAa,GAAU;EACjD,IAAI,EAAW,MAAM;EAGrB,OAAO,IAAQ,KAAO,EAAW;EACjC,oBAAoB;EACrB,CAA+B;AAEhC,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,yBAAyB,EAAU;YAAtD;GACG,KACC,kBAAC,IAAD;IAAO,SAAS;IAAqB;cAClC;IACK,CAAA;GAET;GACA,IACC,kBAAC,KAAD;IAAG,IAAI;IAAS,MAAK;IAAQ,WAAU;cACpC;IACC,CAAA,GACF,IACF,kBAAC,KAAD;IAAG,IAAI;IAAe,WAAU;cAC7B;IACC,CAAA,GACF;GACA;;;;;ACnHV,IAAIK,KAAO,UACPC,KAASC,EAAM,YAAY,GAAO,MAAiB;CACrD,IAAM,EAAE,SAAS,GAAa,mBAAgB,oBAAiB,GAAG,MAAgB,GAC5E,CAAC,GAAS,KAAc,GAAqB;EACjD,MAAM;EACN,UAAU;EACV,aAAa,KAAkB;EAC/B,QAAQF;EACT,CAAC;AACF,QAAuB,kBACrB,EAAU,QACV;EACE,MAAM;EACN,gBAAgB;EAChB,cAAc,IAAU,OAAO;EAC/B,iBAAiB,EAAM,WAAW,KAAK,KAAK;EAC5C,GAAG;EACH,KAAK;EACL,SAAS,EAAqB,EAAM,eAAe;AACjD,GAAK,EAAM,YACT,EAAW,CAAC,EAAQ;IAEtB;EACH,CACF;EACD;AACF,GAAO,cAAcA;AACrB,IAAIG,KAAOF,ICrBL,KAAiB,EACrB,kZACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,SACE;GACH;EACD,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CACF,EAEK,KAAS,EAAM,YAIlB,EAAE,cAAW,YAAS,SAAM,GAAG,KAAS,MACzC,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,GAAe;EAAE;EAAS;EAAM;EAAW,CAAC,CAAC;CAC3D,GAAI;CACJ,CAAA,CACF;AACF,GAAO,cAAA,GAAmC;;;ACvC1C,SAAS,GAAiB,GAAM;CAC9B,IAAM,IAAgB,IAAO,sBACvB,CAAC,GAAyB,KAAyB,GAAmB,EAAc,EACpF,CAAC,GAAwB,KAAwB,EACrD,GACA;EAAE,eAAe,EAAE,SAAS,MAAM;EAAE,yBAAyB,IAAI,KAAK;EAAE,CACzE,EACK,KAAsB,MAAU;EACpC,IAAM,EAAE,UAAO,gBAAa,GACtB,IAAM,EAAM,OAAO,KAAK,EACxB,IAAU,EAAM,uBAAuB,IAAI,KAAK,CAAC,CAAC;AACxD,SAAuB,kBAAI,GAAwB;GAAE;GAAO;GAAS,eAAe;GAAK;GAAU,CAAC;;AAEtG,GAAmB,cAAc;CACjC,IAAM,IAAuB,IAAO,kBAC9B,IAAqB,mBAAW,EAAqB,EACrD,IAAiB,EAAM,YAC1B,GAAO,MAAiB;EACvB,IAAM,EAAE,UAAO,gBAAa;AAG5B,SAAuB,kBAAI,GAAoB;GAAE,KAD5B,EAAgB,GADrB,EAAqB,GAAsB,EAAM,CACN,cAAc;GACL;GAAU,CAAC;GAElF;AACD,GAAe,cAAc;CAC7B,IAAM,IAAiB,IAAO,sBACxB,IAAiB,8BACjB,IAAyB,mBAAW,EAAe,EACnD,IAAqB,EAAM,YAC9B,GAAO,MAAiB;EACvB,IAAM,EAAE,UAAO,aAAU,GAAG,MAAa,GACnC,IAAM,EAAM,OAAO,KAAK,EACxB,IAAe,EAAgB,GAAc,EAAI,EACjD,IAAU,EAAqB,GAAgB,EAAM;AAK3D,SAJA,EAAM,iBACJ,EAAQ,QAAQ,IAAI,GAAK;GAAE;GAAK,GAAG;GAAU,CAAC,QACjC,KAAK,EAAQ,QAAQ,OAAO,EAAI,EAC7C,EACqB,kBAAI,GAAwB;IAAQ,IAAiB;GAAM,KAAK;GAAc;GAAU,CAAC;GAEnH;AACD,GAAmB,cAAc;CACjC,SAAS,EAAc,GAAO;EAC5B,IAAM,IAAU,EAAqB,IAAO,sBAAsB,EAAM;AAWxE,SAViB,EAAM,kBAAkB;GACvC,IAAM,IAAiB,EAAQ,cAAc;AAC7C,OAAI,CAAC,EAAgB,QAAO,EAAE;GAC9B,IAAM,IAAe,MAAM,KAAK,EAAe,iBAAiB,IAAI,EAAe,GAAG,CAAC;AAKvF,UAJc,MAAM,KAAK,EAAQ,QAAQ,QAAQ,CAAC,CACvB,MACxB,GAAG,MAAM,EAAa,QAAQ,EAAE,IAAI,QAAQ,GAAG,EAAa,QAAQ,EAAE,IAAI,QAAQ,CACpF;KAEA,CAAC,EAAQ,eAAe,EAAQ,QAAQ,CAAC;;AAG9C,QAAO;EACL;GAAE,UAAU;GAAoB,MAAM;GAAgB,UAAU;GAAoB;EACpF;EACA;EACD;;;;ACjEH,IAAI,KAAaG,EAAM,gBAAuC,KAAK,IAC/DC,KAAQ;AACZ,SAAS,GAAM,GAAiB;CAC9B,IAAM,CAAC,GAAI,KAASD,EAAM,SAAS,IAAY,CAAC;AAIhD,QAHA,SAAsB;AACpB,EAAK,KAAiB,GAAO,MAAY,KAAW,OAAO,KAAQ,CAAC;IACnE,CAAC,EAAgB,CAAC,EACd,MAAoB,IAAK,SAAS,MAAO;;;;ACRlD,SAASE,GAAe,GAAU;CAChC,IAAM,IAAcC,EAAM,OAAO,EAAS;AAI1C,QAHA,EAAM,gBAAgB;AACpB,IAAY,UAAU;GACtB,EACKA,EAAM,eAAe,GAAG,MAAS,EAAY,UAAU,GAAG,EAAK,EAAE,EAAE,CAAC;;;;ACJ7E,IAAI,KAAmBC,EAAM,cAAc,KAAK,EAAE;AAKlD,SAAS,GAAa,GAAU;CAC9B,IAAM,IAAYA,EAAM,WAAW,GAAiB;AACpD,QAAO,KAAY,KAAa;;;;ACIlC,IAAI,KAAc,iCACdC,KAAgB;CAAE,SAAS;CAAO,YAAY;CAAM,EACpDC,KAAa,oBACb,CAACC,IAAYC,IAAeC,MAAyB,GAAiBH,GAAW,EACjF,CAAC,IAA+B,MAA+B,GACjEA,IACA,CAACG,GAAsB,CACxB,EACG,CAAC,IAAqB,MAAyB,GAA8BH,GAAW,EACxF,KAAmBI,EAAM,YAC1B,GAAO,MACiB,kBAAIH,GAAW,UAAU;CAAE,OAAO,EAAM;CAAyB,UAA0B,kBAAIA,GAAW,MAAM;EAAE,OAAO,EAAM;EAAyB,UAA0B,kBAAI,IAAsB;GAAE,GAAG;GAAO,KAAK;GAAc,CAAC;EAAE,CAAC;CAAE,CAAC,CAE5Q;AACD,GAAiB,cAAcD;AAC/B,IAAI,KAAuBI,EAAM,YAAY,GAAO,MAAiB;CACnE,IAAM,EACJ,4BACA,gBACA,UAAO,IACP,QACA,kBAAkB,GAClB,4BACA,6BACA,iBACA,+BAA4B,IAC5B,GAAG,MACD,GACE,IAAMA,EAAM,OAAO,KAAK,EACxB,IAAe,EAAgB,GAAc,EAAI,EACjD,IAAY,GAAa,EAAI,EAC7B,CAAC,GAAkB,KAAuB,GAAqB;EACnE,MAAM;EACN,aAAa,KAA2B;EACxC,UAAU;EACV,QAAQJ;EACT,CAAC,EACI,CAAC,GAAkB,KAAuBI,EAAM,SAAS,GAAM,EAC/D,IAAmBC,GAAe,EAAa,EAC/C,IAAWH,GAAc,EAAwB,EACjD,IAAkBE,EAAM,OAAO,GAAM,EACrC,CAAC,GAAqB,KAA0BA,EAAM,SAAS,EAAE;AAQvE,QAPA,EAAM,gBAAgB;EACpB,IAAM,IAAO,EAAI;AACjB,MAAI,EAEF,QADA,EAAK,iBAAiB,IAAa,EAAiB,QACvC,EAAK,oBAAoB,IAAa,EAAiB;IAErE,CAAC,EAAiB,CAAC,EACC,kBACrB,IACA;EACE,OAAO;EACP;EACA,KAAK;EACL;EACA;EACA,aAAaA,EAAM,aAChB,MAAc,EAAoB,EAAU,EAC7C,CAAC,EAAoB,CACtB;EACD,gBAAgBA,EAAM,kBAAkB,EAAoB,GAAK,EAAE,EAAE,CAAC;EACtE,oBAAoBA,EAAM,kBAClB,GAAwB,MAAc,IAAY,EAAE,EAC1D,EAAE,CACH;EACD,uBAAuBA,EAAM,kBACrB,GAAwB,MAAc,IAAY,EAAE,EAC1D,EAAE,CACH;EACD,UAA0B,kBACxB,EAAU,KACV;GACE,UAAU,KAAoB,MAAwB,IAAI,KAAK;GAC/D,oBAAoB;GACpB,GAAG;GACH,KAAK;GACL,OAAO;IAAE,SAAS;IAAQ,GAAG,EAAM;IAAO;GAC1C,aAAa,EAAqB,EAAM,mBAAmB;AACzD,MAAgB,UAAU;KAC1B;GACF,SAAS,EAAqB,EAAM,UAAU,MAAU;IACtD,IAAM,IAAkB,CAAC,EAAgB;AACzC,QAAI,EAAM,WAAW,EAAM,iBAAiB,KAAmB,CAAC,GAAkB;KAChF,IAAM,IAAkB,IAAI,YAAY,IAAaL,GAAc;AAEnE,SADA,EAAM,cAAc,cAAc,EAAgB,EAC9C,CAAC,EAAgB,kBAAkB;MACrC,IAAM,IAAQ,GAAU,CAAC,QAAQ,MAAS,EAAK,UAAU;AAOzD,SAJuB;OAFJ,EAAM,MAAM,MAAS,EAAK,OAAO;OAChC,EAAM,MAAM,MAAS,EAAK,OAAO,EAAiB;OACrB,GAAG;OAAM,CAAC,OACzD,QACD,CACqC,KAAK,MAAS,EAAK,IAAI,QAAQ,EAC1C,EAA0B;;;AAGzD,MAAgB,UAAU;KAC1B;GACF,QAAQ,EAAqB,EAAM,cAAc,EAAoB,GAAM,CAAC;GAC7E,CACF;EACF,CACF;EACD,EACEO,KAAY,wBACZ,KAAuBF,EAAM,YAC9B,GAAO,MAAiB;CACvB,IAAM,EACJ,4BACA,eAAY,IACZ,YAAS,IACT,cACA,aACA,GAAG,MACD,GACE,IAAS,IAAO,EAChB,IAAK,KAAa,GAClB,IAAU,GAAsBE,IAAW,EAAwB,EACnE,IAAmB,EAAQ,qBAAqB,GAChD,IAAWJ,GAAc,EAAwB,EACjD,EAAE,uBAAoB,0BAAuB,wBAAqB;AAOxE,QANA,EAAM,gBAAgB;AACpB,MAAI,EAEF,QADA,GAAoB,QACP,GAAuB;IAErC;EAAC;EAAW;EAAoB;EAAsB,CAAC,EACnC,kBACrBD,GAAW,UACX;EACE,OAAO;EACP;EACA;EACA;EACA,UAA0B,kBACxB,EAAU,MACV;GACE,UAAU,IAAmB,IAAI;GACjC,oBAAoB,EAAQ;GAC5B,GAAG;GACH,KAAK;GACL,aAAa,EAAqB,EAAM,cAAc,MAAU;AAC9D,IAAK,IACA,EAAQ,YAAY,EAAG,GADZ,EAAM,gBAAgB;KAEtC;GACF,SAAS,EAAqB,EAAM,eAAe,EAAQ,YAAY,EAAG,CAAC;GAC3E,WAAW,EAAqB,EAAM,YAAY,MAAU;AAC1D,QAAI,EAAM,QAAQ,SAAS,EAAM,UAAU;AACzC,OAAQ,gBAAgB;AACxB;;AAEF,QAAI,EAAM,WAAW,EAAM,cAAe;IAC1C,IAAM,IAAc,GAAe,GAAO,EAAQ,aAAa,EAAQ,IAAI;AAC3E,QAAI,MAAgB,KAAK,GAAG;AAC1B,SAAI,EAAM,WAAW,EAAM,WAAW,EAAM,UAAU,EAAM,SAAU;AACtE,OAAM,gBAAgB;KAEtB,IAAI,IADU,GAAU,CAAC,QAAQ,MAAS,EAAK,UAAU,CAC9B,KAAK,MAAS,EAAK,IAAI,QAAQ;AAC1D,SAAI,MAAgB,OAAQ,GAAe,SAAS;cAC3C,MAAgB,UAAU,MAAgB,QAAQ;AACzD,MAAI,MAAgB,UAAQ,EAAe,SAAS;MACpD,IAAM,IAAe,EAAe,QAAQ,EAAM,cAAc;AAChE,UAAiB,EAAQ,OAAOM,GAAU,GAAgB,IAAe,EAAE,GAAG,EAAe,MAAM,IAAe,EAAE;;AAEtH,sBAAiBC,GAAW,EAAe,CAAC;;KAE9C;GACF,UAAU,OAAO,KAAa,aAAa,EAAS;IAAE;IAAkB,YAAY,KAAoB;IAAM,CAAC,GAAG;GACnH,CACF;EACF,CACF;EAEJ;AACD,GAAqB,cAAcF;AACnC,IAAI,KAA0B;CAC5B,WAAW;CACX,SAAS;CACT,YAAY;CACZ,WAAW;CACX,QAAQ;CACR,MAAM;CACN,UAAU;CACV,KAAK;CACN;AACD,SAAS,GAAqB,GAAK,GAAK;AAEtC,QADI,MAAQ,QACL,MAAQ,cAAc,eAAe,MAAQ,eAAe,cAAc,IADvD;;AAG5B,SAAS,GAAe,GAAO,GAAa,GAAK;CAC/C,IAAM,IAAM,GAAqB,EAAM,KAAK,EAAI;AAC5C,aAAgB,cAAc,CAAC,aAAa,aAAa,CAAC,SAAS,EAAI,KACvE,QAAgB,gBAAgB,CAAC,WAAW,YAAY,CAAC,SAAS,EAAI,EAC1E,QAAO,GAAwB;;AAEjC,SAASE,GAAW,GAAY,IAAgB,IAAO;CACrD,IAAM,IAA6B,SAAS;AAC5C,MAAK,IAAM,KAAa,EAGtB,KAFI,MAAc,MAClB,EAAU,MAAM,EAAE,kBAAe,CAAC,EAC9B,SAAS,kBAAkB,GAA4B;;AAG/D,SAASD,GAAU,GAAO,GAAY;AACpC,QAAO,EAAM,KAAK,GAAG,MAAU,GAAO,IAAa,KAAS,EAAM,QAAQ;;AAE5E,IAAIE,KAAO,IACP,KAAO,IClNP,KAAoB,eACpB,CAAC,IAA0B,MAA0B,GAAmB,IAAmB,CAC7F,GACD,CAAC,EACEC,KAA2B,IAA6B,EACxDC,KAAc,EAAM,YAAY,GAAO,MAAiB;CAC1D,IAAM,EAAE,SAAM,GAAG,MAAqB;AACtC,KAAI,MAAS,SAEX,QAAuB,kBAAI,IAAuB;EAAE,GADhC;EACgD,KAAK;EAAc,CAAC;AAE1F,KAAI,MAAS,WAEX,QAAuB,kBAAI,IAAyB;EAAE,GADhC;EACkD,KAAK;EAAc,CAAC;AAE9F,OAAU,MAAM,uCAAuC,GAAkB,IAAI;EAC7E;AACF,GAAY,cAAc;AAC1B,IAAI,CAAC,IAA0B,MAA8B,GAAyB,GAAkB,EACpG,KAAwB,EAAM,YAAY,GAAO,MAAiB;CACpE,IAAM,EACJ,OAAO,GACP,iBACA,yBAAsB,IAEtB,GAAG,MACD,GACE,CAAC,GAAO,KAAY,GAAqB;EAC7C,MAAM;EACN,aAAa,KAAgB;EAC7B,UAAU;EACV,QAAQ;EACT,CAAC;AACF,QAAuB,kBACrB,IACA;EACE,OAAO,EAAM;EACb,MAAM;EACN,OAAO,EAAM,cAAc,IAAQ,CAAC,EAAM,GAAG,EAAE,EAAE,CAAC,EAAM,CAAC;EACzD,gBAAgB;EAChB,kBAAkB,EAAM,kBAAkB,EAAS,GAAG,EAAE,CAAC,EAAS,CAAC;EACnE,UAA0B,kBAAI,IAAiB;GAAE,GAAG;GAAwB,KAAK;GAAc,CAAC;EACjG,CACF;EACD,EACE,KAA0B,EAAM,YAAY,GAAO,MAAiB;CACtE,IAAM,EACJ,OAAO,GACP,iBACA,yBAAsB,IAEtB,GAAG,MACD,GACE,CAAC,GAAO,KAAY,GAAqB;EAC7C,MAAM;EACN,aAAa,KAAgB,EAAE;EAC/B,UAAU;EACV,QAAQ;EACT,CAAC,EACI,IAAuB,EAAM,aAChC,MAAc,GAAU,IAAY,EAAE,KAAK,CAAC,GAAG,GAAW,EAAU,CAAC,EACtE,CAAC,EAAS,CACX,EACK,IAAyB,EAAM,aAClC,MAAc,GAAU,IAAY,EAAE,KAAK,EAAU,QAAQ,MAAW,MAAW,EAAU,CAAC,EAC/F,CAAC,EAAS,CACX;AACD,QAAuB,kBACrB,IACA;EACE,OAAO,EAAM;EACb,MAAM;EACN;EACA,gBAAgB;EAChB,kBAAkB;EAClB,UAA0B,kBAAI,IAAiB;GAAE,GAAG;GAA0B,KAAK;GAAc,CAAC;EACnG,CACF;EACD;AACF,GAAY,cAAc;AAC1B,IAAI,CAACC,IAAoB,MAAyB,GAAyB,GAAkB,EACzF,KAAkB,EAAM,YACzB,GAAO,MAAiB;CACvB,IAAM,EACJ,uBACA,cAAW,IACX,iBAAc,IACd,gBACA,QACA,UAAO,IACP,GAAG,MACD,GACE,IAAwBF,GAAyB,EAAmB,EACpE,IAAY,GAAa,EAAI,EAC7B,IAAc;EAAE,MAAM;EAAS,KAAK;EAAW,GAAG;EAAkB;AAC1E,QAAuB,kBAAIE,IAAoB;EAAE,OAAO;EAAoB;EAAa;EAAU,UAAU,IAA8B,kBACzIC,IACA;GACE,SAAS;GACT,GAAG;GACH;GACA,KAAK;GACL;GACA,UAA0B,kBAAI,EAAU,KAAK;IAAE,GAAG;IAAa,KAAK;IAAc,CAAC;GACpF,CACF,GAAmB,kBAAI,EAAU,KAAK;GAAE,GAAG;GAAa,KAAK;GAAc,CAAC;EAAE,CAAC;EAEnF,EACGC,KAAY,mBACZC,KAAkB,EAAM,YACzB,GAAO,MAAiB;CACvB,IAAM,IAAe,GAA2BD,IAAW,EAAM,mBAAmB,EAC9E,IAAU,GAAsBA,IAAW,EAAM,mBAAmB,EACpE,IAAwBJ,GAAyB,EAAM,mBAAmB,EAC1E,IAAU,EAAa,MAAM,SAAS,EAAM,MAAM,EAClD,IAAW,EAAQ,YAAY,EAAM,UACrC,IAAc;EAAE,GAAG;EAAO;EAAS;EAAU,EAC7C,IAAM,EAAM,OAAO,KAAK;AAC9B,QAAO,EAAQ,cAA8B,kBAC3CM,IACA;EACE,SAAS;EACT,GAAG;EACH,WAAW,CAAC;EACZ,QAAQ;EACR;EACA,UAA0B,kBAAI,IAAqB;GAAE,GAAG;GAAa,KAAK;GAAc,CAAC;EAC1F,CACF,GAAmB,kBAAI,IAAqB;EAAE,GAAG;EAAa,KAAK;EAAc,CAAC;EAEtF;AACD,GAAgB,cAAcF;AAC9B,IAAI,KAAsB,EAAM,YAC7B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,UAAO,GAAG,MAAc,GAC9C,IAAe,GAA2BA,IAAW,EAAmB,EACxE,IAAc;EAAE,MAAM;EAAS,gBAAgB,EAAM;EAAS,gBAAgB,KAAK;EAAG;AAE5F,QAAuB,kBACrBG,IACA;EACE,GAJc,EAAa,SAAS,WAAW,IAAc,KAAK;EAKlE,GAAG;EACH,KAAK;EACL,kBAAkB,MAAY;AAC5B,GAAI,IACF,EAAa,eAAe,EAAM,GAElC,EAAa,iBAAiB,EAAM;;EAGzC,CACF;EAEJ,EACGC,KAAQP,IACRQ,KAAQJ,IChJN,KAAqB,EAAM,cAAmD;CAClF,MAAM;CACN,SAAS;CACV,CAAC,EAEI,KAAc,EAAM,YAIvB,EAAE,cAAW,YAAS,SAAM,aAAU,GAAG,KAAS,MACnD,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,0CAA0C,EAAU;CAClE,GAAI;WAEJ,kBAAC,GAAmB,UAApB;EAA6B,OAAO;GAAE;GAAS;GAAM;EAClD;EAC2B,CAAA;CACJ,CAAA,CAC5B;AACF,GAAY,cAAA,GAAwC;AAEpD,IAAM,KAAkB,EAAM,YAI3B,EAAE,cAAW,aAAU,YAAS,SAAM,GAAG,KAAS,MAAQ;CAC3D,IAAM,IAAU,EAAM,WAAW,GAAmB;AAEpD,QACE,kBAAC,IAAD;EACO;EACL,WAAW,EACT,GAAe;GACb,SAAS,EAAQ,WAAW;GAC5B,MAAM,EAAQ,QAAQ;GACvB,CAAC,EACF,EACD;EACD,GAAI;EAEH;EACyB,CAAA;EAE9B;AACF,GAAgB,cAAA,GAAwC;;;ACxCxD,IAAM,KAAO,EAAM,YAGhB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,OAAD;CACO;CACL,WAAW,EACT,kDACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAK,cAAc;AAEnB,IAAM,KAAa,EAAM,YAGtB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,OAAD;CACO;CACL,WAAW,EAAG,iCAAiC,EAAU;CACzD,GAAI;CACJ,CAAA,CACF;AACF,GAAW,cAAc;AAEzB,IAAM,KAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,OAAD;CACO;CACL,WAAW,EAAG,6CAA6C,EAAU;CACrE,GAAI;CACJ,CAAA,CACF;AACF,GAAU,cAAc;AAExB,IAAM,KAAkB,EAAM,YAG3B,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,OAAD;CACO;CACL,WAAW,EAAG,iCAAiC,EAAU;CACzD,GAAI;CACJ,CAAA,CACF;AACF,GAAgB,cAAc;AAE9B,IAAM,KAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,OAAD;CAAU;CAAK,WAAW,EAAG,YAAY,EAAU;CAAE,GAAI;CAAS,CAAA,CAClE;AACF,GAAY,cAAc;AAE1B,IAAM,KAAa,EAAM,YAGtB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,OAAD;CACO;CACL,WAAW,EAAG,8BAA8B,EAAU;CACtD,GAAI;CACJ,CAAA,CACF;AACF,GAAW,cAAc;;;ACzFzB,SAAgB,GAAY,EAAE,UAAO,SAAM,KAAK,UAAO,gBAA+B;CACpF,IAAM,IAAM,IAAM,IAAI,KAAK,IAAK,IAAQ,IAAO,KAAK,IAAI,GAAG;AAE3D,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,mDAAmD,EAAU;YAE3E,kBAAC,OAAD;GACE,WAAU;GACV,OAAO;IACL,OAAO,GAAG,EAAI;IACd,iBAAiB,KAAS;IAC3B;GACD,CAAA;EACE,CAAA;;;;ACjBV,IAAI,KAAoB;CACtB,SAAS;EACP,OAAO;EACP,OAAO;EACP,QAAQ;EACR,SAAS;EACT,MAAM;EACN,QAAQ;EACR,aAAa;EACb,eAAe;EACf,gBAAgB;EACjB;CACD,QAAQ;EACN,OAAO;EACP,OAAO;EACP,QAAQ;EACR,SAAS;EACT,MAAM;EACN,QAAQ;EACT;CACF,ECjBK,MAAwB,GAAM,GAAU,GAAgB,MAAa;CACzE,IAAM,IAAY,GACf,EAAE,WAAQ,gBAAgB,UAAO,IAAI,YAAS,GAAG,UAAO,cAAW,aAAU,GAAG,KAAQ,MAAQ,EAC/F,OACA;EACE;EACA,GAAG,GAAkB;EACrB,OAAO;EACP,QAAQ;EACR,WAAW;GAAC;GAAe,eAAe;GAAY;GAAU,CAAC,KAAK,IAAI;EAC1E,GAAG,MAAS,WAAW,EACrB,MAAM,GACP,GAAG;GACF,aAAa;GACb,QAAQ;GACT;EACD,GAAG;EACJ,EACD;EACE,KAAS,EAAc,SAAS,EAAE,KAAK,aAAa,EAAE,EAAM;EAC5D,GAAG,EAAS,KAAK,CAAC,GAAK,OAAW,EAAc,GAAK,EAAM,CAAC;EAC5D,GAAG,MAAM,QAAQ,EAAS,GAAG,IAAW,CAAC,EAAS;EACnD,CACF,CACF;AAED,QADA,EAAU,cAAc,GAAG,KACpB;GC1BH,KAAqB,GAAqB,WAAW,oBAAoB,kBAD5D,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAc,KAAO;CAAS,CAAC,EAAE,CAAC,QAAQ;CAAE,GAAK;CAAkB,KAAO;CAAS,CAAC,CAAC,CACb,ECAtG,KAAgB,GAAqB,WAAW,cAAc,aADjD;CAAC,CAAC,QAAQ;EAAE,GAAK;EAAc,KAAO;EAAS,CAAC;CAAE,CAAC,QAAQ;EAAE,GAAK;EAAe,KAAO;EAAS,CAAC;CAAE,CAAC,QAAQ;EAAE,GAAK;EAAa,KAAO;EAAS,CAAC;CAAC,CAC1E,ECAtF,KAAmB,GAAqB,WAAW,kBAAkB,gBADxD,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAgB,KAAO;CAAS,CAAC,EAAE,CAAC,QAAQ;CAAE,GAAK;CAAgB,KAAO;CAAS,CAAC,CAAC,CACnB,ECAhG,KAAc,GAAqB,WAAW,YAAY,WAD7C;CAAC,CAAC,QAAQ;EAAE,GAAK;EAAc,KAAO;EAAS,CAAC;CAAE,CAAC,QAAQ;EAAE,GAAK;EAAgB,KAAO;EAAS,CAAC;CAAE,CAAC,QAAQ;EAAE,GAAK;EAAc,KAAO;EAAS,CAAC;CAAC,CAClF,ECAhF,KAAY,GAAqB,WAAW,SAAS,SADxC,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAoB,KAAO;CAAS,CAAC,CAAC,CACK,ECAzE,KAAkB,GAAqB,WAAW,gBAAgB,eADrD,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAiB,KAAO;CAAS,CAAC,CAAC,CAC2B,ECA5F,KAAkB,GAAqB,WAAW,gBAAgB,eADrD,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAkB,KAAO;CAAS,CAAC,CAAC,CAC0B,ECA5F,KAAmB,GAAqB,WAAW,iBAAiB,gBADvD,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAiB,KAAO;CAAS,CAAC,CAAC,CAC8B,ECA/F,KAAgB,GAAqB,WAAW,cAAc,aADjD,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAkB,KAAO;CAAS,CAAC,CAAC,CACoB,ECAtF,KAAc,GAAqB,WAAW,YAAY,WAD7C,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAuB,KAAO;CAAS,CAAC,CAAC,CACS,ECAhF,KAAY,GAAqB,WAAW,SAAS,SADxC,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAc,KAAO;CAAS,CAAC,CAAC,CACW,ECAzE,KAAe,GAAqB,WAAW,YAAY,YAD9C,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAiB,KAAO;CAAS,CAAC,EAAE,CAAC,QAAQ;CAAE,GAAK;CAAqB,KAAO;CAAS,CAAC,CAAC,CACvC,ECAlF,KAAQ,GAAqB,WAAW,KAAK,KADhC,CAAC,CAAC,QAAQ;CAAE,GAAK;CAAgB,KAAO;CAAS,CAAC,EAAE,CAAC,QAAQ;CAAE,GAAK;CAAc,KAAO;CAAS,CAAC,CAAC,CACpD,ECL7D,KAAkB,EAAI,yDAAyD;CACnF,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,SAAS;EACT,IAAI;EACL,EACF;CACD,iBAAiB,EACf,MAAM,WACP;CACF,CAAC,EAEI,KAAY;CAAE,IAAI;CAAI,SAAS;CAAI,IAAI;CAAI;AAEjD,SAAS,GAAQ,EACf,UAAO,WACP,cACA,GAAG,KACkE;CACrE,IAAM,IAAe,KAAQ;AAC7B,QACE,kBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,WAAW,EAAG,oCAAoC,EAAU;EAC5D,GAAI;YAJN,CAME,kBAAC,IAAD;GACE,MAAM,GAAU;GAChB,QAAQ;GACR,WAAW,EAAG,GAAgB,EAAE,MAAM,GAAc,CAAC,CAAC;GACtD,CAAA,EACF,kBAAC,QAAD;GAAM,WAAU;aAAU;GAAc,CAAA,CACpC;;;;;AC9BV,SAAS,GAAgB,GAAc,GAAS;AAC9C,QAAOiB,EAAM,YAAY,GAAO,MACZ,EAAQ,GAAO,MACb,GACnB,EAAa;;AAIlB,IAAI,KAAY,MAAU;CACxB,IAAM,EAAE,YAAS,gBAAa,GACxB,IAAW,GAAY,EAAQ,EAC/B,IAAQ,OAAO,KAAa,aAAa,EAAS,EAAE,SAAS,EAAS,WAAW,CAAC,GAAGC,EAAO,SAAS,KAAK,EAAS,EACnH,IAAM,EAAgB,EAAS,KAAK,GAAc,EAAM,CAAC;AAE/D,QADmB,OAAO,KAAa,cAClB,EAAS,YAAYA,EAAO,aAAa,GAAO,EAAE,QAAK,CAAC,GAAG;;AAElF,EAAS,cAAc;AACvB,SAAS,GAAY,GAAS;CAC5B,IAAM,CAAC,GAAM,KAAWA,EAAO,UAAU,EACnC,IAAYA,EAAO,OAAO,KAAK,EAC/B,IAAiBA,EAAO,OAAO,EAAQ,EACvC,IAAuBA,EAAO,OAAO,OAAO,EAE5C,CAAC,GAAO,KAAQ,GADD,IAAU,YAAY,aACS;EAClD,SAAS;GACP,SAAS;GACT,eAAe;GAChB;EACD,kBAAkB;GAChB,OAAO;GACP,eAAe;GAChB;EACD,WAAW,EACT,OAAO,WACR;EACF,CAAC;AAiEF,QAhEA,EAAO,gBAAgB;EACrB,IAAM,IAAuB,GAAiB,EAAU,QAAQ;AAChE,IAAqB,UAAU,MAAU,YAAY,IAAuB;IAC3E,CAAC,EAAM,CAAC,EACX,SAAsB;EACpB,IAAM,IAAS,EAAU,SACnB,IAAa,EAAe;AAElC,MAD0B,MAAe,GAClB;GACrB,IAAM,IAAoB,EAAqB,SACzC,IAAuB,GAAiB,EAAO;AAarD,GAZI,IACF,EAAK,QAAQ,GACJ,MAAyB,UAAU,GAAQ,YAAY,SAChE,EAAK,UAAU,GAIb,EADE,KADgB,MAAsB,IAEnC,kBAEA,UAAU,EAGnB,EAAe,UAAU;;IAE1B,CAAC,GAAS,EAAK,CAAC,EACnB,SAAsB;AACpB,MAAI,GAAM;GACR,IAAI,GACE,IAAc,EAAK,cAAc,eAAe,QAChD,KAAsB,MAAU;IAEpC,IAAM,IADuB,GAAiB,EAAU,QAAQ,CAChB,SAAS,IAAI,OAAO,EAAM,cAAc,CAAC;AACzF,QAAI,EAAM,WAAW,KAAQ,MAC3B,EAAK,gBAAgB,EACjB,CAAC,EAAe,UAAS;KAC3B,IAAM,IAAkB,EAAK,MAAM;AAEnC,KADA,EAAK,MAAM,oBAAoB,YAC/B,IAAY,EAAY,iBAAiB;AACvC,MAAI,EAAK,MAAM,sBAAsB,eACnC,EAAK,MAAM,oBAAoB;OAEjC;;MAIF,KAAwB,MAAU;AACtC,IAAI,EAAM,WAAW,MACnB,EAAqB,UAAU,GAAiB,EAAU,QAAQ;;AAMtE,UAHA,EAAK,iBAAiB,kBAAkB,EAAqB,EAC7D,EAAK,iBAAiB,mBAAmB,EAAmB,EAC5D,EAAK,iBAAiB,gBAAgB,EAAmB,QAC5C;AAIX,IAHA,EAAY,aAAa,EAAU,EACnC,EAAK,oBAAoB,kBAAkB,EAAqB,EAChE,EAAK,oBAAoB,mBAAmB,EAAmB,EAC/D,EAAK,oBAAoB,gBAAgB,EAAmB;;QAG9D,GAAK,gBAAgB;IAEtB,CAAC,GAAM,EAAK,CAAC,EACT;EACL,WAAW,CAAC,WAAW,mBAAmB,CAAC,SAAS,EAAM;EAC1D,KAAKA,EAAO,aAAa,MAAU;AAEjC,GADA,EAAU,UAAU,IAAQ,iBAAiB,EAAM,GAAG,MACtD,EAAQ,EAAM;KACb,EAAE,CAAC;EACP;;AAEH,SAAS,GAAiB,GAAQ;AAChC,QAAO,GAAQ,iBAAiB;;AAElC,SAAS,GAAc,GAAS;CAC9B,IAAI,IAAS,OAAO,yBAAyB,EAAQ,OAAO,MAAM,EAAE,KAChE,IAAU,KAAU,oBAAoB,KAAU,EAAO;AAS7D,QARI,IACK,EAAQ,OAEjB,IAAS,OAAO,yBAAyB,GAAS,MAAM,EAAE,KAC1D,IAAU,KAAU,oBAAoB,KAAU,EAAO,gBACrD,IACK,EAAQ,MAAM,MAEhB,EAAQ,MAAM,OAAO,EAAQ;;;;ACrHtC,IAAI,KAAY,QACZ,CAAC,IAAmB,MAAmB,GAAmB,IAAW,CACvE,GACD,CAAC,EACEC,KAA2B,IAA6B,EACxD,CAAC,IAAc,MAAkB,GAAkB,GAAU,EAC7DC,KAAOC,EAAM,YACd,GAAO,MAAiB;CACvB,IAAM,EACJ,gBACA,OAAO,GACP,kBACA,iBACA,iBAAc,cACd,QACA,oBAAiB,aACjB,GAAG,MACD,GACE,IAAY,GAAa,EAAI,EAC7B,CAAC,GAAO,KAAY,GAAqB;EAC7C,MAAM;EACN,UAAU;EACV,aAAa,KAAgB;EAC7B,QAAQ;EACT,CAAC;AACF,QAAuB,kBACrB,IACA;EACE,OAAO;EACP,QAAQ,IAAO;EACf;EACA,eAAe;EACf;EACA,KAAK;EACL;EACA,UAA0B,kBACxB,EAAU,KACV;GACE,KAAK;GACL,oBAAoB;GACpB,GAAG;GACH,KAAK;GACN,CACF;EACF,CACF;EAEJ;AACD,GAAK,cAAc;AACnB,IAAI,KAAgB,YAChBC,KAAWD,EAAM,YAClB,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,UAAO,IAAM,GAAG,MAAc,GAC7C,IAAU,GAAe,IAAe,EAAY;AAE1D,QAAuB,kBACrBE,IACA;EACE,SAAS;EACT,GAL0BJ,GAAyB,EAAY;EAM/D,aAAa,EAAQ;EACrB,KAAK,EAAQ;EACb;EACA,UAA0B,kBACxB,EAAU,KACV;GACE,MAAM;GACN,oBAAoB,EAAQ;GAC5B,GAAG;GACH,KAAK;GACN,CACF;EACF,CACF;EAEJ;AACD,GAAS,cAAc;AACvB,IAAIK,KAAe,eACfC,KAAcJ,EAAM,YACrB,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,UAAO,cAAW,IAAO,GAAG,MAAiB,GAC5D,IAAU,GAAeG,IAAc,EAAY,EACnD,IAAwBL,GAAyB,EAAY,EAC7D,IAAY,GAAc,EAAQ,QAAQ,EAAM,EAChD,IAAY,GAAc,EAAQ,QAAQ,EAAM,EAChD,IAAa,MAAU,EAAQ;AACrC,QAAuB,kBACrBO,IACA;EACE,SAAS;EACT,GAAG;EACH,WAAW,CAAC;EACZ,QAAQ;EACR,UAA0B,kBACxB,EAAU,QACV;GACE,MAAM;GACN,MAAM;GACN,iBAAiB;GACjB,iBAAiB;GACjB,cAAc,IAAa,WAAW;GACtC,iBAAiB,IAAW,KAAK,KAAK;GACtC;GACA,IAAI;GACJ,GAAG;GACH,KAAK;GACL,aAAa,EAAqB,EAAM,cAAc,MAAU;AAC9D,IAAI,CAAC,KAAY,EAAM,WAAW,KAAK,EAAM,YAAY,KACvD,EAAQ,cAAc,EAAM,GAE5B,EAAM,gBAAgB;KAExB;GACF,WAAW,EAAqB,EAAM,YAAY,MAAU;AAC1D,IAAI,CAAC,KAAK,QAAQ,CAAC,SAAS,EAAM,IAAI,IAAE,EAAQ,cAAc,EAAM;KACpE;GACF,SAAS,EAAqB,EAAM,eAAe;IACjD,IAAM,IAAwB,EAAQ,mBAAmB;AACzD,IAAI,CAAC,KAAc,CAAC,KAAY,KAC9B,EAAQ,cAAc,EAAM;KAE9B;GACH,CACF;EACF,CACF;EAEJ;AACD,GAAY,cAAcF;AAC1B,IAAIG,KAAe,eACfC,KAAcP,EAAM,YACrB,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,UAAO,eAAY,aAAU,GAAG,MAAiB,GAChE,IAAU,GAAeM,IAAc,EAAY,EACnD,IAAY,GAAc,EAAQ,QAAQ,EAAM,EAChD,IAAY,GAAc,EAAQ,QAAQ,EAAM,EAChD,IAAa,MAAU,EAAQ,OAC/B,IAA+BN,EAAM,OAAO,EAAW;AAK7D,QAJA,EAAM,gBAAgB;EACpB,IAAM,IAAM,4BAA4B,EAA6B,UAAU,GAAM;AACrF,eAAa,qBAAqB,EAAI;IACrC,EAAE,CAAC,EACiB,kBAAI,GAAU;EAAE,SAAS,KAAc;EAAY,WAAW,EAAE,iBAA8B,kBACnH,EAAU,KACV;GACE,cAAc,IAAa,WAAW;GACtC,oBAAoB,EAAQ;GAC5B,MAAM;GACN,mBAAmB;GACnB,QAAQ,CAAC;GACT,IAAI;GACJ,UAAU;GACV,GAAG;GACH,KAAK;GACL,OAAO;IACL,GAAG,EAAM;IACT,mBAAmB,EAA6B,UAAU,OAAO,KAAK;IACvE;GACD,UAAU,KAAW;GACtB,CACF;EAAE,CAAC;EAEP;AACD,GAAY,cAAcM;AAC1B,SAAS,GAAc,GAAQ,GAAO;AACpC,QAAO,GAAG,EAAO,WAAW;;AAE9B,SAAS,GAAc,GAAQ,GAAO;AACpC,QAAO,GAAG,EAAO,WAAW;;AAE9B,IAAIE,KAAQT,IACR,KAAOE,IACPQ,KAAUL,IACVM,KAAUH,ICnLR,KAAO,IAEP,KAAmB,EACvB,iEACA;CACE,UAAU,EACR,SAAS;EAGP,SAAS;EACT,MAAM;EACN,SACE;EACH,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF,EAEK,KAAW,EAAM,YAIpB,EAAE,cAAW,YAAS,GAAG,KAAS,MACnC,kBAAC,IAAD;CACO;CACL,gBAAc;CACd,WAAW,EAAG,GAAiB,EAAE,YAAS,CAAC,EAAE,EAAU;CACvD,GAAI;CACJ,CAAA,CACF;AACF,GAAS,cAAA,GAAiC;AAE1C,IAAM,KAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EACT,kYACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAY,cAAA,GAAoC;AAEhD,IAAM,KAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EACT,mIACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAY,cAAA,GAAoC;;;ACrEhD,SAASI,GAAe,GAAU;CAChC,IAAM,IAAcC,EAAM,OAAO,EAAS;AAI1C,QAHA,EAAM,gBAAgB;AACpB,IAAY,UAAU;GACtB,EACKA,EAAM,eAAe,GAAG,MAAS,EAAY,UAAU,GAAG,EAAK,EAAE,EAAE,CAAC;;;;ACJ7E,SAAS,GAAiB,GAAqB,IAAgB,YAAY,UAAU;CACnF,IAAM,IAAkBC,GAAe,EAAoB;AAC3D,GAAM,gBAAgB;EACpB,IAAM,KAAiB,MAAU;AAC/B,GAAI,EAAM,QAAQ,YAChB,EAAgB,EAAM;;AAI1B,SADA,EAAc,iBAAiB,WAAW,GAAe,EAAE,SAAS,IAAM,CAAC,QAC9D,EAAc,oBAAoB,WAAW,GAAe,EAAE,SAAS,IAAM,CAAC;IAC1F,CAAC,GAAiB,EAAc,CAAC;;;;ACHtC,IAAI,KAAyB,oBACzB,KAAiB,2BACjB,KAAuB,uCACvB,KAAgB,iCAChB,IACA,KAA0BC,EAAM,cAAc;CAChD,wBAAwB,IAAI,KAAK;CACjC,wDAAwD,IAAI,KAAK;CACjE,0BAA0B,IAAI,KAAK;CACpC,CAAC,EACE,KAAmBA,EAAM,YAC1B,GAAO,MAAiB;CACvB,IAAM,EACJ,iCAA8B,IAC9B,oBACA,yBACA,mBACA,sBACA,cACA,GAAG,MACD,GACE,IAAUA,EAAM,WAAW,GAAwB,EACnD,CAAC,GAAM,KAAWA,EAAM,SAAS,KAAK,EACtC,IAAgB,GAAM,iBAAiB,YAAY,UACnD,GAAG,KAASA,EAAM,SAAS,EAAE,CAAC,EAC9B,IAAe,EAAgB,IAAe,MAAU,EAAQ,EAAM,CAAC,EACvE,IAAS,MAAM,KAAK,EAAQ,OAAO,EACnC,CAAC,KAAgD,CAAC,GAAG,EAAQ,uCAAuC,CAAC,MAAM,GAAG,EAC9G,IAAoD,EAAO,QAAQ,EAA6C,EAChH,IAAQ,IAAO,EAAO,QAAQ,EAAK,GAAG,IACtC,IAA8B,EAAQ,uCAAuC,OAAO,GACpF,IAAyB,KAAS,GAClC,IAAqB,IAAuB,MAAU;EAC1D,IAAM,IAAS,EAAM,QACf,IAAwB,CAAC,GAAG,EAAQ,SAAS,CAAC,MAAM,MAAW,EAAO,SAAS,EAAO,CAAC;AACzF,GAAC,KAA0B,MAC/B,IAAuB,EAAM,EAC7B,IAAoB,EAAM,EACrB,EAAM,oBAAkB,KAAa;IACzC,EAAc,EACX,IAAe,IAAiB,MAAU;EAC9C,IAAM,IAAS,EAAM;AACG,GAAC,GAAG,EAAQ,SAAS,CAAC,MAAM,MAAW,EAAO,SAAS,EAAO,CAAC,KAEvF,IAAiB,EAAM,EACvB,IAAoB,EAAM,EACrB,EAAM,oBAAkB,KAAa;IACzC,EAAc;AAwCjB,QAvCA,IAAkB,MAAU;AACH,QAAU,EAAQ,OAAO,OAAO,MAEvD,IAAkB,EAAM,EACpB,CAAC,EAAM,oBAAoB,MAC7B,EAAM,gBAAgB,EACtB,GAAW;IAEZ,EAAc,EACjB,EAAM,gBAAgB;AACf,QAUL,QATI,MACE,EAAQ,uCAAuC,SAAS,MAC1D,KAA4B,EAAc,KAAK,MAAM,eACrD,EAAc,KAAK,MAAM,gBAAgB,SAE3C,EAAQ,uCAAuC,IAAI,EAAK,GAE1D,EAAQ,OAAO,IAAI,EAAK,EACxB,IAAgB,QACH;AACX,GAAI,KAA+B,EAAQ,uCAAuC,SAAS,MACzF,EAAc,KAAK,MAAM,gBAAgB;;IAG5C;EAAC;EAAM;EAAe;EAA6B;EAAQ,CAAC,EAC/D,EAAM,sBACS;AACN,QACL,EAAQ,OAAO,OAAO,EAAK,EAC3B,EAAQ,uCAAuC,OAAO,EAAK,EAC3D,IAAgB;IAEjB,CAAC,GAAM,EAAQ,CAAC,EACnB,EAAM,gBAAgB;EACpB,IAAM,UAAqB,EAAM,EAAE,CAAC;AAEpC,SADA,SAAS,iBAAiB,IAAgB,EAAa,QAC1C,SAAS,oBAAoB,IAAgB,EAAa;IACtE,EAAE,CAAC,EACiB,kBACrB,EAAU,KACV;EACE,GAAG;EACH,KAAK;EACL,OAAO;GACL,eAAe,IAA8B,IAAyB,SAAS,SAAS,KAAK;GAC7F,GAAG,EAAM;GACV;EACD,gBAAgB,EAAqB,EAAM,gBAAgB,EAAa,eAAe;EACvF,eAAe,EAAqB,EAAM,eAAe,EAAa,cAAc;EACpF,sBAAsB,EACpB,EAAM,sBACN,EAAmB,qBACpB;EACF,CACF;EAEJ;AACD,GAAiB,cAAc;AAC/B,IAAI,KAAc,0BACd,KAAyBA,EAAM,YAAY,GAAO,MAAiB;CACrE,IAAM,IAAUA,EAAM,WAAW,GAAwB,EACnD,IAAMA,EAAM,OAAO,KAAK,EACxB,IAAe,EAAgB,GAAc,EAAI;AAUvD,QATA,EAAM,gBAAgB;EACpB,IAAM,IAAO,EAAI;AACjB,MAAI,EAEF,QADA,EAAQ,SAAS,IAAI,EAAK,QACb;AACX,KAAQ,SAAS,OAAO,EAAK;;IAGhC,CAAC,EAAQ,SAAS,CAAC,EACC,kBAAI,EAAU,KAAK;EAAE,GAAG;EAAO,KAAK;EAAc,CAAC;EAC1E;AACF,GAAuB,cAAc;AACrC,SAAS,GAAsB,GAAsB,IAAgB,YAAY,UAAU;CACzF,IAAM,IAA2BC,GAAe,EAAqB,EAC/D,IAA8BD,EAAM,OAAO,GAAM,EACjD,IAAiBA,EAAM,aAAa,GACxC;AAmCF,QAlCA,EAAM,gBAAgB;EACpB,IAAM,KAAqB,MAAU;AACnC,OAAI,EAAM,UAAU,CAAC,EAA4B,SAAS;IACxD,IAAI,IAA4C,WAAW;AACzD,QACE,IACA,GACA,GACA,EAAE,UAAU,IAAM,CACnB;OAGG,IAAc,EAAE,eAAe,GAAO;AAC5C,IAAI,EAAM,gBAAgB,WACxB,EAAc,oBAAoB,SAAS,EAAe,QAAQ,EAClE,EAAe,UAAU,GACzB,EAAc,iBAAiB,SAAS,EAAe,SAAS,EAAE,MAAM,IAAM,CAAC,IAE/E,GAA2C;SAG7C,GAAc,oBAAoB,SAAS,EAAe,QAAQ;AAEpE,KAA4B,UAAU;KAElC,IAAU,OAAO,iBAAiB;AACtC,KAAc,iBAAiB,eAAe,EAAkB;KAC/D,EAAE;AACL,eAAa;AAGX,GAFA,OAAO,aAAa,EAAQ,EAC5B,EAAc,oBAAoB,eAAe,EAAkB,EACnE,EAAc,oBAAoB,SAAS,EAAe,QAAQ;;IAEnE,CAAC,GAAe,EAAyB,CAAC,EACtC,EAEL,4BAA4B,EAA4B,UAAU,IACnE;;AAEH,SAAS,GAAgB,GAAgB,IAAgB,YAAY,UAAU;CAC7E,IAAM,IAAqBC,GAAe,EAAe,EACnD,IAA4BD,EAAM,OAAO,GAAM;AAarD,QAZA,EAAM,gBAAgB;EACpB,IAAM,KAAe,MAAU;AAC7B,GAAI,EAAM,UAAU,CAAC,EAA0B,WAE7C,GAA6B,IAAe,GADxB,EAAE,eAAe,GAAO,EACiC,EAC3E,UAAU,IACX,CAAC;;AAIN,SADA,EAAc,iBAAiB,WAAW,EAAY,QACzC,EAAc,oBAAoB,WAAW,EAAY;IACrE,CAAC,GAAe,EAAmB,CAAC,EAChC;EACL,sBAAsB,EAA0B,UAAU;EAC1D,qBAAqB,EAA0B,UAAU;EAC1D;;AAEH,SAAS,KAAiB;CACxB,IAAM,IAAQ,IAAI,YAAY,GAAe;AAC7C,UAAS,cAAc,EAAM;;AAE/B,SAAS,GAA6B,GAAM,GAAS,GAAQ,EAAE,eAAY;CACzE,IAAM,IAAS,EAAO,cAAc,QAC9B,IAAQ,IAAI,YAAY,GAAM;EAAE,SAAS;EAAO,YAAY;EAAM;EAAQ,CAAC;AAEjF,CADI,KAAS,EAAO,iBAAiB,GAAM,GAAS,EAAE,MAAM,IAAM,CAAC,EAC/D,IACF,GAA4B,GAAQ,EAAM,GAE1C,EAAO,cAAc,EAAM;;;;AC5M/B,IAAM,KAAQ;CAAC;CAAO;CAAS;CAAU;CAAO,EAG1CE,KAAM,KAAK,KACXC,KAAM,KAAK,KACX,KAAQ,KAAK,OACb,KAAQ,KAAK,OACb,MAAe,OAAM;CACzB,GAAG;CACH,GAAG;CACJ,GACK,KAAkB;CACtB,MAAM;CACN,OAAO;CACP,QAAQ;CACR,KAAK;CACN;AACD,SAAS,GAAM,GAAO,GAAO,GAAK;AAChC,QAAOA,GAAI,GAAOD,GAAI,GAAO,EAAI,CAAC;;AAEpC,SAAS,GAAS,GAAO,GAAO;AAC9B,QAAO,OAAO,KAAU,aAAa,EAAM,EAAM,GAAG;;AAEtD,SAAS,GAAQ,GAAW;AAC1B,QAAO,EAAU,MAAM,IAAI,CAAC;;AAE9B,SAAS,GAAa,GAAW;AAC/B,QAAO,EAAU,MAAM,IAAI,CAAC;;AAE9B,SAAS,GAAgB,GAAM;AAC7B,QAAO,MAAS,MAAM,MAAM;;AAE9B,SAAS,GAAc,GAAM;AAC3B,QAAO,MAAS,MAAM,WAAW;;AAEnC,SAAS,GAAY,GAAW;CAC9B,IAAM,IAAY,EAAU;AAC5B,QAAO,MAAc,OAAO,MAAc,MAAM,MAAM;;AAExD,SAAS,GAAiB,GAAW;AACnC,QAAO,GAAgB,GAAY,EAAU,CAAC;;AAEhD,SAAS,GAAkB,GAAW,GAAO,GAAK;AAChD,CAAI,MAAQ,KAAK,MACf,IAAM;CAER,IAAM,IAAY,GAAa,EAAU,EACnC,IAAgB,GAAiB,EAAU,EAC3C,IAAS,GAAc,EAAc,EACvC,IAAoB,MAAkB,MAAM,OAAe,IAAM,QAAQ,WAAW,UAAU,SAAS,MAAc,UAAU,WAAW;AAI9I,QAHI,EAAM,UAAU,KAAU,EAAM,SAAS,OAC3C,IAAoB,GAAqB,EAAkB,GAEtD,CAAC,GAAmB,GAAqB,EAAkB,CAAC;;AAErE,SAAS,GAAsB,GAAW;CACxC,IAAM,IAAoB,GAAqB,EAAU;AACzD,QAAO;EAAC,GAA8B,EAAU;EAAE;EAAmB,GAA8B,EAAkB;EAAC;;AAExH,SAAS,GAA8B,GAAW;AAChD,QAAO,EAAU,SAAS,QAAQ,GAAG,EAAU,QAAQ,SAAS,MAAM,GAAG,EAAU,QAAQ,OAAO,QAAQ;;AAE5G,IAAM,KAAc,CAAC,QAAQ,QAAQ,EAC/B,KAAc,CAAC,SAAS,OAAO,EAC/B,KAAc,CAAC,OAAO,SAAS,EAC/B,KAAc,CAAC,UAAU,MAAM;AACrC,SAAS,GAAY,GAAM,GAAS,GAAK;AACvC,SAAQ,GAAR;EACE,KAAK;EACL,KAAK,SAEH,QADI,IAAY,IAAU,KAAc,KACjC,IAAU,KAAc;EACjC,KAAK;EACL,KAAK,QACH,QAAO,IAAU,KAAc;EACjC,QACE,QAAO,EAAE;;;AAGf,SAAS,GAA0B,GAAW,GAAe,GAAW,GAAK;CAC3E,IAAM,IAAY,GAAa,EAAU,EACrC,IAAO,GAAY,GAAQ,EAAU,EAAE,MAAc,SAAS,EAAI;AAOtE,QANI,MACF,IAAO,EAAK,KAAI,MAAQ,IAAO,MAAM,EAAU,EAC3C,MACF,IAAO,EAAK,OAAO,EAAK,IAAI,GAA8B,CAAC,IAGxD;;AAET,SAAS,GAAqB,GAAW;CACvC,IAAM,IAAO,GAAQ,EAAU;AAC/B,QAAO,GAAgB,KAAQ,EAAU,MAAM,EAAK,OAAO;;AAE7D,SAAS,GAAoB,GAAS;AACpC,QAAO;EACL,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;EACN,GAAG;EACJ;;AAEH,SAAS,GAAiB,GAAS;AACjC,QAAO,OAAO,KAAY,WAA0C;EAClE,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;EACP,GALoC,GAAoB,EAAQ;;AAOnE,SAAS,GAAiB,GAAM;CAC9B,IAAM,EACJ,MACA,MACA,UACA,cACE;AACJ,QAAO;EACL;EACA;EACA,KAAK;EACL,MAAM;EACN,OAAO,IAAI;EACX,QAAQ,IAAI;EACZ;EACA;EACD;;;;ACjIH,SAAS,GAA2B,GAAM,GAAW,GAAK;CACxD,IAAI,EACF,cACA,gBACE,GACE,IAAW,GAAY,EAAU,EACjC,IAAgB,GAAiB,EAAU,EAC3C,IAAc,GAAc,EAAc,EAC1C,IAAO,GAAQ,EAAU,EACzB,IAAa,MAAa,KAC1B,IAAU,EAAU,IAAI,EAAU,QAAQ,IAAI,EAAS,QAAQ,GAC/D,IAAU,EAAU,IAAI,EAAU,SAAS,IAAI,EAAS,SAAS,GACjE,IAAc,EAAU,KAAe,IAAI,EAAS,KAAe,GACrE;AACJ,SAAQ,GAAR;EACE,KAAK;AACH,OAAS;IACP,GAAG;IACH,GAAG,EAAU,IAAI,EAAS;IAC3B;AACD;EACF,KAAK;AACH,OAAS;IACP,GAAG;IACH,GAAG,EAAU,IAAI,EAAU;IAC5B;AACD;EACF,KAAK;AACH,OAAS;IACP,GAAG,EAAU,IAAI,EAAU;IAC3B,GAAG;IACJ;AACD;EACF,KAAK;AACH,OAAS;IACP,GAAG,EAAU,IAAI,EAAS;IAC1B,GAAG;IACJ;AACD;EACF,QACE,KAAS;GACP,GAAG,EAAU;GACb,GAAG,EAAU;GACd;;AAEL,SAAQ,GAAa,EAAU,EAA/B;EACE,KAAK;AACH,KAAO,MAAkB,KAAe,KAAO,IAAa,KAAK;AACjE;EACF,KAAK;AACH,KAAO,MAAkB,KAAe,KAAO,IAAa,KAAK;AACjE;;AAEJ,QAAO;;AAWT,eAAe,GAAe,GAAO,GAAS;AAE5C,CAAI,MAAY,KAAK,MACnB,IAAU,EAAE;CAEd,IAAM,EACJ,MACA,MACA,aACA,UACA,aACA,gBACE,GACE,EACJ,cAAW,qBACX,kBAAe,YACf,oBAAiB,YACjB,iBAAc,IACd,aAAU,MACR,GAAS,GAAS,EAAM,EACtB,IAAgB,GAAiB,EAAQ,EAEzC,IAAU,EAAS,IADN,MAAmB,aAAa,cAAc,aACb,IAC9C,IAAqB,GAAiB,MAAM,EAAS,gBAAgB;EACzE,SAAmC,OAAO,EAAS,aAAa,OAAO,KAAK,IAAI,EAAS,UAAU,EAAQ,KAAqC,KAAQ,IAAU,EAAQ,kBAAmB,OAAO,EAAS,sBAAsB,OAAO,KAAK,IAAI,EAAS,mBAAmB,EAAS,SAAS;EACjS;EACA;EACA;EACD,CAAC,CAAC,EACG,IAAO,MAAmB,aAAa;EAC3C;EACA;EACA,OAAO,EAAM,SAAS;EACtB,QAAQ,EAAM,SAAS;EACxB,GAAG,EAAM,WACJ,IAAe,OAAO,EAAS,mBAAmB,OAAO,KAAK,IAAI,EAAS,gBAAgB,EAAS,SAAS,GAC7G,IAAe,OAAO,EAAS,aAAa,OAAO,KAAK,IAAI,EAAS,UAAU,EAAa,KAAM,OAAO,EAAS,YAAY,OAAO,KAAK,IAAI,EAAS,SAAS,EAAa,KAG/K;EACF,GAAG;EACH,GAAG;EACJ,EACK,IAAoB,GAAiB,EAAS,wDAAwD,MAAM,EAAS,sDAAsD;EAC/K;EACA;EACA;EACA;EACD,CAAC,GAAG,EAAK;AACV,QAAO;EACL,MAAM,EAAmB,MAAM,EAAkB,MAAM,EAAc,OAAO,EAAY;EACxF,SAAS,EAAkB,SAAS,EAAmB,SAAS,EAAc,UAAU,EAAY;EACpG,OAAO,EAAmB,OAAO,EAAkB,OAAO,EAAc,QAAQ,EAAY;EAC5F,QAAQ,EAAkB,QAAQ,EAAmB,QAAQ,EAAc,SAAS,EAAY;EACjG;;AAIH,IAAM,KAAkB,IASlBE,KAAkB,OAAO,GAAW,GAAU,MAAW;CAC7D,IAAM,EACJ,eAAY,UACZ,cAAW,YACX,gBAAa,EAAE,EACf,gBACE,GACE,IAA6B,EAAS,iBAAiB,IAAW;EACtE,GAAG;EACH;EACD,EACK,IAAM,OAAO,EAAS,SAAS,OAAO,KAAK,IAAI,EAAS,MAAM,EAAS,GACzE,IAAQ,MAAM,EAAS,gBAAgB;EACzC;EACA;EACA;EACD,CAAC,EACE,EACF,MACA,SACE,GAA2B,GAAO,GAAW,EAAI,EACjD,IAAoB,GACpB,IAAa,GACX,IAAiB,EAAE;AACzB,MAAK,IAAI,IAAI,GAAG,IAAI,EAAW,QAAQ,KAAK;EAC1C,IAAM,IAAoB,EAAW;AACrC,MAAI,CAAC,EACH;EAEF,IAAM,EACJ,SACA,UACE,GACE,EACJ,GAAG,GACA,GACH,SACA,aACE,MAAM,EAAG;GACX;GACA;GACA,kBAAkB;GAClB,WAAW;GACX;GACA;GACA;GACA,UAAU;GACV,UAAU;IACR;IACA;IACD;GACF,CAAC;AAOF,EANA,IAAI,KAAwB,GAC5B,IAAI,KAAwB,GAC5B,EAAe,KAAQ;GACrB,GAAG,EAAe;GAClB,GAAG;GACJ,EACG,KAAS,IAAa,OACxB,KACI,OAAO,KAAU,aACf,EAAM,cACR,IAAoB,EAAM,YAExB,EAAM,UACR,IAAQ,EAAM,UAAU,KAAO,MAAM,EAAS,gBAAgB;GAC5D;GACA;GACA;GACD,CAAC,GAAG,EAAM,QAEZ,eAGG,GAA2B,GAAO,GAAmB,EAAI,GAE/D,IAAI;;AAGR,QAAO;EACL;EACA;EACA,WAAW;EACX;EACA;EACD;GAQGC,MAAQ,OAAY;CACxB,MAAM;CACN;CACA,MAAM,GAAG,GAAO;EACd,IAAM,EACJ,MACA,MACA,cACA,UACA,aACA,aACA,sBACE,GAEE,EACJ,YACA,aAAU,MACR,GAAS,GAAS,EAAM,IAAI,EAAE;AAClC,MAAI,KAAW,KACb,QAAO,EAAE;EAEX,IAAM,IAAgB,GAAiB,EAAQ,EACzC,IAAS;GACb;GACA;GACD,EACK,IAAO,GAAiB,EAAU,EAClC,IAAS,GAAc,EAAK,EAC5B,IAAkB,MAAM,EAAS,cAAc,EAAQ,EACvD,IAAU,MAAS,KACnB,IAAU,IAAU,QAAQ,QAC5B,IAAU,IAAU,WAAW,SAC/B,IAAa,IAAU,iBAAiB,eACxC,IAAU,EAAM,UAAU,KAAU,EAAM,UAAU,KAAQ,EAAO,KAAQ,EAAM,SAAS,IAC1F,IAAY,EAAO,KAAQ,EAAM,UAAU,IAC3C,IAAoB,OAAO,EAAS,mBAAmB,OAAO,KAAK,IAAI,EAAS,gBAAgB,EAAQ,GAC1G,IAAa,IAAoB,EAAkB,KAAc;AAGrE,GAAI,CAAC,KAAc,CAAE,OAAO,EAAS,aAAa,OAAO,KAAK,IAAI,EAAS,UAAU,EAAkB,OACrG,IAAa,EAAS,SAAS,MAAe,EAAM,SAAS;EAE/D,IAAM,IAAoB,IAAU,IAAI,IAAY,GAI9C,IAAyB,IAAa,IAAI,EAAgB,KAAU,IAAI,GACxE,IAAaC,GAAI,EAAc,IAAU,EAAuB,EAChE,IAAaA,GAAI,EAAc,IAAU,EAAuB,EAIhEC,IAAQ,GACR,IAAM,IAAa,EAAgB,KAAU,GAC7C,IAAS,IAAa,IAAI,EAAgB,KAAU,IAAI,GACxD,IAAS,GAAMA,GAAO,GAAQ,EAAI,EAMlC,IAAkB,CAAC,EAAe,SAAS,GAAa,EAAU,IAAI,QAAQ,MAAW,KAAU,EAAM,UAAU,KAAU,KAAK,IAASA,IAAQ,IAAa,KAAc,EAAgB,KAAU,IAAI,GAC5M,IAAkB,IAAkB,IAASA,IAAQ,IAASA,IAAQ,IAAS,IAAM;AAC3F,SAAO;IACJ,IAAO,EAAO,KAAQ;GACvB,MAAM;KACH,IAAO;IACR,cAAc,IAAS,IAAS;IAChC,GAAI,KAAmB,EACrB,oBACD;IACF;GACD,OAAO;GACR;;CAEJ,GA+GKC,KAAO,SAAU,GAAS;AAI9B,QAHI,MAAY,KAAK,MACnB,IAAU,EAAE,GAEP;EACL,MAAM;EACN;EACA,MAAM,GAAG,GAAO;GACd,IAAI;GACJ,IAAM,EACJ,cACA,mBACA,UACA,qBACA,aACA,gBACE,GACE,EACJ,UAAU,IAAgB,IAC1B,WAAW,IAAiB,IAC5B,oBAAoB,GACpB,sBAAmB,WACnB,+BAA4B,QAC5B,mBAAgB,IAChB,GAAG,MACD,GAAS,GAAS,EAAM;AAM5B,QAAK,IAAwB,EAAe,UAAU,QAAQ,EAAsB,gBAClF,QAAO,EAAE;GAEX,IAAM,IAAO,GAAQ,EAAU,EACzB,IAAkB,GAAY,EAAiB,EAC/C,IAAkB,GAAQ,EAAiB,KAAK,GAChD,IAAM,OAAO,EAAS,SAAS,OAAO,KAAK,IAAI,EAAS,MAAM,EAAS,SAAS,GAChF,IAAqB,MAAgC,KAAmB,CAAC,IAAgB,CAAC,GAAqB,EAAiB,CAAC,GAAG,GAAsB,EAAiB,GAC3K,IAA+B,MAA8B;AACnE,GAAI,CAAC,KAA+B,KAClC,EAAmB,KAAK,GAAG,GAA0B,GAAkB,GAAe,GAA2B,EAAI,CAAC;GAExH,IAAM,IAAa,CAAC,GAAkB,GAAG,EAAmB,EACtD,IAAW,MAAM,EAAS,eAAe,GAAO,EAAsB,EACtE,IAAY,EAAE,EAChB,IAAyC,EAAe,MAA8C,aAAc,EAAE;AAI1H,OAHI,KACF,EAAU,KAAK,EAAS,GAAM,EAE5B,GAAgB;IAClB,IAAM,IAAQ,GAAkB,GAAW,GAAO,EAAI;AACtD,MAAU,KAAK,EAAS,EAAM,KAAK,EAAS,EAAM,IAAI;;AAQxD,OANA,IAAgB,CAAC,GAAG,GAAe;IACjC;IACA;IACD,CAAC,EAGE,CAAC,EAAU,OAAM,MAAQ,KAAQ,EAAE,EAAE;IAEvC,IAAM,KAAuC,EAAe,MAA+C,SAAU,KAAK,GACpH,IAAgB,EAAW;AACjC,QAAI,MAEE,EAD4B,MAAmB,eAAc,MAAoB,GAAY,EAAc,KAI/G,EAAc,OAAM,MAAK,GAAY,EAAE,UAAU,KAAK,IAAkB,EAAE,UAAU,KAAK,IAAI,GAAK,EAEhG,QAAO;KACL,MAAM;MACJ,OAAO;MACP,WAAW;MACZ;KACD,OAAO,EACL,WAAW,GACZ;KACF;IAML,IAAI,IAA0C,EAAc,QAAO,MAAK,EAAE,UAAU,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,UAAU,KAAK,EAAE,UAAU,GAAG,CAAC,IAA6C;AAG1L,QAAI,CAAC,EACH,SAAQ,GAAR;KACE,KAAK,WACH;MAEE,IAAM,IAAsC,EAAc,QAAO,MAAK;AACpE,WAAI,GAA8B;QAChC,IAAM,IAAkB,GAAY,EAAE,UAAU;AAChD,eAAO,MAAoB,KAG3B,MAAoB;;AAEtB,cAAO;QACP,CAAC,KAAI,MAAK,CAAC,EAAE,WAAW,EAAE,UAAU,QAAO,MAAY,IAAW,EAAE,CAAC,QAAQ,GAAK,MAAa,IAAM,GAAU,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAA8C;AAChM,MAAI,MACF,IAAiB;AAEnB;;KAEJ,KAAK;AACH,UAAiB;AACjB;;AAGN,QAAI,MAAc,EAChB,QAAO,EACL,OAAO,EACL,WAAW,GACZ,EACF;;AAGL,UAAO,EAAE;;EAEZ;;AAGH,SAAS,GAAe,GAAU,GAAM;AACtC,QAAO;EACL,KAAK,EAAS,MAAM,EAAK;EACzB,OAAO,EAAS,QAAQ,EAAK;EAC7B,QAAQ,EAAS,SAAS,EAAK;EAC/B,MAAM,EAAS,OAAO,EAAK;EAC5B;;AAEH,SAAS,GAAsB,GAAU;AACvC,QAAO,GAAM,MAAK,MAAQ,EAAS,MAAS,EAAE;;AAOhD,IAAMC,KAAO,SAAU,GAAS;AAI9B,QAHI,MAAY,KAAK,MACnB,IAAU,EAAE,GAEP;EACL,MAAM;EACN;EACA,MAAM,GAAG,GAAO;GACd,IAAM,EACJ,UACA,gBACE,GACE,EACJ,cAAW,mBACX,GAAG,MACD,GAAS,GAAS,EAAM;AAC5B,WAAQ,GAAR;IACE,KAAK,mBACH;KAKE,IAAM,IAAU,GAJC,MAAM,EAAS,eAAe,GAAO;MACpD,GAAG;MACH,gBAAgB;MACjB,CAAC,EACuC,EAAM,UAAU;AACzD,YAAO,EACL,MAAM;MACJ,wBAAwB;MACxB,iBAAiB,GAAsB,EAAQ;MAChD,EACF;;IAEL,KAAK,WACH;KAKE,IAAM,IAAU,GAJC,MAAM,EAAS,eAAe,GAAO;MACpD,GAAG;MACH,aAAa;MACd,CAAC,EACuC,EAAM,SAAS;AACxD,YAAO,EACL,MAAM;MACJ,gBAAgB;MAChB,SAAS,GAAsB,EAAQ;MACxC,EACF;;IAEL,QAEI,QAAO,EAAE;;;EAIlB;GAsIG,qBAA2B,IAAI,IAAI,CAAC,QAAQ,MAAM,CAAC;AAKzD,eAAe,GAAqB,GAAO,GAAS;CAClD,IAAM,EACJ,cACA,aACA,gBACE,GACE,IAAM,OAAO,EAAS,SAAS,OAAO,KAAK,IAAI,EAAS,MAAM,EAAS,SAAS,GAChF,IAAO,GAAQ,EAAU,EACzB,IAAY,GAAa,EAAU,EACnC,IAAa,GAAY,EAAU,KAAK,KACxC,IAAgB,GAAY,IAAI,EAAK,GAAG,KAAK,GAC7C,IAAiB,KAAO,IAAa,KAAK,GAC1C,IAAW,GAAS,GAAS,EAAM,EAGrC,EACF,aACA,cACA,qBACE,OAAO,KAAa,WAAW;EACjC,UAAU;EACV,WAAW;EACX,eAAe;EAChB,GAAG;EACF,UAAU,EAAS,YAAY;EAC/B,WAAW,EAAS,aAAa;EACjC,eAAe,EAAS;EACzB;AAID,QAHI,KAAa,OAAO,KAAkB,aACxC,IAAY,MAAc,QAAQ,IAAgB,KAAK,IAElD,IAAa;EAClB,GAAG,IAAY;EACf,GAAG,IAAW;EACf,GAAG;EACF,GAAG,IAAW;EACd,GAAG,IAAY;EAChB;;AAUH,IAAMC,KAAS,SAAU,GAAS;AAIhC,QAHI,MAAY,KAAK,MACnB,IAAU,IAEL;EACL,MAAM;EACN;EACA,MAAM,GAAG,GAAO;GACd,IAA2B;GAC3B,IAAM,EACJ,MACA,MACA,cACA,sBACE,GACE,IAAa,MAAM,GAAqB,GAAO,EAAQ;AAO7D,UAHI,MAAwC,EAAe,QAAiD,cAAe,IAAwB,EAAe,UAAU,QAAQ,EAAsB,kBACjM,EAAE,GAEJ;IACL,GAAG,IAAI,EAAW;IAClB,GAAG,IAAI,EAAW;IAClB,MAAM;KACJ,GAAG;KACH;KACD;IACF;;EAEJ;GAQGC,KAAQ,SAAU,GAAS;AAI/B,QAHI,MAAY,KAAK,MACnB,IAAU,EAAE,GAEP;EACL,MAAM;EACN;EACA,MAAM,GAAG,GAAO;GACd,IAAM,EACJ,MACA,MACA,cACA,gBACE,GACE,EACJ,UAAU,IAAgB,IAC1B,WAAW,IAAiB,IAC5B,aAAU,EACR,KAAI,MAAQ;IACV,IAAI,EACF,MACA,SACE;AACJ,WAAO;KACL;KACA;KACD;MAEJ,EACD,GAAG,MACD,GAAS,GAAS,EAAM,EACtB,IAAS;IACb;IACA;IACD,EACK,IAAW,MAAM,EAAS,eAAe,GAAO,EAAsB,EACtE,IAAY,GAAY,GAAQ,EAAU,CAAC,EAC3C,IAAW,GAAgB,EAAU,EACvC,IAAgB,EAAO,IACvB,IAAiB,EAAO;AAC5B,OAAI,GAAe;IACjB,IAAM,IAAU,MAAa,MAAM,QAAQ,QACrC,IAAU,MAAa,MAAM,WAAW,SACxC,IAAM,IAAgB,EAAS,IAC/B,IAAM,IAAgB,EAAS;AACrC,QAAgB,GAAM,GAAK,GAAe,EAAI;;AAEhD,OAAI,GAAgB;IAClB,IAAM,IAAU,MAAc,MAAM,QAAQ,QACtC,IAAU,MAAc,MAAM,WAAW,SACzC,IAAM,IAAiB,EAAS,IAChC,IAAM,IAAiB,EAAS;AACtC,QAAiB,GAAM,GAAK,GAAgB,EAAI;;GAElD,IAAM,IAAgB,EAAQ,GAAG;IAC/B,GAAG;KACF,IAAW;KACX,IAAY;IACd,CAAC;AACF,UAAO;IACL,GAAG;IACH,MAAM;KACJ,GAAG,EAAc,IAAI;KACrB,GAAG,EAAc,IAAI;KACrB,SAAS;OACN,IAAW;OACX,IAAY;MACd;KACF;IACF;;EAEJ;GAKGC,KAAa,SAAU,GAAS;AAIpC,QAHI,MAAY,KAAK,MACnB,IAAU,EAAE,GAEP;EACL;EACA,GAAG,GAAO;GACR,IAAM,EACJ,MACA,MACA,cACA,UACA,sBACE,GACE,EACJ,YAAS,GACT,UAAU,IAAgB,IAC1B,WAAW,IAAiB,OAC1B,GAAS,GAAS,EAAM,EACtB,IAAS;IACb;IACA;IACD,EACK,IAAY,GAAY,EAAU,EAClC,IAAW,GAAgB,EAAU,EACvC,IAAgB,EAAO,IACvB,IAAiB,EAAO,IACtB,IAAY,GAAS,GAAQ,EAAM,EACnC,IAAiB,OAAO,KAAc,WAAW;IACrD,UAAU;IACV,WAAW;IACZ,GAAG;IACF,UAAU;IACV,WAAW;IACX,GAAG;IACJ;AACD,OAAI,GAAe;IACjB,IAAM,IAAM,MAAa,MAAM,WAAW,SACpC,IAAW,EAAM,UAAU,KAAY,EAAM,SAAS,KAAO,EAAe,UAC5E,IAAW,EAAM,UAAU,KAAY,EAAM,UAAU,KAAO,EAAe;AACnF,IAAI,IAAgB,IAClB,IAAgB,IACP,IAAgB,MACzB,IAAgB;;AAGpB,OAAI,GAAgB;IAElB,IAAM,IAAM,MAAa,MAAM,UAAU,UACnC,IAAe,GAAY,IAAI,GAAQ,EAAU,CAAC,EAClD,IAAW,EAAM,UAAU,KAAa,EAAM,SAAS,MAAQ,KAAyC,EAAe,SAAiD,MAAmB,MAAM,IAAe,IAAI,EAAe,YACnO,IAAW,EAAM,UAAU,KAAa,EAAM,UAAU,MAAQ,IAAe,IAA+B,EAAe,SAAkD,MAAe,MAAM,IAAe,EAAe,YAAY;AACpP,IAAI,IAAiB,IACnB,IAAiB,IACR,IAAiB,MAC1B,IAAiB;;AAGrB,UAAO;KACJ,IAAW;KACX,IAAY;IACd;;EAEJ;GASGC,KAAO,SAAU,GAAS;AAI9B,QAHI,MAAY,KAAK,MACnB,IAAU,EAAE,GAEP;EACL,MAAM;EACN;EACA,MAAM,GAAG,GAAO;GACd,IAAI,GAAuB;GAC3B,IAAM,EACJ,cACA,UACA,aACA,gBACE,GACE,EACJ,iBAAc,IACd,GAAG,MACD,GAAS,GAAS,EAAM,EACtB,IAAW,MAAM,EAAS,eAAe,GAAO,EAAsB,EACtE,IAAO,GAAQ,EAAU,EACzB,IAAY,GAAa,EAAU,EACnC,IAAU,GAAY,EAAU,KAAK,KACrC,EACJ,UACA,cACE,EAAM,UACN,GACA;AACJ,GAAI,MAAS,SAAS,MAAS,YAC7B,IAAa,GACb,IAAY,OAAgB,OAAO,EAAS,SAAS,OAAO,KAAK,IAAI,EAAS,MAAM,EAAS,SAAS,IAAK,UAAU,SAAS,SAAS,YAEvI,IAAY,GACZ,IAAa,MAAc,QAAQ,QAAQ;GAE7C,IAAM,IAAwB,IAAS,EAAS,MAAM,EAAS,QACzD,IAAuB,IAAQ,EAAS,OAAO,EAAS,OACxD,IAA0BP,GAAI,IAAS,EAAS,IAAa,EAAsB,EACnF,IAAyBA,GAAI,IAAQ,EAAS,IAAY,EAAqB,EAC/E,IAAU,CAAC,EAAM,eAAe,OAClC,IAAkB,GAClB,IAAiB;AAOrB,QANK,IAAwB,EAAM,eAAe,UAAU,QAAQ,EAAsB,QAAQ,MAChG,IAAiB,KAEd,IAAyB,EAAM,eAAe,UAAU,QAAQ,EAAuB,QAAQ,MAClG,IAAkB,IAEhB,KAAW,CAAC,GAAW;IACzB,IAAM,IAAOQ,GAAI,EAAS,MAAM,EAAE,EAC5B,IAAOA,GAAI,EAAS,OAAO,EAAE,EAC7B,IAAOA,GAAI,EAAS,KAAK,EAAE,EAC3B,IAAOA,GAAI,EAAS,QAAQ,EAAE;AACpC,IAAI,IACF,IAAiB,IAAQ,KAAK,MAAS,KAAK,MAAS,IAAI,IAAO,IAAOA,GAAI,EAAS,MAAM,EAAS,MAAM,IAEzG,IAAkB,IAAS,KAAK,MAAS,KAAK,MAAS,IAAI,IAAO,IAAOA,GAAI,EAAS,KAAK,EAAS,OAAO;;AAG/G,SAAM,EAAM;IACV,GAAG;IACH;IACA;IACD,CAAC;GACF,IAAM,IAAiB,MAAM,EAAS,cAAc,EAAS,SAAS;AAQtE,UAPI,MAAU,EAAe,SAAS,MAAW,EAAe,SACvD,EACL,OAAO,EACL,OAAO,IACR,EACF,GAEI,EAAE;;EAEZ;;;;AC9hCH,SAAS,KAAY;AACnB,QAAO,OAAO,SAAW;;AAE3B,SAAS,GAAY,GAAM;AAOzB,QANI,GAAO,EAAK,IACN,EAAK,YAAY,IAAI,aAAa,GAKrC;;AAET,SAAS,GAAU,GAAM;CACvB,IAAI;AACJ,SAAQ,KAAQ,SAAS,IAAsB,EAAK,kBAAkB,OAAO,KAAK,IAAI,EAAoB,gBAAgB;;AAE5H,SAAS,GAAmB,GAAM;AAEhC,UAAgB,GAAO,EAAK,GAAG,EAAK,gBAAgB,EAAK,aAAa,OAAO,WAAkC;;AAEjH,SAAS,GAAO,GAAO;AAIrB,QAHK,IAAW,GAGT,aAAiB,QAAQ,aAAiB,GAAU,EAAM,CAAC,OAFzD;;AAIX,SAAS,GAAU,GAAO;AAIxB,QAHK,IAAW,GAGT,aAAiB,WAAW,aAAiB,GAAU,EAAM,CAAC,UAF5D;;AAIX,SAAS,GAAc,GAAO;AAI5B,QAHK,IAAW,GAGT,aAAiB,eAAe,aAAiB,GAAU,EAAM,CAAC,cAFhE;;AAIX,SAAS,GAAa,GAAO;AAI3B,QAHI,CAAC,IAAW,IAAI,OAAO,aAAe,MACjC,KAEF,aAAiB,cAAc,aAAiB,GAAU,EAAM,CAAC;;AAE1E,SAAS,GAAkB,GAAS;CAClC,IAAM,EACJ,aACA,cACA,cACA,eACEC,GAAiB,EAAQ;AAC7B,QAAO,kCAAkC,KAAK,IAAW,IAAY,EAAU,IAAI,MAAY,YAAY,MAAY;;AAEzH,SAAS,GAAe,GAAS;AAC/B,QAAO,kBAAkB,KAAK,GAAY,EAAQ,CAAC;;AAErD,SAAS,GAAW,GAAS;AAC3B,KAAI;AACF,MAAI,EAAQ,QAAQ,gBAAgB,CAClC,QAAO;SAEE;AAGb,KAAI;AACF,SAAO,EAAQ,QAAQ,SAAS;SACrB;AACX,SAAO;;;AAGX,IAAM,KAAe,uDACf,KAAY,+BACZ,MAAY,MAAS,CAAC,CAAC,KAAS,MAAU,QAC5C;AACJ,SAAS,GAAkB,GAAc;CACvC,IAAM,IAAM,GAAU,EAAa,GAAGA,GAAiB,EAAa,GAAG;AAIvE,QAAO,GAAU,EAAI,UAAU,IAAI,GAAU,EAAI,UAAU,IAAI,GAAU,EAAI,MAAM,IAAI,GAAU,EAAI,OAAO,IAAI,GAAU,EAAI,YAAY,IAAI,CAAC,IAAU,KAAK,GAAU,EAAI,eAAe,IAAI,GAAU,EAAI,OAAO,KAAK,GAAa,KAAK,EAAI,cAAc,GAAG,IAAI,GAAU,KAAK,EAAI,WAAW,GAAG;;AAEvS,SAAS,GAAmB,GAAS;CACnC,IAAI,IAAc,GAAc,EAAQ;AACxC,QAAO,GAAc,EAAY,IAAI,CAAC,GAAsB,EAAY,GAAE;AACxE,MAAI,GAAkB,EAAY,CAChC,QAAO;MACE,GAAW,EAAY,CAChC,QAAO;AAET,MAAc,GAAc,EAAY;;AAE1C,QAAO;;AAET,SAAS,KAAW;AAIlB,QAHA,AACE,OAAgB,OAAO,MAAQ,OAAe,IAAI,YAAY,IAAI,SAAS,2BAA2B,OAAO,EAExG;;AAET,SAAS,GAAsB,GAAM;AACnC,QAAO,0BAA0B,KAAK,GAAY,EAAK,CAAC;;AAE1D,SAASA,GAAiB,GAAS;AACjC,QAAO,GAAU,EAAQ,CAAC,iBAAiB,EAAQ;;AAErD,SAAS,GAAc,GAAS;AAO9B,QANI,GAAU,EAAQ,GACb;EACL,YAAY,EAAQ;EACpB,WAAW,EAAQ;EACpB,GAEI;EACL,YAAY,EAAQ;EACpB,WAAW,EAAQ;EACpB;;AAEH,SAAS,GAAc,GAAM;AAC3B,KAAI,GAAY,EAAK,KAAK,OACxB,QAAO;CAET,IAAM,IAEN,EAAK,gBAEL,EAAK,cAEL,GAAa,EAAK,IAAI,EAAK,QAE3B,GAAmB,EAAK;AACxB,QAAO,GAAa,EAAO,GAAG,EAAO,OAAO;;AAE9C,SAAS,GAA2B,GAAM;CACxC,IAAM,IAAa,GAAc,EAAK;AAOtC,QANI,GAAsB,EAAW,GAC5B,EAAK,gBAAgB,EAAK,cAAc,OAAO,EAAK,OAEzD,GAAc,EAAW,IAAI,GAAkB,EAAW,GACrD,IAEF,GAA2B,EAAW;;AAE/C,SAAS,GAAqB,GAAM,GAAM,GAAiB;AAKzD,CAHI,MAAS,KAAK,MAChB,IAAO,EAAE,GAEP,MAAoB,KAAK,MAC3B,IAAkB;CAEpB,IAAM,IAAqB,GAA2B,EAAK,EACrD,IAAS,MAAgD,EAAK,eAAuD,MACrH,IAAM,GAAU,EAAmB;AACzC,KAAI,GAAQ;EACV,IAAM,IAAe,GAAgB,EAAI;AACzC,SAAO,EAAK,OAAO,GAAK,EAAI,kBAAkB,EAAE,EAAE,GAAkB,EAAmB,GAAG,IAAqB,EAAE,EAAE,KAAgB,IAAkB,GAAqB,EAAa,GAAG,EAAE,CAAC;OAE7L,QAAO,EAAK,OAAO,GAAoB,GAAqB,GAAoB,EAAE,EAAE,EAAgB,CAAC;;AAGzG,SAAS,GAAgB,GAAK;AAC5B,QAAO,EAAI,UAAU,OAAO,eAAe,EAAI,OAAO,GAAG,EAAI,eAAe;;;;AC5J9E,SAAS,GAAiB,GAAS;CACjC,IAAM,IAAM,GAAmB,EAAQ,EAGnC,IAAQ,WAAW,EAAI,MAAM,IAAI,GACjC,IAAS,WAAW,EAAI,OAAO,IAAI,GACjC,IAAY,GAAc,EAAQ,EAClC,IAAc,IAAY,EAAQ,cAAc,GAChD,IAAe,IAAY,EAAQ,eAAe,GAClD,IAAiB,GAAM,EAAM,KAAK,KAAe,GAAM,EAAO,KAAK;AAKzE,QAJI,MACF,IAAQ,GACR,IAAS,IAEJ;EACL;EACA;EACA,GAAG;EACJ;;AAGH,SAAS,GAAc,GAAS;AAC9B,QAAQ,GAAU,EAAQ,GAA4B,IAAzB,EAAQ;;AAGvC,SAAS,GAAS,GAAS;CACzB,IAAM,IAAa,GAAc,EAAQ;AACzC,KAAI,CAAC,GAAc,EAAW,CAC5B,QAAO,GAAa,EAAE;CAExB,IAAM,IAAO,EAAW,uBAAuB,EACzC,EACJ,UACA,WACA,SACE,GAAiB,EAAW,EAC5B,KAAK,IAAI,GAAM,EAAK,MAAM,GAAG,EAAK,SAAS,GAC3C,KAAK,IAAI,GAAM,EAAK,OAAO,GAAG,EAAK,UAAU;AAUjD,SANI,CAAC,KAAK,CAAC,OAAO,SAAS,EAAE,MAC3B,IAAI,KAEF,CAAC,KAAK,CAAC,OAAO,SAAS,EAAE,MAC3B,IAAI,IAEC;EACL;EACA;EACD;;AAGH,IAAM,KAAyB,mBAAa,EAAE;AAC9C,SAAS,GAAiB,GAAS;CACjC,IAAM,IAAM,GAAU,EAAQ;AAI9B,QAHI,CAAC,IAAU,IAAI,CAAC,EAAI,iBACf,KAEF;EACL,GAAG,EAAI,eAAe;EACtB,GAAG,EAAI,eAAe;EACvB;;AAEH,SAAS,GAAuB,GAAS,GAAS,GAAsB;AAOtE,QANI,MAAY,KAAK,MACnB,IAAU,KAER,CAAC,KAAwB,KAAW,MAAyB,GAAU,EAAQ,GAC1E,KAEF;;AAGT,SAAS,GAAsB,GAAS,GAAc,GAAiB,GAAc;AAInF,CAHI,MAAiB,KAAK,MACxB,IAAe,KAEb,MAAoB,KAAK,MAC3B,IAAkB;CAEpB,IAAM,IAAa,EAAQ,uBAAuB,EAC5C,IAAa,GAAc,EAAQ,EACrC,IAAQ,GAAa,EAAE;AAC3B,CAAI,MACE,IACE,GAAU,EAAa,KACzB,IAAQ,GAAS,EAAa,IAGhC,IAAQ,GAAS,EAAQ;CAG7B,IAAM,IAAgB,GAAuB,GAAY,GAAiB,EAAa,GAAG,GAAiB,EAAW,GAAG,GAAa,EAAE,EACpI,KAAK,EAAW,OAAO,EAAc,KAAK,EAAM,GAChD,KAAK,EAAW,MAAM,EAAc,KAAK,EAAM,GAC/C,IAAQ,EAAW,QAAQ,EAAM,GACjC,IAAS,EAAW,SAAS,EAAM;AACvC,KAAI,GAAY;EACd,IAAM,IAAM,GAAU,EAAW,EAC3B,IAAY,KAAgB,GAAU,EAAa,GAAG,GAAU,EAAa,GAAG,GAClF,IAAa,GACb,IAAgB,GAAgB,EAAW;AAC/C,SAAO,KAAiB,KAAgB,MAAc,IAAY;GAChE,IAAM,IAAc,GAAS,EAAc,EACrC,IAAa,EAAc,uBAAuB,EAClD,IAAM,GAAmB,EAAc,EACvC,IAAO,EAAW,QAAQ,EAAc,aAAa,WAAW,EAAI,YAAY,IAAI,EAAY,GAChG,IAAM,EAAW,OAAO,EAAc,YAAY,WAAW,EAAI,WAAW,IAAI,EAAY;AAQlG,GAPA,KAAK,EAAY,GACjB,KAAK,EAAY,GACjB,KAAS,EAAY,GACrB,KAAU,EAAY,GACtB,KAAK,GACL,KAAK,GACL,IAAa,GAAU,EAAc,EACrC,IAAgB,GAAgB,EAAW;;;AAG/C,QAAO,GAAiB;EACtB;EACA;EACA;EACA;EACD,CAAC;;AAKJ,SAAS,GAAoB,GAAS,GAAM;CAC1C,IAAM,IAAa,GAAc,EAAQ,CAAC;AAI1C,QAHK,IAGE,EAAK,OAAO,IAFV,GAAsB,GAAmB,EAAQ,CAAC,CAAC,OAAO;;AAKrE,SAAS,GAAc,GAAiB,GAAQ;CAC9C,IAAM,IAAW,EAAgB,uBAAuB;AAGxD,QAAO;EACL,GAHQ,EAAS,OAAO,EAAO,aAAa,GAAoB,GAAiB,EAAS;EAI1F,GAHQ,EAAS,MAAM,EAAO;EAI/B;;AAGH,SAAS,GAAsD,GAAM;CACnE,IAAI,EACF,aACA,SACA,iBACA,gBACE,GACE,IAAU,MAAa,SACvB,IAAkB,GAAmB,EAAa,EAClD,IAAW,IAAW,GAAW,EAAS,SAAS,GAAG;AAC5D,KAAI,MAAiB,KAAmB,KAAY,EAClD,QAAO;CAET,IAAI,IAAS;EACX,YAAY;EACZ,WAAW;EACZ,EACG,IAAQ,GAAa,EAAE,EACrB,IAAU,GAAa,EAAE,EACzB,IAA0B,GAAc,EAAa;AAC3D,MAAI,KAA2B,CAAC,KAA2B,CAAC,QACtD,GAAY,EAAa,KAAK,UAAU,GAAkB,EAAgB,MAC5E,IAAS,GAAc,EAAa,GAElC,IAAyB;EAC3B,IAAM,IAAa,GAAsB,EAAa;AAGtD,EAFA,IAAQ,GAAS,EAAa,EAC9B,EAAQ,IAAI,EAAW,IAAI,EAAa,YACxC,EAAQ,IAAI,EAAW,IAAI,EAAa;;CAG5C,IAAM,IAAa,KAAmB,CAAC,KAA2B,CAAC,IAAU,GAAc,GAAiB,EAAO,GAAG,GAAa,EAAE;AACrI,QAAO;EACL,OAAO,EAAK,QAAQ,EAAM;EAC1B,QAAQ,EAAK,SAAS,EAAM;EAC5B,GAAG,EAAK,IAAI,EAAM,IAAI,EAAO,aAAa,EAAM,IAAI,EAAQ,IAAI,EAAW;EAC3E,GAAG,EAAK,IAAI,EAAM,IAAI,EAAO,YAAY,EAAM,IAAI,EAAQ,IAAI,EAAW;EAC3E;;AAGH,SAAS,GAAe,GAAS;AAC/B,QAAO,MAAM,KAAK,EAAQ,gBAAgB,CAAC;;AAK7C,SAAS,GAAgB,GAAS;CAChC,IAAM,IAAO,GAAmB,EAAQ,EAClC,IAAS,GAAc,EAAQ,EAC/B,IAAO,EAAQ,cAAc,MAC7B,IAAQC,GAAI,EAAK,aAAa,EAAK,aAAa,EAAK,aAAa,EAAK,YAAY,EACnF,IAASA,GAAI,EAAK,cAAc,EAAK,cAAc,EAAK,cAAc,EAAK,aAAa,EAC1F,IAAI,CAAC,EAAO,aAAa,GAAoB,EAAQ,EACnD,IAAI,CAAC,EAAO;AAIlB,QAHI,GAAmB,EAAK,CAAC,cAAc,UACzC,KAAKA,GAAI,EAAK,aAAa,EAAK,YAAY,GAAG,IAE1C;EACL;EACA;EACA;EACA;EACD;;AAMH,IAAM,KAAgB;AACtB,SAAS,GAAgB,GAAS,GAAU;CAC1C,IAAM,IAAM,GAAU,EAAQ,EACxB,IAAO,GAAmB,EAAQ,EAClC,IAAiB,EAAI,gBACvB,IAAQ,EAAK,aACb,IAAS,EAAK,cACd,IAAI,GACJ,IAAI;AACR,KAAI,GAAgB;AAElB,EADA,IAAQ,EAAe,OACvB,IAAS,EAAe;EACxB,IAAM,IAAsB,IAAU;AACtC,GAAI,CAAC,KAAuB,KAAuB,MAAa,aAC9D,IAAI,EAAe,YACnB,IAAI,EAAe;;CAGvB,IAAM,IAAmB,GAAoB,EAAK;AAIlD,KAAI,KAAoB,GAAG;EACzB,IAAM,IAAM,EAAK,eACX,IAAO,EAAI,MACX,IAAa,iBAAiB,EAAK,EACnC,IAAmB,EAAI,eAAe,gBAAe,WAAW,EAAW,WAAW,GAAG,WAAW,EAAW,YAAY,IAAQ,GACnI,IAA+B,KAAK,IAAI,EAAK,cAAc,EAAK,cAAc,EAAiB;AACrG,EAAI,KAAgC,OAClC,KAAS;QAEF,KAAoB,OAG7B,KAAS;AAEX,QAAO;EACL;EACA;EACA;EACA;EACD;;AAIH,SAAS,GAA2B,GAAS,GAAU;CACrD,IAAM,IAAa,GAAsB,GAAS,IAAM,MAAa,QAAQ,EACvE,IAAM,EAAW,MAAM,EAAQ,WAC/B,IAAO,EAAW,OAAO,EAAQ,YACjC,IAAQ,GAAc,EAAQ,GAAG,GAAS,EAAQ,GAAG,GAAa,EAAE;AAK1E,QAAO;EACL,OALY,EAAQ,cAAc,EAAM;EAMxC,QALa,EAAQ,eAAe,EAAM;EAM1C,GALQ,IAAO,EAAM;EAMrB,GALQ,IAAM,EAAM;EAMrB;;AAEH,SAAS,GAAkC,GAAS,GAAkB,GAAU;CAC9E,IAAI;AACJ,KAAI,MAAqB,WACvB,KAAO,GAAgB,GAAS,EAAS;UAChC,MAAqB,WAC9B,KAAO,GAAgB,GAAmB,EAAQ,CAAC;UAC1C,GAAU,EAAiB,CACpC,KAAO,GAA2B,GAAkB,EAAS;MACxD;EACL,IAAM,IAAgB,GAAiB,EAAQ;AAC/C,MAAO;GACL,GAAG,EAAiB,IAAI,EAAc;GACtC,GAAG,EAAiB,IAAI,EAAc;GACtC,OAAO,EAAiB;GACxB,QAAQ,EAAiB;GAC1B;;AAEH,QAAO,GAAiB,EAAK;;AAE/B,SAAS,GAAyB,GAAS,GAAU;CACnD,IAAM,IAAa,GAAc,EAAQ;AAIzC,QAHI,MAAe,KAAY,CAAC,GAAU,EAAW,IAAI,GAAsB,EAAW,GACjF,KAEF,GAAmB,EAAW,CAAC,aAAa,WAAW,GAAyB,GAAY,EAAS;;AAM9G,SAAS,GAA4B,GAAS,GAAO;CACnD,IAAM,IAAe,EAAM,IAAI,EAAQ;AACvC,KAAI,EACF,QAAO;CAET,IAAI,IAAS,GAAqB,GAAS,EAAE,EAAE,GAAM,CAAC,QAAO,MAAM,GAAU,EAAG,IAAI,GAAY,EAAG,KAAK,OAAO,EAC3G,IAAsC,MACpC,IAAiB,GAAmB,EAAQ,CAAC,aAAa,SAC5D,IAAc,IAAiB,GAAc,EAAQ,GAAG;AAG5D,QAAO,GAAU,EAAY,IAAI,CAAC,GAAsB,EAAY,GAAE;EACpE,IAAM,IAAgB,GAAmB,EAAY,EAC/C,IAA0B,GAAkB,EAAY;AAY9D,EAXI,CAAC,KAA2B,EAAc,aAAa,YACzD,IAAsC,QAEV,IAAiB,CAAC,KAA2B,CAAC,IAAsC,CAAC,KAA2B,EAAc,aAAa,YAAc,MAAwC,EAAoC,aAAa,cAAc,EAAoC,aAAa,YAAY,GAAkB,EAAY,IAAI,CAAC,KAA2B,GAAyB,GAAS,EAAY,IAGrc,IAAS,EAAO,QAAO,MAAY,MAAa,EAAY,GAG5D,IAAsC,GAExC,IAAc,GAAc,EAAY;;AAG1C,QADA,EAAM,IAAI,GAAS,EAAO,EACnB;;AAKT,SAAS,GAAgB,GAAM;CAC7B,IAAI,EACF,YACA,aACA,iBACA,gBACE,GAEE,IAAoB,CAAC,GADM,MAAa,sBAAsB,GAAW,EAAQ,GAAG,EAAE,GAAG,GAA4B,GAAS,KAAK,GAAG,GAAG,EAAE,CAAC,OAAO,EAAS,EAC1G,EAAa,EAC/D,IAAY,GAAkC,GAAS,EAAkB,IAAI,EAAS,EACxF,IAAM,EAAU,KAChB,IAAQ,EAAU,OAClB,IAAS,EAAU,QACnB,IAAO,EAAU;AACrB,MAAK,IAAI,IAAI,GAAG,IAAI,EAAkB,QAAQ,KAAK;EACjD,IAAM,IAAO,GAAkC,GAAS,EAAkB,IAAI,EAAS;AAIvF,EAHA,IAAMA,GAAI,EAAK,KAAK,EAAI,EACxB,IAAQC,GAAI,EAAK,OAAO,EAAM,EAC9B,IAASA,GAAI,EAAK,QAAQ,EAAO,EACjC,IAAOD,GAAI,EAAK,MAAM,EAAK;;AAE7B,QAAO;EACL,OAAO,IAAQ;EACf,QAAQ,IAAS;EACjB,GAAG;EACH,GAAG;EACJ;;AAGH,SAAS,GAAc,GAAS;CAC9B,IAAM,EACJ,UACA,cACE,GAAiB,EAAQ;AAC7B,QAAO;EACL;EACA;EACD;;AAGH,SAAS,GAA8B,GAAS,GAAc,GAAU;CACtE,IAAM,IAA0B,GAAc,EAAa,EACrD,IAAkB,GAAmB,EAAa,EAClD,IAAU,MAAa,SACvB,IAAO,GAAsB,GAAS,IAAM,GAAS,EAAa,EACpE,IAAS;EACX,YAAY;EACZ,WAAW;EACZ,EACK,IAAU,GAAa,EAAE;CAI/B,SAAS,IAA4B;AACnC,IAAQ,IAAI,GAAoB,EAAgB;;AAElD,KAAI,KAA2B,CAAC,KAA2B,CAAC,EAI1D,MAHI,GAAY,EAAa,KAAK,UAAU,GAAkB,EAAgB,MAC5E,IAAS,GAAc,EAAa,GAElC,GAAyB;EAC3B,IAAM,IAAa,GAAsB,GAAc,IAAM,GAAS,EAAa;AAEnF,EADA,EAAQ,IAAI,EAAW,IAAI,EAAa,YACxC,EAAQ,IAAI,EAAW,IAAI,EAAa;QAC/B,KACT,GAA2B;AAG/B,CAAI,KAAW,CAAC,KAA2B,KACzC,GAA2B;CAE7B,IAAM,IAAa,KAAmB,CAAC,KAA2B,CAAC,IAAU,GAAc,GAAiB,EAAO,GAAG,GAAa,EAAE;AAGrI,QAAO;EACL,GAHQ,EAAK,OAAO,EAAO,aAAa,EAAQ,IAAI,EAAW;EAI/D,GAHQ,EAAK,MAAM,EAAO,YAAY,EAAQ,IAAI,EAAW;EAI7D,OAAO,EAAK;EACZ,QAAQ,EAAK;EACd;;AAGH,SAAS,GAAmB,GAAS;AACnC,QAAO,GAAmB,EAAQ,CAAC,aAAa;;AAGlD,SAAS,GAAoB,GAAS,GAAU;AAC9C,KAAI,CAAC,GAAc,EAAQ,IAAI,GAAmB,EAAQ,CAAC,aAAa,QACtE,QAAO;AAET,KAAI,EACF,QAAO,EAAS,EAAQ;CAE1B,IAAI,IAAkB,EAAQ;AAS9B,QAHI,GAAmB,EAAQ,KAAK,MAClC,IAAkB,EAAgB,cAAc,OAE3C;;AAKT,SAAS,GAAgB,GAAS,GAAU;CAC1C,IAAM,IAAM,GAAU,EAAQ;AAC9B,KAAI,GAAW,EAAQ,CACrB,QAAO;AAET,KAAI,CAAC,GAAc,EAAQ,EAAE;EAC3B,IAAI,IAAkB,GAAc,EAAQ;AAC5C,SAAO,KAAmB,CAAC,GAAsB,EAAgB,GAAE;AACjE,OAAI,GAAU,EAAgB,IAAI,CAAC,GAAmB,EAAgB,CACpE,QAAO;AAET,OAAkB,GAAc,EAAgB;;AAElD,SAAO;;CAET,IAAI,IAAe,GAAoB,GAAS,EAAS;AACzD,QAAO,KAAgB,GAAe,EAAa,IAAI,GAAmB,EAAa,EACrF,KAAe,GAAoB,GAAc,EAAS;AAK5D,QAHI,KAAgB,GAAsB,EAAa,IAAI,GAAmB,EAAa,IAAI,CAAC,GAAkB,EAAa,GACtH,IAEF,KAAgB,GAAmB,EAAQ,IAAI;;AAGxD,IAAM,KAAkB,eAAgB,GAAM;CAC5C,IAAM,IAAoB,KAAK,mBAAmB,IAC5C,IAAkB,KAAK,eACvB,IAAqB,MAAM,EAAgB,EAAK,SAAS;AAC/D,QAAO;EACL,WAAW,GAA8B,EAAK,WAAW,MAAM,EAAkB,EAAK,SAAS,EAAE,EAAK,SAAS;EAC/G,UAAU;GACR,GAAG;GACH,GAAG;GACH,OAAO,EAAmB;GAC1B,QAAQ,EAAmB;GAC5B;EACF;;AAGH,SAAS,GAAM,GAAS;AACtB,QAAO,GAAmB,EAAQ,CAAC,cAAc;;AAGnD,IAAM,KAAW;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAS,GAAc,GAAG,GAAG;AAC3B,QAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE;;AAI7E,SAAS,GAAY,GAAS,GAAQ;CACpC,IAAI,IAAK,MACL,GACE,IAAO,GAAmB,EAAQ;CACxC,SAAS,IAAU;EACjB,IAAI;AAGJ,EAFA,aAAa,EAAU,GACtB,IAAM,MAAO,QAAQ,EAAI,YAAY,EACtC,IAAK;;CAEP,SAAS,EAAQ,GAAM,GAAW;AAOhC,EANI,MAAS,KAAK,MAChB,IAAO,KAEL,MAAc,KAAK,MACrB,IAAY,IAEd,GAAS;EACT,IAAM,IAA2B,EAAQ,uBAAuB,EAC1D,EACJ,SACA,QACA,UACA,cACE;AAIJ,MAHK,KACH,GAAQ,EAEN,CAAC,KAAS,CAAC,EACb;EAEF,IAAM,IAAW,GAAM,EAAI,EACrB,IAAa,GAAM,EAAK,eAAe,IAAO,GAAO,EACrD,IAAc,GAAM,EAAK,gBAAgB,IAAM,GAAQ,EACvD,IAAY,GAAM,EAAK,EAEvB,IAAU;GACd,YAFiB,CAAC,IAAW,QAAQ,CAAC,IAAa,QAAQ,CAAC,IAAc,QAAQ,CAAC,IAAY;GAG/F,WAAWA,GAAI,GAAGC,GAAI,GAAG,EAAU,CAAC,IAAI;GACzC,EACG,IAAgB;EACpB,SAAS,EAAc,GAAS;GAC9B,IAAM,IAAQ,EAAQ,GAAG;AACzB,OAAI,MAAU,GAAW;AACvB,QAAI,CAAC,EACH,QAAO,GAAS;AAElB,IAAK,IAOH,EAAQ,IAAO,EAAM,GAJrB,IAAY,iBAAiB;AAC3B,OAAQ,IAAO,KAAK;OACnB,IAAK;;AAeZ,GAVI,MAAU,KAAK,CAAC,GAAc,GAA0B,EAAQ,uBAAuB,CAAC,IAQ1F,GAAS,EAEX,IAAgB;;AAKlB,MAAI;AACF,OAAK,IAAI,qBAAqB,GAAe;IAC3C,GAAG;IAEH,MAAM,EAAK;IACZ,CAAC;UACS;AACX,OAAK,IAAI,qBAAqB,GAAe,EAAQ;;AAEvD,IAAG,QAAQ,EAAQ;;AAGrB,QADA,EAAQ,GAAK,EACN;;AAWT,SAAS,GAAW,GAAW,GAAU,GAAQ,GAAS;AACxD,CAAI,MAAY,KAAK,MACnB,IAAU,EAAE;CAEd,IAAM,EACJ,oBAAiB,IACjB,oBAAiB,IACjB,mBAAgB,OAAO,kBAAmB,YAC1C,iBAAc,OAAO,wBAAyB,YAC9C,oBAAiB,OACf,GACE,IAAc,GAAc,EAAU,EACtC,IAAY,KAAkB,IAAiB,CAAC,GAAI,IAAc,GAAqB,EAAY,GAAG,EAAE,EAAG,GAAI,IAAW,GAAqB,EAAS,GAAG,EAAE,CAAE,GAAG,EAAE;AAC1K,GAAU,SAAQ,MAAY;AAI5B,EAHA,KAAkB,EAAS,iBAAiB,UAAU,GAAQ,EAC5D,SAAS,IACV,CAAC,EACF,KAAkB,EAAS,iBAAiB,UAAU,EAAO;GAC7D;CACF,IAAM,IAAY,KAAe,IAAc,GAAY,GAAa,EAAO,GAAG,MAC9E,IAAiB,IACjB,IAAiB;AACrB,CAAI,MACF,IAAiB,IAAI,gBAAe,MAAQ;EAC1C,IAAI,CAAC,KAAc;AAWnB,EAVI,KAAc,EAAW,WAAW,KAAe,KAAkB,MAGvE,EAAe,UAAU,EAAS,EAClC,qBAAqB,EAAe,EACpC,IAAiB,4BAA4B;GAC3C,IAAI;AACJ,IAAC,IAAkB,MAAmB,QAAQ,EAAgB,QAAQ,EAAS;IAC/E,GAEJ,GAAQ;GACR,EACE,KAAe,CAAC,KAClB,EAAe,QAAQ,EAAY,EAEjC,KACF,EAAe,QAAQ,EAAS;CAGpC,IAAI,GACA,IAAc,IAAiB,GAAsB,EAAU,GAAG;AACtE,CAAI,KACF,GAAW;CAEb,SAAS,IAAY;EACnB,IAAM,IAAc,GAAsB,EAAU;AAKpD,EAJI,KAAe,CAAC,GAAc,GAAa,EAAY,IACzD,GAAQ,EAEV,IAAc,GACd,IAAU,sBAAsB,EAAU;;AAG5C,QADA,GAAQ,QACK;EACX,IAAI;AAQJ,EAPA,EAAU,SAAQ,MAAY;AAE5B,GADA,KAAkB,EAAS,oBAAoB,UAAU,EAAO,EAChE,KAAkB,EAAS,oBAAoB,UAAU,EAAO;IAChE,EACF,KAAgC,GAC/B,IAAmB,MAAmB,QAAQ,EAAiB,YAAY,EAC5E,IAAiB,MACb,KACF,qBAAqB,EAAQ;;;AAsBnC,IAAMC,KAASC,IAeTC,KAAQC,IAQRC,KAAOC,IAQPC,KAAOC,IAOPC,KAAOC,IAOPC,KAAQC,IAYRC,KAAaC,IAMb,MAAmB,GAAW,GAAU,MAAY;CAIxD,IAAM,oBAAQ,IAAI,KAAK,EACjB,IAAgB;EACpB;EACA,GAAG;EACJ,EACK,IAAoB;EACxB,GAAG,EAAc;EACjB,IAAI;EACL;AACD,QAAO,GAAkB,GAAW,GAAU;EAC5C,GAAG;EACH,UAAU;EACX,CAAC;GChwBA,KAHW,OAAO,WAAa,MAGZ,IADZ,WAAgB;AAK3B,SAAS,GAAU,GAAG,GAAG;AACvB,KAAI,MAAM,EACR,QAAO;AAET,KAAI,OAAO,KAAM,OAAO,EACtB,QAAO;AAET,KAAI,OAAO,KAAM,cAAc,EAAE,UAAU,KAAK,EAAE,UAAU,CAC1D,QAAO;CAET,IAAI,GACA,GACA;AACJ,KAAI,KAAK,KAAK,OAAO,KAAM,UAAU;AACnC,MAAI,MAAM,QAAQ,EAAE,EAAE;AAEpB,OADA,IAAS,EAAE,QACP,MAAW,EAAE,OAAQ,QAAO;AAChC,QAAK,IAAI,GAAQ,QAAQ,GACvB,KAAI,CAAC,GAAU,EAAE,IAAI,EAAE,GAAG,CACxB,QAAO;AAGX,UAAO;;AAIT,MAFA,IAAO,OAAO,KAAK,EAAE,EACrB,IAAS,EAAK,QACV,MAAW,OAAO,KAAK,EAAE,CAAC,OAC5B,QAAO;AAET,OAAK,IAAI,GAAQ,QAAQ,GACvB,KAAI,CAAC,EAAE,CAAC,eAAe,KAAK,GAAG,EAAK,GAAG,CACrC,QAAO;AAGX,OAAK,IAAI,GAAQ,QAAQ,IAAI;GAC3B,IAAM,IAAM,EAAK;AACb,eAAQ,YAAY,EAAE,aAGtB,CAAC,GAAU,EAAE,IAAM,EAAE,GAAK,CAC5B,QAAO;;AAGX,SAAO;;AAET,QAAO,MAAM,KAAK,MAAM;;AAG1B,SAAS,GAAO,GAAS;AAKvB,QAJI,OAAO,SAAW,MACb,KAEG,EAAQ,cAAc,eAAe,QACtC,oBAAoB;;AAGjC,SAAS,GAAW,GAAS,GAAO;CAClC,IAAM,IAAM,GAAO,EAAQ;AAC3B,QAAO,KAAK,MAAM,IAAQ,EAAI,GAAG;;AAGnC,SAAS,GAAa,GAAO;CAC3B,IAAM,IAAMC,EAAM,OAAO,EAAM;AAI/B,QAHA,SAAY;AACV,IAAI,UAAU;GACd,EACK;;AAOT,SAAS,GAAY,GAAS;AAC5B,CAAI,MAAY,KAAK,MACnB,IAAU,EAAE;CAEd,IAAM,EACJ,eAAY,UACZ,cAAW,YACX,gBAAa,EAAE,EACf,aACA,UAAU,EACR,WAAW,GACX,UAAU,MACR,EAAE,EACN,eAAY,IACZ,yBACA,YACE,GACE,CAAC,GAAM,KAAWA,EAAM,SAAS;EACrC,GAAG;EACH,GAAG;EACH;EACA;EACA,gBAAgB,EAAE;EAClB,cAAc;EACf,CAAC,EACI,CAAC,GAAkB,KAAuBA,EAAM,SAAS,EAAW;AAC1E,CAAK,GAAU,GAAkB,EAAW,IAC1C,EAAoB,EAAW;CAEjC,IAAM,CAAC,GAAY,KAAiBA,EAAM,SAAS,KAAK,EAClD,CAAC,GAAW,KAAgBA,EAAM,SAAS,KAAK,EAChD,IAAeA,EAAM,aAAY,MAAQ;AAC7C,EAAI,MAAS,EAAa,YACxB,EAAa,UAAU,GACvB,EAAc,EAAK;IAEpB,EAAE,CAAC,EACA,IAAcA,EAAM,aAAY,MAAQ;AAC5C,EAAI,MAAS,EAAY,YACvB,EAAY,UAAU,GACtB,EAAa,EAAK;IAEnB,EAAE,CAAC,EACA,IAAc,KAAqB,GACnC,IAAa,KAAoB,GACjC,IAAeA,EAAM,OAAO,KAAK,EACjC,IAAcA,EAAM,OAAO,KAAK,EAChC,IAAUA,EAAM,OAAO,EAAK,EAC5B,IAA0B,KAAwB,MAClD,IAA0B,GAAa,EAAqB,EAC5D,IAAc,GAAa,EAAS,EACpC,IAAU,GAAa,EAAK,EAC5B,IAASA,EAAM,kBAAkB;AACrC,MAAI,CAAC,EAAa,WAAW,CAAC,EAAY,QACxC;EAEF,IAAM,IAAS;GACb;GACA;GACA,YAAY;GACb;AAID,EAHI,EAAY,YACd,EAAO,WAAW,EAAY,UAEhC,GAAgB,EAAa,SAAS,EAAY,SAAS,EAAO,CAAC,MAAK,MAAQ;GAC9E,IAAM,IAAW;IACf,GAAG;IAKH,cAAc,EAAQ,YAAY;IACnC;AACD,GAAI,EAAa,WAAW,CAAC,GAAU,EAAQ,SAAS,EAAS,KAC/D,EAAQ,UAAU,GAClB,EAAS,gBAAgB;AACvB,MAAQ,EAAS;KACjB;IAEJ;IACD;EAAC;EAAkB;EAAW;EAAU;EAAa;EAAQ,CAAC;AACjE,UAAY;AACV,EAAI,MAAS,MAAS,EAAQ,QAAQ,iBACpC,EAAQ,QAAQ,eAAe,IAC/B,GAAQ,OAAS;GACf,GAAG;GACH,cAAc;GACf,EAAE;IAEJ,CAAC,EAAK,CAAC;CACV,IAAM,IAAeA,EAAM,OAAO,GAAM;AAOxC,CANA,UACE,EAAa,UAAU,UACV;AACX,IAAa,UAAU;KAExB,EAAE,CAAC,EACN,SAAY;AAGV,MAFI,MAAa,EAAa,UAAU,IACpC,MAAY,EAAY,UAAU,IAClC,KAAe,GAAY;AAC7B,OAAI,EAAwB,QAC1B,QAAO,EAAwB,QAAQ,GAAa,GAAY,EAAO;AAEzE,MAAQ;;IAET;EAAC;EAAa;EAAY;EAAQ;EAAyB;EAAwB,CAAC;CACvF,IAAM,IAAOA,EAAM,eAAe;EAChC,WAAW;EACX,UAAU;EACV;EACA;EACD,GAAG,CAAC,GAAc,EAAY,CAAC,EAC1B,IAAWA,EAAM,eAAe;EACpC,WAAW;EACX,UAAU;EACX,GAAG,CAAC,GAAa,EAAW,CAAC,EACxB,IAAiBA,EAAM,cAAc;EACzC,IAAM,IAAgB;GACpB,UAAU;GACV,MAAM;GACN,KAAK;GACN;AACD,MAAI,CAAC,EAAS,SACZ,QAAO;EAET,IAAM,IAAI,GAAW,EAAS,UAAU,EAAK,EAAE,EACzC,IAAI,GAAW,EAAS,UAAU,EAAK,EAAE;AAU/C,SATI,IACK;GACL,GAAG;GACH,WAAW,eAAe,IAAI,SAAS,IAAI;GAC3C,GAAI,GAAO,EAAS,SAAS,IAAI,OAAO,EACtC,YAAY,aACb;GACF,GAEI;GACL,UAAU;GACV,MAAM;GACN,KAAK;GACN;IACA;EAAC;EAAU;EAAW,EAAS;EAAU,EAAK;EAAG,EAAK;EAAE,CAAC;AAC5D,QAAOA,EAAM,eAAe;EAC1B,GAAG;EACH;EACA;EACA;EACA;EACD,GAAG;EAAC;EAAM;EAAQ;EAAM;EAAU;EAAe,CAAC;;AASrD,IAAM,MAAU,MAAW;CACzB,SAAS,EAAM,GAAO;AACpB,SAAO,EAAE,CAAC,eAAe,KAAK,GAAO,UAAU;;AAEjD,QAAO;EACL,MAAM;EACN;EACA,GAAG,GAAO;GACR,IAAM,EACJ,YACA,eACE,OAAO,KAAY,aAAa,EAAQ,EAAM,GAAG;AAgBrD,UAfI,KAAW,EAAM,EAAQ,GACvB,EAAQ,WAAW,OAMhB,EAAE,GALA,GAAQ;IACb,SAAS,EAAQ;IACjB;IACD,CAAC,CAAC,GAAG,EAAM,GAIZ,IACK,GAAQ;IACb;IACA;IACD,CAAC,CAAC,GAAG,EAAM,GAEP,EAAE;;EAEZ;GAUG,MAAU,GAAS,MAAS;CAChC,IAAM,IAAS,GAAS,EAAQ;AAChC,QAAO;EACL,MAAM,EAAO;EACb,IAAI,EAAO;EACX,SAAS,CAAC,GAAS,EAAK;EACzB;GAQG,MAAS,GAAS,MAAS;CAC/B,IAAM,IAAS,GAAQ,EAAQ;AAC/B,QAAO;EACL,MAAM,EAAO;EACb,IAAI,EAAO;EACX,SAAS,CAAC,GAAS,EAAK;EACzB;GAMG,MAAc,GAAS,OAEpB;CACL,IAFa,GAAa,EAAQ,CAEvB;CACX,SAAS,CAAC,GAAS,EAAK;CACzB,GASG,MAAQ,GAAS,MAAS;CAC9B,IAAM,IAAS,GAAO,EAAQ;AAC9B,QAAO;EACL,MAAM,EAAO;EACb,IAAI,EAAO;EACX,SAAS,CAAC,GAAS,EAAK;EACzB;GASG,MAAQ,GAAS,MAAS;CAC9B,IAAM,IAAS,GAAO,EAAQ;AAC9B,QAAO;EACL,MAAM,EAAO;EACb,IAAI,EAAO;EACX,SAAS,CAAC,GAAS,EAAK;EACzB;GAuBG,MAAQ,GAAS,MAAS;CAC9B,IAAM,IAAS,GAAO,EAAQ;AAC9B,QAAO;EACL,MAAM,EAAO;EACb,IAAI,EAAO;EACX,SAAS,CAAC,GAAS,EAAK;EACzB;GAuBG,MAAS,GAAS,MAAS;CAC/B,IAAM,IAAS,GAAQ,EAAQ;AAC/B,QAAO;EACL,MAAM,EAAO;EACb,IAAI,EAAO;EACX,SAAS,CAAC,GAAS,EAAK;EACzB;GC9YCC,KAAO,SACPC,KAAQC,EAAM,YAAY,GAAO,MAAiB;CACpD,IAAM,EAAE,aAAU,WAAQ,IAAI,YAAS,GAAG,GAAG,MAAe;AAC5D,QAAuB,kBACrB,EAAU,KACV;EACE,GAAG;EACH,KAAK;EACL;EACA;EACA,SAAS;EACT,qBAAqB;EACrB,UAAU,EAAM,UAAU,IAA2B,kBAAI,WAAW,EAAE,QAAQ,kBAAkB,CAAC;EAClG,CACF;EACD;AACF,GAAM,cAAcF;AACpB,IAAIG,KAAOF,ICIP,KAAc,UACd,CAAC,IAAqB,MAAqB,GAAmB,GAAY,EAC1E,CAAC,IAAgB,MAAoB,GAAoB,GAAY,EACrE,MAAU,MAAU;CACtB,IAAM,EAAE,kBAAe,gBAAa,GAC9B,CAAC,GAAQ,KAAaG,EAAM,SAAS,KAAK;AAChD,QAAuB,kBAAI,IAAgB;EAAE,OAAO;EAAe;EAAQ,gBAAgB;EAAW;EAAU,CAAC;;AAEnH,GAAO,cAAc;AACrB,IAAIC,KAAc,gBACd,KAAeD,EAAM,YACtB,GAAO,MAAiB;CACvB,IAAM,EAAE,kBAAe,eAAY,GAAG,MAAgB,GAChD,IAAU,GAAiBC,IAAa,EAAc,EACtD,IAAMD,EAAM,OAAO,KAAK,EACxB,IAAe,EAAgB,GAAc,EAAI,EACjD,IAAYA,EAAM,OAAO,KAAK;AAQpC,QAPA,EAAM,gBAAgB;EACpB,IAAM,IAAiB,EAAU;AAEjC,EADA,EAAU,UAAU,GAAY,WAAW,EAAI,SAC3C,MAAmB,EAAU,WAC/B,EAAQ,eAAe,EAAU,QAAQ;GAE3C,EACK,IAAa,OAAuB,kBAAI,EAAU,KAAK;EAAE,GAAG;EAAa,KAAK;EAAc,CAAC;EAEvG;AACD,GAAa,cAAcC;AAC3B,IAAIC,KAAe,iBACf,CAAC,IAAuB,MAAqB,GAAoBA,GAAa,EAC9E,KAAgBF,EAAM,YACvB,GAAO,MAAiB;CACvB,IAAM,EACJ,kBACA,UAAO,UACP,gBAAa,GACb,WAAQ,UACR,iBAAc,GACd,kBAAe,GACf,qBAAkB,IAClB,uBAAoB,EAAE,EACtB,kBAAkB,IAAuB,GACzC,YAAS,WACT,sBAAmB,IACnB,4BAAyB,aACzB,aACA,GAAG,MACD,GACE,IAAU,GAAiBE,IAAc,EAAc,EACvD,CAAC,GAAS,KAAcF,EAAM,SAAS,KAAK,EAC5C,IAAe,EAAgB,IAAe,MAAS,EAAW,EAAK,CAAC,EACxE,CAACG,GAAO,KAAYH,EAAM,SAAS,KAAK,EACxC,IAAY,GAAQG,EAAM,EAC1B,IAAa,GAAW,SAAS,GACjC,IAAc,GAAW,UAAU,GACnC,IAAmB,KAAQ,MAAU,WAAyB,KAAd,MAAM,IACtD,IAAmB,OAAO,KAAyB,WAAW,IAAuB;EAAE,KAAK;EAAG,OAAO;EAAG,QAAQ;EAAG,MAAM;EAAG,GAAG;EAAsB,EACtJ,IAAW,MAAM,QAAQ,EAAkB,GAAG,IAAoB,CAAC,EAAkB,EACrF,IAAwB,EAAS,SAAS,GAC1C,IAAwB;EAC5B,SAAS;EACT,UAAU,EAAS,OAAO,GAAU;EAEpC,aAAa;EACd,EACK,EAAE,SAAM,mBAAgB,cAAW,iBAAc,sBAAmB,GAAY;EAEpF,UAAU;EACV,WAAW;EACX,uBAAuB,GAAG,MACR,GAAW,GAAG,GAAM,EAClC,gBAAgB,MAA2B,UAC5C,CAAC;EAGJ,UAAU,EACR,WAAW,EAAQ,QACpB;EACD,YAAY;GACV,GAAO;IAAE,UAAU,IAAa;IAAa,eAAe;IAAa,CAAC;GAC1E,KAAmB,GAAM;IACvB,UAAU;IACV,WAAW;IACX,SAAS,MAAW,YAAY,IAAY,GAAG,KAAK;IACpD,GAAG;IACJ,CAAC;GACF,KAAmB,GAAK,EAAE,GAAG,GAAuB,CAAC;GACrD,GAAK;IACH,GAAG;IACH,QAAQ,EAAE,aAAU,UAAO,mBAAgB,yBAAsB;KAC/D,IAAM,EAAE,OAAO,GAAa,QAAQ,MAAiB,EAAM,WACrD,IAAe,EAAS,SAAS;AAIvC,KAHA,EAAa,YAAY,kCAAkC,GAAG,EAAe,IAAI,EACjF,EAAa,YAAY,mCAAmC,GAAG,EAAgB,IAAI,EACnF,EAAa,YAAY,+BAA+B,GAAG,EAAY,IAAI,EAC3E,EAAa,YAAY,gCAAgC,GAAG,EAAa,IAAI;;IAEhF,CAAC;GACFA,KAASC,GAAgB;IAAE,SAASD;IAAO,SAAS;IAAc,CAAC;GACnE,GAAgB;IAAE;IAAY;IAAa,CAAC;GAC5C,KAAoB,GAAK;IAAE,UAAU;IAAmB,GAAG;IAAuB,CAAC;GACpF;EACF,CAAC,EACI,CAAC,GAAY,KAAe,GAA6B,EAAU,EACnE,KAAeE,GAAe,EAAS;AAC7C,UAAsB;AACpB,EAAI,KACF,MAAgB;IAEjB,CAAC,GAAc,GAAa,CAAC;CAChC,IAAM,KAAS,EAAe,OAAO,GAC/B,IAAS,EAAe,OAAO,GAC/B,KAAoB,EAAe,OAAO,iBAAiB,GAC3D,CAAC,IAAe,MAAoBL,EAAM,UAAU;AAI1D,QAHA,SAAsB;AACpB,EAAI,KAAS,GAAiB,OAAO,iBAAiB,EAAQ,CAAC,OAAO;IACrE,CAAC,EAAQ,CAAC,EACU,kBACrB,OACA;EACE,KAAK,EAAK;EACV,qCAAqC;EACrC,OAAO;GACL,GAAG;GACH,WAAW,IAAe,EAAe,YAAY;GAErD,UAAU;GACV,QAAQ;GACP,mCAAoC,CACnC,EAAe,iBAAiB,GAChC,EAAe,iBAAiB,EACjC,CAAC,KAAK,IAAI;GAIX,GAAG,EAAe,MAAM,mBAAmB;IACzC,YAAY;IACZ,eAAe;IAChB;GACF;EACD,KAAK,EAAM;EACX,UAA0B,kBACxB,IACA;GACE,OAAO;GACP;GACA,eAAe;GACf;GACA;GACA,iBAAiB;GACjB,UAA0B,kBACxB,EAAU,KACV;IACE,aAAa;IACb,cAAc;IACd,GAAG;IACH,KAAK;IACL,OAAO;KACL,GAAG,EAAa;KAGhB,WAAY,IAAwB,KAAK,IAAd;KAC5B;IACF,CACF;GACF,CACF;EACF,CACF;EAEJ;AACD,GAAc,cAAcE;AAC5B,IAAII,KAAa,eACb,KAAgB;CAClB,KAAK;CACL,OAAO;CACP,QAAQ;CACR,MAAM;CACP,EACG,KAAcN,EAAM,WAAW,SAAsB,GAAO,GAAc;CAC5E,IAAM,EAAE,kBAAe,GAAG,MAAe,GACnC,IAAiB,GAAkBM,IAAY,EAAc,EAC7D,IAAW,GAAc,EAAe;AAC9C,QAIkB,kBACd,QACA;EACE,KAAK,EAAe;EACpB,OAAO;GACL,UAAU;GACV,MAAM,EAAe;GACrB,KAAK,EAAe;IACnB,IAAW;GACZ,iBAAiB;IACf,KAAK;IACL,OAAO;IACP,QAAQ;IACR,MAAM;IACP,CAAC,EAAe;GACjB,WAAW;IACT,KAAK;IACL,OAAO;IACP,QAAQ;IACR,MAAM;IACP,CAAC,EAAe;GACjB,YAAY,EAAe,kBAAkB,WAAW,KAAK;GAC9D;EACD,UAA0B,kBACxBC,IACA;GACE,GAAG;GACH,KAAK;GACL,OAAO;IACL,GAAG,EAAW;IAEd,SAAS;IACV;GACF,CACF;EACF,CACF;EAEH;AACF,GAAY,cAAcD;AAC1B,SAAS,GAAU,GAAO;AACxB,QAAO,MAAU;;AAEnB,IAAI,MAAmB,OAAa;CAClC,MAAM;CACN;CACA,GAAG,GAAM;EACP,IAAM,EAAE,cAAW,UAAO,sBAAmB,GAEvC,IADoB,EAAe,OAAO,iBAAiB,GAE3D,IAAa,IAAgB,IAAI,EAAQ,YACzC,IAAc,IAAgB,IAAI,EAAQ,aAC1C,CAAC,GAAY,KAAe,GAA6B,EAAU,EACnE,IAAe;GAAE,OAAO;GAAM,QAAQ;GAAO,KAAK;GAAQ,CAAC,IAC3D,KAAgB,EAAe,OAAO,KAAK,KAAK,IAAa,GAC7D,KAAgB,EAAe,OAAO,KAAK,KAAK,IAAc,GAChE,IAAI,IACJ,IAAI;AAcR,SAbI,MAAe,YACjB,IAAI,IAAgB,IAAe,GAAG,EAAa,KACnD,IAAI,GAAG,CAAC,EAAY,OACX,MAAe,SACxB,IAAI,IAAgB,IAAe,GAAG,EAAa,KACnD,IAAI,GAAG,EAAM,SAAS,SAAS,EAAY,OAClC,MAAe,WACxB,IAAI,GAAG,CAAC,EAAY,KACpB,IAAI,IAAgB,IAAe,GAAG,EAAa,OAC1C,MAAe,WACxB,IAAI,GAAG,EAAM,SAAS,QAAQ,EAAY,KAC1C,IAAI,IAAgB,IAAe,GAAG,EAAa,MAE9C,EAAE,MAAM;GAAE;GAAG;GAAG,EAAE;;CAE5B;AACD,SAAS,GAA6B,GAAW;CAC/C,IAAM,CAAC,GAAM,IAAQ,YAAY,EAAU,MAAM,IAAI;AACrD,QAAO,CAAC,GAAM,EAAM;;AAEtB,IAAIE,KAAQ,IACR,KAAS,IACTC,KAAU,IACV,KAAQ,IC7RRC,KAAc,UACdC,KAASC,EAAM,YAAY,GAAO,MAAiB;CACrD,IAAM,EAAE,WAAW,GAAe,GAAG,MAAgB,GAC/C,CAAC,GAAS,KAAcA,EAAM,SAAS,GAAM;AACnD,UAAsB,EAAW,GAAK,EAAE,EAAE,CAAC;CAC3C,IAAM,IAAY,KAAiB,KAAW,YAAY,UAAU;AACpE,QAAO,IAAY,EAAS,aAA6B,kBAAI,EAAU,KAAK;EAAE,GAAG;EAAa,KAAK;EAAc,CAAC,EAAE,EAAU,GAAG;EACjI;AACF,GAAO,cAAcF;;;ACZrB,IAAI,KAAyB,OAAO,OAAO;CAEzC,UAAU;CACV,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,UAAU;CACV,MAAM;CACN,YAAY;CACZ,UAAU;CACX,CAAC,EACE,KAAO,kBACP,KAAiBG,EAAM,YACxB,GAAO,MACiB,kBACrB,EAAU,MACV;CACE,GAAG;CACH,KAAK;CACL,OAAO;EAAE,GAAG;EAAwB,GAAG,EAAM;EAAO;CACrD,CACF,CAEJ;AACD,GAAe,cAAc;AAC7B,IAAIC,KAAO,ICbP,CAAC,IAAsB,MAAsB,GAAmB,WAAW,CAC7E,GACD,CAAC,EACEC,KAAiB,IAAmB,EACpC,KAAgB,mBAChB,KAAyB,KACzB,KAAe,gBACf,CAAC,IAAgC,MAA6B,GAAqB,GAAc,EACjGC,MAAmB,MAAU;CAC/B,IAAM,EACJ,mBACA,mBAAgB,IAChB,uBAAoB,KACpB,6BAA0B,IAC1B,gBACE,GACE,IAAmBC,EAAM,OAAO,GAAK,EACrC,IAAwBA,EAAM,OAAO,GAAM,EAC3C,IAAoBA,EAAM,OAAO,EAAE;AAKzC,QAJA,EAAM,gBAAgB;EACpB,IAAM,IAAiB,EAAkB;AACzC,eAAa,OAAO,aAAa,EAAe;IAC/C,EAAE,CAAC,EACiB,kBACrB,IACA;EACE,OAAO;EACP;EACA;EACA,QAAQA,EAAM,kBAAkB;AAE9B,GADA,OAAO,aAAa,EAAkB,QAAQ,EAC9C,EAAiB,UAAU;KAC1B,EAAE,CAAC;EACN,SAASA,EAAM,kBAAkB;AAE/B,GADA,OAAO,aAAa,EAAkB,QAAQ,EAC9C,EAAkB,UAAU,OAAO,iBAC3B,EAAiB,UAAU,IACjC,EACD;KACA,CAAC,EAAkB,CAAC;EACvB;EACA,0BAA0BA,EAAM,aAAa,MAAc;AACzD,KAAsB,UAAU;KAC/B,EAAE,CAAC;EACN;EACA;EACD,CACF;;AAEH,GAAgB,cAAc;AAC9B,IAAI,KAAe,WACf,CAAC,IAAwB,MAAqB,GAAqB,GAAa,EAChFC,MAAW,MAAU;CACvB,IAAM,EACJ,mBACA,aACA,MAAM,GACN,gBACA,iBACA,yBAAyB,GACzB,eAAe,MACb,GACE,IAAkB,GAA0B,IAAc,EAAM,eAAe,EAC/E,IAAcH,GAAe,EAAe,EAC5C,CAAC,GAAS,KAAcE,EAAM,SAAS,KAAK,EAC5C,IAAY,IAAO,EACnB,IAAeA,EAAM,OAAO,EAAE,EAC9B,IAA0B,KAA+B,EAAgB,yBACzE,IAAgB,KAAqB,EAAgB,eACrD,IAAoBA,EAAM,OAAO,GAAM,EACvC,CAAC,GAAM,KAAW,GAAqB;EAC3C,MAAM;EACN,aAAa,KAAe;EAC5B,WAAW,MAAU;AAOnB,GANI,KACF,EAAgB,QAAQ,EACxB,SAAS,cAAc,IAAI,YAAY,GAAa,CAAC,IAErD,EAAgB,SAAS,EAE3B,IAAe,EAAM;;EAEvB,QAAQ;EACT,CAAC,EACI,IAAiBA,EAAM,cACpB,IAAO,EAAkB,UAAU,iBAAiB,iBAAiB,UAC3E,CAAC,EAAK,CAAC,EACJ,IAAaA,EAAM,kBAAkB;AAIzC,EAHA,OAAO,aAAa,EAAa,QAAQ,EACzC,EAAa,UAAU,GACvB,EAAkB,UAAU,IAC5B,EAAQ,GAAK;IACZ,CAAC,EAAQ,CAAC,EACP,IAAcA,EAAM,kBAAkB;AAG1C,EAFA,OAAO,aAAa,EAAa,QAAQ,EACzC,EAAa,UAAU,GACvB,EAAQ,GAAM;IACb,CAAC,EAAQ,CAAC,EACP,IAAoBA,EAAM,kBAAkB;AAEhD,EADA,OAAO,aAAa,EAAa,QAAQ,EACzC,EAAa,UAAU,OAAO,iBAAiB;AAG7C,GAFA,EAAkB,UAAU,IAC5B,EAAQ,GAAK,EACb,EAAa,UAAU;KACtB,EAAc;IAChB,CAAC,GAAe,EAAQ,CAAC;AAS5B,QARA,EAAM,sBACS;AACX,EAEE,EAAa,aADb,OAAO,aAAa,EAAa,QAAQ,EAClB;IAG1B,EAAE,CAAC,EACiB,kBAAIE,IAAsB;EAAE,GAAG;EAAa,UAA0B,kBAC3F,IACA;GACE,OAAO;GACP;GACA;GACA;GACA;GACA,iBAAiB;GACjB,gBAAgBF,EAAM,kBAAkB;AACtC,IAAI,EAAgB,iBAAiB,UAAS,GAAmB,GAC5D,GAAY;MAChB;IAAC,EAAgB;IAAkB;IAAmB;IAAW,CAAC;GACrE,gBAAgBA,EAAM,kBAAkB;AACtC,IAAI,IACF,GAAa,IAEb,OAAO,aAAa,EAAa,QAAQ,EACzC,EAAa,UAAU;MAExB,CAAC,GAAa,EAAwB,CAAC;GAC1C,QAAQ;GACR,SAAS;GACT;GACA;GACD,CACF;EAAE,CAAC;;AAEN,GAAQ,cAAc;AACtB,IAAIG,KAAe,kBACfC,KAAiBJ,EAAM,YACxB,GAAO,MAAiB;CACvB,IAAM,EAAE,mBAAgB,GAAG,MAAiB,GACtC,IAAU,GAAkBG,IAAc,EAAe,EACzD,IAAkB,GAA0BA,IAAc,EAAe,EACzE,IAAcL,GAAe,EAAe,EAE5C,IAAe,EAAgB,GADzBE,EAAM,OAAO,KAAK,EAC0B,EAAQ,gBAAgB,EAC1E,IAAmBA,EAAM,OAAO,GAAM,EACtC,IAA0BA,EAAM,OAAO,GAAM,EAC7C,IAAkBA,EAAM,kBAAkB,EAAiB,UAAU,IAAO,EAAE,CAAC;AAIrF,QAHA,EAAM,sBACS,SAAS,oBAAoB,aAAa,EAAgB,EACtE,CAAC,EAAgB,CAAC,EACE,kBAAIK,IAAwB;EAAE,SAAS;EAAM,GAAG;EAAa,UAA0B,kBAC5G,EAAU,QACV;GACE,oBAAoB,EAAQ,OAAO,EAAQ,YAAY,KAAK;GAC5D,cAAc,EAAQ;GACtB,GAAG;GACH,KAAK;GACL,eAAe,EAAqB,EAAM,gBAAgB,MAAU;AAC9D,MAAM,gBAAgB,WACtB,CAAC,EAAwB,WAAW,CAAC,EAAgB,sBAAsB,YAC7E,EAAQ,gBAAgB,EACxB,EAAwB,UAAU;KAEpC;GACF,gBAAgB,EAAqB,EAAM,sBAAsB;AAE/D,IADA,EAAQ,gBAAgB,EACxB,EAAwB,UAAU;KAClC;GACF,eAAe,EAAqB,EAAM,qBAAqB;AAK7D,IAJI,EAAQ,QACV,EAAQ,SAAS,EAEnB,EAAiB,UAAU,IAC3B,SAAS,iBAAiB,aAAa,GAAiB,EAAE,MAAM,IAAM,CAAC;KACvE;GACF,SAAS,EAAqB,EAAM,eAAe;AACjD,IAAK,EAAiB,WAAS,EAAQ,QAAQ;KAC/C;GACF,QAAQ,EAAqB,EAAM,QAAQ,EAAQ,QAAQ;GAC3D,SAAS,EAAqB,EAAM,SAAS,EAAQ,QAAQ;GAC9D,CACF;EAAE,CAAC;EAEP;AACD,GAAe,cAAcF;AAC7B,IAAIG,KAAc,iBACd,CAACC,IAAgBC,MAAoB,GAAqBF,IAAa,EACzE,YAAY,KAAK,GAClB,CAAC,EACE,MAAiB,MAAU;CAC7B,IAAM,EAAE,mBAAgB,eAAY,aAAU,iBAAc,GACtD,IAAU,GAAkBA,IAAa,EAAe;AAC9D,QAAuB,kBAAIC,IAAgB;EAAE,OAAO;EAAgB;EAAY,UAA0B,kBAAI,GAAU;GAAE,SAAS,KAAc,EAAQ;GAAM,UAA0B,kBAAIE,IAAiB;IAAE,SAAS;IAAM;IAAW;IAAU,CAAC;GAAE,CAAC;EAAE,CAAC;;AAE7P,GAAc,cAAcH;AAC5B,IAAII,KAAe,kBACfC,KAAiBX,EAAM,YACxB,GAAO,MAAiB;CACvB,IAAM,IAAgBQ,GAAiBE,IAAc,EAAM,eAAe,EACpE,EAAE,gBAAa,EAAc,YAAY,UAAO,OAAO,GAAG,MAAiB,GAC3E,IAAU,GAAkBA,IAAc,EAAM,eAAe;AACrE,QAAuB,kBAAI,GAAU;EAAE,SAAS,KAAc,EAAQ;EAAM,UAAU,EAAQ,0BAA0C,kBAAI,IAAoB;GAAE;GAAM,GAAG;GAAc,KAAK;GAAc,CAAC,GAAmB,kBAAI,IAAyB;GAAE;GAAM,GAAG;GAAc,KAAK;GAAc,CAAC;EAAE,CAAC;EAEhT,EACG,KAA0BV,EAAM,YAAY,GAAO,MAAiB;CACtE,IAAM,IAAU,GAAkBU,IAAc,EAAM,eAAe,EAC/D,IAAkB,GAA0BA,IAAc,EAAM,eAAe,EAC/E,IAAMV,EAAM,OAAO,KAAK,EACxB,IAAe,EAAgB,GAAc,EAAI,EACjD,CAAC,GAAkB,KAAuBA,EAAM,SAAS,KAAK,EAC9D,EAAE,YAAS,eAAY,GACvB,IAAU,EAAI,SACd,EAAE,gCAA6B,GAC/B,IAAwBA,EAAM,kBAAkB;AAEpD,EADA,EAAoB,KAAK,EACzB,EAAyB,GAAM;IAC9B,CAAC,EAAyB,CAAC,EACxB,IAAwBA,EAAM,aACjC,GAAO,MAAgB;EACtB,IAAM,IAAgB,EAAM,eACtB,IAAY;GAAE,GAAG,EAAM;GAAS,GAAG,EAAM;GAAS,EAElD,IAAmB,GAAoB,GAD5B,GAAoB,GAAW,EAAc,uBAAuB,CAAC,CACrB,EAC3D,IAAoB,GAAkB,EAAY,uBAAuB,CAAC;AAGhF,EADA,EADkB,GAAQ,CAAC,GAAG,GAAkB,GAAG,EAAkB,CAAC,CACxC,EAC9B,EAAyB,GAAK;IAEhC,CAAC,EAAyB,CAC3B;AAkCD,QAjCA,EAAM,sBACS,GAAuB,EACnC,CAAC,EAAsB,CAAC,EAC3B,EAAM,gBAAgB;AACpB,MAAI,KAAW,GAAS;GACtB,IAAM,KAAsB,MAAU,EAAsB,GAAO,EAAQ,EACrE,KAAsB,MAAU,EAAsB,GAAO,EAAQ;AAG3E,UAFA,EAAQ,iBAAiB,gBAAgB,EAAmB,EAC5D,EAAQ,iBAAiB,gBAAgB,EAAmB,QAC/C;AAEX,IADA,EAAQ,oBAAoB,gBAAgB,EAAmB,EAC/D,EAAQ,oBAAoB,gBAAgB,EAAmB;;;IAGlE;EAAC;EAAS;EAAS;EAAuB;EAAsB,CAAC,EACpE,EAAM,gBAAgB;AACpB,MAAI,GAAkB;GACpB,IAAM,KAA2B,MAAU;IACzC,IAAM,IAAS,EAAM,QACf,IAAkB;KAAE,GAAG,EAAM;KAAS,GAAG,EAAM;KAAS,EACxD,IAAmB,GAAS,SAAS,EAAO,IAAI,GAAS,SAAS,EAAO,EACzE,IAA4B,CAACY,GAAiB,GAAiB,EAAiB;AACtF,IAAI,IACF,GAAuB,GACd,MACT,GAAuB,EACvB,GAAS;;AAIb,UADA,SAAS,iBAAiB,eAAe,EAAwB,QACpD,SAAS,oBAAoB,eAAe,EAAwB;;IAElF;EAAC;EAAS;EAAS;EAAkB;EAAS;EAAsB,CAAC,EACjD,kBAAI,IAAoB;EAAE,GAAG;EAAO,KAAK;EAAc,CAAC;EAC/E,EACE,CAAC,IAAsC,MAAmC,GAAqB,IAAc,EAAE,UAAU,IAAO,CAAC,EACjIC,KAAY,mBAAgB,iBAAiB,EAC7C,KAAqBb,EAAM,YAC5B,GAAO,MAAiB;CACvB,IAAM,EACJ,mBACA,aACA,cAAc,GACd,oBACA,yBACA,GAAG,MACD,GACE,IAAU,GAAkBU,IAAc,EAAe,EACzD,IAAcZ,GAAe,EAAe,EAC5C,EAAE,eAAY;AAepB,QAdA,EAAM,iBACJ,SAAS,iBAAiB,IAAc,EAAQ,QACnC,SAAS,oBAAoB,IAAc,EAAQ,GAC/D,CAAC,EAAQ,CAAC,EACb,EAAM,gBAAgB;AACpB,MAAI,EAAQ,SAAS;GACnB,IAAM,KAAgB,MAAU;AAE9B,IADe,EAAM,QACT,SAAS,EAAQ,QAAQ,IAAE,GAAS;;AAGlD,UADA,OAAO,iBAAiB,UAAU,GAAc,EAAE,SAAS,IAAM,CAAC,QACrD,OAAO,oBAAoB,UAAU,GAAc,EAAE,SAAS,IAAM,CAAC;;IAEnF,CAAC,EAAQ,SAAS,EAAQ,CAAC,EACP,kBACrB,IACA;EACE,SAAS;EACT,6BAA6B;EAC7B;EACA;EACA,iBAAiB,MAAU,EAAM,gBAAgB;EACjD,WAAW;EACX,UAA0B,kBACxBgB,IACA;GACE,cAAc,EAAQ;GACtB,GAAG;GACH,GAAG;GACH,KAAK;GACL,OAAO;IACL,GAAG,EAAa;IAGd,4CAA4C;IAC5C,2CAA2C;IAC3C,4CAA4C;IAC5C,iCAAiC;IACjC,kCAAkC;IAErC;GACD,UAAU,CACQ,kBAAID,IAAW,EAAE,aAAU,CAAC,EAC5B,kBAAI,IAAsC;IAAE,OAAO;IAAgB,UAAU;IAAM,UAA0B,kBAAIE,IAA8B;KAAE,IAAI,EAAQ;KAAW,MAAM;KAAW,UAAU,KAAa;KAAU,CAAC;IAAE,CAAC,CAC/O;GACF,CACF;EACF,CACF;EAEJ;AACD,GAAe,cAAcL;AAC7B,IAAIM,KAAa,gBACbC,KAAejB,EAAM,YACtB,GAAO,MAAiB;CACvB,IAAM,EAAE,mBAAgB,GAAG,MAAe,GACpC,IAAcF,GAAe,EAAe;AAKlD,QAJqC,GACnCkB,IACA,EACD,CACmC,WAAW,OAAuB,kBAAIE,IAAuB;EAAE,GAAG;EAAa,GAAG;EAAY,KAAK;EAAc,CAAC;EAEzJ;AACD,GAAa,cAAcF;AAC3B,SAAS,GAAoB,GAAO,GAAM;CACxC,IAAM,IAAM,KAAK,IAAI,EAAK,MAAM,EAAM,EAAE,EAClC,IAAS,KAAK,IAAI,EAAK,SAAS,EAAM,EAAE,EACxC,IAAQ,KAAK,IAAI,EAAK,QAAQ,EAAM,EAAE,EACtC,IAAO,KAAK,IAAI,EAAK,OAAO,EAAM,EAAE;AAC1C,SAAQ,KAAK,IAAI,GAAK,GAAQ,GAAO,EAAK,EAA1C;EACE,KAAK,EACH,QAAO;EACT,KAAK,EACH,QAAO;EACT,KAAK,EACH,QAAO;EACT,KAAK,EACH,QAAO;EACT,QACE,OAAU,MAAM,cAAc;;;AAGpC,SAAS,GAAoB,GAAW,GAAU,IAAU,GAAG;CAC7D,IAAM,IAAmB,EAAE;AAC3B,SAAQ,GAAR;EACE,KAAK;AACH,KAAiB,KACf;IAAE,GAAG,EAAU,IAAI;IAAS,GAAG,EAAU,IAAI;IAAS,EACtD;IAAE,GAAG,EAAU,IAAI;IAAS,GAAG,EAAU,IAAI;IAAS,CACvD;AACD;EACF,KAAK;AACH,KAAiB,KACf;IAAE,GAAG,EAAU,IAAI;IAAS,GAAG,EAAU,IAAI;IAAS,EACtD;IAAE,GAAG,EAAU,IAAI;IAAS,GAAG,EAAU,IAAI;IAAS,CACvD;AACD;EACF,KAAK;AACH,KAAiB,KACf;IAAE,GAAG,EAAU,IAAI;IAAS,GAAG,EAAU,IAAI;IAAS,EACtD;IAAE,GAAG,EAAU,IAAI;IAAS,GAAG,EAAU,IAAI;IAAS,CACvD;AACD;EACF,KAAK;AACH,KAAiB,KACf;IAAE,GAAG,EAAU,IAAI;IAAS,GAAG,EAAU,IAAI;IAAS,EACtD;IAAE,GAAG,EAAU,IAAI;IAAS,GAAG,EAAU,IAAI;IAAS,CACvD;AACD;;AAEJ,QAAO;;AAET,SAAS,GAAkB,GAAM;CAC/B,IAAM,EAAE,QAAK,UAAO,WAAQ,YAAS;AACrC,QAAO;EACL;GAAE,GAAG;GAAM,GAAG;GAAK;EACnB;GAAE,GAAG;GAAO,GAAG;GAAK;EACpB;GAAE,GAAG;GAAO,GAAG;GAAQ;EACvB;GAAE,GAAG;GAAM,GAAG;GAAQ;EACvB;;AAEH,SAASJ,GAAiB,GAAO,GAAS;CACxC,IAAM,EAAE,MAAG,SAAM,GACb,IAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,SAAS,GAAG,IAAI,EAAQ,QAAQ,IAAI,KAAK;EACnE,IAAM,IAAK,EAAQ,IACb,IAAK,EAAQ,IACb,IAAK,EAAG,GACR,IAAK,EAAG,GACR,IAAK,EAAG,GACR,IAAK,EAAG;AAEd,EADkB,IAAK,KAAM,IAAK,KAAK,KAAK,IAAK,MAAO,IAAI,MAAO,IAAK,KAAM,MAC/D,IAAS,CAAC;;AAE3B,QAAO;;AAET,SAAS,GAAQ,GAAQ;CACvB,IAAM,IAAY,EAAO,OAAO;AAQhC,QAPA,EAAU,MAAM,GAAG,MACb,EAAE,IAAI,EAAE,IAAU,KACb,EAAE,IAAI,EAAE,IAAU,IAClB,EAAE,IAAI,EAAE,IAAU,OAClB,EAAE,IAAI,EAAE,GAEjB,EACK,GAAiB,EAAU;;AAEpC,SAAS,GAAiB,GAAQ;AAChC,KAAI,EAAO,UAAU,EAAG,QAAO,EAAO,OAAO;CAC7C,IAAM,IAAY,EAAE;AACpB,MAAK,IAAI,IAAI,GAAG,IAAI,EAAO,QAAQ,KAAK;EACtC,IAAM,IAAI,EAAO;AACjB,SAAO,EAAU,UAAU,IAAG;GAC5B,IAAM,IAAI,EAAU,EAAU,SAAS,IACjC,IAAI,EAAU,EAAU,SAAS;AACvC,QAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI,GAAU,KAAK;OACtE;;AAEP,IAAU,KAAK,EAAE;;AAEnB,GAAU,KAAK;CACf,IAAM,IAAY,EAAE;AACpB,MAAK,IAAI,IAAI,EAAO,SAAS,GAAG,KAAK,GAAG,KAAK;EAC3C,IAAM,IAAI,EAAO;AACjB,SAAO,EAAU,UAAU,IAAG;GAC5B,IAAM,IAAI,EAAU,EAAU,SAAS,IACjC,IAAI,EAAU,EAAU,SAAS;AACvC,QAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI,GAAU,KAAK;OACtE;;AAEP,IAAU,KAAK,EAAE;;AAMjB,QAJF,EAAU,KAAK,EACX,EAAU,WAAW,KAAK,EAAU,WAAW,KAAK,EAAU,GAAG,MAAM,EAAU,GAAG,KAAK,EAAU,GAAG,MAAM,EAAU,GAAG,IACpH,IAEA,EAAU,OAAO,EAAU;;AAGtC,IAAI,KAAWb,IACXoB,KAAQlB,IACRmB,KAAUhB,IACViB,KAAS,IACTC,KAAWX,IACXY,KAASN,IChcP,KAAkB,IAElB,KAAU,IAEV,KAAiB,IAEjB,KAAiB,EAAM,YAwB1B,EAAE,cAAW,gBAAa,GAAG,WAAW,GAAmB,aAAU,GAAG,KAAS,MAAQ;CAO1F,IAAM,IAAmB,GAAoB;AAG7C,QACE,kBAAC,IAAD;EAAyB,YAFzB,MAAsB,KAAA,IAAY,IAAmB,MAEJ,KAAA;YAC/C,kBAAC,IAAD;GACO;GACO;GACZ,WAAW,EAIT,kGAMA,aAIA,mCACA,kGACA,iFACA,iFACA,qDACA,EACD;GACD,GAAI;aAxBN,CA0BG,GAMD,kBAAC,IAAD,EAAwB,WAAU,sGAAuG,CAAA,CAChH;;EACH,CAAA;EAE5B;AACF,GAAe,cAAA,GAAuC;AAStD,IAAM,KAAe;;;AClIrB,SAAS,GAAY,GAAM;AACzB,KAAI,CAAC,KAAQ,OAAO,WAAY,IAAa;CAC7C,IAAI,IAAO,SAAS,QAAQ,SAAS,qBAAqB,OAAO,CAAC,IAC9D,IAAQ,SAAS,cAAc,QAAQ;AAG1C,CAFD,EAAM,OAAO,YACb,EAAK,YAAY,EAAM,EACtB,EAAM,aAAc,EAAM,WAAW,UAAU,IAAQ,EAAM,YAAY,SAAS,eAAe,EAAK,CAAC;;AAM1G,IAAM,MAAY,MAAO;AACrB,SAAO,GAAP;EACI,KAAK,UACD,QAAO;EACX,KAAK,OACD,QAAO;EACX,KAAK,UACD,QAAO;EACX,KAAK,QACD,QAAO;EACX,QACI,QAAO;;GAGb,KAAO,MAAM,GAAG,CAAC,KAAK,EAAE,EACxB,MAAU,EAAE,YAAS,mBACF,kBAAM,cAAc,OAAO;CAC5C,WAAW,CACP,0BACA,EACH,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;CAC3B,gBAAgB;CACnB,EAAgB,kBAAM,cAAc,OAAO,EACxC,WAAW,kBACd,EAAE,GAAK,KAAK,GAAG,MAAkB,kBAAM,cAAc,OAAO;CACrD,WAAW;CACX,KAAK,eAAe;CACvB,CAAC,CAAC,CAAC,CAAC,EAEP,KAA4B,kBAAM,cAAc,OAAO;CACzD,OAAO;CACP,SAAS;CACT,MAAM;CACN,QAAQ;CACR,OAAO;CACV,EAAgB,kBAAM,cAAc,QAAQ;CACzC,UAAU;CACV,GAAG;CACH,UAAU;CACb,CAAC,CAAC,EACG,KAA4B,kBAAM,cAAc,OAAO;CACzD,OAAO;CACP,SAAS;CACT,MAAM;CACN,QAAQ;CACR,OAAO;CACV,EAAgB,kBAAM,cAAc,QAAQ;CACzC,UAAU;CACV,GAAG;CACH,UAAU;CACb,CAAC,CAAC,EACG,KAAyB,kBAAM,cAAc,OAAO;CACtD,OAAO;CACP,SAAS;CACT,MAAM;CACN,QAAQ;CACR,OAAO;CACV,EAAgB,kBAAM,cAAc,QAAQ;CACzC,UAAU;CACV,GAAG;CACH,UAAU;CACb,CAAC,CAAC,EACG,KAA0B,kBAAM,cAAc,OAAO;CACvD,OAAO;CACP,SAAS;CACT,MAAM;CACN,QAAQ;CACR,OAAO;CACV,EAAgB,kBAAM,cAAc,QAAQ;CACzC,UAAU;CACV,GAAG;CACH,UAAU;CACb,CAAC,CAAC,EACG,KAA0B,kBAAM,cAAc,OAAO;CACvD,OAAO;CACP,OAAO;CACP,QAAQ;CACR,SAAS;CACT,MAAM;CACN,QAAQ;CACR,aAAa;CACb,eAAe;CACf,gBAAgB;CACnB,EAAgB,kBAAM,cAAc,QAAQ;CACzC,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACP,CAAC,EAAgB,kBAAM,cAAc,QAAQ;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACP,CAAC,CAAC,EAEG,WAA0B;CAC5B,IAAM,CAAC,GAAkB,KAAuB,EAAM,SAAS,SAAS,OAAO;AAQ/E,QAPA,EAAM,gBAAc;EAChB,IAAM,UAAe;AACjB,KAAoB,SAAS,OAAO;;AAGxC,SADA,SAAS,iBAAiB,oBAAoB,EAAS,QAC5C,OAAO,oBAAoB,oBAAoB,EAAS;IACpE,EAAE,CAAC,EACC;GAGP,KAAgB,GA0Pd,IAAa,IAzPnB,MAAe;CACX,cAAa;AAqPT,EAnPA,KAAK,aAAa,OACd,KAAK,YAAY,KAAK,EAAW,QACtB;GACP,IAAM,IAAQ,KAAK,YAAY,QAAQ,EAAW;AAClD,QAAK,YAAY,OAAO,GAAO,EAAE;MAGzC,KAAK,WAAW,MAAO;AACnB,QAAK,YAAY,SAAS,MAAa,EAAW,EAAK,CAAC;KAE5D,KAAK,YAAY,MAAO;AAEpB,GADA,KAAK,QAAQ,EAAK,EAClB,KAAK,SAAS,CACV,GAAG,KAAK,QACR,EACH;KAEL,KAAK,UAAU,MAAO;GAElB,IAAM,EAAE,YAAS,GAAG,MAAS,GACvB,IAAK,OAAQ,GAA6B,MAAQ,YAAyB,EAAK,IAAgC,SAAU,IAAI,EAAK,KAAK,MACxI,IAAgB,KAAK,OAAO,MAAM,MAC7B,EAAM,OAAO,EACtB,EACI,IAAc,EAAK,gBAAgB,KAAA,IAAY,KAAO,EAAK;AA+BjE,UA9BI,KAAK,gBAAgB,IAAI,EAAG,IAC5B,KAAK,gBAAgB,OAAO,EAAG,EAE/B,IACA,KAAK,SAAS,KAAK,OAAO,KAAK,MACvB,EAAM,OAAO,KACb,KAAK,QAAQ;IACT,GAAG;IACH,GAAG;IACH;IACA,OAAO;IACV,CAAC,EACK;IACH,GAAG;IACH,GAAG;IACH;IACA;IACA,OAAO;IACV,IAEE,EACT,GAEF,KAAK,SAAS;IACV,OAAO;IACP,GAAG;IACH;IACA;IACH,CAAC,EAEC;KAEX,KAAK,WAAW,OACR,KACA,KAAK,gBAAgB,IAAI,EAAG,EAC5B,4BAA0B,KAAK,YAAY,SAAS,MAAa,EAAW;GAChE;GACA,SAAS;GACZ,CAAC,CAAC,CAAC,IAEZ,KAAK,OAAO,SAAS,MAAQ;AACzB,QAAK,YAAY,SAAS,MAAa,EAAW;IAC1C,IAAI,EAAM;IACV,SAAS;IACZ,CAAC,CAAC;IACT,EAEC,IAEX,KAAK,WAAW,GAAS,MACd,KAAK,OAAO;GACf,GAAG;GACH;GACH,CAAC,EAEN,KAAK,SAAS,GAAS,MACZ,KAAK,OAAO;GACf,GAAG;GACH;GACA,MAAM;GACT,CAAC,EAEN,KAAK,WAAW,GAAS,MACd,KAAK,OAAO;GACf,GAAG;GACH,MAAM;GACN;GACH,CAAC,EAEN,KAAK,QAAQ,GAAS,MACX,KAAK,OAAO;GACf,GAAG;GACH,MAAM;GACN;GACH,CAAC,EAEN,KAAK,WAAW,GAAS,MACd,KAAK,OAAO;GACf,GAAG;GACH,MAAM;GACN;GACH,CAAC,EAEN,KAAK,WAAW,GAAS,MACd,KAAK,OAAO;GACf,GAAG;GACH,MAAM;GACN;GACH,CAAC,EAEN,KAAK,WAAW,GAAS,MAAO;AAC5B,OAAI,CAAC,EAED;GAEJ,IAAI;AACJ,GAAI,EAAK,YAAY,KAAA,MACjB,IAAK,KAAK,OAAO;IACb,GAAG;IACH;IACA,MAAM;IACN,SAAS,EAAK;IACd,aAAa,OAAO,EAAK,eAAgB,aAAgC,KAAA,IAAnB,EAAK;IAC9D,CAAC;GAEN,IAAM,IAAI,QAAQ,QAAQ,aAAmB,WAAW,GAAS,GAAG,EAAQ,EACxE,IAAgB,MAAO,KAAA,GACvB,GACE,IAAkB,EAAE,KAAK,OAAO,MAAW;AAM7C,QALA,IAAS,CACL,WACA,EACH,EAC8B,EAAM,eAAe,EAAS,CAGzD,CADA,IAAgB,IAChB,KAAK,OAAO;KACR;KACA,MAAM;KACN,SAAS;KACZ,CAAC;aACK,GAAe,EAAS,IAAI,CAAC,EAAS,IAAI;AACjD,SAAgB;KAChB,IAAM,IAAc,OAAO,EAAK,SAAU,aAAa,MAAM,EAAK,MAAM,uBAAuB,EAAS,SAAS,GAAG,EAAK,OACnH,IAAc,OAAO,EAAK,eAAgB,aAAa,MAAM,EAAK,YAAY,uBAAuB,EAAS,SAAS,GAAG,EAAK,aAE/H,IADmB,OAAO,KAAgB,YAAY,CAAC,EAAM,eAAe,EAAY,GACrD,IAAc,EACnD,SAAS,GACZ;AACD,UAAK,OAAO;MACR;MACA,MAAM;MACN;MACA,GAAG;MACN,CAAC;eACK,aAAoB,OAAO;AAClC,SAAgB;KAChB,IAAM,IAAc,OAAO,EAAK,SAAU,aAAa,MAAM,EAAK,MAAM,EAAS,GAAG,EAAK,OACnF,IAAc,OAAO,EAAK,eAAgB,aAAa,MAAM,EAAK,YAAY,EAAS,GAAG,EAAK,aAE/F,IADmB,OAAO,KAAgB,YAAY,CAAC,EAAM,eAAe,EAAY,GACrD,IAAc,EACnD,SAAS,GACZ;AACD,UAAK,OAAO;MACR;MACA,MAAM;MACN;MACA,GAAG;MACN,CAAC;eACK,EAAK,YAAY,KAAA,GAAW;AACnC,SAAgB;KAChB,IAAM,IAAc,OAAO,EAAK,WAAY,aAAa,MAAM,EAAK,QAAQ,EAAS,GAAG,EAAK,SACvF,IAAc,OAAO,EAAK,eAAgB,aAAa,MAAM,EAAK,YAAY,EAAS,GAAG,EAAK,aAE/F,IADmB,OAAO,KAAgB,YAAY,CAAC,EAAM,eAAe,EAAY,GACrD,IAAc,EACnD,SAAS,GACZ;AACD,UAAK,OAAO;MACR;MACA,MAAM;MACN;MACA,GAAG;MACN,CAAC;;KAER,CAAC,MAAM,OAAO,MAAQ;AAKpB,QAJA,IAAS,CACL,UACA,EACH,EACG,EAAK,UAAU,KAAA,GAAW;AAC1B,SAAgB;KAChB,IAAM,IAAc,OAAO,EAAK,SAAU,aAAa,MAAM,EAAK,MAAM,EAAM,GAAG,EAAK,OAChF,IAAc,OAAO,EAAK,eAAgB,aAAa,MAAM,EAAK,YAAY,EAAM,GAAG,EAAK,aAE5F,IADmB,OAAO,KAAgB,YAAY,CAAC,EAAM,eAAe,EAAY,GACrD,IAAc,EACnD,SAAS,GACZ;AACD,UAAK,OAAO;MACR;MACA,MAAM;MACN;MACA,GAAG;MACN,CAAC;;KAER,CAAC,cAAY;AAMX,IALI,MAEA,KAAK,QAAQ,EAAG,EAChB,IAAK,KAAA,IAET,EAAK,WAAW,QAAgB,EAAK,QAAQ,KAAK,EAAK;KACzD,EACI,UAAa,IAAI,SAAS,GAAS,MAAS,EAAgB,WAAS,EAAO,OAAO,WAAW,EAAO,EAAO,GAAG,GAAG,EAAQ,EAAO,GAAG,CAAC,CAAC,MAAM,EAAO,CAAC;AAOtJ,UANA,OAAO,KAAO,YAAY,OAAO,KAAO,WAEjC,EACH,WACH,GAEM,OAAO,OAAO,GAAI,EACrB,WACH,CAAC;KAGV,KAAK,UAAU,GAAK,MAAO;GACvB,IAAM,IAAM,GAA6B,MAAO;AAMhD,UALA,KAAK,OAAO;IACR,KAAK,EAAI,EAAG;IACZ;IACA,GAAG;IACN,CAAC,EACK;KAEX,KAAK,wBACM,KAAK,OAAO,QAAQ,MAAQ,CAAC,KAAK,gBAAgB,IAAI,EAAM,GAAG,CAAC,EAE3E,KAAK,cAAc,EAAE,EACrB,KAAK,SAAS,EAAE,EAChB,KAAK,kCAAkB,IAAI,KAAK;;GAGP,EAE3B,MAAiB,GAAS,MAAO;CACnC,IAAM,IAAM,GAA6B,MAAO;AAMhD,QALA,EAAW,SAAS;EAChB,OAAO;EACP,GAAG;EACH;EACH,CAAC,EACK;GAEL,MAAkB,MACb,KAAQ,OAAO,KAAS,YAAY,QAAQ,KAAQ,OAAO,EAAK,MAAO,aAAa,YAAY,KAAQ,OAAO,EAAK,UAAW;AAM5H,OAAO,OAJF,IAIqB;CACpC,SAAS,EAAW;CACpB,MAAM,EAAW;CACjB,SAAS,EAAW;CACpB,OAAO,EAAW;CAClB,QAAQ,EAAW;CACnB,SAAS,EAAW;CACpB,SAAS,EAAW;CACpB,SAAS,EAAW;CACpB,SAAS,EAAW;CACvB,EAAE;CACC,kBAdmB,EAAW;CAe9B,iBAdkB,EAAW,iBAAiB;CAejD,CAAC,EAEF,GAAY,8gdAA8gd;AAE1hd,SAAS,GAAS,GAAQ;AACtB,QAAO,EAAO,UAAU,KAAA;;AAI5B,IAAM,KAAwB,GAExB,KAAkB,QAElB,KAAyB,QAEzB,KAAiB,KAEjB,KAAc,KAEd,KAAM,IAEN,KAAkB,IAElB,KAAsB;AAC5B,SAASO,GAAG,GAAG,GAAS;AACpB,QAAO,EAAQ,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAE5C,SAAS,GAA0B,GAAU;CACzC,IAAM,CAAC,GAAG,KAAK,EAAS,MAAM,IAAI,EAC5B,IAAa,EAAE;AAOrB,QANI,KACA,EAAW,KAAK,EAAE,EAElB,KACA,EAAW,KAAK,EAAE,EAEf;;AAEX,IAAM,MAAS,MAAQ;CAEnB,IAAM,EAAE,QAAQ,GAAe,UAAO,aAAU,gBAAa,eAAY,kBAAe,YAAS,UAAO,WAAQ,aAAU,gBAAa,sBAAmB,aAAa,GAAwB,UAAO,sBAAmB,sBAAmB,eAAY,IAAI,0BAAuB,IAAI,UAAU,GAAqB,aAAU,QAAK,oBAAiB,eAAY,UAAO,0BAAuB,kBAAkB,GAC5Y,CAAC,GAAgB,KAAqB,EAAM,SAAS,KAAK,EAC1D,CAAC,GAAmB,KAAwB,EAAM,SAAS,KAAK,EAChE,CAAC,GAAS,KAAc,EAAM,SAAS,GAAM,EAC7C,CAAC,GAAS,KAAc,EAAM,SAAS,GAAM,EAC7C,CAAC,GAAS,KAAc,EAAM,SAAS,GAAM,EAC7C,CAAC,GAAU,KAAe,EAAM,SAAS,GAAM,EAC/C,CAAC,IAAU,MAAe,EAAM,SAAS,GAAM,EAC/C,CAAC,GAAoB,KAAyB,EAAM,SAAS,EAAE,EAC/D,CAAC,IAAe,MAAoB,EAAM,SAAS,EAAE,EACrD,KAAgB,EAAM,OAAO,EAAM,YAAY,KAAuB,GAAe,EACrF,KAAgB,EAAM,OAAO,KAAK,EAClC,IAAW,EAAM,OAAO,KAAK,EAC7B,KAAU,MAAU,GACpB,IAAY,IAAQ,KAAK,GACzB,IAAY,EAAM,MAClB,IAAc,EAAM,gBAAgB,IACpC,KAAiB,EAAM,aAAa,IACpC,KAA4B,EAAM,wBAAwB,IAE1D,KAAc,EAAM,cAAY,EAAQ,WAAW,MAAS,EAAO,YAAY,EAAM,GAAG,IAAI,GAAG,CACjG,GACA,EAAM,GACT,CAAC,EACI,KAAc,EAAM,cAEO,EAAM,eAA4C,GAChF,CACC,EAAM,aACN,EACH,CAAC,EACI,KAAW,EAAM,cAAY,EAAM,YAAY,KAAuB,IAAgB,CACxF,EAAM,UACN,EACH,CAAC,EACI,KAAyB,EAAM,OAAO,EAAE,EACxC,KAAS,EAAM,OAAO,EAAE,EACxB,KAA6B,EAAM,OAAO,EAAE,EAC5C,KAAkB,EAAM,OAAO,KAAK,EACpC,CAAC,IAAG,MAAK,EAAS,MAAM,IAAI,EAC5B,KAAqB,EAAM,cACtB,EAAQ,QAAQ,GAAM,GAAM,MAE3B,KAAgB,KACT,IAEJ,IAAO,EAAK,QACpB,EAAE,EACN,CACC,GACA,GACH,CAAC,EACI,KAAmB,IAAqB,EACxC,KAAS,EAAM,UAAU,GACzB,KAAW,MAAc;AAkC/B,CAjCA,GAAO,UAAU,EAAM,cAAY,KAAc,IAAM,IAAoB,CACvE,IACA,GACH,CAAC,EACF,EAAM,gBAAc;AAChB,KAAc,UAAU;IACzB,CACC,GACH,CAAC,EACF,EAAM,gBAAc;AAEhB,IAAW,GAAK;IACjB,EAAE,CAAC,EACN,EAAM,gBAAc;EAChB,IAAM,IAAY,EAAS;AAC3B,MAAI,GAAW;GACX,IAAM,IAAS,EAAU,uBAAuB,CAAC;AAWjD,UATA,GAAiB,EAAO,EACxB,GAAY,MAAI,CACR;IACI,SAAS,EAAM;IACf;IACA,UAAU,EAAM;IACnB,EACD,GAAG,EACN,CAAC,QACK,GAAY,MAAI,EAAE,QAAQ,MAAS,EAAO,YAAY,EAAM,GAAG,CAAC;;IAEhF,CACC,GACA,EAAM,GACT,CAAC,EACF,EAAM,sBAAoB;AAEtB,MAAI,CAAC,EAAS;EACd,IAAM,IAAY,EAAS,SACrB,IAAiB,EAAU,MAAM;AACvC,IAAU,MAAM,SAAS;EACzB,IAAM,IAAY,EAAU,uBAAuB,CAAC;AAGpD,EAFA,EAAU,MAAM,SAAS,GACzB,GAAiB,EAAU,EAC3B,GAAY,MACc,EAAQ,MAAM,MAAS,EAAO,YAAY,EAAM,GAAG,GAW9D,EAAQ,KAAK,MAAS,EAAO,YAAY,EAAM,KAAK;GACnD,GAAG;GACH,QAAQ;GACX,GAAG,EAAO,GAZR,CACH;GACI,SAAS,EAAM;GACf,QAAQ;GACR,UAAU,EAAM;GACnB,EACD,GAAG,EACN,CAOP;IACH;EACC;EACA,EAAM;EACN,EAAM;EACN;EACA,EAAM;EACN,EAAM;EACN,EAAM;EACN,EAAM;EACT,CAAC;CACF,IAAM,KAAc,EAAM,kBAAgB;AAKtC,EAHA,EAAW,GAAK,EAChB,EAAsB,GAAO,QAAQ,EACrC,GAAY,MAAI,EAAE,QAAQ,MAAS,EAAO,YAAY,EAAM,GAAG,CAAC,EAChE,iBAAe;AACX,KAAY,EAAM;KACnB,GAAoB;IACxB;EACC;EACA;EACA;EACA;EACH,CAAC;AAuCF,CAtCA,EAAM,gBAAc;AAChB,MAAI,EAAM,WAAW,MAAc,aAAa,EAAM,aAAa,YAAY,EAAM,SAAS,UAAW;EACzG,IAAI;AA2BJ,SALI,KAAY,KAAe,YApBR;AACnB,OAAI,GAA2B,UAAU,GAAuB,SAAS;IAErE,IAAM,qBAAc,IAAI,MAAM,EAAC,SAAS,GAAG,GAAuB;AAClE,OAAc,WAAkC;;AAEpD,MAA2B,2BAAU,IAAI,MAAM,EAAC,SAAS;MAe7C,GATR,GAAc,YAAY,aAC9B,GAAuB,2BAAU,IAAI,MAAM,EAAC,SAAS,EAErD,IAAY,iBAAe;AAEvB,GADA,EAAM,eAAe,QAAgB,EAAM,YAAY,KAAK,GAAO,EAAM,EACzE,IAAa;KACd,GAAc,QAAQ,SAOlB,aAAa,EAAU;IACnC;EACC;EACA;EACA;EACA;EACA;EACA;EACH,CAAC,EACF,EAAM,gBAAc;AAChB,EAAI,EAAM,WACN,IAAa,EACb,EAAM,aAAa,QAAgB,EAAM,UAAU,KAAK,GAAO,EAAM;IAE1E,CACC,IACA,EAAM,OACT,CAAC;CACF,SAAS,KAAiB;AAStB,SAPI,GAA+B,UAEV,kBAAM,cAAc,OAAO;GAC5C,WAAWA,GAAG,GAAyC,QAAQ,GAAqD,YAAkD,QAAQ,gBAAgB;GAC9L,gBAAgB,MAAc;GACjC,EAAE,EAAM,QAAQ,GAEA,kBAAM,cAAc,IAAQ;GAC7C,WAAWA,GAAG,GAAyC,QAAQ,GAAoD,YAAiD,OAAO;GAC3K,SAAS,MAAc;GAC1B,CAAC;;CAEN,IAAM,KAAO,EAAM,QAAS,IAA+B,MAAe,GAAS,EAAU;AAE7F,QAAqB,kBAAM,cAAc,MAAM;EAC3C,UAAU;EACV,KAAK;EACL,WAAWA,GAAG,GAAW,IAAgB,GAAyC,OAAO,GAAoD,YAAiD,OAAO,GAAyC,SAAS,IAAyC,IAAY,GAAqD,aAAkD,GAAW;EAC9Z,qBAAqB;EACrB,oBAAyC,EAAM,cAA0C;EACzF,eAAe,EAAS,EAAM,OAAO,EAAM,YAAY;EACvD,gBAAgB;EAChB,gBAAgB,EAAQ,EAAM;EAC9B,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,mBAAmB;EACnB,mBAAmB;EACnB,cAAc;EACd,cAAc;EACd,gBAAgB;EAChB,oBAAoB;EACpB,aAAa;EACb,eAAe;EACf,kBAAkB;EAClB,wBAAwB;EACxB,iBAAiB,GAAQ,KAAY,KAAmB;EACxD,eAAe,EAAM;EACrB,OAAO;GACH,WAAW;GACX,mBAAmB;GACnB,aAAa,EAAO,SAAS;GAC7B,YAAY,GAAG,IAAU,IAAqB,GAAO,QAAQ;GAC7D,oBAAoB,IAAkB,SAAS,GAAG,GAAc;GAChE,GAAG;GACH,GAAG,EAAM;GACZ;EACD,iBAAe;AAGX,GAFA,EAAW,GAAM,EACjB,EAAkB,KAAK,EACvB,GAAgB,UAAU;;EAE9B,gBAAgB,MAAQ;AAChB,KAAM,WAAW,MACjB,MAAY,CAAC,MACjB,GAAc,0BAAU,IAAI,MAAM,EAClC,EAAsB,GAAO,QAAQ,EAErC,EAAM,OAAO,kBAAkB,EAAM,UAAU,EAC3C,EAAM,OAAO,YAAY,aAC7B,EAAW,GAAK,EAChB,GAAgB,UAAU;IACtB,GAAG,EAAM;IACT,GAAG,EAAM;IACZ;;EAEL,mBAAiB;AAEb,OAAI,KAAY,CAAC,EAAa;AAC9B,MAAgB,UAAU;GAC1B,IAAM,IAAe,OAA6B,EAAS,SAA8C,MAAM,iBAAiB,mBAAmB,CAAC,QAAQ,MAAM,GAAG,IAAK,EAAE,EACtK,IAAe,OAA8B,EAAS,SAA+C,MAAM,iBAAiB,mBAAmB,CAAC,QAAQ,MAAM,GAAG,IAAK,EAAE,EACxK,qBAAY,IAAI,MAAM,EAAC,SAAS,GAA8B,GAAc,SAAmD,SAAS,EACxI,IAAc,MAAmB,MAAM,IAAe,GACtD,IAAW,KAAK,IAAI,EAAY,GAAG;AACzC,OAAI,KAAK,IAAI,EAAY,IAAI,MAAmB,IAAW,KAAM;AAS7D,IARA,EAAsB,GAAO,QAAQ,EACrC,EAAM,aAAa,QAAgB,EAAM,UAAU,KAAK,GAAO,EAAM,EAEjE,EADA,MAAmB,MACE,IAAe,IAAI,UAAU,SAE7B,IAAe,IAAI,SAAS,KAAK,EAE1D,IAAa,EACb,EAAY,GAAK;AACjB;UACG;IACH,IAAI,GAAoB;AAExB,KADC,IAAqB,EAAS,YAAY,QAAgB,EAAmB,MAAM,YAAY,oBAAoB,MAAM,GACzH,IAAqB,EAAS,YAAY,QAAgB,EAAmB,MAAM,YAAY,oBAAoB,MAAM;;AAI9H,GAFA,GAAY,GAAM,EAClB,EAAW,GAAM,EACjB,EAAkB,KAAK;;EAE3B,gBAAgB,MAAQ;GACpB,IACA,GAAmB;AAGnB,OAFI,CAAC,GAAgB,WAAW,CAAC,KACc,OAAO,cAAc,EAA0C,UAAU,CAAC,SAAU,EAChH;GACnB,IAAM,IAAS,EAAM,UAAU,GAAgB,QAAQ,GACjD,IAAS,EAAM,UAAU,GAAgB,QAAQ,GAEjD,IAA4C,EAAM,mBAAoD,GAA0B,EAAS;AAE/I,GAAI,CAAC,MAAmB,KAAK,IAAI,EAAO,GAAG,KAAK,KAAK,IAAI,EAAO,GAAG,MAC/D,EAAkB,KAAK,IAAI,EAAO,GAAG,KAAK,IAAI,EAAO,GAAG,MAAM,IAAI;GAEtE,IAAI,IAAc;IACd,GAAG;IACH,GAAG;IACN,EACK,KAAgB,MAEX,KAAK,MADG,KAAK,IAAI,EAAM,GAAG;AAIrC,OAAI,MAAmB;QAEf,EAAgB,SAAS,MAAM,IAAI,EAAgB,SAAS,SAAS,CACrE,KAAI,EAAgB,SAAS,MAAM,IAAI,IAAS,KAAK,EAAgB,SAAS,SAAS,IAAI,IAAS,EAChG,GAAY,IAAI;SACb;KAEH,IAAM,IAAgB,IAAS,EAAa,EAAO;AAEnD,OAAY,IAAI,KAAK,IAAI,EAAc,GAAG,KAAK,IAAI,EAAO,GAAG,IAAgB;;cAG9E,MAAmB,QAEtB,EAAgB,SAAS,OAAO,IAAI,EAAgB,SAAS,QAAQ,EACrE,KAAI,EAAgB,SAAS,OAAO,IAAI,IAAS,KAAK,EAAgB,SAAS,QAAQ,IAAI,IAAS,EAChG,GAAY,IAAI;QACb;IAEH,IAAM,IAAgB,IAAS,EAAa,EAAO;AAEnD,MAAY,IAAI,KAAK,IAAI,EAAc,GAAG,KAAK,IAAI,EAAO,GAAG,IAAgB;;AAQzF,IAJI,KAAK,IAAI,EAAY,EAAE,GAAG,KAAK,KAAK,IAAI,EAAY,EAAE,GAAG,MACzD,GAAY,GAAK,GAEpB,IAAoB,EAAS,YAAY,QAAgB,EAAkB,MAAM,YAAY,oBAAoB,GAAG,EAAY,EAAE,IAAI,GACtI,IAAqB,EAAS,YAAY,QAAgB,EAAmB,MAAM,YAAY,oBAAoB,GAAG,EAAY,EAAE,IAAI;;EAEhJ,EAAE,MAAe,CAAC,EAAM,OAAO,MAAc,YAA0B,kBAAM,cAAc,UAAU;EAClG,cAAc;EACd,iBAAiB;EACjB,qBAAqB;EACrB,SAAS,MAAY,CAAC,UAAkB,WAAS;AAE7C,GADA,IAAa,EACb,EAAM,aAAa,QAAgB,EAAM,UAAU,KAAK,GAAO,EAAM;;EAEzE,WAAWA,GAAG,GAAyC,aAAa,GAAqD,YAAkD,YAAY;EAC1L,EAAkB,GAA+B,SAAgC,GAAU,GAAG,OAAO,KAAa,EAAM,QAAQ,EAAM,YAAY,EAAM,SAAS,SAAU,IAA+B,OAAgB,QAAQ,EAAM,QAAsB,kBAAM,cAAc,OAAO;EACtR,aAAa;EACb,WAAWA,GAAG,GAAyC,MAAM,GAAqD,YAAkD,KAAK;EAC5K,EAAE,EAAM,WAAW,EAAM,SAAS,aAAa,CAAC,EAAM,OAAO,EAAM,QAAQ,IAAgB,GAAG,MAAM,EAAM,SAAS,YAAmB,OAAP,GAAY,GAAG,MAAoB,kBAAM,cAAc,OAAO;EAC1L,gBAAgB;EAChB,WAAWA,GAAG,GAAyC,SAAS,GAAqD,YAAkD,QAAQ;EAClL,EAAgB,kBAAM,cAAc,OAAO;EACxC,cAAc;EACd,WAAWA,GAAG,GAAyC,OAAO,GAAqD,YAAkD,MAAM;EAC9K,EAAE,EAAM,MAAM,EAAM,MAAM,OAAO,EAAM,SAAU,aAAa,EAAM,OAAO,GAAG,EAAM,MAAM,EAAE,EAAM,cAA4B,kBAAM,cAAc,OAAO;EACtJ,oBAAoB;EACpB,WAAWA,GAAG,GAAsB,IAA2B,GAAyC,aAAa,GAAqD,YAAkD,YAAY;EAC3O,EAAE,OAAO,EAAM,eAAgB,aAAa,EAAM,aAAa,GAAG,EAAM,YAAY,GAAG,KAAK,EAAgB,kBAAM,eAAe,EAAM,OAAO,GAAG,EAAM,SAAS,EAAM,UAAU,GAAS,EAAM,OAAO,GAAiB,kBAAM,cAAc,UAAU;EAClP,eAAe;EACf,eAAe;EACf,OAAO,EAAM,qBAAqB;EAClC,UAAU,MAAQ;AAET,MAAS,EAAM,OAAO,IACtB,MACL,EAAM,OAAO,WAAW,QAAgB,EAAM,OAAO,QAAQ,KAAK,EAAM,QAAQ,EAAM,EACtF,IAAa;;EAEjB,WAAWA,GAAG,GAAyC,cAAc,GAAqD,YAAkD,aAAa;EAC5L,EAAE,EAAM,OAAO,MAAM,GAAG,MAAoB,kBAAM,eAAe,EAAM,OAAO,GAAG,EAAM,SAAS,EAAM,UAAU,GAAS,EAAM,OAAO,GAAiB,kBAAM,cAAc,UAAU;EAClL,eAAe;EACf,eAAe;EACf,OAAO,EAAM,qBAAqB;EAClC,UAAU,MAAQ;AAET,MAAS,EAAM,OAAO,KAC3B,EAAM,OAAO,WAAW,QAAgB,EAAM,OAAO,QAAQ,KAAK,EAAM,QAAQ,EAAM,EAClF,GAAM,oBACV,IAAa;;EAEjB,WAAWA,GAAG,GAAyC,cAAc,GAAqD,YAAkD,aAAa;EAC5L,EAAE,EAAM,OAAO,MAAM,GAAG,KAAK;;AAElC,SAAS,KAAuB;AAE5B,KADI,OAAO,SAAW,OAClB,OAAO,WAAa,IAAa,QAAO;CAC5C,IAAM,IAAe,SAAS,gBAAgB,aAAa,MAAM;AAIjE,QAHI,MAAiB,UAAU,CAAC,IACrB,OAAO,iBAAiB,SAAS,gBAAgB,CAAC,YAEtD;;AAEX,SAAS,GAAa,GAAe,GAAc;CAC/C,IAAM,IAAS,EAAE;AAqCjB,QApCA,CACI,GACA,EACH,CAAC,SAAS,GAAQ,MAAQ;EACvB,IAAM,IAAW,MAAU,GACrB,IAAS,IAAW,oBAAoB,YACxC,IAAe,IAAW,KAAyB;EACzD,SAAS,EAAU,GAAQ;AACvB;IACI;IACA;IACA;IACA;IACH,CAAC,SAAS,MAAM;AACb,MAAO,GAAG,EAAO,GAAG,OAAS,OAAO,KAAW,WAAW,GAAG,EAAO,MAAM;KAC5E;;AAEN,EAAI,OAAO,KAAW,YAAY,OAAO,KAAW,WAChD,EAAU,EAAO,GACV,OAAO,KAAW,WACzB;GACI;GACA;GACA;GACA;GACH,CAAC,SAAS,MAAM;AACb,GAAI,EAAO,OAAS,KAAA,IAChB,EAAO,GAAG,EAAO,GAAG,OAAS,IAE7B,EAAO,GAAG,EAAO,GAAG,OAAS,OAAO,EAAO,MAAS,WAAW,GAAG,EAAO,GAAK,MAAM,EAAO;IAEjG,GAEF,EAAU,EAAa;GAE7B,EACK;;AA2CX,IAAMC,KAAwB,kBAAM,WAAW,SAAiB,GAAO,GAAK;CACxE,IAAM,EAAE,OAAI,WAAQ,cAAW,gBAAgB,YAAS,CACpD,UACA,OACH,EAAE,WAAQ,gBAAa,cAAW,WAAQ,iBAAc,WAAQ,SAAS,eAAY,aAAU,UAAO,mBAAgB,IAAuB,iBAAc,SAAM,IAAsB,EAAE,SAAM,IAAK,UAAO,wBAAqB,oBAAoB,GAC/O,CAAC,GAAQ,KAAa,EAAM,SAAS,EAAE,CAAC,EACxC,IAAiB,EAAM,cACrB,IACO,EAAO,QAAQ,MAAQ,EAAM,cAAc,EAAG,GAElD,EAAO,QAAQ,MAAQ,CAAC,EAAM,UAAU,EAChD,CACC,GACA,EACH,CAAC,EACI,IAAoB,EAAM,cACrB,MAAM,KAAK,IAAI,IAAI,CACtB,EACH,CAAC,OAAO,EAAe,QAAQ,MAAQ,EAAM,SAAS,CAAC,KAAK,MAAQ,EAAM,SAAS,CAAC,CAAC,CAAC,EACxF,CACC,GACA,EACH,CAAC,EACI,CAAC,GAAS,KAAc,EAAM,SAAS,EAAE,CAAC,EAC1C,CAAC,GAAU,KAAe,EAAM,SAAS,GAAM,EAC/C,CAAC,GAAa,KAAkB,EAAM,SAAS,GAAM,EACrD,CAAC,GAAa,KAAkB,EAAM,SAAS,MAAU,WAAmB,OAAO,SAAW,OAAc,OAAO,cAAc,OAAO,WAAW,+BAA+B,CAAC,UAAU,SAAS,UAAlI,EAAoJ,EACxN,IAAU,EAAM,OAAO,KAAK,EAC5B,IAAc,EAAO,KAAK,IAAI,CAAC,QAAQ,QAAQ,GAAG,CAAC,QAAQ,UAAU,GAAG,EACxE,IAAwB,EAAM,OAAO,KAAK,EAC1C,IAAmB,EAAM,OAAO,GAAM,EACtC,KAAc,EAAM,aAAa,MAAgB;AACnD,KAAW,OAEe,EAAO,MAAM,MAAQ,EAAM,OAAO,EAAc,GAAG,EAAkC,UACvG,EAAW,QAAQ,EAAc,GAAG,EAEjC,EAAO,QAAQ,EAAE,YAAO,MAAO,EAAc,GAAG,EACzD;IACH,EAAE,CAAC;AA4HN,QA3HA,EAAM,gBACK,EAAW,WAAW,MAAQ;AACjC,MAAI,EAAM,SAAS;AAEf,+BAA0B;AACtB,OAAW,MAAS,EAAO,KAAK,MAAI,EAAE,OAAO,EAAM,KAAK;KAC5C,GAAG;KACH,QAAQ;KACX,GAAG,EAAE,CAAC;KACjB;AACF;;AAGJ,mBAAe;AACX,KAAS,gBAAc;AACnB,OAAW,MAAS;KAChB,IAAM,IAAuB,EAAO,WAAW,MAAI,EAAE,OAAO,EAAM,GAAG;AAYrE,YAVI,MAAyB,KAUtB,CACH,GACA,GAAG,EACN,GAZU;MACH,GAAG,EAAO,MAAM,GAAG,EAAqB;MACxC;OACI,GAAG,EAAO;OACV,GAAG;OACN;MACD,GAAG,EAAO,MAAM,IAAuB,EAAE;MAC5C;MAMP;KACJ;IACJ;GACJ,EACH,CACC,EACH,CAAC,EACF,EAAM,gBAAc;AAChB,MAAI,MAAU,UAAU;AACpB,KAAe,EAAM;AACrB;;AAYJ,MAVI,MAAU,aAEN,OAAO,cAAc,OAAO,WAAW,+BAA+B,CAAC,UAEvE,EAAe,OAAO,GAGtB,EAAe,QAAQ,GAG3B,OAAO,SAAW,IAAa;EACnC,IAAM,IAAiB,OAAO,WAAW,+BAA+B;AACxE,MAAI;AAEA,KAAe,iBAAiB,WAAW,EAAE,iBAAY;AACrD,IACI,EADA,IACe,SAEA,QAAQ;KAE7B;UACU;AAEZ,KAAe,aAAa,EAAE,iBAAY;AACtC,QAAI;AACA,KACI,EADA,IACe,SAEA,QAAQ;aAEtB,GAAG;AACR,aAAQ,MAAM,EAAE;;KAEtB;;IAEP,CACC,EACH,CAAC,EACF,EAAM,gBAAc;AAEhB,EAAI,EAAO,UAAU,KACjB,EAAY,GAAM;IAEvB,CACC,EACH,CAAC,EACF,EAAM,gBAAc;EAChB,IAAM,KAAiB,MAAQ;AAG3B,OADwB,EAAO,OAAO,MAAM,EAAM,MAAQ,EAAM,SAAS,EAAI,EACxD;IACjB,IAAI;AAEJ,IADA,EAAY,GAAK,GAChB,IAAoB,EAAQ,YAAY,QAAgB,EAAkB,OAAO;;AAEtF,GAAI,EAAM,SAAS,aAAa,SAAS,kBAAkB,EAAQ,WAAgC,EAAQ,SAA6C,SAAS,SAAS,cAAc,KACpL,EAAY,GAAM;;AAI1B,SADA,SAAS,iBAAiB,WAAW,EAAc,QACxC,SAAS,oBAAoB,WAAW,EAAc;IAClE,CACC,EACH,CAAC,EACF,EAAM,gBAAc;AAChB,MAAI,EAAQ,QACR,cAAW;AACP,GAAI,EAAsB,YACtB,EAAsB,QAAQ,MAAM,EAChC,eAAe,IAClB,CAAC,EACF,EAAsB,UAAU,MAChC,EAAiB,UAAU;;IAIxC,CACC,EAAQ,QACX,CAAC,EAEY,kBAAM,cAAc,WAAW;EACpC;EACL,cAAc,GAAG,EAAmB,GAAG;EACvC,UAAU;EACV,aAAa;EACb,iBAAiB;EACjB,eAAe;EACf,0BAA0B;EAC7B,EAAE,EAAkB,KAAK,GAAU,MAAQ;EAExC,IAAM,CAAC,GAAG,KAAK,EAAS,MAAM,IAAI;AAElC,SADK,EAAe,SACC,kBAAM,cAAc,MAAM;GAC3C,KAAK;GACL,KAAK,MAAQ,SAAS,IAAsB,GAAG;GAC/C,UAAU;GACV,KAAK;GACM;GACX,uBAAuB;GACvB,qBAAqB;GACrB,mBAAmB;GACnB,mBAAmB;GACnB,OAAO;IACH,wBAAwB,GAAiB,EAAQ,IAAiC,UAAW,EAAE;IAC/F,WAAW,GAAG,GAAY;IAC1B,SAAS,GAAG,EAAI;IAChB,GAAG;IACH,GAAG,GAAa,GAAQ,EAAa;IACxC;GACD,SAAS,MAAQ;AACb,IAAI,EAAiB,WAAW,CAAC,EAAM,cAAc,SAAS,EAAM,cAAc,KAC9E,EAAiB,UAAU,IAC3B,AAII,EAAsB,aAHtB,EAAsB,QAAQ,MAAM,EAChC,eAAe,IAClB,CAAC,EAC8B;;GAI5C,UAAU,MAAQ;AACW,MAAM,kBAAkB,eAAe,EAAM,OAAO,QAAQ,gBAAgB,WAEhG,EAAiB,YAClB,EAAiB,UAAU,IAC3B,EAAsB,UAAU,EAAM;;GAG9C,oBAAkB,EAAY,GAAK;GACnC,mBAAiB,EAAY,GAAK;GAClC,oBAAkB;AAEd,IAAK,KACD,EAAY,GAAM;;GAG1B,iBAAe,EAAY,GAAM;GACjC,gBAAgB,MAAQ;AACK,MAAM,kBAAkB,eAAe,EAAM,OAAO,QAAQ,gBAAgB,WAErG,EAAe,GAAK;;GAExB,mBAAiB,EAAe,GAAM;GACzC,EAAE,EAAe,QAAQ,MAAQ,CAAC,EAAM,YAAY,MAAU,KAAK,EAAM,aAAa,EAAS,CAAC,KAAK,GAAO,MAEpF,kBAAM,cAAc,IAAO;GAC5C,KAAK,EAAM;GACJ;GACA;GACA;GACP,mBAAmB;GACnB,UAAoC,GAA6C,YAA6C;GAC9H,WAAW,GAA6C;GACxD,sBAAsB,GAA6C;GAC3D;GACO;GACf,aAA0C,GAA6C,eAAmD;GAC7H;GACH;GACV,OAAO,GAA6C;GACpD,UAAU,GAA6C;GACvD,YAAY,GAA6C;GACzD,mBAAmB,GAA6C;GAChE,mBAAmB,GAA6C;GAChE,sBAAsB,GAA6C;GACtD;GACb,QAAQ,EAAe,QAAQ,MAAI,EAAE,YAAY,EAAM,SAAS;GAChE,SAAS,EAAQ,QAAQ,MAAI,EAAE,YAAY,EAAM,SAAS;GAC9C;GACZ,iBAAiB;GACZ;GACK;GACV,iBAAiB,EAAM;GAC1B,CAAC,CACJ,CAAC,GAnFgC;GAoFrC,CAAC;EACL;;;ACxmCF,SAAgB,GAAQ,EAAE,GAAG,KAAuB;AAClD,QACE,kBAAC,IAAD;EAIE,UAAS;EAKT,YAAA;EAGA,aAAA;EAIA,eAAe;EAGf,QAAQ;EACR,cAAc;GAGZ,OAAO,EAAE,OAAO,SAAS;GAKzB,YAAY;IACV,OAAO,EACL,eACA,6DACA,0DACA,yDACD;IACD,aAAa,EAAG,uCAAuC;IACvD,cAAc,EACZ,mEACD;IACD,cAAc,EACZ,+DACD;IAoBD,aAAa,EACX,qBACA,8BAKA,iDACA,+DAEA,mCACD;IACF;GACF;EACD,GAAI;EACJ,CAAA;;;;ACpDN,SAAS,GAAiB,GAAS,GAAO;AACxC,QAAO,OAAO,KAAY,aAAa,EAAQ,EAAM,GAAG;;AAK1D,SAAS,GAAiB,GAAK,GAAU;AACvC,SAAO,MAAW;AAChB,IAAS,UAAS,OACT;GACL,GAAG;IACF,IAAM,GAAiB,GAAS,EAAI,GAAK;GAC3C,EACD;;;AAGN,SAASC,GAAW,GAAG;AACrB,QAAO,aAAa;;AAEtB,SAAS,GAAc,GAAG;AACxB,QAAO,MAAM,QAAQ,EAAE,IAAI,EAAE,OAAM,MAAO,OAAO,KAAQ,SAAS;;AAEpE,SAAS,GAAU,GAAK,GAAa;CACnC,IAAM,IAAO,EAAE,EACT,KAAU,MAAU;AACxB,IAAO,SAAQ,MAAQ;AACrB,KAAK,KAAK,EAAK;GACf,IAAM,IAAW,EAAY,EAAK;AAClC,GAAI,KAAY,QAAQ,EAAS,UAC/B,EAAQ,EAAS;IAEnB;;AAGJ,QADA,EAAQ,EAAI,EACL;;AAET,SAASC,EAAK,GAAS,GAAI,GAAM;CAC/B,IAAI,IAAO,EAAE,EACT;AACJ,SAAO,MAAW;EAChB,IAAI;AACJ,EAAI,EAAK,OAAO,EAAK,UAAO,IAAU,KAAK,KAAK;EAChD,IAAM,IAAU,EAAQ,EAAQ;AAEhC,MAAI,EADgB,EAAQ,WAAW,EAAK,UAAU,EAAQ,MAAM,GAAK,MAAU,EAAK,OAAW,EAAI,EAErG,QAAO;AAET,MAAO;EACP,IAAI;AAIJ,MAHI,EAAK,OAAO,EAAK,UAAO,IAAa,KAAK,KAAK,GACnD,IAAS,EAAG,GAAG,EAAQ,EACvB,KAAQ,QAAQ,EAAK,YAAY,QAAQ,EAAK,SAAS,EAAO,EAC1D,EAAK,OAAO,EAAK,SACf,KAAQ,QAAQ,EAAK,OAAO,EAAE;GAChC,IAAM,IAAa,KAAK,OAAO,KAAK,KAAK,GAAG,KAAW,IAAI,GAAG,KACxD,IAAgB,KAAK,OAAO,KAAK,KAAK,GAAG,KAAc,IAAI,GAAG,KAC9D,IAAsB,IAAgB,IACtC,KAAO,GAAK,MAAQ;AAExB,SADA,IAAM,OAAO,EAAI,EACV,EAAI,SAAS,GAClB,KAAM,MAAM;AAEd,WAAO;;AAET,WAAQ,KAAK,OAAO,EAAI,GAAe,EAAE,CAAC,IAAI,EAAI,GAAY,EAAE,CAAC,MAAM;;;yBAGtD,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,MAAM,GAAqB,IAAI,CAAC,CAAC,iBAAiB,GAA6B,IAAI;;AAGnI,SAAO;;;AAGX,SAAS,EAAe,GAAc,GAAY,GAAK,GAAU;AAC/D,QAAO;EACL,aAEkC,GAA6C,YAA4C,EAAa;EAExI,KAAA,QAAA,IAAA,aAA8B,iBAAiB;EAC/C;EACD;;AAGH,SAAS,GAAW,GAAO,GAAK,GAAQ,GAAU;CAKhD,IAAM,IAAO;EACX,IAAI,GAAG,EAAI,GAAG,GAAG,EAAO;EACxB;EACA;EACA,gBAAgB,EAAI,SAAS,EAAS;EACtC,mBAPyB,EAAK,UAAU,IAA6B,EAAM,QAAQ;EAQnF,YAAYA,QAAW;GAAC;GAAO;GAAQ;GAAK;GAAK,GAAG,GAAO,GAAQ,GAAK,OAAU;GAChF;GACA;GACA;GACM;GACN,UAAU,EAAK;GACf,aAAa,EAAK;GACnB,GAAG,EAAe,EAAM,SAAS,cAAc,kBAAkB,CAAC;EACpE;AAID,QAHA,EAAM,UAAU,SAAQ,MAAW;AACjC,IAAQ,cAAc,QAAQ,EAAQ,WAAW,GAAM,GAAQ,GAAK,EAAM;IACzE,EAAE,CAAC,EACC;;AAGT,SAAS,GAAa,GAAO,GAAW,GAAO,GAAQ;CAGrD,IAAM,IAAoB;EACxB,GAFoB,EAAM,sBAAsB;EAGhD,GAAG;EACJ,EACK,IAAc,EAAkB,aAClC,IAAsC,EAAkB,OAAsC,IAAc,OAAO,OAAO,UAAU,cAAe,aAAa,EAAY,WAAW,KAAK,IAAI,GAAG,EAAY,QAAQ,OAAO,IAAI,GAAG,KAAA,OAA4B,OAAO,EAAkB,UAAW,WAAW,EAAkB,SAAS,KAAA,IAC3U;AAqBJ,KApBI,EAAkB,aACpB,IAAa,EAAkB,aACtB,MAET,AAaE,IAbE,EAAY,SAAS,IAAI,IACd,MAAe;EAC1B,IAAI,IAAS;AACb,OAAK,IAAM,KAAO,EAAY,MAAM,IAAI,CAGtC,CADA,IAAoB,IAAmC,IACvD,QAAA,IAAA,aAA6B,gBAAgB,MAAW,KAAA,KACtD,QAAQ,KAAK,IAAI,EAAI,0BAA0B,EAAY,uBAAuB;AAGtF,SAAO;MAGI,MAAe,EAAY,EAAkB,eAG1D,CAAC,EAIH,OAHA,QAAA,IAAA,aAA6B,eAGnB,OAAO,GAFL,MAAM,EAAkB,aAAa,mDAAmD,uDAAuD;CAI7J,IAAI,IAAS;EACX,IAAI,GAAG,OAAO,EAAG;EACjB;EACQ;EACR;EACA,WAAW;EACX,SAAS,EAAE;EACX,gBAAgBA,QAAW,CAAC,GAAK,QAExB,CAAC,GAAQ,GAAuB,EAAO,SAA4C,SAAQ,MAAK,EAAE,gBAAgB,CAAC,CAAE,EAC3H,EAAe,EAAM,SAAS,gBAAgB,wBAAwB,CAAC;EAC1E,gBAAgBA,QAAW,CAAC,EAAM,oBAAoB,CAAC,GAAE,MAAgB;GACvE,IAAI;AAKJ,WAJK,IAAmB,EAAO,YAAY,QAAQ,EAAiB,SAE3D,EADW,EAAO,QAAQ,SAAQ,MAAU,EAAO,gBAAgB,CAAC,CAC3C,GAE3B,CAAC,EAAO;KACd,EAAe,EAAM,SAAS,gBAAgB,wBAAwB,CAAC;EAC3E;AACD,MAAK,IAAM,KAAW,EAAM,UAC1B,GAAQ,gBAAgB,QAAQ,EAAQ,aAAa,GAAQ,EAAM;AAIrE,QAAO;;AAGT,IAAM,IAAQ;AAGd,SAAS,GAAa,GAAO,GAAQ,GAAS;CAG5C,IAAI,IAAS;EACX,IAFwB,EAAQ,MAA4B,EAAO;EAGnE;EACA,OAAO,EAAQ;EACf,eAAe,CAAC,CAAC,EAAQ;EACzB,eAAe,EAAQ;EACvB,OAAO,EAAQ;EACf,YAAY,EAAE;EACd,SAAS;EACT,SAAS;EACT,aAAa;EACb,sBAAsB;GACpB,IAAM,IAAc,EAAE,EAChB,KAAgB,MAAK;AAIzB,IAHI,EAAE,cAAc,EAAE,WAAW,UAC/B,EAAE,WAAW,IAAI,EAAc,EAEjC,EAAY,KAAK,EAAE;;AAGrB,UADA,EAAc,EAAO,EACd;;EAET,mBAAmB;GACjB;GACQ;GACR;GACD;EACF;AAID,QAHA,EAAM,UAAU,SAAQ,MAAW;AACjC,IAAQ,gBAAgB,QAAQ,EAAQ,aAAa,GAAQ,EAAM;GACnE,EACK;;AAET,IAAM,KAAU,EACd,cAAa,MAAS;AAoFpB,CAjFA,EAAM,kBAAkBA,QAAW;EAAC,EAAM,eAAe;EAAE,EAAM,uBAAuB;EAAE,EAAM,UAAU,CAAC,cAAc;EAAM,EAAM,UAAU,CAAC,cAAc;EAAM,GAAG,GAAY,GAAa,GAAM,MAAU;EAE9M,IAAM,IAAkC,GAA6B,KAAI,MAAY,EAAY,MAAK,MAAK,EAAE,OAAO,EAAS,CAAC,CAAC,OAAO,QAAQ,IAA+B,EAAE,EACzK,IAAoC,GAA+B,KAAI,MAAY,EAAY,MAAK,MAAK,EAAE,OAAO,EAAS,CAAC,CAAC,OAAO,QAAQ,IAAgC,EAAE,EAC9K,IAAgB,EAAY,QAAO,MAAU,EAAE,KAAQ,QAAQ,EAAK,SAAS,EAAO,GAAG,KAAK,EAAE,KAAS,QAAQ,EAAM,SAAS,EAAO,GAAG,EAAE;AAEhJ,SADqB,GAAkB,GAAY;GAAC,GAAG;GAAa,GAAG;GAAe,GAAG;GAAa,EAAE,EAAM;IAE7G,EAAe,EAAM,SAAS,GAAO,kBAAkB,CAAC,EAC3D,EAAM,wBAAwBA,QAAW;EAAC,EAAM,eAAe;EAAE,EAAM,uBAAuB;EAAE,EAAM,UAAU,CAAC,cAAc;EAAM,EAAM,UAAU,CAAC,cAAc;EAAM,GAAG,GAAY,GAAa,GAAM,OAC1M,IAAc,EAAY,QAAO,MAAU,EAAE,KAAQ,QAAQ,EAAK,SAAS,EAAO,GAAG,KAAK,EAAE,KAAS,QAAQ,EAAM,SAAS,EAAO,GAAG,EAAE,EACjI,GAAkB,GAAY,GAAa,GAAO,SAAS,GACjE,EAAe,EAAM,SAAS,GAAO,wBAAwB,CAAC,EACjE,EAAM,sBAAsBA,QAAW;EAAC,EAAM,eAAe;EAAE,EAAM,uBAAuB;EAAE,EAAM,UAAU,CAAC,cAAc;EAAK,GAAG,GAAY,GAAa,MAGrJ,GAAkB,GADuB,GAA6B,KAAI,MAAY,EAAY,MAAK,MAAK,EAAE,OAAO,EAAS,CAAC,CAAC,OAAO,QAAQ,IAAgC,EAAE,EAC/H,GAAO,OAAO,EACtE,EAAe,EAAM,SAAS,GAAO,sBAAsB,CAAC,EAC/D,EAAM,uBAAuBA,QAAW;EAAC,EAAM,eAAe;EAAE,EAAM,uBAAuB;EAAE,EAAM,UAAU,CAAC,cAAc;EAAM,GAAG,GAAY,GAAa,MAGvJ,GAAkB,GADwB,GAA+B,KAAI,MAAY,EAAY,MAAK,MAAK,EAAE,OAAO,EAAS,CAAC,CAAC,OAAO,QAAQ,IAAiC,EAAE,EACnI,GAAO,QAAQ,EACvE,EAAe,EAAM,SAAS,GAAO,uBAAuB,CAAC,EAIhE,EAAM,kBAAkBA,QAAW,CAAC,EAAM,iBAAiB,CAAC,GAAE,MACrD,CAAC,GAAG,EAAa,CAAC,SAAS,EACjC,EAAe,EAAM,SAAS,GAAO,kBAAkB,CAAC,EAC3D,EAAM,sBAAsBA,QAAW,CAAC,EAAM,qBAAqB,CAAC,GAAE,MAC7D,CAAC,GAAG,EAAa,CAAC,SAAS,EACjC,EAAe,EAAM,SAAS,GAAO,sBAAsB,CAAC,EAC/D,EAAM,wBAAwBA,QAAW,CAAC,EAAM,uBAAuB,CAAC,GAAE,MACjE,CAAC,GAAG,EAAa,CAAC,SAAS,EACjC,EAAe,EAAM,SAAS,GAAO,wBAAwB,CAAC,EACjE,EAAM,uBAAuBA,QAAW,CAAC,EAAM,sBAAsB,CAAC,GAAE,MAC/D,CAAC,GAAG,EAAa,CAAC,SAAS,EACjC,EAAe,EAAM,SAAS,GAAO,uBAAuB,CAAC,EAIhE,EAAM,iBAAiBA,QAAW,CAAC,EAAM,iBAAiB,CAAC,GAAE,MACpD,EAAa,KAAI,MACf,EAAY,QACnB,CAAC,MAAM,EACR,EAAe,EAAM,SAAS,GAAO,iBAAiB,CAAC,EAC1D,EAAM,qBAAqBA,QAAW,CAAC,EAAM,qBAAqB,CAAC,GAAE,MAC5D,EAAK,KAAI,MACP,EAAY,QACnB,CAAC,MAAM,EACR,EAAe,EAAM,SAAS,GAAO,qBAAqB,CAAC,EAC9D,EAAM,uBAAuBA,QAAW,CAAC,EAAM,uBAAuB,CAAC,GAAE,MAChE,EAAK,KAAI,MACP,EAAY,QACnB,CAAC,MAAM,EACR,EAAe,EAAM,SAAS,GAAO,uBAAuB,CAAC,EAChE,EAAM,sBAAsBA,QAAW,CAAC,EAAM,sBAAsB,CAAC,GAAE,MAC9D,EAAK,KAAI,MACP,EAAY,QACnB,CAAC,MAAM,EACR,EAAe,EAAM,SAAS,GAAO,sBAAsB,CAAC,EAI/D,EAAM,uBAAuBA,QAAW,CAAC,EAAM,sBAAsB,CAAC,GAAE,MAC/D,EAAY,QAAO,MAAU;EAClC,IAAI;AACJ,SAAO,GAAG,IAAqB,EAAO,eAAe,QAAQ,EAAmB;GAChF,EACD,EAAe,EAAM,SAAS,GAAO,uBAAuB,CAAC,EAChE,EAAM,qBAAqBA,QAAW,CAAC,EAAM,oBAAoB,CAAC,GAAE,MAC3D,EAAY,QAAO,MAAU;EAClC,IAAI;AACJ,SAAO,GAAG,IAAsB,EAAO,eAAe,QAAQ,EAAoB;GAClF,EACD,EAAe,EAAM,SAAS,GAAO,qBAAqB,CAAC,EAC9D,EAAM,sBAAsBA,QAAW,CAAC,EAAM,qBAAqB,CAAC,GAAE,MAC7D,EAAY,QAAO,MAAU;EAClC,IAAI;AACJ,SAAO,GAAG,IAAsB,EAAO,eAAe,QAAQ,EAAoB;GAClF,EACD,EAAe,EAAM,SAAS,GAAO,sBAAsB,CAAC,EAC/D,EAAM,iBAAiBA,QAAW;EAAC,EAAM,qBAAqB;EAAE,EAAM,uBAAuB;EAAE,EAAM,sBAAsB;EAAC,GAAG,GAAM,GAAQ,MAEpI;EAAC,GAAiC,EAAK,IAA8B,WAAqC,EAAE;EAAG,GAAqC,EAAO,IAAgC,WAAuC,EAAE;EAAG,GAAmC,EAAM,IAA+B,WAAsC,EAAE;EAAE,CAAC,KAAI,MAC5V,EAAO,gBAAgB,CAC9B,CAAC,MAAM,EACR,EAAe,EAAM,SAAS,GAAO,iBAAiB,CAAC;GAE7D;AACD,SAAS,GAAkB,GAAY,GAAgB,GAAO,GAAc;CAQ1E,IAAI,IAAW,GACT,IAAe,SAAU,GAAS,GAAO;AAK7C,EAJI,MAAU,KAAK,MACjB,IAAQ,IAEV,IAAW,KAAK,IAAI,GAAU,EAAM,EACpC,EAAQ,QAAO,MAAU,EAAO,cAAc,CAAC,CAAC,SAAQ,MAAU;GAChE,IAAI;AACJ,IAAK,IAAkB,EAAO,YAAY,QAAQ,EAAgB,UAChE,EAAa,EAAO,SAAS,IAAQ,EAAE;KAExC,EAAE;;AAEP,GAAa,EAAW;CACxB,IAAI,IAAe,EAAE,EACf,KAAqB,GAAgB,MAAU;EAEnD,IAAM,IAAc;GAClB;GACA,IAAI,CAAC,GAAc,GAAG,IAAQ,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;GACxD,SAAS,EAAE;GACZ,EAGK,IAAuB,EAAE;AAyC/B,EAtCA,EAAe,SAAQ,MAAiB;GAGtC,IAAM,IAA4B,CAAC,GAAG,EAAqB,CAAC,SAAS,CAAC,IAChE,IAAe,EAAc,OAAO,UAAU,EAAY,OAC5D,GACA,IAAgB;AASpB,OARI,KAAgB,EAAc,OAAO,SAEvC,IAAS,EAAc,OAAO,UAG9B,IAAS,EAAc,QACvB,IAAgB,KAEd,KAA8B,GAAuE,WAAY,EAEnH,GAA0B,WAAW,KAAK,EAAc;QACnD;IAEL,IAAM,IAAS,GAAa,GAAO,GAAQ;KACzC,IAAI;MAAC;MAAc;MAAO,EAAO;MAAI,GAA+C;MAAG,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;KACjH;KACA,eAAe,IAAgB,GAAG,EAAqB,QAAO,MAAK,EAAE,WAAW,EAAO,CAAC,WAAW,KAAA;KACnG;KACA,OAAO,EAAqB;KAC7B,CAAC;AAMF,IAHA,EAAO,WAAW,KAAK,EAAc,EAGrC,EAAqB,KAAK,EAAO;;AAGnC,GADA,EAAY,QAAQ,KAAK,EAAc,EACvC,EAAc,cAAc;IAC5B,EACF,EAAa,KAAK,EAAY,EAC1B,IAAQ,KACV,EAAkB,GAAsB,IAAQ,EAAE;;AAQtD,CADA,EAJsB,EAAe,KAAK,GAAQ,MAAU,GAAa,GAAO,GAAQ;EACtF,OAAO;EACP;EACD,CAAC,CAAC,EAC8B,IAAW,EAAE,EAC9C,EAAa,SAAS;CAMtB,IAAM,KAAyB,MACL,EAAQ,QAAO,MAAU,EAAO,OAAO,cAAc,CAAC,CACvD,KAAI,MAAU;EACnC,IAAI,IAAU,GACV,IAAU,GACV,IAAgB,CAAC,EAAE;AACvB,EAAI,EAAO,cAAc,EAAO,WAAW,UACzC,IAAgB,EAAE,EAClB,EAAuB,EAAO,WAAW,CAAC,SAAQ,MAAQ;GACxD,IAAI,EACF,SAAS,GACT,SAAS,MACP;AAEJ,GADA,KAAW,GACX,EAAc,KAAK,EAAa;IAChC,IAEF,IAAU;EAEZ,IAAM,IAAkB,KAAK,IAAI,GAAG,EAAc;AAIlD,SAHA,KAAoB,GACpB,EAAO,UAAU,GACjB,EAAO,UAAU,GACV;GACL;GACA;GACD;GACD;AAGJ,QADA,EAAkE,EAAa,IAAsC,WAA2C,EAAE,CAAC,EAC5J;;AAGT,IAAM,MAAa,GAAO,GAAI,GAAU,GAAU,GAAO,GAAS,MAAa;CAC7E,IAAI,IAAM;EACR;EACA,OAAO;EACP;EACA;EACA;EACA,cAAc,EAAE;EAChB,oBAAoB,EAAE;EACtB,WAAU,MAAY;AACpB,OAAI,EAAI,aAAa,eAAe,EAAS,CAC3C,QAAO,EAAI,aAAa;GAE1B,IAAM,IAAS,EAAM,UAAU,EAAS;AAClC,YAAU,QAAQ,EAAO,WAI/B,QADA,EAAI,aAAa,KAAY,EAAO,WAAW,EAAI,UAAU,EAAS,EAC/D,EAAI,aAAa;;EAE1B,kBAAiB,MAAY;AAC3B,OAAI,EAAI,mBAAmB,eAAe,EAAS,CACjD,QAAO,EAAI,mBAAmB;GAEhC,IAAM,IAAS,EAAM,UAAU,EAAS;AAClC,YAAU,QAAQ,EAAO,WAQ/B,QALK,EAAO,UAAU,mBAItB,EAAI,mBAAmB,KAAY,EAAO,UAAU,gBAAgB,EAAI,UAAU,EAAS,EACpF,EAAI,mBAAmB,OAJ5B,EAAI,mBAAmB,KAAY,CAAC,EAAI,SAAS,EAAS,CAAC,EACpD,EAAI,mBAAmB;;EAKlC,cAAa,MAEa,EAAI,SAAS,EAAS,IAA4B,EAAM,QAAQ;EAE1F,SAAS,KAA4B,EAAE;EACvC,mBAAmB,GAAU,EAAI,UAAS,MAAK,EAAE,QAAQ;EACzD,oBAAoB,EAAI,WAAW,EAAM,OAAO,EAAI,UAAU,GAAK,GAAG,KAAA;EACtE,qBAAqB;GACnB,IAAI,IAAa,EAAE,EACf,IAAa;AACjB,YAAa;IACX,IAAM,IAAY,EAAW,cAAc;AAC3C,QAAI,CAAC,EAAW;AAEhB,IADA,EAAW,KAAK,EAAU,EAC1B,IAAa;;AAEf,UAAO,EAAW,SAAS;;EAE7B,aAAaA,QAAW,CAAC,EAAM,mBAAmB,CAAC,GAAE,MAC5C,EAAY,KAAI,MACd,GAAW,GAAO,GAAK,GAAQ,EAAO,GAAG,CAChD,EACD,EAAe,EAAM,SAAS,aAAa,cAAc,CAAC;EAC7D,wBAAwBA,QAAW,CAAC,EAAI,aAAa,CAAC,GAAE,MAC/C,EAAS,QAAQ,GAAK,OAC3B,EAAI,EAAK,OAAO,MAAM,GACf,IACN,EAAE,CAAC,EACL,EAAe,EAAM,SAAS,aAAa,wBAAwB,CAAC;EACxE;AACD,MAAK,IAAI,IAAI,GAAG,IAAI,EAAM,UAAU,QAAQ,KAAK;EAC/C,IAAM,IAAU,EAAM,UAAU;AAChC,OAAW,QAAQ,EAAQ,aAAa,QAAQ,EAAQ,UAAU,GAAK,EAAM;;AAE/E,QAAO;GAKH,KAAiB,EACrB,eAAe,GAAQ,MAAU;AAgB/B,CAfA,EAAO,sBAAsB,EAAM,QAAQ,sBAAsB,EAAM,QAAQ,mBAAmB,GAAO,EAAO,GAAG,EACnH,EAAO,2BACA,EAAO,sBAGL,EAAO,qBAAqB,GAF1B,EAAM,wBAAwB,EAIzC,EAAO,0BAA0B,EAAM,QAAQ,0BAA0B,EAAM,QAAQ,uBAAuB,GAAO,EAAO,GAAG,EAC/H,EAAO,+BACA,EAAO,0BAGL,EAAO,yBAAyB,mBAF9B,IAAI,KAAK,EAIpB,EAAO,0BAA0B,EAAM,QAAQ,0BAA0B,EAAM,QAAQ,uBAAuB,GAAO,EAAO,GAAG,EAC/H,EAAO,+BAA+B;AAC/B,QAAO,wBAGZ,QAAO,EAAO,yBAAyB;;GAG5C,EAEK,MAAkB,GAAK,GAAU,MAAgB;CACrD,IAAI,GAAuB;CAC3B,IAAM,IAAS,KAAe,SAAS,IAAwB,EAAY,UAAU,KAAK,OAAO,KAAK,IAAI,EAAsB,aAAa;AAC7I,QAAO,GAAA,GAAS,IAAgB,EAAI,SAAS,EAAS,KAAK,SAAS,IAAgB,EAAc,UAAU,KAAK,SAAS,IAAgB,EAAc,aAAa,KAAK,SAAgB,EAAc,SAAS,EAAO;;AAE1N,GAAe,cAAa,MAAO,GAAW,EAAI;AAClD,IAAM,MAA2B,GAAK,GAAU,MAAgB;CAC9D,IAAI;AACJ,QAAO,GAAA,GAAS,IAAiB,EAAI,SAAS,EAAS,KAAK,SAAS,IAAiB,EAAe,UAAU,KAAK,SAAgB,EAAe,SAAS,EAAY;;AAE1K,GAAwB,cAAa,MAAO,GAAW,EAAI;AAC3D,IAAM,MAAgB,GAAK,GAAU,MAAgB;CACnD,IAAI;AACJ,UAAS,IAAiB,EAAI,SAAS,EAAS,KAAK,SAAS,IAAiB,EAAe,UAAU,KAAK,OAAO,KAAK,IAAI,EAAe,aAAa,MAAO,GAA2C,aAAa;;AAE1N,GAAa,cAAa,MAAO,GAAW,EAAI;AAChD,IAAM,MAAe,GAAK,GAAU,MAET,EAAI,SAAS,EAAS,EAAoC,SAAS,EAAY;AAE1G,GAAY,cAAa,MAAO,GAAW,EAAI;AAC/C,IAAM,MAAkB,GAAK,GAAU,MAC9B,CAAC,EAAY,MAAK,MAAO;CAC9B,IAAI;AACJ,QAAO,GAAG,IAAiB,EAAI,SAAS,EAAS,KAAK,QAAQ,EAAe,SAAS,EAAI;EAC1F;AAEJ,GAAe,cAAa,MAAO,GAAW,EAAI,IAAI,EAAE,KAAO,QAAQ,EAAI;AAC3E,IAAM,MAAmB,GAAK,GAAU,MAC/B,EAAY,MAAK,MAEG,EAAI,SAAS,EAAS,EAAoC,SAAS,EAAI,CAChG;AAEJ,GAAgB,cAAa,MAAO,GAAW,EAAI,IAAI,EAAE,KAAO,QAAQ,EAAI;AAC5E,IAAM,MAAU,GAAK,GAAU,MACtB,EAAI,SAAS,EAAS,KAAK;AAEpC,GAAO,cAAa,MAAO,GAAW,EAAI;AAC1C,IAAM,MAAc,GAAK,GAAU,MAC1B,EAAI,SAAS,EAAS,IAAI;AAEnC,GAAW,cAAa,MAAO,GAAW,EAAI;AAC9C,IAAM,MAAiB,GAAK,GAAU,MAAgB;CACpD,IAAI,CAAC,GAAK,KAAO,GACX,IAAW,EAAI,SAAS,EAAS;AACvC,QAAO,KAAY,KAAO,KAAY;;AAExC,GAAc,sBAAqB,MAAO;CACxC,IAAI,CAAC,GAAW,KAAa,GACzB,IAAY,OAAO,KAAc,WAAmC,IAAxB,WAAW,EAAU,EACjE,IAAY,OAAO,KAAc,WAAmC,IAAxB,WAAW,EAAU,EACjE,IAAM,MAAc,QAAQ,OAAO,MAAM,EAAU,GAAG,YAAY,GAClE,IAAM,MAAc,QAAQ,OAAO,MAAM,EAAU,GAAG,WAAW;AACrE,KAAI,IAAM,GAAK;EACb,IAAM,IAAO;AAEb,EADA,IAAM,GACN,IAAM;;AAER,QAAO,CAAC,GAAK,EAAI;GAEnB,GAAc,cAAa,MAAO,GAAW,EAAI,IAAI,GAAW,EAAI,GAAG,IAAI,GAAW,EAAI,GAAG;AAI7F,IAAM,KAAY;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,SAAS,GAAW,GAAK;AACvB,QAAO,KAA6B,QAAQ,MAAQ;;AAKtD,IAAM,KAAkB;CACtB,4BACS,EACL,UAAU,QACX;CAEH,kBAAiB,OACR;EACL,eAAe,EAAE;EACjB,GAAG;EACJ;CAEH,oBAAmB,OACV;EACL,uBAAuB,GAAiB,iBAAiB,EAAM;EAC/D,oBAAoB;EACpB,uBAAuB;EACxB;CAEH,eAAe,GAAQ,MAAU;AAuC/B,EAtCA,EAAO,wBAAwB;GAC7B,IACM,IADW,EAAM,iBAAiB,CAAC,SAAS,IACC,SAAS,EAAO,GAAG;AAgBtE,UAfI,OAAO,KAAU,WACZ,GAAU,iBAEf,OAAO,KAAU,WACZ,GAAU,gBAEf,OAAO,KAAU,aAGC,OAAO,KAAU,YAAnC,IACK,GAAU,SAEf,MAAM,QAAQ,EAAM,GACf,GAAU,cAEZ,GAAU;KAEnB,EAAO,oBAEED,GAAW,EAAO,UAAU,SAAS,GAAG,EAAO,UAAU,WAAW,EAAO,UAAU,aAAa,SAAS,EAAO,iBAAiB,GACvF,EAAM,QAAQ,YAAqD,EAAO,UAAU,aAA6C,GAAU,EAAO,UAAU,WAEjN,EAAO,sBAE4B,EAAO,UAAU,sBAAsD,QAAmC,EAAM,QAAQ,uBAAuD,QAAoC,EAAM,QAAQ,iBAAkD,OAAS,CAAC,CAAC,EAAO,YAExU,EAAO,sBAAsB,EAAO,gBAAgB,GAAG,IACvD,EAAO,uBAAuB;GAC5B,IAAI;AACJ,WAAQ,IAAwB,EAAM,UAAU,CAAC,kBAAkB,SAAS,IAAwB,EAAsB,MAAK,MAAK,EAAE,OAAO,EAAO,GAAG,KAAK,OAAO,KAAK,IAAI,EAAsB;KAEpM,EAAO,uBAEsD,EAAM,UAAU,CAAC,eAAyD,WAAU,MAAK,EAAE,OAAO,EAAO,GAAG,IAAqC,IAE9M,EAAO,kBAAiB,MAAS;AAC/B,KAAM,kBAAiB,MAAO;IAC5B,IAAM,IAAW,EAAO,aAAa,EAC/B,IAAiB,GAA2B,MAAK,MAAK,EAAE,OAAO,EAAO,GAAG,EACzE,IAAY,GAAiB,GAAO,IAAiB,EAAe,QAAQ,KAAA,EAAU;AAG5F,QAAI,GAAuB,GAAU,GAAW,EAAO,CAErD,QAAsB,GAA2B,QAAO,MAAK,EAAE,OAAO,EAAO,GAAG,IAA0B,EAAE;IAE9G,IAAM,IAAe;KACnB,IAAI,EAAO;KACX,OAAO;KACR;AAaD,WAZI,IAEiB,GAA2B,KAAI,MAC5C,EAAE,OAAO,EAAO,KACX,IAEF,EACP,IAAuB,EAAE,GAEzB,KAAO,QAAQ,EAAI,SACd,CAAC,GAAG,GAAK,EAAa,GAExB,CAAC,EAAa;KACrB;;;CAGN,YAAY,GAAK,MAAW;AAE1B,EADA,EAAI,gBAAgB,EAAE,EACtB,EAAI,oBAAoB,EAAE;;CAE5B,cAAa,MAAS;AAuBpB,EAtBA,EAAM,oBAAmB,MAAW;GAClC,IAAM,IAAc,EAAM,mBAAmB;AAc7C,KAAM,QAAQ,yBAAyB,QAAQ,EAAM,QAAQ,uBAb5C,MAEa,GAAiB,GAAS,EAAI,EAAuC,QAAO,MAAU;IAChH,IAAM,IAAS,EAAY,MAAK,MAAK,EAAE,OAAO,EAAO,GAAG;AAOxD,WANA,EAAI,KAEE,GADa,EAAO,aAAa,EACA,EAAO,OAAO,EAAO;KAK5D,CAEwF;KAE9F,EAAM,sBAAqB,MAAgB;AAEzC,KAAM,iBAAiB,IAAe,EAAE,GAAmD,EAAM,cAAqD,iBAAiD,EAAE,CAAC;KAE5M,EAAM,+BAA+B,EAAM,iBAAiB,EAC5D,EAAM,6BACA,CAAC,EAAM,wBAAwB,EAAM,QAAQ,wBAC/C,EAAM,uBAAuB,EAAM,QAAQ,oBAAoB,EAAM,GAEnE,EAAM,QAAQ,mBAAmB,CAAC,EAAM,uBACnC,EAAM,wBAAwB,GAEhC,EAAM,sBAAsB;;CAGxC;AACD,SAAS,GAAuB,GAAU,GAAO,GAAQ;AACvD,SAAQ,KAAY,EAAS,aAAa,EAAS,WAAW,GAAO,EAAO,GAAG,OAAiB,MAAU,UAAe,OAAO,KAAU,YAAY,CAAC;;AAmFzJ,IAAM,KAAiB;CACrB,MAjFW,GAAU,GAAW,MAGzB,EAAU,QAAQ,GAAK,MAAS;EACrC,IAAM,IAAY,EAAK,SAAS,EAAS;AACzC,SAAO,KAAO,OAAO,KAAc,WAAW,IAAY;IACzD,EAAE;CA4EL,MA1EW,GAAU,GAAW,MAAc;EAC9C,IAAI;AAOJ,SANA,EAAU,SAAQ,MAAO;GACvB,IAAM,IAAQ,EAAI,SAAS,EAAS;AACpC,GAAI,KAAS,SAAS,IAAM,KAAS,MAAQ,KAAA,KAAa,KAAS,OACjE,IAAM;IAER,EACK;;CAmEP,MAjEW,GAAU,GAAW,MAAc;EAC9C,IAAI;AAOJ,SANA,EAAU,SAAQ,MAAO;GACvB,IAAM,IAAQ,EAAI,SAAS,EAAS;AACpC,GAAI,KAAS,SAAS,IAAM,KAAS,MAAQ,KAAA,KAAa,KAAS,OACjE,IAAM;IAER,EACK;;CA0DP,SAxDc,GAAU,GAAW,MAAc;EACjD,IAAI,GACA;AAYJ,SAXA,EAAU,SAAQ,MAAO;GACvB,IAAM,IAAQ,EAAI,SAAS,EAAS;AACpC,GAAI,KAAS,SACP,MAAQ,KAAA,IACN,KAAS,MAAO,IAAM,IAAM,MAE5B,IAAM,MAAO,IAAM,IACnB,IAAM,MAAO,IAAM;IAG3B,EACK,CAAC,GAAK,EAAI;;CA2CjB,OAzCY,GAAU,MAAa;EACnC,IAAI,IAAQ,GACR,IAAM;AAOV,MANA,EAAS,SAAQ,MAAO;GACtB,IAAI,IAAQ,EAAI,SAAS,EAAS;AAClC,GAAI,KAAS,SAAS,IAAQ,CAAC,MAAU,MACvC,EAAE,GAAO,KAAO;IAElB,EACE,EAAO,QAAO,IAAM;;CAiCxB,SA9Bc,GAAU,MAAa;AACrC,MAAI,CAAC,EAAS,OACZ;EAEF,IAAM,IAAS,EAAS,KAAI,MAAO,EAAI,SAAS,EAAS,CAAC;AAC1D,MAAI,CAAC,GAAc,EAAO,CACxB;AAEF,MAAI,EAAO,WAAW,EACpB,QAAO,EAAO;EAEhB,IAAM,IAAM,KAAK,MAAM,EAAO,SAAS,EAAE,EACnC,IAAO,EAAO,MAAM,GAAG,MAAM,IAAI,EAAE;AACzC,SAAO,EAAO,SAAS,KAAM,KAAiB,EAAK,IAAM,KAAK,EAAK,MAAQ,IAA1C,EAAK;;CAkBtC,SAhBc,GAAU,MACjB,MAAM,KAAK,IAAI,IAAI,EAAS,KAAI,MAAK,EAAE,SAAS,EAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;CAgB5E,cAdmB,GAAU,MACtB,IAAI,IAAI,EAAS,KAAI,MAAK,EAAE,SAAS,EAAS,CAAC,CAAC,CAAC;CAcxD,QAZa,GAAW,MACjB,EAAS;CAYjB,EAIK,KAAiB;CACrB,4BACS;EACL,iBAAgB,MAAS;GACvB,IAAe;AACf,YAAqB,IAAkB,EAAM,UAAU,KAAK,QAAQ,EAAgB,YAAY,OAAO,KAAK,IAAI,EAAgB,UAAU,KAAwB;;EAEpK,eAAe;EAChB;CAEH,kBAAiB,OACR;EACL,UAAU,EAAE;EACZ,GAAG;EACJ;CAEH,oBAAmB,OACV;EACL,kBAAkB,GAAiB,YAAY,EAAM;EACrD,mBAAmB;EACpB;CAEH,eAAe,GAAQ,MAAU;AAuC/B,EAtCA,EAAO,uBAAuB;AAC5B,KAAM,aAAY,MAEZ,KAAO,QAAQ,EAAI,SAAS,EAAO,GAAG,GACjC,EAAI,QAAO,MAAK,MAAM,EAAO,GAAG,GAElC,CAAC,GAAI,KAAoB,EAAE,EAAG,EAAO,GAAG,CAC/C;KAEJ,EAAO,qBAE4B,EAAO,UAAU,kBAAkD,QAAmC,EAAM,QAAQ,kBAAkD,QAAU,CAAC,CAAC,EAAO,cAAc,CAAC,CAAC,EAAO,UAAU,mBAE7P,EAAO,qBAE2B,EAAM,UAAU,CAAC,UAAmD,SAAS,EAAO,GAAG,EAEzH,EAAO,wBAE4B,EAAM,UAAU,CAAC,UAAoD,QAAQ,EAAO,GAAG,EAE1H,EAAO,iCAAiC;GACtC,IAAM,IAAW,EAAO,aAAa;AACrC,gBAAa;AACN,SACL,EAAO,gBAAgB;;KAG3B,EAAO,6BAA6B;GAClC,IACM,IADW,EAAM,iBAAiB,CAAC,SAAS,IACC,SAAS,EAAO,GAAG;AACtE,OAAI,OAAO,KAAU,SACnB,QAAO,GAAe;AAExB,OAAI,OAAO,UAAU,SAAS,KAAK,EAAM,KAAK,gBAC5C,QAAO,GAAe;KAG1B,EAAO,yBAAyB;AAE9B,OAAI,CAAC,EACH,OAAU,OAAO;AAEnB,UAAOA,GAAW,EAAO,UAAU,cAAc,GAAG,EAAO,UAAU,gBAAgB,EAAO,UAAU,kBAAkB,SAAS,EAAO,sBAAsB,GAAsD,EAAM,QAAQ,iBAA0D,EAAO,UAAU,kBAAkD,GAAe,EAAO,UAAU;;;CAGnY,cAAa,MAAS;AAOpB,EANA,EAAM,eAAc,MAAW,EAAM,QAAQ,oBAAoB,OAAO,KAAK,IAAI,EAAM,QAAQ,iBAAiB,EAAQ,EACxH,EAAM,iBAAgB,MAAgB;AAEpC,KAAM,YAAY,IAAe,EAAE,GAAmD,EAAM,cAAqD,YAA4C,EAAE,CAAC;KAElM,EAAM,8BAA8B,EAAM,qBAAqB,EAC/D,EAAM,4BACA,CAAC,EAAM,uBAAuB,EAAM,QAAQ,uBAC9C,EAAM,sBAAsB,EAAM,QAAQ,mBAAmB,EAAM,GAEjE,EAAM,QAAQ,kBAAkB,CAAC,EAAM,sBAClC,EAAM,uBAAuB,GAE/B,EAAM,qBAAqB;;CAGtC,YAAY,GAAK,MAAU;AAazB,EAZA,EAAI,qBAAqB,CAAC,CAAC,EAAI,kBAC/B,EAAI,oBAAmB,MAAY;AACjC,OAAI,EAAI,qBAAqB,eAAe,EAAS,CACnD,QAAO,EAAI,qBAAqB;GAElC,IAAM,IAAS,EAAM,UAAU,EAAS;AAKxC,UAJM,KAAU,QAAQ,EAAO,UAAU,oBAGzC,EAAI,qBAAqB,KAAY,EAAO,UAAU,iBAAiB,EAAI,SAAS,EAC7E,EAAI,qBAAqB,MAHvB,EAAI,SAAS,EAAS;KAKjC,EAAI,uBAAuB,EAAE;;CAE/B,aAAa,GAAM,GAAQ,GAAK,MAAU;AAGxC,EAFA,EAAK,qBAAqB,EAAO,cAAc,IAAI,EAAO,OAAO,EAAI,kBACrE,EAAK,yBAAyB,CAAC,EAAK,cAAc,IAAI,EAAO,cAAc,EAC3E,EAAK,wBAAwB;GAC3B,IAAI;AACJ,UAAO,CAAC,EAAK,cAAc,IAAI,CAAC,EAAK,kBAAkB,IAAI,CAAC,GAAG,IAAe,EAAI,YAAY,QAAQ,EAAa;;;CAGxH;AACD,SAAS,GAAa,GAAa,GAAU,GAAmB;AAC9D,KAAI,EAAE,KAAY,QAAQ,EAAS,WAAW,CAAC,EAC7C,QAAO;CAET,IAAM,IAAqB,EAAY,QAAO,MAAO,CAAC,EAAS,SAAS,EAAI,GAAG,CAAC;AAKhF,QAJI,MAAsB,WACjB,IAGF,CAAC,GADgB,EAAS,KAAI,MAAK,EAAY,MAAK,MAAO,EAAI,OAAO,EAAE,CAAC,CAAC,OAAO,QAAQ,EACpE,GAAG,EAAmB;;AAKpD,IAAM,KAAiB;CACrB,kBAAiB,OACR;EACL,aAAa,EAAE;EACf,GAAG;EACJ;CAEH,oBAAmB,OACV,EACL,qBAAqB,GAAiB,eAAe,EAAM,EAC5D;CAEH,eAAe,GAAQ,MAAU;AAO/B,EANA,EAAO,WAAWC,GAAK,MAAY,CAAC,GAAuB,GAAO,EAAS,CAAC,GAAE,MAAW,EAAQ,WAAU,MAAK,EAAE,OAAO,EAAO,GAAG,EAAE,EAAe,EAAM,SAAS,gBAAgB,WAAW,CAAC,EAC/L,EAAO,oBAAmB,MAER,GAAuB,GAAO,EAAS,CAC1B,IAAiC,OAAQ,EAAO,IAE/E,EAAO,mBAAkB,MAAY;GAEnC,IAAM,IAAU,GAAuB,GAAO,EAAS;AACvD,UAAoB,EAAQ,EAAQ,SAAS,IAAgC,OAAQ,EAAO;;;CAGhG,cAAa,MAAS;AAMpB,EALA,EAAM,kBAAiB,MAAW,EAAM,QAAQ,uBAAuB,OAAO,KAAK,IAAI,EAAM,QAAQ,oBAAoB,EAAQ,EACjI,EAAM,oBAAmB,MAAgB;AAEvC,KAAM,eAAe,IAAe,EAAE,GAA4B,EAAM,aAAa,eAA+C,EAAE,CAAC;KAEzI,EAAM,qBAAqBA,QAAW;GAAC,EAAM,UAAU,CAAC;GAAa,EAAM,UAAU,CAAC;GAAU,EAAM,QAAQ;GAAkB,GAAG,GAAa,GAAU,OAAsB,MAAW;GAGzL,IAAI,IAAiB,EAAE;AAGvB,OAAI,EAAE,KAAe,QAAQ,EAAY,QACvC,KAAiB;QACZ;IACL,IAAM,IAAkB,CAAC,GAAG,EAAY,EAGlC,IAAc,CAAC,GAAG,EAAQ;AAKhC,WAAO,EAAY,UAAU,EAAgB,SAAQ;KACnD,IAAM,IAAiB,EAAgB,OAAO,EACxC,IAAa,EAAY,WAAU,MAAK,EAAE,OAAO,EAAe;AACtE,KAAI,IAAa,MACf,EAAe,KAAK,EAAY,OAAO,GAAY,EAAE,CAAC,GAAG;;AAK7D,QAAiB,CAAC,GAAG,GAAgB,GAAG,EAAY;;AAEtD,UAAO,GAAa,GAAgB,GAAU,EAAkB;KAC/D,EAAe,EAAM,SAAS,cAAc,qBAAqB,CAAC;;CAExE,EAIK,YAAsC;CAC1C,MAAM,EAAE;CACR,OAAO,EAAE;CACV,GACK,KAAgB;CACpB,kBAAiB,OACR;EACL,eAAe,IAA8B;EAC7C,GAAG;EACJ;CAEH,oBAAmB,OACV,EACL,uBAAuB,GAAiB,iBAAiB,EAAM,EAChE;CAEH,eAAe,GAAQ,MAAU;AA0C/B,EAzCA,EAAO,OAAM,MAAY;GACvB,IAAM,IAAY,EAAO,gBAAgB,CAAC,KAAI,MAAK,EAAE,GAAG,CAAC,OAAO,QAAQ;AACxE,KAAM,kBAAiB,MAEjB,MAAa,UAER;IACL,OAAoB,GAA2B,QAA4B,EAAE,EAAE,QAAO,MAAK,EAAE,KAAa,QAAQ,EAAU,SAAS,EAAE,EAAE;IACzI,OAAO,CAAC,IAAkB,GAA2B,SAA8B,EAAE,EAAE,QAAO,MAAK,EAAE,KAAa,QAAQ,EAAU,SAAS,EAAE,EAAE,EAAE,GAAG,EAAU;IACjK,GAEC,MAAa,SAER;IACL,MAAM,CAAC,IAAkB,GAA2B,QAA6B,EAAE,EAAE,QAAO,MAAK,EAAE,KAAa,QAAQ,EAAU,SAAS,EAAE,EAAE,EAAE,GAAG,EAAU;IAC9J,QAAuB,GAA2B,SAA+B,EAAE,EAAE,QAAO,MAAK,EAAE,KAAa,QAAQ,EAAU,SAAS,EAAE,EAAE;IAChJ,GAEI;IACL,OAAqB,GAA2B,QAA6B,EAAE,EAAE,QAAO,MAAK,EAAE,KAAa,QAAQ,EAAU,SAAS,EAAE,EAAE;IAC3I,QAAuB,GAA2B,SAA+B,EAAE,EAAE,QAAO,MAAK,EAAE,KAAa,QAAQ,EAAU,SAAS,EAAE,EAAE;IAChJ,CACD;KAEJ,EAAO,kBACe,EAAO,gBAAgB,CACxB,MAAK,OAEW,EAAE,UAAU,iBAAiD,QAA2C,EAAM,QAAQ,uBAAuD,EAAM,QAAQ,iBAAgC,IAC5P,EAEJ,EAAO,oBAAoB;GACzB,IAAM,IAAgB,EAAO,gBAAgB,CAAC,KAAI,MAAK,EAAE,GAAG,EACtD,EACJ,SACA,aACE,EAAM,UAAU,CAAC,eACf,IAAS,EAAc,MAAK,MAAK,GAA6B,SAAS,EAAE,CAAC,EAC1E,IAAU,EAAc,MAAK,MAAK,GAA+B,SAAS,EAAE,CAAC;AACnF,UAAO,IAAS,SAAS,IAAU,UAAU;KAE/C,EAAO,uBAAuB;GAC5B,IAA2B;GAC3B,IAAM,IAAW,EAAO,aAAa;AACrC,UAAO,MAAqC,IAAyB,EAAM,UAAU,CAAC,kBAAkB,SAAS,IAAyB,EAAuB,OAAc,OAAO,KAAK,IAAI,EAAuB,QAAQ,EAAO,GAAG,KAAoC,KAAK;;;CAGrR,YAAY,GAAK,MAAU;AAYzB,EAXA,EAAI,wBAAwBA,QAAW;GAAC,EAAI,qBAAqB;GAAE,EAAM,UAAU,CAAC,cAAc;GAAM,EAAM,UAAU,CAAC,cAAc;GAAM,GAAG,GAAU,GAAM,MAAU;GACxK,IAAM,IAAe,CAAC,GAAI,KAAsB,EAAE,EAAG,GAAI,KAAwB,EAAE,CAAE;AACrF,UAAO,EAAS,QAAO,MAAK,CAAC,EAAa,SAAS,EAAE,OAAO,GAAG,CAAC;KAC/D,EAAe,EAAM,SAAS,aAAa,wBAAwB,CAAC,EACvE,EAAI,sBAAsBA,QAAW,CAAC,EAAI,qBAAqB,EAAE,EAAM,UAAU,CAAC,cAAc,KAAK,GAAG,GAAU,OACjG,KAAsB,EAAE,EAAE,KAAI,MAAY,EAAS,MAAK,MAAQ,EAAK,OAAO,OAAO,EAAS,CAAC,CAAC,OAAO,QAAQ,CAAC,KAAI,OAAM;GACrI,GAAG;GACH,UAAU;GACX,EAAE,EAEF,EAAe,EAAM,SAAS,aAAa,sBAAsB,CAAC,EACrE,EAAI,uBAAuBA,QAAW,CAAC,EAAI,qBAAqB,EAAE,EAAM,UAAU,CAAC,cAAc,MAAM,GAAG,GAAU,OACnG,KAAwB,EAAE,EAAE,KAAI,MAAY,EAAS,MAAK,MAAQ,EAAK,OAAO,OAAO,EAAS,CAAC,CAAC,OAAO,QAAQ,CAAC,KAAI,OAAM;GACvI,GAAG;GACH,UAAU;GACX,EAAE,EAEF,EAAe,EAAM,SAAS,aAAa,uBAAuB,CAAC;;CAExE,cAAa,MAAS;AAqBpB,EApBA,EAAM,oBAAmB,MAAW,EAAM,QAAQ,yBAAyB,OAAO,KAAK,IAAI,EAAM,QAAQ,sBAAsB,EAAQ,EACvI,EAAM,sBAAqB,MAElB,EAAM,iBAAiB,IAAe,IAA8B,GAAmD,EAAM,cAAqD,iBAAiD,IAA8B,CAAC,EAE3Q,EAAM,0BAAyB,MAAY;GAEzC,IAAM,IAAe,EAAM,UAAU,CAAC;AAKtC,UAJK,IAIE,EAAiC,EAAa,IAAoD,SAFhG,GAA+B,EAAa,MAA4C,UAAmC,EAAa,OAA8C;KAIjM,EAAM,qBAAqBA,QAAW,CAAC,EAAM,mBAAmB,EAAE,EAAM,UAAU,CAAC,cAAc,KAAK,GAAG,GAAY,OAC3G,KAAsB,EAAE,EAAE,KAAI,MAAY,EAAW,MAAK,MAAU,EAAO,OAAO,EAAS,CAAC,CAAC,OAAO,QAAQ,EACnH,EAAe,EAAM,SAAS,gBAAgB,qBAAqB,CAAC,EACvE,EAAM,sBAAsBA,QAAW,CAAC,EAAM,mBAAmB,EAAE,EAAM,UAAU,CAAC,cAAc,MAAM,GAAG,GAAY,OAC7G,KAAwB,EAAE,EAAE,KAAI,MAAY,EAAW,MAAK,MAAU,EAAO,OAAO,EAAS,CAAC,CAAC,OAAO,QAAQ,EACrH,EAAe,EAAM,SAAS,gBAAgB,sBAAsB,CAAC,EACxE,EAAM,uBAAuBA,QAAW;GAAC,EAAM,mBAAmB;GAAE,EAAM,UAAU,CAAC,cAAc;GAAM,EAAM,UAAU,CAAC,cAAc;GAAM,GAAG,GAAY,GAAM,MAAU;GAC3K,IAAM,IAAe,CAAC,GAAI,KAAsB,EAAE,EAAG,GAAI,KAAwB,EAAE,CAAE;AACrF,UAAO,EAAW,QAAO,MAAK,CAAC,EAAa,SAAS,EAAE,GAAG,CAAC;KAC1D,EAAe,EAAM,SAAS,gBAAgB,uBAAuB,CAAC;;CAE5E;AAED,SAAS,GAAqB,GAAW;AACvC,QAAO,MAAc,OAAO,WAAa,MAAc,WAAW;;AAOpE,IAAM,KAAsB;CAC1B,MAAM;CACN,SAAS;CACT;CACD,EACK,YAAyC;CAC7C,aAAa;CACb,WAAW;CACX,aAAa;CACb,iBAAiB;CACjB,kBAAkB;CAClB,mBAAmB,EAAE;CACtB,GACK,KAAe;CACnB,2BACS;CAET,kBAAiB,OACR;EACL,cAAc,EAAE;EAChB,kBAAkB,IAAiC;EACnD,GAAG;EACJ;CAEH,oBAAmB,OACV;EACL,kBAAkB;EAClB,uBAAuB;EACvB,sBAAsB,GAAiB,gBAAgB,EAAM;EAC7D,0BAA0B,GAAiB,oBAAoB,EAAM;EACtE;CAEH,eAAe,GAAQ,MAAU;AAqB/B,EApBA,EAAO,gBAAgB;GAErB,IAAM,IAAa,EAAM,UAAU,CAAC,aAAa,EAAO;AACxD,UAAO,KAAK,IAAI,KAAK,IAA6B,EAAO,UAAU,WAA2C,GAAoB,SAAiB,KAAkC,EAAO,UAAU,QAAuB,GAAoB,KAAK,EAA2B,EAAO,UAAU,WAA2C,GAAoB,QAAQ;KAE3W,EAAO,WAAWA,GAAK,MAAY;GAAC;GAAU,GAAuB,GAAO,EAAS;GAAE,EAAM,UAAU,CAAC;GAAa,GAAG,GAAU,MAAY,EAAQ,MAAM,GAAG,EAAO,SAAS,EAAS,CAAC,CAAC,QAAQ,GAAK,MAAW,IAAM,EAAO,SAAS,EAAE,EAAE,EAAE,EAAe,EAAM,SAAS,gBAAgB,WAAW,CAAC,EACxS,EAAO,WAAWA,GAAK,MAAY;GAAC;GAAU,GAAuB,GAAO,EAAS;GAAE,EAAM,UAAU,CAAC;GAAa,GAAG,GAAU,MAAY,EAAQ,MAAM,EAAO,SAAS,EAAS,GAAG,EAAE,CAAC,QAAQ,GAAK,MAAW,IAAM,EAAO,SAAS,EAAE,EAAE,EAAE,EAAe,EAAM,SAAS,gBAAgB,WAAW,CAAC,EACzS,EAAO,kBAAkB;AACvB,KAAM,iBAAgB,MAAS;IAC7B,IAAI,GACD,EAAO,KAAK,GACb,GAAG,MACD;AACJ,WAAO;KACP;KAEJ,EAAO,sBAE4B,EAAO,UAAU,kBAAkD,QAAmC,EAAM,QAAQ,wBAAwD,KAE/M,EAAO,sBACE,EAAM,UAAU,CAAC,iBAAiB,qBAAqB,EAAO;;CAGzE,eAAe,GAAQ,MAAU;AAqB/B,EApBA,EAAO,gBAAgB;GACrB,IAAI,IAAM,GACJ,KAAU,MAAU;AACxB,IAAI,EAAO,WAAW,SACpB,EAAO,WAAW,QAAQ,EAAQ,GAGlC,KAAgC,EAAO,OAAO,SAAS,IAAoC;;AAI/F,UADA,EAAQ,EAAO,EACR;KAET,EAAO,iBAAiB;AACtB,OAAI,EAAO,QAAQ,GAAG;IACpB,IAAM,IAAoB,EAAO,YAAY,QAAQ,EAAO,QAAQ;AACpE,WAAO,EAAkB,UAAU,GAAG,EAAkB,SAAS;;AAEnE,UAAO;KAET,EAAO,oBAAmB,MAAoB;GAC5C,IAAM,IAAS,EAAM,UAAU,EAAO,OAAO,GAAG,EAC1C,IAAY,GAAiC,cAAc;AACjE,WAAO,MAAK;AAKV,QAJI,CAAC,KAAU,CAAC,MAGhB,EAAE,WAAW,QAAQ,EAAE,SAAS,EAC5B,GAAkB,EAAE,IAElB,EAAE,WAAW,EAAE,QAAQ,SAAS,GAClC;IAGJ,IAAM,IAAY,EAAO,SAAS,EAC5B,IAAoB,IAAS,EAAO,gBAAgB,CAAC,KAAI,MAAK,CAAC,EAAE,OAAO,IAAI,EAAE,OAAO,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAO,IAAI,EAAO,SAAS,CAAC,CAAC,EAClI,IAAU,GAAkB,EAAE,GAAG,KAAK,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,EAAE,SACtE,IAAkB,EAAE,EACpB,KAAgB,GAAW,MAAe;AAC1C,YAAO,KAAe,aAG1B,EAAM,qBAAoB,MAAO;MAE/B,IAAM,IAAiB,EAAM,QAAQ,0BAA0B,QAAQ,KAAK,GACtE,KAAe,KAAkC,GAA2B,eAA0C,MAAM,GAC5H,IAAkB,KAAK,IAAI,KAAiC,GAA2B,aAAsC,IAAI,SAAU;AAKjJ,aAJA,EAAI,kBAAkB,SAAQ,MAAS;OACrC,IAAI,CAAC,GAAU,KAAc;AAC7B,SAAgB,KAAY,KAAK,MAAM,KAAK,IAAI,IAAa,IAAa,GAAiB,EAAE,GAAG,IAAI,GAAG;QACvG,EACK;OACL,GAAG;OACH;OACA;OACD;OACD,GACE,EAAM,QAAQ,qBAAqB,cAAc,MAAc,UACjE,EAAM,iBAAgB,OAAQ;MAC5B,GAAG;MACH,GAAG;MACJ,EAAE;OAGD,KAAS,MAAc,EAAa,QAAQ,EAAW,EACvD,KAAQ,MAAc;AAE1B,KADA,EAAa,OAAO,EAAW,EAC/B,EAAM,qBAAoB,OAAQ;MAChC,GAAG;MACH,kBAAkB;MAClB,aAAa;MACb,WAAW;MACX,aAAa;MACb,iBAAiB;MACjB,mBAAmB,EAAE;MACtB,EAAE;OAEC,IAAkB,GAAqB,EAAiB,EACxD,IAAc;KAClB,cAAa,MAAK,EAAO,EAAE,QAAQ;KACnC,YAAW,MAAK;AAGd,MAFA,GAA2C,oBAAoB,aAAa,EAAY,YAAY,EACpG,GAA2C,oBAAoB,WAAW,EAAY,UAAU,EAChG,EAAM,EAAE,QAAQ;;KAEnB,EACK,IAAc;KAClB,cAAa,OACP,EAAE,eACJ,EAAE,gBAAgB,EAClB,EAAE,iBAAiB,GAErB,EAAO,EAAE,QAAQ,GAAG,QAAQ,EACrB;KAET,YAAW,MAAK;AAQd,MANA,GAA2C,oBAAoB,aAAa,EAAY,YAAY,EACpG,GAA2C,oBAAoB,YAAY,EAAY,UAAU,EAC7F,EAAE,eACJ,EAAE,gBAAgB,EAClB,EAAE,iBAAiB,GAErB,EAAqB,EAAE,QAAQ,IAAmC,QAAQ;;KAE7E,EACK,IAAqB,IAAuB,GAAG,EACnD,SAAS,IACV,GAAG;AAQJ,IAPI,GAAkB,EAAE,IACtB,GAA2C,iBAAiB,aAAa,EAAY,aAAa,EAAmB,EACrH,GAA2C,iBAAiB,YAAY,EAAY,WAAW,EAAmB,KAElH,GAA2C,iBAAiB,aAAa,EAAY,aAAa,EAAmB,EACrH,GAA2C,iBAAiB,WAAW,EAAY,WAAW,EAAmB,GAEnH,EAAM,qBAAoB,OAAQ;KAChC,GAAG;KACH,aAAa;KACb;KACA,aAAa;KACb,iBAAiB;KACjB;KACA,kBAAkB,EAAO;KAC1B,EAAE;;;;CAIT,cAAa,MAAS;AA6BpB,EA5BA,EAAM,mBAAkB,MAAW,EAAM,QAAQ,wBAAwB,OAAO,KAAK,IAAI,EAAM,QAAQ,qBAAqB,EAAQ,EACpI,EAAM,uBAAsB,MAAW,EAAM,QAAQ,4BAA4B,OAAO,KAAK,IAAI,EAAM,QAAQ,yBAAyB,EAAQ,EAChJ,EAAM,qBAAoB,MAAgB;AAExC,KAAM,gBAAgB,IAAe,EAAE,GAA4B,EAAM,aAAa,gBAAgD,EAAE,CAAC;KAE3I,EAAM,uBAAsB,MAAgB;AAE1C,KAAM,oBAAoB,IAAe,IAAiC,GAA6B,EAAM,aAAa,oBAAqD,IAAiC,CAAC;KAEnN,EAAM,qBAEsD,EAAM,iBAAiB,CAAC,IAA8C,QAAQ,QAAQ,GAAK,MAC5I,IAAM,EAAO,SAAS,EAC5B,EAAE,IAAoC,GAE3C,EAAM,yBAEsD,EAAM,qBAAqB,CAAC,IAA8C,QAAQ,QAAQ,GAAK,MAChJ,IAAM,EAAO,SAAS,EAC5B,EAAE,IAAoC,GAE3C,EAAM,2BAEsD,EAAM,uBAAuB,CAAC,IAA8C,QAAQ,QAAQ,GAAK,MAClJ,IAAM,EAAO,SAAS,EAC5B,EAAE,IAAoC,GAE3C,EAAM,0BAEsD,EAAM,sBAAsB,CAAC,IAA8C,QAAQ,QAAQ,GAAK,MACjJ,IAAM,EAAO,SAAS,EAC5B,EAAE,IAAoC;;CAG9C,EACGE,KAAmB;AACvB,SAAS,KAAwB;AAC/B,KAAI,OAAOA,MAAqB,UAAW,QAAOA;CAClD,IAAI,IAAY;AAChB,KAAI;EACF,IAAM,IAAU,EACd,IAAI,UAAU;AAEZ,UADA,IAAY,IACL;KAEV,EACK,UAAa;AAEnB,EADA,OAAO,iBAAiB,QAAQ,GAAM,EAAQ,EAC9C,OAAO,oBAAoB,QAAQ,EAAK;SAC5B;AACZ,MAAY;;AAGd,QADA,KAAmB,GACZA;;AAET,SAAS,GAAkB,GAAG;AAC5B,QAAO,EAAE,SAAS;;AAKpB,IAAM,KAAmB;CACvB,kBAAiB,OACR;EACL,kBAAkB,EAAE;EACpB,GAAG;EACJ;CAEH,oBAAmB,OACV,EACL,0BAA0B,GAAiB,oBAAoB,EAAM,EACtE;CAEH,eAAe,GAAQ,MAAU;AAkB/B,EAjBA,EAAO,oBAAmB,MAAS;AACjC,GAAI,EAAO,YAAY,IACrB,EAAM,qBAAoB,OAAQ;IAChC,GAAG;KACF,EAAO,KAAK,KAAwB,CAAC,EAAO,cAAc;IAC5D,EAAE;KAGP,EAAO,qBAAqB;GAE1B,IAAM,IAAe,EAAO;AAC5B,WAAe,EAAa,SAAS,EAAa,MAAK,MAAK,EAAE,cAAc,CAAC,GAA4B,EAAM,UAAU,CAAC,mBAA2D,EAAO,QAAsB;KAEpN,EAAO,oBAE4B,EAAO,UAAU,gBAAgD,QAAmC,EAAM,QAAQ,gBAAgD,KAErM,EAAO,oCACE,MAAK;AACV,KAAO,oBAAoB,QAAQ,EAAO,iBAAiB,EAAE,OAAO,QAAQ;;;CAIlF,YAAY,GAAK,MAAU;AAIzB,EAHA,EAAI,sBAAsBF,QAAW,CAAC,EAAI,aAAa,EAAE,EAAM,UAAU,CAAC,iBAAiB,GAAE,MACpF,EAAM,QAAO,MAAQ,EAAK,OAAO,cAAc,CAAC,EACtD,EAAe,EAAM,SAAS,aAAa,sBAAsB,CAAC,EACrE,EAAI,kBAAkBA,QAAW;GAAC,EAAI,qBAAqB;GAAE,EAAI,uBAAuB;GAAE,EAAI,sBAAsB;GAAC,GAAG,GAAM,GAAQ,MAAU;GAAC,GAAG;GAAM,GAAG;GAAQ,GAAG;GAAM,EAAE,EAAe,EAAM,SAAS,aAAa,kBAAkB,CAAC;;CAEhP,cAAa,MAAS;EACpB,IAAM,KAA4B,GAAK,MAC9BA,QAAW,CAAC,GAAY,EAAE,GAAY,CAAC,QAAO,MAAK,EAAE,cAAc,CAAC,CAAC,KAAI,MAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,GAAE,MAC9F,EAAQ,QAAO,MAAK,EAAE,gBAAgB,OAAO,KAAK,IAAI,EAAE,cAAc,CAAC,EAC7E,EAAe,EAAM,SAAS,gBAAgB,EAAI,CAAC;AAsBxD,EApBA,EAAM,wBAAwB,EAAyB,+BAA+B,EAAM,mBAAmB,CAAC,EAChH,EAAM,wBAAwB,EAAyB,+BAA+B,EAAM,mBAAmB,CAAC,EAChH,EAAM,4BAA4B,EAAyB,mCAAmC,EAAM,oBAAoB,CAAC,EACzH,EAAM,6BAA6B,EAAyB,oCAAoC,EAAM,qBAAqB,CAAC,EAC5H,EAAM,8BAA8B,EAAyB,qCAAqC,EAAM,sBAAsB,CAAC,EAC/H,EAAM,uBAAsB,MAAW,EAAM,QAAQ,4BAA4B,OAAO,KAAK,IAAI,EAAM,QAAQ,yBAAyB,EAAQ,EAChJ,EAAM,yBAAwB,MAAgB;AAE5C,KAAM,oBAAoB,IAAe,EAAE,GAA4B,EAAM,aAAa,oBAAoD,EAAE,CAAC;KAEnJ,EAAM,2BAA0B,MAAS;AAGvC,GADA,MAA4C,CAAC,EAAM,wBAAwB,EAC3E,EAAM,oBAAoB,EAAM,mBAAmB,CAAC,QAAQ,GAAK,OAAY;IAC3E,GAAG;KACF,EAAO,KAAM,KAAQ,EAAE,EAAO,cAAc,QAAQ,EAAO,YAAY;IACzE,GAAG,EAAE,CAAC,CAAC;KAEV,EAAM,+BAA+B,CAAC,EAAM,mBAAmB,CAAC,MAAK,MAAU,EAAE,EAAO,gBAAgB,QAAQ,EAAO,cAAc,EAAE,EACvI,EAAM,gCAAgC,EAAM,mBAAmB,CAAC,MAAK,MAAU,EAAO,gBAAgB,OAAO,KAAK,IAAI,EAAO,cAAc,CAAC,EAC5I,EAAM,8CACG,MAAK;AAEV,KAAM,wBAAmC,EAAE,QAAmC,QAAQ;;;CAI7F;AACD,SAAS,GAAuB,GAAO,GAAU;AAC/C,QAAQ,IAA2C,MAAa,WAAW,EAAM,6BAA6B,GAAG,MAAa,SAAS,EAAM,2BAA2B,GAAG,EAAM,4BAA4B,GAA1L,EAAM,uBAAuB;;AAKlD,IAAM,KAAiB,EACrB,cAAa,MAAS;AAgBpB,CAfA,EAAM,4BAA4B,EAAM,QAAQ,sBAAsB,EAAM,QAAQ,mBAAmB,GAAO,aAAa,EAC3H,EAAM,iCACA,EAAM,QAAQ,mBAAmB,CAAC,EAAM,4BACnC,EAAM,wBAAwB,GAEhC,EAAM,2BAA2B,EAE1C,EAAM,gCAAgC,EAAM,QAAQ,0BAA0B,EAAM,QAAQ,uBAAuB,GAAO,aAAa,EACvI,EAAM,qCACC,EAAM,gCAGJ,EAAM,+BAA+B,mBAFnC,IAAI,KAAK,EAIpB,EAAM,gCAAgC,EAAM,QAAQ,0BAA0B,EAAM,QAAQ,uBAAuB,GAAO,aAAa,EACvI,EAAM,qCAAqC;AACpC,QAAM,8BAGX,QAAO,EAAM,+BAA+B;;GAGjD,EAIK,KAAkB;CACtB,kBAAiB,OACR;EACL,cAAc,KAAA;EACd,GAAG;EACJ;CAEH,oBAAmB,OACV;EACL,sBAAsB,GAAiB,gBAAgB,EAAM;EAC7D,gBAAgB;EAChB,2BAA0B,MAAU;GAClC,IAAI;GACJ,IAAM,KAAS,IAAwB,EAAM,iBAAiB,CAAC,SAAS,OAAO,SAAS,IAAwB,EAAsB,wBAAwB,CAAC,EAAO,QAAQ,OAAO,KAAK,IAAI,EAAsB,UAAU;AAC9N,UAAO,OAAO,KAAU,YAAY,OAAO,KAAU;;EAExD;CAEH,eAAe,GAAQ,MAAU;AAC/B,IAAO,4BAE4B,EAAO,UAAU,sBAAsD,QAAmC,EAAM,QAAQ,sBAAsD,QAAoC,EAAM,QAAQ,iBAAkD,SAAmC,EAAM,QAAQ,4BAA4B,OAAO,KAAK,IAAI,EAAM,QAAQ,yBAAyB,EAAO,KAAoC,OAAS,CAAC,CAAC,EAAO;;CAGxf,cAAa,MAAS;AAcpB,EAbA,EAAM,8BACG,GAAU,gBAEnB,EAAM,0BAA0B;GAE9B,IAAM,EACY,sBACd,EAAM;AACV,UAAOD,GAAW,EAAe,GAAG,IAAiB,MAAmB,SAAS,EAAM,uBAAuB,GAAsD,EAAM,QAAQ,YAAqD,MAAmD,GAAU;KAEtS,EAAM,mBAAkB,MAAW;AACjC,KAAM,QAAQ,wBAAwB,QAAQ,EAAM,QAAQ,qBAAqB,EAAQ;KAE3F,EAAM,qBAAoB,MAAgB;AACxC,KAAM,gBAAgB,IAAe,KAAA,IAAY,EAAM,aAAa,aAAa;;;CAGtF,EAIK,KAAe;CACnB,kBAAiB,OACR;EACL,UAAU,EAAE;EACZ,GAAG;EACJ;CAEH,oBAAmB,OACV;EACL,kBAAkB,GAAiB,YAAY,EAAM;EACrD,sBAAsB;EACvB;CAEH,cAAa,MAAS;EACpB,IAAI,IAAa,IACb,IAAS;AAwEb,EAvEA,EAAM,2BAA2B;AAE/B,OAAI,CAAC,GAAY;AACf,MAAM,aAAa;AACjB,SAAa;MACb;AACF;;AAEF,OAAqC,EAAM,QAAQ,gBAAgD,EAAM,QAAQ,qBAAoC,CAAC,EAAM,QAAQ,iBAAiB;AACnL,QAAI,EAAQ;AAEZ,IADA,IAAS,IACT,EAAM,aAAa;AAEjB,KADA,EAAM,eAAe,EACrB,IAAS;MACT;;KAGN,EAAM,eAAc,MAAW,EAAM,QAAQ,oBAAoB,OAAO,KAAK,IAAI,EAAM,QAAQ,iBAAiB,EAAQ,EACxH,EAAM,yBAAwB,MAAY;AACxC,GAAI,KAA8B,CAAC,EAAM,sBAAsB,GAC7D,EAAM,YAAY,GAAK,GAEvB,EAAM,YAAY,EAAE,CAAC;KAGzB,EAAM,iBAAgB,MAAgB;AAEpC,KAAM,YAAY,IAAe,EAAE,GAAmD,EAAM,cAAqD,YAA4C,EAAE,CAAC;KAElM,EAAM,6BACG,EAAM,0BAA0B,CAAC,SAAS,MAAK,MAAO,EAAI,cAAc,CAAC,EAElF,EAAM,yCACG,MAAK;AAEV,GADA,EAAE,WAAW,QAAQ,EAAE,SAAS,EAChC,EAAM,uBAAuB;KAGjC,EAAM,8BAA8B;GAClC,IAAM,IAAW,EAAM,UAAU,CAAC;AAClC,UAAO,MAAa,MAAQ,OAAO,OAAO,EAAS,CAAC,KAAK,QAAQ;KAEnE,EAAM,6BAA6B;GACjC,IAAM,IAAW,EAAM,UAAU,CAAC;AAgBlC,UAbI,OAAO,KAAa,YACf,MAAa,KAOtB,EALI,CAAC,OAAO,KAAK,EAAS,CAAC,UAKvB,EAAM,aAAa,CAAC,SAAS,MAAK,MAAO,CAAC,EAAI,eAAe,CAAC;KAOpE,EAAM,yBAAyB;GAC7B,IAAI,IAAW;AAMf,WALe,EAAM,UAAU,CAAC,aAAa,KAAO,OAAO,KAAK,EAAM,aAAa,CAAC,SAAS,GAAG,OAAO,KAAK,EAAM,UAAU,CAAC,SAAS,EAC/H,SAAQ,MAAM;IACnB,IAAM,IAAU,EAAG,MAAM,IAAI;AAC7B,QAAW,KAAK,IAAI,GAAU,EAAQ,OAAO;KAC7C,EACK;KAET,EAAM,+BAA+B,EAAM,mBAAmB,EAC9D,EAAM,6BACA,CAAC,EAAM,wBAAwB,EAAM,QAAQ,wBAC/C,EAAM,uBAAuB,EAAM,QAAQ,oBAAoB,EAAM,GAEnE,EAAM,QAAQ,mBAAmB,CAAC,EAAM,uBACnC,EAAM,wBAAwB,GAEhC,EAAM,sBAAsB;;CAGvC,YAAY,GAAK,MAAU;AAgDzB,EA/CA,EAAI,kBAAiB,MAAY;AAC/B,KAAM,aAAY,MAAO;IAEvB,IAAM,IAAS,MAAQ,KAAO,KAAO,CAAC,EAAE,KAAO,QAAQ,EAAI,EAAI,MAC3D,IAAc,EAAE;AASpB,QARI,MAAQ,KACV,OAAO,KAAK,EAAM,aAAa,CAAC,SAAS,CAAC,SAAQ,MAAS;AACzD,OAAY,KAAS;MACrB,GAEF,IAAc,GAEhB,MAAwD,CAAC,GACrD,CAAC,KAAU,EACb,QAAO;KACL,GAAG;MACF,EAAI,KAAK;KACX;AAEH,QAAI,KAAU,CAAC,GAAU;KACvB,IAAM,GACH,EAAI,KAAK,GACV,GAAG,MACD;AACJ,YAAO;;AAET,WAAO;KACP;KAEJ,EAAI,sBAAsB;GAExB,IAAM,IAAW,EAAM,UAAU,CAAC;AAClC,UAAO,CAAC,GAA2B,EAAM,QAAQ,oBAAoB,OAAO,KAAK,IAAI,EAAM,QAAQ,iBAAiB,EAAI,MAAoC,MAAa,MAAS,IAAqC,EAAI;KAE7N,EAAI,qBAAqB;GACvB,IAAkD;AAClD,WAAgC,EAAM,QAAQ,mBAAmB,OAAO,KAAK,IAAI,EAAM,QAAQ,gBAAgB,EAAI,OAA8D,EAAM,QAAQ,mBAAmD,OAAS,CAAC,GAAG,IAAe,EAAI,YAAY,QAAQ,EAAa;KAErT,EAAI,gCAAgC;GAClC,IAAI,IAAkB,IAClB,IAAa;AACjB,UAAO,KAAmB,EAAW,UAEnC,CADA,IAAa,EAAM,OAAO,EAAW,UAAU,GAAK,EACpD,IAAkB,EAAW,eAAe;AAE9C,UAAO;KAET,EAAI,iCAAiC;GACnC,IAAM,IAAY,EAAI,cAAc;AACpC,gBAAa;AACN,SACL,EAAI,gBAAgB;;;;CAI3B,EAIK,KAAmB,GACnB,KAAkB,IAClB,YAAmC;CACvC,WAAW;CACX,UAAU;CACX,GACK,KAAgB;CACpB,kBAAiB,OACR;EACL,GAAG;EACH,YAAY;GACV,GAAG,IAA2B;GAC9B,GAAI,GAA+B;GACpC;EACF;CAEH,oBAAmB,OACV,EACL,oBAAoB,GAAiB,cAAc,EAAM,EAC1D;CAEH,cAAa,MAAS;EACpB,IAAI,IAAa,IACb,IAAS;AAyHb,EAxHA,EAAM,4BAA4B;AAEhC,OAAI,CAAC,GAAY;AACf,MAAM,aAAa;AACjB,SAAa;MACb;AACF;;AAEF,OAAqC,EAAM,QAAQ,gBAAgD,EAAM,QAAQ,sBAAqC,CAAC,EAAM,QAAQ,kBAAkB;AACrL,QAAI,EAAQ;AAEZ,IADA,IAAS,IACT,EAAM,aAAa;AAEjB,KADA,EAAM,gBAAgB,EACtB,IAAS;MACT;;KAGN,EAAM,iBAAgB,MAKb,EAAM,QAAQ,sBAAsB,OAAO,KAAK,IAAI,EAAM,QAAQ,oBAJrD,MACH,GAAiB,GAAS,EAAI,CAGyD,EAE1G,EAAM,mBAAkB,MAAgB;AAEtC,KAAM,cAAc,IAAe,IAA2B,GAA4B,EAAM,aAAa,cAA8C,IAA2B,CAAC;KAEzL,EAAM,gBAAe,MAAW;AAC9B,KAAM,eAAc,MAAO;IACzB,IAAI,IAAY,GAAiB,GAAS,EAAI,UAAU,EAClD,IAAsB,EAAM,QAAQ,cAAc,UAAe,EAAM,QAAQ,cAAc,mBAA+B,EAAM,QAAQ,YAAY;AAE5J,WADA,IAAY,KAAK,IAAI,GAAG,KAAK,IAAI,GAAW,EAAa,CAAC,EACnD;KACL,GAAG;KACH;KACD;KACD;KAEJ,EAAM,kBAAiB,MAAgB;GACrC,IAA4B;AAC5B,KAAM,aAAa,IAAe,OAA8C,IAAsB,EAAM,iBAAiB,SAAS,IAAsB,EAAoB,eAAe,OAAO,KAAK,IAAI,EAAoB,cAA8C,GAAiB;KAEpS,EAAM,iBAAgB,MAAgB;GACpC,IAA4B;AAC5B,KAAM,YAAY,IAAe,OAA6C,IAAuB,EAAM,iBAAiB,SAAS,IAAuB,EAAqB,eAAe,OAAO,KAAK,IAAI,EAAqB,aAA6C,GAAgB;KAEpS,EAAM,eAAc,MAAW;AAC7B,KAAM,eAAc,MAAO;IACzB,IAAM,IAAW,KAAK,IAAI,GAAG,GAAiB,GAAS,EAAI,SAAS,CAAC,EAC/D,IAAc,EAAI,WAAW,EAAI,WACjC,IAAY,KAAK,MAAM,IAAc,EAAS;AACpD,WAAO;KACL,GAAG;KACH;KACA;KACD;KACD;KAGJ,EAAM,gBAAe,MAAW,EAAM,eAAc,MAAO;GAEzD,IAAI,IAAe,GAAiB,GAAkC,EAAM,QAAQ,aAA6C,GAAG;AAIpI,UAHI,OAAO,KAAiB,aAC1B,IAAe,KAAK,IAAI,IAAI,EAAa,GAEpC;IACL,GAAG;IACH,WAAW;IACZ;IACD,EACF,EAAM,iBAAiBC,QAAW,CAAC,EAAM,cAAc,CAAC,GAAE,MAAa;GACrE,IAAI,IAAc,EAAE;AAIpB,UAHI,KAAa,IAAY,MAC3B,IAAc,CAAC,GAAO,MAAM,EAAU,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,GAE9D;KACN,EAAe,EAAM,SAAS,cAAc,iBAAiB,CAAC,EACjE,EAAM,2BAA2B,EAAM,UAAU,CAAC,WAAW,YAAY,GACzE,EAAM,uBAAuB;GAC3B,IAAM,EACJ,iBACE,EAAM,UAAU,CAAC,YACf,IAAY,EAAM,cAAc;AAOtC,UANI,MAAc,KACT,KAEL,MAAc,IACT,KAEF,IAAY,IAAY;KAEjC,EAAM,qBACG,EAAM,cAAa,MAAO,IAAM,EAAE,EAE3C,EAAM,iBACG,EAAM,cAAa,MACjB,IAAM,EACb,EAEJ,EAAM,kBACG,EAAM,aAAa,EAAE,EAE9B,EAAM,iBACG,EAAM,aAAa,EAAM,cAAc,GAAG,EAAE,EAErD,EAAM,iCAAiC,EAAM,qBAAqB,EAClE,EAAM,+BACA,CAAC,EAAM,0BAA0B,EAAM,QAAQ,0BACjD,EAAM,yBAAyB,EAAM,QAAQ,sBAAsB,EAAM,GAEvE,EAAM,QAAQ,oBAAoB,CAAC,EAAM,yBACpC,EAAM,0BAA0B,GAElC,EAAM,wBAAwB,GAEvC,EAAM,qBAE6B,EAAM,QAAQ,aAA8C,KAAK,KAAK,EAAM,aAAa,GAAG,EAAM,UAAU,CAAC,WAAW,SAAS,EAEpK,EAAM,oBAE4B,EAAM,QAAQ,YAA4C,EAAM,0BAA0B,CAAC,KAAK;;CAGrI,EAIK,YAAmC;CACvC,KAAK,EAAE;CACP,QAAQ,EAAE;CACX,GACK,KAAa;CACjB,kBAAiB,OACR;EACL,YAAY,IAA2B;EACvC,GAAG;EACJ;CAEH,oBAAmB,OACV,EACL,oBAAoB,GAAiB,cAAc,EAAM,EAC1D;CAEH,YAAY,GAAK,MAAU;AA0DzB,EAzDA,EAAI,OAAO,GAAU,GAAiB,MAAsB;GAC1D,IAAM,IAAa,IAAkB,EAAI,aAAa,CAAC,KAAI,MAAQ;IACjE,IAAI,EACF,UACE;AACJ,WAAO;KACP,GAAG,EAAE,EACD,IAAe,IAAoB,EAAI,eAAe,CAAC,KAAI,MAAS;IACxE,IAAI,EACF,UACE;AACJ,WAAO;KACP,GAAG,EAAE,EACD,IAAS,IAAI,IAAI;IAAC,GAAG;IAAc,EAAI;IAAI,GAAG;IAAW,CAAC;AAChE,KAAM,eAAc,MAEd,MAAa,WAER;IACL,MAAkB,GAA2B,OAA0B,EAAE,EAAE,QAAO,MAAK,EAAE,KAAU,QAAQ,EAAO,IAAI,EAAE,EAAE;IAC1H,QAAQ,CAAC,IAAmB,GAA2B,UAAgC,EAAE,EAAE,QAAO,MAAK,EAAE,KAAU,QAAQ,EAAO,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,KAAK,EAAO,CAAC;IACnK,GAEC,MAAa,QAER;IACL,KAAK,CAAC,IAAiB,GAA2B,OAA2B,EAAE,EAAE,QAAO,MAAK,EAAE,KAAU,QAAQ,EAAO,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,KAAK,EAAO,CAAC;IACxJ,SAAyB,GAA2B,UAAiC,EAAE,EAAE,QAAO,MAAK,EAAE,KAAU,QAAQ,EAAO,IAAI,EAAE,EAAE;IACzI,GAEI;IACL,MAAmB,GAA2B,OAA2B,EAAE,EAAE,QAAO,MAAK,EAAE,KAAU,QAAQ,EAAO,IAAI,EAAE,EAAE;IAC5H,SAAyB,GAA2B,UAAiC,EAAE,EAAE,QAAO,MAAK,EAAE,KAAU,QAAQ,EAAO,IAAI,EAAE,EAAE;IACzI,CACD;KAEJ,EAAI,kBAAkB;GAEpB,IAAM,EACJ,qBACA,qBACE,EAAM;AAIV,UAHI,OAAO,KAAqB,aACvB,EAAiB,EAAI,GAEd,KAA8C,KAAiC;KAEjG,EAAI,oBAAoB;GACtB,IAAM,IAAS,CAAC,EAAI,GAAG,EACjB,EACJ,QACA,cACE,EAAM,UAAU,CAAC,YACf,IAAQ,EAAO,MAAK,MAAK,GAA2B,SAAS,EAAE,CAAC,EAChE,IAAW,EAAO,MAAK,MAAK,GAAiC,SAAS,EAAE,CAAC;AAC/E,UAAO,IAAQ,QAAQ,IAAW,WAAW;KAE/C,EAAI,uBAAuB;GAEzB,IAAM,IAAW,EAAI,aAAa;AAQlC,UAPK,MACgC,MAAa,QAAQ,EAAM,YAAY,GAAG,EAAM,eAAe,GAA2B,KAAI,MAAS;IAC1I,IAAI,EACF,UACE;AACJ,WAAO;KACP,GACyF,QAAQ,EAAI,GAAG,IAAoC,KAPxH;;;CAU1B,cAAa,MAAS;AAiCpB,EAhCA,EAAM,iBAAgB,MAAW,EAAM,QAAQ,sBAAsB,OAAO,KAAK,IAAI,EAAM,QAAQ,mBAAmB,EAAQ,EAC9H,EAAM,mBAAkB,MAEf,EAAM,cAAc,IAAe,IAA2B,GAAmD,EAAM,cAAqD,cAA8C,IAA2B,CAAC,EAE/P,EAAM,uBAAsB,MAAY;GAEtC,IAAM,IAAe,EAAM,UAAU,CAAC;AAKtC,UAJK,IAIE,EAAiC,EAAa,IAAoD,SAFhG,GAA8B,EAAa,KAA0C,UAAoC,EAAa,QAAgD;KAIjM,EAAM,kBAAkB,GAAa,GAAc,OAEV,EAAM,QAAQ,kBAAkD,MAGtG,KAAsC,EAAE,EAAE,KAAI,MAAS;GACtD,IAAM,IAAM,EAAM,OAAO,GAAO,GAAK;AACrC,UAAO,EAAI,yBAAyB,GAAG,IAAM;IAC7C,IAED,KAAsC,EAAE,EAAE,KAAI,MAAS,EAAY,MAAK,MAAO,EAAI,OAAO,EAAM,CAAC,EACtF,OAAO,QAAQ,CAAC,KAAI,OAAM;GACpC,GAAG;GACH;GACD,EAAE,EAEL,EAAM,aAAaA,QAAW,CAAC,EAAM,aAAa,CAAC,MAAM,EAAM,UAAU,CAAC,WAAW,IAAI,GAAG,GAAS,MAAoB,EAAM,eAAe,GAAS,GAAiB,MAAM,EAAE,EAAe,EAAM,SAAS,aAAa,aAAa,CAAC,EACzO,EAAM,gBAAgBA,QAAW,CAAC,EAAM,aAAa,CAAC,MAAM,EAAM,UAAU,CAAC,WAAW,OAAO,GAAG,GAAS,MAAuB,EAAM,eAAe,GAAS,GAAoB,SAAS,EAAE,EAAe,EAAM,SAAS,aAAa,gBAAgB,CAAC,EAC3P,EAAM,gBAAgBA,QAAW;GAAC,EAAM,aAAa,CAAC;GAAM,EAAM,UAAU,CAAC,WAAW;GAAK,EAAM,UAAU,CAAC,WAAW;GAAO,GAAG,GAAS,GAAK,MAAW;GAC1J,IAAM,IAAe,IAAI,IAAI,CAAC,GAAI,KAAoB,EAAE,EAAG,GAAI,KAA0B,EAAE,CAAE,CAAC;AAC9F,UAAO,EAAQ,QAAO,MAAK,CAAC,EAAa,IAAI,EAAE,GAAG,CAAC;KAClD,EAAe,EAAM,SAAS,aAAa,gBAAgB,CAAC;;CAElE,EAIK,KAAe;CACnB,kBAAiB,OACR;EACL,cAAc,EAAE;EAChB,GAAG;EACJ;CAEH,oBAAmB,OACV;EACL,sBAAsB,GAAiB,gBAAgB,EAAM;EAC7D,oBAAoB;EACpB,yBAAyB;EACzB,uBAAuB;EAIxB;CAEH,cAAa,MAAS;AA0LpB,EAzLA,EAAM,mBAAkB,MAAW,EAAM,QAAQ,wBAAwB,OAAO,KAAK,IAAI,EAAM,QAAQ,qBAAqB,EAAQ,EACpI,EAAM,qBAAoB,MAEjB,EAAM,gBAAgB,IAAe,EAAE,GAA4B,EAAM,aAAa,gBAAgD,EAAE,CAAC,EAElJ,EAAM,yBAAwB,MAAS;AACrC,KAAM,iBAAgB,MAAO;AAC3B,QAAe,MAAU,SAAsB,CAAC,EAAM,sBAAsB,GAArC;IACvC,IAAM,IAAe,EACnB,GAAG,GACJ,EACK,IAAqB,EAAM,uBAAuB,CAAC;AAgBzD,WAZI,IACF,EAAmB,SAAQ,MAAO;AAC3B,OAAI,cAAc,KAGvB,EAAa,EAAI,MAAM;MACvB,GAEF,EAAmB,SAAQ,MAAO;AAChC,YAAO,EAAa,EAAI;MACxB,EAEG;KACP;KAEJ,EAAM,6BAA4B,MAAS,EAAM,iBAAgB,MAAO;GACtE,IAAM,IAAuB,MAAU,SAAsB,CAAC,EAAM,0BAA0B,GAAzC,GAC/C,IAAe,EACnB,GAAG,GACJ;AAID,UAHA,EAAM,aAAa,CAAC,KAAK,SAAQ,MAAO;AACtC,OAAoB,GAAc,EAAI,IAAI,GAAe,IAAM,EAAM;KACrE,EACK;IACP,EA4DF,EAAM,+BAA+B,EAAM,iBAAiB,EAC5D,EAAM,sBAAsBA,QAAW,CAAC,EAAM,UAAU,CAAC,cAAc,EAAM,iBAAiB,CAAC,GAAG,GAAc,MACzG,OAAO,KAAK,EAAa,CAAC,SAOxB,GAAa,GAAO,EAAS,GAN3B;GACL,MAAM,EAAE;GACR,UAAU,EAAE;GACZ,UAAU,EAAE;GACb,EAGF,EAAe,EAAM,SAAS,cAAc,sBAAsB,CAAC,EACtE,EAAM,8BAA8BA,QAAW,CAAC,EAAM,UAAU,CAAC,cAAc,EAAM,qBAAqB,CAAC,GAAG,GAAc,MACrH,OAAO,KAAK,EAAa,CAAC,SAOxB,GAAa,GAAO,EAAS,GAN3B;GACL,MAAM,EAAE;GACR,UAAU,EAAE;GACZ,UAAU,EAAE;GACb,EAGF,EAAe,EAAM,SAAS,cAAc,8BAA8B,CAAC,EAC9E,EAAM,6BAA6BA,QAAW,CAAC,EAAM,UAAU,CAAC,cAAc,EAAM,mBAAmB,CAAC,GAAG,GAAc,MAClH,OAAO,KAAK,EAAa,CAAC,SAOxB,GAAa,GAAO,EAAS,GAN3B;GACL,MAAM,EAAE;GACR,UAAU,EAAE;GACZ,UAAU,EAAE;GACb,EAGF,EAAe,EAAM,SAAS,cAAc,6BAA6B,CAAC,EAkB7E,EAAM,6BAA6B;GACjC,IAAM,IAAqB,EAAM,qBAAqB,CAAC,UACjD,EACJ,oBACE,EAAM,UAAU,EAChB,IAAoB,GAAQ,EAAmB,UAAU,OAAO,KAAK,EAAa,CAAC;AAMvF,UALI,KACE,EAAmB,MAAK,MAAO,EAAI,cAAc,IAAI,CAAC,EAAa,EAAI,IAAI,KAC7E,IAAoB,KAGjB;KAET,EAAM,iCAAiC;GACrC,IAAM,IAAqB,EAAM,uBAAuB,CAAC,SAAS,QAAO,MAAO,EAAI,cAAc,CAAC,EAC7F,EACJ,oBACE,EAAM,UAAU,EAChB,IAAwB,CAAC,CAAC,EAAmB;AAIjD,UAHI,KAAyB,EAAmB,MAAK,MAAO,CAAC,EAAa,EAAI,IAAI,KAChF,IAAwB,KAEnB;KAET,EAAM,8BAA8B;GAElC,IAAM,IAAgB,OAAO,KAA8B,EAAM,UAAU,CAAC,gBAAgD,EAAE,CAAC,CAAC;AAChI,UAAO,IAAgB,KAAK,IAAgB,EAAM,qBAAqB,CAAC,SAAS;KAEnF,EAAM,kCAAkC;GACtC,IAAM,IAAqB,EAAM,uBAAuB,CAAC;AACzD,UAAO,EAAM,0BAA0B,GAAG,KAAQ,EAAmB,QAAO,MAAO,EAAI,cAAc,CAAC,CAAC,MAAK,MAAK,EAAE,eAAe,IAAI,EAAE,mBAAmB,CAAC;KAE9J,EAAM,yCACG,MAAK;AACV,KAAM,sBAAsB,EAAE,OAAO,QAAQ;KAGjD,EAAM,6CACG,MAAK;AACV,KAAM,0BAA0B,EAAE,OAAO,QAAQ;;;CAIvD,YAAY,GAAK,MAAU;AAuDzB,EAtDA,EAAI,kBAAkB,GAAO,MAAS;GACpC,IAAM,IAAa,EAAI,eAAe;AACtC,KAAM,iBAAgB,MAAO;AAG3B,QADA,IAAe,MAAU,SAAsB,CAAC,IAAT,GACnC,EAAI,cAAc,IAAI,MAAe,EACvC,QAAO;IAET,IAAM,IAAiB,EACrB,GAAG,GACJ;AAED,WADA,GAAoB,GAAgB,EAAI,IAAI,GAA+B,GAA6B,kBAAiD,IAAM,EAAM,EAC9J;KACP;KAEJ,EAAI,sBAAsB;GACxB,IAAM,EACJ,oBACE,EAAM,UAAU;AACpB,UAAO,GAAc,GAAK,EAAa;KAEzC,EAAI,0BAA0B;GAC5B,IAAM,EACJ,oBACE,EAAM,UAAU;AACpB,UAAO,GAAiB,GAAK,EAAa,KAAK;KAEjD,EAAI,gCAAgC;GAClC,IAAM,EACJ,oBACE,EAAM,UAAU;AACpB,UAAO,GAAiB,GAAK,EAAa,KAAK;KAEjD,EAAI,qBAEE,OAAO,EAAM,QAAQ,sBAAuB,aACvC,EAAM,QAAQ,mBAAmB,EAAI,GAEd,EAAM,QAAQ,sBAAsD,IAEtG,EAAI,4BAEE,OAAO,EAAM,QAAQ,yBAA0B,aAC1C,EAAM,QAAQ,sBAAsB,EAAI,GAEhB,EAAM,QAAQ,yBAA0D,IAE3G,EAAI,0BAEE,OAAO,EAAM,QAAQ,2BAA4B,aAC5C,EAAM,QAAQ,wBAAwB,EAAI,GAElB,EAAM,QAAQ,2BAA4D,IAE7G,EAAI,iCAAiC;GACnC,IAAM,IAAY,EAAI,cAAc;AACpC,WAAO,MAAK;AAEL,SACL,EAAI,eAA0B,EAAE,QAAmC,QAAQ;;;;CAIlF,EACK,MAAuB,GAAgB,GAAI,GAAO,GAAiB,MAAU;CACjF,IAAI;CACJ,IAAM,IAAM,EAAM,OAAO,GAAI,GAAK;AAoBlC,CAZI,KACG,EAAI,mBAAmB,IAC1B,OAAO,KAAK,EAAe,CAAC,SAAQ,MAAO,OAAO,EAAe,GAAK,EAEpE,EAAI,cAAc,KACpB,EAAe,KAAM,OAGvB,OAAO,EAAe,IAIpB,MAAoB,IAAe,EAAI,YAAY,QAAQ,EAAa,UAAU,EAAI,qBAAqB,IAC7G,EAAI,QAAQ,SAAQ,MAAO,GAAoB,GAAgB,EAAI,IAAI,GAAO,GAAiB,EAAM,CAAC;;AAG1G,SAAS,GAAa,GAAO,GAAU;CACrC,IAAM,IAAe,EAAM,UAAU,CAAC,cAChC,IAAsB,EAAE,EACxB,IAAsB,EAAE,EAGxB,IAAc,SAAU,GAAM,GAAO;AACzC,SAAO,EAAK,KAAI,MAAO;GACrB,IAAI;GACJ,IAAM,IAAa,GAAc,GAAK,EAAa;AAWnD,OAVI,MACF,EAAoB,KAAK,EAAI,EAC7B,EAAoB,EAAI,MAAM,KAE3B,IAAgB,EAAI,YAAY,QAAQ,EAAc,WACzD,IAAM;IACJ,GAAG;IACH,SAAS,EAAY,EAAI,QAAQ;IAClC,GAEC,EACF,QAAO;IAET,CAAC,OAAO,QAAQ;;AAEpB,QAAO;EACL,MAAM,EAAY,EAAS,KAAK;EAChC,UAAU;EACV,UAAU;EACX;;AAEH,SAAS,GAAc,GAAK,GAAW;AAErC,QAA4B,EAAU,EAAI,OAAmC;;AAE/E,SAAS,GAAiB,GAAK,GAAW,GAAO;CAC/C,IAAI;AACJ,KAAI,GAAG,IAAgB,EAAI,YAAY,QAAQ,EAAc,QAAS,QAAO;CAC7E,IAAI,IAAsB,IACtB,IAAe;AA2BnB,QA1BA,EAAI,QAAQ,SAAQ,MAAU;AAExB,aAAgB,CAAC,OAGjB,EAAO,cAAc,KACnB,GAAc,GAAQ,EAAU,GAClC,IAAe,KAEf,IAAsB,KAKtB,EAAO,WAAW,EAAO,QAAQ,SAAQ;GAC3C,IAAM,IAAyB,GAAiB,GAAQ,EAAU;AAClE,GAAI,MAA2B,QAC7B,IAAe,MACN,MAA2B,WACpC,IAAe,KAGf,IAAsB;;GAG1B,EACK,IAAsB,QAAQ,IAAe,SAAS;;AAG/D,IAAM,KAAsB,cACtB,MAAgB,GAAM,GAAM,MACzB,GAAoB,GAAS,EAAK,SAAS,EAAS,CAAC,CAAC,aAAa,EAAE,GAAS,EAAK,SAAS,EAAS,CAAC,CAAC,aAAa,CAAC,EAExH,MAA6B,GAAM,GAAM,MACtC,GAAoB,GAAS,EAAK,SAAS,EAAS,CAAC,EAAE,GAAS,EAAK,SAAS,EAAS,CAAC,CAAC,EAK5F,MAAQ,GAAM,GAAM,MACjB,GAAa,GAAS,EAAK,SAAS,EAAS,CAAC,CAAC,aAAa,EAAE,GAAS,EAAK,SAAS,EAAS,CAAC,CAAC,aAAa,CAAC,EAKjH,MAAqB,GAAM,GAAM,MAC9B,GAAa,GAAS,EAAK,SAAS,EAAS,CAAC,EAAE,GAAS,EAAK,SAAS,EAAS,CAAC,CAAC,EAErF,MAAY,GAAM,GAAM,MAAa;CACzC,IAAM,IAAI,EAAK,SAAS,EAAS,EAC3B,IAAI,EAAK,SAAS,EAAS;AAKjC,QAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK;GAE5B,MAAS,GAAM,GAAM,MAClB,GAAa,EAAK,SAAS,EAAS,EAAE,EAAK,SAAS,EAAS,CAAC;AAKvE,SAAS,GAAa,GAAG,GAAG;AAC1B,QAAO,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI;;AAEnC,SAAS,GAAS,GAAG;AAUnB,QATI,OAAO,KAAM,WACX,MAAM,EAAE,IAAI,MAAM,YAAY,MAAM,YAC/B,KAEF,OAAO,EAAE,GAEd,OAAO,KAAM,WACR,IAEF;;AAMT,SAAS,GAAoB,GAAM,GAAM;CAGvC,IAAM,IAAI,EAAK,MAAM,GAAoB,CAAC,OAAO,QAAQ,EACnD,IAAI,EAAK,MAAM,GAAoB,CAAC,OAAO,QAAQ;AAGzD,QAAO,EAAE,UAAU,EAAE,SAAQ;EAC3B,IAAM,IAAK,EAAE,OAAO,EACd,IAAK,EAAE,OAAO,EACd,IAAK,SAAS,GAAI,GAAG,EACrB,IAAK,SAAS,GAAI,GAAG,EACrB,IAAQ,CAAC,GAAI,EAAG,CAAC,MAAM;AAG7B,MAAI,MAAM,EAAM,GAAG,EAAE;AACnB,OAAI,IAAK,EACP,QAAO;AAET,OAAI,IAAK,EACP,QAAO;AAET;;AAIF,MAAI,MAAM,EAAM,GAAG,CACjB,QAAO,MAAM,EAAG,GAAG,KAAK;AAI1B,MAAI,IAAK,EACP,QAAO;AAET,MAAI,IAAK,EACP,QAAO;;AAGX,QAAO,EAAE,SAAS,EAAE;;AAKtB,IAAM,KAAa;CACjB;CACA;CACA;CACA;CACA;CACA;CACD,EAmNK,KAAkB;CAAC;CAAS;CAAkB;CAAgB;CAAe;CAAgB;CAAiB;CAEpH;CAjNmB;EACjB,kBAAiB,OACR;GACL,SAAS,EAAE;GACX,GAAG;GACJ;EAEH,4BACS;GACL,WAAW;GACX,eAAe;GAChB;EAEH,oBAAmB,OACV;GACL,iBAAiB,GAAiB,WAAW,EAAM;GACnD,mBAAkB,MACT,EAAE;GAEZ;EAEH,eAAe,GAAQ,MAAU;AA8J/B,GA7JA,EAAO,yBAAyB;IAC9B,IAAM,IAAY,EAAM,qBAAqB,CAAC,SAAS,MAAM,GAAG,EAC5D,IAAW;AACf,SAAK,IAAM,KAAO,GAAW;KAC3B,IAAM,IAAQ,GAA2B,SAAS,EAAO,GAAG;AAC5D,SAAI,OAAO,UAAU,SAAS,KAAK,EAAM,KAAK,gBAC5C,QAAO,GAAW;AAEpB,SAAI,OAAO,KAAU,aACnB,IAAW,IACP,EAAM,MAAM,GAAoB,CAAC,SAAS,GAC5C,QAAO,GAAW;;AAOxB,WAHI,IACK,GAAW,OAEb,GAAW;MAEpB,EAAO,uBAGD,OAFa,EAAM,qBAAqB,CAAC,SAAS,IACH,SAAS,EAAO,GAAG,IACjD,WACZ,QAEF,QAET,EAAO,qBAAqB;AAE1B,QAAI,CAAC,EACH,OAAU,OAAO;AAEnB,WAAOD,GAAW,EAAO,UAAU,UAAU,GAAG,EAAO,UAAU,YAAY,EAAO,UAAU,cAAc,SAAS,EAAO,kBAAkB,GAAsD,EAAM,QAAQ,aAAsD,EAAO,UAAU,cAA8C,GAAW,EAAO,UAAU;MAErW,EAAO,iBAAiB,GAAM,MAAU;IAWtC,IAAM,IAAmB,EAAO,qBAAqB,EAC/C,IAAwB,KAAiC;AAC/D,MAAM,YAAW,MAAO;KAEtB,IAAM,IAAkB,GAA2B,MAAK,MAAK,EAAE,OAAO,EAAO,GAAG,EAC1E,IAAgB,GAA2B,WAAU,MAAK,EAAE,OAAO,EAAO,GAAG,EAC/E,IAAa,EAAE,EAGf,GACA,IAAW,IAAiB,IAAO,MAAqB;AAyD5D,YAtDA,AAaI,IAbA,KAAO,QAAQ,EAAI,UAAU,EAAO,iBAAiB,IAAI,IACvD,IACW,WAEA,QAIX,KAAO,QAAQ,EAAI,UAAU,MAAkB,EAAI,SAAS,IACjD,YACJ,IACI,WAEA,WAKb,MAAe,aAEZ,KAEE,MACH,IAAa,YAIf,MAAe,SAEjB,IAAa,CAAC,GAAG,GAAK;MACpB,IAAI,EAAO;MACX,MAAM;MACP,CAAC,EAEF,EAAW,OAAO,GAAG,EAAW,UAAmC,EAAM,QAAQ,qCAAiF,IAelK,IAdS,MAAe,WAEX,EAAI,KAAI,MACf,EAAE,OAAO,EAAO,KACX;MACL,GAAG;MACH,MAAM;MACP,GAEI,EACP,GACO,MAAe,WACX,EAAI,QAAO,MAAK,EAAE,OAAO,EAAO,GAAG,GAEnC,CAAC;MACZ,IAAI,EAAO;MACX,MAAM;MACP,CAAC,EAEG;MACP;MAEJ,EAAO,wBAEkD,EAAO,UAAU,iBAAiD,EAAM,QAAQ,iBAAgC,EAAO,gBAAgB,KAAK,SAC5K,SAAS,OAElC,EAAO,uBAAsB,MAAS;IAEpC,IAAM,IAAqB,EAAO,iBAAiB,EAC7C,IAAW,EAAO,aAAa;AAUrC,WATK,IAGD,MAAa,MAAgD,EAAM,QAAQ,wBAAwD,QAEvI,OAAkC,EAAM,QAAQ,qBAAsD,OAE7F,KAEF,MAAa,SAAS,QAAQ,SAR5B;MAUX,EAAO,oBAE4B,EAAO,UAAU,iBAAiD,QAAoC,EAAM,QAAQ,iBAAkD,OAAS,CAAC,CAAC,EAAO,YAE3N,EAAO,wBAEqC,EAAO,UAAU,mBAAoD,EAAM,QAAQ,mBAAmC,CAAC,CAAC,EAAO,YAE3K,EAAO,oBAAoB;IAEzB,IAAM,IAAsC,EAAM,UAAU,CAAC,SAAkD,MAAK,MAAK,EAAE,OAAO,EAAO,GAAG;AAC5I,WAAQ,IAAqB,EAAW,OAAO,SAAS,QAAnC;MAEvB,EAAO,qBAEsD,EAAM,UAAU,CAAC,SAAmD,WAAU,MAAK,EAAE,OAAO,EAAO,GAAG,IAAqC,IAExM,EAAO,qBAAqB;AAE1B,MAAM,YAAW,MAAO,KAAO,QAAQ,EAAI,SAAS,EAAI,QAAO,MAAK,EAAE,OAAO,EAAO,GAAG,GAAG,EAAE,CAAC;MAE/F,EAAO,gCAAgC;IACrC,IAAM,IAAU,EAAO,YAAY;AACnC,YAAO,MAAK;AACL,WACL,EAAE,WAAW,QAAQ,EAAE,SAAS,EAChC,EAAO,iBAAiB,QAAQ,EAAO,cAAc,KAAA,GAAW,EAAO,iBAAiB,GAAG,EAAM,QAAQ,oBAAoB,OAAO,KAAK,IAAI,EAAM,QAAQ,iBAAiB,EAAE,GAAG,GAAM;;;;EAI7L,cAAa,MAAS;AAOpB,GANA,EAAM,cAAa,MAAW,EAAM,QAAQ,mBAAmB,OAAO,KAAK,IAAI,EAAM,QAAQ,gBAAgB,EAAQ,EACrH,EAAM,gBAAe,MAAgB;AAEnC,MAAM,WAAW,IAAe,EAAE,GAAmD,EAAM,cAAqD,WAA2C,EAAE,CAAC;MAEhM,EAAM,6BAA6B,EAAM,oBAAoB,EAC7D,EAAM,2BACA,CAAC,EAAM,sBAAsB,EAAM,QAAQ,sBAC7C,EAAM,qBAAqB,EAAM,QAAQ,kBAAkB,EAAM,GAE/D,EAAM,QAAQ,iBAAiB,CAAC,EAAM,qBACjC,EAAM,sBAAsB,GAE9B,EAAM,oBAAoB;;EAGtC;CAMW;CAEZ;CAAc;CAAe;CAAY;CAAc;CAAa;AAIpE,SAAS,GAAY,GAAS;AAE5B,CAAA,QAAA,IAAA,aAA6B,iBAAiB,EAAQ,YAAY,EAAQ,eACxE,QAAQ,KAAK,6BAA6B;CAE5C,IAAM,IAAY,CAAC,GAAG,IAAiB,GAA0B,EAAQ,aAA0C,EAAE,CAAE,EACnH,IAAQ,EACV,cACD,EACK,IAAiB,EAAM,UAAU,QAAQ,GAAK,MAC3C,OAAO,OAAO,GAAK,EAAQ,qBAAqB,OAAO,KAAK,IAAI,EAAQ,kBAAkB,EAAM,CAAC,EACvG,EAAE,CAAC,EACA,KAAe,MACf,EAAM,QAAQ,eACT,EAAM,QAAQ,aAAa,GAAgB,EAAQ,GAErD;EACL,GAAG;EACH,GAAG;EACJ,EAGC,IAAe,EAEjB,GAA6B,EAAQ,gBAAgD,EAAE,EACxF;AACD,GAAM,UAAU,SAAQ,MAAW;AAEjC,OAAwC,EAAQ,mBAAmB,OAAO,KAAK,IAAI,EAAQ,gBAAgB,EAAa,KAAoC;GAC5J;CACF,IAAM,IAAS,EAAE,EACb,IAAgB,IACd,IAAe;EACnB;EACA,SAAS;GACP,GAAG;GACH,GAAG;GACJ;EACD;EACA,SAAQ,MAAM;AAEZ,GADA,EAAO,KAAK,EAAG,EACV,MACH,IAAgB,IAIhB,QAAQ,SAAS,CAAC,WAAW;AAC3B,WAAO,EAAO,QACZ,GAAO,OAAO,EAAE;AAElB,QAAgB;KAChB,CAAC,OAAM,MAAS,iBAAiB;AACjC,UAAM;KACN,CAAC;;EAGP,aAAa;AACX,KAAM,SAAS,EAAM,aAAa;;EAEpC,aAAY,MAAW;AAErB,KAAM,UAAU,EADG,GAAiB,GAAS,EAAM,QAAQ,CACnB;;EAE1C,gBACS,EAAM,QAAQ;EAEvB,WAAU,MAAW;AACnB,KAAM,QAAQ,iBAAiB,QAAQ,EAAM,QAAQ,cAAc,EAAQ;;EAE7E,YAAY,GAAK,GAAO,OAEU,EAAM,QAAQ,YAAY,OAAO,KAAK,IAAI,EAAM,QAAQ,SAAS,GAAK,GAAO,EAAO,KAAoC,GAAG,IAAS,CAAC,EAAO,IAAI,EAAM,CAAC,KAAK,IAAI,GAAG;EAErM,wBACE,AACE,EAAM,qBAAmB,EAAM,QAAQ,gBAAgB,EAAM,EAExD,EAAM,kBAAkB;EAKjC,mBACS,EAAM,uBAAuB;EAGtC,SAAS,GAAI,MAAc;GACzB,IAAI,KAAO,IAAY,EAAM,0BAA0B,GAAG,EAAM,aAAa,EAAE,SAAS;AACxF,OAAI,CAAC,MACH,IAAM,EAAM,iBAAiB,CAAC,SAAS,IACnC,CAAC,GAIH,OAHA,QAAA,IAAA,aAA6B,eAGnB,OAAO,GAFL,MAAM,sCAAsC,IAAK;AAKjE,UAAO;;EAET,sBAAsBC,QAAW,CAAC,EAAM,QAAQ,cAAc,GAAE,OAE9D,MAA4E,EAAE,EACvE;GACL,SAAQ,MAAS;IACf,IAAM,IAAoB,EAAM,OAAO,OAAO;AAO9C,WANI,EAAkB,cACb,EAAkB,cAEvB,EAAkB,aACb,EAAkB,KAEpB;;GAGT,OAAM,MAAS;IACb,IAA2B;AAC3B,aAAiC,IAAqB,EAAM,aAAa,KAAK,QAAQ,EAAmB,YAAY,OAAO,KAAK,IAAI,EAAmB,UAAU,KAAoC;;GAExM,GAAG,EAAM,UAAU,QAAQ,GAAK,MACvB,OAAO,OAAO,GAAK,EAAQ,uBAAuB,OAAO,KAAK,IAAI,EAAQ,qBAAqB,CAAC,EACtG,EAAE,CAAC;GACN,GAAG;GACJ,GACA,EAAe,GAAS,gBAAgB,uBAAuB,CAAC;EACnE,sBAAsB,EAAM,QAAQ;EACpC,eAAeA,QAAW,CAAC,EAAM,gBAAgB,CAAC,GAAE,MAAc;GAChE,IAAM,IAAiB,SAAU,GAAY,GAAQ,GAAO;AAI1D,WAHI,MAAU,KAAK,MACjB,IAAQ,IAEH,EAAW,KAAI,MAAa;KACjC,IAAM,IAAS,GAAa,GAAO,GAAW,GAAO,EAAO,EACtD,IAAoB;AAE1B,YADA,EAAO,UAAU,EAAkB,UAAU,EAAe,EAAkB,SAAS,GAAQ,IAAQ,EAAE,GAAG,EAAE,EACvG;MACP;;AAEJ,UAAO,EAAe,EAAW;KAChC,EAAe,GAAS,gBAAgB,gBAAgB,CAAC;EAC5D,mBAAmBA,QAAW,CAAC,EAAM,eAAe,CAAC,GAAE,MAC9C,EAAW,SAAQ,MACjB,EAAO,gBAAgB,CAC9B,EACD,EAAe,GAAS,gBAAgB,oBAAoB,CAAC;EAChE,wBAAwBA,QAAW,CAAC,EAAM,mBAAmB,CAAC,GAAE,MACvD,EAAY,QAAQ,GAAK,OAC9B,EAAI,EAAO,MAAM,GACV,IACN,EAAE,CAAC,EACL,EAAe,GAAS,gBAAgB,wBAAwB,CAAC;EACpE,mBAAmBA,QAAW,CAAC,EAAM,eAAe,EAAE,EAAM,oBAAoB,CAAC,GAAG,GAAY,MAEvF,EADW,EAAW,SAAQ,MAAU,EAAO,gBAAgB,CAAC,CACvC,EAC/B,EAAe,GAAS,gBAAgB,oBAAoB,CAAC;EAChE,YAAW,MAAY;GACrB,IAAM,IAAS,EAAM,wBAAwB,CAAC;AAI9C,UAHA,QAAA,IAAA,aAA6B,gBAAgB,CAAC,KAC5C,QAAQ,MAAM,2BAA2B,EAAS,mBAAmB,EAEhE;;EAEV;AACD,QAAO,OAAO,GAAO,EAAa;AAClC,MAAK,IAAI,IAAQ,GAAG,IAAQ,EAAM,UAAU,QAAQ,KAAS;EAC3D,IAAM,IAAU,EAAM,UAAU;AAChC,OAAW,QAAQ,EAAQ,eAAe,QAAQ,EAAQ,YAAY,EAAM;;AAE9E,QAAO;;AAGT,SAAS,KAAkB;AACzB,SAAO,MAASA,QAAW,CAAC,EAAM,QAAQ,KAAK,GAAE,MAAQ;EACvD,IAAM,IAAW;GACf,MAAM,EAAE;GACR,UAAU,EAAE;GACZ,UAAU,EAAE;GACb,EACK,IAAa,SAAU,GAAc,GAAO,GAAW;AAC3D,GAAI,MAAU,KAAK,MACjB,IAAQ;GAEV,IAAM,IAAO,EAAE;AACf,QAAK,IAAI,IAAI,GAAG,IAAI,EAAa,QAAQ,KAAK;IAS5C,IAAM,IAAM,GAAU,GAAO,EAAM,UAAU,EAAa,IAAI,GAAG,EAAU,EAAE,EAAa,IAAI,GAAG,GAAO,KAAA,GAAW,GAAuC,GAAG;AAU7J,QAPA,EAAS,SAAS,KAAK,EAAI,EAE3B,EAAS,SAAS,EAAI,MAAM,GAE5B,EAAK,KAAK,EAAI,EAGV,EAAM,QAAQ,YAAY;KAC5B,IAAI;AAIJ,KAHA,EAAI,kBAAkB,EAAM,QAAQ,WAAW,EAAa,IAAI,EAAE,GAG7D,IAAuB,EAAI,oBAAoB,QAAQ,EAAqB,WAC/E,EAAI,UAAU,EAAW,EAAI,iBAAiB,IAAQ,GAAG,EAAI;;;AAInE,UAAO;;AAGT,SADA,EAAS,OAAO,EAAW,EAAK,EACzB;IACN,EAAe,EAAM,SAAS,cAAc,qBAAqB,EAAM,qBAAqB,CAAC,CAAC;;AAenG,SAAS,GAAW,GAAU;CAC5B,IAAM,IAAe,EAAE,EACjB,KAAY,MAAO;EACvB,IAAI;AAEJ,EADA,EAAa,KAAK,EAAI,GACjB,IAAe,EAAI,YAAY,QAAQ,EAAa,UAAU,EAAI,eAAe,IACpF,EAAI,QAAQ,QAAQ,EAAU;;AAIlC,QADA,EAAS,KAAK,QAAQ,EAAU,EACzB;EACL,MAAM;EACN,UAAU,EAAS;EACnB,UAAU,EAAS;EACpB;;AA0YH,SAAS,GAAsB,GAAM;AACnC,SAAO,MAASA,QAAW;EAAC,EAAM,UAAU,CAAC;EAAY,EAAM,0BAA0B;EAAE,EAAM,QAAQ,uBAAuB,KAAA,IAAY,EAAM,UAAU,CAAC;EAAS,GAAG,GAAY,MAAa;AAChM,MAAI,CAAC,EAAS,KAAK,OACjB,QAAO;EAET,IAAM,EACJ,aACA,iBACE,GACA,EACF,SACA,aACA,gBACE,GACE,IAAY,IAAW,GACvB,IAAU,IAAY;AAC5B,MAAO,EAAK,MAAM,GAAW,EAAQ;EACrC,IAAI;AAcJ,EAbA,AACE,IADG,EAAM,QAAQ,uBAOG;GAClB;GACA;GACA;GACD,GAVmB,GAAW;GAC7B;GACA;GACA;GACD,CAAC,EAQJ,EAAkB,WAAW,EAAE;EAC/B,IAAM,KAAY,MAAO;AAEvB,GADA,EAAkB,SAAS,KAAK,EAAI,EAChC,EAAI,QAAQ,UACd,EAAI,QAAQ,QAAQ,EAAU;;AAIlC,SADA,EAAkB,KAAK,QAAQ,EAAU,EAClC;IACN,EAAe,EAAM,SAAS,cAAc,wBAAwB,CAAC;;AAG1E,SAAS,KAAoB;AAC3B,SAAO,MAASA,QAAW,CAAC,EAAM,UAAU,CAAC,SAAS,EAAM,sBAAsB,CAAC,GAAG,GAAS,MAAa;AAC1G,MAAI,CAAC,EAAS,KAAK,UAAU,EAAE,KAAW,QAAQ,EAAQ,QACxD,QAAO;EAET,IAAM,IAAe,EAAM,UAAU,CAAC,SAChC,IAAiB,EAAE,EAGnB,IAAmB,EAAa,QAAO,MAEhB,EAAM,UAAU,EAAK,GAAG,EAAsC,YAAY,CACrG,EACI,IAAiB,EAAE;AACzB,IAAiB,SAAQ,MAAa;GACpC,IAAM,IAAS,EAAM,UAAU,EAAU,GAAG;AACvC,SACL,EAAe,EAAU,MAAM;IAC7B,eAAe,EAAO,UAAU;IAChC,eAAe,EAAO,UAAU;IAChC,WAAW,EAAO,cAAc;IACjC;IACD;EACF,IAAM,KAAW,MAAQ;GAGvB,IAAM,IAAa,EAAK,KAAI,OAAQ,EAClC,GAAG,GACJ,EAAE;AAgDH,UA/CA,EAAW,MAAM,GAAM,MAAS;AAC9B,SAAK,IAAI,IAAI,GAAG,IAAI,EAAiB,QAAQ,KAAK,GAAG;KAEnD,IAAM,IAAY,EAAiB,IAC7B,IAAa,EAAe,EAAU,KACtC,IAAgB,EAAW,eAC3B,IAA4B,GAAuC,QAAkC,IACvG,IAAU;AAGd,SAAI,GAAe;MACjB,IAAM,IAAS,EAAK,SAAS,EAAU,GAAG,EACpC,IAAS,EAAK,SAAS,EAAU,GAAG,EACpC,IAAa,MAAW,KAAA,GACxB,IAAa,MAAW,KAAA;AAC9B,UAAI,KAAc,GAAY;AAC5B,WAAI,MAAkB,QAAS,QAAO,IAAa,KAAK;AACxD,WAAI,MAAkB,OAAQ,QAAO,IAAa,IAAI;AACtD,WAAU,KAAc,IAAa,IAAI,IAAa,IAAgB,CAAC;;;AAQ3E,SALI,MAAY,MACd,IAAU,EAAW,UAAU,GAAM,GAAM,EAAU,GAAG,GAItD,MAAY,EAOd,QANI,MACF,KAAW,KAET,EAAW,kBACb,KAAW,KAEN;;AAGX,WAAO,EAAK,QAAQ,EAAK;KACzB,EAGF,EAAW,SAAQ,MAAO;IACxB,IAAI;AAEJ,IADA,EAAe,KAAK,EAAI,GACnB,IAAe,EAAI,YAAY,QAAQ,EAAa,WACvD,EAAI,UAAU,EAAS,EAAI,QAAQ;KAErC,EACK;;AAET,SAAO;GACL,MAAM,EAAS,EAAS,KAAK;GAC7B,UAAU;GACV,UAAU,EAAS;GACpB;IACA,EAAe,EAAM,SAAS,cAAc,2BAA2B,EAAM,qBAAqB,CAAC,CAAC;;;;AC96GzG,SAAS,GAAW,GAAM,GAAO;AAC/B,QAAQ,IAAc,GAAiB,EAAK,GAAgB,kBAAM,cAAc,GAAM,EAAM,GAAG,IAAhF;;AAEjB,SAAS,GAAiB,GAAW;AACnC,QAAO,GAAiB,EAAU,IAAI,OAAO,KAAc,cAAc,GAAkB,EAAU;;AAEvG,SAAS,GAAiB,GAAW;AACnC,QAAO,OAAO,KAAc,qBAAqB;EAC/C,IAAM,IAAQ,OAAO,eAAe,EAAU;AAC9C,SAAO,EAAM,aAAa,EAAM,UAAU;KACxC;;AAEN,SAAS,GAAkB,GAAW;AACpC,QAAO,OAAO,KAAc,YAAY,OAAO,EAAU,YAAa,YAAY,CAAC,cAAc,oBAAoB,CAAC,SAAS,EAAU,SAAS,YAAY;;AAEhK,SAAS,GAAc,GAAS;CAE9B,IAAM,IAAkB;EACtB,OAAO,EAAE;EAET,qBAAqB;EAErB,qBAAqB;EACrB,GAAG;EACJ,EAGK,CAAC,KAAYG,EAAM,gBAAgB,EACvC,SAAS,GAAY,EAAgB,EACtC,EAAE,EAGG,CAAC,GAAO,KAAYA,EAAM,eAAe,EAAS,QAAQ,aAAa;AAkB7E,QAdA,EAAS,QAAQ,YAAW,OAAS;EACnC,GAAG;EACH,GAAG;EACH,OAAO;GACL,GAAG;GACH,GAAG,EAAQ;GACZ;EAGD,gBAAe,MAAW;AAExB,GADA,EAAS,EAAQ,EACjB,EAAQ,iBAAiB,QAAQ,EAAQ,cAAc,EAAQ;;EAElE,EAAE,EACI,EAAS;;;;ACjElB,IAAM,KAAQ,EAAM,YAGjB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,OAAD;CAAK,WAAU;WACb,kBAAC,SAAD;EACO;EACL,WAAW,EAAG,iCAAiC,EAAU;EACzD,GAAI;EACJ,CAAA;CACE,CAAA,CACN;AACF,GAAM,cAAc;AAEpB,IAAM,KAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,SAAD;CAAY;CAAK,WAAW,EAAG,mBAAmB,EAAU;CAAE,GAAI;CAAS,CAAA,CAC3E;AACF,GAAY,cAAc;AAE1B,IAAM,KAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,SAAD;CACO;CACL,WAAW,EAAG,8BAA8B,EAAU;CACtD,GAAI;CACJ,CAAA,CACF;AACF,GAAU,cAAc;AAExB,IAAM,KAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,SAAD;CACO;CACL,WAAW,EACT,2DACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAY,cAAc;AAE1B,IAAM,KAAW,EAAM,YAGpB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,MAAD;CACO;CACL,WAAW,EACT,+EACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAS,cAAc;AAEvB,IAAM,KAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,MAAD;CACO;CAiBL,WAAW,EACT,iJACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAU,cAAc;AAExB,IAAM,KAAY,EAAM,YAGrB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,MAAD;CACO;CACL,WAAW,EACT,wFACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAU,cAAc;AAExB,IAAM,KAAe,EAAM,YAGxB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,WAAD;CACO;CACL,WAAW,EAAG,sCAAsC,EAAU;CAC9D,GAAI;CACJ,CAAA,CACF;AACF,GAAa,cAAc;;;ACtH3B,IAAM,KAAiB,EACrB,wTACA;CACE,UAAU;EACR,SAAS;GAKP,SACE;GACF,aACE;GACF,SACE;GACF,WACE;GACF,OAAO;GACP,MAAM;GACP;EACD,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;GACN,WAAW;GACX,WAAW;GACX,WAAW;GACZ;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CACF,EAQK,KAAS,EAAM,YAClB,EAAE,cAAW,YAAS,SAAM,aAAU,IAAO,GAAG,KAAS,MAGtD,kBAFW,IAAU,KAAO,UAE5B;CACE,WAAW,EAAG,GAAe;EAAE;EAAS;EAAM;EAAW,CAAC,CAAC;CACtD;CACL,GAAI;CACJ,CAAA,CAGP;AACD,GAAO,cAAc;;;AClCrB,SAAgB,GAAa,EAC3B,YACA,SACA,cAAW,IACX,gBACA,kBAAe,WACf,eACA,iBACA,gBACoB;CACpB,IAAM,CAAC,GAAS,KAAc,EAAuB,KAAe,EAAE,CAAC,EACjE,CAAC,GAAY,KAAiB,EAA0B;EAAE,WAAW;EAAG;EAAU,CAAC,EAEnF,IAAQ,GAAc;EAC1B;EACA;EACA,OAAO;GAAE;GAAS;GAAY;EAC9B,iBAAiB;EACjB,oBAAoB;EACpB,iBAAiB,IAAiB;EAClC,mBAAmB,IAAmB;EACtC,uBAAuB,IAAuB;EAC/C,CAAC;AAEF,QACE,kBAAC,OAAD;EAAK,aAAU;EAAa,WAAW,EAAG,qBAAqB,EAAU;YAAzE,CACE,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD,EAAA,UACG,EAAM,iBAAiB,CAAC,KAAK,MAC5B,kBAAC,IAAD,EAAA,UACG,EAAG,QAAQ,KAAK,MACf,kBAAC,IAAD;GAEE,WAAU;GACV,OAAO,EAAO,OAAO,UAAU,OAAO,EAAE,OAAO,EAAO,OAAO,UAAU,MAAM,GAAG,KAAA;GAChF,SAAS,EAAO,OAAO,yBAAyB;aAEhD,kBAAC,QAAD;IAAM,WAAU;cAAhB,CACG,GAAW,EAAO,OAAO,UAAU,QAAQ,EAAO,YAAY,CAAC,EAC/D;KACC,KAAK,kBAAC,IAAD,EAAS,WAAU,UAAW,CAAA;KACnC,MAAM,kBAAC,IAAD,EAAW,WAAU,UAAW,CAAA;KACvC,CAAC,EAAO,OAAO,aAAa,KAAe,KACvC;;GACG,EAZL,EAAO,GAYF,CACZ,EACO,EAjBI,EAAG,GAiBP,CACX,EACU,CAAA,EACd,kBAAC,IAAD,EAAA,UAAA,CACG,EAAM,aAAa,CAAC,KAAK,KAAK,MAC7B,kBAAC,IAAD;GAEE,WAAW,EACT,KAAc,kBACd,IAAe,EAAI,CACpB;GACD,eAAe,IAAa,EAAI,SAAS;aAExC,EAAI,iBAAiB,CAAC,KAAK,MAC1B,kBAAC,IAAD,EAAA,UACG,GAAW,EAAK,OAAO,UAAU,MAAM,EAAK,YAAY,CAAC,EAChD,EAFI,EAAK,GAET,CACZ;GACO,EAZJ,EAAI,GAYA,CACX,EACD,CAAC,EAAK,UACL,kBAAC,IAAD,EAAA,UACE,kBAAC,IAAD;GAAW,SAAS,EAAQ;GAAQ,WAAU;aAC3C;GACS,CAAA,EACH,CAAA,CAEH,EAAA,CAAA,CACN,EAAA,CAAA,EACP,EAAK,SAAS,EAAW,YACxB,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,QAAD;IAAM,WAAU;cAAhB;KACG,EAAW,YAAY,EAAW,WAAW;KAAE;KAAE,KAAK,KAAK,EAAW,YAAY,KAAK,EAAW,UAAU,EAAK,OAAO;KAAC;KAAK,EAAK;KAC/H;OACP,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,IAAD;MACE,SAAQ;MACR,MAAK;MACL,eAAe,EAAM,cAAc;MACnC,UAAU,CAAC,EAAM,oBAAoB;gBACtC;MAEQ,CAAA;KACT,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG,EAAW,YAAY;OAAE;OAAI,EAAM,cAAc;OAC7C;;KACP,kBAAC,IAAD;MACE,SAAQ;MACR,MAAK;MACL,eAAe,EAAM,UAAU;MAC/B,UAAU,CAAC,EAAM,gBAAgB;gBAClC;MAEQ,CAAA;KACL;MACF;KAEJ;;;;;AC1HV,SAAgB,GAAS,EAAE,UAAO,aAAU,UAAO,IAAM,gBAA4B;AACnF,QACE,kBAAC,QAAD;EAAM,aAAU;EAAY,WAAW,EAAG,kCAAkC,EAAU;YAAtF,CACE,kBAAC,QAAD;GACE,WAAU;GACV,OAAO,EAAE,iBAAiB,GAAO;GACjC,CAAA,EACF,kBAAC,QAAD;GAAM,WAAW,EAAG,IAAO,+BAA+B,iBAAiB;GACxE;GACI,CAAA,CACF;;;;;ACPX,SAAS,GAAoB,EAAE,gBAAuC;AACpE,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,2FACA,EACD;YAED,kBAAC,IAAD,EAAS,MAAK,MAAO,CAAA;EACjB,CAAA;;AAcV,SAAS,GAAoB,EAAE,cAAW,UAAO,MAAM,YAAmC;AACxF,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,oEACA,EACD;YAED,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,IAAD,EAAe,SAAQ,CAAA,EACtB,KACC,kBAAC,QAAD;IAAM,WAAU;cAAiC;IAAa,CAAA,CAE5D;;EACF,CAAA;;AAcV,SAAS,GAAW,EAAE,SAAM,YAAS,WAAQ,gBAA8B;AACzE,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,+DAA+D,EAAU;YAFzF;GAIG,KAAQ,kBAAC,OAAD;IAAK,WAAU;cAAiC;IAAW,CAAA;GACpE,kBAAC,KAAD;IAAG,WAAU;cAAiC;IAAY,CAAA;GACzD,KAAU,kBAAC,KAAD;IAAG,WAAU;cAAsC;IAAW,CAAA;GACrE;;;;;ACtDV,SAAS,GAAU,GAAe,GAAa,GAAiC;AAC9E,KAAI,KAAS,KAAK,MAAQ,EAAK;CAC/B,IAAM,KAAQ,IAAQ,MAAQ,IAAM,IAChC,GAAW,GAAW;AAU1B,QATI,KAAQ,MACV,IAAI,KAAK,MAAM,MAAqB,IAAO,IAArB,GAAwB,EAC9C,IAAI,KAAK,MAAM,MAAqB,IAAO,IAArB,GAAwB,EAC9C,IAAI,KAAK,MAAM,MAAqB,IAAO,IAArB,GAAwB,KAE9C,IAAI,KAAK,MAAM,MAAO,OAAe,IAAO,MAAO,GAAG,EACtD,IAAI,KAAK,MAAM,MAAO,QAAe,IAAO,MAAO,GAAG,EACtD,IAAI,KAAK,MAAM,MAAO,OAAe,IAAO,MAAO,GAAG,GAEjD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;;AAK5B,SAAS,GAAe,EAAE,WAAQ,eAAwD;CACxF,IAAM,IAAS,EAAO,aAAa;AACnC,QACE,kBAAC,UAAD;EACE,WAAU;EACV,SAAS,EAAO,yBAAyB;YAF3C;GAIG;GACA,MAAW,SAAS,kBAAC,IAAD;IAAa,MAAM;IAAI,WAAU;IAAoB,CAAA;GACzE,MAAW,UAAU,kBAAC,IAAD;IAAe,MAAM;IAAI,WAAU;IAAoB,CAAA;GACtE;;;AAuBb,SAAS,GAAgB,EACvB,SACA,YACA,cAAW,IACX,iBAAc,CAAC;CAAE,IAAI;CAAS,MAAM;CAAM,CAAC,EAC3C,eACA,iBAAc,SACd,gBACuB;CACvB,IAAM,CAAC,GAAS,KAAc,EAAuB,EAAY,EAC3D,CAAC,GAAY,KAAiB,EAAS;EAAE,WAAW;EAAG;EAAU,CAAC;AAGxE,SAAgB;AAAE,IAAW,EAAY;IAAI,CADtB,EAAY,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,CAAC,KAAK,IAAI,CACf,CAAC;CAE9D,IAAM,IAAQ,GAAc;EAC1B;EACA;EACA,OAAO;GAAE;GAAS;GAAY;EAC9B,iBAAiB;EACjB,oBAAoB;EACpB,iBAAiB,IAAiB;EAClC,mBAAmB,IAAmB;EACtC,uBAAuB,IAAuB;EAC/C,CAAC,EAEI,IAAY,EAAM,UAAU,CAAC,WAAW,WACxC,IAAY,EAAM,cAAc;AAEtC,QACE,kBAAC,OAAD;EAAK,aAAU;EAA2B;YAA1C,CACE,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,SAAD;IAAO,WAAU;cAAjB,CACE,kBAAC,SAAD,EAAA,UACG,EAAM,iBAAiB,CAAC,KAAK,MAC5B,kBAAC,MAAD;KAAgB,WAAU;eACvB,EAAG,QAAQ,KAAK,MACf,kBAAC,MAAD;MAEE,WAAU;MACV,OAAO,EAAE,OAAO,EAAO,SAAS,EAAE;gBAEjC,EAAO,gBAAgB,OACtB,kBAAC,IAAD;OAAgB,QAAQ,EAAO;iBAC5B,GAAW,EAAO,OAAO,UAAU,QAAQ,EAAO,YAAY,CAAC;OACjD,CAAA;MAEhB,EATE,EAAO,GAST,CACL;KACC,EAdI,EAAG,GAcP,CACL,EACI,CAAA,EACR,kBAAC,SAAD,EAAA,UACG,EAAM,aAAa,CAAC,KAAK,WAAW,IACnC,kBAAC,MAAD,EAAA,UACE,kBAAC,MAAD;KAAI,SAAS,EAAQ;eACnB,kBAAC,IAAD,EAAY,SAAS,MAAM,EAAY,SAAW,CAAA;KAC/C,CAAA,EACF,CAAA,GAEL,EAAM,aAAa,CAAC,KAAK,KAAK,MAC5B,kBAAC,MAAD;KAEE,WAAW,2EAA2E,IAAa,mBAAmB;KACtH,eAAe,IAAa,EAAI,SAAS;eAExC,EAAI,iBAAiB,CAAC,KAAK,MAC1B,kBAAC,MAAD;MAAkB,WAAU;MAAY,OAAO,EAAE,OAAO,EAAK,OAAO,SAAS,EAAE;gBAC5E,GAAW,EAAK,OAAO,UAAU,MAAM,EAAK,YAAY,CAAC;MACvD,EAFI,EAAK,GAET,CACL;KACC,EATE,EAAI,GASN,CACL,EAEE,CAAA,CACF;;GACJ,CAAA,EAEL,IAAY,KACX,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,QAAD;IAAM,WAAU;cAAhB;KACG,IAAY,IAAW;KAAE;KAAE,KAAK,KAAK,IAAY,KAAK,GAAU,EAAK,OAAO;KAAC;KAAK,EAAK;KAAO;KAAE;KAC5F;OACP,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,UAAD;MACE,eAAe,EAAM,cAAc;MACnC,UAAU,CAAC,EAAM,oBAAoB;MACrC,WAAU;gBAEV,kBAAC,IAAD,EAAiB,MAAM,IAAM,CAAA;MACtB,CAAA;KACT,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG,IAAY;OAAE;OAAI;OACd;;KACP,kBAAC,UAAD;MACE,eAAe,EAAM,UAAU;MAC/B,UAAU,CAAC,EAAM,gBAAgB;MACjC,WAAU;gBAEV,kBAAC,IAAD,EAAkB,MAAM,IAAM,CAAA;MACvB,CAAA;KACL;MACF;KAEJ;;;AAUV,SAAS,GAAkD,EACzD,YACA,aACA,gBACA,kBAOiB;CACjB,IAAM,IAAS,KAAe;AAE9B,QAAO,EAAQ,KAAK,OAAY;EAC9B,IAAI,UAAU;EACd,QAAQ,EAAY,EAAO;EAC3B,MAAM;EACN,aAAa,MAAW,EAAS,EAAI,CAAC,MAAW;EACjD,WAAW;EACX,OAAO,EAAE,aAAU,OAAO,QAA+C;GACvE,IAAM,IAAM,GAAU;AACtB,OAAI,KAAO,EAAG,QAAO;GAErB,IAAM,IAAoB,EAAE;AAC5B,QAAK,IAAM,KAAO,EAAI,aAAa,CAAC,MAAM;IACxC,IAAM,IAAI,EAAS,EAAI,SAAS,CAAC,MAAW;AAC5C,IAAI,IAAI,KAAG,EAAQ,KAAK,EAAE;;GAE5B,IAAM,IAAS,EAAQ,SAAS,KAAK,IAAI,GAAG,EAAQ,GAAG,GACjD,IAAS,EAAQ,SAAS,KAAK,IAAI,GAAG,EAAQ,GAAG,GACjD,IAAK,GAAU,GAAK,GAAQ,EAAO,EACnC,IAAY,IAAS,IAAI,IAAM,IAAS;AAE9C,UACE,kBAAC,QAAD;IACE,WAAW,qEACT,KAAa,KACT,kCACA,KAAa,KACX,sCACA;IAER,OAAO,IAAK,EAAE,iBAAiB,GAAI,GAAG,KAAA;cAErC,EAAO,EAAI;IACP,CAAA;;EAGZ,EAAE;;AAML,SAAS,GAAoB,EAC3B,aACA,aACA,gBACA,cAAW,yBAMI;CACf,IAAM,IAAS,KAAe;AAE9B,QAAO;EACL,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,YAAY;EACZ,WAAW;EACX,OAAO,EAAE,kBAAwC;GAC/C,IAAM,IAAM,GAAU,EAChB,IAAM,IAAW,IAAK,IAAM,IAAY,MAAM;AACpD,UACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,QAAD;KAAM,WAAU;eAAyD,EAAO,EAAI;KAAQ,CAAA,EAC5F,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MACE,WAAW,uBAAuB,EAAS;MAC3C,OAAO,EAAE,OAAO,GAAG,EAAI,IAAI;MAC3B,CAAA;KACE,CAAA,CACF;;;EAGX;;;;ACrQH,SAAgB,GAAW,EAAE,UAAO,UAAO,aAAU,YAAS,cAAW,YAAS,eAA6B;AAC7G,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAKT,4CACA,IAAU,QAAQ,OAClB,KAAW,sDACX,EACD;EACQ;YAZX;GAcE,kBAAC,KAAD;IAAG,WAAU;cAAqE;IAAU,CAAA;GAC5F,kBAAC,KAAD;IAAG,WAAW,EAAG,qDAAqD,IAAU,YAAY,WAAW;cAAG;IAAU,CAAA;GACnH,KAAY,kBAAC,OAAD;IAAK,WAAU;cAAQ;IAAe,CAAA;GAClD;GACG;;;;;ACyBV,SAAgB,GAAQ,EACtB,UACA,mBACA,iBACA,UACA,UACA,eAAY,WACZ,WACA,UAAO,WACP,mBACA,cAAW,IACX,cACA,cACe;CAMf,IAAM,IACJ,MAAS,SACL,uCACA,MAAS,SACP,mCACA,2BAEF,IACJ,MAAS,SAAS,mBAAmB,MAAS,SAAS,iBAAiB,iBACpE,IACJ,MAAS,SAAS,mBAAmB,MAAS,SAAS,iBAAiB,iBACpE,IACJ,MAAc,aACV,qBACA,MAAc,aACZ,kBACA;AAER,QACE,kBAAC,OAAD;EACE,aAAU;EACD;EACT,WAAW,EAYT,+EACA,GACA,KAAW,qDACX,EACD;YAnBH;GAqBE,kBAAC,QAAD;IACE,WAAW,EAUT,gDACA,EACD;cAbH,CAqBE,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD;KAAgB,SAAA;eACb,IACC,kBAAC,UAAD;MACE,MAAK;MACL,UAAU,MAAM;AAOd,OADA,EAAE,iBAAiB,EACnB,GAAc;;MAchB,WAAU;gBAET;MACM,CAAA,GAET,kBAAC,QAAD;MAAM,WAAU;gBAAgB;MAAa,CAAA;KAEhC,CAAA,EACjB,kBAAC,IAAD;KAAgB,MAAK;eAAO;KAAuB,CAAA,CAC3C,EAAA,CAAA,EACT,EACI;;GACP,kBAAC,OAAD;IACE,WAAW,EACT,6BAIA,KAAY,UACb;cAPH;KASE,kBAAC,QAAD;MACE,WAAW,EAET,sEACA,EACD;gBAEA;MACI,CAAA;KACN,KACC,kBAAC,QAAD;MAAM,WAAW,EAAG,qBAAqB,EAAW;gBAAG;MAAa,CAAA;KAErE;KACG;;GACL,KACC,kBAAC,OAAD;IACE,WAAW,EACT,gCAMA,IAAW,KAAK,mBACjB;cAEA;IACG,CAAA;GAEJ;;;AAQV,SAAgB,GAAY,EAC1B,aAAU,GACV,cACA,eAKC;AAOD,QACE,kBAAC,OAAD;EAKE,WAAW,EACT,uCAbmC;GACvC,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACJ,CASc,IACT,EACD;EAEA;EACG,CAAA;;;;ACjPV,SAAgB,GAAW,EAAE,UAAO,kBAAe,MAA0B;AAC3E,KAAI,MAAU,KAAM,QAAO,kBAAC,QAAD;EAAM,aAAU;EAAc,WAAU;YAAyB;EAAQ,CAAA;CAEpG,IAAM,IAAK,IAAQ;AAcnB,QAba,KAAK,IAAI,EAAM,GAAG,IAI3B,kBAAC,QAAD;EAAM,aAAU;EAAc,WAAU;YAAxC,CACE,kBAAC,IAAD,EAAW,MAAM,IAAM,CAAA,EAAA,MAClB;MAQT,kBAAC,QAAD;EAAM,aAAU;EAAc,WAAW,EAAG,0DAA0D,IAJxF,IAAe,qBAAqB,iBAClC,IAAe,iBAAiB,mBAG+E;YAA/H;GACQ,EAAL,IAAM,KAAiC,IAAlC,EAAkB,MAAM,IAAM,CAAmC;GACtE,KAAK,IAAI,KAAK,MAAM,EAAM,CAAC;GAAC;GACxB;;;;;AC0GX,IAAM,KAAoB,IAOpB,KAAY,cACZ,KAAkB,gCASlB,KAAgC,2CAqChC,KAAiB,EACrB,0BACA,yDACA,+CACA,6CACA,4CACA,iDACD;AA4BD,SAAS,GAAW,GAAwC;AAG1D,QAFI,EAAK,WAAW,MAAQ,EAAK,WAAW,SAAe,SACvD,EAAK,WAAW,UAAgB,UAC7B;;AAST,SAAS,GAAc,GAA8B;AACnD,QACG,EAAwB,MACxB,EAA0C,aAAa,UAAU,IAClE;;AAgBJ,SAAS,GAAqB,GAAqD;CACjF,IAAM,oBAAO,IAAI,KAAyB,EAGtC,IAAa,GACb,IAAa,IACX,IAAoB,EAAE;AAC5B,MAAK,IAAM,KAAO,GAAS;EACzB,IAAM,IAAQ,EAAI,QAAQ,EAAE,EACtB,IAAO,GAAW,EAAK,EACvB,IAAK,GAAW,EAAI;AAE1B,MAAI,MAAS,QAAQ;AAGnB,GAAiB,MAAa;AAC9B;;AAEF,MAAI,GAAY;AACd,GAAA,QAAA,IAAA,aAA6B,gBAE3B,QAAQ,KACN,0BAA0B,EAAG,gKAE9B;AAEH;;AAMF,EAJA,GAAe,GAAM,EAAG,EAExB,EAAK,IAAI,GAAI;GAAE,MAAM;GAAQ,QAAQ;GAAY,QAAQ;GAAO,CAAC,EACjE,EAAQ,KAAK,EAAG,EAChB,KAAc,EAAK,SAAS,EAAK,YAAY;;AAE/C,KAAI,EAAQ,SAAS,GAAG;EACtB,IAAM,IAAS,EAAQ,EAAQ,SAAS,IAClC,IAAO,EAAK,IAAI,EAAO;AAC7B,EAAI,KAAM,EAAK,IAAI,GAAQ;GAAE,GAAG;GAAM,QAAQ;GAAM,CAAC;;CAQvD,IAAI,IAAc,GACd,IAAc,IACZ,IAAqB,EAAE;AAC7B,MAAK,IAAI,IAAI,EAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;EAC5C,IAAM,IAAM,EAAQ,IACd,IAAQ,EAAI,QAAQ,EAAE,EACtB,IAAO,GAAW,EAAK,EACvB,IAAK,GAAW,EAAI;AAE1B,MAAI,MAAS,SAAS;AAIpB,GAAkB,MAAc;AAChC;;AAEF,MAAI,GAAa;AACf,GAAA,QAAA,IAAA,aAA6B,gBAE3B,QAAQ,KACN,0BAA0B,EAAG,gKAE9B;AAEH;;AAEF,KAAe,GAAM,EAAG,EAKpB,GAAK,IAAI,EAAG,KAEhB,EAAK,IAAI,GAAI;GAAE,MAAM;GAAS,QAAQ;GAAa,QAAQ;GAAO,CAAC,EACnE,EAAS,KAAK,EAAG,EACjB,KAAe,EAAK,SAAS,EAAK,YAAY;;AAEhD,KAAI,EAAS,SAAS,GAAG;EAGvB,IAAM,IAAS,EAAS,EAAS,SAAS,IACpC,IAAO,EAAK,IAAI,EAAO;AAC7B,EAAI,KAAM,EAAK,IAAI,GAAQ;GAAE,GAAG;GAAM,QAAQ;GAAM,CAAC;;AAGvD,QAAO;;AAQT,SAAS,GAAe,GAAqB,GAAY;AAEvD,CADkB,EAA4B,SAAS,MAAA,QAAA,IAAA,aACd,gBAEvC,QAAQ,KACN,0BAA0B,EAAG,0KAG9B;;AAsBL,SAAS,GACP,GACA,IAAoB,IACC;CACrB,IAAM,IAAW,EAAK,YAAY,EAAK,SAAS;AAIhD,QAHI,EAAK,QAAQ,CAAC,IACT;EAAE;EAAU,OAAO;EAAQ,GAE7B;EAAE;EAAU,OAAO,EAAK,SAAS;EAAU;;AAgFpD,SAAS,GAAgB,EACvB,YACA,SACA,eACA,YACA,WACA,cAAW,IACX,sBACA,gBACA,kBAAe,WACf,eACA,YACA,iBACA,aACA,WACA,cAAW,IACX,cACA,gBACuB;CAGvB,IAAM,IAAe,EAAM,cACpB,IACE,OAAO,KAAe,WAAW,IAAa,EAAE,GAD/B,MAEvB,CAAC,EAAW,CAAC,EACV,CAAC,GAAS,KAAc,EAAM,SAAuB,KAAe,EAAE,CAAC,EACvE,CAAC,GAAY,KAAiB,EAAM,SAA0B;EAClE,WAAW;EACX;EACD,CAAC,EACI,CAAC,GAAa,KAAkB,EAAM,SAAS,GAAG,EASlD,IAAqB,EAAM,OAA8B,KAAK,EAY9D,CAAC,GAAoB,KAAyB,EAAM,SAAS,GAAM,EACnE,CAAC,GAAqB,KAA0B,EAAM,SAAS,GAAM;AAC3E,GAAM,gBAAgB;EACpB,IAAM,IAAK,EAAmB;AAC9B,MAAI,CAAC,EAAI;EACT,IAAM,UAAe;GACnB,IAAM,IAAY,EAAG,cAAc,EAAG;AAKtC,GAJA,EAAsB,EAAG,aAAa,EAAE,EAIxC,EAAuB,EAAG,aAAa,IAAY,EAAE;;AAMvD,EADA,GAAQ,EACR,EAAG,iBAAiB,UAAU,GAAQ,EAAE,SAAS,IAAM,CAAC;EAOxD,IAAI,IAAQ,GACN,IAAiB,IAAI,qBAAqB;AAE9C,GADA,qBAAqB,EAAM,EAC3B,IAAQ,sBAAsB,EAAO;IACrC;AAEF,SADA,EAAe,QAAQ,EAAG,QACb;AAGX,GAFA,qBAAqB,EAAM,EAC3B,EAAG,oBAAoB,UAAU,EAAO,EACxC,EAAe,YAAY;;IAE5B,EAAE,CAAC;CAcN,IAAM,IAAQ,GAAc;EAC1B,MAVmB,EAAM,cAAc;AACvC,OAAI,CAAC,EAAc,QAAO;GAC1B,IAAM,IAAI,EAAY,MAAM,CAAC,aAAa;AAC1C,OAAI,CAAC,EAAG,QAAO;GACf,IAAM,IACJ,EAAa,cAAc,MAAW,KAAK,UAAU,EAAI,CAAC,aAAa;AACzE,UAAO,EAAK,QAAQ,MAAQ,EAAS,EAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;KACnE;GAAC;GAAM;GAAa;GAAa,CAAC;EAInC;EACA,OAAO;GAAE;GAAS;GAAY;EAC9B,iBAAiB;EACjB,oBAAoB;EACpB,iBAAiB,IAAiB;EAClC,mBAAmB,IAAmB;EACtC,uBAAuB,IAAoB,KAAA,IAAY,IAAuB;EAC/E,CAAC,EAEI,IAAW,EAAM,aAAa,EAK9B,IAAe,EAAM,cAAc,GAAkB,EAAQ,EAAE,CAAC,EAAQ,CAAC,EAEzE,IAAa,CAAC,EAAE,KAAgB,IAMhC,IACJ,KAAU,OAA+D,KAAA,IAAvD,OAAO,KAAW,WAAW,GAAG,EAAO,MAAM,GAM3D,IAAmB,EAAM,cAAc;AAC3C,MAAI,KAAY,KAAM,QAAO;EAC7B,IAAI,IAAM;AACV,OAAK,IAAM,KAAO,GAAS;GACzB,IAAM,IAAQ,EAAI,QAAQ,EAAE;AAC5B,QAAO,EAAK,YAAY,EAAK,SAAS;;AAExC,SAAO;IACN,CAAC,GAAS,EAAS,CAAC;AAEvB,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAQT,iCAKA,KAAU,QAAQ,iBAMlB,KAAY,qDACZ,EACD;EACD,OAAO,KAAkB,OAAoC,KAAA,IAA7B,EAAE,QAAQ,GAAgB;YAxB5D;GA0BG,KACC,kBAAC,OAAD;IAYE,WAAU;cAEV,kBAAC,IAAD,EAAA,UAAA,CACG,KAOC,kBAAC,IAAD;KACE,oBAAmB;KACnB,OAAO,EAAE,OAAO,EAAa,SAAS,KAAK;KAC3C,OAAO;KACP,WAAW,MAAM,EAAe,EAAE,cAAc,MAAM;KACtD,aAAa,EAAa,eAAe;KACzC,WAAU;KACV,CAAA,EAEH,EACmB,EAAA,CAAA;IAClB,CAAA;GAmBR,kBAAC,OAAD;IACE,KAAK;IACL,WAAW,EAAG,gCAAgC,GAAe;cAE7D,kBAAC,SAAD;KACE,cAAY;KACZ,WAAU;KAOV,OAAO;MAAE,aAAa;MAAS,UAAU;MAAkB;eAT7D,CAWE,kBAAC,IAAD;MAME,WAAU;gBAET,EAAM,iBAAiB,CAAC,KAAK,MAC5B,kBAAC,IAAD;OAWE,WAAU;iBAET,EAAG,QAAQ,KAAK,MAAW;QAC1B,IAAM,IAAQ,EAAO,OAAO,UAAU,QAAQ,EAAE,EAC1C,IAAQ,EAAK,SAAS,QACtB,IAAW,EAAO,OAAO,YAAY,EACrC,IAAU,EAAO,OAAO,aAAa,EACrC,IAAS,EAAa,IAAI,EAAO,OAAO,GAAG;AACjD,eACE,kBAAC,IAAD;SAEE,SAAS,IAAW,EAAO,OAAO,yBAAyB,GAAG,KAAA;SAC9D,WAAW,EA0BT,4EACA,wBACA,MAAU,WAAW,cACrB,MAAU,YAAY,eACtB,KAAY,kDAQZ,KAAU,CAAC,gBAAgB,GAAU,EACrC,GAAQ,UAAU,IAClB,EAAK,cAAc,aACnB,EAAK,gBACN;SACD,OAAO;UACL,GAAG,GAAoB,GAAM,CAAC,CAAC,EAAO;UAKtC,GAAI,IACA,EAAO,SAAS,SACd,EAAE,MAAM,GAAG,EAAO,OAAO,KAAK,GAC9B,EAAE,OAAO,GAAG,EAAO,OAAO,KAAK,GACjC;UACJ,WACE;WAME;WACA;WAYA,GAAQ,UAAU,EAAO,SAAS,UAAU,IACxC,0CACA;WACJ,GAAQ,UAAU,EAAO,SAAS,WAAW,IACzC,2CACA;WACL,CACE,OAAO,QAAQ,CACf,KAAK,KAAK;UAChB;mBA+BD,kBAAC,QAAD;UACE,WAAW,EACT,iCACA,MAAU,WAAW,eACrB,MAAU,YAAY,iBACvB;oBALH,CAOE,kBAAC,QAAD;WACE,WAAW,EACT,wBACA,MAAU,WAAW,cACrB,MAAU,YAAY,cACvB;qBAEA,GAAW,EAAO,OAAO,UAAU,QAAQ,EAAO,YAAY,CAAC;WAC3D,CAAA,EACN,KAAY,CAAC,EAAK,qBACjB,kBAAC,QAAD;WAAM,WAAU;qBACd,kBAAC,IAAD,EAAe,WAAW,GAAW,CAAA;WAChC,CAAA,CAEJ;;SACG,EA1IL,EAAO,GA0IF;SAEd;OACO,EAjKJ,EAAG,GAiKC,CACX;MACU,CAAA,EACd,kBAAC,IAAD,EAAA,UAAA,CACG,EAAS,KAAK,KAAK,GAAK,MAAa;MACpC,IAAM,IAAY,MAAa,EAAS,KAAK,SAAS,GAChD,IAAO,IAAU,EAAI,SAAS;AAuBpC,aACA,kBAAC,IAAD;OAEE,SArBsB,KAAc,KACjC,MAA6C;AAC5C,YAAI,MAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW;AAElD,SADA,EAAE,gBAAgB,EAClB,OAAO,KAAK,GAAM,UAAU,sBAAsB;AAClD;;AAEF,YAAa,EAAI,SAAS;WAE5B,KAAA;OAaF,YAZwB,KACrB,MAA6C;AAC5C,QAAI,EAAE,WAAW,MACf,EAAE,gBAAgB,EAClB,OAAO,KAAK,GAAM,UAAU,sBAAsB;WAGtD,KAAA;OAMF,WAAW,EAaT,4CACC,KAAc,MAAS,kBACxB,IAAe,EAAI,CACpB;iBAEA,EAAI,iBAAiB,CAAC,KAAK,MAAS;QACnC,IAAM,IAAQ,EAAK,OAAO,UAAU,QAAQ,EAAE,EACxC,IAAQ,EAAK,SAAS,QACtB,IAAS,EAAa,IAAI,EAAK,OAAO,GAAG;AAC/C,eACE,kBAAC,IAAD;SAEE,WAAW,EAgBT,uFACA,MAAU,WAAW,cACrB,MAAU,YAAY,eAYtB,KAAU,CAAC,8BAA8B,GAAgB,EACzD,GAAQ,UAAU,IAClB,EAAK,cACN;SACD,OAAO;UACL,GAAG,GAAoB,GAAM,CAAC,CAAC,EAAO;UAGtC,GAAI,IACA,EAAO,SAAS,SACd,EAAE,MAAM,GAAG,EAAO,OAAO,KAAK,GAC9B,EAAE,OAAO,GAAG,EAAO,OAAO,KAAK,GACjC;UACJ,WACE;WAQG,IAAoD,OAAxC;WAOb,GAAQ,UAAU,EAAO,SAAS,UAAU,IACxC,0CACA;WACJ,GAAQ,UAAU,EAAO,SAAS,WAAW,IACzC,2CACA;WACL,CACE,OAAO,QAAQ,CACf,KAAK,KAAK,IAAI,KAAA;UACpB;mBAEA,GAAW,EAAK,OAAO,UAAU,MAAM,EAAK,YAAY,CAAC;SAChD,EAxEL,EAAK,GAwEA;SAEd;OACO,EAtGJ,EAAI,GAsGA;OAEX,EACD,EAAS,KAAK,WAAW,KACxB,kBAAC,IAAD;MAAU,WAAU;gBAClB,kBAAC,IAAD;OACE,SAAS,EAAQ;OACjB,WAAU;iBAET;OACS,CAAA;MACH,CAAA,CAEH,EAAA,CAAA,CACN;;IACJ,CAAA;GAEL,KAAU,kBAAC,OAAD;IAAK,WAAU;cAAY;IAAa,CAAA;GAElD,CAAC,KAAqB,CAAC,KAAU,EAAK,SAAS,EAAW,YACzD,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,IAAD,EAA+B,UAAS,CAAA;IACpC,CAAA;GAEJ;;;AAIV,SAAS,GAAc,EAAE,gBAAoD;AAG3E,QAFI,MAAc,QAAc,kBAAC,IAAD;EAAe,MAAM;EAAI,aAAa;EAAG,WAAU;EAAkB,CAAA,GACjG,MAAc,SAAe,kBAAC,IAAD;EAAiB,MAAM;EAAI,aAAa;EAAG,WAAU;EAAkB,CAAA,GACjG,kBAAC,IAAD;EAAc,MAAM;EAAI,aAAa;EAAK,WAAU;EAAkB,CAAA;;AAS/E,SAAS,GAA0B,EAAE,UAAO,cAAW,iBAA8C;CACnG,IAAM,IAAQ,EAAM,qBAAqB,CAAC,KAAK,QACzC,EAAE,cAAW,gBAAa,EAAM,UAAU,CAAC,YAC3C,IAAO,MAAU,IAAI,IAAI,IAAY,IAAW,GAChD,IAAK,KAAK,KAAK,IAAY,KAAK,GAAU,EAAM;AACtD,QACE,kBAAC,OAAD;EACE,WAAW,EACT,8FACA,EACD;YAJH;GAME,kBAAC,QAAD,EAAA,UACG,IACG,EAAW;IAAE;IAAM;IAAI;IAAO,CAAC,GAC/B,WAAW,EAAK,GAAG,EAAG,MAAM,KAC3B,CAAA;GACP,kBAAC,OAAD,EAAK,WAAU,UAAW,CAAA;GAC1B,kBAAC,IAAD;IACE,MAAK;IACL,SAAQ;IACR,MAAK;IACL,eAAe,EAAM,cAAc;IACnC,UAAU,CAAC,EAAM,oBAAoB;IACrC,cAAW;cAEX,kBAAC,IAAD,EAAiB,MAAM,IAAM,CAAA;IACtB,CAAA;GACT,kBAAC,QAAD;IAAM,WAAU;cAAhB;KACG,IAAY;KAAE;KAAI,KAAK,IAAI,GAAG,EAAM,cAAc,CAAC;KAC/C;;GACP,kBAAC,IAAD;IACE,MAAK;IACL,SAAQ;IACR,MAAK;IACL,eAAe,EAAM,UAAU;IAC/B,UAAU,CAAC,EAAM,gBAAgB;IACjC,cAAW;cAEX,kBAAC,IAAD,EAAkB,MAAM,IAAM,CAAA;IACvB,CAAA;GACL;;;AAMV,SAAS,GAAoB,EAC3B,cACA,eAIC;AACD,QACE,kBAAC,OAAD;EACE,WAAW,EAST,+CACA,EACD;EAEA;EACG,CAAA;;AAMV,IAAa,KAAc;CACzB,MAAM;EAAE,IAAI;EAAc,IAAI;EAAiB;CAC/C,QAAQ;EAAE,IAAI;EAAgB,IAAI;EAAmB;CACrD,OAAO;EAAE,IAAI;EAAe,IAAI;EAAkB;CAClD,MAAM;EAAE,IAAI;EAAc,IAAI;EAAiB;CAC/C,KAAK;EAAE,IAAI;EAAa,IAAI;EAAgB;CAC5C,SAAS;EAAE,IAAI;EAAiB,IAAI;EAAoB;CACxD,QAAQ;EAAE,IAAI;EAAgB,IAAI;EAAmB;CACrD,QAAQ;EAAE,IAAI;EAAgB,IAAI;EAAmB;CACrD,UAAU;EAAE,IAAI;EAAc,IAAI;EAAiB;CACpD;AAID,SAAgB,GAAc,GAAyB;CACrD,IAAM,IAAO,OAAO,KAAK,GAAY,EACjC,IAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,IAAK,KAAO,EAAK,WAAW,EAAE,KAAK,KAAQ,KAAK;AACjF,QAAO,EAAK,KAAK,IAAI,EAAK,GAAG,EAAK;;AAkBpC,SAAS,GAAe,EACtB,SACA,aACA,UACA,aACA,QACA,UAAO,YACP,cACA,gBACsB;CACtB,IAAM,IAAU,GAAY;AAC5B,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,mCAAmC,EAAU;YAAhE,CAME,kBAAC,OAAD;GACE,WAAW,EACT,4EACA,uBACA,EAAQ,IACR,EAAQ,GACT;aAEA,KAAQ;GACL,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KAIE,kBAAC,QAAD;MAAM,WAAU;gBACb;MACI,CAAA;KACN,KAAO,kBAAC,IAAD,EAAA,UAAY,GAAgB,CAAA;KACnC;KACG;OACL,KAOC,kBAAC,OAAD;IAAK,WAAU;cAA8C;IAAe,CAAA,CAE1E;KACF;;;AAKV,IAAa,KAAe;CAC1B,SAAS;EAAE,IAAI;EAAiB,IAAI;EAAoB,KAAK;EAAkB;CAC/E,QAAQ;EAAE,IAAI;EAAiB,IAAI;EAAoB,KAAK;EAAkB;CAC9E,WAAW;EAAE,IAAI;EAAiB,IAAI;EAAoB,KAAK;EAAkB;CACjF,SAAS;EAAE,IAAI;EAAiB,IAAI;EAAoB,KAAK;EAAkB;CAE/E,SAAS;EAAE,IAAI;EAAa,IAAI;EAAgB,KAAK;EAAc;CACnE,MAAM;EAAE,IAAI;EAAa,IAAI;EAAgB,KAAK;EAAc;CAChE,QAAQ;EAAE,IAAI;EAAa,IAAI;EAAgB,KAAK;EAAc;CAElE,OAAO;EAAE,IAAI;EAAe,IAAI;EAAkB,KAAK;EAAgB;CACvE,MAAM;EAAE,IAAI;EAAe,IAAI;EAAkB,KAAK;EAAgB;CAEtE,SAAS;EAAE,IAAI;EAAc,IAAI;EAAiB,KAAK;EAAe;CACtE,QAAQ;EAAE,IAAI;EAAc,IAAI;EAAiB,KAAK;EAAe;CACrE,OAAO;EAAE,IAAI;EAAc,IAAI;EAAiB,KAAK;EAAe;CAEpE,QAAQ;EAAE,IAAI;EAAc,IAAI;EAAiB,KAAK;EAAe;CACrE,SAAS;EAAE,IAAI;EAAc,IAAI;EAAiB,KAAK;EAAe;CACvE;AAID,SAAS,GAAe,EACtB,SACA,UACA,UACA,gBAMC;CACD,IAAM,IAAU,GAAa;AAC7B,QACE,kBAAC,QAAD;EACE,WAAW,EACT,iFACA,EAAQ,IACR,EAAQ,IACR,EACD;YANH,CAQE,kBAAC,QAAD,EACE,WAAW,EACT,yBACA,EAAQ,KACR,KAAS,gBACV,EACD,CAAA,EACD,EACI;;;AAeX,SAAS,GAAc,EACrB,WACA,mBAAgB,GAChB,UACA,WAAQ,IACR,YAAS,IACT,gBACqB;CACrB,IAAM,IAAM,KAAK,IAAI,GAAG,GAAG,EAAO,EAC5B,IAAY,EAAO,SAAS;AAClC,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,mCAAmC,EAAU;YAAhE,CACE,kBAAC,OAAD;GACE,WAAU;GACV,OAAO;IAAE;IAAO;IAAQ;aAEvB,EAAO,KAAK,GAAG,MAAM;IACpB,IAAM,IAAK,IAAI,IAAO;AAEtB,WACE,kBAAC,OAAD;KAEE,WAAW,EACT,sCALY,IAAgB,KAAK,KAAK,IAM1B,gBAAgB,cAC7B;KACD,OAAO,EAAE,QAAQ,GAAG,EAAE,IAAI;KAC1B,EANK,EAML;KAEJ;GACE,CAAA,EACL,KAAS,QACR,kBAAC,QAAD;GAAM,WAAU;aAAgD;GAAa,CAAA,CAE3E;;;AAaV,SAAS,GAAgB,EACvB,UACA,UACA,UACA,UAAO,WACP,gBACuB;CACvB,IAAM,IAAM,MAAU,IAAI,IAAI,KAAK,IAAI,KAAM,IAAQ,IAAS,IAAI,EAC5D,IACJ,MAAS,YACL,eACA,MAAS,YACP,mBACA,MAAS,WACP,gBACA;AACV,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,2BAA2B,EAAU;YAAxD,CACE,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAW,EAAG,UAAU,EAAK;IAAE,OAAO,EAAE,OAAO,GAAG,EAAI,IAAI;IAAI,CAAA;GAC/D,CAAA,EACL,KAAS,QACR,kBAAC,QAAD;GAAM,WAAU;aACb;GACI,CAAA,CAEL;;;AAWV,SAAS,GAAe,EAAE,WAAQ,UAAO,GAAG,YAAS,GAAG,gBAAkC;CACxF,IAAM,IAAQ,KAAK,IAAI,GAAG,IAAS,IAAO,EAAO;AACjD,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,6BAA6B,EAAU;YAA1D;GACE,kBAAC,QAAD;IAAM,WAAU;cACb;IACI,CAAA;GACP,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD;MAAK,WAAU;MAAwB,OAAO,EAAE,OAAO,GAAI,IAAS,IAAS,IAAI,IAAI;MAAI,CAAA;KACzF,kBAAC,OAAD;MAAK,WAAU;MAAsB,OAAO,EAAE,OAAO,GAAI,IAAO,IAAS,IAAI,IAAI;MAAI,CAAA;KACrF,kBAAC,OAAD;MAAK,WAAU;MAAqB,OAAO,EAAE,OAAO,GAAI,IAAS,IAAS,IAAI,IAAI;MAAI,CAAA;KAClF;;GACN,kBAAC,QAAD;IACE,WAAW,EACT,+CACA,IAAS,IAAI,kBAAkB,gBAChC;cAEA;IACI,CAAA;GACH;;;AAIV,SAAS,GAAU,GAA0C;AAG3D,QAFI,IAAQ,KAAY,QACpB,IAAQ,MAAa,UAClB;;AAGT,SAAS,GAAa,EACpB,UACA,gBAIC;AACD,KAAI,KAAS,KACX,QAAO,kBAAC,QAAD;EAAM,WAAU;YAAkC;EAAQ,CAAA;CAEnE,IAAM,IAAO,GAAU,EAAM,EACvB,IACJ,MAAS,UAAU,qBAAqB,MAAS,UAAU,mBAAmB,iBAC1E,IACJ,MAAS,UAAU,mBAAmB,MAAS,UAAU,iBAAiB;AAC5E,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,qCAAqC,EAAU;YAAlE,CACE,kBAAC,OAAD;GAAK,WAAW,EAAG,4DAA4D,EAAG;aAC/E,EAAM,QAAQ,EAAE;GACb,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAW,EAAG,UAAU,EAAI;IAAE,OAAO,EAAE,OAAO,GAAG,IAAQ,IAAI,IAAI;IAAI,CAAA;GACtE,CAAA,CACF;;;AAIV,SAAS,GAAY,EACnB,UACA,iBAAc,IACd,gBAKC;AAGD,QAFI,KAAS,OAAa,kBAAC,QAAD;EAAM,WAAU;YAAgB;EAAQ,CAAA,GAGhE,kBAAC,QAAD;EACE,WAAW,EACT,kCAJS,IAAQ,IAKR,kBAAkB,iBAC3B,EACD;YALH,CAOG,EAAM,QAAQ,EAAE,EAAC,IACb;;;AAWX,SAAS,GAAa,EACpB,UACA,gBAIC;AACD,QACE,kBAAC,IAAD;EAAW,MAAK;EAAgB;YAC7B;EACS,CAAA;;AAIhB,SAAS,GAAiB,EACxB,YACA,cACA,gBAKC;AACD,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,+BAA+B,EAAU;YAA5D,CAaE,kBAAC,QAAD;GAAM,WAAU;aAAyB;GAAe,CAAA,EACvD,KACC,kBAAC,QAAD;GAAM,WAAU;aAAuC;GAAiB,CAAA,CAEtE;;;;;AC57CV,SAAS,GAAkB,EACzB,YACA,cACA,cACA,YACA,UACA,SACA,UACA,iBACA,kBAAe,aACf,oBAAiB,KACjB,kBAAe,KACf,gBACyB;CACzB,IAAM,CAAC,GAAQ,KAAa,EAAiB,OAAO;AAgBpD,QAdA,QAAgB;AACd,MAAI,EACF,GAAU,UAAU;WACX,KAAa,MAAW,WAAW;AAC5C,KAAU,UAAU;GACpB,IAAM,IAAI,iBAAiB,EAAU,OAAO,EAAE,EAAe;AAC7D,gBAAa,aAAa,EAAE;aACnB,KAAW,MAAW,WAAW;AAC1C,KAAU,QAAQ;GAClB,IAAM,IAAI,iBAAiB,EAAU,OAAO,EAAE,EAAa;AAC3D,gBAAa,aAAa,EAAE;;IAE7B;EAAC;EAAW;EAAW;EAAQ,CAAC,EAGjC,kBAAC,OAAD;EAAK,aAAU;EAAsB,WAAU;YAA/C;GACG,MAAW,aACV,kBAAC,QAAD;IAAM,WAAU;cAAhB;KACE,kBAAC,IAAD,EAAW,MAAM,IAAM,CAAA;;KAAE;KACpB;;GAER,MAAW,WACV,kBAAC,QAAD;IAAM,WAAU;cAAhB;KACE,kBAAC,IAAD,EAAO,MAAM,IAAM,CAAA;;KAAE,GAAO,SAAS,MAAM,GAAG,GAAG,IAAI;KAChD;;GAET,kBAAC,UAAD;IACW;IACT,UAAU,MAAW;IACrB,WAAW,EACT,gHACA,MAAW,YACP,sDACA,4EACJ,EACD;cATH,CAWG,MAAW,YAAY,kBAAC,IAAD,EAAS,MAAK,MAAO,CAAA,GAAG,GAC/C,MAAW,YAAY,IAAe,EAChC;;GACL;;;;;ACSV,IAAM,KAAe,EAAM,YAEvB,EACE,UACA,kBACA,iBACA,aACA,WACA,cAAW,UACX,aAAU,UACV,cAAW,IACX,aACA,UACA,aACA,gBAEF,MACG;CACH,IAAM,IAAW,EAAM,OAAyB,KAAK,EAC/C,CAAC,GAAY,KAAiB,EAAM,SAAS,GAAM,EACnD,CAAC,GAAe,KAAoB,EAAM,SAAiB,EAAE,CAAC,EAK9D,IAAiB,EAAM,OAAO,EAAE,EAEhC,IAAe,MAAU,KAAA,GACzB,IAAQ,IAAe,IAAQ,GAC/B,IAAW,CAAC,CAAC,GAEb,IAAc,EAAM,aACvB,MAAiB;AAChB,EAAI,KAGF,EAAiB,EAAK,EAFtB,IAAgB,EAAK;IAMzB,CAAC,GAAc,EAAc,CAC9B,EAEK,IAAW,EAAM,aACpB,MAAgC;AAC/B,MAAI,EAAU;EACd,IAAM,IAAa,MAAM,KAAK,EAAS,EACjC,IAAmB,EAAE,EACrB,IAA4B,EAAE,EAI9B,IAAiB,IAAW,EAAM;AAExC,OAAK,IAAM,KAAQ,GAAY;AAC7B,OAAI,EAAS,UAAU,GAAgB;AACrC,MAAS,KAAK;KACZ;KACA,QAAQ;KACR,SAAS,kBAAkB,EAAS,OAAO,MAAa,IAAI,KAAK,IAAI;KACtE,CAAC;AACF;;AAEF,OAAI,EAAK,SAAS,GAAG;AACnB,MAAS,KAAK;KAAE;KAAM,QAAQ;KAAS,SAAS;KAAkB,CAAC;AACnE;;AAEF,OAAI,EAAK,OAAO,GAAS;AACvB,MAAS,KAAK;KACZ;KACA,QAAQ;KACR,SAAS,GAAG,GAAY,EAAK,KAAK,CAAC,WAAW,GAAY,EAAQ,CAAC;KACpE,CAAC;AACF;;AAEF,OAAI,KAAU,CAAC,GAAc,GAAM,EAAO,EAAE;AAC1C,MAAS,KAAK;KACZ;KACA,QAAQ;KACR,SAAS,+BAA+B,EAAO;KAChD,CAAC;AACF;;AAEF,KAAS,KAAK,EAAK;;AAQrB,EALI,EAAS,SAAS,MAEpB,EADa,IAAW,CAAC,GAAG,GAAO,GAAG,EAAS,GAAG,EAAS,MAAM,GAAG,EAAE,CACrD,EACjB,IAAe,EAAS,GAEtB,EAAS,SAAS,KACpB,IAAW,EAAS;IAGxB;EAAC;EAAU;EAAO;EAAU;EAAS;EAAQ;EAAU;EAAa;EAAc;EAAS,CAC5F,EAIK,IAAU,EAAM,aACnB,MAA4B;AAC3B,MAAI,EAAU;EACd,IAAM,IAAQ,EAAE,eAAe;AAC/B,EAAI,KAAS,EAAM,SAAS,MAC1B,EAAE,gBAAgB,EAClB,EAAS,EAAM;IAGnB,CAAC,GAAU,EAAS,CACrB;CAED,SAAS,IAAa;AAChB,OACJ,EAAS,SAAS,OAAO;;AAG3B,QACE,kBAAC,OAAD;EACO;EACL,MAAK;EACL,UAAU,IAAW,KAAK;EAC1B,iBAAe,KAAY,KAAA;EAC3B,gBAAc,KAAY,KAAA;EAC1B,YAAY,MAAM;AACZ,SACA,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,gBAAgB,EAClB,GAAY;;EAGhB,SAAS;EACA;EACT,cAAc,MAAM;AACd,SACJ,EAAE,gBAAgB,EAClB,EAAE,iBAAiB,EACnB,EAAe,WAAW,GAC1B,EAAc,GAAK;;EAErB,aAAa,MAAM;AACb,SACJ,EAAE,gBAAgB,EAClB,EAAE,iBAAiB;;EAErB,cAAc,MAAM;AACd,SACJ,EAAE,gBAAgB,EAClB,EAAE,iBAAiB,EACnB,IAAe,SACX,EAAe,WAAW,MAC5B,EAAe,UAAU,GACzB,EAAc,GAAM;;EAGxB,SAAS,MAAM;AACT,SACJ,EAAE,gBAAgB,EAClB,EAAE,iBAAiB,EACnB,EAAe,UAAU,GACzB,EAAc,GAAM,EAChB,EAAE,aAAa,OAAO,UACxB,EAAS,EAAE,aAAa,MAAM;;EAGlC,WAAW,EAgBT,+IACA,oCACA,uEAOA,IACI,mCACA,IACE,0CACA,8DACN,KAAY,gDACZ,EACD;YA/EH,CAiFE,kBAAC,SAAD;GACE,KAAK;GACL,MAAK;GACG;GACE;GACA;GACV,WAAU;GACV,WAAW,MAAM;AAOf,IANI,EAAE,OAAO,OAAO,UAClB,EAAS,EAAE,OAAO,MAAM,EAK1B,EAAE,OAAO,QAAQ;;GAEnB,CAAA,EAED,KACC,kBAAC,IAAD;GAA2B;GAAiB;GAAmB;GAAY,CAAA,CAEzE;;EAGX;AACD,GAAa,cAAc;AAI3B,SAAS,GAAkB,EACzB,WACA,YACA,eAKC;CACD,IAAM,IAAO,CACX,IAAS,GAAe,EAAO,GAAG,iBAClC,MAAY,WAA6C,OAAlC,SAAS,GAAY,EAAQ,GACrD,CACE,OAAO,QAAQ,CACf,KAAK,MAAM;AAEd,QACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;EACE,WAAW,EAIT,iFACA,0EACD;YAED,kBAAC,IAAD;GAAa,WAAU;GAAS,eAAA;GAAc,CAAA;EAC1C,CAAA,EACN,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,KAAD;GAAG,WAAU;aACV,IAAW,uCAAuC;GACjD,CAAA,EACH,KAAQ,kBAAC,KAAD;GAAG,WAAU;aAAiC;GAAS,CAAA,CAC5D;IACL,EAAA,CAAA;;AAkBP,IAAM,KAAmB,EAAM,YAC5B,EAAE,UAAO,aAAU,cAAW,GAAG,KAAS,MACrC,EAAM,WAAW,IAAU,OAE7B,kBAAC,MAAD;CACO;CACL,aAAU;CACV,WAAW,EAAG,gCAAgC,EAAU;CACxD,GAAI;WAEH,EAAM,KAAK,GAAM,MAChB,kBAAC,MAAD;EAEE,WAAU;YAFZ;GAIE,kBAAC,IAAD;IAAU,WAAU;IAAwC,eAAA;IAAc,CAAA;GAC1E,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,KAAD;KAAG,WAAU;eAAgD,EAAK;KAAS,CAAA,EAC3E,kBAAC,KAAD;KAAG,WAAU;eAAiC,GAAY,EAAK,KAAK;KAAK,CAAA,CACrE;;GACL,KACC,kBAAC,IAAD;IACE,MAAK;IACL,SAAQ;IACR,MAAK;IACL,eAAe,EAAS,EAAK;IAC7B,cAAY,UAAU,EAAK;cAE3B,kBAAC,IAAD,EAAG,WAAU,UAAW,CAAA;IACjB,CAAA;GAER;IAnBE,GAAG,EAAK,KAAK,GAAG,EAAK,KAAK,GAAG,IAmB/B,CACL;CACC,CAAA,CAGV;AACD,GAAiB,cAAc;AAS/B,SAAgB,GAAY,GAAuB;AAKjD,QAJK,OAAO,SAAS,EAAM,GACvB,IAAQ,OAAa,GAAG,EAAM,MAC9B,IAAQ,OAAO,OAAa,IAAI,IAAQ,MAAM,QAAQ,EAAE,CAAC,OACzD,IAAQ,OAAO,OAAO,OAAa,IAAI,IAAQ,OAAO,MAAM,QAAQ,EAAE,CAAC,OACpE,IAAI,IAAQ,OAAO,OAAO,MAAM,QAAQ,EAAE,CAAC,OAJd;;AAkBtC,SAAS,GAAc,GAAY,GAAyB;CAC1D,IAAM,IAAQ,EACX,MAAM,IAAI,CACV,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,OAAO,QAAQ;AAClB,KAAI,EAAM,WAAW,EAAG,QAAO;CAE/B,IAAM,IAAO,EAAK,KAAK,aAAa,EAC9B,IAAO,EAAK;AAElB,QAAO,EAAM,MAAM,MACb,EAAK,WAAW,IAAI,GACf,EAAK,SAAS,EAAK,aAAa,CAAC,GAEtC,EAAK,SAAS,KAAK,GACd,EAAK,WAAW,EAAK,MAAM,GAAG,GAAG,CAAC,GAEpC,MAAS,EAChB;;AAQJ,SAAS,GAAe,GAAwB;AAC9C,QAAO,EACJ,MAAM,IAAI,CACV,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,KAAK,MACA,EAAK,WAAW,IAAI,GAAS,EAAK,MAAM,EAAE,CAAC,aAAa,GACxD,MAAS,YAAkB,WAC3B,MAAS,YAAkB,WAC3B,MAAS,YAAkB,UAC3B,EAAK,SAAS,KAAK,GACd,EAAK,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,aAAa,GAAG,EAAK,MAAM,GAAG,GAAG,GAAG,YAG7D,EAAK,MAAM,IAAI,CAAC,MAAM,GACvB,aAAa,CACxB,CACD,KAAK,KAAK;;;;AC1bf,SAAgB,GAAW,EAAE,UAAO,YAAS,aAAU,eAA6B;CAClF,IAAM,CAAC,GAAM,KAAW,EAAS,GAAM,EACjC,IAAa,EAA0B,KAAK,EAC5C,IAAS,EAAS,SAAS,GAE3B,KAAU,MAAkB;AAChC,IACE,EAAS,SAAS,EAAM,GACpB,EAAS,QAAQ,MAAM,MAAM,EAAM,GACnC,CAAC,GAAG,GAAU,EAAM,CACzB;;AAKH,QAFK,EAAQ,SAGX,kBAAC,OAAD;EAAK,aAAU;EAAc,WAAU;YAAvC,CACE,kBAAC,UAAD;GACE,KAAK;GACL,MAAK;GACL,iBAAc;GACd,iBAAe;GACf,eAAe,EAAQ,CAAC,EAAK;GAC7B,WAAW,EAGT,gIACA,4CACA,mDACA,mDAMA,IACI,sCACA,2DACL;aArBH,CAuBE,kBAAC,QAAD;IAAM,WAAU;cAAhB,CACE,kBAAC,QAAD,EAAA,UAAO,GAAa,CAAA,EACnB,KACC,kBAAC,QAAD;KAUE,WAAU;KACV,cAAY,GAAG,EAAS,OAAO;eAE9B,EAAS;KACL,CAAA,CAEJ;OACP,kBAAC,IAAD,EACE,WAAW,EACT,0CACA,KAAQ,aACT,EACD,CAAA,CACK;MAER,KACC,kBAAA,GAAA,EAAA,UAAA,CAEE,kBAAC,OAAD;GACE,WAAU;GACV,eAAe,EAAQ,GAAM;GAC7B,eAAA;GACA,CAAA,EACF,kBAAC,OAAD;GACE,MAAK;GACL,wBAAqB;GAMrB,WAAU;aARZ,CAUG,EAAS,SAAS,KACjB,kBAAC,UAAD;IACE,MAAK;IACL,eAAe,EAAS,EAAE,CAAC;IAC3B,WAAU;cACX;IAEQ,CAAA,EAEV,EAAQ,KAAK,MAAQ;IACpB,IAAM,IAAU,EAAS,SAAS,EAAI;AACtC,WACE,kBAAC,SAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,SAAD;MACE,MAAK;MACI;MACT,gBAAgB,EAAO,EAAI;MAC3B,WAAU;MACV,CAAA,EACF,kBAAC,QAAD;MAAM,WAAW,EAAG,YAAY,IAAU,oBAAoB,wBAAwB;gBACnF;MACI,CAAA,CACD;OAZD,EAYC;KAEV,CACE;KACL,EAAA,CAAA,CAED;MAxGoB;;;;ACvC9B,SAAgB,GAAmC,EACjD,YACA,UACA,aACA,gBAC2B;AAC3B,QACE,kBAAC,OAAD;EACE,aAAU;EAgBV,WAAW,EACT,kEACA,EACD;YAEA,EAAQ,KAAK,MACZ,kBAAC,UAAD;GAEE,MAAK;GACL,eAAe,MAAU,EAAI,SAAS,EAAS,EAAI,MAAM;GACzD,gBAAc,MAAU,EAAI;GAC5B,WAAW,EAKT,sHACA,MAAU,EAAI,QACV,kDACA,uDACL;aAdH,CAgBG,EAAI,MACJ,EAAI,MACE;KAjBF,EAAI,MAiBF,CACT;EACE,CAAA;;;;AC3DV,SAAgB,GAAW,EAAE,YAAS,gBAA8B;AAClE,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,yFACA,EACD;YAEA;EACG,CAAA;;;;ACRV,SAAS,EAAc,EAAE,cAAW,YAA8D;AAChG,QACE,kBAAC,OAAD;EACE,WAAW,EACT,+FACA,EACD;EACM;EACP,CAAA;;AAIN,SAAS,KAAkB;AACzB,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA;GACtC,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA;GACtC,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAe,WAAU,wBAAyB,CAAA;KAClD,kBAAC,GAAD,EAAe,WAAU,uBAAwB,CAAA;KACjD,kBAAC,GAAD,EAAe,WAAU,uBAAwB,CAAA;KAC7C;;GACF;;;AAIV,SAAS,KAAe;AACtB,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA,EACtC,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAe,WAAU,uBAAwB,CAAA,EACjD,kBAAC,GAAD,EAAe,WAAU,uBAAwB,CAAA,CAC7C;MACF;MACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cACZ;KAAC;KAAK;KAAK;KAAK;KAAK;KAAG,CAAC,KAAK,GAAG,MAChC,kBAAC,GAAD;KAAuB,WAAU;KAAoB,OAAO,EAAE,OAAO,GAAG;KAAI,EAAxD,EAAwD,CAC5E;IACE,CAAA,EACL,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,MACjC,kBAAC,OAAD;IAAe,WAAU;cACtB;KAAC;KAAK;KAAK;KAAK;KAAK;KAAG,CAAC,KAAK,GAAG,MAChC,kBAAC,GAAD;KAEE,WAAU;KACV,OAAO;MAAE,OAAO;MAAG,gBAAgB,GAAG,IAAM,IAAK;MAAI;KACrD,EAHK,EAGL,CACF;IACE,EARI,EAQJ,CACN,CACE;KACF;;;AAIV,SAAS,KAAiB;AACxB,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA,EACrC,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,MACjC,kBAAC,OAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,GAAD,EAAe,WAAU,sBAAuB,CAAA,EAChD,kBAAC,GAAD,EAAe,WAAU,cAAe,CAAA,CACpC;MAHI,EAGJ,CACN,CACE;MACN,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA;IACtC,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA;IACtC,kBAAC,OAAD;KAAK,WAAU;eACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,MACjC,kBAAC,OAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA,EACtC,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA,CAClC;QAHI,EAGJ,CACN;KACE,CAAA;IACN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD,EAAe,WAAU,wBAAyB,CAAA;MAClD,kBAAC,GAAD,EAAe,WAAU,uBAAwB,CAAA;MACjD,kBAAC,GAAD,EAAe,WAAU,uBAAwB,CAAA;MAC7C;;IACF;KACF;;;AAIV,SAAS,KAAoB;AAC3B,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA,EACtC,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAe,WAAU,uBAAwB,CAAA,EACjD,kBAAC,GAAD,EAAe,WAAU,uBAAwB,CAAA,CAC7C;OACF;;GACN,kBAAC,OAAD;IAAK,WAAU;cACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,MACjC,kBAAC,OAAD;KAAa,WAAU;eAAvB;MACE,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA;MACtC,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA;MACtC,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA;MAClC;OAJI,EAIJ,CACN;IACE,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA,EACtC,kBAAC,GAAD,EAAe,WAAU,0BAA2B,CAAA,CAChD;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAe,WAAU,YAAa,CAAA,EACtC,kBAAC,GAAD,EAAe,WAAU,0BAA2B,CAAA,CAChD;OACF;;GACF;;;AAIV,IAAM,KAA+D;CACnE,SAAS;CACT,MAAM;CACN,QAAQ;CACR,WAAW;CACZ;AAED,SAAS,GAAa,EAAE,aAAU,WAAW,gBAAgC;CAC3E,IAAM,IAAU,GAAS;AACzB,QACE,kBAAC,OAAD;EAAK,aAAU;EAAgB,WAAW,EAAG,+BAA+B,EAAU;YACpF,kBAAC,GAAD,EAAW,CAAA;EACP,CAAA;;;;AC/IV,SAAS,GAAS,EAAE,cAAW,GAAG,KAAsC;AACtE,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,sCAAsC,EAAU;EAC9D,GAAI;EACJ,CAAA;;;;ACCN,SAAS,GAAa,EAAE,gBAAgC;AACtD,QACE,kBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,aAAU;EACV,WAAW,EACT,4FACA,EACD;YAED,kBAAC,IAAD,EAAS,MAAK,MAAO,CAAA;EACjB,CAAA;;;;ACMV,SAAS,GAAmB,GAAqB;AAC/C,KAAI;AACF,SAAO,IAAI,KAAK,EAAI,CAAC,eAAe,KAAA,GAAW;GAC7C,OAAO;GACP,KAAK;GACL,MAAM;GACN,QAAQ;GACT,CAAC;SACI;AACN,SAAO;;;AAIX,SAAS,GAAQ,EAAE,QAAK,YAA0C;AAChE,QACE,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD;EAAgB,SAAA;YACd,kBAAC,OAAD;GACE,aAAU;GACV,WAAU;aAFZ,CAIE,kBAAC,OAAD;IACE,WAAU;IACV,cAAY,EAAI;cAEf,EAAI,YAAY,OAAO,EAAE,CAAC,aAAa;IACpC,CAAA,EACN,kBAAC,QAAD;IAAM,WAAU;cAAsC;IAAa,CAAA,CAC/D;;EACS,CAAA,EACjB,kBAAC,IAAD,EAAA,UAAA;EACG,EAAI;EAAY;EAAW,GAAmB,EAAI,GAAG;EACvC,EAAA,CAAA,CACT,EAAA,CAAA;;AAId,SAAS,GAAU,EACjB,SACA,SACA,kBACA,iBACA,UACA,YACA,aACA,mBACA,gBACiB;CACjB,IAAM,IACJ,MAAkB,GAAM,UAAU,MAAkB,GAAM,QAGtD,IADa,OAAiB,QACJ;AAEhC,QACE,kBAAC,IAAD,EAAA,UACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,4BAA4B,EAAU;YAFtD;GAIG,KAAQ,kBAAC,IAAD;IAAS,KAAK;IAAM,OAAM;IAAU,CAAA;GAE5C,MAAiB,KAAK,KAAQ,CAAC,KAC9B,kBAAC,OAAD;IACE,aAAU;IACV,WAAU;cAFZ,CAIE,kBAAC,OAAD,EAAK,WAAU,2CAA4C,CAAA,EAC3D,kBAAC,QAAD;KAAM,WAAU;eAAwB;KAAqB,CAAA,CACzD;;GAGP,KAAQ,kBAAC,IAAD;IAAS,KAAK;IAAM,OAAM;IAAU,CAAA;GAE5C,CAAC,KAAc,KACd,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD;IAAgB,SAAA;cACd,kBAAC,QAAD,EAAA,UACE,kBAAC,IAAD;KACE,SAAQ;KACR,MAAK;KACL,SAAS;KACT,UAAU,KAAY,KAAuB,KAAkB;KAC/D,WAAU;KACV,cACE,MAEI,IACE,oCACA;eAET;KAEQ,CAAA,EACJ,CAAA;IACQ,CAAA,EAChB,KAAkB,OAEf,IACF,kBAAC,IAAD,EAAA,UAAgB,mCAAgD,CAAA,GAC9D,OAHF,kBAAC,IAAD,EAAA,UAAiB,GAAgC,CAAA,CAI3C,EAAA,CAAA;GAGX,KAAuB,KACtB,kBAAC,IAAD;IACE,SAAQ;IACR,MAAK;IACL,SAAS;IACC;IACV,WAAU;IACV,cAAW;cACZ;IAEQ,CAAA;GAEP;KACU,CAAA;;;;AChJtB,SAAS,GAAK,GAAS,GAAI,GAAM;CAC/B,IAAI,IAAO,EAAK,eAAe,EAAE,EAC7B,GACA,IAAY;CAChB,SAAS,IAAmB;EAE1B,IAAI;AACJ,EAAI,EAAK,OAAc,EAAK,OAA6B,KAAK,EAAK,KAAG,IAAU,KAAK,KAAK;EAC1F,IAAM,IAAU,GAAS;AAEzB,MAAI,EADgB,EAAQ,WAAW,EAAK,UAAU,EAAQ,MAAM,GAAK,MAAU,EAAK,OAAW,EAAI,EAErG,QAAO;AAET,MAAO;EACP,IAAI;AAGJ,MAFI,EAAK,OAAc,EAAK,OAA6B,KAAK,EAAK,KAAG,IAAa,KAAK,KAAK,GAC7F,IAAS,EAAG,GAAG,EAAQ,EACnB,EAAK,OAAc,EAAK,OAA6B,KAAK,EAAK,EAAG;GACpE,IAAM,IAAa,KAAK,OAAO,KAAK,KAAK,GAAG,KAAW,IAAI,GAAG,KACxD,IAAgB,KAAK,OAAO,KAAK,KAAK,GAAG,KAAc,IAAI,GAAG,KAC9D,IAAsB,IAAgB,IACtC,KAAO,GAAK,MAAQ;AAExB,SADA,IAAM,OAAO,EAAI,EACV,EAAI,SAAS,GAClB,KAAM,MAAM;AAEd,WAAO;;AAET,WAAQ,KACN,OAAO,EAAI,GAAe,EAAE,CAAC,IAAI,EAAI,GAAY,EAAE,CAAC,MACpD;;;yBAGiB,KAAK,IACpB,GACA,KAAK,IAAI,MAAM,MAAM,GAAqB,IAAI,CAC/C,CAAC,iBACF,GAA6B,IAC9B;;AAMH,SAJK,GAA6B,YAAa,EAAE,KAAa,EAAK,wBACjE,EAAK,SAAS,EAAO,EAEvB,IAAY,IACL;;AAKT,QAHA,EAAiB,cAAc,MAAY;AACzC,MAAO;IAEF;;AAET,SAAS,GAAa,GAAO,GAAK;AAChC,KAAI,MAAU,KAAK,EACjB,OAAU,MAAM,uBAAuB,IAAM,KAAK,MAAQ,KAAK;AAE/D,QAAO;;AAGX,IAAM,MAAe,GAAG,MAAM,KAAK,IAAI,IAAI,EAAE,GAAG,MAC1C,MAAY,GAAc,GAAI,MAAO;CACzC,IAAI;AACJ,QAAO,SAAS,GAAG,GAAM;AAEvB,EADA,EAAa,aAAa,EAAU,EACpC,IAAY,EAAa,iBAAiB,EAAG,MAAM,MAAM,EAAK,EAAE,EAAG;;GC9DjE,MAAW,MAAY;CAC3B,IAAM,EAAE,gBAAa,oBAAiB;AACtC,QAAO;EAAE,OAAO;EAAa,QAAQ;EAAc;GAE/C,MAAuB,MAAU,GACjC,MAAyB,MAAU;CACvC,IAAM,IAAQ,KAAK,IAAI,EAAM,aAAa,EAAM,UAAU,EAAE,EACtD,IAAM,KAAK,IAAI,EAAM,WAAW,EAAM,UAAU,EAAM,QAAQ,EAAE,EAChE,IAAM,EAAE;AACd,MAAK,IAAI,IAAI,GAAO,KAAK,GAAK,IAC5B,GAAI,KAAK,EAAE;AAEb,QAAO;GAEH,MAAsB,GAAU,MAAO;CAC3C,IAAM,IAAU,EAAS;AACzB,KAAI,CAAC,EACH;CAEF,IAAM,IAAe,EAAS;AAC9B,KAAI,CAAC,EACH;CAEF,IAAM,KAAW,MAAS;EACxB,IAAM,EAAE,UAAO,cAAW;AAC1B,IAAG;GAAE,OAAO,KAAK,MAAM,EAAM;GAAE,QAAQ,KAAK,MAAM,EAAO;GAAE,CAAC;;AAG9D,KADA,EAAQ,GAAQ,EAAQ,CAAC,EACrB,CAAC,EAAa,eAChB,cAAa;CAGf,IAAM,IAAW,IAAI,EAAa,gBAAgB,MAAY;EAC5D,IAAM,UAAY;GAChB,IAAM,IAAQ,EAAQ;AACtB,OAAI,GAA+B,eAAe;IAChD,IAAM,IAAM,EAAM,cAAc;AAChC,QAAI,GAAK;AACP,OAAQ;MAAE,OAAO,EAAI;MAAY,QAAQ,EAAI;MAAW,CAAC;AACzD;;;AAGJ,KAAQ,GAAQ,EAAQ,CAAC;;AAE3B,IAAS,QAAQ,sCAAsC,sBAAsB,EAAI,GAAG,GAAK;GACzF;AAEF,QADA,EAAS,QAAQ,GAAS,EAAE,KAAK,cAAc,CAAC,QACnC;AACX,IAAS,UAAU,EAAQ;;GAGzB,KAA0B,EAC9B,SAAS,IACV,EAeK,KAAoB,OAAO,SAAU,MAAc,KAAO,iBAAiB,QAC3E,MAAwB,GAAU,MAAO;CAC7C,IAAM,IAAU,EAAS;AACzB,KAAI,CAAC,EACH;CAEF,IAAM,IAAe,EAAS;AAC9B,KAAI,CAAC,EACH;CAEF,IAAI,IAAS,GACP,IAAW,EAAS,QAAQ,qBAAqB,WAA0B,KAAK,IAAI,GACxF,SACM;AACJ,IAAG,GAAQ,GAAM;IAEnB,EAAS,QAAQ,sBAClB,EACK,KAAiB,YAAsB;EAC3C,IAAM,EAAE,eAAY,aAAU,EAAS;AAGvC,EAFA,IAAS,IAAa,EAAQ,cAAiB,KAAS,MAAM,KAAK,EAAQ,WAC3E,GAAU,EACV,EAAG,GAAQ,EAAY;IAEnB,IAAU,EAAc,GAAK,EAC7B,IAAa,EAAc,GAAM;AACvC,GAAQ,iBAAiB,UAAU,GAAS,GAAwB;CACpE,IAAM,IAAyB,EAAS,QAAQ,qBAAqB;AAIrE,QAHI,KACF,EAAQ,iBAAiB,aAAa,GAAY,GAAwB,QAE/D;AAEX,EADA,EAAQ,oBAAoB,UAAU,EAAQ,EAC1C,KACF,EAAQ,oBAAoB,aAAa,EAAW;;GAwCpD,MAAkB,GAAS,GAAO,MAAa;AACnD,KAAI,GAA+B,eAAe;EAChD,IAAM,IAAM,EAAM,cAAc;AAChC,MAAI,EAIF,QAHa,KAAK,MAChB,EAAI,EAAS,QAAQ,aAAa,eAAe,aAClD;;AAIL,QAAO,EAAQ,EAAS,QAAQ,aAAa,gBAAgB;GAazD,MAAiB,GAAQ,EAC7B,iBAAc,GACd,eACC,MAAa;CACd,IAAI,GAAI;CACR,IAAM,IAAW,IAAS;AAC1B,EAAC,KAAM,IAAK,EAAS,gBAAqC,aAAa,QAAgB,EAAG,KAAK,GAAI;GAChG,EAAS,QAAQ,aAAa,SAAS,QAAQ;EAChD;EACD,CAAC;GAEE,KAAN,MAAkB;CAChB,YAAY,GAAM;AAqoBhB,EApoBA,KAAK,SAAS,EAAE,EAChB,KAAK,gBAAgB,MACrB,KAAK,eAAe,MACpB,KAAK,cAAc,IACnB,KAAK,cAAc,MACnB,KAAK,oBAAoB,EAAE,EAC3B,KAAK,gCAAgC,IAAI,KAAK,EAC9C,KAAK,kCAAkC,IAAI,KAAK,EAChD,KAAK,8BAA8B,EAAE,EACrC,KAAK,YAAY,KAAK,GACtB,KAAK,mBAAmB,IACxB,KAAK,gBAAgB,IACrB,KAAK,aAAa,MAClB,KAAK,eAAe,MACpB,KAAK,kBAAkB,MACvB,KAAK,oBAAoB,GACzB,KAAK,gCAAgC,IAAI,KAAK,EAC9C,KAAK,YAAY;GACf,IAAQ;AACR,YAAe,IAAW,KAAK,cAAoC,cAAmC,MAA2B,KAAK,EAAG,IAAK,KAAK,KAAK;KAE1J,KAAK,WAA2B,uBAAO;GACrC,IAAI,IAAM,MACJ,UACA,MAGA,CAAC,KAAK,gBAAgB,CAAC,KAAK,aAAa,iBACpC,OAEF,IAAM,IAAI,KAAK,aAAa,gBAAgB,MAAY;AAC7D,MAAQ,SAAS,MAAU;KACzB,IAAM,UAAY;MAChB,IAAM,IAAO,EAAM,QACb,IAAQ,KAAK,iBAAiB,EAAK;AACzC,UAAI,CAAC,EAAK,aAAa;AACrB,YAAK,SAAS,UAAU,EAAK;AAC7B;;AAEF,MAAI,KAAK,0BAA0B,EAAM,IACvC,KAAK,WACH,GACA,KAAK,QAAQ,eAAe,GAAM,GAAO,KAAK,CAC/C;;AAGL,UAAK,QAAQ,sCAAsC,sBAAsB,EAAI,GAAG,GAAK;MACrF;KACF;AAEJ,UAAO;IACL,kBAAkB;KAChB,IAAI;AAEJ,MADC,IAAK,GAAK,KAAK,QAAgB,EAAG,YAAY,EAC/C,IAAM;;IAER,UAAU,MAEK,GAAK,EAAwB,QAAQ,GAAQ,EAAE,KAAK,cAAc,CAAC;IAElF,YAAY,MAEG,GAAK,EAAwB,UAAU,EAAO;IAE9D;MACC,EACJ,KAAK,QAAQ,MACb,KAAK,cAAc,MAAU;AAI3B,GAHA,OAAO,QAAQ,EAAM,CAAC,SAAS,CAAC,GAAK,OAAW;AAC9C,IAAW,MAAU,UAAa,OAAO,EAAM;KAC/C,EACF,KAAK,UAAU;IACb,OAAO;IACP,eAAe;IACf,UAAU;IACV,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,kBAAkB;IAClB,YAAY;IACZ,YAAY;IACZ,gBAAgB;IAChB,gBAAgB;IAEhB;IACA,aAAa;KAAE,OAAO;KAAG,QAAQ;KAAG;IACpC,cAAc;IACd,KAAK;IACL,gBAAgB;IAChB,0BAA0B,EAAE;IAC5B,OAAO;IACP,uBAAuB;IACvB,SAAS;IACT,OAAO;IACP,mBAAmB;IACnB,qCAAqC;IACrC,oBAAoB;IACpB,GAAG;IACJ;KAEH,KAAK,UAAU,MAAS;GACtB,IAAI,GAAI;AACR,IAAC,KAAM,IAAK,KAAK,SAAS,aAAa,QAAgB,EAAG,KAAK,GAAI,MAAM,EAAK;KAEhF,KAAK,cAAc,UAEf,KAAK,gBAAgB,EACd;GACL,KAAK;GACL,KAAK,QAAQ,KAAK,MAAM,aAAa;GACrC,KAAK,QAAQ,KAAK,MAAM,WAAW;GACpC,IAEF,MAAgB;AACf,QAAK,OAAO,EAAY;KAE1B;GACE,KAAA,QAAA,IAAA,aAA8B,gBAAgB;GAC9C,aAAa,KAAK,QAAQ;GAC1B,aAAa;IACX,KAAK;IACL,KAAK,QAAQ,KAAK,MAAM,aAAa;IACrC,KAAK,QAAQ,KAAK,MAAM,WAAW;IACpC;GACF,CACF,EACD,KAAK,gBAAgB;AAUnB,GATA,KAAK,OAAO,OAAO,QAAQ,CAAC,SAAS,MAAM,GAAG,CAAC,EAC/C,KAAK,SAAS,EAAE,EAChB,KAAK,SAAS,YAAY,EACtB,KAAK,SAAS,QAAQ,KAAK,iBAC7B,KAAK,aAAa,qBAAqB,KAAK,MAAM,EAClD,KAAK,QAAQ,OAEf,KAAK,cAAc,MACnB,KAAK,gBAAgB,MACrB,KAAK,eAAe;KAEtB,KAAK,wBACU;AACX,QAAK,SAAS;KAGlB,KAAK,oBAAoB;GAEvB,IAAM,IAAgB,KAAK,QAAQ,UAAU,KAAK,QAAQ,kBAAkB,GAAG;AAC/E,OAAI,KAAK,kBAAkB,GAAe;AAExC,QADA,KAAK,SAAS,EACV,CAAC,GAAe;AAClB,UAAK,aAAa;AAClB;;AA6BF,IA3BA,KAAK,gBAAgB,GACjB,KAAK,iBAAiB,mBAAmB,KAAK,gBAChD,KAAK,eAAe,KAAK,cAAc,cAAc,cAErD,KAAK,eAAsB,KAAK,eAAqC,UAAW,MAElF,KAAK,cAAc,SAAS,MAAW;AACrC,UAAK,SAAS,QAAQ,EAAO;MAC7B,EACF,KAAK,OAAO,KACV,KAAK,QAAQ,mBAAmB,OAAO,MAAS;AAE9C,KADA,KAAK,aAAa,GAClB,KAAK,aAAa;MAClB,CACH,EACD,KAAK,OAAO,KACV,KAAK,QAAQ,qBAAqB,OAAO,GAAQ,MAAgB;AAQ/D,KAPA,KAAK,oBAAoB,GACzB,KAAK,kBAAkB,IAAc,KAAK,iBAAiB,GAAG,IAAS,YAAY,aAAa,MAChG,KAAK,eAAe,GACpB,KAAK,cAAc,GACf,KAAK,eACP,KAAK,yBAAyB,EAEhC,KAAK,aAAa;MAClB,CACH,EACD,KAAK,gBAAgB,KAAK,iBAAiB,EAAE;KAC3C,aAAa,KAAK;KAClB,UAAU,KAAK;KAChB,CAAC;;KAGN,KAAK,QAAQ,MACb,KAAK,gBACE,KAAK,QAAQ,WAIlB,KAAK,aAAa,KAAK,cAAc,KAAK,QAAQ,aAC3C,KAAK,WAAW,KAAK,QAAQ,aAAa,UAAU,cAJzD,KAAK,aAAa,MACX,IAKX,KAAK,wBACE,KAAK,QAAQ,WAIlB,KAAK,eAAe,KAAK,iBAAiB,OAAO,KAAK,QAAQ,iBAAkB,aAAa,KAAK,QAAQ,eAAe,GAAG,KAAK,QAAQ,gBAClI,KAAK,iBAJV,KAAK,eAAe,MACb,IAKX,KAAK,0BAA0B,GAAc,MAAU;GACrD,IAAM,oBAA4C,IAAI,KAAK,EACrD,oBAAuC,IAAI,KAAK;AACtD,QAAK,IAAI,IAAI,IAAQ,GAAG,KAAK,GAAG,KAAK;IACnC,IAAM,IAAc,EAAa;AACjC,QAAI,EAA0B,IAAI,EAAY,KAAK,CACjD;IAEF,IAAM,IAA8B,EAAqB,IACvD,EAAY,KACb;AAMD,QALI,KAA+B,QAAQ,EAAY,MAAM,EAA4B,MACvF,EAAqB,IAAI,EAAY,MAAM,EAAY,GAC9C,EAAY,MAAM,EAA4B,OACvD,EAA0B,IAAI,EAAY,MAAM,GAAK,EAEnD,EAA0B,SAAS,KAAK,QAAQ,MAClD;;AAGJ,UAAO,EAAqB,SAAS,KAAK,QAAQ,QAAQ,MAAM,KAAK,EAAqB,QAAQ,CAAC,CAAC,MAAM,GAAG,MACvG,EAAE,QAAQ,EAAE,MACP,EAAE,QAAQ,EAAE,QAEd,EAAE,MAAM,EAAE,IACjB,CAAC,KAAK,KAAK;KAEf,KAAK,wBAAwB,SACrB;GACJ,KAAK,QAAQ;GACb,KAAK,QAAQ;GACb,KAAK,QAAQ;GACb,KAAK,QAAQ;GACb,KAAK,QAAQ;GACb,KAAK,QAAQ;GACb,KAAK,QAAQ;GACd,GACA,GAAO,GAAc,GAAc,GAAY,GAAS,GAAO,OACzC,KAAK,cAAc,KAAK,KAAK,KAAK,cAAc,MAEnE,KAAK,mBAAmB,KAE1B,KAAK,YAAY,GACjB,KAAK,8BAA8B,EAAE,EAC9B;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACD,GAEH,EACE,KAAK,IACN,CACF,EACD,KAAK,kBAAkB,SACf,CAAC,KAAK,uBAAuB,EAAE,KAAK,cAAc,GACvD,EACC,UACA,iBACA,iBACA,eACA,YACA,UACA,yBACC,MAAkB;AACnB,OAAI,CAAC,EAIH,QAHA,KAAK,oBAAoB,EAAE,EAC3B,KAAK,cAAc,OAAO,EAC1B,KAAK,gBAAgB,OAAO,EACrB,EAAE;AAEX,OAAI,KAAK,gBAAgB,OAAO,QACzB,IAAM,KAAS,KAAK,gBAAgB,MAAM,CAC7C,CAAI,KAAS,KACX,KAAK,gBAAgB,OAAO,EAAM;AAYxC,GARI,KAAK,qBACP,KAAK,mBAAmB,IACxB,KAAK,gBAAgB,IACrB,KAAK,oBAAoB,EAAE,EAC3B,KAAK,cAAc,OAAO,EAC1B,KAAK,gBAAgB,OAAO,EAC5B,KAAK,8BAA8B,EAAE,GAEnC,KAAK,kBAAkB,WAAW,KAAK,CAAC,KAAK,kBAC/C,KAAK,oBAAoB,KAAK,QAAQ,0BACtC,KAAK,kBAAkB,SAAS,MAAS;AACvC,SAAK,cAAc,IAAI,EAAK,KAAK,EAAK,KAAK;KAC3C;GAEJ,IAAM,IAAM,KAAK,gBAAgB,IAAI,KAAK,4BAA4B,SAAS,IAAI,KAAK,IAAI,GAAG,KAAK,4BAA4B,GAAG;AAEnI,GADA,KAAK,8BAA8B,EAAE,EACjC,KAAK,iBAAiB,KAAK,kBAAkB,WAAW,MAC1D,KAAK,gBAAgB;GAEvB,IAAM,IAAe,KAAK,kBAAkB,MAAM,GAAG,EAAI,EACnD,IAAoB,MAAM,EAAM,CAAC,KACrC,KAAK,EACN;AACD,QAAK,IAAI,IAAI,GAAG,IAAI,GAAK,KAAK;IAC5B,IAAM,IAAO,EAAa;AAC1B,IAAI,MACF,EAAc,EAAK,QAAQ;;AAG/B,QAAK,IAAI,IAAI,GAAK,IAAI,GAAO,KAAK;IAChC,IAAM,IAAM,EAAW,EAAE,EACnB,IAAa,KAAK,gBAAgB,IAAI,EAAE,EAC1C,GACA,GACE,IAAkB,MAAuB,cAAc,EAAc,IAAI,EAAI;AACnF,QAAI,MAAe,KAAK,KAAK,KAAK,QAAQ,QAAQ,GAAG;AACnD,SAAO;KACP,IAAM,IAAY,EAAc,IAC1B,IAAa,MAAc,KAAK,IAA8B,KAAK,IAA/B,EAAa;AACvD,SAAQ,IAAa,EAAW,MAAM,KAAK,QAAQ,MAAM,IAAe;WACnE;KACL,IAAM,IAAsB,KAAK,QAAQ,UAAU,IAAI,EAAa,IAAI,KAAK,KAAK,uBAAuB,GAAc,EAAE;AAGzH,KAFA,IAAQ,IAAsB,EAAoB,MAAM,KAAK,QAAQ,MAAM,IAAe,GAC1F,IAAO,IAAsB,EAAoB,OAAO,IAAI,KAAK,QAAQ,OACrE,KAAK,QAAQ,QAAQ,KAAK,KAC5B,KAAK,gBAAgB,IAAI,GAAG,EAAK;;IAGrC,IAAM,IAAe,EAAc,IAAI,EAAI,EACrC,IAAO,OAAO,KAAiB,WAAW,IAAe,KAAK,QAAQ,aAAa,EAAE,EACrF,IAAM,IAAQ;AASpB,IARA,EAAa,KAAK;KAChB,OAAO;KACP;KACA;KACA;KACA;KACA;KACD,EACD,EAAc,KAAQ;;AAGxB,UADA,KAAK,oBAAoB,GAClB;KAET;GACE,KAAA,QAAA,IAAA,aAA8B,gBAAgB;GAC9C,aAAa,KAAK,QAAQ;GAC3B,CACF,EACD,KAAK,iBAAiB,SACd;GACJ,KAAK,iBAAiB;GACtB,KAAK,SAAS;GACd,KAAK,iBAAiB;GACtB,KAAK,QAAQ;GACd,GACA,GAAc,GAAW,GAAc,MAC/B,KAAK,QAAQ,EAAa,SAAS,KAAK,IAAY,IAAI,GAAe;GAC5E;GACA;GACA;GACA;GACD,CAAC,GAAG,MAEP;GACE,KAAA,QAAA,IAAA,aAA8B,gBAAgB;GAC9C,aAAa,KAAK,QAAQ;GAC3B,CACF,EACD,KAAK,oBAAoB,SACjB;GACJ,IAAI,IAAa,MACb,IAAW,MACT,IAAQ,KAAK,gBAAgB;AAMnC,UALI,MACF,IAAa,EAAM,YACnB,IAAW,EAAM,WAEnB,KAAK,YAAY,WAAW;IAAC,KAAK;IAAa;IAAY;IAAS,CAAC,EAC9D;IACL,KAAK,QAAQ;IACb,KAAK,QAAQ;IACb,KAAK,QAAQ;IACb;IACA;IACD;MAEF,GAAgB,GAAU,GAAO,GAAY,MACrC,MAAe,QAAQ,MAAa,OAAO,EAAE,GAAG,EAAe;GACpE;GACA;GACA;GACA;GACD,CAAC,EAEJ;GACE,KAAA,QAAA,IAAA,aAA8B,gBAAgB;GAC9C,aAAa,KAAK,QAAQ;GAC3B,CACF,EACD,KAAK,oBAAoB,MAAS;GAChC,IAAM,IAAgB,KAAK,QAAQ,gBAC7B,IAAW,EAAK,aAAa,EAAc;AAOjD,UANK,IAME,SAAS,GAAU,GAAG,IAL3B,QAAQ,KACN,2BAA2B,EAAc,gCAC1C,EACM;KAIX,KAAK,6BAA6B,MAAU;AAE1C,OAAI,CAAC,KAAK,eAAe,KAAK,YAAY,aAAa,SACrD,QAAO;GAET,IAAM,IAAc,KAAK,YAAY,SAAgB,KAAK,wBAAwB,KAAK,YAAY,iBAAiB,EAAwB;AAC5I,OAAI,MAAgB,KAAK,KAAK,KAAK,OAAO;IACxC,IAAM,IAAa,KAAK,IACtB,KAAK,QAAQ,UACb,KAAK,MAAM,KAAK,MAAM,WAAW,KAAK,MAAM,cAAc,EAAE,CAC7D,EACK,IAAW,KAAK,IAAI,GAAG,IAAc,EAAW,EAChD,IAAW,KAAK,IACpB,KAAK,QAAQ,QAAQ,GACrB,IAAc,EACf;AACD,WAAO,KAAS,KAAY,KAAS;;AAEvC,UAAO;KAET,KAAK,kBAAkB,MAAS;AAC9B,OAAI,CAAC,GAAM;AACT,SAAK,cAAc,SAAS,GAAQ,MAAS;AAC3C,KAAK,EAAO,gBACV,KAAK,SAAS,UAAU,EAAO,EAC/B,KAAK,cAAc,OAAO,EAAK;MAEjC;AACF;;GAEF,IAAM,IAAQ,KAAK,iBAAiB,EAAK,EACnC,IAAM,KAAK,QAAQ,WAAW,EAAM,EACpC,IAAW,KAAK,cAAc,IAAI,EAAI;AAQ5C,GAPI,MAAa,MACX,KACF,KAAK,SAAS,UAAU,EAAS,EAEnC,KAAK,SAAS,QAAQ,EAAK,EAC3B,KAAK,cAAc,IAAI,GAAK,EAAK,IAE9B,CAAC,KAAK,eAAe,KAAK,gBAAgB,KAAK,0BAA0B,EAAM,IAClF,KAAK,WAAW,GAAO,KAAK,QAAQ,eAAe,GAAM,KAAK,GAAG,KAAK,CAAC;KAG3E,KAAK,cAAc,GAAO,MAAS;GAEjC,IAAM,IAAO,KAAK,kBAAkB;AACpC,OAAI,CAAC,EAAM;GAEX,IAAM,IAAQ,KADG,KAAK,cAAc,IAAI,EAAK,IAAI,IAAI,EAAK;AAE1D,GAAI,MAAU,MACD,KAAK,aAAmC,aAAc,aAAa,KAAK,+CAA+C,KAAK,IAAyE,EAAK,QAAQ,KAAK,iBAAiB,GAAG,KAAK,oBAAhH,KAAK,2CAA2C,GAAM,GAAO,KAAK,MAC3M,QAAA,IAAA,aAA6B,gBAAgB,KAAK,QAAQ,SACxD,QAAQ,KAAK,cAAc,EAAM,EAEnC,KAAK,gBAAgB,KAAK,iBAAiB,EAAE;IAC3C,aAAa,KAAK,qBAAqB;IACvC,UAAU,KAAK;IAChB,CAAC,GAEJ,KAAK,4BAA4B,KAAK,EAAK,MAAM,EACjD,KAAK,gBAAgB,IAAI,IAAI,KAAK,cAAc,IAAI,EAAK,KAAK,EAAK,CAAC,EACpE,KAAK,OAAO,GAAM;KAGtB,KAAK,kBAAkB,SACf,CAAC,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,CAAC,GACvD,GAAS,MAAiB;GACzB,IAAM,IAAe,EAAE;AACvB,QAAK,IAAI,IAAI,GAAG,IAAM,EAAQ,QAAQ,IAAI,GAAK,KAAK;IAElD,IAAM,IAAc,EADV,EAAQ;AAElB,MAAa,KAAK,EAAY;;AAEhC,UAAO;KAET;GACE,KAAA,QAAA,IAAA,aAA8B,gBAAgB;GAC9C,aAAa,KAAK,QAAQ;GAC3B,CACF,EACD,KAAK,2BAA2B,MAAW;GACzC,IAAM,IAAe,KAAK,iBAAiB;AACvC,SAAa,WAAW,EAG5B,QAAO,GACL,EAAa,GACX,GACA,EAAa,SAAS,IACrB,MAAU,GAAa,EAAa,GAAO,CAAC,OAC7C,EACD,EACF;KAEH,KAAK,2BAA2B;AAC9B,OAAI,CAAC,KAAK,cAAe,QAAO;AAChC,OAAI,kBAAkB,KAAK,cACzB,QAAO,KAAK,QAAQ,aAAa,KAAK,cAAc,cAAc,KAAK,cAAc,cAAc,KAAK,cAAc,eAAe,KAAK,cAAc;GACnJ;IACL,IAAM,IAAM,KAAK,cAAc,SAAS;AACxC,WAAO,KAAK,QAAQ,aAAa,EAAI,cAAc,KAAK,cAAc,aAAa,EAAI,eAAe,KAAK,cAAc;;KAG7H,KAAK,yBAAyB,GAAU,GAAO,IAAW,MAAM;AAC9D,OAAI,CAAC,KAAK,cAAe,QAAO;GAChC,IAAM,IAAO,KAAK,SAAS,EACrB,IAAe,KAAK,iBAAiB;AAI3C,GAHI,MAAU,WACZ,IAAQ,KAAY,IAAe,IAAO,QAAQ,UAEhD,MAAU,WACZ,MAAa,IAAW,KAAQ,IACvB,MAAU,UACnB,KAAY;GAEd,IAAM,IAAY,KAAK,oBAAoB;AAC3C,UAAO,KAAK,IAAI,KAAK,IAAI,GAAW,EAAS,EAAE,EAAE;KAEnD,KAAK,qBAAqB,GAAO,IAAQ,WAAW;AAClD,OAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAO,KAAK,QAAQ,QAAQ,EAAE,CAAC;GAC5D,IAAM,IAAO,KAAK,SAAS,EACrB,IAAe,KAAK,iBAAiB,EACrC,IAAO,KAAK,kBAAkB;AACpC,OAAI,CAAC,EAAM;AACX,OAAI,MAAU,OACZ,KAAI,EAAK,OAAO,IAAe,IAAO,KAAK,QAAQ,iBACjD,KAAQ;YACC,EAAK,SAAS,IAAe,KAAK,QAAQ,mBACnD,KAAQ;OAER,QAAO,CAAC,GAAc,EAAM;AAGhC,OAAI,MAAU,SAAS,MAAU,KAAK,QAAQ,QAAQ,EACpD,QAAO,CAAC,KAAK,oBAAoB,EAAE,EAAM;GAE3C,IAAM,IAAW,MAAU,QAAQ,EAAK,MAAM,KAAK,QAAQ,mBAAmB,EAAK,QAAQ,KAAK,QAAQ;AACxG,UAAO,CACL,KAAK,sBAAsB,GAAU,GAAO,EAAK,KAAK,EACtD,EACD;KAEH,KAAK,kBAAkB,GAAU,EAAE,WAAQ,SAAS,cAAW,WAAW,EAAE,KAAK;GAC/E,IAAM,IAAS,KAAK,sBAAsB,GAAU,EAAM;AAW1D,GATA,KAAK,cAAc;IACjB,OAAO;IACP;IACA;IACA,WALU,KAAK,KAAK;IAMpB,kBAAkB;IAClB,cAAc;IACf,EACD,KAAK,gBAAgB,GAAQ;IAAE,aAAa,KAAK;IAAG;IAAU,CAAC,EAC/D,KAAK,yBAAyB;KAEhC,KAAK,iBAAiB,GAAO,EAC3B,OAAO,IAAe,QACtB,cAAW,WACT,EAAE,KAAK;AACT,OAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAO,KAAK,QAAQ,QAAQ,EAAE,CAAC;GAC5D,IAAM,IAAa,KAAK,kBAAkB,GAAO,EAAa;AAC9D,OAAI,CAAC,EACH;GAEF,IAAM,CAAC,GAAQ,KAAS,GAClB,IAAM,KAAK,KAAK;AAUtB,GATA,KAAK,cAAc;IACjB;IACA;IACA;IACA,WAAW;IACX,kBAAkB;IAClB,cAAc;IACf,EACD,KAAK,gBAAgB,GAAQ;IAAE,aAAa,KAAK;IAAG;IAAU,CAAC,EAC/D,KAAK,yBAAyB;KAEhC,KAAK,YAAY,GAAO,EAAE,cAAW,WAAW,EAAE,KAAK;GACrD,IAAM,IAAS,KAAK,iBAAiB,GAAG;AAWxC,GATA,KAAK,cAAc;IACjB,OAAO;IACP,OAAO;IACP;IACA,WALU,KAAK,KAAK;IAMpB,kBAAkB;IAClB,cAAc;IACf,EACD,KAAK,gBAAgB,GAAQ;IAAE,aAAa,KAAK;IAAG;IAAU,CAAC,EAC/D,KAAK,yBAAyB;KAEhC,KAAK,qBAAqB;GAExB,IAAM,IAAe,KAAK,iBAAiB,EACvC;AACJ,OAAI,EAAa,WAAW,EAC1B,KAAM,KAAK,QAAQ;YACV,KAAK,QAAQ,UAAU,EAChC,KAAa,EAAa,EAAa,SAAS,IAA0B,OAAQ;QAC7E;IACL,IAAM,IAAY,MAAM,KAAK,QAAQ,MAAM,CAAC,KAAK,KAAK,EAClD,IAAW,EAAa,SAAS;AACrC,WAAO,KAAY,KAAK,EAAU,MAAM,MAAQ,MAAQ,KAAK,GAAE;KAC7D,IAAM,IAAO,EAAa;AAI1B,KAHI,EAAU,EAAK,UAAU,SAC3B,EAAU,EAAK,QAAQ,EAAK,MAE9B;;AAEF,QAAM,KAAK,IAAI,GAAG,EAAU,QAAQ,MAAQ,MAAQ,KAAK,CAAC;;AAE5D,UAAO,KAAK,IACV,IAAM,KAAK,QAAQ,eAAe,KAAK,QAAQ,YAC/C,EACD;KAEH,KAAK,mBAAmB,GAAQ,EAC9B,gBACA,kBACI;AACJ,QAAK,QAAQ,WAAW,GAAQ;IAAE;IAAU;IAAa,EAAE,KAAK;KAElE,KAAK,gBAAgB;AAGnB,GAFA,KAAK,gCAAgC,IAAI,KAAK,EAC9C,KAAK,kCAAkC,IAAI,KAAK,EAChD,KAAK,OAAO,GAAM;KAEpB,KAAK,WAAW,EAAK;;CAEvB,0BAA0B;AACxB,MAAI,CAAC,KAAK,cAAc;AACtB,QAAK,cAAc;AACnB;;AAEE,EACJ,KAAK,UAAQ,KAAK,aAAa,4BAA4B;AAEzD,GADA,KAAK,QAAQ,MACb,KAAK,iBAAiB;IACtB;;CAEJ,kBAAkB;AAGhB,MAFI,CAAC,KAAK,eAEN,CADO,KAAK,cACP;AAET,MAAI,KAAK,KAAK,GAAG,KAAK,YAAY,YADT,KACuC;AAC9D,QAAK,cAAc;AACnB;;EAEF,IAAM,IAAa,KAAK,YAAY,SAAS,OAAgF,KAAK,IAA9E,KAAK,kBAAkB,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM,EACpH,IAAe,IAAa,EAAW,KAAK,KAAK,YAAY,kBAE7D,IAAgB,MAAiB,KAAK,YAAY;AACxD,MAAI,CAAC,KAAiB,GAAY,GAAc,KAAK,iBAAiB,CAAC,EAErE;OADA,KAAK,YAAY,gBACb,KAAK,YAAY,gBAAgB,GAAe;AAClD,SAAK,cAAc;AACnB;;QAIF,CADA,KAAK,YAAY,eAAe,GAC5B,MACF,KAAK,YAAY,mBAAmB,GACpC,KAAK,YAAY,WAAW,QAC5B,KAAK,gBAAgB,GAAc;GACjC,aAAa,KAAK;GAClB,UAAU;GACX,CAAC;AAGN,OAAK,yBAAyB;;GAG5B,MAA2B,GAAK,GAAM,GAAiB,MAAU;AACrE,QAAO,KAAO,IAAM;EAClB,IAAM,KAAU,IAAM,KAAQ,IAAI,GAC5B,IAAe,EAAgB,EAAO;AAC5C,MAAI,IAAe,EACjB,KAAM,IAAS;WACN,IAAe,EACxB,KAAO,IAAS;MAEhB,QAAO;;AAMT,QAHE,IAAM,IACD,IAAM,IAEN;;AAGX,SAAS,GAAe,EACtB,iBACA,cACA,iBACA,YACC;CACD,IAAM,IAAY,EAAa,SAAS,GAClC,KAAa,MAAU,EAAa,GAAO;AACjD,KAAI,EAAa,UAAU,EACzB,QAAO;EACL,YAAY;EACZ,UAAU;EACX;CAEH,IAAI,IAAa,GACf,GACA,GACA,GACA,EACD,EACG,IAAW;AACf,KAAI,MAAU,EACZ,QAAO,IAAW,KAAa,EAAa,GAAU,MAAM,IAAe,GACzE;UAEO,IAAQ,GAAG;EACpB,IAAM,IAAa,MAAM,EAAM,CAAC,KAAK,EAAE;AACvC,SAAO,IAAW,KAAa,EAAW,MAAM,MAAQ,IAAM,IAAe,EAAU,GAAE;GACvF,IAAM,IAAO,EAAa;AAE1B,GADA,EAAW,EAAK,QAAQ,EAAK,KAC7B;;EAEF,IAAM,IAAe,MAAM,EAAM,CAAC,KAAK,IAAe,EAAU;AAChE,SAAO,KAAc,KAAK,EAAa,MAAM,MAAQ,KAAO,EAAa,GAAE;GACzE,IAAM,IAAO,EAAa;AAE1B,GADA,EAAa,EAAK,QAAQ,EAAK,OAC/B;;AAGF,EADA,IAAa,KAAK,IAAI,GAAG,IAAa,IAAa,EAAM,EACzD,IAAW,KAAK,IAAI,GAAW,KAAY,IAAQ,IAAI,IAAW,GAAO;;AAE3E,QAAO;EAAE;EAAY;EAAU;;;;AC55BjC,IAAMC,KAA4B,OAAO,WAAa,MAAcC,EAAM,kBAAkBA,EAAM;AAClG,SAAS,GAAmB,EAC1B,kBAAe,IACf,GAAG,KACF;CACD,IAAM,IAAWA,EAAM,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,IAC5C,IAAkB;EACtB,GAAG;EACH,WAAW,GAAW,MAAS;GAC7B,IAAI;AAMJ,GALI,KAAgB,IAClB,EAAU,EAAS,GAEnB,GAAU,GAEX,IAAK,EAAQ,aAAa,QAAgB,EAAG,KAAK,GAAS,GAAW,EAAK;;EAE/E,EACK,CAAC,KAAYA,EAAM,eACjB,IAAI,GAAY,EAAgB,CACvC;AAQD,QAPA,EAAS,WAAW,EAAgB,EACpC,SACS,EAAS,WAAW,EAC1B,EAAE,CAAC,EACN,SACS,EAAS,aAAa,CAC7B,EACK;;AAET,SAAS,GAAe,GAAS;AAC/B,QAAO,GAAmB;EACxB;EACA;EACA,YAAY;EACZ,GAAG;EACJ,CAAC;;;;AC3BJ,IAAI,KAAgB,YAChB,CAAC,IAAuB,MAAuB,GAAmB,GAAc,EAChF,CAAC,IAAsB,MAAsB,GAAsB,GAAc;AACrF,SAAS,GAAiB,GAAO;CAC/B,IAAM,EACJ,oBACA,SAAS,GACT,aACA,mBACA,aACA,SACA,SACA,oBACA,aACA,WAAQ,MAER,kCACE,GACE,CAAC,GAAS,KAAc,GAAqB;EACjD,MAAM;EACN,aAAa,KAAkB;EAC/B,UAAU;EACV,QAAQ;EACT,CAAC,EACI,CAAC,GAAS,KAAcC,EAAM,SAAS,KAAK,EAC5C,CAAC,GAAa,KAAkBA,EAAM,SAAS,KAAK,EACpD,IAAmCA,EAAM,OAAO,GAAM,EACtD,IAAgB,IAAU,CAAC,CAAC,KAAQ,CAAC,CAAC,EAAQ,QAAQ,OAAO,GAEjE,IAEI,IAAU;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,gBAAgBC,GAAgB,EAAe,GAAG,KAAQ;EAC1D;EACA;EACA;EACD;AACD,QAAuB,kBACrB,IACA;EACE,OAAO;EACP,GAAG;EACH,UAAU,GAAW,EAA2B,GAAG,EAA2B,EAAQ,GAAG;EAC1F,CACF;;AAEH,IAAIC,KAAe,mBACf,KAAkBF,EAAM,YACzB,EAAE,oBAAiB,cAAW,YAAS,GAAG,KAAiB,MAAiB;CAC3E,IAAM,EACJ,YACA,UACA,aACA,YACA,aACA,eACA,eACA,qCACA,kBACA,mBACE,GAAmBE,IAAc,EAAgB,EAC/C,IAAe,EAAgB,GAAc,EAAW,EACxD,IAAyBF,EAAM,OAAO,EAAQ;AASpD,QARA,EAAM,gBAAgB;EACpB,IAAM,IAAO,GAAS;AACtB,MAAI,GAAM;GACR,IAAM,UAAc,EAAW,EAAuB,QAAQ;AAE9D,UADA,EAAK,iBAAiB,SAAS,EAAM,QACxB,EAAK,oBAAoB,SAAS,EAAM;;IAEtD,CAAC,GAAS,EAAW,CAAC,EACF,kBACrB,EAAU,QACV;EACE,MAAM;EACN,MAAM;EACN,gBAAgBC,GAAgB,EAAQ,GAAG,UAAU;EACrD,iBAAiB;EACjB,cAAcE,GAAS,EAAQ;EAC/B,iBAAiB,IAAW,KAAK,KAAK;EACtC;EACA;EACA,GAAG;EACH,KAAK;EACL,WAAW,EAAqB,IAAY,MAAU;AACpD,GAAI,EAAM,QAAQ,WAAS,EAAM,gBAAgB;IACjD;EACF,SAAS,EAAqB,IAAU,MAAU;AAEhD,GADA,GAAY,MAAgBF,GAAgB,EAAY,GAAG,KAAO,CAAC,EAAY,EAC3E,KAAe,MACjB,EAAiC,UAAU,EAAM,sBAAsB,EAClE,EAAiC,WAAS,EAAM,iBAAiB;IAExE;EACH,CACF;EAEJ;AACD,GAAgB,cAAcC;AAC9B,IAAIE,KAAWJ,EAAM,YAClB,GAAO,MAAiB;CACvB,IAAM,EACJ,oBACA,SACA,YACA,mBACA,aACA,aACA,UACA,oBACA,SACA,GAAG,MACD;AACJ,QAAuB,kBACrB,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,6BAA6B,EAAE,uBAAoC,kBAAK,GAAU,EAAE,UAAU,CAC5E,kBACd,IACA;GACE,GAAG;GACH,KAAK;GACL;GACD,CACF,EACD,KAAiC,kBAC/B,IACA,EACE,oBACD,CACF,CACF,EAAE,CAAC;EACL,CACF;EAEJ;AACD,GAAS,cAAc;AACvB,IAAIK,KAAiB,qBACjB,KAAoBL,EAAM,YAC3B,GAAO,MAAiB;CACvB,IAAM,EAAE,oBAAiB,eAAY,GAAG,MAAmB,GACrD,IAAU,GAAmBK,IAAgB,EAAgB;AACnE,QAAuB,kBACrB,GACA;EACE,SAAS,KAAcJ,GAAgB,EAAQ,QAAQ,IAAI,EAAQ,YAAY;EAC/E,UAA0B,kBACxB,EAAU,MACV;GACE,cAAcE,GAAS,EAAQ,QAAQ;GACvC,iBAAiB,EAAQ,WAAW,KAAK,KAAK;GAC9C,GAAG;GACH,KAAK;GACL,OAAO;IAAE,eAAe;IAAQ,GAAG,EAAM;IAAO;GACjD,CACF;EACF,CACF;EAEJ;AACD,GAAkB,cAAcE;AAChC,IAAI,KAAoB,uBACpB,KAAsBL,EAAM,YAC7B,EAAE,oBAAiB,GAAG,KAAS,MAAiB;CAC/C,IAAM,EACJ,YACA,qCACA,YACA,mBACA,aACA,aACA,SACA,UACA,SACA,gBACA,sBACE,GAAmB,IAAmB,EAAgB,EACpD,IAAe,EAAgB,GAAc,EAAe,EAC5D,IAAc,GAAY,EAAQ,EAClC,IAAc,GAAQ,EAAQ;AACpC,GAAM,gBAAgB;EACpB,IAAM,IAAQ;AACd,MAAI,CAAC,EAAO;EACZ,IAAM,IAAa,OAAO,iBAAiB,WAKrC,IAJa,OAAO,yBACxB,GACA,UACD,CAC6B,KACxB,IAAU,CAAC,EAAiC;AAClD,MAAI,MAAgB,KAAW,GAAY;GACzC,IAAM,IAAQ,IAAI,MAAM,SAAS,EAAE,YAAS,CAAC;AAG7C,GAFA,EAAM,gBAAgBC,GAAgB,EAAQ,EAC9C,EAAW,KAAK,GAAOA,GAAgB,EAAQ,GAAG,KAAQ,EAAQ,EAClE,EAAM,cAAc,EAAM;;IAE3B;EAAC;EAAa;EAAa;EAAS;EAAiC,CAAC;CACzE,IAAM,IAAoBD,EAAM,OAAOC,GAAgB,EAAQ,GAAG,KAAQ,EAAQ;AAClF,QAAuB,kBACrB,EAAU,OACV;EACE,MAAM;EACN,eAAe;EACf,gBAAgB,KAAkB,EAAkB;EACpD;EACA;EACA;EACA;EACA;EACA,GAAG;EACH,UAAU;EACV,KAAK;EACL,OAAO;GACL,GAAG,EAAM;GACT,GAAG;GACH,UAAU;GACV,eAAe;GACf,SAAS;GACT,QAAQ;GAIR,WAAW;GACZ;EACF,CACF;EAEJ;AACD,GAAoB,cAAc;AAClC,SAAS,GAAW,GAAO;AACzB,QAAO,OAAO,KAAU;;AAE1B,SAASA,GAAgB,GAAS;AAChC,QAAO,MAAY;;AAErB,SAASE,GAAS,GAAS;AACzB,QAAOF,GAAgB,EAAQ,GAAG,kBAAkB,IAAU,YAAY;;;;ACrP5E,IAAM,KAAW,EAAM,YAGpB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EACT,6FACA,6BACA,2EACA,mDACA,oHACA,sIACA,EACD;CACD,GAAI;WAEJ,kBAAC,IAAD;EAA6B,WAAU;YAAvC,CACE,kBAAC,IAAD;GACE,WAAU;GACV,aAAa;GACb,eAAY;GACZ,CAAA,EACF,kBAAC,IAAD;GACE,WAAU;GACV,aAAa;GACb,eAAY;GACZ,CAAA,CAC0B;;CACP,CAAA,CACzB;AACF,GAAS,cAAA,GAAqC;;;ACvB9C,IAAM,KAA2B,IAC3B,KAAsB,IACtB,KAAqB;AAa3B,SAAS,GAA6B,GAA0B;AAC9D,QACE,EAAO,QAAQ,kBAAgB,KAAK,QACpC,EAAO,QAAQ,sBAAoB,KAAK,QACxC,EAAO,QAAQ,sCAAsC,KAAK,QAC1D,EAAO,QAAQ,oBAAkB,KAAK;;AA8E1C,SAAS,GAAe,GAA4C;CAClE,IAAM,IAAmB,EAAE;AAC3B,MAAK,IAAM,CAAC,GAAO,MAAS,EAC1B,MAAK,IAAM,KAAY,EACrB,GAAI,KAAK;EAAE;EAAO;EAAU,CAAC;AAGjC,QAAO;;AAGT,SAAS,GAAe,GAA8C;CACpE,IAAM,oBAAM,IAAI,KAA0B;AAC1C,MAAK,IAAM,EAAE,UAAO,iBAAc,GAAO;EACvC,IAAI,IAAO,EAAI,IAAI,EAAM;AAKzB,EAJK,MACH,oBAAO,IAAI,KAAa,EACxB,EAAI,IAAI,GAAO,EAAK,GAEtB,EAAK,IAAI,EAAS;;AAEpB,QAAO;;AAGT,SAAS,GAA6D,EACpE,YACA,SACA,cAAc,GACd,sBACA,gBACA,kBAAe,WACf,cACA,eAAY,QACZ,sBACA,mBAAgB,IAChB,uBAAoB,IACpB,yBAAsB,IACtB,eAAe,GACf,4BAC0B;CAC1B,IAAM,CAAC,GAAS,KAAc,EAAuB,KAAe,EAAE,CAAC,EAUjE,CAAC,GAAmB,KAAwB,EAAmB,EAAE,CAAC,EAClE,IAAe,MAAuB,KAAA,GACtC,IAAyB,KAAqB,GAC9C,IAAqB,IACvB,EAAE,GACF,IACE,IACA,GAEA,IAAiB,EAAsB,KAAK,EAC5C,IAAY,EAAuB,KAAK,EAExC,IAAe,EAAO,EAAmB;AAC/C,GAAa,UAAU;CAEvB,IAAM,IAAuB,EAAO,EAAkB;AACtD,GAAqB,UAAU;CAE/B,IAAM,IAAkB,GACrB,MAAkB;AAIjB,EAHK,KACH,EAAqB,EAAI,EAE3B,EAAqB,UAAU,EAAI;IAErC,CAAC,EAAa,CACf,EAGK,IAAmB,MAAoB,KAAA,GACvC,CAAC,GAAuB,KAA4B,wBAElD,IAAI,KAAK,CAAC,EAEZ,IAAmB,QAClB,IACE,IACH,GAAe,KAAmB,EAAE,CAAC,GACrC,oBAH6B,IAAI,KAA0B,EAI9D;EAAC;EAAqB;EAAkB;EAAiB;EAAsB,CAAC,EAI7E,KAAsB,EAAO,EAAiB;AACpD,IAAoB,UAAU;CAE9B,IAAM,KAA2B,EAAO,EAAsB;AAC9D,IAAyB,UAAU;CAEnC,IAAM,IAAsB,GACzB,MAAmC;AAIlC,EAHK,KACH,EAAyB,EAAK,EAEhC,GAAyB,UAAU,GAAe,EAAK,CAAC;IAE1D,CAAC,EAAiB,CACnB,EAGK,IAAgB,EAAyB,KAAK,EAG9C,KAAe,EAKlB;EAAE,QAAQ;EAAO,UAAU;EAAO,+BAAe,IAAI,KAAK;EAAE,QAAQ;EAAM,CAAC,EAExE,KAAuC,EAAE;AAC/C,MAAK,IAAM,KAAM,EACf,IAAkB,KAAM;CAG1B,IAAM,KAAmB,GACtB,MAAsB;EACrB,IAAM,IAAc,GAAS,SAAS,aAAa,CAAC;AACpD,MAAI,CAAC,KAAe,EAAe,YAAY,KAAM;EAErD,IAAM,IAAU,EAAY,WAAW,MAAM,EAAE,OAAO,EAAe,QAAQ,EACvE,IAAa,EAAY,WAAW,MAAM,EAAE,OAAO,EAAU;AACnE,MAAI,MAAY,MAAM,MAAe,GAAI;EAEzC,IAAM,IAAQ,KAAK,IAAI,GAAS,EAAW,EACrC,IAAM,KAAK,IAAI,GAAS,EAAW,EACnC,IAAS,IAAI,IAAI,EAAa,WAAW,EAAE,CAAC;AAElD,OAAK,IAAI,IAAI,GAAO,KAAK,GAAK,IAC5B,GAAO,IAAI,EAAY,GAAG,SAAS,GAAG;AAGxC,IAAgB,MAAM,KAAK,EAAO,CAAC;IAErC,CAAC,EAAgB,CAClB,EAiCK,KACJ,KAAqB,IAAsB,IAAU,CAhCT;EAC5C,IAAI;EACJ,MAAM;EACN,SAAS,EAAE,eACT,kBAAC,IAAD;GACE,SAAS,EAAM,sBAAsB;GACrC,kBAAkB,MAAY;AAC5B,MAAM,sBAAsB,CAAC,CAAC,EAAQ;;GAExC,cAAW;GACX,CAAA;EAEJ,OAAO,EAAE,aACP,kBAAC,IAAD;GACE,SAAS,EAAI,eAAe;GAC5B,kBAAkB,MAAY;AAC5B,MAAI,eAAe,CAAC,CAAC,EAAQ;;GAE/B,UAAU,MAAwB;AAKhC,IAJI,EAAE,aACJ,GAAiB,EAAI,SAAS,GAAG,EACjC,EAAE,gBAAgB,GAEpB,EAAe,UAAU,EAAI,SAAS;;GAExC,cAAY,cAAc,EAAI,SAAS;GACvC,CAAA;EAEJ,eAAe;EAChB,EAGuE,GAAG,EAAQ,EAE7E,IAAQ,GAAc;EAC1B;EACA,SAAS;EACT,OAAO;GAAE;GAAS,cAAc;GAAmB;EACnD,iBAAiB;EACjB;EACA,uBAAuB,MAAmB;AACxC,OAAI,EAAwB;GAC5B,IAAM,IACJ,OAAO,KAAmB,aACtB,EAAe,GAAkB,GACjC;AAIN,KAHY,OAAO,QAAQ,EAAS,CACjC,QAAQ,GAAG,OAAc,EAAS,CAClC,KAAK,CAAC,OAAQ,EAAG,CACA;;EAEtB,iBAAiB,IAAiB;EAClC,mBAAmB,IAAmB;EACtC,oBAAoB,CAAC;EACrB,WAAW,MAAQ,EAAI;EACxB,CAAC,EAEI,KAAW,EAAO,EAAM;AAC9B,IAAS,UAAU;CAEnB,IAAM,IAAO,EAAM,aAAa,CAAC,MAC3B,IAAa,EAAK,SAAS,IAE3B,IAAc,GAAe;EACjC,OAAO,EAAK;EACZ,wBAAwB,EAAU;EAClC,oBAAoB;EACpB,UAAU;EACV,SAAS;EACV,CAAC,EAMI,KAAe,QAAc;EACjC,IAAM,oBAAM,IAAI,KAAqB;AAErC,SADA,EAAK,SAAS,GAAG,MAAQ,EAAI,IAAI,EAAE,SAAS,IAAI,EAAI,CAAC,EAC9C;IACN,CAAC,EAAK,CAAC,EAQJ,KAAmB,QAErB,EACG,uBAAuB,CACvB,KAAK,MAAM,EAAE,GAAG,CAChB,QAAQ,MAAO,MAAO,GAAmB,EAE9C;EAAC;EAAS;EAAmB;EAAoB,CAClD,EAEK,KAAkB,QAAc;EACpC,IAAM,oBAAM,IAAI,KAAqB;AAErC,SADA,GAAiB,SAAS,GAAI,MAAQ,EAAI,IAAI,GAAI,EAAI,CAAC,EAChD;IACN,CAAC,GAAiB,CAAC,EAEhB,KAAqB,GACxB,GAAc,MAA2C;EACxD,IAAM,IAAO,GAAa,IAAI,EAAE,MAAM,EAChC,IAAO,GAAa,IAAI,EAAE,MAAM,EAChC,IAAO,GAAgB,IAAI,EAAE,SAAS,EACtC,IAAO,GAAgB,IAAI,EAAE,SAAS;AAC5C,MAAI,MAAS,KAAA,KAAa,MAAS,KAAA,KAAa,MAAS,KAAA,KAAa,MAAS,KAAA,EAC7E,wBAAO,IAAI,KAAK;EAElB,IAAM,IAAW,KAAK,IAAI,GAAM,EAAK,EAC/B,IAAS,KAAK,IAAI,GAAM,EAAK,EAC7B,IAAW,KAAK,IAAI,GAAM,EAAK,EAC/B,IAAS,KAAK,IAAI,GAAM,EAAK,EAC7B,oBAAO,IAAI,KAA0B;AAC3C,OAAK,IAAI,IAAI,GAAU,KAAK,GAAQ,KAAK;GACvC,IAAM,IAAQ,EAAK,IAAI,SAAS;AAChC,OAAI,CAAC,EAAO;GACZ,IAAM,oBAAO,IAAI,KAAa;AAC9B,QAAK,IAAI,IAAI,GAAU,KAAK,GAAQ,KAAK;IACvC,IAAM,IAAQ,GAAiB;AAC/B,IAAI,KAAO,EAAK,IAAI,EAAM;;AAE5B,KAAK,IAAI,GAAO,EAAK;;AAEvB,SAAO;IAET;EAAC;EAAc;EAAiB;EAAM;EAAiB,CACxD,EAEK,KAAkB,GAEpB,GACA,MAC6B;EAC7B,IAAM,oBAAO,IAAI,KAA0B;AAC3C,OAAK,IAAM,CAAC,GAAO,MAAS,EAC1B,GAAK,IAAI,GAAO,IAAI,IAAI,EAAK,CAAC;AAEhC,OAAK,IAAM,CAAC,GAAO,MAAS,GAAK;GAC/B,IAAM,IAAW,EAAK,IAAI,EAAM,oBAAI,IAAI,KAAa;AACrD,QAAK,IAAM,KAAK,EAAM,GAAS,IAAI,EAAE;AACrC,KAAK,IAAI,GAAO,EAAS;;AAE3B,SAAO;IAET,EAAE,CACH,EAEK,KAAiB,GACpB,GAAe,MACP,EAAiB,IAAI,EAAM,EAAE,IAAI,EAAS,KAAK,IAExD,CAAC,EAAiB,CACnB,EAEK,KAAsB,GACzB,GAAqB,GAAe,MAAqB;AAIxD,MAHI,CAAC,KACD,MAAa,MAEb,EAAE,WAAW,EAAG;AAOpB,IAAU,SAAS,OAAO;EAE1B,IAAM,IAAU,EAAE,UACZ,IAAS,EAAE,WAAW,EAAE;AAE9B,MAAI,KAAW,EAAc,SAAS;AASpC,GAPA,EADa,GAAmB,EAAc,SAAS;IAAE;IAAO;IAAU,CAAC,CAClD,EACzB,GAAa,UAAU;IACrB,QAAQ;IACR,UAAU;IACV,+BAAe,IAAI,KAAK;IACxB,QAAQ,EAAc;IACvB,EACD,EAAE,gBAAgB;AAClB;;AAGF,MAAI,GAAQ;GAEV,IAAM,oBAAO,IAAI,KAA0B;AAC3C,QAAK,IAAM,CAAC,GAAK,MAAS,EACxB,GAAK,IAAI,GAAK,IAAI,IAAI,EAAK,CAAC;GAE9B,IAAM,IAAW,EAAK,IAAI,EAAM;AAChC,OAAI,GAAU,IAAI,EAAS,CAEzB,CADA,EAAS,OAAO,EAAS,EACrB,EAAS,SAAS,KAAG,EAAK,OAAO,EAAM;QACtC;IACL,IAAM,IAAO,qBAAY,IAAI,KAAa;AAE1C,IADA,EAAK,IAAI,EAAS,EAClB,EAAK,IAAI,GAAO,EAAK;;AAUvB,GARA,EAAc,UAAU;IAAE;IAAO;IAAU,EAC3C,EAAoB,EAAK,EACzB,GAAa,UAAU;IACrB,QAAQ;IACR,UAAU;IACV,eAAe;IACf,QAAQ;KAAE;KAAO;KAAU;IAC5B,EACD,EAAE,gBAAgB;AAClB;;EAIF,IAAM,IAAQ,IAAI,IAAyB,CAAC,CAAC,GAAO,IAAI,IAAI,CAAC,EAAS,CAAC,CAAC,CAAC,CAAC;AAS1E,EARA,EAAc,UAAU;GAAE;GAAO;GAAU,EAC3C,EAAoB,EAAM,EAC1B,GAAa,UAAU;GACrB,QAAQ;GACR,UAAU;GACV,+BAAe,IAAI,KAAK;GACxB,QAAQ;IAAE;IAAO;IAAU;GAC5B,EACD,EAAE,gBAAgB;IAEpB;EAAC;EAAqB;EAAoB;EAAqB;EAAiB,CACjF,EAEK,KAAuB,GAC1B,GAAe,MAAqB;AACnC,MAAI,CAAC,EAAqB;EAC1B,IAAM,IAAO,GAAa;AAC1B,MAAI,CAAC,EAAK,UAAU,CAAC,EAAK,OAAQ;EAClC,IAAM,IAAO,GAAmB,EAAK,QAAQ;GAAE;GAAO;GAAU,CAAC;AAEjE,IADa,EAAK,WAAW,GAAgB,EAAK,eAAe,EAAK,GAAG,EAChD;IAE3B;EAAC;EAAqB;EAAoB;EAAiB;EAAoB,CAChF;AA+BD,CA3BA,QAAgB;AACd,MAAI,CAAC,EAAqB;EAC1B,IAAM,UAAa;AACjB,GAAI,GAAa,QAAQ,WACvB,GAAa,UAAU;IACrB,QAAQ;IACR,UAAU;IACV,+BAAe,IAAI,KAAK;IACxB,QAAQ;IACT;;AAIL,SADA,OAAO,iBAAiB,WAAW,EAAK,QAC3B;AACX,UAAO,oBAAoB,WAAW,EAAK;;IAE5C,CAAC,EAAoB,CAAC,EAWzB,QAAgB;AACd,MAAI,CAAC,EAAqB;EAC1B,IAAM,IAAO,EAAU;AACvB,MAAI,CAAC,EAAM;EACX,IAAM,KAAkB,MAAkB;GACxC,IAAM,IAAS,EAAE;AACZ,SACD,EAAK,SAAS,EAAO,IACrB,GAA6B,EAAO,IACpC,GAAoB,QAAQ,SAAS,MACzC,kBAAoB,IAAI,KAAK,CAAC,EAC9B,EAAc,UAAU;;AAG1B,SADA,OAAO,iBAAiB,aAAa,EAAe,QACvC;AACX,UAAO,oBAAoB,aAAa,EAAe;;IAExD,CAAC,GAAqB,EAAoB,CAAC;CAE9C,IAAM,KAAyB,GAC5B,MAA2C;AACrC,SAEL;OAAI,EAAE,QAAQ,UAAU;AAGtB,IAFA,kBAAoB,IAAI,KAAK,CAAC,EAC9B,EAAc,UAAU,MACxB,EAAE,gBAAgB;AAClB;;AAKF,QAAK,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,OAAO,EAAE,QAAQ,MAAM;IAChE,IAAM,oBAAO,IAAI,KAA0B;AAC3C,SAAK,IAAM,KAAO,GAAM;KACtB,IAAM,oBAAO,IAAI,KAAa;AAC9B,UAAK,IAAM,KAAS,GAClB,GAAK,IAAI,EAAM;AAEjB,OAAK,IAAI,EAAI,SAAS,IAAI,EAAK;;AAEjC,MAAoB,EAAK;IAEzB,IAAM,IAAa,EAAK,IAAI,SAAS,IAC/B,IAAa,GAAiB;AAIpC,IAHI,KAAc,MAChB,EAAc,UAAU;KAAE,OAAO;KAAY,UAAU;KAAY,GAErE,EAAE,gBAAgB;AAClB;;;IAMJ;EAAC;EAAqB;EAAqB;EAAM;EAAiB,CACnE,EAEK,KAAa,EAAc,SAE3B,KAAa,GAEf,GACA,GACA,GACA,MACG;AACH,MAAI,CAAC,EACH,QACE,kBAAC,IAAD;GAAqB,eAAa;GAAO,kBAAgB;aACtD;GACS,EAFI,EAEJ;EAGhB,IAAM,IAAW,GAAe,GAAO,EAAS,EAC1C,IACJ,KACA,OAAe,QACf,GAAW,UAAU,KACrB,GAAW,aAAa;AAC1B,SACE,kBAAC,IAAD;GAEE,eAAa;GACb,kBAAgB;GAChB,sBAAoB,IAAW,SAAS,KAAA;GACxC,cAAc,MAAM,GAAoB,GAAG,GAAO,EAAS;GAC3D,oBAAoB,GAAqB,GAAO,EAAS;GACzD,WAAW,EACT,2BACA,KAAY,+CACZ,KAAY,SACb;aAEA;GACS,EAbL,EAaK;IAGhB;EAAC;EAAqB;EAAgB;EAAY;EAAqB;EAAqB,CAC7F;AAED,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,qCAAqC,EAAU;YAE7D,kBAAC,OAAD;GACE,KAAK;GACL,WAAU;GACV,OAAO,EAAE,WAAW,OAAO,KAAc,WAAW,GAAG,EAAU,MAAM,GAAW;GAClF,UAAU,IAAsB,IAAI,KAAA;GACpC,WAAW,IAAsB,KAAyB,KAAA;aAE1D,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD;IAAa,WAAU;cACpB,EAAM,iBAAiB,CAAC,KAAK,MAC5B,kBAAC,IAAD,EAAA,UACG,EAAG,QAAQ,KAAK,MACf,kBAAC,IAAD;KAEE,WAAW,EACT,6BACA,EAAO,OAAO,YAAY,IAAI,iBAC/B;KACD,OACE,EAAO,OAAO,UAAU,OACpB,EAAE,OAAO,EAAO,OAAO,UAAU,MAAM,GACvC,KAAA;KAEN,SAAS,EAAO,OAAO,yBAAyB;eAEhD,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CACG,GACC,EAAO,OAAO,UAAU,QACxB,EAAO,YAAY,CACpB,EACA;OACC,KAAK,kBAAC,IAAD,EAAS,WAAU,UAAW,CAAA;OACnC,MAAM,kBAAC,IAAD,EAAW,WAAU,UAAW,CAAA;OACvC,CAAC,EAAO,OAAO,aAAa,KAAe,KACvC;;KACG,EAtBL,EAAO,GAsBF,CACZ,EACO,EA3BI,EAAG,GA2BP,CACX;IACU,CAAA,EAEd,kBAAC,IAAD,EAAA,UAAA,CACG,IACC,kBAAA,GAAA,EAAA,UAAA;IACG,EAAY,iBAAiB,CAAC,SAAS,KACtC,kBAAC,MAAD,EAAI,OAAO,EAAE,QAAQ,EAAY,iBAAiB,CAAC,IAAI,OAAO,EAAI,CAAA;IAEnE,EAAY,iBAAiB,CAAC,KAAK,MAAe;KACjD,IAAM,IAAM,EAAK,EAAW;AAC5B,SAAI,CAAC,EAAK,QAAO;KACjB,IAAM,IAAgB,GAAmB,IAAI,EAAI,SAAS,GAAG;AAC7D,YACE,kBAAC,IAAD;MAEE,cAAY,EAAI,eAAe,GAAG,aAAa,KAAA;MAC/C,cAAY,EAAW;MACvB,oBAAkB,IAAgB,SAAS,KAAA;MAC3C,KAAK,EAAY;MACjB,WAAW,EAAG,KAAiB,eAAe;gBAE7C,EAAI,iBAAiB,CAAC,KAAK,MAC1B,GACE,EAAI,SAAS,IACb,EAAK,OAAO,IACZ,GAAW,EAAK,OAAO,UAAU,MAAM,EAAK,YAAY,CAAC,EACzD,EAAK,GACN,CACF;MACQ,EAfJ,EAAI,GAeA;MAEb;IACD,EAAY,iBAAiB,CAAC,SAAS,KACtC,kBAAC,MAAD,EACE,OAAO,EACL,QACE,EAAY,cAAc,IACzB,EAAY,iBAAiB,CAAC,GAAG,GAAG,EAAE,OAAO,IACjD,EACD,CAAA;IAEH,EAAA,CAAA,GAEH,EAAK,KAAK,MAAQ;IAChB,IAAM,IAAgB,GAAmB,IAAI,EAAI,SAAS,GAAG;AAC7D,WACE,kBAAC,IAAD;KAEE,cAAY,EAAI,eAAe,GAAG,aAAa,KAAA;KAC/C,oBAAkB,IAAgB,SAAS,KAAA;KAC3C,WAAW,EAAG,KAAiB,eAAe;eAE7C,EAAI,iBAAiB,CAAC,KAAK,MAC1B,GACE,EAAI,SAAS,IACb,EAAK,OAAO,IACZ,GAAW,EAAK,OAAO,UAAU,MAAM,EAAK,YAAY,CAAC,EACzD,EAAK,GACN,CACF;KACQ,EAbJ,EAAI,GAaA;KAEb,EAGH,EAAK,WAAW,KACf,kBAAC,IAAD,EAAA,UACE,kBAAC,IAAD;IACE,SAAS,GAAW;IACpB,WAAU;cAET;IACS,CAAA,EACH,CAAA,CAEH,EAAA,CAAA,CACN,EAAA,CAAA;GACJ,CAAA;EACF,CAAA;;;;ACrvBV,SAAS,GAAU,GAAuC;AAExD,QADI,KAAU,OAAoC,KAC3C,OAAO,EAAM;;AAGtB,SAAS,GAAS,EAChB,WACA,UACA,aACA,aACA,gBACgB;CAChB,IAAM,IAAY,GAAU,EAAO,EAC7B,IAAW,GAAU,EAAM,EAK3B,IAAY,MAAc;AAOhC,KAN2B,KAAY,EAOrC,QACE,kBAAC,QAAD;EACE,aAAU;EACV,WAAW,EAAG,wCAAwC,EAAU;YAFlE,CAIG,KAAa,EAAU,SAAS,KAC/B,kBAAC,QAAD;GACE,WAAU;GACV,cAAY,mBAAmB;aAE9B;GACI,CAAA,EAET,kBAAC,IAAD;GACE,MAAK;GACL,OAAO;GACP,WAAW,MAAM,EAAU,EAAE,OAAO,MAAM;GAI1C,WAAU;GACV,cAAY,6BAA6B;GACzC,aAAY;GACZ,CAAA,CACG;;AAIX,KAAI,CAAC,EACH,QACE,kBAAC,QAAD;EACE,aAAU;EACV,WAAW,EAAG,yBAAyB,EAAU;YAEhD;EACI,CAAA;CAQX,IAAM,IAAa,EAAU,SAAS,GAChC,IAAY,EAAU,SAAS,KAAK,EAAS,WAAW;AAE9D,QACE,kBAAC,QAAD;EACE,aAAU;EACV,WAAW,EAAG,wCAAwC,EAAU;YAFlE,CAIG,KACC,kBAAC,QAAD;GACE,WAAU;GACV,cAAY,mBAAmB;aAE9B;GACI,CAAA,EAER,IACC,kBAAC,QAAD;GACE,WAAU;GACV,cAAW;aACZ;GAEM,CAAA,GAEP,kBAAC,QAAD;GACE,WAAU;GACV,cAAY,cAAc;aAEzB;GACI,CAAA,CAEJ;;;;;AClFX,IAAM,KAAsB;AAE5B,SAAS,GAAY,EAAE,gBAAoD;CACzE,IAAM,IAAU,EAAU,MAAM,GAAG,GAAoB,EACjD,IAAW,EAAU,SAAS;AAEpC,QACE,kBAAC,IAAD,EAAA,UACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAU;EACV,cAAY,eAAe,EAAU,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK;YAH3E,CAKG,EAAQ,KAAK,MACZ,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD;GAAgB,SAAA;aACd,kBAAC,OAAD;IACE,WAAU;IACV,cAAY,EAAS;cAEpB,EAAS,YACR,kBAAC,OAAD;KACE,KAAK,EAAS;KACd,KAAK,EAAS;KACd,WAAU;KACV,CAAA,GAEF,EAAS,YAAY,OAAO,EAAE,CAAC,aAAa;IAE1C,CAAA;GACS,CAAA,EACjB,kBAAC,IAAD,EAAA,UAAiB,EAAS,aAA6B,CAAA,CAC/C,EAAA,EAlBI,EAAS,GAkBb,CACV,EACD,IAAW,KACV,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD;GAAgB,SAAA;aACd,kBAAC,OAAD;IACE,WAAU;IACV,cAAY,GAAG,EAAS;cAF1B,CAGC,KACG,EACE;;GACS,CAAA,EACjB,kBAAC,IAAD,EAAA,UACG,EAAU,MAAM,GAAoB,CAAC,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK,EAC3D,CAAA,CACT,EAAA,CAAA,CAER;KACU,CAAA;;AAItB,SAAS,GAAU,EAAE,WAAQ,YAAwD;AACnF,KAAI,MAAU,EAAG,QAAO;CAExB,IAAM,IAAW,EAAO,OAAO,IAAS,KAClC,IAAc,EAAO,UAAU,IAAS,KACxC,IAAW,EAAO,OAAO,IAAS;AAExC,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAU;EACV,MAAK;EACL,iBAAe,EAAO;EACtB,iBAAe;EACf,iBAAe;EACf,cAAY,GAAG,EAAO,KAAK,MAAM,EAAM,SAAS,EAAO,QAAQ,YAAY,EAAO,KAAK;YAPzF;GASE,kBAAC,OAAD;IACE,WAAU;IACV,OAAO,EAAE,OAAO,GAAG,EAAQ,IAAI;IAC/B,CAAA;GACF,kBAAC,OAAD;IACE,WAAU;IACV,OAAO,EAAE,OAAO,GAAG,EAAW,IAAI;IAClC,CAAA;GACF,kBAAC,OAAD;IACE,WAAU;IACV,OAAO,EAAE,OAAO,GAAG,EAAQ,IAAI;IAC/B,CAAA;GACE;;;AAIV,SAAS,GAAa,EACpB,UACA,gBACA,UACA,WACA,cACA,WACA,YACA,WACA,gBACoB;CACpB,IAAM,IAAU,IAAQ,IAAI,KAAK,MAAO,EAAO,OAAO,IAAS,IAAI,GAAG,GAahE,IAAc,KACf,MAAwC;AACxB,IAAE,OAKU,QAAQ,8FAAqB,KACpC,EAAE,iBACtB,GAAS;KAEX,KAAA,GAEE,IAAgB,KACjB,MAA2C;AAItC,IAAE,WAAW,EAAE,kBACf,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,gBAAgB,EAClB,GAAS;KAGb,KAAA;AAEJ,QACE,kBAAC,IAAD;EACE,aAAU;EACV,WAAW,EACT,yDACA,KAAW,mCACX,KAAU,cACV,EACD;EACD,SAAS;EACT,MAAM,IAAU,WAAW,KAAA;EAC3B,UAAU,IAAU,IAAI,KAAA;EACxB,WAAW;YAXb;GAaE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAgD;OAAW,CAAA,EACxE,KACC,kBAAC,IAAD;OAAO,SAAQ;OAAU,WAAU;iBAA+B;OAE1D,CAAA,CAEN;SACL,KACC,kBAAC,KAAD;MAAG,WAAU;gBAAwC;MAAgB,CAAA,CAEnE;QACN,kBAAC,QAAD;KAAM,WAAU;eAAhB,CACG,GAAQ,IACJ;OACH;;GAEN,kBAAC,IAAD;IAAmB;IAAe;IAAS,CAAA;GAE3C,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,QAAD;OAAM,WAAU;iBAAhB;QACE,kBAAC,QAAD,EAAM,WAAU,gDAAiD,CAAA;QAChE,EAAO;QAAK;QACR;;MACP,kBAAC,QAAD;OAAM,WAAU;iBAAhB;QACE,kBAAC,QAAD,EAAM,WAAU,gDAAiD,CAAA;QAChE,EAAO;QAAQ;QACX;;MACP,kBAAC,QAAD;OAAM,WAAU;iBAAhB;QACE,kBAAC,QAAD,EAAM,WAAU,iDAAkD,CAAA;QACjE,EAAO;QAAK;QACR;;MACH;QAEL,KAAa,EAAU,SAAS,KAC/B,kBAAC,IAAD,EAAwB,cAAa,CAAA,CAEnC;;GAEL,KACC,kBAAC,OAAD;IAAK,WAAU;cACZ;IACG,CAAA;GAEH;;;;;ACjLX,SAAgB,GAAe,EAC7B,UACA,UACA,YACA,aACA,cACA,oBACsB;AACtB,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,8CAA8C,EAAU;YAFxE,CAIE,kBAAC,UAAD;GAAQ,WAAU;aAAlB;IAEE,kBAAC,OAAD;KAAK,WAAU;eACZ;KACG,CAAA;IACN,kBAAC,OAAD,EAAK,WAAU,UAAW,CAAA;IACzB;IACA,KAAW,kBAAC,OAAD;KAAK,WAAU;eAA2B;KAAc,CAAA;IAC7D;MACT,kBAAC,OAAD;GACE,WAAW,EACT,gEACA,EACD;GAEA;GACG,CAAA,CACF;;;;;ACxEV,IAAM,KAAgE;CACpE,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ;AAED,SAAgB,GAAW,EAAE,aAAU,GAAG,aAAU,gBAA8B;AAChF,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,cAAc,GAAK,IAAU,EAAU;EAEpD;EACG,CAAA;;;;ACbV,SAAgB,GAAc,EAAE,UAAO,SAAM,aAAU,gBAAiC;AACtF,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,qCAAqC,EAAU;YAF/D,CAIE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,GACD,kBAAC,MAAD;IAAI,WAAU;cAAqE;IAAW,CAAA,CAC1F;MACL,KAAY,kBAAC,OAAD;GAAK,WAAU;GAA2B;GAAe,CAAA,CAClE;;;;;ACZV,IAAM,KAAmE;CACvE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,MAAM;CACP;AAED,SAAgB,GAAQ,EAAE,aAAU,cAAW,OAAO,gBAA2B;AAC/E,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EACT,qDACA,GAAU,IACV,EACD;EAEA;EACG,CAAA;;;;AC2CV,SAAgB,GAAkB,EAChC,UACA,aACA,iBAAc,IACd,gBAAa,IACb,cACA,gBACyB;AAGzB,QAFI,EAAM,WAAW,IAAU,OAG7B,kBAAC,OAAD;EACE,MAAK;EACL,cAAY;EACZ,WAAW,EAAG,sCAAsC,EAAU;YAHhE,CAME,kBAAC,QAAD;GACE,eAAY;GACZ,WAAU;GACV,OAAO,EAAE,MAAM,GAAG,EAAW,KAAK;GAClC,CAAA,EACD,EAAM,KAAK,MAAO;GACjB,IAAM,IAAgB,CAAC,EAAG,QACpB,IAAkB,EACtB,gEACA,oEAEA,iBAEA,KAAiB,wCAEjB,EAAG,UAAU,6BAEb,EAAG,UAAU,+BACd,EACK,IAAiC;IACrC,aAAa,GAAG,EAAY;IAC5B,YAAY;IACZ,eAAe;IAChB,EAEK,IACJ,EAAG,OAAO,OAIN,EAAG,SAAS,OAIZ,OAHF,kBAAC,QAAD;IAAM,WAAU;cACb,EAAG;IACC,CAAA,GANP,kBAAC,QAAD;IAAM,WAAU;cACb,EAAG;IACC,CAAA;AAOX,UACE,kBAAC,KAAD;IAEE,MAAK;IACL,gBAAc,EAAG,SAAS,SAAS,KAAA;IACnC,iBAAe,EAAG,UAAU,KAAA;IAC5B,MAAM,IAAgB,EAAG,OAAO,KAAA;IAChC,WAAW;IACX,OAAO;IACP,UAAU,MAAM;AACd,SAAI,CAAC,GAAe;AAClB,QAAE,gBAAgB;AAClB;;AAEF,KAAI,KACF,EAAS,GAAI,EAAE;;cAdrB,CAkBE,kBAAC,QAAD;KAAM,WAAU;eAA2B,EAAG;KAAa,CAAA,EAC1D,EACC;MAnBG,EAAG,GAmBN;IAEN,CACE;;;;;AC1HV,IAAM,KAAe,EAAM,YACxB,EAAE,cAAW,aAAU,WAAQ,aAAU,GAAG,KAAS,MAElD,kBAAC,OAAD;CACO;CACL,aAAU;CACV,WAAW,EACT,oFACA,EACD;CACD,OAAO;EAAE,QAAQ;EAAI,GAAI,EAAM,SAAS,EAAE;EAAG;CAC7C,GAAI;WARN,CAUG,MAAa,KAAU,kBAAC,IAAD,EAAwB,SAAS,GAAU,CAAA,GAClE,EACG;GAGX;AACD,GAAa,cAAc;AAE3B,SAAS,GAAuB,EAAE,YAAS,WAAQ,UAAmD;AACpG,QACE,kBAAC,UAAD;EACE,MAAK;EACI;EACF;EACP,WAAU;YAEV,kBAAC,IAAD;GAAiB,MAAM;GAAI,aAAa;GAAQ,CAAA;EACzC,CAAA;;AAsBb,SAAS,GAAqB,EAC5B,SACA,YAAS,sBACT,eAAY,qBACZ,SACA,QACA,UACA,SACA,gBAC4B;AAC5B,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,qCAAqC,EAAU;YAAlE,CACG,KACC,kBAAC,OAAD;GACE,WAAU;GACV,OAAO;IAAE,YAAY;IAAQ,OAAO;IAAW;aAE9C;GACG,CAAA,EAER,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,QAAD;MAAM,WAAU;gBACb;MACI,CAAA;KACN,KAAO,kBAAC,IAAD,EAAA,UAAY,GAAgB,CAAA;KACnC;KACG;OACL,KACC,kBAAC,QAAD;IAAM,WAAU;cAAyC;IAAY,CAAA,CAEnE;KACF;;;AAKV,SAAS,GAAoB,EAC3B,cACA,eAIC;AACD,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,qCAAqC,EAAU;EAC/D;EACG,CAAA;;AASV,SAAS,GAAwB,EAC/B,UAAO,WACP,YAIC;CACD,IAAM,IACJ,MAAS,YACL;EAAE,IAAI;EAAiB,IAAI;EAAoB,KAAK;EAAkB,GACtE,MAAS,SACP;EAAE,IAAI;EAAe,IAAI;EAAkB,KAAK;EAAgB,GAChE,MAAS,SACP;EAAE,IAAI;EAAa,IAAI;EAAgB,KAAK;EAAc,GAC1D;EAAE,IAAI;EAAc,IAAI;EAAiB,KAAK;EAAe;AACvE,QACE,kBAAC,QAAD;EACE,WAAW,EACT,0FACA,EAAQ,IACR,EAAQ,GACT;YALH,CAOE,kBAAC,QAAD,EAAM,WAAW,EAAG,yBAAyB,EAAQ,IAAI,EAAI,CAAA,EAC5D,EACI;;;;;ACrGX,IAAM,KAAgB,EAAM,YAGzB,EAAE,cAAW,WAAQ,KAAK,UAAO,aAAU,WAAQ,WAAQ,GAAG,KAAS,MAMtD,KAAU,QAAQ,KAAU,OAsB5C,kBAAC,SAAD;CACE,aAAU;CACV,WAAU;CACV,OAAO,EAAE,UAAO;WAHlB;EAKG,KACC,kBAAC,OAAD;GAAK,aAAU;GAAyB,WAAU;aAC/C;GACG,CAAA;EAER,kBAAC,IAAD;GACO;GACL,aAAU;GACV,WAAW,EAQT,sDACA,EACD;GACM;GACP,GAAI;GAEH;GACkB,CAAA;EACpB,KACC,kBAAC,OAAD;GACE,aAAU;GACV,WAAU;aAET;GACG,CAAA;EAEF;KAxDN,kBAAC,IAAD;CACO;CACL,aAAU;CACV,WAAW,EAKT,+GACA,EACD;CACD,OAAO;EAAE;EAAO,GAAI,KAAS,EAAE;EAAG;CAClC,GAAI;CAEH;CACkB,CAAA,CA2CzB;AACF,GAAc,cAAc;AAY5B,SAAS,GAAmB,EAC1B,UACA,mBACA,cACA,eAC0B;AAC1B,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,iBAAiB,EAAU;YAA9C,CACG,KACC,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,QAAD;IAAM,WAAU;cAAuC;IAAa,CAAA,EACnE,EACG;MAER,kBAAC,OAAD;GAAK,WAAU;GAAyB;GAAe,CAAA,CACnD;;;AAUV,IAAM,KAAoB,EAAM,YAG7B,EAAE,cAAW,aAAU,aAAU,GAAG,KAAS,MAE5C,kBAAC,IAAD;CACO;CACL,WAAW,EACT,6IAIA,uDAIA,qGACA,EACD;CACD,GAAI;WAdN,CAgBE,kBAAC,QAAD;EAAM,WAAU;EAA2B;EAAgB,CAAA,EAC1D,KAAY,kBAAC,QAAD;EAAM,WAAU;YAAY;EAAgB,CAAA,CACnC;GAE1B;AACF,GAAkB,cAAc;AAqBhC,IAAM,KAAoB,EAAM,YAC7B,EAAE,cAAW,SAAM,WAAQ,aAAU,aAAU,GAAG,KAAS,MAExD,kBAAC,GAAD;CACO;CACC;CACN,cAAY,IAAS,WAAW,KAAA;CAChC,WAAW,EACT,6IACA,uDACA,qGACA,EACD;CACD,GAAI;WAVN,CAYE,kBAAC,QAAD;EAAM,WAAU;EAA2B;EAAgB,CAAA,EAC1D,KAAY,kBAAC,QAAD;EAAM,WAAU;YAAY;EAAgB,CAAA,CACpD;GAGZ;AACD,GAAkB,cAAc;;;AC5MhC,SAAS,GAAiB,EAAE,UAAO,gBAAa,YAAS,gBAAoC;AAC3F,QACE,kBAAC,UAAD;EACE,aAAU;EACV,WAAW,EAAG,0CAA0C,EAAU;YAFpE,CAIE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cACX;IACE,CAAA,EACJ,KACC,kBAAC,KAAD;IAAG,WAAU;cACV;IACC,CAAA,CAEF;MACL,KACC,kBAAC,OAAD;GAAK,WAAU;aAA6C;GAAc,CAAA,CAErE;;;AAMb,IAAM,KAAiB,EAAM,YAC1B,EAAE,cAAW,aAAU,GAAG,KAAS,MAEhC,kBAAC,OAAD;CACO;CACL,aAAU;CAGV,WAAW,EACT,0DACA,EACD;CACD,GAAI;CAEH;CACG,CAAA,CAGX;AACD,GAAe,cAAc;AAa7B,IAAM,KAAgB,EAAM,YACzB,EAAE,cAAW,UAAO,gBAAa,YAAS,aAAU,GAAG,KAAS,MAE7D,kBAAC,WAAD;CACO;CACL,aAAU;CACV,WAAW,EAAG,uBAAuB,EAAU;CAC/C,GAAI;WAJN,EAMI,KAAS,KAAe,MACxB,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,KACC,kBAAC,OAAD;IAAK,WAAU;cACZ;IACG,CAAA,EAEP,KACC,kBAAC,OAAD;IAAK,WAAU;cAAoC;IAAkB,CAAA,CAEnE;MACL,KAAW,kBAAC,OAAD;GAAK,WAAU;aAAsC;GAAc,CAAA,CAC3E;KAEP,EACO;GAGf;AACD,GAAc,cAAc;;;ACnH5B,IAAI,KAAQ;AAKZ,SAAS,KAAiB;AACxB,GAAM,gBAAgB;EACpB,IAAM,IAAa,SAAS,iBAAiB,2BAA2B;AAIxE,SAHA,SAAS,KAAK,sBAAsB,cAAc,EAAW,MAAM,IAAkB,CAAC,EACtF,SAAS,KAAK,sBAAsB,aAAa,EAAW,MAAM,IAAkB,CAAC,EACrF,YACa;AAIX,GAHI,OAAU,KACZ,SAAS,iBAAiB,2BAA2B,CAAC,SAAS,MAAS,EAAK,QAAQ,CAAC,EAExF;;IAED,EAAE,CAAC;;AAER,SAAS,KAAmB;CAC1B,IAAM,IAAU,SAAS,cAAc,OAAO;AAO9C,QANA,EAAQ,aAAa,0BAA0B,GAAG,EAClD,EAAQ,WAAW,GACnB,EAAQ,MAAM,UAAU,QACxB,EAAQ,MAAM,UAAU,KACxB,EAAQ,MAAM,WAAW,SACzB,EAAQ,MAAM,gBAAgB,QACvB;;;;ACvBT,IAAI,KAAqB,+BACrB,KAAuB,iCACvB,KAAgB;CAAE,SAAS;CAAO,YAAY;CAAM,EACpD,KAAmB,cACnB,KAAaK,EAAM,YAAY,GAAO,MAAiB;CACzD,IAAM,EACJ,UAAO,IACP,aAAU,IACV,kBAAkB,GAClB,oBAAoB,GACpB,GAAG,MACD,GACE,CAAC,GAAW,KAAgBA,EAAM,SAAS,KAAK,EAChD,IAAmBC,GAAe,EAAqB,EACvD,IAAqBA,GAAe,EAAuB,EAC3D,IAAwBD,EAAM,OAAO,KAAK,EAC1C,IAAe,EAAgB,IAAe,MAAS,EAAa,EAAK,CAAC,EAC1E,IAAaA,EAAM,OAAO;EAC9B,QAAQ;EACR,QAAQ;AACN,QAAK,SAAS;;EAEhB,SAAS;AACP,QAAK,SAAS;;EAEjB,CAAC,CAAC;AAqCH,CApCA,EAAM,gBAAgB;AACpB,MAAI,GAAS;GACX,IAAI,IAAiB,SAAS,GAAO;AACnC,QAAI,EAAW,UAAU,CAAC,EAAW;IACrC,IAAM,IAAS,EAAM;AACrB,IAAI,EAAU,SAAS,EAAO,GAC5B,EAAsB,UAAU,IAEhC,GAAM,EAAsB,SAAS,EAAE,QAAQ,IAAM,CAAC;MAEvD,IAAkB,SAAS,GAAO;AACnC,QAAI,EAAW,UAAU,CAAC,EAAW;IACrC,IAAM,IAAgB,EAAM;AACxB,UAAkB,SACjB,EAAU,SAAS,EAAc,IACpC,GAAM,EAAsB,SAAS,EAAE,QAAQ,IAAM,CAAC;MAEvD,IAAmB,SAAS,GAAW;AACjB,iBAAS,kBACT,SAAS,KAChC,MAAK,IAAM,KAAY,EACrB,CAAI,EAAS,aAAa,SAAS,KAAG,GAAM,EAAU;;AAK1D,GADA,SAAS,iBAAiB,WAAW,EAAe,EACpD,SAAS,iBAAiB,YAAY,EAAgB;GACtD,IAAM,IAAmB,IAAI,iBAAiB,EAAiB;AAE/D,UADI,KAAW,EAAiB,QAAQ,GAAW;IAAE,WAAW;IAAM,SAAS;IAAM,CAAC,QACzE;AAGX,IAFA,SAAS,oBAAoB,WAAW,EAAe,EACvD,SAAS,oBAAoB,YAAY,EAAgB,EACzD,EAAiB,YAAY;;;IAGhC;EAAC;EAAS;EAAW,EAAW;EAAO,CAAC,EAC3C,EAAM,gBAAgB;AACpB,MAAI,GAAW;AACb,MAAiB,IAAI,EAAW;GAChC,IAAM,IAA2B,SAAS;AAE1C,OAAI,CADwB,EAAU,SAAS,EAAyB,EAC9C;IACxB,IAAM,IAAa,IAAI,YAAY,IAAoB,GAAc;AAGrE,IAFA,EAAU,iBAAiB,IAAoB,EAAiB,EAChE,EAAU,cAAc,EAAW,EAC9B,EAAW,qBACd,GAAW,GAAY,GAAsB,EAAU,CAAC,EAAE,EAAE,QAAQ,IAAM,CAAC,EACvE,SAAS,kBAAkB,KAC7B,GAAM,EAAU;;AAItB,gBAAa;AAEX,IADA,EAAU,oBAAoB,IAAoB,EAAiB,EACnE,iBAAiB;KACf,IAAM,IAAe,IAAI,YAAY,IAAsB,GAAc;AAOzE,KANA,EAAU,iBAAiB,IAAsB,EAAmB,EACpE,EAAU,cAAc,EAAa,EAChC,EAAa,oBAChB,GAAM,KAA4B,SAAS,MAAM,EAAE,QAAQ,IAAM,CAAC,EAEpE,EAAU,oBAAoB,IAAsB,EAAmB,EACvE,GAAiB,OAAO,EAAW;OAClC,EAAE;;;IAGR;EAAC;EAAW;EAAkB;EAAoB;EAAW,CAAC;CACjE,IAAM,IAAgBA,EAAM,aACzB,MAAU;AAET,MADI,CAAC,KAAQ,CAAC,KACV,EAAW,OAAQ;EACvB,IAAM,IAAW,EAAM,QAAQ,SAAS,CAAC,EAAM,UAAU,CAAC,EAAM,WAAW,CAAC,EAAM,SAC5E,IAAiB,SAAS;AAChC,MAAI,KAAY,GAAgB;GAC9B,IAAM,IAAa,EAAM,eACnB,CAAC,GAAO,KAAQ,GAAiB,EAAW;AAElD,GADkC,KAAS,IAIrC,CAAC,EAAM,YAAY,MAAmB,KACxC,EAAM,gBAAgB,EAClB,KAAM,GAAM,GAAO,EAAE,QAAQ,IAAM,CAAC,IAC/B,EAAM,YAAY,MAAmB,MAC9C,EAAM,gBAAgB,EAClB,KAAM,GAAM,GAAM,EAAE,QAAQ,IAAM,CAAC,IAPrC,MAAmB,KAAY,EAAM,gBAAgB;;IAY/D;EAAC;EAAM;EAAS,EAAW;EAAO,CACnC;AACD,QAAuB,kBAAI,EAAU,KAAK;EAAE,UAAU;EAAI,GAAG;EAAY,KAAK;EAAc,WAAW;EAAe,CAAC;EACvH;AACF,GAAW,cAAc;AACzB,SAASE,GAAW,GAAY,EAAE,YAAS,OAAU,EAAE,EAAE;CACvD,IAAM,IAA2B,SAAS;AAC1C,MAAK,IAAM,KAAa,EAEtB,KADA,GAAM,GAAW,EAAE,WAAQ,CAAC,EACxB,SAAS,kBAAkB,EAA0B;;AAG7D,SAAS,GAAiB,GAAW;CACnC,IAAM,IAAa,GAAsB,EAAU;AAGnD,QAAO,CAFO,GAAY,GAAY,EAAU,EACnC,GAAY,EAAW,SAAS,EAAE,EAAU,CACrC;;AAEtB,SAAS,GAAsB,GAAW;CACxC,IAAM,IAAQ,EAAE,EACV,IAAS,SAAS,iBAAiB,GAAW,WAAW,cAAc,EAC3E,aAAa,MAAS;EACpB,IAAM,IAAgB,EAAK,YAAY,WAAW,EAAK,SAAS;AAEhE,SADI,EAAK,YAAY,EAAK,UAAU,IAAsB,WAAW,cAC9D,EAAK,YAAY,IAAI,WAAW,gBAAgB,WAAW;IAErE,CAAC;AACF,QAAO,EAAO,UAAU,EAAE,GAAM,KAAK,EAAO,YAAY;AACxD,QAAO;;AAET,SAAS,GAAY,GAAU,GAAW;AACxC,MAAK,IAAM,KAAW,EACpB,KAAI,CAAC,GAAS,GAAS,EAAE,MAAM,GAAW,CAAC,CAAE,QAAO;;AAGxD,SAAS,GAAS,GAAM,EAAE,WAAQ;AAChC,KAAI,iBAAiB,EAAK,CAAC,eAAe,SAAU,QAAO;AAC3D,QAAO,IAAM;AACX,MAAI,MAAS,KAAK,KAAK,MAAS,EAAM,QAAO;AAC7C,MAAI,iBAAiB,EAAK,CAAC,YAAY,OAAQ,QAAO;AACtD,MAAO,EAAK;;AAEd,QAAO;;AAET,SAAS,GAAkB,GAAS;AAClC,QAAO,aAAmB,oBAAoB,YAAY;;AAE5D,SAAS,GAAM,GAAS,EAAE,YAAS,OAAU,EAAE,EAAE;AAC/C,KAAI,KAAW,EAAQ,OAAO;EAC5B,IAAM,IAA2B,SAAS;AAE1C,EADA,EAAQ,MAAM,EAAE,eAAe,IAAM,CAAC,EAClC,MAAY,KAA4B,GAAkB,EAAQ,IAAI,KACxE,EAAQ,QAAQ;;;AAGtB,IAAI,KAAmB,IAAwB;AAC/C,SAAS,KAAyB;CAChC,IAAI,IAAQ,EAAE;AACd,QAAO;EACL,IAAI,GAAY;GACd,IAAM,IAAmB,EAAM;AAK/B,GAJI,MAAe,KACjB,GAAkB,OAAO,EAE3B,IAAQ,GAAY,GAAO,EAAW,EACtC,EAAM,QAAQ,EAAW;;EAE3B,OAAO,GAAY;AAEjB,GADA,IAAQ,GAAY,GAAO,EAAW,EACtC,EAAM,IAAI,QAAQ;;EAErB;;AAEH,SAAS,GAAY,GAAO,GAAM;CAChC,IAAM,IAAe,CAAC,GAAG,EAAM,EACzB,IAAQ,EAAa,QAAQ,EAAK;AAIxC,QAHI,MAAU,MACZ,EAAa,OAAO,GAAO,EAAE,EAExB;;AAET,SAAS,GAAY,GAAO;AAC1B,QAAO,EAAM,QAAQ,MAAS,EAAK,YAAY,IAAI;;;;AC9MrD,IAAI,KAAmB,SAAU,GAAgB;AAK7C,QAJI,OAAO,WAAa,MACb,QAEQ,MAAM,QAAQ,EAAe,GAAG,EAAe,KAAK,GACnD,cAAc;GAElC,qBAAa,IAAI,SAAS,EAC1B,qBAAoB,IAAI,SAAS,EACjC,KAAY,EAAE,EACd,KAAY,GACZ,KAAa,SAAU,GAAM;AAC7B,QAAO,MAAS,EAAK,QAAQ,GAAW,EAAK,WAAW;GAExD,KAAiB,SAAU,GAAQ,GAAS;AAC5C,QAAO,EACF,IAAI,SAAU,GAAQ;AACvB,MAAI,EAAO,SAAS,EAAO,CACvB,QAAO;EAEX,IAAI,IAAkB,GAAW,EAAO;AAKxC,SAJI,KAAmB,EAAO,SAAS,EAAgB,GAC5C,KAEX,QAAQ,MAAM,eAAe,GAAQ,2BAA2B,GAAQ,kBAAkB,EACnF;GACT,CACG,OAAO,SAAU,GAAG;AAAE,SAAO,EAAQ;GAAM;GAUhD,KAAyB,SAAU,GAAgB,GAAY,GAAY,GAAkB;CAC7F,IAAI,IAAU,GAAe,GAAY,MAAM,QAAQ,EAAe,GAAG,IAAiB,CAAC,EAAe,CAAC;AAC3G,CAAK,GAAU,OACX,GAAU,qBAAc,IAAI,SAAS;CAEzC,IAAI,IAAgB,GAAU,IAC1B,IAAc,EAAE,EAChB,oBAAiB,IAAI,KAAK,EAC1B,IAAiB,IAAI,IAAI,EAAQ,EACjC,IAAO,SAAU,GAAI;AACjB,GAAC,KAAM,EAAe,IAAI,EAAG,KAGjC,EAAe,IAAI,EAAG,EACtB,EAAK,EAAG,WAAW;;AAEvB,GAAQ,QAAQ,EAAK;CACrB,IAAI,IAAO,SAAU,GAAQ;AACrB,GAAC,KAAU,EAAe,IAAI,EAAO,IAGzC,MAAM,UAAU,QAAQ,KAAK,EAAO,UAAU,SAAU,GAAM;AAC1D,OAAI,EAAe,IAAI,EAAK,CACxB,GAAK,EAAK;OAGV,KAAI;IACA,IAAI,IAAO,EAAK,aAAa,EAAiB,EAC1C,IAAgB,MAAS,QAAQ,MAAS,SAC1C,KAAgB,GAAW,IAAI,EAAK,IAAI,KAAK,GAC7C,KAAe,EAAc,IAAI,EAAK,IAAI,KAAK;AAUnD,IATA,GAAW,IAAI,GAAM,EAAa,EAClC,EAAc,IAAI,GAAM,EAAY,EACpC,EAAY,KAAK,EAAK,EAClB,MAAiB,KAAK,KACtB,GAAkB,IAAI,GAAM,GAAK,EAEjC,MAAgB,KAChB,EAAK,aAAa,GAAY,OAAO,EAEpC,KACD,EAAK,aAAa,GAAkB,OAAO;YAG5C,GAAG;AACN,YAAQ,MAAM,mCAAmC,GAAM,EAAE;;IAGnE;;AAKN,QAHA,EAAK,EAAW,EAChB,EAAe,OAAO,EACtB,MACO,WAAY;AAiBf,EAhBA,EAAY,QAAQ,SAAU,GAAM;GAChC,IAAI,IAAe,GAAW,IAAI,EAAK,GAAG,GACtC,IAAc,EAAc,IAAI,EAAK,GAAG;AAS5C,GARA,GAAW,IAAI,GAAM,EAAa,EAClC,EAAc,IAAI,GAAM,EAAY,EAC/B,MACI,GAAkB,IAAI,EAAK,IAC5B,EAAK,gBAAgB,EAAiB,EAE1C,GAAkB,OAAO,EAAK,GAE7B,KACD,EAAK,gBAAgB,EAAW;IAEtC,EACF,MACK,OAED,qBAAa,IAAI,SAAS,EAC1B,qBAAa,IAAI,SAAS,EAC1B,qBAAoB,IAAI,SAAS,EACjC,KAAY,EAAE;;GAWf,KAAa,SAAU,GAAgB,GAAY,GAAY;AACtE,CAAI,MAAe,KAAK,MAAK,IAAa;CAC1C,IAAI,IAAU,MAAM,KAAK,MAAM,QAAQ,EAAe,GAAG,IAAiB,CAAC,EAAe,CAAC,EACvF,IAAmB,KAAc,GAAiB,EAAe;AAOrE,QANK,KAKL,EAAQ,KAAK,MAAM,GAAS,MAAM,KAAK,EAAiB,iBAAiB,sBAAsB,CAAC,CAAC,EAC1F,GAAuB,GAAS,GAAkB,GAAY,cAAc,IALxE,WAAY;AAAE,SAAO;;GCjGzB,KAAW,WAAW;AAQ/B,QAPA,KAAW,OAAO,UAAU,SAAkB,GAAG;AAC7C,OAAK,IAAI,GAAG,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,IAE5C,MAAK,IAAI,KADT,IAAI,UAAU,IACA,EAAG,CAAI,OAAO,UAAU,eAAe,KAAK,GAAG,EAAE,KAAE,EAAE,KAAK,EAAE;AAE9E,SAAO;IAEJ,GAAS,MAAM,MAAM,UAAU;;AAGxC,SAAgB,GAAO,GAAG,GAAG;CAC3B,IAAI,IAAI,EAAE;AACV,MAAK,IAAI,KAAK,EAAG,CAAI,OAAO,UAAU,eAAe,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAC9E,EAAE,KAAK,EAAE;AACb,KAAI,KAAK,QAAQ,OAAO,OAAO,yBAA0B,iBAChD,IAAI,IAAI,GAAG,IAAI,OAAO,sBAAsB,EAAE,EAAE,IAAI,EAAE,QAAQ,IAC/D,CAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,KAAK,OAAO,UAAU,qBAAqB,KAAK,GAAG,EAAE,GAAG,KAC1E,EAAE,EAAE,MAAM,EAAE,EAAE;AAE1B,QAAO;;AAkKT,SAAgB,GAAc,GAAI,GAAM,GAAM;AAC5C,KAAI,KAAQ,UAAU,WAAW,QAAQ,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,GAAI,IAAI,GAAG,IAC5E,EAAI,KAAM,EAAE,KAAK,QACb,AAAS,MAAK,MAAM,UAAU,MAAM,KAAK,GAAM,GAAG,EAAE,EACpD,EAAG,KAAK,EAAK;AAGrB,QAAO,EAAG,OAAO,KAAM,MAAM,UAAU,MAAM,KAAK,EAAK,CAAC;;;;AC5N1D,IAAW,KAAqB,6BACrB,KAAqB,2BACrB,KAAwB,2BAKxB,KAAyB;;;ACMpC,SAAgB,GAAU,GAAK,GAAO;AAOlC,QANI,OAAO,KAAQ,aACf,EAAI,EAAM,GAEL,MACL,EAAI,UAAU,IAEX;;;;ACLX,SAAgB,GAAe,GAAc,GAAU;CACnD,IAAI,IAAM,EAAS,WAAY;AAAE,SAAQ;GAErC,OAAO;GAEG;GAEV,QAAQ;IACJ,IAAI,UAAU;AACV,YAAO,EAAI;;IAEf,IAAI,QAAQ,GAAO;KACf,IAAI,IAAO,EAAI;AACf,KAAI,MAAS,MACT,EAAI,QAAQ,GACZ,EAAI,SAAS,GAAO,EAAK;;IAGpC;GACJ;GAAK,CAAC;AAGP,QADA,EAAI,WAAW,GACR,EAAI;;;;AClCf,IAAI,KAA4B,OAAO,SAAW,MAAcC,EAAM,kBAAkBA,EAAM,WAC1F,qBAAgB,IAAI,SAAS;AAejC,SAAgB,GAAa,GAAM,GAAc;CAC7C,IAAI,IAAc,GAAe,KAAgB,MAAM,SAAU,GAAU;AACvE,SAAO,EAAK,QAAQ,SAAU,GAAK;AAAE,UAAO,GAAU,GAAK,EAAS;IAAI;GAC1E;AAqBF,QAnBA,GAA0B,WAAY;EAClC,IAAI,IAAW,GAAc,IAAI,EAAY;AAC7C,MAAI,GAAU;GACV,IAAI,IAAa,IAAI,IAAI,EAAS,EAC9B,IAAa,IAAI,IAAI,EAAK,EAC1B,IAAY,EAAY;AAM5B,GALA,EAAW,QAAQ,SAAU,GAAK;AAC9B,IAAK,EAAW,IAAI,EAAI,IACpB,GAAU,GAAK,KAAK;KAE1B,EACF,EAAW,QAAQ,SAAU,GAAK;AAC9B,IAAK,EAAW,IAAI,EAAI,IACpB,GAAU,GAAK,EAAU;KAE/B;;AAEN,KAAc,IAAI,GAAa,EAAK;IACrC,CAAC,EAAK,CAAC,EACH;;;;AC1CX,SAAS,GAAK,GAAG;AACb,QAAO;;AAEX,SAAS,GAAkB,GAAU,GAAY;AAC7C,CAAI,MAAe,KAAK,MAAK,IAAa;CAC1C,IAAI,IAAS,EAAE,EACX,IAAW;AA0Df,QAzDa;EACT,MAAM,WAAY;AACd,OAAI,EACA,OAAU,MAAM,mGAAmG;AAKvH,UAHI,EAAO,SACA,EAAO,EAAO,SAAS,KAE3B;;EAEX,WAAW,SAAU,GAAM;GACvB,IAAI,IAAO,EAAW,GAAM,EAAS;AAErC,UADA,EAAO,KAAK,EAAK,EACV,WAAY;AACf,QAAS,EAAO,OAAO,SAAU,GAAG;AAAE,YAAO,MAAM;MAAQ;;;EAGnE,kBAAkB,SAAU,GAAI;AAE5B,QADA,IAAW,IACJ,EAAO,SAAQ;IAClB,IAAI,IAAM;AAEV,IADA,IAAS,EAAE,EACX,EAAI,QAAQ,EAAG;;AAEnB,OAAS;IACL,MAAM,SAAU,GAAG;AAAE,YAAO,EAAG,EAAE;;IACjC,QAAQ,WAAY;AAAE,YAAO;;IAChC;;EAEL,cAAc,SAAU,GAAI;AACxB,OAAW;GACX,IAAI,IAAe,EAAE;AACrB,OAAI,EAAO,QAAQ;IACf,IAAI,IAAM;AAGV,IAFA,IAAS,EAAE,EACX,EAAI,QAAQ,EAAG,EACf,IAAe;;GAEnB,IAAI,IAAe,WAAY;IAC3B,IAAI,IAAM;AAEV,IADA,IAAe,EAAE,EACjB,EAAI,QAAQ,EAAG;MAEf,IAAQ,WAAY;AAAE,WAAO,QAAQ,SAAS,CAAC,KAAK,EAAa;;AAErE,GADA,GAAO,EACP,IAAS;IACL,MAAM,SAAU,GAAG;AAEf,KADA,EAAa,KAAK,EAAE,EACpB,GAAO;;IAEX,QAAQ,SAAU,GAAQ;AAEtB,YADA,IAAe,EAAa,OAAO,EAAO,EACnC;;IAEd;;EAER;;AAQL,SAAgB,GAAoB,GAAS;AACzC,CAAI,MAAY,KAAK,MAAK,IAAU,EAAE;CACtC,IAAI,IAAS,GAAkB,KAAK;AAEpC,QADA,EAAO,UAAU,GAAS;EAAE,OAAO;EAAM,KAAK;EAAO,EAAE,EAAQ,EACxD;;;;AC1EX,IAAI,KAAU,SAAU,GAAI;CACxB,IAAI,IAAU,EAAG,SAAS,IAAO,GAAO,GAAI,CAAC,UAAU,CAAC;AACxD,KAAI,CAAC,EACD,OAAU,MAAM,qEAAqE;CAEzF,IAAI,IAAS,EAAQ,MAAM;AAC3B,KAAI,CAAC,EACD,OAAU,MAAM,2BAA2B;AAE/C,QAAOC,EAAM,cAAc,GAAQ,GAAS,EAAE,EAAE,EAAK,CAAC;;AAE1D,GAAQ,kBAAkB;AAC1B,SAAgB,GAAc,GAAQ,GAAU;AAE5C,QADA,EAAO,UAAU,EAAS,EACnB;;;;ACfX,IAAW,KAAY,IAAqB,ECIxC,KAAU,WAAY,IAMtB,KAAeC,EAAM,WAAW,SAAU,GAAO,GAAW;CAC5D,IAAI,IAAMA,EAAM,OAAO,KAAK,EACxB,IAAKA,EAAM,SAAS;EACpB,iBAAiB;EACjB,gBAAgB;EAChB,oBAAoB;EACvB,CAAC,EAAE,IAAY,EAAG,IAAI,IAAe,EAAG,IACrC,IAAe,EAAM,cAAc,IAAW,EAAM,UAAU,IAAY,EAAM,WAAW,IAAkB,EAAM,iBAAiB,IAAU,EAAM,SAAS,IAAS,EAAM,QAAQ,IAAU,EAAM,SAAS,IAAa,EAAM,YAAY,IAAc,EAAM,aAAa,IAAQ,EAAM,OAAO,IAAiB,EAAM,gBAAgB,IAAK,EAAM,IAAI,IAAY,MAAO,KAAK,IAAI,QAAQ,GAAI,IAAU,EAAM,SAAS,IAAO,GAAO,GAAO;EAAC;EAAgB;EAAY;EAAa;EAAmB;EAAW;EAAU;EAAW;EAAc;EAAe;EAAS;EAAkB;EAAM;EAAU,CAAC,EACplB,IAAU,GACV,IAAe,GAAa,CAAC,GAAK,EAAU,CAAC,EAC7C,IAAiB,GAAS,GAAS,EAAE,EAAE,EAAK,EAAE,EAAU;AAC5D,QAAQA,EAAM,cAAcA,EAAM,UAAU,MACxC,KAAYA,EAAM,cAAc,GAAS;EAAE,SAAS;EAA4B;EAAyB;EAAoB;EAAyB;EAAoB;EAAqB;EAAc,gBAAgB,CAAC,CAAC;EAAgB,SAAS;EAAc;EAAS,CAAC,EAChR,IAAgBA,EAAM,aAAaA,EAAM,SAAS,KAAK,EAAS,EAAE,GAAS,GAAS,EAAE,EAAE,EAAe,EAAE,EAAE,KAAK,GAAc,CAAC,CAAC,GAAKA,EAAM,cAAc,GAAW,GAAS,EAAE,EAAE,GAAgB;EAAa;EAAW,KAAK;EAAc,CAAC,EAAE,EAAS,CAAE;EAChQ;AACF,GAAa,eAAe;CACxB,SAAS;CACT,iBAAiB;CACjB,OAAO;CACV,EACD,GAAa,aAAa;CACtB,WAAW;CACX,WAAW;CACd;;;AClCD,IAAI,IAIO,KAAW,WAAY;AAC9B,KAAI,GACA,QAAO;AAEX,KAAI,OAAO,oBAAsB,IAC7B,QAAO;;;;ACRf,SAAS,KAAe;AACpB,KAAI,CAAC,SACD,QAAO;CACX,IAAI,IAAM,SAAS,cAAc,QAAQ;AACzC,GAAI,OAAO;CACX,IAAI,IAAQ,IAAU;AAItB,QAHI,KACA,EAAI,aAAa,SAAS,EAAM,EAE7B;;AAEX,SAAS,GAAa,GAAK,GAAK;AAE5B,CAAI,EAAI,aAEJ,EAAI,WAAW,UAAU,IAGzB,EAAI,YAAY,SAAS,eAAe,EAAI,CAAC;;AAGrD,SAAS,GAAe,GAAK;AAEzB,EADW,SAAS,QAAQ,SAAS,qBAAqB,OAAO,CAAC,IAC7D,YAAY,EAAI;;AAEzB,IAAW,KAAsB,WAAY;CACzC,IAAI,IAAU,GACV,IAAa;AACjB,QAAO;EACH,KAAK,SAAU,GAAO;AAOlB,GANI,KAAW,MACN,IAAa,IAAc,MAC5B,GAAa,GAAY,EAAM,EAC/B,GAAe,EAAW,GAGlC;;EAEJ,QAAQ,WAAY;AAEhB,GADA,KACI,CAAC,KAAW,MACZ,EAAW,cAAc,EAAW,WAAW,YAAY,EAAW,EACtE,IAAa;;EAGxB;GCnCM,KAAqB,WAAY;CACxC,IAAI,IAAQ,IAAqB;AACjC,QAAO,SAAU,GAAQ,GAAW;AAChC,IAAM,UAAU,WAAY;AAExB,UADA,EAAM,IAAI,EAAO,EACV,WAAY;AACf,MAAM,QAAQ;;KAEnB,CAAC,KAAU,EAAU,CAAC;;GCZtB,KAAiB,WAAY;CACpC,IAAI,IAAW,IAAoB;AAMnC,QALY,SAAU,GAAI;EACtB,IAAI,IAAS,EAAG,QAAQ,IAAU,EAAG;AAErC,SADA,EAAS,GAAQ,EAAQ,EAClB;;GCZJ,KAAU;CACjB,MAAM;CACN,KAAK;CACL,OAAO;CACP,KAAK;CACR,EACG,KAAQ,SAAU,GAAG;AAAE,QAAO,SAAS,KAAK,IAAI,GAAG,IAAI;GACvD,KAAY,SAAU,GAAS;CAC/B,IAAI,IAAK,OAAO,iBAAiB,SAAS,KAAK,EAC3C,IAAO,EAAG,MAAY,YAAY,gBAAgB,eAClD,IAAM,EAAG,MAAY,YAAY,eAAe,cAChD,IAAQ,EAAG,MAAY,YAAY,iBAAiB;AACxD,QAAO;EAAC,GAAM,EAAK;EAAE,GAAM,EAAI;EAAE,GAAM,EAAM;EAAC;GAEvC,KAAc,SAAU,GAAS;AAExC,KADI,MAAY,KAAK,MAAK,IAAU,WAChC,OAAO,SAAW,IAClB,QAAO;CAEX,IAAI,IAAU,GAAU,EAAQ,EAC5B,IAAgB,SAAS,gBAAgB,aACzC,IAAc,OAAO;AACzB,QAAO;EACH,MAAM,EAAQ;EACd,KAAK,EAAQ;EACb,OAAO,EAAQ;EACf,KAAK,KAAK,IAAI,GAAG,IAAc,IAAgB,EAAQ,KAAK,EAAQ,GAAG;EAC1E;GCvBD,KAAQ,IAAgB,EACjB,KAAgB,sBAIvB,KAAY,SAAU,GAAI,GAAe,GAAS,GAAW;CAC7D,IAAI,IAAO,EAAG,MAAM,IAAM,EAAG,KAAK,IAAQ,EAAG,OAAO,IAAM,EAAG;AAE7D,QADI,MAAY,KAAK,MAAK,IAAU,WAC7B;KAAe;sBAA0D;oBAA2C,OAAmB;;SAAqC;uBAAoD;;MAAgE;EACnS,KAAiB,sBAA6B;EAC9C,MAAY,YACR;oBAA8B;mBAAuC;qBAAwC;;;oBAAgF,OAAmB;;EACpN,MAAY,aAAa,kBAAyB,OAAmB;EACxE,CACI,OAAO,QAAQ,CACf,KAAK,GAAG;;;KAA2B;aAA8C,OAAmB;;;KAAqC;oBAAqD,OAAmB;;;KAAqC,OAAiC;eAAgD;;;KAAqC,OAAiC;sBAAuD;;;SAAyC;MAAmC,OAAqC;;;GAE1jB,KAAuB,WAAY;CACnC,IAAI,IAAU,SAAS,SAAS,KAAK,aAAA,qBAA2B,IAAI,KAAK,GAAG;AAC5E,QAAO,SAAS,EAAQ,GAAG,IAAU;GAE9B,KAAmB,WAAY;AACtC,GAAM,UAAU,WAAY;AAExB,SADA,SAAS,KAAK,aAAa,KAAgB,IAAsB,GAAG,GAAG,UAAU,CAAC,EAC3E,WAAY;GACf,IAAI,IAAa,IAAsB,GAAG;AAC1C,GAAI,KAAc,IACd,SAAS,KAAK,gBAAgB,GAAc,GAG5C,SAAS,KAAK,aAAa,IAAe,EAAW,UAAU,CAAC;;IAGzE,EAAE,CAAC;GAKC,KAAkB,SAAU,GAAI;CACvC,IAAI,IAAa,EAAG,YAAY,IAAc,EAAG,aAAa,IAAK,EAAG,SAAS,IAAU,MAAO,KAAK,IAAI,WAAW;AACpH,KAAkB;CAMlB,IAAI,IAAMC,EAAM,QAAQ,WAAY;AAAE,SAAO,GAAY,EAAQ;IAAK,CAAC,EAAQ,CAAC;AAChF,QAAOA,EAAM,cAAc,IAAO,EAAE,QAAQ,GAAU,GAAK,CAAC,GAAY,GAAU,IAA6B,KAAf,aAAkB,EAAE,CAAC;GCnDrH,KAAmB;AACvB,IAAI,OAAO,SAAW,IAClB,KAAI;CACA,IAAI,KAAU,OAAO,eAAe,EAAE,EAAE,WAAW,EAC/C,KAAK,WAAY;AAEb,SADA,KAAmB,IACZ;IAEd,CAAC;AAIF,CAFA,OAAO,iBAAiB,QAAQ,IAAS,GAAQ,EAEjD,OAAO,oBAAoB,QAAQ,IAAS,GAAQ;QAE5C;AACR,MAAmB;;AAG3B,IAAW,KAAa,KAAmB,EAAE,SAAS,IAAO,GAAG,IClB5D,KAAuB,SAAU,GAAM;AAEvC,QAAO,EAAK,YAAY;GAExB,KAAuB,SAAU,GAAM,GAAU;AACjD,KAAI,EAAE,aAAgB,SAClB,QAAO;CAEX,IAAI,IAAS,OAAO,iBAAiB,EAAK;AAC1C,QAEA,EAAO,OAAc,YAEjB,EAAE,EAAO,cAAc,EAAO,aAAa,CAAC,GAAqB,EAAK,IAAI,EAAO,OAAc;GAEnG,KAA0B,SAAU,GAAM;AAAE,QAAO,GAAqB,GAAM,YAAY;GAC1F,KAA0B,SAAU,GAAM;AAAE,QAAO,GAAqB,GAAM,YAAY;GACnF,KAA0B,SAAU,GAAM,GAAM;CACvD,IAAI,IAAgB,EAAK,eACrB,IAAU;AACd,IAAG;AAMC,MAJI,OAAO,aAAe,OAAe,aAAmB,eACxD,IAAU,EAAQ,OAEH,GAAuB,GAAM,EAAQ,EACtC;GACd,IAAI,IAAK,GAAmB,GAAM,EAAQ;AAC1C,OAD2D,EAAG,KAAmB,EAAG,GAEhF,QAAO;;AAGf,MAAU,EAAQ;UACb,KAAW,MAAY,EAAc;AAC9C,QAAO;GAEP,KAAsB,SAAU,GAAI;AAEpC,QAAO;EADS,EAAG;EAA0B,EAAG;EAA6B,EAAG;EAK/E;GAED,KAAsB,SAAU,GAAI;AAEpC,QAAO;EADU,EAAG;EAA0B,EAAG;EAA2B,EAAG;EAK9E;GAED,KAAyB,SAAU,GAAM,GAAM;AAC/C,QAAO,MAAS,MAAM,GAAwB,EAAK,GAAG,GAAwB,EAAK;GAEnF,KAAqB,SAAU,GAAM,GAAM;AAC3C,QAAO,MAAS,MAAM,GAAoB,EAAK,GAAG,GAAoB,EAAK;GAE3E,KAAqB,SAAU,GAAM,GAAW;AAMhD,QAAO,MAAS,OAAO,MAAc,QAAQ,KAAK;GAE3C,KAAe,SAAU,GAAM,GAAW,GAAO,GAAa,GAAc;CACnF,IAAI,IAAkB,GAAmB,GAAM,OAAO,iBAAiB,EAAU,CAAC,UAAU,EACxF,IAAQ,IAAkB,GAE1B,IAAS,EAAM,QACf,IAAe,EAAU,SAAS,EAAO,EACzC,IAAqB,IACrB,IAAkB,IAAQ,GAC1B,IAAkB,GAClB,IAAqB;AACzB,IAAG;AACC,MAAI,CAAC,EACD;EAEJ,IAAI,IAAK,GAAmB,GAAM,EAAO,EAAE,IAAW,EAAG,IACrD,IADoE,EAAG,KAAe,EAAG,KACnD,IAAkB;AAC5D,GAAI,KAAY,MACR,GAAuB,GAAM,EAAO,KACpC,KAAmB,GACnB,KAAsB;EAG9B,IAAI,IAAW,EAAO;AAGtB,MAAU,KAAY,EAAS,aAAa,KAAK,yBAAyB,EAAS,OAAO;UAG7F,CAAC,KAAgB,MAAW,SAAS,QAEjC,MAAiB,EAAU,SAAS,EAAO,IAAI,MAAc;AAUlE,SARI,MACE,KAAgB,KAAK,IAAI,EAAgB,GAAG,KAAO,CAAC,KAAgB,IAAQ,MAGzE,CAAC,MACJ,KAAgB,KAAK,IAAI,EAAmB,GAAG,KAAO,CAAC,KAAgB,CAAC,IAAQ,QAHlF,IAAqB,KAMlB;GCpGA,KAAa,SAAU,GAAO;AACrC,QAAO,oBAAoB,IAAQ,CAAC,EAAM,eAAe,GAAG,SAAS,EAAM,eAAe,GAAG,QAAQ,GAAG,CAAC,GAAG,EAAE;GAEvG,KAAa,SAAU,GAAO;AAAE,QAAO,CAAC,EAAM,QAAQ,EAAM,OAAO;GAC1E,KAAa,SAAU,GAAK;AAC5B,QAAO,KAAO,aAAa,IAAM,EAAI,UAAU;GAE/C,KAAe,SAAU,GAAG,GAAG;AAAE,QAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;GACpE,KAAgB,SAAU,GAAI;AAAE,QAAO;yBAAmC;yBAAgE;;GAC1I,KAAY,GACZ,KAAY,EAAE;AAClB,SAAgB,GAAoB,GAAO;CACvC,IAAI,IAAqBC,EAAM,OAAO,EAAE,CAAC,EACrC,IAAgBA,EAAM,OAAO,CAAC,GAAG,EAAE,CAAC,EACpC,IAAaA,EAAM,QAAQ,EAC3B,IAAKA,EAAM,SAAS,KAAY,CAAC,IACjC,IAAQA,EAAM,SAAS,GAAe,CAAC,IACvC,IAAYA,EAAM,OAAO,EAAM;AAInC,CAHA,EAAM,UAAU,WAAY;AACxB,IAAU,UAAU;IACrB,CAAC,EAAM,CAAC,EACX,EAAM,UAAU,WAAY;AACxB,MAAI,EAAM,OAAO;AACb,YAAS,KAAK,UAAU,IAAI,uBAA8B,IAAI;GAC9D,IAAI,IAAU,GAAc,CAAC,EAAM,QAAQ,QAAQ,GAAG,EAAM,UAAU,EAAE,EAAE,IAAI,GAAW,EAAE,GAAK,CAAC,OAAO,QAAQ;AAEhH,UADA,EAAQ,QAAQ,SAAU,GAAI;AAAE,WAAO,EAAG,UAAU,IAAI,uBAA8B,IAAI;KAAI,EACvF,WAAY;AAEf,IADA,SAAS,KAAK,UAAU,OAAO,uBAA8B,IAAI,EACjE,EAAQ,QAAQ,SAAU,GAAI;AAAE,YAAO,EAAG,UAAU,OAAO,uBAA8B,IAAI;MAAI;;;IAI1G;EAAC,EAAM;EAAO,EAAM,QAAQ;EAAS,EAAM;EAAO,CAAC;CACtD,IAAI,IAAoBA,EAAM,YAAY,SAAU,GAAO,GAAQ;AAC/D,MAAK,aAAa,KAAS,EAAM,QAAQ,WAAW,KAAO,EAAM,SAAS,WAAW,EAAM,QACvF,QAAO,CAAC,EAAU,QAAQ;EAE9B,IAAI,IAAQ,GAAW,EAAM,EACzB,IAAa,EAAc,SAC3B,IAAS,YAAY,IAAQ,EAAM,SAAS,EAAW,KAAK,EAAM,IAClE,IAAS,YAAY,IAAQ,EAAM,SAAS,EAAW,KAAK,EAAM,IAClE,GACA,IAAS,EAAM,QACf,IAAgB,KAAK,IAAI,EAAO,GAAG,KAAK,IAAI,EAAO,GAAG,MAAM;AAEhE,MAAI,aAAa,KAAS,MAAkB,OAAO,EAAO,SAAS,QAC/D,QAAO;EAGX,IAAI,IAAY,OAAO,cAAc,EACjC,IAAa,KAAa,EAAU;AAExC,MAD0B,MAAa,MAAe,KAAU,EAAW,SAAS,EAAO,EAEvF,QAAO;EAEX,IAAI,IAA+B,GAAwB,GAAe,EAAO;AACjF,MAAI,CAAC,EACD,QAAO;AAUX,MARI,IACA,IAAc,KAGd,IAAc,MAAkB,MAAM,MAAM,KAC5C,IAA+B,GAAwB,GAAe,EAAO,GAG7E,CAAC,EACD,QAAO;AAKX,MAHI,CAAC,EAAW,WAAW,oBAAoB,MAAU,KAAU,OAC/D,EAAW,UAAU,IAErB,CAAC,EACD,QAAO;EAEX,IAAI,IAAgB,EAAW,WAAW;AAC1C,SAAO,GAAa,GAAe,GAAQ,GAAO,MAAkB,MAAM,IAAS,GAAQ,GAAK;IACjG,EAAE,CAAC,EACF,IAAgBA,EAAM,YAAY,SAAU,GAAQ;EACpD,IAAI,IAAQ;AACR,SAAC,GAAU,UAAU,GAAU,GAAU,SAAS,OAAO,IAI7D;OAAI,IAAQ,YAAY,IAAQ,GAAW,EAAM,GAAG,GAAW,EAAM,EACjE,IAAc,EAAmB,QAAQ,OAAO,SAAU,GAAG;AAAE,WAAO,EAAE,SAAS,EAAM,SAAS,EAAE,WAAW,EAAM,UAAU,EAAM,WAAW,EAAE,iBAAiB,GAAa,EAAE,OAAO,EAAM;KAAI,CAAC;AAEtM,OAAI,KAAe,EAAY,QAAQ;AACnC,IAAI,EAAM,cACN,EAAM,gBAAgB;AAE1B;;AAGJ,OAAI,CAAC,GAAa;IACd,IAAI,KAAc,EAAU,QAAQ,UAAU,EAAE,EAC3C,IAAI,GAAW,CACf,OAAO,QAAQ,CACf,OAAO,SAAU,GAAM;AAAE,YAAO,EAAK,SAAS,EAAM,OAAO;MAAI;AAEpE,KADiB,EAAW,SAAS,IAAI,EAAkB,GAAO,EAAW,GAAG,GAAG,CAAC,EAAU,QAAQ,gBAE9F,EAAM,cACN,EAAM,gBAAgB;;;IAInC,EAAE,CAAC,EACF,IAAeA,EAAM,YAAY,SAAU,GAAM,GAAO,GAAQ,GAAQ;EACxE,IAAI,IAAQ;GAAQ;GAAa;GAAe;GAAgB;GAAQ,cAAc,GAAyB,EAAO;GAAE;AAExH,EADA,EAAmB,QAAQ,KAAK,EAAM,EACtC,WAAW,WAAY;AACnB,KAAmB,UAAU,EAAmB,QAAQ,OAAO,SAAU,GAAG;AAAE,WAAO,MAAM;KAAS;KACrG,EAAE;IACN,EAAE,CAAC,EACF,IAAmBA,EAAM,YAAY,SAAU,GAAO;AAEtD,EADA,EAAc,UAAU,GAAW,EAAM,EACzC,EAAW,UAAU,KAAA;IACtB,EAAE,CAAC,EACF,IAAcA,EAAM,YAAY,SAAU,GAAO;AACjD,IAAa,EAAM,MAAM,GAAW,EAAM,EAAE,EAAM,QAAQ,EAAkB,GAAO,EAAM,QAAQ,QAAQ,CAAC;IAC3G,EAAE,CAAC,EACF,IAAkBA,EAAM,YAAY,SAAU,GAAO;AACrD,IAAa,EAAM,MAAM,GAAW,EAAM,EAAE,EAAM,QAAQ,EAAkB,GAAO,EAAM,QAAQ,QAAQ,CAAC;IAC3G,EAAE,CAAC;AACN,GAAM,UAAU,WAAY;AAUxB,SATA,GAAU,KAAK,EAAM,EACrB,EAAM,aAAa;GACf,iBAAiB;GACjB,gBAAgB;GAChB,oBAAoB;GACvB,CAAC,EACF,SAAS,iBAAiB,SAAS,GAAe,GAAW,EAC7D,SAAS,iBAAiB,aAAa,GAAe,GAAW,EACjE,SAAS,iBAAiB,cAAc,GAAkB,GAAW,EAC9D,WAAY;AAIf,GAHA,KAAY,GAAU,OAAO,SAAU,GAAM;AAAE,WAAO,MAAS;KAAS,EACxE,SAAS,oBAAoB,SAAS,GAAe,GAAW,EAChE,SAAS,oBAAoB,aAAa,GAAe,GAAW,EACpE,SAAS,oBAAoB,cAAc,GAAkB,GAAW;;IAE7E,EAAE,CAAC;CACN,IAAI,IAAkB,EAAM,iBAAiB,IAAQ,EAAM;AAC3D,QAAQA,EAAM,cAAcA,EAAM,UAAU,MACxC,IAAQA,EAAM,cAAc,GAAO,EAAE,QAAQ,GAAc,EAAG,EAAE,CAAC,GAAG,MACpE,IAAkBA,EAAM,cAAc,IAAiB;EAAE,YAAY,EAAM;EAAY,SAAS,EAAM;EAAS,CAAC,GAAG,KAAK;;AAEhI,SAAS,GAAyB,GAAM;AAEpC,MADA,IAAI,IAAe,MACZ,MAAS,MAKZ,CAJI,aAAgB,eAChB,IAAe,EAAK,MACpB,IAAO,EAAK,OAEhB,IAAO,EAAK;AAEhB,QAAO;;;;AC/JX,IAAA,KAAe,GAAc,IAAW,GAAoB,ECCxD,KAAoBC,EAAM,WAAW,SAAU,GAAO,GAAK;AAAE,QAAQA,EAAM,cAAc,IAAc,GAAS,EAAE,EAAE,GAAO;EAAO;EAAK,SAASC;EAAS,CAAC,CAAC;EAAK;AACpK,GAAkB,aAAa,GAAa;;;ACgB5C,IAAI,KAAe,WACf,CAAC,IAAsB,MAAsB,GAAmB,IAAc,CAChF,GACD,CAAC,EACEC,KAAiB,IAAmB,EACpC,CAAC,IAAiB,MAAqB,GAAqB,GAAa,EACzEC,MAAW,MAAU;CACvB,IAAM,EACJ,mBACA,aACA,MAAM,GACN,gBACA,iBACA,WAAQ,OACN,GACE,IAAcD,GAAe,EAAe,EAC5C,IAAaE,EAAM,OAAO,KAAK,EAC/B,CAAC,GAAiB,KAAsBA,EAAM,SAAS,GAAM,EAC7D,CAAC,GAAM,KAAW,GAAqB;EAC3C,MAAM;EACN,aAAa,KAAe;EAC5B,UAAU;EACV,QAAQ;EACT,CAAC;AACF,QAAuB,kBAAIC,IAAsB;EAAE,GAAG;EAAa,UAA0B,kBAC3F,IACA;GACE,OAAO;GACP,WAAW,IAAO;GAClB;GACA;GACA,cAAc;GACd,cAAcD,EAAM,kBAAkB,GAAS,MAAa,CAAC,EAAS,EAAE,CAAC,EAAQ,CAAC;GAClF;GACA,mBAAmBA,EAAM,kBAAkB,EAAmB,GAAK,EAAE,EAAE,CAAC;GACxE,sBAAsBA,EAAM,kBAAkB,EAAmB,GAAM,EAAE,EAAE,CAAC;GAC5E;GACA;GACD,CACF;EAAE,CAAC;;AAEN,GAAQ,cAAc;AACtB,IAAIE,KAAc,iBACdC,KAAgBH,EAAM,YACvB,GAAO,MAAiB;CACvB,IAAM,EAAE,mBAAgB,GAAG,MAAgB,GACrC,IAAU,GAAkBE,IAAa,EAAe,EACxD,IAAcJ,GAAe,EAAe,EAC5C,EAAE,sBAAmB,4BAAyB;AAKpD,QAJA,EAAM,iBACJ,GAAmB,QACN,GAAsB,GAClC,CAAC,GAAmB,EAAqB,CAAC,EACtB,kBAAIM,IAAwB;EAAE,GAAG;EAAa,GAAG;EAAa,KAAK;EAAc,CAAC;EAE5G;AACD,GAAc,cAAcF;AAC5B,IAAIG,KAAe,kBACfC,KAAiBN,EAAM,YACxB,GAAO,MAAiB;CACvB,IAAM,EAAE,mBAAgB,GAAG,MAAiB,GACtC,IAAU,GAAkBK,IAAc,EAAe,EACzD,IAAcP,GAAe,EAAe,EAC5C,IAAqB,EAAgB,GAAc,EAAQ,WAAW,EACtE,IAA0B,kBAC9B,EAAU,QACV;EACE,MAAM;EACN,iBAAiB;EACjB,iBAAiB,EAAQ;EACzB,iBAAiB,EAAQ;EACzB,cAAcS,GAAS,EAAQ,KAAK;EACpC,GAAG;EACH,KAAK;EACL,SAAS,EAAqB,EAAM,SAAS,EAAQ,aAAa;EACnE,CACF;AACD,QAAO,EAAQ,kBAAkB,IAA0B,kBAAIH,IAAwB;EAAE,SAAS;EAAM,GAAG;EAAa,UAAU;EAAS,CAAC;EAE/I;AACD,GAAe,cAAcC;AAC7B,IAAIG,KAAc,iBACd,CAACC,IAAgBC,MAAoB,GAAqBF,IAAa,EACzE,YAAY,KAAK,GAClB,CAAC,EACE,MAAiB,MAAU;CAC7B,IAAM,EAAE,mBAAgB,eAAY,aAAU,iBAAc,GACtD,IAAU,GAAkBA,IAAa,EAAe;AAC9D,QAAuB,kBAAIC,IAAgB;EAAE,OAAO;EAAgB;EAAY,UAA0B,kBAAI,GAAU;GAAE,SAAS,KAAc,EAAQ;GAAM,UAA0B,kBAAIE,IAAiB;IAAE,SAAS;IAAM;IAAW;IAAU,CAAC;GAAE,CAAC;EAAE,CAAC;;AAE7P,GAAc,cAAcH;AAC5B,IAAII,KAAe,kBACfC,KAAiBb,EAAM,YACxB,GAAO,MAAiB;CACvB,IAAM,IAAgBU,GAAiBE,IAAc,EAAM,eAAe,EACpE,EAAE,gBAAa,EAAc,YAAY,GAAG,MAAiB,GAC7D,IAAU,GAAkBA,IAAc,EAAM,eAAe;AACrE,QAAuB,kBAAI,GAAU;EAAE,SAAS,KAAc,EAAQ;EAAM,UAAU,EAAQ,QAAwB,kBAAI,IAAqB;GAAE,GAAG;GAAc,KAAK;GAAc,CAAC,GAAmB,kBAAI,IAAwB;GAAE,GAAG;GAAc,KAAK;GAAc,CAAC;EAAE,CAAC;EAElR;AACD,GAAe,cAAcA;AAC7B,IAAIE,KAAO,mBAAW,8BAA8B,EAChD,KAAsBd,EAAM,YAC7B,GAAO,MAAiB;CACvB,IAAM,IAAU,GAAkBY,IAAc,EAAM,eAAe,EAC/D,IAAaZ,EAAM,OAAO,KAAK,EAC/B,IAAe,EAAgB,GAAc,EAAW,EACxD,IAAyBA,EAAM,OAAO,GAAM;AAKlD,QAJA,EAAM,gBAAgB;EACpB,IAAM,IAAU,EAAW;AAC3B,MAAI,EAAS,QAAO,GAAW,EAAQ;IACtC,EAAE,CAAC,EACiB,kBAAIe,IAAc;EAAE,IAAID;EAAM,gBAAgB;EAAM,UAA0B,kBACnG,IACA;GACE,GAAG;GACH,KAAK;GACL,WAAW,EAAQ;GACnB,6BAA6B;GAC7B,kBAAkB,EAAqB,EAAM,mBAAmB,MAAU;AAExE,IADA,EAAM,gBAAgB,EACjB,EAAuB,WAAS,EAAQ,WAAW,SAAS,OAAO;KACxE;GACF,sBAAsB,EACpB,EAAM,uBACL,MAAU;IACT,IAAM,IAAgB,EAAM,OAAO,eAC7B,IAAgB,EAAc,WAAW,KAAK,EAAc,YAAY;AAE9E,MAAuB,UADF,EAAc,WAAW,KAAK;MAGrD,EAAE,0BAA0B,IAAO,CACpC;GACD,gBAAgB,EACd,EAAM,iBACL,MAAU,EAAM,gBAAgB,EACjC,EAAE,0BAA0B,IAAO,CACpC;GACF,CACF;EAAE,CAAC;EAEP,EACG,KAAyBd,EAAM,YAChC,GAAO,MAAiB;CACvB,IAAM,IAAU,GAAkBY,IAAc,EAAM,eAAe,EAC/D,IAA0BZ,EAAM,OAAO,GAAM,EAC7C,IAA2BA,EAAM,OAAO,GAAM;AACpD,QAAuB,kBACrB,IACA;EACE,GAAG;EACH,KAAK;EACL,WAAW;EACX,6BAA6B;EAC7B,mBAAmB,MAAU;AAO3B,GANA,EAAM,mBAAmB,EAAM,EAC1B,EAAM,qBACJ,EAAwB,WAAS,EAAQ,WAAW,SAAS,OAAO,EACzE,EAAM,gBAAgB,GAExB,EAAwB,UAAU,IAClC,EAAyB,UAAU;;EAErC,oBAAoB,MAAU;AAE5B,GADA,EAAM,oBAAoB,EAAM,EAC3B,EAAM,qBACT,EAAwB,UAAU,IAC9B,EAAM,OAAO,cAAc,SAAS,kBACtC,EAAyB,UAAU;GAGvC,IAAM,IAAS,EAAM;AAGrB,GAFwB,EAAQ,WAAW,SAAS,SAAS,EAAO,IAC/C,EAAM,gBAAgB,EACvC,EAAM,OAAO,cAAc,SAAS,aAAa,EAAyB,WAC5E,EAAM,gBAAgB;;EAG3B,CACF;EAEJ,EACG,KAAqBA,EAAM,YAC5B,GAAO,MAAiB;CACvB,IAAM,EACJ,mBACA,cACA,oBACA,qBACA,gCACA,oBACA,yBACA,mBACA,sBACA,GAAG,MACD,GACE,IAAU,GAAkBY,IAAc,EAAe,EACzD,IAAcd,GAAe,EAAe;AAElD,QADA,IAAgB,EACO,kBACrB,IACA;EACE,SAAS;EACT,MAAM;EACN,SAAS;EACT,kBAAkB;EAClB,oBAAoB;EACpB,UAA0B,kBACxB,IACA;GACE,SAAS;GACT;GACA;GACA;GACA;GACA;GACA,iBAAiB,EAAQ,aAAa,GAAM;GAC5C,UAA0B,kBACxBkB,IACA;IACE,cAAcT,GAAS,EAAQ,KAAK;IACpC,MAAM;IACN,IAAI,EAAQ;IACZ,GAAG;IACH,GAAG;IACH,KAAK;IACL,OAAO;KACL,GAAG,EAAa;KAGd,4CAA4C;KAC5C,2CAA2C;KAC3C,4CAA4C;KAC5C,iCAAiC;KACjC,kCAAkC;KAErC;IACF,CACF;GACF,CACF;EACF,CACF;EAEJ,EACGU,KAAa,gBACb,KAAejB,EAAM,YACtB,GAAO,MAAiB;CACvB,IAAM,EAAE,mBAAgB,GAAG,MAAe,GACpC,IAAU,GAAkBiB,IAAY,EAAe;AAC7D,QAAuB,kBACrB,EAAU,QACV;EACE,MAAM;EACN,GAAG;EACH,KAAK;EACL,SAAS,EAAqB,EAAM,eAAe,EAAQ,aAAa,GAAM,CAAC;EAChF,CACF;EAEJ;AACD,GAAa,cAAcA;AAC3B,IAAIC,KAAa,gBACb,KAAelB,EAAM,YACtB,GAAO,MAAiB;CACvB,IAAM,EAAE,mBAAgB,GAAG,MAAe;AAE1C,QAAuB,kBAAImB,IAAuB;EAAE,GADhCrB,GAAe,EAAe;EACkB,GAAG;EAAY,KAAK;EAAc,CAAC;EAE1G;AACD,GAAa,cAAcoB;AAC3B,SAASX,GAAS,GAAM;AACtB,QAAO,IAAO,SAAS;;AAEzB,IAAIa,KAAQrB,IACRsB,KAAUlB,IACVmB,KAAUhB,IACViB,KAAS,IACTC,KAAWX,ICrST,KAAU,IAEV,KAAiB,IAEjB,KAAgB,IAEhB,KAAiB,EAAM,YAG1B,EAAE,cAAW,WAAQ,UAAU,gBAAa,GAAG,GAAG,KAAS,MAG5D,kBAAC,IAAD;CAAyB,WAFP,GAAoB,IAEW,KAAA;WAC/C,kBAAC,IAAD;EACO;EACE;EACK;EACZ,WAAW,EACT,gbACA,EACD;EACD,GAAI;EACJ,CAAA;CACsB,CAAA,CAE1B;AACF,GAAe,cAAA,GAAuC;;;ACbtD,IAAI,KAAc,UACd,CAAC,IAAqB,MAAqB,GAAmB,GAAY,EAC1E,CAAC,IAAgB,MAAoB,GAAoB,GAAY,EACrEY,MAAU,MAAU;CACtB,IAAM,EACJ,kBACA,aACA,MAAM,GACN,gBACA,iBACA,WAAQ,OACN,GACE,IAAaC,EAAM,OAAO,KAAK,EAC/B,IAAaA,EAAM,OAAO,KAAK,EAC/B,CAAC,GAAM,KAAW,GAAqB;EAC3C,MAAM;EACN,aAAa,KAAe;EAC5B,UAAU;EACV,QAAQ;EACT,CAAC;AACF,QAAuB,kBACrB,IACA;EACE,OAAO;EACP;EACA;EACA,WAAW,IAAO;EAClB,SAAS,IAAO;EAChB,eAAe,IAAO;EACtB;EACA,cAAc;EACd,cAAcA,EAAM,kBAAkB,GAAS,MAAa,CAAC,EAAS,EAAE,CAAC,EAAQ,CAAC;EAClF;EACA;EACD,CACF;;AAEH,GAAO,cAAc;AACrB,IAAIC,KAAe,iBACfC,KAAgBF,EAAM,YACvB,GAAO,MAAiB;CACvB,IAAM,EAAE,kBAAe,GAAG,MAAiB,GACrC,IAAU,GAAiBC,IAAc,EAAc,EACvD,IAAqB,EAAgB,GAAc,EAAQ,WAAW;AAC5E,QAAuB,kBACrB,EAAU,QACV;EACE,MAAM;EACN,iBAAiB;EACjB,iBAAiB,EAAQ;EACzB,iBAAiB,EAAQ;EACzB,cAAc,GAAS,EAAQ,KAAK;EACpC,GAAG;EACH,KAAK;EACL,SAAS,EAAqB,EAAM,SAAS,EAAQ,aAAa;EACnE,CACF;EAEJ;AACD,GAAc,cAAcA;AAC5B,IAAIE,KAAc,gBACd,CAACC,IAAgBC,MAAoB,GAAoBF,IAAa,EACxE,YAAY,KAAK,GAClB,CAAC,EACEG,MAAgB,MAAU;CAC5B,IAAM,EAAE,kBAAe,eAAY,aAAU,iBAAc,GACrD,IAAU,GAAiBH,IAAa,EAAc;AAC5D,QAAuB,kBAAIC,IAAgB;EAAE,OAAO;EAAe;EAAY,UAAUJ,EAAM,SAAS,IAAI,IAAW,MAA0B,kBAAI,GAAU;GAAE,SAAS,KAAc,EAAQ;GAAM,UAA0B,kBAAIO,IAAiB;IAAE,SAAS;IAAM;IAAW,UAAU;IAAO,CAAC;GAAE,CAAC,CAAC;EAAE,CAAC;;AAE5S,GAAa,cAAcJ;AAC3B,IAAIK,KAAe,iBACfC,KAAgBT,EAAM,YACvB,GAAO,MAAiB;CACvB,IAAM,IAAgBK,GAAiBG,IAAc,EAAM,cAAc,EACnE,EAAE,gBAAa,EAAc,YAAY,GAAG,MAAiB,GAC7D,IAAU,GAAiBA,IAAc,EAAM,cAAc;AACnE,QAAO,EAAQ,QAAwB,kBAAI,GAAU;EAAE,SAAS,KAAc,EAAQ;EAAM,UAA0B,kBAAI,IAAmB;GAAE,GAAG;GAAc,KAAK;GAAc,CAAC;EAAE,CAAC,GAAG;EAE7L;AACD,GAAc,cAAcA;AAC5B,IAAIE,KAAO,mBAAW,6BAA6B,EAC/C,KAAoBV,EAAM,YAC3B,GAAO,MAAiB;CACvB,IAAM,EAAE,kBAAe,GAAG,MAAiB,GACrC,IAAU,GAAiBQ,IAAc,EAAc;AAC7D,QAGkB,kBAAIG,IAAc;EAAE,IAAID;EAAM,gBAAgB;EAAM,QAAQ,CAAC,EAAQ,WAAW;EAAE,UAA0B,kBAC1H,EAAU,KACV;GACE,cAAc,GAAS,EAAQ,KAAK;GACpC,GAAG;GACH,KAAK;GACL,OAAO;IAAE,eAAe;IAAQ,GAAG,EAAa;IAAO;GACxD,CACF;EAAE,CAAC;EAGT,EACGE,KAAe,iBACfC,KAAgBb,EAAM,YACvB,GAAO,MAAiB;CACvB,IAAM,IAAgBK,GAAiBO,IAAc,EAAM,cAAc,EACnE,EAAE,gBAAa,EAAc,YAAY,GAAG,MAAiB,GAC7D,IAAU,GAAiBA,IAAc,EAAM,cAAc;AACnE,QAAuB,kBAAI,GAAU;EAAE,SAAS,KAAc,EAAQ;EAAM,UAAU,EAAQ,QAAwB,kBAAI,IAAoB;GAAE,GAAG;GAAc,KAAK;GAAc,CAAC,GAAmB,kBAAI,IAAuB;GAAE,GAAG;GAAc,KAAK;GAAc,CAAC;EAAE,CAAC;EAEhR;AACD,GAAc,cAAcA;AAC5B,IAAI,KAAqBZ,EAAM,YAC5B,GAAO,MAAiB;CACvB,IAAM,IAAU,GAAiBY,IAAc,EAAM,cAAc,EAC7D,IAAaZ,EAAM,OAAO,KAAK,EAC/B,IAAe,EAAgB,GAAc,EAAQ,YAAY,EAAW;AAKlF,QAJA,EAAM,gBAAgB;EACpB,IAAM,IAAU,EAAW;AAC3B,MAAI,EAAS,QAAO,GAAW,EAAQ;IACtC,EAAE,CAAC,EACiB,kBACrB,IACA;EACE,GAAG;EACH,KAAK;EACL,WAAW,EAAQ;EACnB,6BAA6B;EAC7B,kBAAkB,EAAqB,EAAM,mBAAmB,MAAU;AAExE,GADA,EAAM,gBAAgB,EACtB,EAAQ,WAAW,SAAS,OAAO;IACnC;EACF,sBAAsB,EAAqB,EAAM,uBAAuB,MAAU;GAChF,IAAM,IAAgB,EAAM,OAAO,eAC7B,IAAgB,EAAc,WAAW,KAAK,EAAc,YAAY;AAE9E,IADqB,EAAc,WAAW,KAAK,MACjC,EAAM,gBAAgB;IACxC;EACF,gBAAgB,EACd,EAAM,iBACL,MAAU,EAAM,gBAAgB,CAClC;EACF,CACF;EAEJ,EACG,KAAwBA,EAAM,YAC/B,GAAO,MAAiB;CACvB,IAAM,IAAU,GAAiBY,IAAc,EAAM,cAAc,EAC7D,IAA0BZ,EAAM,OAAO,GAAM,EAC7C,IAA2BA,EAAM,OAAO,GAAM;AACpD,QAAuB,kBACrB,IACA;EACE,GAAG;EACH,KAAK;EACL,WAAW;EACX,6BAA6B;EAC7B,mBAAmB,MAAU;AAO3B,GANA,EAAM,mBAAmB,EAAM,EAC1B,EAAM,qBACJ,EAAwB,WAAS,EAAQ,WAAW,SAAS,OAAO,EACzE,EAAM,gBAAgB,GAExB,EAAwB,UAAU,IAClC,EAAyB,UAAU;;EAErC,oBAAoB,MAAU;AAE5B,GADA,EAAM,oBAAoB,EAAM,EAC3B,EAAM,qBACT,EAAwB,UAAU,IAC9B,EAAM,OAAO,cAAc,SAAS,kBACtC,EAAyB,UAAU;GAGvC,IAAM,IAAS,EAAM;AAGrB,GAFwB,EAAQ,WAAW,SAAS,SAAS,EAAO,IAC/C,EAAM,gBAAgB,EACvC,EAAM,OAAO,cAAc,SAAS,aAAa,EAAyB,WAC5E,EAAM,gBAAgB;;EAG3B,CACF;EAEJ,EACG,KAAoBA,EAAM,YAC3B,GAAO,MAAiB;CACvB,IAAM,EAAE,kBAAe,cAAW,oBAAiB,qBAAkB,GAAG,MAAiB,GACnF,IAAU,GAAiBY,IAAc,EAAc,EACvD,IAAaZ,EAAM,OAAO,KAAK,EAC/B,IAAe,EAAgB,GAAc,EAAW;AAE9D,QADA,IAAgB,EACO,kBAAK,GAAU,EAAE,UAAU,CAChC,kBACd,IACA;EACE,SAAS;EACT,MAAM;EACN,SAAS;EACT,kBAAkB;EAClB,oBAAoB;EACpB,UAA0B,kBACxB,IACA;GACE,MAAM;GACN,IAAI,EAAQ;GACZ,oBAAoB,EAAQ;GAC5B,mBAAmB,EAAQ;GAC3B,cAAc,GAAS,EAAQ,KAAK;GACpC,GAAG;GACH,KAAK;GACL,iBAAiB,EAAQ,aAAa,GAAM;GAC7C,CACF;EACF,CACF,EACe,kBAAK,GAAU,EAAE,UAAU,CACzB,kBAAI,IAAc,EAAE,SAAS,EAAQ,SAAS,CAAC,EAC/C,kBAAIc,IAAoB;EAAE;EAAY,eAAe,EAAQ;EAAe,CAAC,CAC9F,EAAE,CAAC,CACL,EAAE,CAAC;EAEP,EACGC,KAAa,eACbC,KAAchB,EAAM,YACrB,GAAO,MAAiB;CACvB,IAAM,EAAE,kBAAe,GAAG,MAAe,GACnC,IAAU,GAAiBe,IAAY,EAAc;AAC3D,QAAuB,kBAAI,EAAU,IAAI;EAAE,IAAI,EAAQ;EAAS,GAAG;EAAY,KAAK;EAAc,CAAC;EAEtG;AACD,GAAY,cAAcA;AAC1B,IAAIE,KAAmB,qBACnBC,KAAoBlB,EAAM,YAC3B,GAAO,MAAiB;CACvB,IAAM,EAAE,kBAAe,GAAG,MAAqB,GACzC,IAAU,GAAiBiB,IAAkB,EAAc;AACjE,QAAuB,kBAAI,EAAU,GAAG;EAAE,IAAI,EAAQ;EAAe,GAAG;EAAkB,KAAK;EAAc,CAAC;EAEjH;AACD,GAAkB,cAAcA;AAChC,IAAI,KAAa,eACbE,KAAcnB,EAAM,YACrB,GAAO,MAAiB;CACvB,IAAM,EAAE,kBAAe,GAAG,MAAe,GACnC,IAAU,GAAiB,IAAY,EAAc;AAC3D,QAAuB,kBACrB,EAAU,QACV;EACE,MAAM;EACN,GAAG;EACH,KAAK;EACL,SAAS,EAAqB,EAAM,eAAe,EAAQ,aAAa,GAAM,CAAC;EAChF,CACF;EAEJ;AACD,GAAY,cAAc;AAC1B,SAAS,GAAS,GAAM;AACtB,QAAO,IAAO,SAAS;;AAEzB,IAAI,KAAqB,sBACrB,CAAC,IAAiB,MAAqBoB,GAAc,IAAoB;CAC3E,aAAaR;CACb,WAAWG;CACX,UAAU;CACX,CAAC,EACE,MAAgB,EAAE,iBAAc;CAClC,IAAM,IAAsB,GAAkB,GAAmB,EAC3D,IAAU,KAAK,EAAoB,YAAY,kBAAkB,EAAoB,UAAU;;4BAE3E,EAAoB,UAAU;;4EAEkB,EAAoB;AAO9F,QANA,EAAM,gBAAgB;AACpB,EAAI,MACe,SAAS,eAAe,EAAQ,IAClC,QAAQ,MAAM,EAAQ;IAEtC,CAAC,GAAS,EAAQ,CAAC,EACf;GAEL,KAA2B,4BAC3BD,MAAsB,EAAE,eAAY,uBAAoB;CAE1D,IAAM,IAAU,6EADkB,GAAkB,GAAyB,CAC0C,YAAY;AAQnI,QAPA,EAAM,gBAAgB;EACpB,IAAM,IAAgB,EAAW,SAAS,aAAa,mBAAmB;AAC1E,EAAI,KAAiB,MACI,SAAS,eAAe,EAAc,IACxC,QAAQ,KAAK,EAAQ;IAE3C;EAAC;EAAS;EAAY;EAAc,CAAC,EACjC;GAEL,KAAOf,IACPsB,KAAUnB,IACVoB,KAAShB,IACT,KAAUG,IACV,KAAUI,IACV,KAAQG,IACR,KAAcE,IACd,KAAQC,IChQN,KAAS,IAET,KAAgB;AAEtB,SAAS,GAAa,EACpB,cACA,GAAG,KACmD;CACtD,IAAM,IAAkB,GAAoB,EACtC,IAAe,GAAiB,EAChC,CAAC,GAAY,KAAiB,EAAM,SAAgC,KAAK;AAY/E,QAVA,EAAM,sBAAsB;AAC1B,MAAI,KAAa,EAAiB;EAClC,IAAM,IAAM,SAAS,cAAc,MAAM;AAKzC,SAJA,EAAI,KAAK,6BACL,MAAc,EAAI,YAAY,IAClC,SAAS,KAAK,YAAY,EAAI,EAC9B,EAAc,EAAI,QACL,EAAI,QAAQ;IACxB;EAAC;EAAW;EAAiB;EAAa,CAAC,EAG5C,kBAAC,IAAD;EACE,WAAW,KAAa,KAAmB,KAAc,KAAA;EACzD,GAAI;EACJ,CAAA;;AAIN,IAAM,KAAc,IAEd,KAAgB,EAAM,YAGzB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EACT,wDACA,gEACA,8DACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAc,cAAA,GAAsC;AAEpD,IAAM,KAAgB,EAAM,YAGzB,EAAE,cAAW,aAAU,GAAG,KAAS,MACpC,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD,EAAiB,CAAA,EACjB,kBAAC,IAAD;CACO;CACL,WAAW,EAET,yFAIA,4BAMA,iCAIA,uCA2BA,0CACA,2CACA,mDACA,wCACA,wCAEA,gBACA,gEACA,8DACA,gEACA,EACD;CACD,GAAI;WAzDN,CA2DG,GACD,kBAAC,IAAD;EAKE,aAAU;EACV,WAAW,EAMT,kFACA,iFACA,mDACA,gCACA,uEACD;YAjBH,CAmBE,kBAAC,IAAD,EAAG,WAAU,UAAW,CAAA,EACxB,kBAAC,QAAD;GAAM,WAAU;aAAU;GAAY,CAAA,CAChB;IACA;GACb,EAAA,CAAA,CACf;AACF,GAAc,cAAA,GAAsC;AAEpD,SAAS,GAAa,EACpB,cACA,GAAG,KACoC;AACvC,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAOT,YAOA,0DAGA,SACA,aACA,EACD;EACD,GAAI;EACJ,CAAA;;AAGN,GAAa,cAAc;AAa3B,SAAS,GAAW,EAClB,cACA,GAAG,KACoC;AACvC,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAMT,kCAKA,aACA,EACD;EACD,GAAI;EACJ,CAAA;;AAGN,GAAW,cAAc;AAEzB,SAAS,GAAa,EACpB,cACA,GAAG,KACoC;AACvC,QACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAGT,YAKA,gEACA,8BACA,EACD;EACD,GAAI;EACJ,CAAA;;AAGN,GAAa,cAAc;AAE3B,IAAM,KAAc,EAAM,YAGvB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CAIL,WAAW,EACT,uEACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAY,cAAA,GAAoC;AAEhD,IAAM,KAAoB,EAAM,YAG7B,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CAKL,WAAW,EAAG,sCAAsC,EAAU;CAC9D,GAAI;CACJ,CAAA,CACF;AACF,GAAkB,cAAA,GAA0C;;;ACrU5D,IAAM,KAAQ,IAER,KAAe,IAEf,KAAa;AAEnB,SAAS,GAAY,EACnB,cACA,GAAG,KACkD;CACrD,IAAM,IAAkB,GAAoB,EACtC,IAAe,GAAiB,EAChC,CAAC,GAAY,KAAiB,EAAM,SAAgC,KAAK;AAY/E,QAVA,EAAM,sBAAsB;AAC1B,MAAI,KAAa,EAAiB;EAClC,IAAM,IAAM,SAAS,cAAc,MAAM;AAKzC,SAJA,EAAI,KAAK,4BACL,MAAc,EAAI,YAAY,IAClC,SAAS,gBAAgB,YAAY,EAAI,EACzC,EAAc,EAAI,QACL,EAAI,QAAQ;IACxB;EAAC;EAAW;EAAiB;EAAa,CAAC,EAG5C,kBAAC,IAAD;EACE,WAAW,KAAa,KAAmB,KAAc,KAAA;EACzD,GAAI;EACJ,CAAA;;AAIN,IAAM,KAAe,EAAM,YAGxB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EACT,0JACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAa,cAAA,GAAqC;AAElD,IAAM,KAAgB,EACpB,gMACA;CACE,UAAU,EACR,MAAM;EACJ,KAAK;EACL,QACE;EACF,MAAM;EACN,OACE;EACH,EACF;CACD,iBAAiB,EACf,MAAM,SACP;CACF,CACF,EAQK,KAAe,EAAM,YAGxB,EAAE,UAAO,SAAS,cAAW,aAAU,oBAAiB,GAAG,KAAS,MACrE,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD,EAAgB,CAAA,EAChB,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,GAAc,EAAE,SAAM,CAAC,EAAE,EAAU;CACjD,GAAI;WAHN,CAKG,GACA,CAAC,KACA,kBAAC,IAAD;EAAsB,WAAU;YAAhC,CACE,kBAAC,IAAD,EAAG,WAAU,WAAY,CAAA,EACzB,kBAAC,QAAD;GAAM,WAAU;aAAU;GAAY,CAAA,CACjB;IAEF;GACb,EAAA,CAAA,CACd;AACF,GAAa,cAAA,GAAqC;AAElD,IAAM,MAAe,EACnB,cACA,GAAG,QAEH,kBAAC,OAAD;CACE,WAAW,EACT,0EACA,EACD;CACD,GAAI;CACJ,CAAA;AAEJ,GAAY,cAAc;AAE1B,IAAM,MAAe,EACnB,cACA,GAAG,QAEH,kBAAC,OAAD;CACE,WAAW,EACT,oGACA,EACD;CACD,GAAI;CACJ,CAAA;AAEJ,GAAY,cAAc;AAE1B,IAAM,KAAa,EAAM,YAGtB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,yCAAyC,EAAU;CACjE,GAAI;CACJ,CAAA,CACF;AACF,GAAW,cAAA,GAAmC;AAE9C,IAAM,KAAmB,EAAM,YAG5B,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,yBAAyB,EAAU;CACjD,GAAI;CACJ,CAAA,CACF;AACF,GAAiB,cAAA,GAAyC;;;AClI1D,IAAI,KAAiB,CAAC,SAAS,IAAI,EAC/B,KAAa;CAAC;CAAa;CAAU;CAAO,EAC5C,KAAY;CAAC;CAAW;CAAY;CAAM,EAC1C,KAAkB,CAAC,GAAG,IAAY,GAAG,GAAU,EAC/C,KAAgB;CAClB,KAAK,CAAC,GAAG,IAAgB,aAAa;CACtC,KAAK,CAAC,GAAG,IAAgB,YAAY;CACtC,EACG,KAAiB;CACnB,KAAK,CAAC,YAAY;CAClB,KAAK,CAAC,aAAa;CACpB,EACG,KAAY,QACZ,CAAC,IAAY,IAAe,MAAyB,GAAiB,GAAU,EAChF,CAAC,IAAmB,MAAmB,GAAmB,IAAW;CACvE;CACA;CACA;CACD,CAAC,EACE,KAAiB,IAAmB,EACpC,KAA2B,IAA6B,EACxD,CAAC,IAAc,MAAkB,GAAkB,GAAU,EAC7D,CAAC,IAAkB,MAAsB,GAAkB,GAAU,EACrE,MAAQ,MAAU;CACpB,IAAM,EAAE,gBAAa,UAAO,IAAO,aAAU,QAAK,iBAAc,WAAQ,OAAS,GAC3E,IAAc,GAAe,EAAY,EACzC,CAAC,GAAS,KAAcI,EAAM,SAAS,KAAK,EAC5C,IAAqBA,EAAM,OAAO,GAAM,EACxC,IAAmBC,GAAe,EAAa,EAC/C,IAAY,GAAa,EAAI;AAenC,QAdA,EAAM,gBAAgB;EACpB,IAAM,UAAsB;AAG1B,GAFA,EAAmB,UAAU,IAC7B,SAAS,iBAAiB,eAAe,GAAe;IAAE,SAAS;IAAM,MAAM;IAAM,CAAC,EACtF,SAAS,iBAAiB,eAAe,GAAe;IAAE,SAAS;IAAM,MAAM;IAAM,CAAC;KAElF,UAAsB,EAAmB,UAAU;AAEzD,SADA,SAAS,iBAAiB,WAAW,GAAe,EAAE,SAAS,IAAM,CAAC,QACzD;AAGX,GAFA,SAAS,oBAAoB,WAAW,GAAe,EAAE,SAAS,IAAM,CAAC,EACzE,SAAS,oBAAoB,eAAe,GAAe,EAAE,SAAS,IAAM,CAAC,EAC7E,SAAS,oBAAoB,eAAe,GAAe,EAAE,SAAS,IAAM,CAAC;;IAE9E,EAAE,CAAC,EACiB,kBAAIC,IAAsB;EAAE,GAAG;EAAa,UAA0B,kBAC3F,IACA;GACE,OAAO;GACP;GACA,cAAc;GACd;GACA,iBAAiB;GACjB,UAA0B,kBACxB,IACA;IACE,OAAO;IACP,SAASF,EAAM,kBAAkB,EAAiB,GAAM,EAAE,CAAC,EAAiB,CAAC;IAC7E;IACA,KAAK;IACL;IACA;IACD,CACF;GACF,CACF;EAAE,CAAC;;AAEN,GAAK,cAAc;AACnB,IAAI,KAAc,cACd,KAAaA,EAAM,YACpB,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,GAAG,MAAgB;AAExC,QAAuB,kBAAIG,IAAwB;EAAE,GADjC,GAAe,EAAY;EACsB,GAAG;EAAa,KAAK;EAAc,CAAC;EAE5G;AACD,GAAW,cAAc;AACzB,IAAIC,KAAc,cACd,CAAC,IAAgB,MAAoB,GAAkBA,IAAa,EACtE,YAAY,KAAK,GAClB,CAAC,EACE,MAAc,MAAU;CAC1B,IAAM,EAAE,gBAAa,eAAY,aAAU,iBAAc,GACnD,IAAU,GAAeA,IAAa,EAAY;AACxD,QAAuB,kBAAI,IAAgB;EAAE,OAAO;EAAa;EAAY,UAA0B,kBAAI,GAAU;GAAE,SAAS,KAAc,EAAQ;GAAM,UAA0B,kBAAIC,IAAiB;IAAE,SAAS;IAAM;IAAW;IAAU,CAAC;GAAE,CAAC;EAAE,CAAC;;AAE1P,GAAW,cAAcD;AACzB,IAAIE,KAAe,eACf,CAAC,IAAqB,MAAyB,GAAkBA,GAAa,EAC9E,KAAcN,EAAM,YACrB,GAAO,MAAiB;CACvB,IAAM,IAAgB,GAAiBM,IAAc,EAAM,YAAY,EACjE,EAAE,gBAAa,EAAc,YAAY,GAAG,MAAiB,GAC7D,IAAU,GAAeA,IAAc,EAAM,YAAY,EACzD,IAAc,GAAmBA,IAAc,EAAM,YAAY;AACvE,QAAuB,kBAAI,GAAW,UAAU;EAAE,OAAO,EAAM;EAAa,UAA0B,kBAAI,GAAU;GAAE,SAAS,KAAc,EAAQ;GAAM,UAA0B,kBAAI,GAAW,MAAM;IAAE,OAAO,EAAM;IAAa,UAAU,EAAY,QAAwB,kBAAI,IAAsB;KAAE,GAAG;KAAc,KAAK;KAAc,CAAC,GAAmB,kBAAI,IAAyB;KAAE,GAAG;KAAc,KAAK;KAAc,CAAC;IAAE,CAAC;GAAE,CAAC;EAAE,CAAC;EAExb,EACG,KAAuBN,EAAM,YAC9B,GAAO,MAAiB;CACvB,IAAM,IAAU,GAAeM,IAAc,EAAM,YAAY,EACzD,IAAMN,EAAM,OAAO,KAAK,EACxB,IAAe,EAAgB,GAAc,EAAI;AAKvD,QAJA,EAAM,gBAAgB;EACpB,IAAM,IAAU,EAAI;AACpB,MAAI,EAAS,QAAO,GAAW,EAAQ;IACtC,EAAE,CAAC,EACiB,kBACrB,IACA;EACE,GAAG;EACH,KAAK;EACL,WAAW,EAAQ;EACnB,6BAA6B,EAAQ;EACrC,sBAAsB;EACtB,gBAAgB,EACd,EAAM,iBACL,MAAU,EAAM,gBAAgB,EACjC,EAAE,0BAA0B,IAAO,CACpC;EACD,iBAAiB,EAAQ,aAAa,GAAM;EAC7C,CACF;EAEJ,EACG,KAA0BA,EAAM,YAAY,GAAO,MAAiB;CACtE,IAAM,IAAU,GAAeM,IAAc,EAAM,YAAY;AAC/D,QAAuB,kBACrB,IACA;EACE,GAAG;EACH,KAAK;EACL,WAAW;EACX,6BAA6B;EAC7B,sBAAsB;EACtB,iBAAiB,EAAQ,aAAa,GAAM;EAC7C,CACF;EACD,EACE,KAAO,mBAAW,yBAAyB,EAC3C,KAAkBN,EAAM,YACzB,GAAO,MAAiB;CACvB,IAAM,EACJ,gBACA,UAAO,IACP,cACA,oBACA,qBACA,gCACA,iBACA,oBACA,yBACA,mBACA,sBACA,cACA,yBACA,GAAG,MACD,GACE,IAAU,GAAeM,IAAc,EAAY,EACnD,IAAc,GAAmBA,IAAc,EAAY,EAC3D,IAAc,GAAe,EAAY,EACzC,IAAwB,GAAyB,EAAY,EAC7D,IAAW,GAAc,EAAY,EACrC,CAAC,GAAe,KAAoBN,EAAM,SAAS,KAAK,EACxD,IAAaA,EAAM,OAAO,KAAK,EAC/B,IAAe,EAAgB,GAAc,GAAY,EAAQ,gBAAgB,EACjF,IAAWA,EAAM,OAAO,EAAE,EAC1B,IAAYA,EAAM,OAAO,GAAG,EAC5B,IAAuBA,EAAM,OAAO,EAAE,EACtC,IAAwBA,EAAM,OAAO,KAAK,EAC1C,IAAgBA,EAAM,OAAO,QAAQ,EACrC,IAAkBA,EAAM,OAAO,EAAE,EACjC,IAAoB,IAAuBO,KAAeP,EAAM,UAChE,IAAyB,IAAuB;EAAE,IAAI;EAAM,gBAAgB;EAAM,GAAG,KAAK,GAC1F,KAAyB,MAAQ;EACrC,IAAM,IAAS,EAAU,UAAU,GAC7B,IAAQ,GAAU,CAAC,QAAQ,MAAS,CAAC,EAAK,SAAS,EACnD,IAAc,SAAS,eACvB,IAAe,EAAM,MAAM,MAAS,EAAK,IAAI,YAAY,EAAY,EAAE,WAEvE,IAAY,GADH,EAAM,KAAK,MAAS,EAAK,UAAU,EACX,GAAQ,EAAa,EACtD,IAAU,EAAM,MAAM,MAAS,EAAK,cAAc,EAAU,EAAE,IAAI;AAMxE,GALC,SAAS,EAAa,GAAO;AAG5B,GAFA,EAAU,UAAU,GACpB,OAAO,aAAa,EAAS,QAAQ,EACjC,MAAU,OAAI,EAAS,UAAU,OAAO,iBAAiB,EAAa,GAAG,EAAE,IAAI;KAClF,EAAO,EACN,KACF,iBAAiB,EAAQ,OAAO,CAAC;;AAMrC,CAHA,EAAM,sBACS,OAAO,aAAa,EAAS,QAAQ,EACjD,EAAE,CAAC,EACN,IAAgB;CAChB,IAAM,IAA2BA,EAAM,aAAa,MAC1B,EAAc,YAAY,EAAsB,SAAS,QACvD,GAAqB,GAAO,EAAsB,SAAS,KAAK,EACzF,EAAE,CAAC;AACN,QAAuB,kBACrB,IACA;EACE,OAAO;EACP;EACA,aAAaA,EAAM,aAChB,MAAU;AACT,GAAI,EAAyB,EAAM,IAAE,EAAM,gBAAgB;KAE7D,CAAC,EAAyB,CAC3B;EACD,aAAaA,EAAM,aAChB,MAAU;AACL,KAAyB,EAAM,KACnC,EAAW,SAAS,OAAO,EAC3B,EAAiB,KAAK;KAExB,CAAC,EAAyB,CAC3B;EACD,gBAAgBA,EAAM,aACnB,MAAU;AACT,GAAI,EAAyB,EAAM,IAAE,EAAM,gBAAgB;KAE7D,CAAC,EAAyB,CAC3B;EACD;EACA,4BAA4BA,EAAM,aAAa,MAAW;AACxD,KAAsB,UAAU;KAC/B,EAAE,CAAC;EACN,UAA0B,kBAAI,GAAmB;GAAE,GAAG;GAAwB,UAA0B,kBACtG,IACA;IACE,SAAS;IACT,SAAS;IACT,kBAAkB,EAAqB,IAAkB,MAAU;AAEjE,KADA,EAAM,gBAAgB,EACtB,EAAW,SAAS,MAAM,EAAE,eAAe,IAAM,CAAC;MAClD;IACF,oBAAoB;IACpB,UAA0B,kBACxB,IACA;KACE,SAAS;KACT;KACA;KACA;KACA;KACA;KACA;KACA,UAA0B,kBACxBQ,IACA;MACE,SAAS;MACT,GAAG;MACH,KAAK,EAAY;MACjB,aAAa;MACb;MACA,kBAAkB;MAClB,0BAA0B;MAC1B,cAAc,EAAqB,IAAe,MAAU;AAC1D,OAAK,EAAY,mBAAmB,WAAS,EAAM,gBAAgB;QACnE;MACF,2BAA2B;MAC3B,UAA0B,kBACxBC,IACA;OACE,MAAM;OACN,oBAAoB;OACpB,cAAc,GAAa,EAAQ,KAAK;OACxC,2BAA2B;OAC3B,KAAK,EAAY;OACjB,GAAG;OACH,GAAG;OACH,KAAK;OACL,OAAO;QAAE,SAAS;QAAQ,GAAG,EAAa;QAAO;OACjD,WAAW,EAAqB,EAAa,YAAY,MAAU;QAEjE,IAAM,IADS,EAAM,OACU,QAAQ,4BAA4B,KAAK,EAAM,eACxE,IAAgB,EAAM,WAAW,EAAM,UAAU,EAAM,SACvD,IAAiB,EAAM,IAAI,WAAW;AAC5C,QAAI,MACE,EAAM,QAAQ,SAAO,EAAM,gBAAgB,EAC3C,CAAC,KAAiB,KAAgB,EAAsB,EAAM,IAAI;QAExE,IAAM,IAAU,EAAW;AAE3B,YADI,EAAM,WAAW,KACjB,CAAC,GAAgB,SAAS,EAAM,IAAI,CAAE;AAC1C,UAAM,gBAAgB;QAEtB,IAAM,IADQ,GAAU,CAAC,QAAQ,MAAS,CAAC,EAAK,SAAS,CAC5B,KAAK,MAAS,EAAK,IAAI,QAAQ;AAE5D,QADI,GAAU,SAAS,EAAM,IAAI,IAAE,EAAe,SAAS,EAC3D,GAAW,EAAe;SAC1B;OACF,QAAQ,EAAqB,EAAM,SAAS,MAAU;AACpD,QAAK,EAAM,cAAc,SAAS,EAAM,OAAO,KAC7C,OAAO,aAAa,EAAS,QAAQ,EACrC,EAAU,UAAU;SAEtB;OACF,eAAe,EACb,EAAM,eACN,IAAW,MAAU;QACnB,IAAM,IAAS,EAAM,QACf,IAAqB,EAAgB,YAAY,EAAM;AAC7D,QAAI,EAAM,cAAc,SAAS,EAAO,IAAI,MAE1C,EAAc,UADC,EAAM,UAAU,EAAgB,UAAU,UAAU,QAEnE,EAAgB,UAAU,EAAM;SAElC,CACH;OACF,CACF;MACF,CACF;KACF,CACF;IACF,CACF;GAAE,CAAC;EACL,CACF;EAEJ;AACD,GAAY,cAAcH;AAC1B,IAAII,KAAa,aACb,KAAYV,EAAM,YACnB,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,GAAG,MAAe;AACvC,QAAuB,kBAAI,EAAU,KAAK;EAAE,MAAM;EAAS,GAAG;EAAY,KAAK;EAAc,CAAC;EAEjG;AACD,GAAU,cAAcU;AACxB,IAAIC,KAAa,aACb,KAAYX,EAAM,YACnB,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,GAAG,MAAe;AACvC,QAAuB,kBAAI,EAAU,KAAK;EAAE,GAAG;EAAY,KAAK;EAAc,CAAC;EAElF;AACD,GAAU,cAAcW;AACxB,IAAIC,KAAY,YACZ,KAAc,mBACd,KAAWZ,EAAM,YAClB,GAAO,MAAiB;CACvB,IAAM,EAAE,cAAW,IAAO,aAAU,GAAG,MAAc,GAC/C,IAAMA,EAAM,OAAO,KAAK,EACxB,IAAc,GAAmBY,IAAW,EAAM,YAAY,EAC9D,IAAiB,GAAsBA,IAAW,EAAM,YAAY,EACpE,IAAe,EAAgB,GAAc,EAAI,EACjD,IAAmBZ,EAAM,OAAO,GAAM,EACtC,UAAqB;EACzB,IAAM,IAAW,EAAI;AACrB,MAAI,CAAC,KAAY,GAAU;GACzB,IAAM,IAAkB,IAAI,YAAY,IAAa;IAAE,SAAS;IAAM,YAAY;IAAM,CAAC;AAGzF,GAFA,EAAS,iBAAiB,KAAc,MAAU,IAAW,EAAM,EAAE,EAAE,MAAM,IAAM,CAAC,EACpF,GAA4B,GAAU,EAAgB,EAClD,EAAgB,mBAClB,EAAiB,UAAU,KAE3B,EAAY,SAAS;;;AAI3B,QAAuB,kBACrB,IACA;EACE,GAAG;EACH,KAAK;EACL;EACA,SAAS,EAAqB,EAAM,SAAS,EAAa;EAC1D,gBAAgB,MAAU;AAExB,GADA,EAAM,gBAAgB,EAAM,EAC5B,EAAiB,UAAU;;EAE7B,aAAa,EAAqB,EAAM,cAAc,MAAU;AAC9D,GAAK,EAAiB,WAAS,EAAM,eAAe,OAAO;IAC3D;EACF,WAAW,EAAqB,EAAM,YAAY,MAAU;GAC1D,IAAM,IAAgB,EAAe,UAAU,YAAY;AACvD,QAAY,KAAiB,EAAM,QAAQ,OAC3C,GAAe,SAAS,EAAM,IAAI,KACpC,EAAM,cAAc,OAAO,EAC3B,EAAM,gBAAgB;IAExB;EACH,CACF;EAEJ;AACD,GAAS,cAAcY;AACvB,IAAI,KAAeZ,EAAM,YACtB,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,cAAW,IAAO,cAAW,GAAG,MAAc,GAC7D,IAAiB,GAAsBY,IAAW,EAAY,EAC9D,IAAwB,GAAyB,EAAY,EAC7D,IAAMZ,EAAM,OAAO,KAAK,EACxB,IAAe,EAAgB,GAAc,EAAI,EACjD,CAAC,GAAW,KAAgBA,EAAM,SAAS,GAAM,EACjD,CAAC,GAAa,KAAkBA,EAAM,SAAS,GAAG;AAOxD,QANA,EAAM,gBAAgB;EACpB,IAAM,IAAW,EAAI;AACrB,EAAI,KACF,GAAgB,EAAS,eAAe,IAAI,MAAM,CAAC;IAEpD,CAAC,EAAU,SAAS,CAAC,EACD,kBACrB,GAAW,UACX;EACE,OAAO;EACP;EACA,WAAW,KAAa;EACxB,UAA0B,kBAAIa,IAAuB;GAAE,SAAS;GAAM,GAAG;GAAuB,WAAW,CAAC;GAAU,UAA0B,kBAC9I,EAAU,KACV;IACE,MAAM;IACN,oBAAoB,IAAY,KAAK,KAAK;IAC1C,iBAAiB,KAAY,KAAK;IAClC,iBAAiB,IAAW,KAAK,KAAK;IACtC,GAAG;IACH,KAAK;IACL,eAAe,EACb,EAAM,eACN,IAAW,MAAU;AACnB,KAAI,IACF,EAAe,YAAY,EAAM,IAEjC,EAAe,YAAY,EAAM,EAC5B,EAAM,oBACI,EAAM,cACd,MAAM,EAAE,eAAe,IAAM,CAAC;MAGvC,CACH;IACD,gBAAgB,EACd,EAAM,gBACN,IAAW,MAAU,EAAe,YAAY,EAAM,CAAC,CACxD;IACD,SAAS,EAAqB,EAAM,eAAe,EAAa,GAAK,CAAC;IACtE,QAAQ,EAAqB,EAAM,cAAc,EAAa,GAAM,CAAC;IACtE,CACF;GAAE,CAAC;EACL,CACF;EAEJ,EACGC,KAAqB,oBACrB,KAAmBd,EAAM,YAC1B,GAAO,MAAiB;CACvB,IAAM,EAAE,aAAU,IAAO,oBAAiB,GAAG,MAAsB;AACnE,QAAuB,kBAAI,IAAuB;EAAE,OAAO,EAAM;EAAa;EAAS,UAA0B,kBAC/G,IACA;GACE,MAAM;GACN,gBAAgB,GAAgB,EAAQ,GAAG,UAAU;GACrD,GAAG;GACH,KAAK;GACL,cAAc,GAAgB,EAAQ;GACtC,UAAU,EACR,EAAkB,gBACZ,IAAkB,GAAgB,EAAQ,GAAG,KAAO,CAAC,EAAQ,EACnE,EAAE,0BAA0B,IAAO,CACpC;GACF,CACF;EAAE,CAAC;EAEP;AACD,GAAiB,cAAcc;AAC/B,IAAIC,KAAmB,kBACnB,CAAC,IAAoB,MAAwB,GAC/CA,IACA;CAAE,OAAO,KAAK;CAAG,qBAAqB;CACnC,CACJ,EACG,KAAiBf,EAAM,YACxB,GAAO,MAAiB;CACvB,IAAM,EAAE,UAAO,kBAAe,GAAG,MAAe,GAC1C,IAAoBC,GAAe,EAAc;AACvD,QAAuB,kBAAI,IAAoB;EAAE,OAAO,EAAM;EAAa;EAAO,eAAe;EAAmB,UAA0B,kBAAI,IAAW;GAAE,GAAG;GAAY,KAAK;GAAc,CAAC;EAAE,CAAC;EAExM;AACD,GAAe,cAAcc;AAC7B,IAAIC,KAAkB,iBAClB,KAAgBhB,EAAM,YACvB,GAAO,MAAiB;CACvB,IAAM,EAAE,UAAO,GAAG,MAAmB,GAC/B,IAAU,GAAqBgB,IAAiB,EAAM,YAAY,EAClE,IAAU,MAAU,EAAQ;AAClC,QAAuB,kBAAI,IAAuB;EAAE,OAAO,EAAM;EAAa;EAAS,UAA0B,kBAC/G,IACA;GACE,MAAM;GACN,gBAAgB;GAChB,GAAG;GACH,KAAK;GACL,cAAc,GAAgB,EAAQ;GACtC,UAAU,EACR,EAAe,gBACT,EAAQ,gBAAgB,EAAM,EACpC,EAAE,0BAA0B,IAAO,CACpC;GACF,CACF;EAAE,CAAC;EAEP;AACD,GAAc,cAAcA;AAC5B,IAAI,KAAsB,qBACtB,CAAC,IAAuB,MAA2B,GACrD,IACA,EAAE,SAAS,IAAO,CACnB,EACG,KAAoBhB,EAAM,YAC3B,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,eAAY,GAAG,MAAuB,GACrD,IAAmB,GAAwB,IAAqB,EAAY;AAClF,QAAuB,kBACrB,GACA;EACE,SAAS,KAAc,GAAgB,EAAiB,QAAQ,IAAI,EAAiB,YAAY;EACjG,UAA0B,kBACxB,EAAU,MACV;GACE,GAAG;GACH,KAAK;GACL,cAAc,GAAgB,EAAiB,QAAQ;GACxD,CACF;EACF,CACF;EAEJ;AACD,GAAkB,cAAc;AAChC,IAAIiB,KAAiB,iBACjB,KAAgBjB,EAAM,YACvB,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,GAAG,MAAmB;AAC3C,QAAuB,kBACrB,EAAU,KACV;EACE,MAAM;EACN,oBAAoB;EACpB,GAAG;EACH,KAAK;EACN,CACF;EAEJ;AACD,GAAc,cAAciB;AAC5B,IAAIC,KAAa,aACb,KAAYlB,EAAM,YACnB,GAAO,MAAiB;CACvB,IAAM,EAAE,gBAAa,GAAG,MAAe;AAEvC,QAAuB,kBAAImB,IAAuB;EAAE,GADhC,GAAe,EAAY;EACqB,GAAG;EAAY,KAAK;EAAc,CAAC;EAE1G;AACD,GAAU,cAAcD;AACxB,IAAIE,KAAW,WACX,CAAC,IAAiB,MAAqB,GAAkBA,GAAS,EAClE,MAAW,MAAU;CACvB,IAAM,EAAE,gBAAa,aAAU,UAAO,IAAO,oBAAiB,GACxD,IAAoB,GAAeA,IAAU,EAAY,EACzD,IAAc,GAAe,EAAY,EACzC,CAAC,GAAS,KAAcpB,EAAM,SAAS,KAAK,EAC5C,CAAC,GAAS,KAAcA,EAAM,SAAS,KAAK,EAC5C,IAAmBC,GAAe,EAAa;AAKrD,QAJA,EAAM,iBACA,EAAkB,SAAS,MAAO,EAAiB,GAAM,QAChD,EAAiB,GAAM,GACnC,CAAC,EAAkB,MAAM,EAAiB,CAAC,EACvB,kBAAIC,IAAsB;EAAE,GAAG;EAAa,UAA0B,kBAC3F,IACA;GACE,OAAO;GACP;GACA,cAAc;GACd;GACA,iBAAiB;GACjB,UAA0B,kBACxB,IACA;IACE,OAAO;IACP,WAAW,IAAO;IAClB,WAAW,IAAO;IAClB;IACA,iBAAiB;IACjB;IACD,CACF;GACF,CACF;EAAE,CAAC;;AAEN,GAAQ,cAAckB;AACtB,IAAIC,KAAmB,kBACnB,KAAiBrB,EAAM,YACxB,GAAO,MAAiB;CACvB,IAAM,IAAU,GAAeqB,IAAkB,EAAM,YAAY,EAC7D,IAAc,GAAmBA,IAAkB,EAAM,YAAY,EACrE,IAAa,GAAkBA,IAAkB,EAAM,YAAY,EACnE,IAAiB,GAAsBA,IAAkB,EAAM,YAAY,EAC3E,IAAerB,EAAM,OAAO,KAAK,EACjC,EAAE,yBAAsB,kCAA+B,GACvD,IAAQ,EAAE,aAAa,EAAM,aAAa,EAC1C,IAAiBA,EAAM,kBAAkB;AAE7C,EADI,EAAa,WAAS,OAAO,aAAa,EAAa,QAAQ,EACnE,EAAa,UAAU;IACtB,EAAE,CAAC;AASN,QARA,EAAM,gBAAgB,GAAgB,CAAC,EAAe,CAAC,EACvD,EAAM,gBAAgB;EACpB,IAAM,IAAoB,EAAqB;AAC/C,eAAa;AAEX,GADA,OAAO,aAAa,EAAkB,EACtC,EAA2B,KAAK;;IAEjC,CAAC,GAAsB,EAA2B,CAAC,EAC/B,kBAAI,IAAY;EAAE,SAAS;EAAM,GAAG;EAAO,UAA0B,kBAC1F,IACA;GACE,IAAI,EAAW;GACf,iBAAiB;GACjB,iBAAiB,EAAQ;GACzB,iBAAiB,EAAW;GAC5B,cAAc,GAAa,EAAQ,KAAK;GACxC,GAAG;GACH,KAAK,EAAY,GAAc,EAAW,gBAAgB;GAC1D,UAAU,MAAU;AAClB,MAAM,UAAU,EAAM,EAClB,IAAM,YAAY,EAAM,sBAC5B,EAAM,cAAc,OAAO,EACtB,EAAQ,QAAM,EAAQ,aAAa,GAAK;;GAE/C,eAAe,EACb,EAAM,eACN,IAAW,MAAU;AACnB,MAAe,YAAY,EAAM,EAC7B,GAAM,oBACN,CAAC,EAAM,YAAY,CAAC,EAAQ,QAAQ,CAAC,EAAa,YACpD,EAAe,2BAA2B,KAAK,EAC/C,EAAa,UAAU,OAAO,iBAAiB;AAE7C,KADA,EAAQ,aAAa,GAAK,EAC1B,GAAgB;OACf,IAAI;KAET,CACH;GACD,gBAAgB,EACd,EAAM,gBACN,IAAW,MAAU;AACnB,OAAgB;IAChB,IAAM,IAAc,EAAQ,SAAS,uBAAuB;AAC5D,QAAI,GAAa;KACf,IAAM,IAAO,EAAQ,SAAS,QAAQ,MAChC,IAAY,MAAS,SACrB,IAAQ,IAAY,KAAK,GACzB,IAAkB,EAAY,IAAY,SAAS,UACnD,IAAiB,EAAY,IAAY,UAAU;AAczD,KAbA,EAAe,2BAA2B;MACxC,MAAM;OAGJ;QAAE,GAAG,EAAM,UAAU;QAAO,GAAG,EAAM;QAAS;OAC9C;QAAE,GAAG;QAAiB,GAAG,EAAY;QAAK;OAC1C;QAAE,GAAG;QAAgB,GAAG,EAAY;QAAK;OACzC;QAAE,GAAG;QAAgB,GAAG,EAAY;QAAQ;OAC5C;QAAE,GAAG;QAAiB,GAAG,EAAY;QAAQ;OAC9C;MACD;MACD,CAAC,EACF,OAAO,aAAa,EAAqB,QAAQ,EACjD,EAAqB,UAAU,OAAO,iBAC9B,EAAe,2BAA2B,KAAK,EACrD,IACD;WACI;AAEL,SADA,EAAe,eAAe,EAAM,EAChC,EAAM,iBAAkB;AAC5B,OAAe,2BAA2B,KAAK;;KAEjD,CACH;GACD,WAAW,EAAqB,EAAM,YAAY,MAAU;IAC1D,IAAM,IAAgB,EAAe,UAAU,YAAY;AACvD,MAAM,YAAY,KAAiB,EAAM,QAAQ,OACjD,GAAc,EAAY,KAAK,SAAS,EAAM,IAAI,KACpD,EAAQ,aAAa,GAAK,EAC1B,EAAQ,SAAS,OAAO,EACxB,EAAM,gBAAgB;KAExB;GACH,CACF;EAAE,CAAC;EAEP;AACD,GAAe,cAAcqB;AAC7B,IAAIC,KAAmB,kBACnB,KAAiBtB,EAAM,YACxB,GAAO,MAAiB;CACvB,IAAM,IAAgB,GAAiBM,IAAc,EAAM,YAAY,EACjE,EAAE,gBAAa,EAAc,YAAY,GAAG,MAAoB,GAChE,IAAU,GAAeA,IAAc,EAAM,YAAY,EACzD,IAAc,GAAmBA,IAAc,EAAM,YAAY,EACjE,IAAa,GAAkBgB,IAAkB,EAAM,YAAY,EACnE,IAAMtB,EAAM,OAAO,KAAK,EACxB,IAAe,EAAgB,GAAc,EAAI;AACvD,QAAuB,kBAAI,GAAW,UAAU;EAAE,OAAO,EAAM;EAAa,UAA0B,kBAAI,GAAU;GAAE,SAAS,KAAc,EAAQ;GAAM,UAA0B,kBAAI,GAAW,MAAM;IAAE,OAAO,EAAM;IAAa,UAA0B,kBAC9P,IACA;KACE,IAAI,EAAW;KACf,mBAAmB,EAAW;KAC9B,GAAG;KACH,KAAK;KACL,OAAO;KACP,MAAM,EAAY,QAAQ,QAAQ,SAAS;KAC3C,6BAA6B;KAC7B,sBAAsB;KACtB,WAAW;KACX,kBAAkB,MAAU;AAE1B,MADI,EAAY,mBAAmB,WAAS,EAAI,SAAS,OAAO,EAChE,EAAM,gBAAgB;;KAExB,mBAAmB,MAAU,EAAM,gBAAgB;KACnD,gBAAgB,EAAqB,EAAM,iBAAiB,MAAU;AACpE,MAAI,EAAM,WAAW,EAAW,WAAS,EAAQ,aAAa,GAAM;OACpE;KACF,iBAAiB,EAAqB,EAAM,kBAAkB,MAAU;AAEtE,MADA,EAAY,SAAS,EACrB,EAAM,gBAAgB;OACtB;KACF,WAAW,EAAqB,EAAM,YAAY,MAAU;MAC1D,IAAM,IAAkB,EAAM,cAAc,SAAS,EAAM,OAAO,EAC5D,IAAa,GAAe,EAAY,KAAK,SAAS,EAAM,IAAI;AACtE,MAAI,KAAmB,MACrB,EAAQ,aAAa,GAAM,EAC3B,EAAW,SAAS,OAAO,EAC3B,EAAM,gBAAgB;OAExB;KACH,CACF;IAAE,CAAC;GAAE,CAAC;EAAE,CAAC;EAEb;AACD,GAAe,cAAcsB;AAC7B,SAAS,GAAa,GAAM;AAC1B,QAAO,IAAO,SAAS;;AAEzB,SAAS,GAAgB,GAAS;AAChC,QAAO,MAAY;;AAErB,SAAS,GAAgB,GAAS;AAChC,QAAO,GAAgB,EAAQ,GAAG,kBAAkB,IAAU,YAAY;;AAE5E,SAAS,GAAW,GAAY;CAC9B,IAAM,IAA6B,SAAS;AAC5C,MAAK,IAAM,KAAa,EAGtB,KAFI,MAAc,MAClB,EAAU,OAAO,EACb,SAAS,kBAAkB,GAA4B;;AAG/D,SAAS,GAAU,GAAO,GAAY;AACpC,QAAO,EAAM,KAAK,GAAG,MAAU,GAAO,IAAa,KAAS,EAAM,QAAQ;;AAE5E,SAAS,GAAa,GAAQ,GAAQ,GAAc;CAElD,IAAM,IADa,EAAO,SAAS,KAAK,MAAM,KAAK,EAAO,CAAC,OAAO,MAAS,MAAS,EAAO,GAAG,GACxD,EAAO,KAAK,GAC5C,IAAoB,IAAe,EAAO,QAAQ,EAAa,GAAG,IACpE,IAAgB,GAAU,GAAQ,KAAK,IAAI,GAAmB,EAAE,CAAC;AAErE,CAD4B,EAAiB,WAAW,MAC/B,IAAgB,EAAc,QAAQ,MAAM,MAAM,EAAa;CACxF,IAAM,IAAY,EAAc,MAC7B,MAAU,EAAM,aAAa,CAAC,WAAW,EAAiB,aAAa,CAAC,CAC1E;AACD,QAAO,MAAc,IAA2B,KAAK,IAAjB;;AAEtC,SAAS,GAAiB,GAAO,GAAS;CACxC,IAAM,EAAE,MAAG,SAAM,GACb,IAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,SAAS,GAAG,IAAI,EAAQ,QAAQ,IAAI,KAAK;EACnE,IAAM,IAAK,EAAQ,IACb,IAAK,EAAQ,IACb,IAAK,EAAG,GACR,IAAK,EAAG,GACR,IAAK,EAAG,GACR,IAAK,EAAG;AAEd,EADkB,IAAK,KAAM,IAAK,KAAK,KAAK,IAAK,MAAO,IAAI,MAAO,IAAK,KAAM,MAC/D,IAAS,CAAC;;AAE3B,QAAO;;AAET,SAAS,GAAqB,GAAO,GAAM;AAGzC,QAFK,IAEE,GADW;EAAE,GAAG,EAAM;EAAS,GAAG,EAAM;EAAS,EACrB,EAAK,GAFtB;;AAIpB,SAAS,GAAU,GAAS;AAC1B,SAAQ,MAAU,EAAM,gBAAgB,UAAU,EAAQ,EAAM,GAAG,KAAK;;AAE1E,IAAI,KAAQ,IACR,KAAU,IACV,KAAS,IACTC,KAAW,IACX,KAAQ,IACRC,KAAQ,IACRC,KAAQ,IACR,KAAe,IACf,KAAa,IACb,KAAY,IACZ,KAAgB,IAChBC,KAAY,IACZ,KAAS,IACT,KAAM,IACN,KAAa,IACb,KAAa,ICvzBb,KAAoB,eACpB,CAAC,IAA0B,MAA0B,GAAmB,IAAmB,CAC7F,GACD,CAAC,EACE,IAAe,IAAiB,EAChC,CAAC,IAAqB,MAAyB,GAAyB,GAAkB,EAC1FC,MAAe,MAAU;CAC3B,IAAM,EAAE,uBAAoB,aAAU,iBAAc,QAAK,WAAQ,OAAS,GACpE,CAAC,GAAM,KAAWC,EAAM,SAAS,GAAM,EACvC,IAAY,EAAa,EAAmB,EAC5C,IAAuBC,GAAe,EAAa,EACnD,IAAmBD,EAAM,aAC5B,MAAU;AAET,EADA,EAAQ,EAAM,EACd,EAAqB,EAAM;IAE7B,CAAC,EAAqB,CACvB;AACD,QAAuB,kBACrB,IACA;EACE,OAAO;EACP;EACA,cAAc;EACd;EACA,UAA0B,kBACxBE,IACA;GACE,GAAG;GACH;GACA;GACA,cAAc;GACd;GACA;GACD,CACF;EACF,CACF;;AAEH,GAAY,cAAc;AAC1B,IAAIC,KAAe,sBACfC,KAAqBJ,EAAM,YAC5B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,cAAW,IAAO,GAAG,MAAiB,GAC5D,IAAU,GAAsBG,IAAc,EAAmB,EACjE,IAAY,EAAa,EAAmB,EAC5C,IAAWH,EAAM,OAAO;EAAE,GAAG;EAAG,GAAG;EAAG,CAAC,EACvC,IAAaA,EAAM,OAAO,EAC9B,6BAA6B,QAAQ,SAAS;EAAE,OAAO;EAAG,QAAQ;EAAG,GAAG,EAAS;EAAS,CAAC,EAC5F,CAAC,EACI,IAAoBA,EAAM,OAAO,EAAE,EACnC,IAAiBA,EAAM,kBACrB,OAAO,aAAa,EAAkB,QAAQ,EACpD,EAAE,CACH,EACK,KAAc,MAAU;AAE5B,EADA,EAAS,UAAU;GAAE,GAAG,EAAM;GAAS,GAAG,EAAM;GAAS,EACzD,EAAQ,aAAa,GAAK;;AAI5B,QAFA,EAAM,gBAAgB,GAAgB,CAAC,EAAe,CAAC,EACvD,EAAM,gBAAgB,MAAM,KAAY,GAAgB,GAAG,CAAC,GAAU,EAAe,CAAC,EAC/D,kBAAK,GAAU,EAAE,UAAU,CAChC,kBAAIK,IAAsB;EAAE,GAAG;EAAW;EAAY,CAAC,EACvD,kBACd,EAAU,MACV;EACE,cAAc,EAAQ,OAAO,SAAS;EACtC,iBAAiB,IAAW,KAAK,KAAK;EACtC,GAAG;EACH,KAAK;EACL,OAAO;GAAE,oBAAoB;GAAQ,GAAG,EAAM;GAAO;EACrD,eAAe,IAAW,EAAM,gBAAgB,EAAqB,EAAM,gBAAgB,MAAU;AAGnG,GAFA,GAAgB,EAChB,EAAW,EAAM,EACjB,EAAM,gBAAgB;IACtB;EACF,eAAe,IAAW,EAAM,gBAAgB,EAC9C,EAAM,eACN,IAAgB,MAAU;AAExB,GADA,GAAgB,EAChB,EAAkB,UAAU,OAAO,iBAAiB,EAAW,EAAM,EAAE,IAAI;IAC3E,CACH;EACD,eAAe,IAAW,EAAM,gBAAgB,EAAqB,EAAM,eAAe,GAAe,EAAe,CAAC;EACzH,iBAAiB,IAAW,EAAM,kBAAkB,EAAqB,EAAM,iBAAiB,GAAe,EAAe,CAAC;EAC/H,aAAa,IAAW,EAAM,cAAc,EAAqB,EAAM,aAAa,GAAe,EAAe,CAAC;EACpH,CACF,CACF,EAAE,CAAC;EAEP;AACD,GAAmB,cAAcF;AACjC,IAAIG,KAAc,qBACdC,MAAqB,MAAU;CACjC,IAAM,EAAE,uBAAoB,GAAG,MAAgB;AAE/C,QAAuB,kBAAIC,IAAsB;EAAE,GADjC,EAAa,EAAmB;EACe,GAAG;EAAa,CAAC;;AAEpF,GAAkB,cAAcF;AAChC,IAAIG,KAAe,sBACfC,KAAqBV,EAAM,YAC5B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAiB,GAC1C,IAAU,GAAsBS,IAAc,EAAmB,EACjE,IAAY,EAAa,EAAmB,EAC5C,IAA0BT,EAAM,OAAO,GAAM;AACnD,QAAuB,kBACrBW,IACA;EACE,GAAG;EACH,GAAG;EACH,KAAK;EACL,MAAM;EACN,YAAY;EACZ,OAAO;EACP,mBAAmB,MAAU;AAK3B,GAJA,EAAM,mBAAmB,EAAM,EAC3B,CAAC,EAAM,oBAAoB,EAAwB,WACrD,EAAM,gBAAgB,EAExB,EAAwB,UAAU;;EAEpC,oBAAoB,MAAU;AAE5B,GADA,EAAM,oBAAoB,EAAM,EAC5B,CAAC,EAAM,oBAAoB,CAAC,EAAQ,UAAO,EAAwB,UAAU;;EAEnF,OAAO;GACL,GAAG,EAAM;GAGP,iDAAiD;GACjD,gDAAgD;GAChD,iDAAiD;GACjD,sCAAsC;GACtC,uCAAuC;GAE1C;EACF,CACF;EAEJ;AACD,GAAmB,cAAcF;AACjC,IAAI,KAAa,oBACbG,KAAmBZ,EAAM,YAC1B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAe;AAE9C,QAAuB,kBAAIa,IAAqB;EAAE,GADhC,EAAa,EAAmB;EACc,GAAG;EAAY,KAAK;EAAc,CAAC;EAEtG;AACD,GAAiB,cAAc;AAC/B,IAAI,KAAa,oBACbC,KAAmBd,EAAM,YAC1B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAe;AAE9C,QAAuB,kBAAIe,IAAqB;EAAE,GADhC,EAAa,EAAmB;EACc,GAAG;EAAY,KAAK;EAAc,CAAC;EAEtG;AACD,GAAiB,cAAc;AAC/B,IAAI,KAAY,mBACZC,KAAkBhB,EAAM,YACzB,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAc;AAE7C,QAAuB,kBAAIiB,IAAoB;EAAE,GAD/B,EAAa,EAAmB;EACa,GAAG;EAAW,KAAK;EAAc,CAAC;EAEpG;AACD,GAAgB,cAAc;AAC9B,IAAI,KAAqB,2BACrBC,KAA0BlB,EAAM,YAAY,GAAO,MAAiB;CACtE,IAAM,EAAE,uBAAoB,GAAG,MAAsB;AAErD,QAAuB,kBAAImB,IAA4B;EAAE,GADvC,EAAa,EAAmB;EACqB,GAAG;EAAmB,KAAK;EAAc,CAAC;EACjH;AACF,GAAwB,cAAc;AACtC,IAAI,KAAmB,yBACnBC,KAAwBpB,EAAM,YAAY,GAAO,MAAiB;CACpE,IAAM,EAAE,uBAAoB,GAAG,MAAoB;AAEnD,QAAuB,kBAAIqB,IAA0B;EAAE,GADrC,EAAa,EAAmB;EACmB,GAAG;EAAiB,KAAK;EAAc,CAAC;EAC7G;AACF,GAAsB,cAAc;AACpC,IAAI,KAAkB,wBAClBC,KAAuBtB,EAAM,YAAY,GAAO,MAAiB;CACnE,IAAM,EAAE,uBAAoB,GAAG,MAAmB;AAElD,QAAuB,kBAAIuB,IAAyB;EAAE,GADpC,EAAa,EAAmB;EACkB,GAAG;EAAgB,KAAK;EAAc,CAAC;EAC3G;AACF,GAAqB,cAAc;AACnC,IAAI,KAAiB,4BACjB,KAA2BvB,EAAM,YAAY,GAAO,MAAiB;CACvE,IAAM,EAAE,uBAAoB,GAAG,MAAuB;AAEtD,QAAuB,kBAAIwB,IAA6B;EAAE,GADxC,EAAa,EAAmB;EACsB,GAAG;EAAoB,KAAK;EAAc,CAAC;EACnH;AACF,GAAyB,cAAc;AACvC,IAAI,KAAiB,wBACjBC,KAAuBzB,EAAM,YAAY,GAAO,MAAiB;CACnE,IAAM,EAAE,uBAAoB,GAAG,MAAmB;AAElD,QAAuB,kBAAI0B,IAAyB;EAAE,GADpC,EAAa,EAAmB;EACkB,GAAG;EAAgB,KAAK;EAAc,CAAC;EAC3G;AACF,GAAqB,cAAc;AACnC,IAAI,KAAa,oBACb,KAAmB1B,EAAM,YAC1B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAe;AAE9C,QAAuB,kBAAI2B,IAAqB;EAAE,GADhC,EAAa,EAAmB;EACc,GAAG;EAAY,KAAK;EAAc,CAAC;EAEtG;AACD,GAAiB,cAAc;AAC/B,IAAI,KAAW,kBACXC,MAAkB,MAAU;CAC9B,IAAM,EAAE,uBAAoB,aAAU,iBAAc,MAAM,GAAU,mBAAgB,GAC9E,IAAY,EAAa,EAAmB,EAC5C,CAAC,GAAM,KAAW,GAAqB;EAC3C,MAAM;EACN,aAAa,KAAe;EAC5B,UAAU;EACV,QAAQ;EACT,CAAC;AACF,QAAuB,kBAAIC,IAAmB;EAAE,GAAG;EAAW;EAAM,cAAc;EAAS;EAAU,CAAC;;AAExG,GAAe,cAAc;AAC7B,IAAI,KAAmB,yBACnBC,KAAwB9B,EAAM,YAAY,GAAO,MAAiB;CACpE,IAAM,EAAE,uBAAoB,GAAG,MAAqB;AAEpD,QAAuB,kBAAI+B,IAA0B;EAAE,GADrC,EAAa,EAAmB;EACmB,GAAG;EAAkB,KAAK;EAAc,CAAC;EAC9G;AACF,GAAsB,cAAc;AACpC,IAAI,KAAmB,yBACnBC,KAAwBhC,EAAM,YAAY,GAAO,MAAiB;CACpE,IAAM,EAAE,uBAAoB,GAAG,MAAoB;AAEnD,QAAuB,kBACrBiC,IACA;EACE,GAJc,EAAa,EAAmB;EAK9C,GAAG;EACH,KAAK;EACL,OAAO;GACL,GAAG,EAAM;GAGP,iDAAiD;GACjD,gDAAgD;GAChD,iDAAiD;GACjD,sCAAsC;GACtC,uCAAuC;GAE1C;EACF,CACF;EACD;AACF,GAAsB,cAAc;AACpC,SAAS,GAAe,GAAS;AAC/B,SAAQ,MAAU,EAAM,gBAAgB,UAA2B,KAAK,IAAtB,EAAQ,EAAM;;AAElE,IAAIC,KAAQnC,IACR,KAAUK,IACV+B,KAAU5B,IACV6B,KAAW1B,IACX,KAASE,IACT,KAASE,IACT,KAAQE,IACR,KAAgBE,IAChB,KAAcE,IACd,KAAaE,IACb,KAAiB,IACjB,KAAaG,IAEb,KAAOG,IACP,KAAcE,IACd,KAAcE,ICzRZ,KAAc,IAEd,KAAqB,IAErB,KAAmB,IAEnB,KAAoB,IAEpB,KAAiB,IAEjB,KAAwB,IAExB,KAAwB,EAAM,YAKjC,EAAE,cAAW,UAAO,aAAU,GAAG,KAAS,MAC3C,kBAAC,IAAD;CACO;CACL,WAAW,EACT,0MACA,KAAS,QACT,EACD;CACD,GAAI;WAPN,CASG,GACD,kBAAC,IAAD,EAAc,WAAU,WAAY,CAAA,CACJ;GAClC;AACF,GAAsB,cAAA,GAA8C;AAEpE,IAAM,KAAwB,EAAM,YAGjC,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EACT,kfACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAsB,cAAA,GAA8C;AAEpE,IAAM,KAAqB,EAAM,YAG9B,EAAE,cAAW,GAAG,KAAS,MAGxB,kBAAC,IAAD;CAA6B,WAFb,GAAoB,IAEiB,KAAA;WACnD,kBAAC,IAAD;EACO;EACL,WAAW,EACT,uLACA,2YACA,EACD;EACD,GAAI;EACJ,CAAA;CAC0B,CAAA,CAEhC;AACF,GAAmB,cAAA,GAA2C;AAE9D,IAAM,KAAkB,EAAM,YAM3B,EAAE,cAAW,UAAO,YAAS,GAAG,KAAS,MAC1C,kBAAC,IAAD;CACO;CACL,WAAW,EACT,yQACA,KAAS,QACT,MAAY,iBAAiB,mEAC7B,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAgB,cAAA,GAAwC;AAExD,IAAM,KAA0B,EAAM,YAGnC,EAAE,cAAW,aAAU,YAAS,GAAG,KAAS,MAC7C,kBAAC,IAAD;CACO;CACL,WAAW,EACT,wOACA,EACD;CACQ;CACT,GAAI;WAPN,CASE,kBAAC,QAAD;EAAM,WAAU;YACd,kBAAC,IAAD,EAAA,UACE,kBAAC,IAAD,EAAO,WAAU,WAAY,CAAA,EACM,CAAA;EAChC,CAAA,EACN,EACiC;GACpC;AACF,GAAwB,cAAA,GAAgD;AAExE,IAAM,KAAuB,EAAM,YAGhC,EAAE,cAAW,aAAU,GAAG,KAAS,MACpC,kBAAC,IAAD;CACO;CACL,WAAW,EACT,wOACA,EACD;CACD,GAAI;WANN,CAQE,kBAAC,QAAD;EAAM,WAAU;YACd,kBAAC,IAAD,EAAA,UACE,kBAAC,IAAD,EAAQ,WAAU,wBAAyB,CAAA,EACR,CAAA;EAChC,CAAA,EACN,EAC8B;GACjC;AACF,GAAqB,cAAA,GAA6C;AAElE,IAAM,KAAmB,EAAM,YAK5B,EAAE,cAAW,UAAO,GAAG,KAAS,MACjC,kBAAC,IAAD;CACO;CACL,WAAW,EACT,qCACA,KAAS,QACT,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAiB,cAAA,GAAyC;AAE1D,IAAM,KAAuB,EAAM,YAGhC,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,4BAA4B,EAAU;CACpD,GAAI;CACJ,CAAA,CACF;AACF,GAAqB,cAAA,GAA6C;AAElE,IAAM,MAAuB,EAC3B,cACA,GAAG,QAGD,kBAAC,QAAD;CACE,WAAW,EAAG,8CAA8C,EAAU;CACtE,GAAI;CACJ,CAAA;AAGN,GAAoB,cAAc;;;ACpLlC,IAAM,KAAU;CACd;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAS,GAAU,GAA4B;CAC7C,IAAI,IAAI;AACR,MAAK,IAAI,IAAI,GAAG,IAAI,EAAW,QAAQ,IACrC,KAAK,IAAI,KAAK,EAAW,WAAW,EAAE,GAAI;AAE5C,QAAO,GAAQ,KAAK,IAAI,EAAE,GAAG,GAAQ;;AAGvC,SAAS,GAAe,GAAsB;AAC5C,QAAO,EACJ,MAAM,SAAS,CACf,OAAO,QAAQ,CACf,KAAK,MAAM,EAAE,GAAG,CAChB,KAAK,GAAG,CACR,MAAM,GAAG,EAAE,CACX,aAAa;;AAoBlB,SAAS,GAAW,EAClB,SACA,aACA,UAAU,GACV,UAAO,IACP,gBACkB;CAClB,IAAM,IAAW,GAAkB,MAAM,IAAI,GAAe,EAAK,EAC3D,IAAQ,GAAU,KAAY,EAAK,EACnC,IAAW,KAAK,MAAM,KAAQ,EAAS,SAAS,IAAI,MAAO,IAAK;AAEtE,QACE,kBAAC,QAAD;EACE,WAAW,EACT,yFACA,GACA,EACD;EACD,OAAO;GAAE,OAAO;GAAM,QAAQ;GAAM;GAAU;EAC9C,OAAO;YAEN;EACI,CAAA;;;;ACxDX,IAAM,KAAW,EAAM,YACpB,EAAE,cAAW,UAAO,GAAG,KAAS,MAAQ;CACvC,IAAM,IAAW,CAAC,CAAC;AACnB,QACE,kBAAC,YAAD;EACE,gBAAc,KAAY,KAAA;EAC1B,WAAW,EAGT,+OACA,IACI,sDACA,wCACJ,EACD;EACI;EACL,GAAI;EACJ,CAAA;EAGP;AACD,GAAS,cAAc;;;ACzBvB,IAAI,KAAY,eACZ,CAAC,IAA0B,MAA0B,GAAmB,IAAW,CACrF,GACD,CAAC,EACE,KAAiB,IAAmB,EACpCK,MAAe,MAAU;CAC3B,IAAM,EAAE,uBAAoB,GAAG,MAAqB;AAEpD,QAAuB,kBAAIC,IAAsB;EAAE,GAD/B,GAAe,EAAmB;EACa,GAAG;EAAkB,OAAO;EAAM,CAAC;;AAExG,GAAY,cAAc;AAC1B,IAAI,KAAe,sBACfC,KAAqBC,EAAM,YAC5B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAiB;AAEhD,QAAuB,kBAAIC,IAAyB;EAAE,GADlC,GAAe,EAAmB;EACgB,GAAG;EAAc,KAAK;EAAc,CAAC;EAE9G;AACD,GAAmB,cAAc;AACjC,IAAI,KAAc,qBACdC,MAAqB,MAAU;CACjC,IAAM,EAAE,uBAAoB,GAAG,MAAgB;AAE/C,QAAuB,kBAAIC,IAAwB;EAAE,GADjC,GAAe,EAAmB;EACe,GAAG;EAAa,CAAC;;AAExF,GAAkB,cAAc;AAChC,IAAI,KAAe,sBACfC,KAAqBJ,EAAM,YAC5B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAiB;AAEhD,QAAuB,kBAAIK,IAAyB;EAAE,GADlC,GAAe,EAAmB;EACgB,GAAG;EAAc,KAAK;EAAc,CAAC;EAE9G;AACD,GAAmB,cAAc;AACjC,IAAI,KAAe,sBACf,CAAC,IAA4B,MAAgC,GAAyB,GAAa,EACnG,KAAY,mBAAgB,qBAAqB,EACjDC,KAAqBN,EAAM,YAC5B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,aAAU,GAAG,MAAiB,GACpD,IAAc,GAAe,EAAmB,EAChD,IAAaA,EAAM,OAAO,KAAK,EAC/B,IAAe,EAAgB,GAAc,EAAW,EACxD,IAAYA,EAAM,OAAO,KAAK;AACpC,QAAuB,kBACrBO,IACA;EACE,aAAa;EACb,WAAW;EACX,UAAU;EACV,UAA0B,kBAAI,IAA4B;GAAE,OAAO;GAAoB;GAAW,UAA0B,kBAC1HC,IACA;IACE,MAAM;IACN,GAAG;IACH,GAAG;IACH,KAAK;IACL,iBAAiB,EAAqB,EAAa,kBAAkB,MAAU;AAE7E,KADA,EAAM,gBAAgB,EACtB,EAAU,SAAS,MAAM,EAAE,eAAe,IAAM,CAAC;MACjD;IACF,uBAAuB,MAAU,EAAM,gBAAgB;IACvD,oBAAoB,MAAU,EAAM,gBAAgB;IACpD,UAAU,CACQ,kBAAI,IAAW,EAAE,aAAU,CAAC,EAC5B,kBAAI,IAAoB,EAAE,eAAY,CAAC,CACxD;IACF,CACF;GAAE,CAAC;EACL,CACF;EAEJ;AACD,GAAmB,cAAc;AACjC,IAAI,KAAa,oBACbC,KAAmBT,EAAM,YAC1B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAe;AAE9C,QAAuB,kBAAIU,IAAuB;EAAE,GADhC,GAAe,EAAmB;EACc,GAAG;EAAY,KAAK;EAAc,CAAC;EAE1G;AACD,GAAiB,cAAc;AAC/B,IAAI,KAAmB,0BACnBC,KAAyBX,EAAM,YAAY,GAAO,MAAiB;CACrE,IAAM,EAAE,uBAAoB,GAAG,MAAqB;AAEpD,QAAuB,kBAAIY,IAA6B;EAAE,GADtC,GAAe,EAAmB;EACoB,GAAG;EAAkB,KAAK;EAAc,CAAC;EACnH;AACF,GAAuB,cAAc;AACrC,IAAI,KAAc,qBACdC,KAAoBb,EAAM,YAC3B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAgB;AAE/C,QAAuB,kBAAIc,IAAuB;EAAE,GADhC,GAAe,EAAmB;EACc,GAAG;EAAa,KAAK;EAAc,CAAC;EAE3G;AACD,GAAkB,cAAc;AAChC,IAAI,KAAc,qBACdC,KAAoBf,EAAM,YAC3B,GAAO,MAAiB;CACvB,IAAM,EAAE,uBAAoB,GAAG,MAAgB,GACzC,EAAE,iBAAc,GAA6B,IAAa,EAAmB,EAC7E,IAAc,GAAe,EAAmB,EAChD,IAAM,EAAgB,GAAc,EAAU;AACpD,QAAuB,kBAAIc,IAAuB;EAAE,GAAG;EAAa,GAAG;EAAa;EAAK,CAAC;EAE7F;AACD,GAAkB,cAAc;AAChC,IAAI,MAAsB,EAAE,oBAAiB;CAC3C,IAAM,IAAU,KAAK,GAAa;;qCAEC,GAAa,oBAAoB,GAAiB;;4JAEqE,GAAa;;;AASvK,QANA,EAAM,gBAAgB;AAIpB,EAHuB,SAAS,eAC9B,EAAW,SAAS,aAAa,mBAAmB,CACrD,IACoB,QAAQ,KAAK,EAAQ;IACzC,CAAC,GAAS,EAAW,CAAC,EAClB;GAEL,KAAQjB,IACR,KAAWE,IACX,KAAUG,IACV,KAAWE,IACX,KAAWE,IACX,KAASO,IACT,KAASE,IACT,KAASN,IACT,KAAeE,IC1Ib,KAAc,IAEd,KAAqB;AAE3B,SAAS,GAAkB,EACzB,cACA,GAAG,KACwD;CAC3D,IAAM,IAAkB,GAAoB,EACtC,IAAe,GAAiB,EAChC,CAAC,GAAY,KAAiB,EAAM,SAAgC,KAAK;AAY/E,QAVA,EAAM,sBAAsB;AAC1B,MAAI,KAAa,EAAiB;EAClC,IAAM,IAAM,SAAS,cAAc,MAAM;AAKzC,SAJA,EAAI,KAAK,mCACL,MAAc,EAAI,YAAY,IAClC,SAAS,gBAAgB,YAAY,EAAI,EACzC,EAAc,EAAI,QACL,EAAI,QAAQ;IACxB;EAAC;EAAW;EAAiB;EAAa,CAAC,EAG5C,kBAAC,IAAD;EACE,WAAW,KAAa,KAAmB,KAAc,KAAA;EACzD,GAAI;EACJ,CAAA;;AAIN,IAAM,KAAqB,EAAM,YAG9B,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EACT,0JACA,EACD;CACD,GAAI;CACJ,CAAA,CACF;AACF,GAAmB,cAAA,GAA2C;AAE9D,IAAM,KAAqB,EAAM,YAG9B,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD,EAAA,UAAA,CACE,kBAAC,IAAD,EAAsB,CAAA,EACtB,kBAAC,IAAD;CACO;CACL,WAAW,EACT,uVACA,EACD;CACD,GAAI;CACJ,CAAA,CACgB,EAAA,CAAA,CACpB;AACF,GAAmB,cAAA,GAA2C;AAE9D,IAAM,MAAqB,EACzB,cACA,GAAG,QAEH,kBAAC,OAAD;CACE,WAAW,EAAG,oDAAoD,EAAU;CAC5E,GAAI;CACJ,CAAA;AAEJ,GAAkB,cAAc;AAEhC,IAAM,MAAqB,EACzB,cACA,GAAG,QAEH,kBAAC,OAAD;CACE,WAAW,EACT,0DACA,EACD;CACD,GAAI;CACJ,CAAA;AAEJ,GAAkB,cAAc;AAEhC,IAAM,KAAmB,EAAM,YAG5B,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,yBAAyB,EAAU;CACjD,GAAI;CACJ,CAAA,CACF;AACF,GAAiB,cAAA,GAAyC;AAE1D,IAAM,KAAyB,EAAM,YAGlC,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,iCAAiC,EAAU;CACzD,GAAI;CACJ,CAAA,CACF;AACF,GAAuB,cAAA,GACY;AAEnC,IAAM,KAAoB,EAAM,YAG7B,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,IAAgB,EAAE,EAAU;CAC1C,GAAI;CACJ,CAAA,CACF;AACF,GAAkB,cAAA,GAA0C;AAE5D,IAAM,KAAoB,EAAM,YAG7B,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,IAAD;CACO;CACL,WAAW,EAAG,GAAe,EAAE,SAAS,WAAW,CAAC,EAAE,EAAU;CAChE,GAAI;CACJ,CAAA,CACF;AACF,GAAkB,cAAA,GAA0C"}
|